Skip to main content

[OS] Chapter 11. 파일 시스템

운영체제와 정보기술의 원리 강의를 듣고 공부한 노트입니다.




파일과 파일 시스템 #

  • File
    • A named collection of related information
    • 일반적으로 비휘발성의 보조기억장치에 저장된다.
    • 운영체제는 다양한 저장 장치를 file이라는 동일한 논리적 단위로 관리한다.
    • Operation
      • create, read, write, reposition(lseek), delete, open, close 등

  • File attribute (혹은 파일의 metadata)
    • 파일 자체의 내용이 아니라 파일을 관리하기 위한 각종 정보들이다.
      • 파일 이름, 유형, 저장된 위치, 파일 사이즈
      • 접근 권한(읽기/쓰기/실행), 시간(생성/변경/사용), 소유자 등

  • File system
    • 운영체제에서 파일을 관리하는 부분이다.
    • 파일, 파일의 메타데이터, 디렉터리 등의 정보를 관리한다.
    • 파일의 저장방법을 결정한다.
    • 파일을 보호한다.

  • Directory
    • 해당 디렉터리에 속한 파일의 이름, 메타데이터 등의 정보를 가지는 파일이다.
    • 파일의 메타데이터 중 일부를 보관하고 있는 일종의 특별한 파일이다.
    • Operation
      • search for a file, create a file, delete a file
      • list a dictionary, rename a file, traverse the file system

  • Partition(= Logical Disk)
    • 하나의 디스크 안에 여러개의 파티션을 둘 수도 있고, 여러개의 디스크를 하나의 파티션으로 둘 수도 있다.
    • 물리적인 디스크를 파티션으로 구성한 뒤에, 각각의 파티션에 파일 시스템을 깔거나 swapping 등의 다른 용도로 사용할 수 있다.

  • open(a/b/c)
    • 디스크로부터 파일 c의 메타데이터를 메모리로 가지고 오기 위해서 디렉터리 경로를 search 한다.
      • 루트 디렉터리 /open하고, 그 안에서 파일 a의 위치 획득
      • 파일 aread하고, 그 안에서 파일 b의 위치 획득
      • 파일 bread하고, 그 안에서 파일 c의 위치 획득
      • 파일 copen한다.
    • 디렉터리 search에 너무 많은 시간이 소요되기 때문에 openread, write와 따로둔다.
      • 그래서 한번 open한 파일은 read/write할 때 디렉터리 search가 불필요하다.



파일 보호 #

  • 접근 제어 방법
    • 각 파일들에 대해 누구에게 어떤 유형의 접근(read/write/execution)을 허락할 것인가?
    • Access control Matrix
      • Access control list
        • 파일별로 누구에게 어떤 접근 권한이 있는지 표시한다.
      • Capability
        • 사용자별로 자신이 접근 권한을 가진 파일, 해당 권한을 표시한다.
    • Grouping
      • 전체 사용자를 owner, group, public으로 구분하고 각 파일에 대해 각각의 그룹에 대한 접근 권한(rwx)을 3비트씩 표시한다.
      • UNIX 예시: rwxr--r--
    • Password
      • 파일마다 password를 두는 방법이다.
      • 모든 접근 권한에 대해 하나의 password를 두기: all-or-nothing
      • 접근 권한별로 password를 두기: 암기 문제, 관리 문제



파일 시스템 마운팅 #

  • File system Mounting
    • 특정 파티션에 있는 파일 시스템의 특정 디텍터리에, 다른 파티션의 파일 시스템을 마운트하는 것이다.
    • 서로 다른 파일 시스템에 접근할 수 있게 된다.



파일 접근 방법 #

  • 순차 접근(sequential access)
    • 카세프 테이프를 사용하는 것처럼 접근하는 방식이다.
    • 읽거나 쓰면, offset이 자동으로 증가한다.
    • abc
  • 직접 접근, 임의 접근(direct access, random access)
    • LP 레코드 판과 같이 접근하는 방식이다.
    • 파일을 구성하는 레코드를 임의의 순서로 접근할 수 있다.
    • ac



디스크에 파일 정보를 저장하는 방법 #

(1) Contiguous Allocation #

연속 할당

  • 디스크의 연속적인 블럭에 파일을 저장하는 방법이다.
  • 장점
    • 빠른 I/O가 가능하다. 한번의 디스크 seek/rotation으로 많은 바이트를 transfer할 수 있다.
    • 직접 접근(랜덤 접근)이 가능하다.
  • 단점
    • 비어있는 블럭이 있어도 연속되는 블럭이 충분치 않으면 저장할 수 없다. (외부 조각)
    • 파일의 크기를 늘리는데(File grow) 제약이 있다. 파일 생성 시에 얼마나 큰 hole을 할당할 것인가? grow 가능 vs 낭비(내부 조각)



(2) Linked Allocation #

