[OS] 파일 시스템(File System) - 16

2026. 4. 10. 09:58운영체제(OS)

파일 시스템(File System)

파일이 디스크에 어떻게 저장되고, OS가 그것을 어떻게 관리하는지 다룬다. 파일의 구성 단위부터 실제 파일시스템 구현체(FAT, UNIX i-node)까지 흐름을 따라가본다.

💡 핵심: 파일 시스템은 "파일을 어떻게 디스크 블록에 나눠 담고, 다시 찾아올 것인가"에 대한 OS의 해법이다.

1. 파일(File)이란?

파일은 보조기억장치1에 저장된, 의미 있고 관련된 정보의 집합이다. 대부분의 컴퓨터 시스템에서 소프트웨어(프로그램과 데이터)를 관리하기 위해 파일이라는 개념을 사용하며, 파일을 저장하는 물리적 장치는 하드디스크를 비롯한 여러 매체가 사용된다.

파일은 단순한 데이터 덩어리가 아니다. 각 파일에는 이름, 형태, 크기, 위치, 접근 권한, 작성자, 작성 시기 같은 다양한 속성(Attribute)이 함께 붙어있다. OS는 이 속성들을 관리하며, 파일에 대한 모든 작업(생성, 삭제, 읽기, 쓰기, 열기, 닫기)은 반드시 OS를 통해 이루어진다.

속성설명
이름(Name)사람이 읽을 수 있는 식별자
형태(Type)OS가 인식하는 파일 종류, 확장자로 구분
크기(Size)파일에 저장된 정보의 양 (바이트 단위)
위치(Location)보조기억장치에서의 물리적 주소
접근 권한읽기 전용, 읽기/쓰기 혼용 등
작성자 / 작성 시기생성 날짜, 최종 수정 날짜 등

파일에 대한 연산은 크게 두 가지로 나뉜다. 파일 자체를 다루는 Open, Close, Create, Copy, Delete, Rename, List와 파일 내부 레코드2를 다루는 Read, Write, Update, Insert, Search가 있다.

2. 파일의 구성 단위

파일 안의 데이터는 마치 레고 블록처럼 작은 단위들이 모여 점점 더 큰 단위를 이룬다. 가장 작은 조각인 비트 하나에서 출발해, 여러 개가 모일수록 의미 있는 덩어리가 된다. 이 흐름을 이해해두면 나중에 "OS가 왜 파일을 블록 단위로 저장하는가"가 자연스럽게 연결된다.

비트
Bit
0 또는 1 — 컴퓨터가 이해하는 가장 작은 신호 전기가 흐르면 1, 안 흐르면 0. 그 이상도 이하도 없다.
↓ 8개 모이면
바이트
Byte
8 Bit — 글자 한 자를 담을 수 있는 단위 영어 'A' 한 글자 = 1 Byte. 한글은 보통 2~3 Byte.
↓ 2의 배수로 묶이면
워드
Word
2·4·8·16 Byte — CPU가 한 번에 처리하는 단위 32비트 CPU는 4 Byte, 64비트 CPU는 8 Byte가 한 워드.
↓ 의미 있는 정보로 묶이면
필드
Field
하나의 의미를 가진 데이터 조각 학생 정보에서 "이름", "학번", "성적" 각각이 하나의 필드다.
↓ 관련 필드들이 모이면
레코드
Record
한 행(Row)의 완결된 정보 묶음 "홍길동 | 20210001 | A+" — 이게 하나의 레코드. 프로그램이 처리하는 기본 단위.
↓ 여러 레코드가 묶이면
블록
Block
디스크 입출력의 실제 단위 OS는 레코드 하나를 읽어도 디스크에서 블록 단위로 통째로 읽어온다. 효율 때문이다.
↓ 같은 종류의 블록들이 모이면
파일
File
내용·목적·형태가 동일한 레코드의 집합 — 프로그램의 기본 단위 student.csv, save.dat, config.json 같은 것들이 바로 파일이다.

여기서 레코드는 논리적 레코드물리적 레코드(블록)로 구분된다. 논리적 레코드는 "홍길동 | 20210001 | A+"처럼 프로그램 입장에서 의미 있는 한 줄의 데이터다. 물리적 레코드는 그런 논리적 레코드 여러 개를 묶어 디스크에 실제로 기록하는 단위다. OS는 파일을 읽고 쓸 때 항상 이 블록(물리적 레코드) 단위로 입출력한다.

