OS 파일 할당 이해하기


파일 할당에 대해 작성한 글입니다


파일 할당

  • 파일 시스템 중 일부인 파일 할당에 대해 배웁니다
  • 컴퓨터 시스템 자원 관리
    • CPU: 프로세스 관리 (CPU 스케쥴링, 프로세스 동기화)
    • 주기억장치: 메인 메모리 관리 (페이징, 가상 메모리)
    • 보조기억장치: 파일 시스템
  • 보조기억장치 (하드 디스크)
    • 하드디스크: track (cylinder), sector
    • Sector size = 512 bytes, cf. Block size
      • Sector를 모아둔 것이 Block
    • 블록 단위의 읽기/쓰기 (block device)
      • <-> character device : 글자 단위
    • 디스크 = pool of free blocks
    • 각각의 파일에 대해 free block 을 어떻게 할당해줄까? ☞ 파일 할당
  • 파일 할당 (File Allocation)
    • 연속 할당 (Contiguous Allocation)
    • 연결 할당 (Linked Allocation)
    • 색인 할당 (Indexed Allocation)

연속 할당

  • 리스트처럼 할당
  • Contiguous Allocation
    • 우리가 가장 쉽게 생각할 수 있는 할당 방법
    • 각 파일에 대해 디스크 상의 연속된 블록을 할당
    • 장점: 디스크 헤더의 이동 최소화 = 빠른 i/o 성능
    • 옛날 IBM VM/CMS 에서 사용
    • 동영상, 음악, VOD 등에 적합
    • 순서적으로 읽을 수도 있고 (sequential access 순차접근)
    • 특정 부분을 바로 읽을 수도 있다 (direct access 직접접근)
  • 문제점
    • 파일이 삭제되면 hole 생성
    • 파일 생성/삭제 반복되면 곳곳에 흩어지는 holes
    • 새로운 파일을 어느 hole 에 둘 것인가? ☞ 외부 단편화! (메모리에서 발생했던 문제)
    • First-, Best-, Worst-fit
  • 단점: 외부 단편화로 인한 디스크 공간 낭비
    • Compaction 할 수 있지만 시간 오래 걸린다 (초창기 MS-DOS)
    • 디스크의 1/3을 날림
  • 또 다른 문제점
    • 파일 생성 당시엔 이 파일의 크기를 알 수 없다 ☞ 파일을 어느 hole 에 넣어야 할까?
    • 파일의 크기가 계속 증가할 수 있다 (log file) ☞ 기존의 hole 배치로는 불가!
    • 어떻게 해결할 수 있을까?

연결 할당

  • 연결 리스트처럼 할당
  • Linked Allocation
    • 파일 = linked list of data blocks
    • 파일 디렉토리(directory)는 제일 처음 블록 가리킨다.
    • 각 블록은 포인터 저장을 위한 4바이트 또는 이상 소모
  • 새로운 파일 만들기
    • 비어있는 임의의 블록을 첫 블록으로
    • 파일이 커지면 다른 블록을 할당 받고 연결
    • 외부 단편화 없음!
    • 외부 단편화는 없어 제일 중요한 디스크 낭비는 없음
  • 문제점
    • 순서대로 읽기 = sequential access
    • Direct access 불가
    • 포인터 저장 위해 4바이트 이상 손실
    • 낮은 신뢰성: 포인터 끊어지면 이하 접근 불가
      • 연속 할당은 포인터가 끊어져도 그 다음 것을 알 수 있음
    • 느린 속도: 헤더의 움직임
  • 개선: FAT 파일 시스템
    • File Allocation Table 파일 시스템
    • MS-DOS, OS/2, Windows 등에서 사용
    • 포인터들만 모은 테이블 (FAT) 을 별도 블록에 저장
    • FAT 손실 시 복구 위해 이중 저장
    • Direct access 도 가능!
    • FAT는 일반적으로 메모리 캐싱
    • 몇 bit를 할당하면 좋을까?
      • 32비트 -> FAT32, 64비트 -> FAT62

색인 할당

  • Indexed Allocation
    • 파일 당 (한 개의) 인덱스 블록 (데이터 블록 외에)
    • 인덱스 블록은 포인터의 모음
    • 디렉토리는 인덱스 블록을 가리킨다.
    • Unix/Linux 등에서 사용
  • 장점
    • Sequential accecss 가능
    • Direct access 가능
    • 외부 단편화 없음
  • 문제점
    • 인덱스 블록 할당에 따른 저장공간 손실
    • 예: 1바이트 파일 위해 데이터 1블록 + 인덱스 1블록
    • 바이트가 작기 때문에 큰 파일을 만들 수 없음 => 여러 인덱스로 구성(Linked)
  • 파일의 최대 크기
    • 예제: 1블록 = 512바이트 = 4바이트 × 128개 인덱스, 128 × 512바이트 = 64KB
    • 예제: 1블록 = 1KB = 4바이트 × 256개 인덱스, 256 × 1KB = 256KB
  • 해결 방법: Linked, Multilevel index, Combined 등
    • Linked : 여러 인덱스로 계층적 구성
    • Multilevel : 여러 인덱스로 넓게 구성
    • Combined : Linked + Multilevel index

Reference


카일스쿨 유튜브 채널을 만들었습니다. 데이터 사이언스, 성장, 리더십, BigQuery 등을 이야기할 예정이니, 관심 있으시면 구독 부탁드립니다 :)

PM을 위한 데이터 리터러시 강의를 만들었습니다. 문제 정의, 지표, 실험 설계, 문화 만들기, 로그 설계, 회고 등을 담은 강의입니다

이 글이 도움이 되셨거나 다양한 의견이 있다면 댓글 부탁드립니다 :)

Buy me a coffeeBuy me a coffee





© 2017. by Seongyun Byeon

Powered by zzsza