안녕하세요.
이번 글에서는 파일 시스템에 대해 정리해보려 합니다.
파일 시스템이란,
파일과 디렉터리를 보조기억창지에 효율적으로 저장 및 읽어올 수 있게 해주는
운영체제에 탐제된 내부 프로그램이다.
파일 할당
먼저, 파일 시스템이 어떻게 보조기억장치에 파일을 저장하고 읽어오는지에 대해 알아보자.
운영체제는 블록 단위로 파일을 읽고 쓴다. 때문에 파일은 하나 이상의 블록에 저장된다.
여기서 블록이란 하나 이상의 섹터(하드 디스크의 가장 작은 단위)를 묶은 단위이며, 섹터라는 단위는 너무 작기 때문에 블록이라는 단위를 사용한다. (SSD의 경우 페이지라는 단위를 사용)
파일 할당 방법은 다음과 같다.
- 연속 할당
- 불연속 할당
- 연결 할당
- 색인 할당
연속 할당
연속 할당은 가장 단순한 방식이다. 보조기억장치에 연속적으로 파일을 저장하는 방식이다.

장점
- 구현이 단순하고
- 연속적이기 때문에 파일에 접근할 때 파일의 첫 번째 블록 주소와 길이(크기)만 알면된다.
- 블록끼리 근접해 있기 때문에 파일을 읽는 속도가 빠르다.
- 필요한 경우 중간 블록부터 접근 가능(like. 배열)
단점
- 파일 삭제 후 파일 사이에 빈 공간이 생기는 외부 단편화가 발생할 수 있어 공간 활용이 떨어짐
- 블록들이 붙어있기 때문에 파일 크기가 늘어나면, 다른 위치로 이동시켜야하는 등 파일 확장에 제약이 있음
연결 할당
연속 할당의 외부 단편화 문제가 너무 비효율적이라고 생각해 연결 할당이 등장한다.
연결 할당은 블록마다 연결 리스트 처럼 다음 블록의 주소를 저장해 주소를 타고가며 파일은 읽는 방식이다.
연결 할당은 불연속 할당 방식에 속하기 때문에 보조기억장치에 한 파일에 해당하는 블록들이 분산돼 저장된다.
오늘날 FAT 파일 시스템이 연결 할당 방식을 차용해 구현되었다.(주소를 각 블록에 저장하지 않고 별도의 FAT라는 별도 테이블에 저장한다는 차이가 있음.)

장점
- 연속적일 필요가 없기 때문에 외부 단편화 문제 없음
- 파일 확장 또한 쉬움
- 블록끼리 근접해 있기 때문에 파일을 읽는 속도가 빠르다.
단점
- 블록들이 물리적으로 떨어져 있기 때문에 읽는 속도가 연속 할당에 비해 느림
- 블록마다 다음 블록의 주소를 저장하고 있어야하기 때문에 블록당 저장할 수 있는 데이터의 양이 감소
- 만약, 특정 블록이 손상되는 등 다음 주소값을 알지 못하면 그 뒤 데이터에 접근할 수 없음
- 반드시 첫 블록부터 접근해하기 때문에 임의 접근 속도가 매우 느림
색인 할당
색인 할당의 경우 색인 블록(인덱스 블록)이라는 한 블록에 모든 블록의 주소를 관리한다.
색인 할당의 경우 유닉스 파일 시스템이 사용된다.

장점
- 임의 접근 가능
- 특정 주소가 손실되도 나머지 블록에 접근 가능해 연결 할당보다 안정적
단점
- 파일 마다 인덱스 블록이 필요해 블록 낭비가 될 수 있음
- 매우 큰 파일의 경우 한 인덱스 블록에 모든 주소를 담을 수 없을 수 있음
FAT 파일 시스템 / 유닉스 파일 시스템
FAT는 주로 USB, SD 카드 등의 저용량 저장 장치에서 사용된다.
유닉스 파일 시스템의 경우는 유닉스 계열(Unix, Linux)에 사용되며 때문에 OS에서 주로 사용되는 파일 시스템이다.
FAT 파일 시스템
FAT 파일 시스템은 연결 할당 방식을 차용했지만 단점을 보완해서 구현된 파일 시스템이다.
연결 할당 방식의 단점들의 주 요인은 블록의 주소가 블록 내부에 저장되어 있다는 것이다.
FAT 파일 시스템은 이를 보완하기 위해 파일 할당 테이블(FAT)을 통해 블록들의 다음 블록 주소를 관리해 단점을 보완했다.

FAT는 메모리가 디스크에 접근하는 과정에서 메모리에 캐싱될 수 있다. 매번 디스크에서 FAT에 접근하는 것 보다 메모리에서 값을 가져오는 것이 빠르기 때문이다.
# FAT 파일 시스템 파티션 구조
+-------------------------+
| Boot Sector | ← 부트 레코드 (파일 시스템 정보)
+-------------------------+
| Reserved Area | ← 예약 영역 (추가 부트 정보 등)
+-------------------------+
| FAT | ← 파일 할당 테이블
+-------------------------+
| Root Directory | ← 루트 디렉토리 영역 (FAT12/16에서 고정)
+-------------------------+
| Data Area | ← 실제 파일/폴더 데이터 저장
| |
| Cluster 2 |
| Cluster 3 |
| Cluster 4 |
| ... |
+-------------------------+
유닉스 파일 시스템
유닉스 파일 시스템은 색인(인덱스) 할당 방식을 차용했는데 색인(인덱스) 블록을 i-node라고 한다.
파일마다 i-node가 있고, i-node마다 번호가 부여된다.
# 유닉스 파일 시스템 파티션 구조
+-------------------------+
| Boot Block | ← 부트 코드 (OS 로딩용)
+-------------------------+
| Super Block | ← 파일 시스템 전체 정보
+-------------------------+
| i-node List | ← i-node 테이블 (파일 정보)
+-------------------------+
| Data Blocks | ← 실제 파일/디렉토리 데이터
| |
| File contents |
| Directory contents |
| Indirect blocks |
| ... |
+-------------------------+
i-node의 크기는 한계가 있기 때문에 무한정으로 블록의 주소를 저장할 수 없다.
i-node 하나당 15개의 주소를 저장할 수 있는데 저장해야할 블록이 그 이상이라면,
- 12개 정도는 데이터가 저장된 블록의 주소가 저장
- 단일 간접 블록(single indirect)을 만들고 13번째에 할당
- 여러 단일 간접 블록을 만들고 해당 블록 주소를 이중 간접 블록에 저장, 이중 간접 블록을 14번째에 할당
- 최대 3중 간접 블록까지 생성 가능

3중 간접 블록까지 사용했을 때 총 1,074,791,436개(12 + 1024 + 1024^2 + 1024^3)의 블록 한 블록당 4KB라고 했을 때 4TB를 저장할 수 있다.
'CS > 운영체제' 카테고리의 다른 글
| [운영체제] 가상 메모리 (0) | 2026.03.04 |
|---|---|
| [운영체제] 파일과 디렉토리 (0) | 2026.03.02 |