3. 파일을 디스크에 저장하는 방법 — 할당 방식

포매팅3이 끝난 디스크에는 수많은 블록이 존재한다. OS는 파일을 저장할 때 이 블록들을 어떻게 배분할지 결정해야 한다. 크게 세 가지 전략이 있다.

연속 할당 (Contiguous Allocation)

파일을 구성하는 블록들을 디스크의 연속된 공간에 나란히 배치하는 방식이다. 구현이 단순하고, 물리적으로 연속되어 있어 접근 속도가 빠르다. 파일에 접근할 때는 첫 번째 블록 주소블록 단위 길이만 알면 된다.

A0
A1
A2
B3
B4
C5
C6
C7
-8
-9

▲ 파일 A(블록 0~2), B(블록 3~4), C(블록 5~7)가 연속 배치된 모습

단점은 외부 단편화다. 파일을 삭제하면 중간에 구멍이 생기는데, 남은 공간의 합이 충분해도 연속된 공간이 없으면 새 파일을 저장하지 못한다.

❌ 삭제 후 — 외부 단편화 발생
[A][A][A][빈][빈][C][C][C][빈][빈]
잔여 4블록이지만 연속 3블록 없음
✅ 연속 할당이 정상인 경우
[A][A][A][B][B][C][C][C][빈][빈]
연속 공간 보장, 빠른 접근

연결 할당 (Linked Allocation)

각 블록의 일부에 다음 블록의 주소를 저장해서, 블록들을 연결 리스트처럼 이어붙이는 방식이다. 파일을 꼭 연속된 공간에 저장할 필요가 없어서 외부 단편화 문제가 사라진다.

DATA 블록 4 next → 9
DATA 블록 9 next → 2
DATA 블록 2 next → 11
DATA 블록 11 next → EOF

하지만 단점이 있다. 특정 블록에 직접 접근하려면 반드시 첫 번째 블록부터 순서대로 따라가야 한다. 또한 블록 하나가 손상되면 그 이후 모든 블록에 접근할 수 없게 된다. FAT 파일 시스템은 바로 이 단점을 해결하기 위해 등장한다.

색인 할당 (Indexed Allocation)

파일을 구성하는 모든 블록 주소를 색인 블록(Index Block)이라는 하나의 특별한 블록에 모아두는 방식이다. 파일에 접근할 때는 색인 블록을 먼저 읽고, 원하는 순번의 주소를 꺼내 해당 블록으로 바로 이동한다.

비유하자면 책의 맨 앞에 있는 목차와 같다. 목차(색인 블록)를 보면 3장이 몇 페이지인지 바로 알 수 있고, 1장부터 순서대로 넘길 필요가 없다.

📋 색인 블록
(주소 목록만 저장)
[0] 블록 4
[1] 블록 9
[2] 블록 2
[3] 블록 11
주소 보고
바로 이동
블록 4
DATA (파일 0번째 조각)
블록 9
DATA (파일 1번째 조각)
블록 2
DATA (파일 2번째 조각)
블록 11
DATA (파일 3번째 조각)

임의 접근이 가능하고 연결 할당처럼 블록 하나의 손상이 연쇄적으로 퍼지지 않는다. 다만 작은 파일도 색인 블록 하나를 반드시 할당해야 해서 작은 파일이 많은 경우 공간 낭비가 생긴다. UNIX 파일 시스템의 i-node가 이 방식을 기반으로 한다.

4. 파일 구조의 종류

파일 구조는 파일을 구성하는 레코드들이 편성되는 방식이다. 같은 데이터도 어떤 구조로 저장하느냐에 따라 접근 방법과 성능이 달라진다.

순차 파일 (Sequential File)

순서를 지니고 입력되는 데이터들을, 논리적인 처리 순서에 따라 물리적 저장 공간에 연속되게 기록하는 방식이다. 파일 구성이 쉽고 간단하며, 순차적으로 접근하므로 기억 공간의 이용률이 좋다. 주로 급여 관리처럼 변동 사항이 크지 않고 기간별로 일괄 처리하는 배치 작업에 적합하다. 단, 새로운 레코드를 삽입하거나 삭제할 때 파일 전체를 복사해야 하는 단점이 있다.

직접 파일 / 랜덤 파일 (Direct / Random File)

