상세 컨텐츠

본문 제목

파일 디스크립터 (File Descriptor) 란?

DevOps/OS

by code_down 2024. 5. 10. 15:30

본문

FD (File Descriptor) 란?

Unix 에서 네트워크 소켓과 같은 파일이나 기타 입력/출력 리소스에 액세스하는데 사용되는 추상표현이다.

소켓과 파일등에 할당 받은 양의 정수값 이고 프로그램이 메모리에 탑재되어 실행되면 기본적으로 탑재된다.

Unix 에서는 standard stream 에 0번에서 2번까지는 고정 file descriptor 를 가진다. (unistd.h 헤더파일에 명시)

 

File Descriptor 는 Process 마다 같을 수도, 다를 수도 있다.

즉, 프로세스마다 개별 File Descriptor Table 을 가진다.

 

File Descriptor Table

file descriptor name <unistd.h> symbolic constant <stdio.h> file stream ...
0 Standard input STDIN_FILE_NO stdin ...
1 Standard output STDOUT_FILE _ NO stdout ...
2 Standard error STDERR_FILE _ NO stderr ...

 

프로세스가 현재 사용중인 파일을 관리하기 위한 테이블이며, 프로세스마다 하나씩 가지고 있다.

File Table을 가리키는 포인터를 담고있는 테이블이고, index가 FD 이다.

 

Open File Table

file status flags current file offset vnode pointer reference count ...
STATUS (O_ASYNC, O_NONBLOCK, ...) CURRENT_FILE_NO VNODE_NO PD_COUNT ...

 

Open File Table 은 모든 프로세스가 접근할 수 있게 공유되어있다. (shared by all processes)

파일이 open 될 때 마다, Open File Table Entry 가 할당되고, close 될 때 해제된다.

(파일을 open 하게 되면 파일의 메타데이터가 메모리에 올려지게 된다)

디스크의 메타 데이터 보다 추가 정보 (reference count 와 current file offset) 를 더 가지고 있다.

 

Open File Table Entry 예제)

 

V-Node Table

file type function pointers inode reference count ...
TYPE (regfile, directory, ...) *** I-NODE_NO OPEN_FILE_TABLE_COUNT ...

 

프로세스가 파일을 열면 v-node 테이블에 빈 엔트리를 할당하고 디스크로부터 해당 파일의 속성정보를 가져와 저장한다. 하나의 파일에 대해서 하나의 v-node 테이블 엔트리만 존재하기에, 하나의 파일을 두번 이상 열 때는 이미 할당된 v-node 엔트리를 공유한다.

 

V-Node Table Entry 예제)

'DevOps > OS' 카테고리의 다른 글

심볼릭 링크 (Symbolic Link)  (0) 2025.02.27
Found a swap file by the name 해결 방법  (0) 2024.06.03
리눅스(Linux) 설명과 기본 명령어  (0) 2024.05.09