File System - File-System Implement
1. File-System Structure
- 입출력 효율을 향상 시키기 위해 메모리와 디스크간의 입출력 전송은 블록 단위로 수행된다. 각 블록은 하나 이상의 섹터이며 통상 512바이트이다.
파일 시스템의 계층적 구조
- 입출력 제어: 장치 드라이버 루틴들과 인터럽트 핸들러로 이루어져 있어서 메모리와 디스크 시스템 사이에 정보 전송을 담당한다.
- 기본 파일 시스템: 적절한 장치 드라이버에게 디스크 상의 물리 블록을 읽고 쓰도록 일반적인 명령을 내리는 층이다. 또한 다양한 파일 시스템, 디렉터리 및 데이터 블록을 저장하는 메모리 버퍼와 캐시를 관리한다.
- 파일 구성 모듈: 파일의 논리 블록과 물리 블록 양쪽을 알고 있어야 한다. 사용되는 파일 구성 모듈은 파일 할당 유형과 파일의 위치를 앎으로써 파일에 대한 논리 블록 주소를 물리 블록 주소로 변환할 수 있다. 또한 어느 디스크 공간이 비어있는지를 파악하는 자유공간 관리자도 포함하고 있어 파일 구성 모듈이 요구할 때 이들 블록을 제공하는 역할도 한다.
- 논리 파일 시스템: 파일의 내용 자체인 데이터를 제외 한 모든 파일 시스템 구조를 말하는 메타데이터 정보를 관리한다. 파일의 이름을 심볼릭하게 줄 경우 처리하여 하위층인 파일 구성 모듈에게 필요한 정보를 넘겨 주기 위해 디렉터리 구조를 관리한다. 파일 구조는 FCB(파일 제어 블록)에 의해 관리된다. FCB는 소유, 허가 그리고 파일 내용의 위치를 포함한 파일 정보들을 갖고 있다. 유닉스에서는 inode라고 불린다.
2. File-System Implement
A. Overview
- 여러 디스크 상의 구조와 메모리 내 구조가 파일시스템을 구현하는데 사용된다. 디스크 상의 구조는 다음을 포함한다.
- 부트 제어 블록: 시스템이 운영체제를 부트 시키는 데 필요한 정보를 담고 있다.
- 볼륨 제어 블록: 볼륨의 블록의 수, 블록의 크기, 자유 블록의 수와 포인터, 자유 FCB의 수와 포인터 같은 파티션 정보
- 디렉터리 구조
- 파일별 FCB
- 메모리 내의 정보는 마운트 시점에 적재, 파일 시스템 동작 중 갱신, 마운트 해제 시에 제거된다.
- 메모리 내 마운트 테이블은 마운트된 파티션 정보를 포함
- 메모리 내 디렉터리 구조는 최근 접근된 디렉터리 정보를 가진다.
- 범 시스템 열린 파일 테이블은 열린 파일들의 FCB정보를 가지고 있다.
- 프로세스별 열린 파일 테이블은 범 시스템 열린 파일 테이블내의 해당 항목에 대한 포인터를 포함한다.
- 새로운 파일을 생성하기 위해 응용 프로그램은 논리 파일 시스템을 호출하고 이 파일 시스템은 새로운 FCB를 할당하고 해당 디렉터리를 메모리로 읽어, 새로운 파일 이름과 FCB로 디렉터리를 갱신한다.
B. Partitions and Mounting
C. Virtual File System
3. Directory Implementation
A. Linear List
- 디렉터리를 구현하는 가장 간다난 방법은 파일 이름과 데이터 블록에 대한 포인터들의 선형 리스트를 디렉터리에 구현하는 것이다.
B. Hash Table
- 파일이름을 제시하면 해시로부터 값을 얻어서 그것을 포인터로 활용하여 디렉터리 구조로 사용할 수 있다.
4. Allocation Method
A. Contiguous Allocation
- 연속할당은 각 파일이 디스크 내에서 연속적인 공간을 차지하도록 요구된다.
- 연속할당된 파일들을 접근하기 위해서 필요한 디스크 탐색의 횟수를 최소화시킬 수 있으며, 탐색 시간이 최소화된다.
- 각 파일의 연속 할당은 첫 번째 블록의 디스크 주소(블록 단위)와 파일 길이로 정의된다. 따라서 연속할당 기법은 순차 접근과 직접 접근 두가지 모두를 지원한다.
- 연속 할당 기법의 문제
- 가용공간을 찾는 문제→동적공간 할당(최초적합, 최적 적합)→ 외부 단편화 문제 발생
- 파일을 위해 얼마나 많은 공간을 주어야 하는가
B. Linked Allocation
- 연결할당의 경우 파일은 디스크 블록의 연결 리스트 형태로 저장되고, 이 디스크 블록들은 디스크 내에 흩어져 저장될 수 있다. 디렉터리는 파일의 첫번째와 마지막 블록에 대한 포인터를 가지고 있다.
- 파일 쓰기가 일어나면 자유블록을 할당 받아 수행한 후 파일의 끝에 연결한다.
- 단점
- 순차 접근 파일에만 효과적으로 사용 가능하다. → 디렉토리 항목이 FAT를 가지는 것을 통해 파일 내부적으로 색인이 연결되어 직접 접근이 가능해진다.
- 포인터들을 위한 공간이 필요하다 → 블록의 단위를 늘려서 사용한다 → 근데 그러면 내부 단편화 문제가 발생
- 신뢰성의 문제 연결 링크를 잃어버리면 데이터를 잃어버린다. → 이중 연결 리스트사용 → 이러면 오버헤드가 증가
C. Indexed Allocation
- 연결할당은 연속할당의 외부 단편화 문제와 파일 크기 선언 문제를 해결 했다. 그러나 FAT방식이 지원되지 않는다면 직접 접근 방식을 지원할 수 없다.
- 색인 할당은 모든 포인터들을 하나의 장소(색인 블록)으로 관리함으로써 이 문제를 해결한다.
- 각 파일들은 자신의 내용이 담긴 디스크 블록 주소를 모아놓은 배열인 색인 블록을 가진다.
- 단점: 공간낭비
- 대부분의 파일들은 작으므로 대부분 하나 또는 두개의 블록만으로 구성되어있다.
- 각 파일들은 각자 하나의 색인 블록을 가져야 하므로 색인 블록의 크기는 작은 것이 좋다. → 연결 기법, 다중 수준 색인, 결합기법
5. Free-Space Management
- 시스템의 자유공간은 자유공간 리스트로 관리된다.
A. Bit Vector
- 블록이 자유로우면 그 비트는 1, 만약 할당되어 있다면 그 비트는 0으로 표현하는 방식으로 자유 공간을 표현한다.
B. Linked List
C. Grouping
- 그룹핑은 Linked List의 변형으로 첫번째 자유 블록 내에 n개의 블록 주소를 저장하는 방법이다. 이중 n-1개는 실제 자유 블록의 주소이고 마지막 한개는 자신과 마찬가지로 n개의 자유블록 주소를 가지고 있는 자유 블록의 주소이다.
D. Counting
- 디스크 공간의 할당과 반환이 연속된 블록 단위로 이루어진다는 이점을 이용하는 것으로, 이 경우 모든 블록들을 일일히 추적할 필요가 없이 연속된 자유 블록의 첫번째 주소와 그 뒤로 연결된 블록의 개수만 유지하면 된다. 따라서 자유 공간 리스트의 각 항은 하나의 디스크 주소와 블록의 개수로 구성된다.
E. Space Maps