가상파일시

포스트: 14|조회수: 0|TERM
Items

Posts

14 posts

[리눅스커널][가상파일시스템] 파일 객체: write 연산 세부 동작 분석

Guillermo Austin Kim|2019년 3월 21일

파일 객체: write 연산 세부 동작 분석 유저 공간에서 write() 함수를 호출할 때 가상 파일시스템에서 어떤 흐름으로 파일 별 write 오퍼레이션을 수행하는지 살펴보겠습니다. 유저 공간에서 리눅스 저수준 함수로 write() 함수를 호출하면 시스템 콜을 발생시켜 커널 공간으로 실행 흐름을 스위칭합니다. 이 후 write()에 해당하는 시스템 콜 핸들러인 sys_write() 함수를 호출합니다. 먼저 sys_write() 함수 선언부와 인자와 반환값을 확인하겠습니다.[https://elixir.bootlin.com/linux/v4.19.30/source/include/linux/syscalls.h]asmlinkage long sys_write(unsigned int fd, const char _

[리눅스커널][가상파일시스템] open(): 파일 객체를 오픈할 때 세부 동작

Guillermo Austin Kim|2019년 3월 18일

open(): 파일 객체를 오픈할 때 세부 동작 유저 공간에서 open() 함수를 실행하면 커널 공간에서 다음 그림과 같은 함수 흐름을 확인할 수 있습니다. 위 그림은 유저 공간에서 함수 오픈 오퍼레이션을 실행할 때 함수 실행 흐름입니다. 유저 공간에서 open() 함수를 호출하면 시스템 콜을 발생시켜 실행 흐름이 커널 공간으로 바뀝니다. 이후 open() 함수에 해당하는 시스템 콜 핸들러 함수인 sys_open() 함수가 실행 한 후 ext4 파일시스템에서 관리하는 파일 오픈 함수인 ext4_file_open() 함수를 호출합니다. 이전 절에서 유저 공간에서 read() 혹은 write() 함수를 실행할 때도 위와 비슷한 함수 실행 흐름을 확인했습니다. 파일을 오픈할 때는 read()나 write(

[리눅스커널][가상파일시스템] 파일 객체란

Guillermo Austin Kim|2019년 3월 7일

파일 객체대부분 유저는 파일을 생성하고 읽고 쓰기 위한 용도로 씁니다. 이 때 파일 동작에 대한 상세 규칙과 속성은 파일 객체에서 확인할 수 있습니다. 만약 라즈베리파이에서 2개 Geany프로그램에서 1개 파일을 열 수 있습니다. 이 때 몇 개 파일 객체가 생성될까요? 2개 파일 객체는 각각 프로세스 별로 생성합니다. 파일 객체는 이렇게 파일을 오픈하고 읽고 쓰는 상황에서 프로세스가 파일을 관리하기 위해 생성합니다. 파일 객체에 대한 상세 내용은 struct file 구조체에서 확인할 수 있습니다. 다음 소절에서 struct file 구조체에 대해 알아보겠습니다. struc file 구조체 분석 파일 객체는 다음 해더 파일에 정의돼 있습니다.[https://elixir.bootlin.com/linux

[라즈베리파이] 가상 파일시스템 동작 분석(유저 프로세스 입장)

Guillermo Austin Kim|2019년 1월 3일

이번에 유저 어플리케이션 입장에서 가상 파일시스템 동작을 살펴보겠습니다. 먼저 유저 공간에서 실행하는 다음 코드를 같이 작성해 봅시다.1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 89 #define FILENAME_NAME "/home/pi/sample_text.text"1011 int main() 12 { 13 int fd = 0;14 ssize_t read_buf_size;15 off_t new_file_pos;