bb8.1_1__2. title: 유닉스(UNIX) 시스템과 유닉스 계열(‣) 시스템에서는 1973년부터 파일에 접근할 때 파일 디스크립터(File descriptor)라는 추상적인 핸들을 이용한다. 이를 기준삼아 다양한 추상화 수준을 엿볼 수 있다. 우리에게 가장 익숙한 파일 포인터는 파일 디스크립터를 애플리케이션 프로그래머가 사용하기 쉽도록 추상화한 것이다. 파일 디스크립터는 각 프로세스에 의해 열린 파일들을 저장하는 구조체 배열인 파일 디스크립터 테이블을 추상화한다. 파일 디스크립터 테이블은 모든 프로세스에 의해 열린 파일들은 저장하는 파일 테이블(File table)을 추상화한다. 파일 테이블은 실제로 파일의 내용을 포함하고 있는 아이노드 테이블(Inode table)을 추상화한다.
Search
🌍

bb8.1_1__2. title: 유닉스(UNIX) 시스템과 유닉스 계열(‣) 시스템에서는 1973년부터 파일에 접근할 때 파일 디스크립터(File descriptor)라는 추상적인 핸들을 이용한다. 이를 기준삼아 다양한 추상화 수준을 엿볼 수 있다. 우리에게 가장 익숙한 파일 포인터는 파일 디스크립터를 애플리케이션 프로그래머가 사용하기 쉽도록 추상화한 것이다. 파일 디스크립터는 각 프로세스에 의해 열린 파일들을 저장하는 구조체 배열인 파일 디스크립터 테이블을 추상화한다. 파일 디스크립터 테이블은 모든 프로세스에 의해 열린 파일들은 저장하는 파일 테이블(File table)을 추상화한다. 파일 테이블은 실제로 파일의 내용을 포함하고 있는 아이노드 테이블(Inode table)을 추상화한다.

생성
🚀 prev note
🚀 next note
14 more properties
유닉스(UNIX) 시스템과 유닉스 계열(Unix-like)(from2)시스템에서 파일에 접근할 때 파일 디스크립터라는 추상적인 핸들을 이용한다(참고7)(from1:당연히 여기서 말하는 파일이라는 것이 꼭 우리가 생각하는 문서 따위의 파일이 아니라는 것을 이해해야 한다. 터미널에 출력하는 것도 파일 출력이고, 디바이스에 쓰는 것도 파일 출력이다). 파일 디스크립터라는 아이디어는 유닉스 태동과 거의 동시에 생겨난 아이디어다(from1). 이렇게 역사깊은 아이디어를 기준으로 다양한 추상화 수준을 엿볼 수 있다.
우리가 평소 사용하는 파일 포인터파일 디스크립터를 애플리케이션 프로그래머가 사용하기 쉽도록 추상화한 것이다(참고4)(to1:추상화하지 못한 부분). 파일 디스크립터는 각 프로세스에 의해 열린 파일들을 저장하는 구조체 배열인 파일 디스크립터 테이블을 추상화한다. 파일 디스크립터 테이블은 모든 프로세스에 의해 열린 파일들을 저장하는 파일 테이블을 추상화한다. 파일 테이블은 실제로 파일의 내용을 포함하고 있는 아이노드 테이블을 추상화한다(참고3).
위 그림은 파일 테이블, 프로세스, 파일 디스크립터 테이블 사이의 관계를 나타냈다. 붉은색 박스는 하나의 프로세스가 사용하는 메모리 영역을 나타낸다. 푸른색에 해당하는 파일 디스크립터 테이블은 커널을 통해서만 편집이 가능하다. 이때 저 영역의 파일 디스크립터도 파일로서 존재한다. 리눅스의 경우 /proc 디렉토리에서 사용 중인 프로세스들의 목록을 확인할 수 있다. 해당 디렉토리에서 특정 프로세스 ID를 이용해 또다시 하위 디렉토리로 내려가면 /proc/{pid}/fd/ 디렉토리를 찾을 수 있고, 이 디렉토리에 파일 디스크립터 테이블이 존재한다(참고5).
표로 정리하면 다음과 같다.
컨테이너
자료형
작동범위
파일 포인터
포인터
애플리케이션이 작동 중인 프로세스
파일 디스크립터
정수
애플리케이션이 작동 중인 프로세스
파일 디스크립터 테이블의 인덱스.
파일 디스크립터 테이블
구조체 배열
애플리케이션이 작동 중인 프로세스
열려 있는 프로세스들의 목록. 파일 테이블의 포인터를 가지고 있음(참고6).
파일 테이블
모든 프로세스(참고3)
아이노드 테이블의 포인터를 가지고 있음.
아이노드 테이블
전체 메모리(참고3)
실제로 기록되어 있는 데이터를 추상화함(참고3).
parse me : 언젠가 이 글에 쓰이면 좋을 것 같은 재료들.
from : 과거의 어떤 생각이 이 생각을 만들었는가?
supplementary : 어떤 새로운 생각이 이 문서에 작성된 생각을 뒷받침하는가?
opposite : 어떤 새로운 생각이 이 문서에 작성된 생각과 대조되는가?
1.
None
to : 이 문서에 작성된 생각이 어떤 생각으로 발전되고 이어지는가?
1.
참고 : 레퍼런스