본문 바로가기

Study/운영체제

Chapter#22 File System Implementation

반응형

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