레코드를 특정 순서 없이 임의의 물리적 저장 공간에 기록하는 방식이다. 레코드를 구분하는 키(Key)를 해시 함수4에 넣어 보조기억장치의 물리적 주소를 계산한 뒤 해당 위치에 직접 접근한다. 접근 시간이 빠르고 삽입, 삭제, 갱신이 쉬운 대신 해시 충돌이 발생할 수 있어 추가 기억 공간 확보가 필요하다.

레코드 키
해시 함수
물리적 주소 계산
해당 블록 직접 접근

색인 순차 파일 (ISAM, Indexed Sequential Access Method)

순차 처리와 랜덤 처리가 모두 가능하도록 레코드들을 키 값 순으로 정렬해 기록하고, 레코드의 키 항목만 모아 별도의 색인(Index)을 구성하는 방식이다. 색인을 통해 원하는 레코드를 탐색한 후 색인이 가리키는 주소로 직접 접근한다.

색인 순차 파일 구성
기본 구역 (Prime Area)

실제 레코드들을 키값 순으로 저장하는 영역

색인 구역 (Index Area)

기본 구역의 레코드 위치를 찾아가는 색인이 기록 (트랙/실린더/마스터 색인 구역)

오버플로 구역 (Overflow Area)

기본 구역에 빈 공간이 없어 새로운 레코드 삽입이 불가할 때를 대비한 예비 영역

효율적인 검색이 가능하고 레코드 삽입, 삭제, 갱신이 용이하지만, 색인 구역과 오버플로 구역을 위한 추가 기억공간이 필요하다. 오버플로 레코드가 많아지면 파일을 재편성해야 하는 문제도 있다. 현대에는 이 방식이 B+Tree 기반 인덱스로 대체됐지만, 색인을 통해 데이터에 접근한다는 개념 자체는 오늘날 DB 인덱스에도 그대로 살아있다.

그 외 파일 구조

종류설명
분할 파일하나의 파일을 여러 개의 작은 파일로 나눠 저장. 큰 파일이나 백업 용도에 사용
다중 키 파일 (Multi Key File)하나의 데이터 파일에 여러 개의 접근 방법 지원. 순차·임의 처리 모두 가능
역 파일 (Inverted File)특정 항목을 여러 색인으로 만들어 항목별 특성에 맞게 작업 가능한 다중 키 파일
다중 링 파일 (Multi Ring File)같은 특성의 레코드들을 포인터로 연결. 기억장소 절약, 중복 배제

5. 파일 시스템(File System)

파일 시스템은 OS의 한 부분으로, 디스크 등의 보조기억장치에 있는 파일들을 생성, 삭제, 저장, 정보의 액세스, 공유, 보호, 구성, 사용자 인터페이스, 백업 및 복구 등을 총괄 관리하는 기술이다. 파일 시스템이 없다면 디스크는 그냥 블록 덩어리일 뿐이고, 우리가 "파일"이라는 개념으로 데이터를 다룰 수 없다.

파티셔닝과 포매팅

공장에서 막 출고된 새 디스크는 파일을 저장할 수 없다. 사용하기 전에 두 단계가 필요하다.

새 디스크
파티셔닝
포매팅
파일 저장 가능
  • 파티셔닝(Partitioning) — 저장 장치의 논리적인 영역을 구획하는 작업. 하나의 디스크를 C드라이브, D드라이브처럼 나누는 것.
  • 포매팅(Formatting) — 파일 시스템을 설정하는 작업. 어떤 방식으로 파일을 저장하고 관리할지 결정하며, 새로운 데이터를 쓸 준비를 한다.

파일 디스크립터 (File Descriptor / FCB)

파일 디스크립터5는 OS가 파일을 관리하기 위해 각 파일마다 유지하는 제어 블록이다. FCB(File Control Block)라고도 한다. 파일마다 독립된 파일 디스크립터가 존재하며, 보조기억장치에 보관되다가 해당 파일이 Open될 때 주기억장치로 옮겨진다. 사용자가 직접 참조할 수는 없다.

파일 디스크립터에 담기는 정보예시
파일 이름 / 크기game_save.dat / 4096 bytes
파일 위치보조기억장치에서의 물리적 주소
파일 구조순차파일, 직접파일 등
액세스 제어 정보읽기 전용, 읽기/쓰기 혼용 등
파일 형식텍스트, 원시파일, 실행파일 등
생성/갱신/삭제 날짜2025-04-10 등

