page시스템과 비슷하게 파일도 같은 크기의 조각에 나누어져 저장됨
Contigous Allocation: 같은 파일을 연속적인 조각에 저장 (디렉토리에 파일명, 시작점, 길이를 저장된 정보를 활용해 접근)
빈공간이 생길 수 있음(외부조각 낭비), 파일의 크기가 커질 때 제한이 있음(이러면 내부조각 낭비)
Fast I/O가 가능함, Direct Access 가능
Linked Allocation: 연속적으로 저장되어 있지않고 다음 저장의 위치를 알려줌(디렉토리에 파일명, 시작위치만 저장)
외부조각이 발생하지 않음
직접접근 불가, Reliability 문제, Pointer를 위한 공간 효율이 떨어짐
-> 변형 File-allocation table(FAT) 파일 시스템: 포인터를 별도의 공간에 저장함
Indexed Allocation: 디렉토리에 index블록을 저장하여, 해당 블록에 파일의 위치들을 저장함)
파일이 작을 경우 공간 낭비(실제로 많은 file들이 small)
너무 큰 파일의 경우에, 하나의 index블록으로 모두 표현하는 것이 불가
->linked scheme이나 multi-level index 사용하여 해결
Unix의 파일시스템
Boot block: 모든 운영체제가 공통적으로 맨 처음 Boot block이다. (부팅에 필요한 정보)
Super block: 파일 시스템에 관한 총체적인 정보를 담고 있다. (어디가 파일이 사용되는 지, Inode가 어딘 지 등)
Inode list: 파일의 이름을 제외한 파일의 모든 메타 데이터를 저장
inode, oweners, timestamps, size block, count, direct blocks, single indirect, double indirect, triple indirect
Data block: 파일의 실제 내용을 보관
-> diretcory file: 파일이름, inode 번호을 저장하고 있음
-> Indexed Allocation을 활용함
FAT File System
Boot block
FAT: 모든 Data 블록의 다음 블록을 저장해놓음
-> 특정 sector가 문제가 생겨서 파일들에 문제가 생기는 것을 방지할 수 있음
Root directory
Data block
Free-space Management
Bit map or bit vector
bit[i] -> 0이면 block[i] free, 1이면 block[i] occupied
Linked list: 비어있는 블록끼리 linked list로 연결해서 관리
Grouping: Linked list의 변형으로 Linked Allocation처럼 이용하는 것 (첫 free block이 n개의 pointer를 가짐 -> 이것을 반복)
Counting: 프로그램들이 종종 여러개의 연속적인 block을 할당하고 반납한다는 성질에 착안
Directory Implementation
Linear list: 파일의 이름과 file의 metatable을 저장 (크기를 동일하게 하여 일정간격으로 linear search를 함)
Hash Table: 파일의 이름을 hash값 변환하고 file의 metadata와 같이 저장한다.
VFS and NFS
Virtual File System: 서로 다른 File 시스템에서 동일한 시스템 콜 인터페이스를 통해 접근할 수 있게 해줌
Network File System: 분산 시스템에서 네트워크를 통해 파일이 공유하는 방법
Page cache and Buffer cache
Page Cache: Virtual memory의 paging system에서 사용하는 page frame을 caching의 관점에서 설명하는 용어 (메모리)
Memory-mapped I/O: File의 일부를 virtual memory에 mapping 시킴
Buffer Cache: 파일 시스템을 통한 I/O연산은 메모리의 특정 영역인 buffer cache 사용 (파일)
Unified Buffer Cache: 최근 OS에서는 buffer cache가 page cache에 통합됨
->buffer cache의 단위도 page처럼 같은 크기로 설정
쓰지 않으면, memoried-mapped I/O는 page cache를 거치고 buffer cache로 가는데
사용 한다면 memoried-mapped I/O와 I/O using read() and write() 모두 buffer cache(=page cache)를 거친다.
'Studying > Operating System' 카테고리의 다른 글
11. Disk Management and Scheduling (0) | 2018.07.15 |
---|---|
10. File Systems (1/3) (0) | 2018.07.14 |
09. Virtual Memory (2/2) (0) | 2018.07.12 |
09. Virtual Memory (1/2) (0) | 2018.07.11 |
08. Memory Management (4/4) (0) | 2018.07.10 |