ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Linux File Descriptor
    Linux & Shell 2019. 7. 25. 08:54
    728x90
    반응형

     

    소개

    File Descriptor 는 프로세스가 관리하는 파일의 식별값입니다.

    만약 프로세스가 read, write 등의 방식으로 파일에 접근하게 되면 커널은 프로세스에게 해당 파일의 식별값을 제공합니다.

    예를 들어

    A process 가 특정 파일 a.txt 를 read 하게 되면, 커널은 A process 에게 a.txt 에 대한 식별값으로 5 와 같은 정수형 숫자를 제공합니다.

    그렇게 되면 A process 는 5 라는 식별값을 가지고 커널에게 a.txt 파일에 대한 작업을 요청합니다.

    "어떤 문구를 추가한다던지", "읽는다던지", "파일 자체를 삭제해버린다던지" 등의 요청을 커널과 주고 받을 수 있는데,

    이때 5 라는 식별값으로 소통을 하게 됩니다.

    그리고 이 식별값을 File Descriptor 라고 부릅니다.

     

    이러한 과정은 open 이라는 file 관련 system call 로써 수행되며,

    close system call 를 통해 커널로부터 제공받은 File Descriptor 를 반환할 수도 있습니다.

     

    File Descriptor Table

    프로세스는 커널로부터 제공받은 File Descriptor 들을 File Descriptor Table 에 저장합니다.

    File Descriptor Table 는 File Descriptor 를 저장하는 자료구조이며, Array 형식의 구조입니다.

    그리고 프로세스마다 File Descriptor Table 을 하나씩 가집니다.

     

    File Descriptor 에 해당하는 positive integer 이 File Descriptor Table 의 index 가 되고,

    index 에 대응하는 value 는 File Table 이라는 또다른 자료구조를 가리킵니다.

     

    커널은 open system call 의 결과로써 File Table 에 open file 에 대한 정보를 생성하게 되는데,

    ( 생성된 정보를 File Table Entry 라고 부릅니다. )

    프로세스의 File Descriptor Table 에 File Descriptor 를 생성하고, File Table Entry 와 연결시킵니다.

    이 때, File Descriptor Table 의 빈 index 에 File Descriptor 를 생성하게 됩니다. (index 0부터 탐색)

     

    File Table

    File Table 에 생성되는 요소들을 File Table Entry 라고 부릅니다.

    프로세스 A 가 a.txt 파일 1개를 open 한 경우에, File Table Entry 가 1개 생기게 되는데요.

    이 상황에서 File Descriptor Table 과 File Table 의 상태는 다음과 같습니다.

     

    - File Table 에 a.txt 에 대한 File Table Entry 생성됨.

    - File Descriptor 의 값은 3

    - File Descriptor Table 에 3번 index 와 value 가 생성됨.

    - File Descriptor Table 의 3번 index 의 value 은 a.txt 에 대한 File Table Entry 의 주소.

     

    <출처 : en.wikipedia.org>

     

     

    vnode

    vnode 는 활성화된 파일을 나타내는 Linux 의 구조체입니다.

    여러가지 파일 시스템을 수용하기 위해서 vnode 라는 추상화 레벨이 추가되었습니다.

     

    File Descriptor -> File Table Entry -> vnode -> inode -> data block

    으로 데이터들이 연결된다고 생각하시면 됩니다.

     

    vnode 는 특정 파일이 open 될 때, vnode table 에 생성되며,

    연쇄적으로 File Table 와 File Descriptor Table 의 entry 들이 생성됩니다.

     

    vnode 는 여러 파일 시스템을 수용하기 위한 추상화 개념이기 때문에

    ext 인 리눅스 파일 시스템이 아니여도 사용이 가능합니다.

     

    FAT 을 예로 들면,

    File Descriptor -> File Table Entry -> vnode -> fat entry -> data block

    와 같은 식으로 데이터의 연결고리가 형성됩니다.

     

     

    반응형

    'Linux & Shell' 카테고리의 다른 글

    Linux date 알아보기  (0) 2023.09.20
    [Linux] SSH (Secure Shell)  (0) 2023.09.17
    Linux /etc/resolv.conf  (0) 2023.09.13
    [linux] jq 사용법  (0) 2023.09.12
    Linux awk 알아보기  (0) 2021.12.04
Designed by Tistory.