6. 실제 파일 시스템의 종류

앞에서 본 할당 방식이 이론이라면, 실제 OS들은 그걸 어떻게 구현했는지 살펴본다.

FAT 파일 시스템

FAT는 연결 할당을 기반으로 하되, 연결 할당의 핵심 단점을 해결한 방식이다. 연결 할당에서 문제가 발생한 근본 원인은 각 블록 안에 다음 블록 주소를 직접 저장했기 때문이다. 블록 하나가 손상되면 이후 블록 전체에 접근할 수 없었다.

🕰 순수 연결 할당의 문제
😰 연결 할당
"각 블록 안에 next 주소가 박혀있어. 블록 하나 손상되면 그 뒤는 전부 날아가."
[블록4 | DATA | next→9] → [블록9 | DATA | next→2] → ❌손상 → 접근불가
🤔 "next 주소들을 블록 밖으로 빼서 한 곳에 모아두면 어떨까?"
✅ FAT 방식
💡 FAT (File Allocation Table)
"테이블 하나에 모든 next 주소를 저장. 메모리에 캐시도 가능해졌어."
FAT 테이블: [4→9] [9→2] [2→11] [11→EOF]
데이터 블록: [블록4] [블록9] [블록2] [블록11]

FAT 테이블은 메모리에 캐시될 수 있어서 임의 접근 속도도 개선됐다. FAT12, FAT16, FAT32로 발전하며 지원 용량이 늘었다. FAT32는 단일 파일 최대 4GB 제한이 있어 고해상도 영상 같은 대용량 파일엔 부적합하다. 현재는 USB, SD카드 같은 이동식 매체의 호환성 목적으로 주로 사용된다.

UNIX 파일 시스템 — i-node

UNIX 파일 시스템은 색인 할당을 기반으로 하며, 색인 블록을 i-node(index node)라고 부른다. i-node는 파일의 속성 정보와 함께 최대 15개의 블록 주소를 저장할 수 있다.

📄 i-node
파일 크기
권한 / 소유자
생성/수정 시각
직접 블록 [0~11]
→ 데이터 블록 직접 주소
단일 간접 [12]
→ 주소 모음 블록 주소
이중 간접 [13]
삼중 간접 [14]

i-node는 파일이 작을 때 직접 블록 주소(0~11번)만 사용한다. 12개의 블록 주소로 부족하면 단일 간접 블록을 사용한다. 단일 간접 블록은 데이터가 아닌 "데이터 블록들의 주소 목록"을 담은 블록이다.

그래도 부족하면 이중 간접(단일 간접 블록들의 주소 목록), 삼중 간접으로 단계를 늘린다. 이 구조 덕분에 이론적으로 매우 큰 파일도 지원 가능하다.

직접(0~11)
단일 간접
이중 간접
삼중 간접

디렉터리 엔트리에는 i-node 번호와 파일 이름만 담긴다. 파일에 접근할 때는 i-node 번호 → i-node 읽기 → 블록 주소 확인 → 데이터 블록 접근 순서로 이루어진다.

현대 파일 시스템 한눈에 비교

파일 시스템기반 OS핵심 특징
FAT32Windows, 이동식 매체연결 할당 기반, 단순, 4GB 파일 제한
NTFSWindows저널링, 대용량 지원, 보안·암호화
ext4Linuxi-node 기반, 저널링, 지연 할당, 파편화 방지
APFSmacOS / iOSCoW, 스냅샷, SSD 최적화, 암호화
BtrfsLinux스냅샷, CoW, 동적 리사이징

현대 파일 시스템의 공통 핵심 기능은 저널링이다. 시스템이 갑자기 종료됐을 때 파일 시스템이 손상되지 않도록, 변경 사항을 먼저 저널(Journal)에 기록하고 실제 반영하는 방식이다. ext3부터 도입됐고, NTFS와 APFS도 동일한 개념을 사용한다.

7. 디렉터리(Directory)

파일 시스템 내부에는 파일을 효율적으로 관리하기 위해 파일에 대한 여러 정보를 지니고 있는 특수한 형태의 파일이 있으며, 이를 디렉터리라고 한다. Windows에서는 폴더라고도 부른다. 디렉터리는 파일 이름과 그 파일이 실제로 기억되어 있는 물리적 장소와의 대응을 나타내는 표 형식을 지니며, 운영체제의 파일 관리자에 의해 관리된다.

