저번에 리눅스에서의 파일 시스템에 대해 알아보았다.
하드디스크에 존재하는 "파일"이 실행되면 "프로세스"가 되는 것은 알고 있을 것임.
이번에는 이 프로세스에 관한 얘기를 좀 해볼까 한다.
위 그림을 보면 실행파일과 일반 파일이 실행되고 open/read 작업에 의해 메모리에
올라가있는 상태를 볼 수 있다.
응? FCB, PCB는 뭐지.
FCB는 File Control Block, PCB는 Process Control Block 이다.
이 녀석들은 메타데이터(meta data)라고 하는데,
메타데이터란, 실제 파일들을 관리하기 위해 가공된 정보이다.
얘내들은 커널 공간에 존재한다.
파일을 관리하기 위해서 이것저것 많은 내용을 내포하고 있음.
아래는 FCB에 들어 있는 내용이다.
프로세스는 하드디스크에 있는 실행파일을 실행시키며 메모리에 올라오면서 생성되는 것이다.
이 프로세스를 관리하기 위한 것이 PCB(Process Control Block) 이고,
프로세스는 일단 파일이다. (실행 되는 파일) 이 파일에 대한 제어를 하는 메타데이터가
FCB(File Control Block) 이다.
리눅스 환경에서 작업을 하다보면 똑같은 파일에 대한 2개 이상의 프로세스가 실행될 수도 있다.
옛날에는 아래 그림처럼 각각의 FCB를 따로 할당받아 프로세스가 실행되었다.
근데 위에 그림처럼 되니까 문제가 생긴다.
만약 두개의 프로세스 A,B 가 실행중일 때, 한쪽에서 chmod로 권한 변경을 시도한다면??
문제가 생긴다. 불일치의 문제가 생기고 효율적이지 못하게 된다.
일단 아래 그림을 보자.
FCB를 공유 하는 것이다. 단 offset 값만 제외하고.
offset을 제외한 다른 값들을 모두 같은 FCB로 공유를 하는 것이다.
그리고 나서 vnode라는 개념을 도입한다.
offset값은 파일 테이블이라는 곳에 저장을 하고, 나머지 값들은 v-node 라는 곳에 저장한다.
이 v-node는 같은 파일을 사용하는 프로세스들이 공유하는 것이다.
file table 은 프로세스 마다 할당되는 것이고, offset 값과 v-node와 연결하는 포인터가 존재한다.
v-node는 파일마다 할당되는 것이다. 그래서 같은 파일을 사용하는 프로세스들은 v-node를 공유함.
그리고 난 다음 파일에 대한 접근을 용이하게 하기위해 file descriptor 라는 개념을 도입한다.
파일 디스크립터는 프로세스마다 하나씩 부여받는 일종의 인덱스 같은 것이다.
파일디스크립터는 프로세스 테이블 엔트리라고도 부르며, 파일디스크립터 값(양의 정수)과
파일 포인터가 존재한다. 파일포인터는 파일 테이블을 가르키는 포인터이다.
결국에는 리눅스에서 파일을 공유하기 위해서는 3가지가 필요하다.
파일 디스크립터 테이블, 파일 테이블, v-node 테이블
실제로 각자 프로세스가 파일을 공유할 때 그림을 한번 보자
'IT 그리고 정보보안 > Knowledge base' 카테고리의 다른 글
리눅스 파일 시간값 (0) | 2021.04.18 |
---|---|
하드 링크 / 심볼릭 링크 (0) | 2021.04.18 |
아이노드 ( i-node ) (0) | 2021.04.18 |
strace, ltrace (0) | 2021.04.18 |
PLT (Procedure Linkage Table), GOT(Global Offset Table) (0) | 2021.04.18 |