[OS] Chapter 11. 파일 시스템
Table of Contents
운영체제와 정보기술의 원리 강의를 듣고 공부한 노트입니다.
파일과 파일 시스템 #
- 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
의 위치 획득 - 파일
a
를read
하고, 그 안에서 파일b
의 위치 획득 - 파일
b
를read
하고, 그 안에서 파일c
의 위치 획득 - 파일
c
를open
한다.
- 루트 디렉터리
- 디렉터리 search에 너무 많은 시간이 소요되기 때문에
open
을read
,write
와 따로둔다.- 그래서 한번
open
한 파일은read
/write
할 때 디렉터리 search가 불필요하다.
- 그래서 한번
- 디스크로부터 파일
파일 보호 #
- 접근 제어 방법
- 각 파일들에 대해 누구에게 어떤 유형의 접근(read/write/execution)을 허락할 것인가?
- Access control Matrix
- Access control list
- 파일별로 누구에게 어떤 접근 권한이 있는지 표시한다.
- Capability
- 사용자별로 자신이 접근 권한을 가진 파일, 해당 권한을 표시한다.
- Access control list
- Grouping
- 전체 사용자를 owner, group, public으로 구분하고 각 파일에 대해 각각의 그룹에 대한 접근 권한(rwx)을 3비트씩 표시한다.
- UNIX 예시:
rwxr--r--
- Password
- 파일마다 password를 두는 방법이다.
- 모든 접근 권한에 대해 하나의 password를 두기: all-or-nothing
- 접근 권한별로 password를 두기: 암기 문제, 관리 문제
파일 시스템 마운팅 #
- File system Mounting
- 특정 파티션에 있는 파일 시스템의 특정 디텍터리에, 다른 파티션의 파일 시스템을 마운트하는 것이다.
- 서로 다른 파일 시스템에 접근할 수 있게 된다.
파일 접근 방법 #
- 순차 접근(sequential access)
- 카세프 테이프를 사용하는 것처럼 접근하는 방식이다.
- 읽거나 쓰면, offset이 자동으로 증가한다.
a
→b
→c
- 직접 접근, 임의 접근(direct access, random access)
- LP 레코드 판과 같이 접근하는 방식이다.
- 파일을 구성하는 레코드를 임의의 순서로 접근할 수 있다.
a
→c
디스크에 파일 정보를 저장하는 방법 #
(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 파일 시스템 #
- Boot block
- 부팅에 필요한 정보(bootstrap loader)
- Super block
- 파일 시스템에 관한 총체적인 정보
- Inode list
- 파일 이름을 제외한 파일의 모든 메타데이터를 저장
- (위에서 메타데이터는 파일의 디렉터리에 저장된다고 했지만 유닉스나 기타 실제 파일 시스템에서는 파일 이름만 디렉터리에 저장되고 나머지. 메타데이터들은 여기에 저장된다)
- Data block
- 파일의 실제 내용을 보관
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에 통합되었다. 그래서 파일의 블럭 단위가 아니라 페이지 단위로 캐싱된다.