11-3.[os] 디스크 파일 할당
연속 할당과 불연속 할당
- 파일 시스템과 메인 메모리 시스템은 유사
- 전체 디스크 공간을 같은 크기로 나누고 각 공간에 주소를 붙여서 관리
- 블록: 같은 크기로 나뉜 공간 하나, 1~8KB
- 파일 시스템 : 파일 테이블(파일 이름+ 블록 주소)을 관리
- 파일 테이블은 파티션당 하나씩, 각 파티션 맨 앞에 위치
연속 할당
- contiguous allocation
- 파일을 구성하는 데이터를 디스크상에 연속적으로 배열하는 간단한 방식
- 이론: 시작 블록만 알면 전체 파일을 찾을 수 있다
- 삭제하면 빈공간 생김 -> 남은 공간 중 파일의 크기와 맞는 연속된 공간이 없을 때는 연속 할당이 불가능
- 실제론 안 쓰임
불연속 할당
- non-contiguous allocation
- 비어 있는 블록에 데이터를 분산하여 저장 -> 파일 시스템이 관리
- 연결 할당: 연결 리스트 이용
- 인덱스 할당: 인덱스 이용
연결 할당
- linked allocation
- 파일에 속한 데이터를 연결 리스트로 관리하는 방식
- 파일 테이블에 시작 블록에 대한 정보만 저장
- 파일 맨 끝에 해당하는 블록에는 링크 대신 널을 삽입
- = 체인 할당(chained allocation): 체인으로 연결한 것처럼 보여서
- 파일 제어 테이블: 시작 블록 정보 -> 파일 할당 테이블: 파일의 전체 데이터
- 파일 할당 테이블(FAT)
- FAT12, FAT16, FAT320
- FAT16의 최대 주소 크기 2^16
FAT32의 최대 주소 크기 2^32
테이블을 이용한 방식의 단점: 하나의 파티션이 사용할 수 있는 디스크 용량이 테이블의 주소 크기로 제한됨
- FAT16 -> 최대 파티션 크기 32G
- FAT32 -> 최대 파티션 크기 8TB, 최대 파일 1개 크기 4GB
FAT 안 쓰고 NTFS 씀
최대 할당 크기에 제한이 있다
인덱스 할당
- indexed allocation
- 최대 할당 크기에 제한이 없다
간접 인덱스 블록
- indirect index block
- 테이블이 꽉 차서 더 이상 데이터를 연결할수 없을 때 간접 인덱스 블록을 만듦
- 테이블을 무한히 확장
파일 제어 블록:
- 파일 소유자와 각종 속성
- 파일에 대한 모든 권한의 정보를 포함
- = 슈퍼블록 (super block)
블록포인터:
- 데이터가 있는 블록의 위치를 직접 연결하는 포인터
간접 포인터:
- 크기가 작은 파일은 직접 연결된 블록 포인터로 빠르게 접근
- 블록 포인터가 다차면 인덱스블록을 생성한 후 간접 포인터를 생성하여 인덱 스 블록을 연결
이중/삼중 간접 포인터:
- 인덱스 블록 하나는 256개의 블록을 지정
- 파일 크기가 커서 인덱스 블록 하나로도 다 연결할 수 없는 경우에는 이중간접 포인터를 사용
디스크의 빈 공간 관리
- 블록 하나의 크기: 1~8KB
- 크면 -> 내부 단편화
- 작으면 - 많은 양의 블록 포인터가 필요
- ex) 윈도우 파일 속성 화면
- 실제 전체 파일의 크기: 22.1GB
- 파일에 할당된 디스크의 크기: 22.3GB
- -> 200MB 차이
- -> 내부 단편화
빈공간 리스트 (block list):
- 내부 단편화를 줄이고 빈 공간을 효율적으로 관리하기 위해 빈 블록의 정보만 모아놓은 리스트
- 파일 B가 실행될 때의 빈공간 리스트와 파일 B가 삭제된 후의 빈공간 리스트
- 파일 B가사용했던 2,4,12, 8번 블록의 내용이 지워지지 않고 빈공간 리스트에 삽입됨
- 파일이 사용했던 공간을 일일이 지우는 것은 시간이 많이 걸림
- 파일 테이블의 헤더를 삭제 + 빈 공간 리스트에 등록 -> 삭제했다 침
- 새로운 데이터를 덮어쓰지 않는 한 원래 데이터를 복구할 수 있음
리스트에 먼저 들어온 블록부터 할당
디스크 오류 검사(chkdsk)
- 예) 갑작스러운 정전, 강제 전원 차단,외부 저장장치를 안전 제거하지 않고 강제로 분리
- -> 데이터를 저장했으나 블록 포인터가 사라져서 데이터가 없어진 것처럼 보이거나 디스크의 빈 공간이 빈 공간 리스트에 등록되지 않아 사용할 수 없게 됨