본문 바로가기

C언어/시스템 소프트웨어

[시스템 소프트웨어] File Sharing (file offset)

728x90
반응형

File Sharing

 

int fd1 = open("a.txt", O_RDONLY);
int fd2 = open("a.txt", O_RDONLY);

 

위 코드처럼 하나의 파일을 두 번 연속 열게 되면 file offset은 어떻게 될까?

 

파일을 열게 되면 디스크(저장장치)에서 파일의 메타데이터를 불러와서 V-node Table에서 관리한다고 했었다.

 

다시 한번 열게 되더라도 메모리 상에는 이미 파일의 메타데이터가 올라와있기 때문에 그 데이터를 그대로 사용한다.

따라서 V-node Table에 파일의 메타데이터는 한 번만 올라오게 된다.

 

이후 Open File Entry가 생성되는데 이것은 파일을 열 때마다 생성되기 때문에 파일을 두 번 열었을 경우 Open File Entry는 두 개 생성된다.

 

이 두 개의 Open File Entry는 같은 파일의 데이터를 사용하기 때문에 동일한 V-node Entry를 가리키고 있다.

 

또한 두 개의 Open File Entry는 각각 하나씩 File Descriptor를 갖고 있다.

 

이 두 개의 File Descriptor는 Descriptor Table에서 관리된다.

 

File offset은 Open File Entry에 속해있고 Open File Table에서 관리된다.

 

파일의 작업 중인 위치는 파일이 작업 중이어야만 쓸모가 있다.

따라서 파일이 열렸을 때 그 정보를 다루는 Open File Table에서 관리되는 것이다.

 

따라서 하나의 파일이더라도 여러 번 open하게 되면 각각의 File offset을 갖게 되는 것이다.

 

우리가 동일한 텍스트 파일을 두 번 열었을 때 하나의 창에서 커서의 위치를 옮긴다고 다른 창에서 커서가 움직이지 않는 것과 같은 원리다.

 

 

 

 

 

한 줄 요약

- 파일을 여러 번 오픈해도 파일 오프셋은 각각 따로 생성되기 때문에 작업 공간을 공유하지 않는다.

 

 

728x90
반응형