보조 저장공간 관리
파일에 블록 할당 책임 -> 운영체제 / 파일관리 시스템
두 가지 관리 이슈
- 보조 저장공간을 파일에 할당
- 가용공간을 지속적으로 인지하고 있어야 함
파일 할당
파일 할당에서 고려해야 할 사항
사전 할당 vs. 동적 할당
사전 할당의 경우 -> 공간 부족할까봐 크게 설정하면 공간 낭비가 초래됨
동적 할당의 경우 -> 연속영역들을 파일 저장에 필요한 만큼만 할당하게 되어 이점이지만 어려움
연속 영역의 크기
연속영역의 크기를 정할 때 단일 파일 관점의 효율성과 전체 시스템의 효율성을 절충할 필요
-> 절충하기 위한 대안들
가변의 큰 연속영역들
- 가변 크기는 낭비를 없애고 파일할당 테이블은 작음
- 가변크기 연속영역들을 사용할 경우 가용공간의 단편화 고려한 전략 필요
- 최초적합(First fit)
- 가용블록 리스트에서 최초로 발견되는 충분한 크기의 연속된 블록 집단을 선택
- 최적적합(Best fit)
- 충분한 크기의 가장 작은 연속된 블록 집단 선택
- 근접적합(Nearest fit)
- 파일의 지역성을 증가시키기 위해 그 이전 할당에 가장 가까운 충분한 크기의 연속된 블록 집단 선택
- 블록들
- 고정크기의 작은 연속영역들은 보다 큰 유연성 제공
-
파일할당 방법
연속할당(contiguous allocation)
- 파일 생성 시 단일의 연속된 블록 집단 할당
- 개별 순차파일 입장에서 가장 좋은 방법
- 충분한 길이의 연속된 블록 집단을 찾기 어려운 외부단편화 문제
- compaction 필요
연결 할당(chained allocation)
- 각 블록은 체인 상에서 그 다음 블록을 나타내는 포인터를 가짐
- 파일할당 테이블에는 각 파일에 하나의 항목(시작 블록+파일의 길이)를 가짐
- 외부단편화 문제 X
- 순차처리되는 순차파일에 가장 적합(체인 따라 추적)
- 지역성의 원리 수용 X
=> 통합정리(consolidation)로 문제 해결
인덱스 할당(indexed allocation)
- 각 파일에 대한 별개의 한 단계 인덱스가 있고 이 인덱스는 파일에 할당된 연속영역 각각에 대한 항목을 가짐
- 파일 인덱스는 별개의 블록에 저장되고 해당 파일에 대한 파일할당 테이블 항목이 인덱스가 저장된 블록을 가리키게 됨
- 블록 단위 할당 -> 외부단편화 제거
- 가변크기 연속영역 단위 할당 -> 지역성 증가
- 파일 통합정리 작업의 경우
- 블록 -> 인덱스 크기 변함 없음
- 가변길이 -> 인덱스 크기가 줄어듦
가용공간 관리
어떤 파일에도 할당되지 않은 공간도 관리가 필요함
=> 가용상태를 알기 위한 디스크할당 테이블의 필요성
비트테이블(Bit tables)
디스크 블록 하나당 한 비트가 대응된 벡터 이용
- 0 -> 가용 블록
- 1 -> 사용중인 블록
$\frac {바이트 단위 디스크 크기} {8 *파일 시스템 블록 크기} $
16GB 용량 기준 약 4MB 정도의 비트테이블 필요
메모리에 위치시키는 것이 가장 나음
연결된 가용 연속영역(Chained free portions)
가용 연속영역들은 자기 영역 내의 포인터와 길이 값을 사용하여 서로 연결
체인 시작부에 대한 포인터와 첫 연속 영역의 길이만 필요 -> 공간적 부담이 적음
하지만 어느정도 지나면 상당 부분이 단편화되어 많은 연속영역들이 단일 블록 길이가 될 수 있음
+블록할당마다 블록을 읽어 체인연결 조정하는 과정에서 오버헤드
인덱싱
가용 공간을 하나의 파일로 간주하며 파일 할당에서 설명한 인덱스 테이블 사용
인덱스는 블록보다는 가변크기 연속영역을 기초로
가용블록 리스트
각 블록에 순차적으로 번호를 부여하고 가용블록의 번호 유지
하나의 블록번호는 24비트 / 32비트
-> 가용블록 리스트의 크기는 그에 해당하는 비트테이블 크기의 24/32배가 되므로 디스크에 저장