저장 장치는 HDD, SSD, CD-ROM, USB 등등, 그리고 마그네틱, 광학, 반도체 등 종류가 여러가지 입니다. 이렇게 다양한 저장 장치들에 정보를 저장하기 위해서는 정보를 읽고 쓸 수 있는 방법이 정리되어 있어야 합니다. 이를 파일 시스템이라고 합니다.
특히 파일과 디렉토리라는 두 개의 개념으로 저장 장치를 추상화할 수 있습니다. 즉, 저장 장치에 접근하기 위해 파일과 디렉토리라는 개념을 이용합니다.
FAT 기반 파일 시스템들은 파일 시스템 내부의 모든 클러스터 하나하나에 대한 항목을 FAT 테이블에서 관리합니다. 이를 통해 각각의 클러스터에 저장되어 있는 정보가 무엇인지 알 수 있습니다.
FAT 테이블은 하나의 단일 리스트(배열)로 관리되며, 이 테이블을 통해 어떤 클러스터가 어떤 파일에서 사용되는지, 혹은 어떤 디렉토리가 존재하는지 등을 알 수 있습니다.
파일의 메타데이터가 저장되는 방식
FAT 방식은 여러 빈 섹터를 찾아 데이터를 분산 저장하는 메커니즘을 사용합니다. 연속 할당 방식에서는 파일을 저장하기 위해 연속적인 빈 섹터를 찾아야 했지만, FAT 방식에서는 연속적이지 않은 여러 빈 섹터에 데이터를 분산하여 저장할 수 있고, 이는 공간 사용의 효율성을 크게 높여줍니다.
예를 들어, 보라색 섹터에 데이터를 순서대로 저장할 수 있다고 가정해보겠습니다. 이는 파일 'D'의 데이터를 저장하는 것으로, 이 파일은 세 섹터의 크기를 가지고 있습니다. 이를 FAT 방식에 따라 저장하면, 각 섹터를 연결하는 정보는 File Allocation Table에 기록됩니다. File Allocation Table은 파일이 저장된 섹터들을 체인 형태로 연결하는 구조로, 다음과 같이 표현될 수 있습니다.
이렇게 파일 시스템은 디스크의 빈 공간을 최대한 효율적으로 활용할 수 있게 되었으며, 파일의 확장 및 삭제에 대한 복잡성을 크게 줄일 수 있게 되었습니다.
파일을 열기 위한 함수는 filesys_open으로 파일을 열면, file 구조체가 생성되고 file_open 함수가 호출되어 inode를 로드하고 이를 file 구조체에 연결하여 inode를 가리키게 됩니다. inode는 실제 디스크에 저장된 inode_disk에 대한 참조를 가지고 file 구조체의 pos는 파일 내의 현재 위치를 표시하며, 이는 파일 읽기 및 쓰기 작업에 사용됩니다