11-3.[os] 디스크 파일 할당

연속 할당과 불연속 할당

  • 파일 시스템과 메인 메모리 시스템은 유사
  • 전체 디스크 공간을 같은 크기로 나누고 각 공간에 주소를 붙여서 관리
  • 블록: 같은 크기로 나뉜 공간 하나, 1~8KB
  • 파일 시스템 : 파일 테이블(파일 이름+ 블록 주소)을 관리
  • 파일 테이블은 파티션당 하나씩, 각 파티션 맨 앞에 위치

연속 할당

  • contiguous allocation
  • 파일을 구성하는 데이터를 디스크상에 연속적으로 배열하는 간단한 방식
  • 이론: 시작 블록만 알면 전체 파일을 찾을 수 있다
  • 삭제하면 빈공간 생김 -> 남은 공간 중 파일의 크기와 맞는 연속된 공간이 없을 때는 연속 할당이 불가능
  • 실제론 안 쓰임

불연속 할당

  • non-contiguous allocation
  • 비어 있는 블록에 데이터를 분산하여 저장 -> 파일 시스템이 관리
  • 연결 할당: 연결 리스트 이용
  • 인덱스 할당: 인덱스 이용

연결 할당

  • linked allocation
  • 파일에 속한 데이터를 연결 리스트로 관리하는 방식
  • 파일 테이블에 시작 블록에 대한 정보만 저장
  • 파일 맨 끝에 해당하는 블록에는 링크 대신 널을 삽입
  • = 체인 할당(chained allocation): 체인으로 연결한 것처럼 보여서

image.png

image.png

  • 파일 제어 테이블: 시작 블록 정보 -> 파일 할당 테이블: 파일의 전체 데이터
  • 파일 할당 테이블(FAT)
  • FAT12, FAT16, FAT320
  • FAT16의 최대 주소 크기 2^16
  • FAT32의 최대 주소 크기 2^32

  • 테이블을 이용한 방식의 단점: 하나의 파티션이 사용할 수 있는 디스크 용량이 테이블의 주소 크기로 제한됨

  • FAT16 -> 최대 파티션 크기 32G
  • FAT32 -> 최대 파티션 크기 8TB, 최대 파일 1개 크기 4GB
  • FAT 안 쓰고 NTFS 씀

  • 최대 할당 크기에 제한이 있다


인덱스 할당

  • indexed allocation
  • 최대 할당 크기에 제한이 없다

image.png

간접 인덱스 블록

  • indirect index block
  • 테이블이 꽉 차서 더 이상 데이터를 연결할수 없을 때 간접 인덱스 블록을 만듦
  • 테이블을 무한히 확장
  • 파일 제어 블록:

    • 파일 소유자와 각종 속성
    • 파일에 대한 모든 권한의 정보를 포함
    • = 슈퍼블록 (super block)
  • 블록포인터:

    • 데이터가 있는 블록의 위치를 직접 연결하는 포인터
  • 간접 포인터:

    • 크기가 작은 파일은 직접 연결된 블록 포인터로 빠르게 접근
    • 블록 포인터가 다차면 인덱스블록을 생성한 후 간접 포인터를 생성하여 인덱 스 블록을 연결
  • 이중/삼중 간접 포인터:

    • 인덱스 블록 하나는 256개의 블록을 지정
    • 파일 크기가 커서 인덱스 블록 하나로도 다 연결할 수 없는 경우에는 이중간접 포인터를 사용

image.png


디스크의 빈 공간 관리

  • 블록 하나의 크기: 1~8KB
  • 크면 -> 내부 단편화
  • 작으면 - 많은 양의 블록 포인터가 필요
  • ex) 윈도우 파일 속성 화면

image.png

  • 실제 전체 파일의 크기: 22.1GB
  • 파일에 할당된 디스크의 크기: 22.3GB
  • -> 200MB 차이
  • -> 내부 단편화

빈공간 리스트 (block list):

  • 내부 단편화를 줄이고 빈 공간을 효율적으로 관리하기 위해 빈 블록의 정보만 모아놓은 리스트

image.png

  • 파일 B가 실행될 때의 빈공간 리스트와 파일 B가 삭제된 후의 빈공간 리스트
  • 파일 B가사용했던 2,4,12, 8번 블록의 내용이 지워지지 않고 빈공간 리스트에 삽입됨
  • 파일이 사용했던 공간을 일일이 지우는 것은 시간이 많이 걸림
  • 파일 테이블의 헤더를 삭제 + 빈 공간 리스트에 등록 -> 삭제했다 침
  • 새로운 데이터를 덮어쓰지 않는 한 원래 데이터를 복구할 수 있음
  • 리스트에 먼저 들어온 블록부터 할당

  • 디스크 오류 검사(chkdsk)

  • 예) 갑작스러운 정전, 강제 전원 차단,외부 저장장치를 안전 제거하지 않고 강제로 분리
  • -> 데이터를 저장했으나 블록 포인터가 사라져서 데이터가 없어진 것처럼 보이거나 디스크의 빈 공간이 빈 공간 리스트에 등록되지 않아 사용할 수 없게 됨

Did you find this article valuable?

Support Christy Choi by becoming a sponsor. Any amount is appreciated!