Notice
Recent Posts
Recent Comments
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

topcue

[OS] File System Implementation 본문

Operating System

[OS] File System Implementation

topcue 2021. 9. 3. 23:56

The Way To Think

UNIX의 전형적인 File system 형태인 VSFS(Very Simple File System)을 다룰 것이다.

또한 data structuresaccess methods 두 가지 관점에서 file system을 다룰 것이다.

block: 4KB, Sector: 512B (atomic)

Overall Organization

디스크를 4KB block 단위로 나눌 수 있다.

vsfs에서는 아래 그림처럼 64개의 block이 있다고 하자.

User Data(Data Region): (8~63) user가 쓸 수 있는 Data block

Inode table: (3~7) file의 metadata가 저장되는 블럭. i-node size는 256B 이고 한 블럭에 16개의 i-node가 들어간다. 3~7에 5개의 블럭이 있으므로 80개의 i-node를 표현할 수 있다. 따라서 80개의 파일 또는 디렉토리를 관리할 수 있다.

Bitmap: (1~2) 한 블럭이 사용 중인지 비어있는지 1비트로 나타낼 수 있다. i-node는 256B 단위로 표현(inode bitmap)하고 Data block은 한 블럭 단위(data bitmap)로 표현한다.

Superblock: (0) file systemmetadata가 저장되는 블럭

File Organization: The Inode

inode table의 iblock은 다음과 같다.

256B 크기의 inode 16개가 한 블럭에 들어간다.

다음은 inode에 저장되는 metadata이다.

이 중 pointer들이 블럭을 가리키고 있다. (포인터는 10개 12개 또는 15개)

파일과 디렉토리는 head가 block들을 가리키는 구조이다.

보통 마지막 3개를 indirect pointer로 사용한다. (Indirect, Double, Triple)

pointer 크기가 32비트라고 하면 한 블럭에 1024개의 포인터가 저장된다. 따라서 Single indirect pointer는 4K, double indirect는 4M의 데이터를 가리키는 포인터(개수는 1/4)를 저장할 수 있다.

이런 방식을 multi-level index라고 한다.

file들의 크기나 개수는 다음과 같은 특징을 갖는다.

대부분의 파일들은 크기가 작으며, "작다"의 기준은 매년 커진다.

또 용량의 대부분은 크기가 큰 소수의 파일들이다.

따라서 크기가 작은 파일들은 빠르게 접근하고, 큰 파일들은 indirect로 접근하는 것이 효율적이다.

Directory Organization

directory: (entry name, inode number)

reclen는 아래처럼 전체 길이

Free Space Management

free space는 bitmap으로 관리한다.

Access Paths: Reading and Writing

  • Reading A File From Disk

"/foo/bar"파일을 읽는다고 가정하자.

"/foo/bar"파일을 쓴다고 가정하자.

foo data를 읽은 뒤 bitmap을 읽고 쓴다. 그리고 foo data를 쓰고 난 뒤에 bar를 쓰기 위해 bar inode를 읽고 쓴다.

그다음 foo inode write는 bar에 접근했으므로 수정시간 등을 쓴 것이다.

Caching and Buffering

mkdir("/g");

a: 가리키는 블럭의 주소(data의 주소를 찾을 때 사용)
데이터의 (A, B)에서 A는 ls하면 나오는 것들이고, B가 inode의 인덱스.

inode bitmap  11000000
inodes        [d a:0 r:3] [d a:1 r:2] [] [] [] [] [] []
data bitmap   11000000
data          [(.,0) (..,0) (g,1)] [(.,1) (..,0)] [] [] [] [] [] []

create()는 빈 파일 헤더 생성. open()하고 써야 address도 생기고 data bitmap도 채워진다.


'Operating System' 카테고리의 다른 글

[OS] Files and Directories  (0) 2021.09.03
[OS] Hard Disk Drives  (0) 2021.09.03
[OS] I/O Devices  (1) 2021.09.03
[OS] DeadLock  (0) 2021.09.03
[OS] Semaphores  (0) 2021.09.03
Comments