참고: DK notion
https://sunset-asparagus-5c5.notion.site/cbeaec069d2448e79fdb8b28733e76b1
FAT(File Allocation Table) File System
FAT 기반 파일 시스템들은 파일 시스템 내부의 모든 클러스터 하나하나에 대한 항목을 FAT테이블에서 관리한다. 이를 통해 각각의 클러스터에 저장되어 있는 정보가 무엇인지 알 수 있다.
File Allocation Table
- 컴퓨터 파일 시스템 구조 중 하나이다. 상대적으로 간단해 플로피 디스크와 같은 휴대용 기기들에서 자주 볼 수 있다.
- 기본적인 아이디어는 파일의 데이터를 여러 개의 링크드 리스트 블록들로 나누는 것에 있다. 디렉터리 구조에는 파일의 첫 데이터 블록의 시작 주소만 놔두고, 각각의 데이터 블록에 같은 파일의 그 다음 데이터 블록의 주소를 저장해 놓는 식이다.
- 링크드 리스트 형태로 파일의 데이터 블록을 관리하는 것의 단점은, 내가 어떤 특정한 데이터 블록에 접근하기 위해서는 그 앞의 데이터 블록부터 훑어야 한다는 것이다. 그렇기 때문에 디스크를 Random Access하는 데에는 좋지 않다.
장점과 단점
장점
- 새로운 파일을 만들기가 쉽다. 부모 디렉토리 테이블과 FAT의 Busy 필드 내용만 수정하면 된다.
- 파일의 크기를 키우는 것도 쉽다. FAT의 Next 필드만 수정해주면 된다.
- 공간 활용성도 높아진다. 파일을 섹터 단위로 쪼개어 활용할 수 있어서 외부 단편화를 예방할 수 있다.
- 막 그렇게 빠르진 않더라도 Random Access가 가능하다.
단점
- 모든 디스크 블록들이 각각 하나의 FAT 항목을 가지고 있으므로, 만약 굉장히 용량이 큰 디스크의 경우에는 FAT의 크기도 굉장히 커질 수 있다.
- 이를 막기 위해서 블록 하나의 크기를 키울 수 있지만, 그렇게 되면 내부 단편화가 심해질 수 있다.
Indexed and Extensible Files
지금까지의 핀토스는 전체 파일을 한꺼번에 chunk size로 할당하여 외부단편화에 취약하다. FAT 시스템, On-disk-inode 구조를 수정하여 문제를 해결한다.
링크드 리스트로 이를 구현한다. 아이노드는 링크드 리스트의 첫 블록(섹터)의 번호만 저장한다. 그리고 각각의 데이터 블록에 다음 블록 번호를 저장한다. Random access를 용이하게 하기위해 FAT에 데이터 블록의 상태, next블록의 번호를 저장한다. FAT에는 실제 데이터가 아닌 연결 정보값만 포함되기 때문에 DRAM에 캐시할 수 있다.
Subdirectories and Soft Links
Systemcall 수정
회고
- 핀토스 프로젝트를 하기전에는 사용하는 시스템이 어떻게 동작하는지 막연하게 그림만 그렸던 것 같다.