운영체제 강의노트 정리 - 파일시스템 인터페이스

파일시스템 인터페이스

파일 개념

운영체제는 다양한 저장 매체애 대한 균일한 논리적 뷰를 제공하며, 이를 파일file이라고 부른다.

파일은 저장의 최소 단위이며, 파일 외에 다른 방법으로 데이터를 저장할 수 없다.

파일은 그 유형에 따라 특정 구조를 가진다.

파일 속성

  • 이름 : 사용자가 인식할 수 있는 형태로 유지되는 유일한 이름
  • 식별자 : 파일 시스템 내에서 파일을 구분하기 위한 식별자
  • 유형
  • 위치 : 저장 매체에 파일이 저장된 위치
  • 크기
  • 보호 : 접근 제어
  • 시간과 날짜, 사용자 정보

위와 같은 정보는 디렉토리 구조 형태로 보조 저장 장치에 유지된다.

파일 연산

  • 파일 생성 : 파일을 위한 공간을 할당하고, 파일과 관련된 정보를 디렉토리에 추가
  • 파일 쓰기
  • 파일 읽기
  • 파일 내 위치 변경
  • 파일 삭제 : 파일에게 할당한 공간을 회수하고, 디렉토리에서 파일과 관련된 정보를 삭제
  • 파일 절단 : 파일에게 할당된 공간을 회수하고, 파일과 관련된 정보의 크기를 0으로 설정
  • 파일 끝에 첨가
  • 파일 이름 변경
  • 파일 복사
  • 등등

파일 읽기나 쓰기 이전에 먼저 파일을 열어야 한다. 운영체제는 열린 파일 테이블open-file table을 유지하여, 파일을 닫을 때까지 디렉토리 검색을 다시 하지 않고 파일을 조작할 수 있도록 해준다.

파일을 열 때 접근 모드(생성, 읽기, 읽기쓰기)를 지정할 수 있다. 파일 열기 시스템 호출은 파일 테이블에 대한 포인터를 반환한다.

다중 사용자 환경의 경우 두 단계 테이블을 사용한다.

  • 프로세스별 테이블 : 각 프로세스의 PCB에 유지된다. 해당 프로세스가 연 파일을 관리한다. 파일 포인터, 파일 접근 모드 등이 유지된다.
  • 시스템 전체 테이블 : 프로세스와 독립적인 정보가 유지된다. 디스크 내의 파일 위치, 접근 날짜, 파일 크기 등을 관리한다. 열린 계수open count를 유지하여 파일을 연 프로세스의 개수를 관리한다.

파일 유형

확장자를 이용하여 식별한다. 운영체제는 일부 확장자(실행, 텍스트, 바이너리 정도만 구분)만 식별하며, 나머지는 사용자에게 도움이 되는 구분자 역할을 한다.

디렉토리 구조

디스크는 파티션partition으로 분할되며, 디스크는 최소한 하나의 파티션을 갖는다. 여러 디스크를 하나의 파티션으로 사용할 수도 있다.

각 파티션은 저장되어 있는 파일과 그것에 관한 정보로 구성된다. 파일에 관한 정보는 장치 디렉토리 또는 볼륨 테이블에 유지된다.

저장되어 있는 파일마다 디렉토리에 하나의 항이 존재한다.

디렉토리와 관련된 연산은 다음과 같다.

  • 파일 검색 : 특정 파일에 해당하는, 파일 이름이 특정 패턴에 해당하는 모든 파일에 해당하는 디렉토리 항 검색
  • 파일 생성
  • 파일 삭제
  • 디렉토리 나열
  • 파일 이름 바꾸기
  • 파일 시스템 순회traverse : 파일 시스템 내에 있는 모든 디렉토리를 방문

단일 단계 디렉토리

모든 파일이 하나의 디렉토리 구조에 포함된다.

하나의 디렉토리 내에 있는 모든 파일의 이름은 유일해야 하므로, 파일 이름 부여에 제약을 받을 수 있다.

두 단계 디렉토리

경로path 개념이 등장한다.

