Intro

파일 IO에 따른 OS(Operating System)의 동작을 이해하기 위해 공부한 것을 정리했다. OS 공룡책에서 10.1.2 파일 연산(File Operations)를 읽고 정리한 내용이다.

목차

  • File Operations
  • open() System call
  • 멀티 프로세스에서 open()

File Operations

운영체제는 파일 생성, 파일 쓰기, 파일 읽기, 위치 재설정, 파일 삭제, 파일 절단의 6개의 기본적인 시스템콜을 제공한다. 이 6개의 file operation이 실행될 때 OS는 어떤 일을 수행하는지 알아보자.

  • 파일 생성

    • 파일 시스템 내에서 파일을 저장할 수 있는 공간을 찾는다.
    • 새로 생성된 파일에 대한 항목을 디렉토리에 생성한다.
  • 파일 쓰기

    • 파일 이름과 기록될 정보를 명시하는 시스템콜을 실행한다.
    • 시스템은 그 이름을 갖는 파일의 위치를 찾기위해 디렉토리를 탐색한다.
    • 파일 내에서 write pointer를 유지해서 다음 쓰기가 일어날 위치를 표시한다. 이 포인터는 쓰기가 일어날때마다 갱신된다.
  • 파일 읽기

    • 파일의 이름과 파일이 읽혀 들어갈 블록의 위치를 명시하는 시스템콜을 실행한다.
    • 시스템은 그 이름을 갖는 파일의 위치를 찾기 위해 디렉토리를 탐색한다.
    • 파일 내에서 read pointer를 유지해서 다음 읽기가 발생할 위치를 표시한다. 읽기가 발생할때마다 이 포이터는 갱신된다.
    • 대부분의 시스템은 current file position pointer를 가지기 때문에 읽기, 쓰기 연산 모두 이 포인터를 사용할 수 있다.
  • 파일 안에서의 위치 재설정

    • 디렉토리에서 항목을 탐색하고 현재 파일 위치를 주어진 값으로 설정한다.
  • 파일 삭제

    • 지명된 파일을 디렉토리에서 찾는다.
    • 해당 파일이 차지하고 있는 공간을 방출하고 디렉토리 항목을 삭제한다.
  • 파일 절단

    • 파일의 내용은 지우고 속성만 남길때 사용되는 연산이다.
    • 파일의 길이를 0으로 재설정한다.
    • 파일이 갖고있던 공간은 해제한다.

    이 외에 파일 끝에 첨가 혹은 재명명 등의 기본적인 연산들이 있다. 이러한 기본적인 연산들의 조합으로 다른 파일 조작 연산들을 수행할 수 있다.

open() system call

대부분의 파일 연산은 지명된 파일과 관련 디렉토리를 찾는 작업을 한다. 따라서 반복 탐색을 피하기 위해 많은 시스템들은 파일을 사용하기 전에 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

멀티 프로세스 시스템에서 동시에 파일을 열 수 있는 환경이라면 open(), close() 연산이 복잡해 진다. 보통 운영체제는 프로세스별 테이블과 범 시스템 테이블 두개를 동시에 사용한다. 프로세스별 테이블은 각 프로세스가 연 파일들이 기록된다. 각 파일에 대한 current file position pointer도 여기에 존재한다. 프로세스별 테이블의 각 항목은 다시 범 시스템 테이블을 가리킨다. 이 범 시스템 테이블은 프로세스의 위치, 접근 날짜 그리고 파일 크기와 같은 정보들을 갖고 있다.

이미 열려있는 파일을 다른 프로세스가 열면 프로세스별 open-file table에 단순히 범 프로세스 테이블을 가리키는 항목을 추가한다. 일반적으로 open-file table은 파일을 연 프로세스 수를 나타내는 카운터를 가지고 있다. 카운터가 0이 되면 파일은 더 이상 사용되지 않고 있음을 나타내고 open-file table로부터 제거된다.

참고

  • Operation System Concepts 8th Edition - Abraham Silberschatz 외 2명