디렉터리 엔트리

많은 OS에서 디렉터리는 특별한 형태의 파일로 간주한다. 일반 파일 내부에 데이터가 담겨있다면, 디렉터리 내부에는 해당 디렉터리에 담긴 대상들의 정보가 테이블 형태로 담겨있다. 공통적으로 들어가는 정보는 파일/서브 디렉터리의 이름과 보조기억장치 내에 저장된 위치다.

파일명i-node 번호 (또는 주소)
game_save.dat1042
config.json1057
logs/1063 (서브 디렉터리)

디렉터리 구조의 발전

1단계
2단계
트리 구조
비순환 그래프
일반 그래프
  • 1단계(단일) 디렉터리 — 모든 파일이 하나의 디렉터리 안에 존재. 파일 이름이 고유해야 하며, 사용자가 늘면 관리가 복잡해진다.
  • 2단계 디렉터리 — 마스터 파일 디렉터리(MFD)와 사용자 파일 디렉터리(UFD)로 나뉜다. 사용자별 독립 공간을 제공하지만, 파일 공유가 어렵다.
  • 트리 구조 디렉터리 — 현재 Windows, Linux, macOS에서 사용하는 방식. 최상위에 루트 디렉터리(/)를 두고 그 아래 서브 디렉터리를 계층적으로 구성한다. 절대 경로와 상대 경로를 모두 사용한다.
  • 비순환 그래프 디렉터리 — 하위 디렉터리나 파일을 공유할 수 있지만 사이클은 허용하지 않는다. 공유된 파일을 삭제할 때 고아 포인터6 문제가 발생할 수 있다.
  • 일반 그래프 디렉터리 — 트리 구조에 링크를 추가해 사이클을 허용한 구조. 탐색 알고리즘이 간단하지만 가비지 컬렉션이 필요하고 잘 사용하지 않는다.

8. 현대 파일 시스템과의 비교

교과서에서 비중 있게 다루는 ISAM과 자기 테이프 기반 순차 파일은 현대 실무에서 직접 마주칠 일이 거의 없다. ISAM은 B+Tree 기반 인덱스로 대체됐고, 자기 테이프는 극히 일부 콜드 스토리지 백업 용도 외에는 사라졌다.

현대 파일 시스템에서 중요해진 개념들은 다음과 같다.

개념설명대표 파일시스템
저널링(Journaling)변경 사항을 먼저 저널에 기록해 갑작스러운 종료 시 복구 가능NTFS, ext3/4, APFS
CoW (Copy-on-Write)쓰기 시 원본을 보존하고 새 블록에 기록. 스냅샷의 기반Btrfs, APFS, ZFS
스냅샷(Snapshot)특정 시점의 파일 상태를 저장해 롤백 가능Btrfs, ZFS, APFS
객체 스토리지디렉터리 계층 없이 버킷+객체(키) 구조. Amazon S3가 대표적Amazon S3, GCS

📎 용어 설명

  1. 보조기억장치 — 하드디스크(HDD), SSD, USB 드라이브처럼 전원이 꺼져도 데이터가 유지되는 비휘발성 저장 장치
  2. 레코드(Record) — 서로 관련된 하나 이상의 필드의 모임. 프로그램 처리의 기본 단위
  3. 포매팅(Formatting) — 디스크에 파일 시스템을 설정하는 작업. 어떤 방식으로 파일을 저장하고 관리할지 결정하며 새 데이터를 쓸 준비를 한다
  4. 해시 함수(Hash Function) — 다른 값이 들어가면 반드시 다른 결과값을 산출하는 함수적 특징을 지닌 것으로, 임의적인 길이의 데이터를 고정된 길이의 데이터로 매핑하는 함수
  5. 파일 디스크립터(File Descriptor) — OS가 파일을 관리하기 위해 파일마다 유지하는 제어 블록(FCB). Windows에서는 HANDLE이라고 한다
  6. 고아 포인터(Dangling Pointer) — 여러 디렉터리에서 하나의 파일을 공유할 때, 공유된 파일을 삭제하면 파일은 없어지지만 다른 디렉터리에서 이 파일로 연결된 포인터가 남아있는 것
운영체제 파일시스템 FileSystem FAT inode 디렉터리 CS