콘텐츠로 바로가기

Storage & I-O Mechanics

데이터를 영구적으로 보존하기 위한 파일 시스템 아키텍처와 저장 장치의 물리적 비휘발성 제어 기술을 다루는 학습 노드입니다.

Article
M

Me

hyunyoun's Blog

operating-systems-system-mechanicsoperating-systemssystem-mechanicsstoragei-o-mechanicsos-storageio9 min read

1. Overview

저장 장치 및 I/O 메카니즘(Storage & I-O Mechanics, SIOM)은 전원이 차단되면 사라지는 CPU/RAM의 휘발성 연산 결과를 비휘발성 저장 매체에 안전하고 빠르게, 구조적으로 보존(Persistence)하는 메커니즘을 다룹니다.

운영체제는 하드 드라이브(HDD)의 스핀들 모터부터 NVMe 플래시 메모리(SSD)까지 물리적 특성이 크게 다른 장치를 함께 다룹니다. 학습자는 단순한 바이트 스트림을 파일과 디렉토리 트리로 구조화하는 파일 시스템(File System) 아키텍처, 아이노드(inode) 구조, 디스크 입출력 스케줄링을 배웁니다. 나아가 디스크 쓰기 도중 정전이 발생했을 때 데이터 손상을 줄이는 저널링(Journaling) 기법과 RAID 계층화를 학습하여, 데이터 무결성과 높은 I/O 처리량을 함께 고려하는 영속성 설계를 익힙니다.

2. Scope & Boundaries

In-Scope

  • 저장 장치 물리 (Storage Physics): HDD(디스크 회전, 탐색 시간 지연 물리) vs SSD(플래시 셀 구조, 웨어 레벨링, Write Amplification, FTL) 거동 특성.
  • 파일 시스템 데이터 구조 (FS Internals): VFS(가상 파일 시스템) 추상화, 수퍼블록(Superblock), 아이노드(inode), 디렉토리 엔트리 트리, 블록 할당 비트맵.
  • I/O 통제 및 최적화 (I/O Stack): I/O 스케줄러(SCAN, C-SCAN, Deadline), DMA(Direct Memory Access), 장치 드라이버(Device Driver) 구조 및 인터럽트/폴링 물리.
  • 결함 허용과 복구 (Reliability & Recovery): 저널링(Journaling: Write-Ahead Logging), 파일 시스템 체크(fsck), CoW 파일 시스템(ZFS/Btrfs 개요).
  • 다중 디스크 아키텍처 (RAID): RAID 0, 1, 5, 10 계층의 패리티 분산 알고리즘 및 데이터 복구 연산 물리.

Out-of-Scope

  • 관계형 데이터베이스(RDBMS) 내부 엔진: B-Tree 인덱싱 트리 탐색 알고리즘, 트랜잭션 격리 수준(Isolation Level) → 06. Data Management 영역으로 위임.
  • 네트워크 분산 파일 시스템 상세 프로토콜: NFS, HDFS, Ceph 등 서버 간 클러스터 락 코디네이션 및 네트워크 복제 프로토콜 → 07. System Architecture 영역으로 위임.
  • 반도체 소자 물리학: NAND 플래시 메모리 트랜지스터 내부의 전자 터널링 효과나 전압 레벨 회로 설계 → 하드웨어 공학 영역.

Boundaries

  • SIOM vs. Database (06): SIOM은 데이터베이스가 요구하는 fsync() 시스템 콜을 받아 자기장(HDD)이나 전하(SSD) 형태로 특정 블록(Block) 섹터에 1과 0을 안전하게 기록하는 하위 운영체제 로직에 집중합니다. Database는 이 저장된 1과 0을 바탕으로 테이블을 조인하고 쿼리를 최적화하는 상위 논리 계층에 속합니다.

3. Counterexample

  • 동기화 지연 쓰기(Delayed Write) 맹신: 파일 포인터를 열어 fwrite()를 호출한 직후 "이제 디스크에 안전하게 저장되었다"고 확신하는 것은 위험한 오해입니다. 커널 내부의 **페이지 캐시(Page Cache)**에만 데이터가 쓰인 상태에서 시스템이 다운되면 데이터는 유실될 수 있습니다. 지속성(Persistence)을 보장하려면 fsync()를 호출해 물리적 디스크 섹터에 데이터를 플러시(Flush)하는 시퀀스와 그로 인한 I/O 대기 오버헤드를 이해해야 합니다.
  • SSD에 HDD용 디스크 조각 모음 실행: 과거 HDD 시절 헤드 탐색 시간(Seek Time)을 줄이기 위해 사용하던 조각 모음(Defragmentation) 알고리즘을, 기계적 탐색이 존재하지 않는 SSD에 그대로 적용하면 기대한 효과가 없습니다. 오히려 SSD의 덮어쓰기 수명(P/E Cycle)을 불필요하게 소모할 수 있으며, SSD 내부의 FTL(Flash Translation Layer)이 수행하는 가비지 컬렉션(GC)과 웨어 레벨링(Wear Leveling) 원리로 접근해야 합니다.

