학습 목표
OS가 파일·디렉터리로 저장 데이터를 추상화하는 방식을 설명할 수 있다.
경로·디렉터리 트리와 메타데이터(inode) 역할을 설명할 수 있다.
VFS(Virtual File System) 가 여러 파일 시스템을 통합 API로 보이게 하는 원리를 설명할 수 있다.
마운트(mount) 로 하나의 디렉터리 트리에 여러 장치·FS를 붙이는 방식을 설명할 수 있다.
문제 상황
open("/var/log/app.log")— 디스크 어느 섹터인지 앱은 모른다- OS가 이름 → 블록으로 변환
- USB를 꽂으면 같은
/아래에 경로가 생긴다- 마운트
- 컨테이너 안
/etc/hosts와 호스트가 다르다- 마운트 네임스페이스·별도 뷰
- ext4·NFS·tmpfs API가 비슷한데 구현은 전혀 다르다
- VFS가 공통 인터페이스
메모리 파트를 마쳤다. 이제 영구 저장 — 디스크 위에 올라가는 파일 시스템이다.
1. 파일이란
파일은 바이트 스트림 + 메타데이터다. 프로세스는 파일 이름·경로로 접근하고, OS가 권한·위치를 검사한다.
| 속성 | 예 |
|---|---|
| 이름 | app.log, main.go |
| 타입 | 일반 파일, 디렉터리, 심볼릭 링크, 장치 파일 |
| 크기 | 논리 바이트 수 |
| 권한 | owner/group/other, rwx |
| 시간 | atime, mtime, ctime |
- 파일 디스크립터(fd):
open이후 커널이 붙여 주는 정수 —read/write/close는 fd 기준 - 직접 I/O vs 버퍼 I/O: 라이브러리·커널 버퍼 — 이후 I/O·캐시 편에서
2. 디렉터리와 경로
디렉터리는 이름 → 파일(또는 하위 디렉터리) 매핑이다. 전체는 트리 구조.

| 개념 | 설명 |
|---|---|
| 절대 경로 | / 부터 — /home/user/app.log |
| 상대 경로 | 현재 작업 디렉터리(cwd) 기준 |
. / .. |
현재·부모 디렉터리 |
루트 / |
모든 절대 경로의 시작 |
- 하드 링크: 같은 inode를 가리키는 여러 이름 — 같은 파일
- 심볼릭 링크: 경로 문자열 — 대상 없으면 깨진 링크
readdir·stat·rename은 결국 디렉터리 엔트리·inode 조작
3. inode와 블록 (개요)
Unix 계열은 inode에 메타데이터를 두고, 데이터는 블록에 저장한다.
| 구성 | 역할 |
|---|---|
| inode | 권한, 크기, 타임스탬프, 데이터 블록 포인터 |
| 데이터 블록 | 실제 내용 (4KB 등) |
| 슈퍼블록 | FS 전체 메타(크기, 블록 크기) |
| 비트맵/자유 목록 | 빈 블록·inode 관리 |
- 직접·간접 블록: 큰 파일은 간접 블록으로 포인터 확장
- 디렉터리 엔트리: 이름 + inode 번호
- Windows NTFS는 MFT 등 다른 구조 — 개념은 메타 + 데이터 영역 동일
4. VFS (Virtual File System)
Linux 등은 VFS가 open/read/write를 받아 구체 FS(ext4, xfs, nfs…)로 위임한다.

| 계층 | 역할 |
|---|---|
| 응용 / libc | fopen, read — 시스템 콜 |
| VFS | 공통 struct file, dentry, inode 추상화 |
| 구체 FS | ext4, tmpfs, procfs, NFS… |
| 블록 계층 | 버퍼·Bio → 디스크 드라이버 |
- dentry: 경로 이름 캐시 —
path해석 가속 - page cache: 파일 내용을 메모리에 캐시 — 메모리 편 page cache와 연결
/proc,/sys도 파일처럼 읽는 가상 FS
5. 마운트 (Mount)
빈 디렉터리( 마운트 포인트 )에 다른 FS의 루트를 붙인다. 사용자에게는 하나의 트리로 보인다.

| 예 | 설명 |
|---|---|
mount /dev/sdb1 /mnt |
/mnt 이하가 sdb1 ext4 |
/boot, /home 분리 |
파티션별 FS |
tmpfs on /run |
RAM 위 파일 시스템 |
NFS server:/export |
네트워크 FS 마운트 |
- 마운트 테이블: 어떤 장치가 어느 경로에 붙었는지
- 컨테이너: 마운트 네임스페이스로 자기 루트·bind mount
- 유닛 파일
fstab/ systemd mount — 부팅 시 자동 마운트
6. 파일 시스템이 신경 쓰는 것
| 목표 | 설명 |
|---|---|
| 지속성 | 전원 꺼져도 데이터 유지 |
| 이름 공간 | 계층적 이름으로 탐색 |
| 보호 | uid/gid, permission, ACL |
| 공유 | 여러 프로세스·호스트에서 접근 (NFS 등) |
| 일관성 | 크래시 후 저널링·fsck |
- 저널링: ext4, xfs — 메타데이터(또는 데이터) 변경을 로그에 먼저 기록
- Copy-on-Write: btrfs, ZFS — 스냅샷·일관성에 유리
- 다음: 디스크 스케줄링, 블록 I/O 순서
7. 정리
- 파일 = 바이트 스트림 + 메타데이터, 디렉터리 = 이름 매핑 트리
- inode·블록으로 디스크에 배치, 경로는 VFS가 해석
- VFS가 ext4·tmpfs·NFS를 같은 API로 연결
- 마운트로 여러 FS를 단일 경로 공간에 통합
- 다음: 디스크 스케줄링, RAID 개요
다음에 다룰 것
- 디스크 스케줄링
- FCFS, SSTF, SCAN, RAID 개요
해당 내용은 Operating System Concepts, 10/E (Avraham Silberschatz, Peter Baer Galvin, Greg Gagne) 의 내용을 기반으로 합니다.