검색 경로search path는 파일 이름이 주어졌을 때 이 파일을 검색하기 위해 검색하는 디렉토리 목록을 말한다.

트리 구조의 디렉토리

각 디렉토리는 하위 디렉토리를 가질 수 있다. 트리의 최상위 디렉토리를 루트 디렉토리라고 한다.

절대 경로absolute path는 트리의 루트로부터의 경로를 말한다.

상대 경로relative path는 현재 디렉토리로부터의 경로를 말한다.

하위 디렉토리가 있으면 삭제 명령을 거부하거나, 삭제 명령에 옵션을 주어 하위 디렉토리가 있어도 삭제할 수 있게 한다.

비순환 그래프 디렉토리

비순환 그래프는 사이클이 없는 그래프를 말한다.

디렉토리나 파일의 공유를 쉽게 해준다.

링크link를 사용할 수 있다. 이는 파일 또는 디렉토리를 가리키는 포인터이며, 유닉스의 경우 기호 링크symbolic link와 하드 링크hard link를 제공한다.

트리 구조보다는 유연하지만, 한 파일이 여러 경로를 가질 수 있어 파일 시스템을 순회할 때 한 구조를 여러 번 방문할 수 있고, 링크되어 있는 파일을 삭제하면 링크가 더 이상 의미있는 곳을 가리키지 못하게 되는 문제가 있다.

해당 링크를 나중에 사용할 때 경고를 줄 수 있도록 하거나, 참조 계수를 유지하여 계수가 0이 되어야만 파일을 삭제할 수 있도록 한다.

기호 링크는 파일 또는 디렉토리에 대한 포인터이며, 기호 링크의 삭제는 파일에 영향을 주지 않는다. 파일이 삭제되면 기호 링크는 의미 없는 포인터dangling pointer가 된다.

하드 링크는 파일에 대해서만 가능하고, 같은 디렉토리 항을 가리키며, 한 파일 시스템 내에서만 가능하다. 하드 링크를 삭제하면 참조 계수가 하나 감소한다.

일반 그래프 디렉토리

일반 그래프 구조에서는 사이클이 존재할 수 있다.

파일 시스템 순회가 어렵고, 파일 삭제에 어려움이 있다.

이 기법은 거의 사용되지 않는다.

파일 시스템 마운팅

파일을 먼저 열어야 조작할 수 있다.

마찬가지로 파일 시스템을 사용하기 위해서는 먼저 마운트되어야 한다.

운영체제는 장치의 이름과 파일 구조 내에 마운트할 위치를 받아 그 위치에 마운트한다. 마운트할 위치는 일반적으로 빈 디렉토리로 한다.

운영체제는 파일 시스템을 마운트하기 전 장치를 검증하여 유효한 파일 시스템이 장치에 포함되어 있는지 검사한다.

파일을 포함하고 있는 디렉토리는 마운트 위치로 사용될 수 없으며, 파일 시스템은 오직 한번만 마운트되도록 제한될 수 있다.

윈도우 시스템은 부팅 때 시스템을 검색하여 모든 파일 시스템을 자동으로 마운트한다.

보호

물리적 손상과 불법적 접근으로부터 파일을 보호해야 한다.

물리적 손상은 백업을 통해 해결된다.

불법적 접근은 접근 제어access control를 통해 해결된다.

접근 유형

접근 유형을 제한하여 파일을 보호한다.

  • 읽기
  • 쓰기
  • 실행
  • 첨가
  • 삭제
  • 파일 정보 열람

이름 변경, 복사, 편집과 같은 것은 하위 수준의 기본 접근 유형에 따라 제어된다.

접근 제어

사용자 식별자를 근거로 접근 허용 여부를 결정한다.

각 파일은 접근 제어 목록access control list를 관리하며, 이 목록을 검색하여 사용자의 접근 허용 여부를 결정한다.

일반적으로 사용자를 소유자owner(파일을 생성한 사용자) / 그룹group(소유자가 속한 그룹) / 일반universe(시스템에 등록된 모든 사용자)으로 그룹화하여 분류에 대한 접근 권한만 유지한다.