파일 IO에 따른 OS(Operating System)의 동작을 이해하기 위해 공부한 것을 정리했다. OS 공룡책에서 10.1.2 파일 연산(File Operations)를 읽고 정리한 내용이다.
운영체제는 파일 생성, 파일 쓰기, 파일 읽기, 위치 재설정, 파일 삭제, 파일 절단의 6개의 기본적인 시스템콜을 제공한다. 이 6개의 file operation이 실행될 때 OS는 어떤 일을 수행하는지 알아보자.
파일 생성
파일 쓰기
파일 읽기
파일 안에서의 위치 재설정
파일 삭제
파일 절단
이 외에 파일 끝에 첨가 혹은 재명명 등의 기본적인 연산들이 있다. 이러한 기본적인 연산들의 조합으로 다른 파일 조작 연산들을 수행할 수 있다.
대부분의 파일 연산은 지명된 파일과 관련 디렉토리를 찾는 작업을 한다. 따라서 반복 탐색을 피하기 위해 많은 시스템들은 파일을 사용하기 전에 open() 시스템콜을 해야한다. open을 하게 되면 운영체제는 open-file table의 인덱스로 그 파일을 지정하고 파일 연산 발생시 이 테이블을 사용한다. 파일이 더 이상 실제로 사용되지 않으면 프로세스에 의해 이 파일은 닫히고 운영체제는 항목을 open-file table에서 삭제한다.
open() 연산은 그 파일의 이름을 가지고 디렉토리를 탐색하고 그 파일을 open-file table에 복사한다. 뿐만 아니라 open은 접근 모드(read, write, readWrite….)정보를 받을 수 있다. 이 모드를 파일 허가와 대조하여 허용되면 파일을 연다.
open()은 일반적으로 open-file table의 index pointer를 리턴한다. open-table pointer를 입출력 연산에 사용함으로써 시스템 호출 인터페이스를 단순화한다.
멀티 프로세스 시스템에서 동시에 파일을 열 수 있는 환경이라면 open(), close() 연산이 복잡해 진다. 보통 운영체제는 프로세스별 테이블과 범 시스템 테이블 두개를 동시에 사용한다. 프로세스별 테이블은 각 프로세스가 연 파일들이 기록된다. 각 파일에 대한 current file position pointer도 여기에 존재한다. 프로세스별 테이블의 각 항목은 다시 범 시스템 테이블을 가리킨다. 이 범 시스템 테이블은 프로세스의 위치, 접근 날짜 그리고 파일 크기와 같은 정보들을 갖고 있다.
이미 열려있는 파일을 다른 프로세스가 열면 프로세스별 open-file table에 단순히 범 프로세스 테이블을 가리키는 항목을 추가한다. 일반적으로 open-file table은 파일을 연 프로세스 수를 나타내는 카운터를 가지고 있다. 카운터가 0이 되면 파일은 더 이상 사용되지 않고 있음을 나타내고 open-file table로부터 제거된다.