1. Directory Implementation (디렉터리 구현)
디렉터리는 파일 시스템에서 파일의 메타데이터를 저장하고 관리하는 요소입니다. 디렉터리를 구현하는 방법에는 Linear List(연결 리스트)와 Hash Table(해시 테이블) 2가지 방법이 있습니다. 각 방법의 특징과 장단점을 살펴보겠습니다.
(1) Linear List (연결 리스트)
Linear List 방식은 파일의 이름과 메타데이터를 순차적으로 저장합니다. 각 엔트리는 파일의 이름, 크기, 소유자 등의 정보로 구성됩니다. 이 메타데이터는 일정한 크기로 관리되며, 디렉터리 내에서 순차적으로 저장됩니다.
장점으로는 구현이 간단하고 이해하기 쉽습니다. 그리고 파일 이름의 구성을 알고 있다면 순차적으로 엔트리를 찾을 수 있습니다.
단점으로는 파일 검색이 순차적으로 이루어지기 때문에 시간이 오래 걸릴 수 있다는 것 입니다. 파일 수가 많아질수록 검색 시간이 더 증가할 수 있습니다.
(2) Hash Table (해시 테이블)
Hash Table 방식은 파일의 이름을 해시 함수를 사용하여 특정 범위 내의 숫자로 매핑합니다. 이렇게 매핑된 값에 해당하는 위치에 파일의 메타데이터를 저장합니다. 파일을 찾을 때는 해시 함수를 통해 결과 값을 계산하고, 해당 위치에 저장된 엔트리를 확인하는 방식으로 작동합니다.
장점으로는 해시 함수를 사용하여 파일을 빠르게 검색할 수 있습니다. 검색 시간이 파일의 수에 비례하지 않습니다.
단점으로는 서로 다른 파일 이름이 같은 해시값을 가질 수 있으므로 충돌이 발생할 수 있다는 것입니다.
2. 메타 데이터의 보관 위치
메타데이터의 보관 위치는 UNIX나 FAT 파일 시스템에서 보았던 것처럼, 일부는 디렉터리에 직접 보관하고 일부는 파일 시스템에서 별도로 저장합니다.
UNIX 시스템에서는 대부분의 메타데이터가 inode에 저장됩니다. 각 파일에 대한 inode는 고유한 식별자로 파일의 메타데이터를 포함하고 있습니다. 이 메타데이터에는 파일의 속성 및 정보가 포함되어 있습니다.
FAT 파일 시스템에서는 메타데이터 대부분이 FAT(File Allocation Table)에 저장됩니다. FAT는 파일의 다음 위치 정보 및 할당 상태를 추적합니다. 이를 통해 파일 시스템은 파일의 데이터 블록을 찾고 관리합니다.
Long file name 지원
대부분의 메타데이터는 entry의 크기가 고정되어 있기 때문에 파일의 이름이 너무 긴 경우를 다룰 때에는 조금 다른 방식을 사용해야 합니다.
파일 이름이 엔트리의 크기를 초과할 경우, Directory File의 끝에 역순으로 저장되며, 이를 위해 엔트리에 포인터가 추가됩니다.
참고자료
[KOCW 이화여대 반효경 교수님 - File Systems Implementation 1]
https://core.ewha.ac.kr/publicview/C0101020140520134614002164?vmode=f
[ Operating System Concepts - Abraham Silberschatz ]
https://www.yes24.com/Product/Goods/89496122