운영체제 따라잡기

파일 시스템 개념

meellon 2026. 7. 3. 05:00

학습 목표

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 등은 VFSopen/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) 의 내용을 기반으로 합니다.

'운영체제 따라잡기' 카테고리의 다른 글

I/O 시스템  (0) 2026.07.05
디스크 스케줄링  (0) 2026.07.04
세그멘테이션과 군집화  (0) 2026.07.02
가상 메모리  (0) 2026.07.01
페이징  (0) 2026.06.30