파일 시스템을 유지하기 위한 보조저장장치로 디스크가 주로 사용된다. 그 이유는 다음과 같다.
1 ) 디스크는 추가 장소를 사용하지 않고 재기록이 가능하다.
2 ) 디스크에 있는 임의의 블록의 정보를 직접 접근할 수 있다.
파일 시스템은 쉽게 데이터를 저장하고, 찾고 또한 인출할 수 있게 함으로써 저장장치를 더욱 효율적이고 편리하게 사용할 수 있게 도와준다.
-> 파일 시스템이 사용자에게 어떻게 보여야 할지 정의해야함 (파일은 무엇이고 속성, 디렉터리 구조 등)
-> 논리 파일 시스템을 물리적인 2차 저장장치로 사상하는 알고리즘과 데이터 구조를 정의해야 함.
파일 구조는 파일 제어 블록(FCB)에 의해 유지된다.
[계층적 파일 시스템]
1 ) 입/출력 제어 층 : 장치 드라이버 루틴들과 인터럽트 핸들러로 이루어져 있어서 메모리와 디스크 시스템 간의 정보 전송을 담당한다.
2 ) 기본 파일 시스템
-> 적절한 장치 드라이버에게 저장장치상의 블록을 읽고 쓰도록 일반적인 명령을 내린다.
-> 다양한 파일 시스템, 디렉터리 및 데이터 블록을 저장하는 메모리 버퍼와 캐시를 관리한다.
3 ) 파일-구성 모듈
-> 파일과 상응하는 논리 블록을 알고 있으며, 어느 디스크 공간이 비어 있는지를 파악한다.
4 ) 논리 파일 시스템
-> 메타데이터 정보를 관리한다.
-> 메타데이터는 파일의 내용 자체인 데이터를 제외한 모든 파일 시스템 구조를 말한다.
[파일 시스템 구현]
- 부트 제어 블록 : 시스템이 그 파티션으로부터 운영체제를 부트시키는 데 필요한 정보
- 볼륨 제어 블록 : 볼륨의 블록의 수, 블록의 크기, 가용 블록의 수와 포인터 등
- 파일별 FCB는 자세한 파일 정보를 가지고 있다.
<사용법>
새로운 파일이 생성되면 입출력을 위해 사용될 수 있다. 이를 위해선 우선 파일이 오픈되어야 하는데 open() 함수는 논리적 파일 시스템에 파일 이름을 넘겨준다. 이 때 오픈 되어 있는 파일인지 확인한 뒤 오픈되어 있지 않다면, 주어진 파일 이름을 찾으면 FCB가 메모리내의 테이블에 복사된다.
open() 함수는 프로세스별 파일 시스템 테이블 내의 해당 항목에 대한 포인터(파일 디스크립터)를 돌려준다.
이후에 모든 파일 연산은 이 포인터를 이용하여 실행된다.
오픈했던 파일을 닫으면 디스크 기반 디렉토리 구조에 업데이트 된 파일 정보가 복사된다.