Chapter#22 File System Implementation
File System Implementation
Data structure : data/metadata 표시를 위한 on-disk structure
Access methods : open(), read(), write()
Divide disk into blocks
Block size : 4KB (sector 512B)
data region : user data를 저장하기 위한 공간을 잡아둠
inode table : on-disk inodes array
- inode table : 3~7, inode size : 256 bytes
- 4KB block can hold 16 inodes
- filesystem contains 10 inodes (maximum number of files)
Allocation Structures
- inodes와 data blocks가 free인지 track 해야함
- bitmap : 0 : free, 1 : in-use
- Data bitmap : for data region
- Inode bitmap : for inode table
Superblock
particular file system의 정보 저장
mounting할 때, OS는 superblock부터 읽고 초기화함
File Organization : inode
ex) inode number = 32
- calculate offset into inode region (inodeRegion) : 32 x sizeof(inode) (=256B)) = 8192
- add start address of inode table (inodeStartAddr) : inodeStartAddr(=12288) + inodeRegion(=8192) = 20KB
- Get sector address : (inodeStrartAddr+inodeRegion)/sectorsize = 20KB/512B = 40
metadata : File type, File size, Index of data blocks allocated to it, Protection information, Time information
The Single-Level Index
특정 blocks를 가리키는 포인터들 저장
52KB(= 13 x 4KB) 지원 => 13개의 pointer 사용 가능
Indirect Pointers : 더 많은 pointer을 가지는 block을 가리킴
e.g. 12 direct pointer & 1 indirect pointer indicating 4KB block for indexing = (12+1024)x4K = 4144KB
Double indirect pointer : 2 level indirect pointer
e.g. 12 direct pointer & 1 double indirect pointer = (12+1024x1024)x4K = 4GB
둘 다 multiple disk access가 불가피하다
The Multi-Level Index :
e.g. 11 direct pointer & 1 indrect pointer & 1 double indirect pointer = (11+1024+1024^2)x4KB > 4GB
Directory Organization : (entry name, inode #) paris로 이뤄짐 | len(name)은 '\0'을 포함하므로 실제길이+1
Access Paths : Reading a File From Disk
open("/foo/bar", O_RDONLY)
- root inode는 2이므로, 찾아감 > foo를 찾음 > bar를 찾음 > permission 확인 > file descriptor 반환
read()
- 읽음 > inode의 최신 access time 갱신 > file offset(in-memory file table) 갱신
closed : filed descriptor deallocate
Access Paths : Writing to Disk
write() : data block과 data bitmap 갱신 필요
- read inode
- read data bitmap
- write data bitmap (to update new state to disk)
- write inode
- write actual block itself
create : allocate space for directory -> high I/O traffic
Caching and Buffering
read/write는 비싸다(I/O 많이 일으킴)
-> DRAM으로 cahce 이용
- fixed-size cahce는 memory waste 발생
- 현대 system : dynamic partitioning approach / unified page cahce
Read I/O : large cahce로 I/O 줄임
Write : buffering으로 performance benefit > buffering된 데이터 가져와야될 때 > fsync() : flush data to disk
학교 강의를 토대로 개인 공부 목적으로 작성되어 오타가 및 오류가 있을 수 있으며, 문제가 될 시 삭제될 수 있습니다.
'Study > 운영체제' 카테고리의 다른 글
Chapter#24 FSCK and Journaling (0) | 2021.12.11 |
---|---|
Chapter# 23 Fast File System (0) | 2021.12.11 |
Chapter#21 IO : File and Directory (0) | 2021.12.10 |
Chapter#20 Flash-based SSDs (0) | 2021.12.10 |
Chapter#19 I/O : HDD and RAID (0) | 2021.12.10 |