보조저장장치의 직접 접근 특성은 파일의 구현에 융통성을 허용한다.
하지만 주요 문제는 파일들을 어떻게 저장장치 공간에 배치해야 디스크 공간을 효율적으로 사용할 수 있고, 파일들을 빨리 접근할 수 있는가 하는 것이다.
저장장치 공간을 할당하기 위해서는 연속, 연결 그리고 인덱스 기법이 사용된다.
1 ) 연속 할당 : 각 파일이 저장장치 내에서 연속적인 공간을 차지하도록 요구한다.
-> 대부분의 경우에서 좋은 성능을 보인다.
-> 간단하다 : 시작 지점과 길이만 필요하다.
-> 파일을 지우고 쓰는 과정에서 단편화 문제가 생길 수 있다.
-> Ex) 아주 큰 공간을 예약한 후, 파일이 장기간에 걸쳐서 서서히 커질 때는 많은 공간이 내부 단편으로 낭비된다.
: 어느 정도의 연속된 공간만 초기에 제공하고 추후 n개의 연속된 공간을 단위로 할당하는 방식으로 해결한다.
2 ) 연결 할당 : 파일을 저장장치 블록의 연결 리스트 형태로 저장
-> 탐색 필요 없다는 장점이 있음
-> 신뢰성 문제가 생길 수 있음.(하나의 포인터를 잃는 경우)
-> 포인터들을 저장한 공간이 필요함 (512B중에서 4B의 포인터가 필요한 경우)
: 블록을 모아 클러스터라고 하는 단위로 만들고 블록이 아닌 클러스터를 할당.
3 ) 파일 할당 테이블(FAT) : 각 파티션의 시작 부분이 FAT으로 사용됨. 이 FAT테이블은 각 블록마다 한 개의 항목을 가지고 있고, 이 항목은 디스크 블록 번호를 인덱스로 찾는다. 이 블록 번호를 가지고 FAT테이블로 가면 그 항목은 다음 블록의 블록 번호를 가리킨다.
4 ) 색인 할당
-> 각 파일은 저장장치 블록 주소를 모아놓은 배열인 색인 블록을 가진다.
-> 이를 위해 인덱스 테이블이 필요함.
-> 직접 접근이 가능하고 외부 단편화 문제가 발생하지 않는다.
색인 블록이 충분히 크지 않아 포인터들을 저장할 수 없다면, 다중 수준 색인을 사용한다.
위에 소개한 방법들은 모두 합치는 방법도 존재한다.
UNIX UFS에서 이 방법을 사용한다..
직접 블럭, 단일 간접 블록, 이중 간접 블록 등을 이용함.
[성능]
사이즈가 고정되어 있는 경우 -> 연속 할당 방법
유동적이며 사이즈가 큰 경우 -> 연결 OR 인덱스 방법 이용