4. Prerequisites

  • 커널 및 시스템 인터페이스 (Basic): 시스템 콜 인터페이스와 커널의 계층적 구조에 대한 이해가 필요합니다. (03-01. KSIP)
  • 컴퓨터 아키텍처 및 하드웨어 통신 (Recommended): CPU의 인터럽트 처리 메커니즘과 DMA 버스 통신 기초가 권장됩니다. (02. Computer Architecture)

5. Learning Map

Sequence Core Cluster Objective & Description Evidence (BoK)
1 Storage Physics & I/O HDD의 기계적 한계와 SSD의 전기적 특징을 파악하고, 최적의 I/O 스케줄링 전략을 도출합니다. P1/File Systems
2 File System Internals 바이트 스트림을 수퍼블록, 아이노드, 데이터 블록으로 구조화하여 디스크에 매핑하는 방식을 배웁니다. P1/File Systems
3 Journaling & Recovery 디스크 쓰기 도중 정전이 나더라도 저널 로그를 바탕으로 일관성을 복구하는 무결성 설계를 익힙니다. P1/Reliability
4 VFS & RAID Architecture 여러 종류의 파일 시스템을 하나로 추상화하는 VFS와 다중 디스크(RAID)의 성능/복구 메커니즘을 이해합니다. Industry

6. Learning Topics

Basic

Core Topic 01: 저장 장치의 물리적 특성과 입출력 스케줄링 (Storage Physics & I/O)

  • Why to Learn: 데이터를 보관하는 하드웨어 매체의 물리적 성질을 이해해야, 수백 건의 동시 입출력 요청에서 발생하는 지연(Latency) 병목을 줄일 수 있기 때문입니다.
  • What to Learn:
    • Concepts: HDD 탐색 시간(Seek Time) / 회전 지연(Rotational Latency), SSD 페이지 읽기/쓰기 및 블록 삭제(Erase), I/O 스케줄러(FCFS, SSTF, SCAN, C-SCAN).
    • Skills: 디스크 헤드 이동 궤적 최소화 원리, 인터럽트(Interrupt) vs 폴링(Polling) I/O 효율, DMA(Direct Memory Access) 동작.
    • Tools: 리눅스 디스크 벤치마킹(dd, fio), I/O 스케줄러 변경 툴.
    • Trade-offs: 가까운 실린더 요청부터 처리하는 SSTF(성능 우수) vs 멀리 있는 실린더가 영원히 처리되지 않는 기아(Starvation) 현상 해결(SCAN 엘리베이터 알고리즘 도입).
  • How to Learn:
    • 1단계: 디스크의 분당 회전수(RPM) 7200짜리 HDD가 1바퀴 도는 데 8.3ms가 걸림을 계산하고, 수만 바이트가 흩어진 랜덤 I/O 상황에서 탐색 지연이 누적되어 시스템 응답을 늦추는 과정을 분석합니다.
    • 2단계: 엘리베이터가 올라가면서 버튼이 눌린 층에 순차적으로 서듯, 디스크 헤드가 한 방향으로 훑으며 요청을 처리하는 SCAN 알고리즘의 총 헤드 이동 거리 공식을 전개합니다.
  • Implement: 무작위로 쏟아지는 트랙(Track) 번호 요청 리스트를 입력받아, FCFS, SSTF, SCAN 알고리즘별로 디스크 헤드의 총 이동 거리(Cost)를 산출 비교하는 스케줄러 시뮬레이터.

