Post

[운영체제-양희재 교수님]28-29강 파일 할당

경성대학교 양희재 교수님의 운영체제 28강

경성대학교 양희재 교수님의 운영체제 29강

파일 시스템

  • 컴퓨터 시스템 자원 관리
    • CPU: 프로세스 관리
      • CPU 스케쥴링, 프로세스 동기화
    • 주기억장치: 메인 메모리 관리
      • 페이징, 가상 메모리
    • 보조기억장치: 파일 시스템
      • 파일 할당

파일 할당(File Allocation)

  • 하드 디스크는 크게 track(cylinder), sector로 구성
  • Sector size는 일반적으로 512 bytes ⇒ 크기가 너무 작아 여러 sector를 모은 block 단위로 읽기/쓰기 ⇒ 하드 디스크는 block device
    • 참고) blockdevice ↔ character device(키보드 등)
  • 하드 디스크 = pool of free blocks
    • 각각의 파일에 대해 free block을 어떻게 할당하는가?

연속 할당(Contiguous Allocation)

  • 각 파일에 대해 디스크 상의 연속된 블록을 할당
  • 장점
    • 디스크 헤더의 이동 최소화 ⇒ 빠른 IO 성능으로 읽고 쓰기가 빠르다.
      • 따라서 동영상, 음악, VOD 등에 적합
    • 순차 접근과 직접 접근 가능
      • 순차 접근(sequential access): 순서대로 읽기 가능
      • 직접 접근(direct access): 연속적으로 할당되어 있으니 디렉토리의 block 정보를 보고 다음 블록의 위치를 추정하여 특정 부분을 바로 읽기 가능
  • 단점
    • 파일이 삭제되면 hole 생성 ⇒ 파일 생성/삭제가 반복되면 곳곳에 흩어지는 holes ⇒ 외부 단편화 발생 ⇒ 디스크 공간 낭비
      • Compaction을 할 수 있지만 시간이 오래 걸린다.
    • 파일 생성 당시 파일의 크기를 알 수 없음 ⇒ 파일을 어느 hole에 넣어야 하는지 알 수 없음
    • 파일의 크기가 계속 증가할 수 있음 ⇒ 크기가 늘어나는 파일 배치 불가능
  • 연속 할당의 단점을 극복하기 위해 연결 할당 등장

연결 할당(Linked Allocation)

  • 파일 = linked list of data blocks
    • 파일 디렉토리(directory)는 제일 처음 블록을 가리킨다.
    • 각 블록은 포인터 저장을 위해 4바이트 또는 그 이상 소모
  • 새로운 파일 만들기
    • 비어있는 임의의 블록을 첫 블록으로 지정
    • 파일이 커지면 다른 블록을 할당 받고 연결
    • 따라서 외부 단편화 없음
  • 단점
    • 순서대로만 읽기(sequential access) 가능
      • 순서대로 포인터를 읽어야 하기 때문에 Direct access 불가
    • 포인터 저장 위해 4바이트 이상 손실
    • 포인터 끊어지면 이하 접근 불가 ⇒ 낮은 신뢰성
    • 헤더의 움직임 증가 ⇒ 느린 속도

File Allocation Table(FAT) 파일 시스템

  • 연결 할당의 단점을 개선한 시스템
  • 포인터만 모은 테이블(FAT)을 별도의 블록에 저장
  • Direct access 가능
  • FAT는 일반적으로 부팅시 메모리에 바로 올라가 메모리 캐싱
  • FAT 손실 시 복구 위해 이중 저장

색인 할당(Indexed Allocation)

  • 파일은 데이터 블록 외에 한 개의 인덱스 블록을 추가로 가짐
    • 인덱스 블록 = 포인터의 모음
    • 디렉토리는 시작하는 블록의 위치가 아닌 인덱스 블록을 가리킨다.
  • Unix/Linux 등에서 사용
  • 장점
    • Direct access 가능
    • 외부 단편화 없음
  • 단점
    • 추가적인 인덱스 블록 할당을 위한 저장 공간 손실
    • 인덱스 블록 하나에 파일의 인덱스가 포함되어야 하므로 파일의 최대 크기가 제한된다.
      • 예) 1블록 = 512바이트 = 4바이트 x 128개 인덱스 ⇒ 한 파일당 128개의 인덱스만 소유 가능 ⇒ 최대 파일 크기 = 128 * 512바이트 = 64KB
      • 예) 1블록 = 1KB = 4바이트 x 256개 인덱스 ⇒ 최대 파일 크기 = 256 * 1KB = 256KB
      • 해결 방법
        • Linked: 여러 개의 인덱스 블록을 연결하여 사용
        • Multilevel index: 계층을 두어 인덱스 블록을 여러개 사용
        • Combined: Linked + Multilevel index
This post is licensed under CC BY 4.0 by the author.