Unix 에서 네트워크 소켓과 같은 파일이나 기타 입력/출력 리소스에 액세스하는데 사용되는 추상표현이다.
소켓과 파일등에 할당 받은 양의 정수값 이고 프로그램이 메모리에 탑재되어 실행되면 기본적으로 탑재된다.
Unix 에서는 standard stream 에 0번에서 2번까지는 고정된 file descriptor 를 가진다. (unistd.h 헤더파일에 명시)
File Descriptor 는 Process 마다 같을 수도, 다를 수도 있다.
즉, 프로세스마다 개별 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 이다.
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) 를 더 가지고 있다.
file type | function pointers | inode | reference count | ... |
TYPE (regfile, directory, ...) | *** | I-NODE_NO | OPEN_FILE_TABLE_COUNT | ... |
프로세스가 파일을 열면 v-node 테이블에 빈 엔트리를 할당하고 디스크로부터 해당 파일의 속성정보를 가져와 저장한다. 하나의 파일에 대해서 하나의 v-node 테이블 엔트리만 존재하기에, 하나의 파일을 두번 이상 열 때는 이미 할당된 v-node 엔트리를 공유한다.
심볼릭 링크 (Symbolic Link) (0) | 2025.02.27 |
---|---|
Found a swap file by the name 해결 방법 (0) | 2024.06.03 |
리눅스(Linux) 설명과 기본 명령어 (0) | 2024.05.09 |