Core Topic 02: 파일 시스템 자료구조와 아이노드 역학 (FS Internals & Inode)

  • Why to Learn: 비어 있는 디스크 블록 위에 파일 이름, 권한, 생성일자, 실제 데이터 위치를 체계적으로 색인(Index)하여 디렉토리 트리를 구성하기 위해서입니다.
  • What to Learn:
    • Concepts: 수퍼블록(Superblock), 아이노드(inode), 데이터 블록 매핑, 디렉토리 엔트리(Dentry), 하드 링크 vs 심볼릭 링크.
    • Skills: FAT(File Allocation Table) 형태의 연결 리스트 할당 vs 유닉스 계열의 인덱스 기반(Indexed Allocation) 직접/간접/이중간접 포인터 구조 해석.
    • Tools: 리눅스 파일 시스템 덤프 도구(dumpe2fs, stat, ls -i).
    • Trade-offs: 파일 데이터가 디스크에 연속적으로 기록되는 연속 할당은 순차 읽기에 유리하지만, 파일 중간 삽입과 단편화 처리에 취약합니다. 인덱스 할당은 이런 제약을 줄이는 대신 메타데이터 관리 비용을 추가합니다.
  • How to Learn:
    • 1단계: 리눅스에서 12개의 Direct 블록 포인터와 1개의 Indirect 포인터를 가진 아이노드 구조를 그립니다. 블록 크기가 4KB일 때 포인터만으로 최대 수 GB의 파일 크기를 가리키는 계산식을 유도합니다.
    • 2단계: ln 명령어(하드 링크)를 썼을 때 파일 시스템 내부에서는 단순히 새로운 디렉토리 엔트리가 기존의 똑같은 '아이노드 번호'를 가리킬 뿐이라는 얕은 참조의 본질을 파악합니다.
  • Implement: 파이썬 딕셔너리와 리스트를 활용하여 아이노드 테이블과 가상 데이터 블록을 만들고, 파일 생성/기록/삭제에 따라 아이노드의 블록 포인터가 할당 및 회수되는 미니 가상 파일 시스템 로직 개발.

Practical

Core Topic 03: 저널링 무결성과 결함 허용 (Journaling & Recovery)

  • Why to Learn: 데이터베이스 업데이트 중 서버 전원이 차단되었을 때, 전체 디스크를 처음부터 검사하는 긴 fsck 과정을 줄이고 빠르게 무결성을 회복하기 위함입니다.
  • What to Learn:
    • Concepts: 일관성(Consistency), 크래시 복구(Crash Recovery), 저널링(Write-Ahead Logging), fsck(File System Check), 메타데이터 저널링 vs 데이터 저널링.
    • Skills: 파일 생성이라는 단일 논리 작업이 아이노드 할당, 비트맵 수정, 데이터 쓰기, 디렉토리 추가라는 복수 물리적 I/O 트랜잭션으로 분할될 때 발생하는 틈새(Crash window) 이해.
    • Tools: tune2fs, debugfs.
    • Trade-offs: 모든 데이터 기록 전에 저널 영역에 통째로 로깅하는 Data Journaling은 무결성에는 유리하지만, 데이터를 두 번 써야 하므로 성능 비용이 큽니다. 현대 ext4는 Ordered Metadata Journaling 모드로 성능과 일관성 사이를 조정합니다.
  • How to Learn:
    • 1단계: 'A 디렉토리에 B 파일을 생성하라'는 명령이 내려지고 디스크 쓰기를 시작한 지 0.1초 만에 커널 패닉이 일어났을 때, 아이노드 비트맵은 1(사용)로 바뀌었으나 디렉토리 엔트리에는 추가되지 않아 일관성 불일치(Inconsistency)가 발생하는 과정을 확인합니다.
    • 2단계: 이를 막기 위해 본 데이터(또는 메타데이터)를 수정하기 전에, '앞으로 무엇을 할 것이다'라는 트랜잭션 로그를 저널(Journal) 블록에 먼저 쓰고 커밋(Commit)하는 3단계 복구 시퀀스를 블록 다이어그램으로 구성합니다.
  • Implement: 특정 파일의 메타데이터 변경을 배열 트랜잭션으로 임시 기록(Log)하고, 의도적으로 크래시 함수를 호출한 뒤, 부팅 시 로깅된 트랜잭션을 재실행(Redo)하여 데이터를 복구하는 기초 저널링 엔진 뼈대 작성.

Advanced

