-
Linux File DescriptorLinux & Shell 2019. 7. 25. 08:54728x90반응형
소개
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