"KOCW - 반효경 교수님의 운영체제" 를 듣고 정리한 내용입니다.
File Systems Implementation
Allocation of File Data in Disk
- Contiguous Allocation
- Linked Allocation
- Indexed Allocation
Contiguous Allocation
(사진 출처 - questionsolves)
- 장점
- fast I/O
- 한 번의 seek/rotation 많은 바이트 transfer
- realtime file 용으로, 혹은 이미 실행 중이던 프로세스의 swapping 용
- direct access (= random access) 가능
- 단점
- external fragmentation (hole 발생)
- file grow가 어려움
- 파일 크기가 커질 것을 대비해서 미리 할당 → internal fragmentation
외부 조각은 아무도 사용하지 않아 누군가에게 할당될 수 있는 공간을 의미하고, 내부 조각은 이미 할당이 됐는데 아직 사용하지 않는 공간을 의미한다.
Linked Allocation
(사진 출처 - 티스토리)
FAT
은 linked allocation을 조금 변형한 것이다. linked allocation에서는 중간에 하나의 섹터가 bad sector 되면 그 뒤에 있는 파일들을 읽지 못한다거나 포인터의 저장으로 공간 효율성이 낮아지는 단점이 있었다. 다음 블록의 위치 정보를 디렉토리 파일에 저장하지 않고 FAT에 저장해둠으로써 이러한 단점을 해결하고 direct access 또한 가능하다.
Free-Space Management
- Bit map or bit vector
- 해당 블록이 사용중인지 아닌지를 비트로 표현
- bit[i] = 0 : block[i] free
- bit[i] = 1 : block[i] occupied
- bit map은 부가적인 공간을 필요로 함
- 연속적인 n개의 free block 을 찾는 데 효과적
- Linked list
- 모든 free block 들을 링크로 연결
- 공간 낭비가 없지만 연속적인 빈 공간을 찾기는 어려움
- Grouping
- Counting
- 프로그램들이 종종 여러 개의 연속적인 block을 할당하고 반납한다는 성질에 착안
- 연속적인 free block 을 찾는 데 효과적
Directory Implementation
- Linear list
- 의 리스트
- 디렉토리 내에 파일이 있는지 찾기 위해서는 linear search 필요
- 구현이 간단하지만 시간이 오래 걸려 비효율적
- Hash Table
- linear list + hashing
- 파일 이름을 이 파일의 linear list 위치로 바꾸어줌
- search time을 없애서 효율적이지만 해시 특징 상 충돌 발생 가능
- 파일의 메타데이터 보관 위치
- 디렉토리 내 직접 보관
- 디렉토리에는 포인터를 두고 다른 곳에 보관
- 긴 파일 이름의 지원
- 의 리스트에서 각 엔트리는 일반적으로 고정된 크기
- 파일 이름이 엔트리 길이보다 길어지는 경우 엔트리 마지막 부분에 포인터를 두는 방법
- 이름의 나머지 부분은 동일한 디렉토리 파일 일부에 존재
VFS and NFS
- VFS (Virtual File System)
- 사용자가 다양한 파일 시스템에 대해 동일한 시스템콜 인터페이스로 접근하게 해주는 게층
- NFS (Network File System)
- 네트워크를 통해 연결된 다른 파일 시스템에 접근하도록 해줌
Page Cache and Buffer Cache
- Page Cache
- 페이징 시스템에서 사용하는 페이지 프레임을 캐싱 관점에서 설명하는 용어
- Memory-Mapped I/O
- 파일의 일정 부분을 메모리 영역에 매핑시킴
- read, write 등의 시스템콜을 사용하는 것이 아닌 메모리에다가 읽고 씀
- Buffer Cache
- 파일 시스템을 통한 I/O 연산은 메모리의 특정 영역인 buffer cache 사용
- 파일 사용의
locality
활용
- 한 번 읽어온 블록에 대한 후속 요청 시 디스크에 접근하지 않고 buffer cache에서 즉시 전달
- replacement algorithm 필요 (LRU, LFU 등)
- Unified Buffer Cache
- 최근 운영체제에서는 buffer cache가 page cache에 통합됨
- 즉 buffer cache도 페이지 단위로 관리
참고