Free space management
Disk space에 free space를 관리하기 위해서 Free space list를 저장해둠
✔️ 디스크 super block에 저장해둠
- super block : 파일 시스템에 대한 총체적인 정보를 담고 있음
어느 부분이 비어있는 블럭이고, 사용하는 블럭인지, 어디부터가 data block 이고 inode 블럭인지 . .
- inode 블럭 : 메타데이터를 따로 저장하는 곳
Bit map / vector
0이면 비어있는 공간, 1이면 사용 중인 공간
- contiguous 파일을 얻기 쉬움 (연속된 n개의 free block을 찾는데 효과적이다)
- 0 이나 1값을 저장할 부가적인 공간이 필요하다
Linked List
모든 free block을 링크로 연결함
- 추가적인 공간 낭비 ❌
- 연속적으로 free space가 있는 공간을 찾아야 하는데 찾기가 쉽지 않음
Etc.
- Grouping : 링크드 리스트의 변형으로 첫번째 free block이 n개의 포인터를 가진다. 하나의 free block에 나머지 free block에 대한 위치 정보를 저장해두는 방식
디스크는 컴퓨터 부품 중에 제일 느리기 때문에 bottle neck 의 주 원인임
그래서 효율성 🔼, 퍼포먼스 🔼 해야함.
퍼포먼스 🔼
1. Buffer Cache / Page Cache
✔️ 페이지 캐시
- Demand Paging에 사용되는 프로세스 메모리의 별도 섹션
- Virtual memory 기술을 사용해서 페이지 캐싱
- Memory-Mapped IO가 사용
✔️ 버퍼 캐시
- 커널 메모리의 별도 섹션
- 최근에 사용된 디스크 블럭이 저장됨
- 여기에 있는게 요청이 되면 디스크 access할 필요 ❌
📎 Unified Buffer Cache
최근에는 둘이 통합되었다고 함 = 두번 캐싱되는 것을 막기 위해
buffer cache도 페이지 단위로 관리함
2. Synchronus / Asynchronus write
✔️ Synchronus write
- buffered ❌ , cached ❌
- 프로세스가 진행되기 전에 디스크에 도달해야 함
- 가끔 OS나 app에 의해 필요한 경우가 있음
✔️ Asynchronus write
- cache에 저장됨
- 가장 많이 사용되고 bufferable, faster
3. Free behind & Read ahead
✔️ Free behind
- 다음 페이지가 요청되는 즉시 버퍼에서 페이지 제거
- 이전 페이지는 사용되는 일이 거의 없기 때문
✔️ Read ahead
- 요청된 페이지 + 후속 페이지까지 미리 읽어둠
- 이후의 페이지는 사용될 확률이 높기 때문!