파일 시스템을 유지하기 위해선 보조저장장치로 디스크가 대부분 사용됨
디스크는 추가 장소를 사용하지 않고 재기록이 가능함
그리고 디스크에 있는 임의의 블록의 정보를 직접 접근 가능 (순차적으로 읽고 무작위 방법으로 접근)
메모리와 대용량 스토리지 간의 입출력 전송은 블록 단위로 수행
파일 시스템은 쉽게 데이터를 저장하고, 찾고 저장장치를 더욱 효율적이고 편리하게 사용
파일 설계 시, 파일은 무엇이고, 속성, 구조, 연산등을 고려
논리 파일 시스템을 물리적인 2차 저장장치로 사상하는 알고리즘과 데이터 구조를 만드는 것
각 층은 낮은 층의 기능을 사용하여 새로운 기능을 만들어 상위층에게 제공
입출력/제어 층은 장치 드라이버 루틴들과 인터럽트 핸들러로 이루어져 있어서 메모리와 디스크 시스템 간의 정보 전송을 담당한다.
장치 드라이버는 번역기
기본 파일 시스템 층은 적절한 장치 드라이버에게 저장장치 상의 블록을 읽고 쓰도록 일반적인 명령을 내린다.
이 층은 논리 블록 주소를 기반으로 드라이브에 명령을 내림
다양한 파일 시스템, 디렉터리 및 데이터 블록을 저장하는 메모리 버퍼와 캐시를 관리
파일 - 구성 모듈 층은 파일과 상응하는 논리 블록을 알고 있다.
각 파일의 논리 블록은 0부터 N까지 번호를 준다.
논리 파일 시스템 층은 메타데이터 정보를 관리한다.
메타 데이터는 파일의 내용 자체인 데이터를 제외한 모든 파일 시스템 구조를 말함.
파일 구조는 파일 제어 블록을 통해 유지됨.
FCB는 소유, 허가, 파일 내용의 위치를 포함하여 파일에 관한 정보를 가지고 있다.
계층구조를 사용함으로써, 코드의 중복이 최소화됨
부트 제어 블록은 시스템이 그 파티션으로부터 운영체제를 부트시키는데 필요한 정보를 가짐
디스크가 운영체제를 가지고 있지 않다면 부트 제어 블록은 비어 있을 것
UFS 부트 블록, NTFS에서는 파티션 브투 섹터
볼륨 제어 블록은 볼륨의 수, 블록의 크기, 가용 블록의 수와 포인터 그리고 가용 FCB 수와 포인터 같은 볼륨 정보를 포함한다.
디렉터리 구조는 파일을 조직화하는데 사용된다.
파일별 FCB는 자세한 파일 정보를 가지고 있다
open 시스템 콜은 논리적 파일 시스템에 파일 이름을 넘겨준다.
open 시스템 콜은 우선 파일이 다른 프로세스에 의해 사용중인지 확인하기 위하여 범 시스템 오픈 파일 테이블을 검색한다,
사용중이면, 기존 범 시스템 오픈 파일 테이블을 가리키는 프로세스별 오픈 파일 테이블 항목이 생성된다.
파일이 오픈되지 않았다면, 파일 이름을 디렉터리 구조에서 찾는다.
(디렉터리 연산의 속도를 향상시키기 위해, 디렉터리 구조의 일부를 메모리에 캐싱)
FCB가 범 시스템 오픈 파일 테이블에 복사
파일 이름과 데이터 블록에 대한 포인터들의 선형 리스트를 디렉터리에 사용
새로운 파일을 생성하기 위해서는 디렉터리를 탐색하여, 같은 이름을 가진 파일이 존재하지 않는다는 것을 확인 후, 디렉터리의 끝부분에 새로운 항목 첨가
정렬된 것은 이진 탐색가능하지만, 항상 정렬을 유지하는 것을 비효율적
파일이름으로부터 해시 값을 얻고, 리스트에 직접 접근
체인 오버플로우 해시테이블 사용
파일들을 어떻게 저장장치 공간에 배치해야 디스크 공간을 효율적으로 사용할 수 있고, 파일들을 빨리 접근할 수 있는지
연속할당은 각 파일이 저장장치 내에서 연속적인 공간을 차지하도록 요구한다.
다음 블록으로 접근할 떄, 한 트랙만 이동하면 됨.
디스크의 탐색 횟수를 최소화할 수 있음
연속적으로 할당된 파일을 순차적으로 접근하려면 가장 최근 참조된 주소를 기억하면됨
하지만, 새로운 파일을 위한 가용 공간을 찾기 어려움
(동적 공간 할당 문제)
외부 단편화때문에 어려움
파일이 할당되고 반납됨에 따라 가용 디스크 공간이 조그만 조각으로 나뉨.
그러다가 요구한 공간이 없으면 문제임.
복사를 하고 제거함으로써 공간을 넓히면되지만, 그것을 하는데에 비용이 더듬
파일을 위해 얼마나 많은 공간을 주어야 할지를 결정하는 것
파일이 확장이 안될경우 프로그램 종료, 큰 조각을 찾아 그곳으로 파일을 복사하기.
순차적 접근 파일에만 효과적이고, 직접 접근 방식에는 비효율적
포인터들을 위한 공간도 필요함.
블록을 모아 클러스터라는 단위로 만들고 클러스터를 할당함.
클러스터 단위로만 작동되면 포인터는 파일 공간의 훨씬 적은 비율 사용
내부 단편화의 증가로 이어짐.
소량의 데이터 요청이 많은 양의 데이터 전송을 유발 입출력 성능 저하
FAT 사용
색인 할당은 모든 포인터들을 하나의 장소, 색인 블록으로 관리함
외부 단편화 없이 직접 접근을 지원함.
연결기법
다중 수준 색인
결합 기법
가용 공간을 리스트로 유지하고 관리함.
이 리스트에 장치의 모든 가용 블록을 등록
각 블록은 1비트로 표현되고, 비어 있으면 1, 할당되어 있다면 그 비트는 0이 된다.
n개의 연속된 가용 블록을 찾기 쉬움
비트 벡터는 전체가 메인 메모리 내에 존재해야함
가용 블록끼리 연결하는 것
첫 가용 블록 내에 n개의 블록 주소를 저장하는 방법
마지막 1개는 가용 블록을 가르킴
다수 개의 가용 블록 주소들을 쉽게 찾을 수 있다
첫 번째 블록의 주소와 연속된 블록의 개수만 유지