-
[Linux] 파일 디스크립터 (File Descriptor)Engineering/Operating System 2021. 3. 13. 20:13반응형
파일 디스크립터
유닉스 계열의 시스템에서는 모든 것을 파일로 관리합니다. 이러한 유닉스 시스템에서 프로세스들은 파일 디스크립터를 이용하여 다른 IO 장치, 네트워크 소켓, pipe 등과 같은 장치에 접근할 수 있습니다.
데이터는 Byte를 한 곳에서 다른 곳으로 전송하는 Stream을 통해서 흘러갑니다. 이러한 IO Stream에는 기본적으로 세 가지가 있습니다.
- 표준 입력 : standard input (stdin)
- 표준 출력 : standard output (stdout)
- 표준 오류 : standard error (stderr)
위의 표준 Stream 들은 각각 파일 디스크립터를 가지고 있는데, 이 파일 디스크립터는 음이 아닌 정수 값입니다. 이러한 기본 Stream은 다음과 같은 파일 디스크립터 값을 가지고 있습니다. (표준 입력 = 0, 표준 출력 = 1, 표준 오류 = 2)
File Descriptor Table
각각의 프로세스는 파일 디스크립터 테이블을 가지고 있고, 파일 디스크립터 테이블에는 파일 디스크립터가 저장되어 있습니다. 파일 디스크립터 테이블은 프로세스가 생성될 때 기본적으로 0, 1, 2에 해당하는 파일 디스크립터가 맵핑됩니다. 이외에도 프로세스는 다른 파일 디스크립터를 사용하는데, 새로운 파일 디스크립터가 할당될 때에는 아직 사용되지 않은 가장 작은 숫자의 파일 디스크립터가 사용됩니다.
파일 디스크립터 테이블에 맵핑된 파일 디스크립터는 Open File Table 의 엔트리에 대한 포인터를 가지고 있습니다.
Open File Table
각 프로세스는 시스템 콜을 통해 파일을 open 할 때마다 Open file table에 엔트리가 생성되고, close() 시스템 콜에 의해 닫을 때 엔트리가 해제됩니다. 따라서 여러 프로세스가 동시에 하나의 파일에 접근한다면 Open file table에 여러 엔트리가 존재할 수 있게 됩니다. 이러한 이유로 여러 엔트리에 참조되는 파일은 물리적으로 같은 파일일 수도 있습니다.
참고자료
www.rozmichelle.com/pipes-forks-dups/
Pipes, Forks, & Dups: Understanding Command Execution and Input/Output Data Flow
I’m currently enrolled in a systems programming class at Stanford (CS110: Principles of Computer Systems). It is the second systems class I’ve taken (the first was CS107 which teaches C…
www.rozmichelle.com
파일 디스크립터
- 유닉스 계열에서 모든 객체들(정규파일, 디렉터리, 소켓, 파이프 등등)은 모두 '파일'로써 관리가 됨. - 시스템에서 이 파일들을 접근할 때, 파일 디스크립터를 이용 - 프로세스가 실행 중에 파
kye139.tistory.com
stackoverflow.com/questions/14189944/unix-system-file-tables
Unix system file tables
I am confused about Unix system file tables. When two or more processes open a file for reading, does the system file table create separate entries for each process or a single entry? If a single ...
stackoverflow.com
반응형'Engineering > Operating System' 카테고리의 다른 글
Shell Script 문법 요약 정리 링크 (0) 2020.12.22 [Linux Command] vmstat 명령어 (0) 2020.10.07