PromleeBlog
sitemapaboutMe

posting thumbnail
파일 시스템 구현 방식 - 하루 10분 운영체제 14일차
How File Systems Are Implemented - 10 Minutes of OS Day 14

📅

🚀

들어가기 전에🔗

우리가 폴더를 만들거나 파일을 저장할 때마다, 운영체제는 디스크에 정해진 규칙에 따라 정보를 저장하고 관리합니다. 이때 사용되는 구조와 알고리즘을 총칭해 *파일 시스템 구현(File System Implementation)*이라고 부릅니다.
이번 글에서는 디렉터리 구조와 파일 할당 방법, 공간 관리 기법, 그리고 고장이 났을 때 어떻게 복구하는지까지 하나하나 예시를 들어 설명해 보겠습니다.

🚀

파일 시스템 구조🔗

운영체제는 파일 시스템을 다음과 같은 계층 구조로 관리합니다
파일 시스템 구조
파일 시스템 구조
  1. 부트 제어 블록
    : 시스템 부팅에 필요한 정보 포함 (디스크 시작 부분)
  2. 볼륨 제어 블록
    : 전체 볼륨 정보를 담음 (예: 총 용량, 사용/남은 공간 등)
  3. 디렉터리 구조
    : 폴더와 파일 간 관계 기록
  4. 파일 제어 블록(FCB)
    : 각 파일의 메타데이터 (크기, 위치, 권한 등)

1. 부트 제어 블록 (Boot Control Block)🔗

2. 볼륨 제어 블록 (Volume Control Block)🔗

3. 디렉터리 구조 (Directory Structure)🔗

예: /home/user/hello.txt
→ 디렉터리 항목: hello.txt → FCB 주소 0x20F4

4. 파일 제어 블록 (File Control Block, FCB 또는 inode)🔗

각 파일은 하나의 FCB를 가지고 있으며, 해당 파일의 핵심 정보를 담고 있습니다.
필드설명
소유자파일을 만든 사용자 ID
파일 크기총 바이트 수
접근 권한읽기, 쓰기, 실행 가능 여부
생성/수정 시간파일 생성 및 마지막 수정 시각
블록 포인터실제 데이터 블록의 위치 주소 (직접/간접 포인터 등)
리눅스에서는 FCB 개념을 inode라는 번호로 관리합니다. ls -i 명령어로 확인 가능

구조 간 흐름 예시🔗

  1. 사용자가 /home/user/hello.txt 파일을 열면
  2. 디렉터리 구조가 해당 이름의 FCB를 찾아 위치를 반환
  3. 운영체제는 해당 FCB에서 데이터 블록 위치를 읽고
  4. 디스크에서 해당 블록을 읽어 메모리에 올립니다
/home/user/hello.txt → 디렉터리에서 FCB 찾기 → FCB의 블록 포인터 → 디스크 접근

🚀

디렉터리 구현 방식🔗

디렉터리는 단순한 폴더가 아니라, 내부적으로는
파일 이름과 파일 제어 블록 주소의 리스트
입니다. 운영체제는 이 리스트를 통해 원하는 파일을 빠르게 찾을 수 있습니다.

대표적 구현 방식🔗

예: [파일명1 → FCB 0x123], [파일명2 → FCB 0x200], ...

🚀

파일 할당 방식🔗

디스크에 파일을 저장할 때 어떤 블록에 저장할지를 결정하는 방식입니다. 할당 방식에 따라 성능과 단편화가 크게 달라집니다.

1. 연속 할당 (Contiguous Allocation)🔗

예: 파일 A = 블록 10~14, 파일 B = 블록 15~18

2. 연결 할당 (Linked Allocation)🔗

예: 블록 3 → 블록 12 → 블록 7

3. 인덱스 할당 (Indexed Allocation)🔗

예: 인덱스 블록 = [5, 9, 13, 20]
파일 할당 방식
파일 할당 방식

🚀

가용 공간 관리🔗

파일을 지우거나 옮길 때, 생기는 빈 공간을 어떻게 관리하느냐도 성능에 큰 영향을 줍니다.

주요 기법🔗

예: 비트맵 → 1110010110, 프리 리스트 → [블록 3, 6, 9]

🚀

파일 시스템 복구🔗

예기치 않은 종료나 고장이 발생하면 파일 시스템이 손상될 수 있습니다. 이를 방지하거나 회복하기 위한 기술도 중요합니다.

복구 방법 예시🔗


🚀

요약🔗

파일 시스템 구현은 디스크라는 물리적 공간을 효율적이고 안정적으로 사용하는 핵심 기술입니다. 오늘은 구조, 할당 방식, 공간 관리, 복구 기술까지 운영체제가 내부적으로 처리하는 방식을 전체적으로 정리해보았습니다.
다음 글에서는 실제 예로 사용되는
WAFL 파일 시스템
을 통해 구현 사례를 소개하겠습니다.

참고🔗