연결 할당

  • 파일을 불연속적으로 저장하고 pointer로 연결하는 방법이다.
  • 장점
    • 외부조각이 발생하지 않는다.
  • 단점
    • 직접 접근이 불가능하다.
    • 신뢰성(Reliability)문제. 하나의 섹터가 고장나면 연결된 다른 섹터에 접근할 수 없게된다.
    • 다음 위치를 가리키는 pointer의 저장공간이 필요하기 때문에 공간의 효율성이 떨어진다. 512bytes/sector, 4bytes/pointer
  • FAT(File-allocation table) 파일 시스템
    • pointer를 별도의 공간에 저장해서 신뢰성, 공간 효율성의 문제를 해결한 것이다.



(3) Indexed Allocation #

인덱스 할당

  • index를 가지고 있는 블럭을 두는 방법이다.
  • 장점
    • 외부조각이 발생하지 않는다.
    • 직접접근이 가능하다.
  • 단점
    • 작은 크기의 파일이더라도 index를 저장하기 위한 블럭이 필요하므로 공간 낭비가 있다.
    • 너무 큰 크기의 파일은 여러개의 index 블럭이 필요하다. (해결방법: linked-scheme, multi-level index)



실제로 사용되는 파일 시스템의 구조 #

UNIX 파일 시스템 #

UNIX 파일 시스템

  • Boot block
    • 부팅에 필요한 정보(bootstrap loader)
  • Super block
    • 파일 시스템에 관한 총체적인 정보
  • Inode list
    • 파일 이름을 제외한 파일의 모든 메타데이터를 저장
    • (위에서 메타데이터는 파일의 디렉터리에 저장된다고 했지만 유닉스나 기타 실제 파일 시스템에서는 파일 이름만 디렉터리에 저장되고 나머지. 메타데이터들은 여기에 저장된다)
  • Data block
    • 파일의 실제 내용을 보관



FAT 파일 시스템 #

FAT 파일 시스템

  • Data block의 개수 만큼 FAT 블럭이 존재하고, 내용에는 다음 블럭이 어딘지가 저장되어(pointer) 있다.



Free-Spcae Management #

  • 비어 있는 블럭들을 어떻게 관리할 것인가?
  • (1) Bit map / Bit vector
    • 블럭이 비어있는지 혹은 사용중인지를 0, 1로 저장한다.
    • 따라서 부가적인 공간을 필요로 한다.
    • 연속적인 가용 공간을 찾기에 효과적이다.
  • (2) Linked list
    • 모든 비어있는 블럭들을 링크로 연결한다. (free list)
    • 공간의 낭비가 없다.
    • 연속적인 가용 공간을 찾기 쉽기 않다.
  • (3) Grouping
    • linked list 방법의 변형이다. 첫 번째 빈 블럭이 n개의 pointer를 가지고, 또 다시 n-1번째의 빈 블럭이 n개의 pointer를 가진다.
  • (4) Counting
    • 프로그램들이 종종 여러 개의 연속적인 블럭을 할당하고 반납한다는 성질에 착안해서, 빈 블럭의 첫 번째 위치와 거기서 부터 몇 개의 빈블럭이 연속되어 있는지를 쌍으로 저장한다.
    • (first free block, # of contiguous free blocks)



Directory Implementation #

  • 디렉터리를 어떻게 구현할 것인가?
  • (1) Linear list
    • 파일의 이름과 메타데이터를 리스트로 저장한다. <file name, file metadata>
    • 구현이 간단하다.
    • 디렉터리 내에 파일이 있는지 찾기 위해서는 linear search가 필요하다. (time-consuming)
  • (2) Hash table
    • linear list에다가 hashing을 추가한 것이다.
    • 해시 함수를 적용해서 파일 이름을 파일의 위치로 바꾸어주고, 거기에 이름과 메타데이터를 저장한다.
    • 탐색시간을 없앴다.
    • 충돌 발생 가능성이 있다.

  • 파일의 메타데이터를 어디에 보관할 것인가?
    • (1) 디렉터리에 보관
    • (2) 디렉터리에는 pointer를 두고, 다른 곳에 보관(inode, FAT 등)

  • 긴 파일명의 지원
    • 파일 이름이 고정 크기의 entry의 길이 보다 길어지면, entry의 마지막 부분에 이름의 뒷부분이 위치한 포인터를 둔다.



VFS와 NFS #

  • VFS(Virtual File System)
    • 서로 다른 다양한 파일 시스템에 대해 동일한 시스템 콜 인터페이스(API)를 통해 접근할 수 있게 해주는 운영체제의 layer이다.
  • NFS(Network File System)
    • 분산 시스템에서 네트워크를 통해 파일을 공유하는 대표적인 파일 공유 방법이다.



Page cache와 Buffer cache #

캐슁 기법

  • Page cache
    • 가상 메모리에서, swap area에 있는 페이지에 대한 접근을 빠르게 하기 위해 물리적인 메모리에 올린 프레임들이다.
  • Buffer cache
    • 파일 시스템에서, I/O 처리를 빠르게 하기 위해서 메모리에 올린 파일의 블럭이다.
  • Memorey-mapped I/O
    • 파일의 일부분을 메모리에 매핑을 시켜서, 이 영역에 대한 접근 연산은 I/O를 수행하게 하는 것이다.
  • Unified Buffer Cache
    • 최근의 OS에서는 기존의 Buffer cache가 Page cache에 통합되었다. 그래서 파일의 블럭 단위가 아니라 페이지 단위로 캐싱된다.