Core Topic 04: VFS 추상화와 RAID 스토리지 구성 (VFS & RAID Architecture)

  • Why to Learn: 여러 벤더의 파일 시스템을 하나의 트리 아래로 통합하고, 여러 디스크를 묶어 처리량을 높이거나 단일 디스크 장애에도 서비스를 유지하는 원리를 이해하기 위해서입니다.
  • What to Learn:
    • Concepts: VFS(Virtual File System) 객체 모델 지향 설계, 블록 디바이스 계층, NVMe 다중 큐 지원.
    • Skills: RAID 0(Striping), RAID 1(Mirroring), RAID 5(Parity 분산) 데이터 분할 및 복구 수식(XOR 연산 물리).
    • Tools: 리눅스 논리 볼륨 매니저(LVM), mdadm 소프트웨어 RAID 도구.
    • Trade-offs: RAID 0은 디스크 개수에 비례해 읽기/쓰기 속도를 높일 수 있지만, 단 1개의 디스크만 고장 나도 묶여 있던 모든 데이터가 손실됩니다. RAID 5는 패리티 연산 오버헤드를 감수해 이 위험을 줄입니다.
  • How to Learn:
    • 1단계: VFS 계층이 C 언어 환경에서 어떻게 객체 지향적 다형성(Polymorphism)을 흉내내는지 파악합니다. 커널이 일반적인 read() 시스템 콜을 호출하면, VFS의 file_operations 구조체 함수 포인터가 장착된 FS(ext4, xfs, fat32)의 구체적인 디바이스 함수로 분기하는 흐름을 봅니다.
    • 2단계: 3개의 디스크로 구성된 RAID 5 볼륨에 1010, 0110이라는 두 데이터 청크를 쓸 때, 패리티 청크가 XOR 연산으로 1100이 됨을 구하고, 1번 디스크 장애 시 남은 2개의 청크를 다시 XOR하여 손실된 디스크 데이터를 복원합니다.
  • Implement: 4개의 가상 이진 텍스트 파일을 디스크 삼아, 문자를 바이트 단위 스트라이핑(RAID 0)하여 분산 저장하는 로직과, 패리티 문자를 별도로 계산해 복원 기능까지 갖춘 RAID 5 인터페이스 모듈 시뮬레이션.

7. Terminology

Term (EN / ko, abbr) 1문장 정의 단계(기본/권장/실무/심화) 역할/맥락 관련 개념 유사/대비/함께 사용 오해 포인트 Evidence(Primary/Secondary/Industry) Flags(core/misused/legacy)
Inode (아이노드) 파일의 메타데이터(크기, 권한, 입지 등)를 저장하는 데이터 구조입니다. 기본 관리 단위 Metadata Directory 파일 이름도 포함한다고 오해 P1:CS2023/File Systems core
Journaling 변경 전 로그를 먼저 기록하여 무결성을 빠르게 복구하는 기법입니다. 추천 신뢰성 보장 fsck Logging 아카이빙용 백업으로 오해 P1:CS2023/File Systems core
DMA CPU 개입 없이 장치가 메모리에 직접 데이터를 전송하는 방식입니다. 기본 효율화 Interrupt PIO CPU가 전혀 필요 없다고 오해 P1:CS2023 core
RAID 여러 물리 디스크를 하나의 논리 단위로 결합하여 성능/안정성을 높이는 기술입니다. 추천 내결함성 Stripe / Mirror Backup 하드웨어 백업과 혼동함 Industry Standard core

8. References

Primary References

Secondary References

  • [Operating Systems: Three Easy Pieces] Remzi H. Arpaci-Dusseau — The "Persistence" section.
  • [Understanding the Linux Virtual File System] — Deep dive into VFS structures.

Industry References

  • [NVM Express Specification] — Modern storage protocol standard.
  • [RAID Level Definitions] SNIA — Industry standard for storage reliability.

9. Final Checklist

Primary Checklist

  • HDD의 기계적 특성(Seek, Rotation)이 대용량 데이터 조회 성능에 미치는 물리적 영향을 정량화할 수 있는가? (P1)
  • 파일 시스템의 저널링 기법이 데이터 소실을 막는 시퀀스를 3단계(Log, Write, Checkpoint)로 설명 가능한가? (P1)

Secondary Checklist

  • 사용자 프로그램에서 fsync() 호출 유무가 시스템 충돌 시 데이터 정합성에 미치는 영향을 인지하는가?
  • 아이노드 소진(Inode exhaustion) 문제가 물리 용량이 남았음에도 파일 생성을 막는 이유를 설명할 수 있는가?

Industry Checklist

  • SSD 환경에서 '쓰기 증폭(Write Amplification)' 현상을 이해하고 수명을 연장하기 위한 OS 설정을 제안 가능한가? (SFIA)
  • RAID 5 환경에서 디스크 한 개 장애 시 데이터 복구가 가능한 원리를 패리티(Parity) 비트 관점에서 설명 가능한가?

OS Storage & I/O

7 / 8