299. 페이지 폴트 처리 과정 (Page Fault Handling)
핵심 인사이트 (3줄 요약)
- 본질: 페이지 폴트 처리 과정은 CPU가 요구한 데이터가 램(RAM)에 없을 때 발생하는 하드웨어 트랩(Trap)을 감지하여, 운영체제(OS)가 디스크의 데이터를 램으로 퍼 올리고 실행을 재개하는 하드웨어와 소프트웨어의 정교한 복구 시퀀스다.
- 가치: 수백만 클럭이 소요되는 디스크 I/O 대기 시간 동안 CPU를 놀리지 않고 다른 프로세스로 **컨텍스트 스위칭(Context Switching)**을 수행함으로써 시스템 전체의 처리량을 극대화한다.
- 융합: 페이지 교체 알고리즘(Victim 선택), 더티 비트 확인(Write-Back), TLB 갱신 등 가상 메모리 관리의 모든 핵심 기술이 집약된 가상 메모리 시스템의 실제 동작 알고리즘이다.
Ⅰ. 개요 및 필요성
-
개념: 프로세스가 실행 중 페이지 테이블의 유효 비트(Valid Bit)가 0인 주소에 접근했을 때, 하드웨어가 이를 감지하여 제어권을 OS 커널로 넘기고 필요한 페이지를 디스크에서 가져오는 일련의 절차다.
-
필요성: 요구 페이징(Demand Paging)은 페이지 폴트를 전제로 한다. 모든 코드를 램에 다 올릴 수 없는 현실에서, 페이지 폴트 처리는 "필요할 때만 램을 소비하되, 사용자에게는 모든 데이터가 램에 있는 것처럼 속이는" 마법 같은 환상을 완성하는 필수 프로세스다.
-
💡 비유: 요리사(CPU)가 레시피를 보다가 "비법 양념(데이터)"이 주방 선반(RAM)에 없는 것을 발견하고, 즉시 요리를 멈춘 뒤 조수(OS)에게 시장(디스크)에 가서 양념을 사 오라고 시킨 후, 그사이에 다른 주문을 처리하는 완벽한 주방 매뉴얼과 같습니다.
-
등장 배경: 가상 메모리 시스템이 도입되면서, 하드웨어(MMU) 단독으로는 해결할 수 없는 '디스크 접근'이라는 무거운 작업을 위해 하드웨어가 OS에게 도움을 요청하는 인터럽트 기반 예외 처리 모델로 정립되었다.
┌──────────────────────────────────────────────────────────────┐
│ 페이지 폴트 처리(Page Fault Handling) 6단계 시퀀스 │
├──────────────────────────────────────────────────────────────┤
│ │
│ [1] 하드웨어 트랩: CPU가 Invalid Bit 주소 접근 -> OS 커널 호출 │
│ [2] 상태 저장: 현재 프로세스의 레지스터와 PCB 상태를 보존 │
│ [3] 디스크 I/O: OS가 디스크에서 해당 페이지 위치를 찾아 읽기 시작 │
│ [4] 프로세스 전환: I/O가 끝날 때까지 CPU는 다른 프로세스를 실행 │
│ [5] 램 적재 및 갱신: 데이터 로드 완료 후 페이지 테이블(Valid=1) 업데이트 │
│ [6] 재시작: 실패했던 명령어부터 프로세스 실행을 다시 시작 │
└──────────────────────────────────────────────────────────────┘
- 📢 섹션 요약 비유: 사고가 나면(페이지 폴트) 즉시 119에 신고하고(트랩), 환자를 이송하는 동안(I/O) 도로는 정체되지 않게 우회시키고(컨텍스트 스위치), 치료가 끝나면 다시 일상으로 복귀시키는 완벽한 사고 수습 과정입니다.
Ⅱ. 아키텍처 및 핵심 원리
페이지 폴트 처리의 심층 단계 (Deep Dive)
- Trap 발생 및 제어권 전이: MMU가 유효 비트가 0임을 확인하면 명령어를 중단하고 OS 커널의 Page Fault Handler 주소로 점프한다.
- 빈 프레임(Free Frame) 확보:
- 램에 빈자리가 있으면 즉시 사용한다.
- 빈자리가 없으면 **페이지 교체 알고리즘(LRU 등)**을 가동하여 희생자(Victim) 페이지를 선정한다.
- 만약 쫓겨날 페이지가 수정된 상태(Dirty Bit=1)라면 디스크에 먼저 기록(Write-Back)한다.
- 디스크 스케줄링 및 읽기: 해당 페이지를 디스크의 스왑 영역에서 찾는다. 디스크 헤드가 움직이는 동안 CPU는 다른 일을 하러 떠난다.
- 인터럽트 및 복구: 디스크 읽기가 끝나면 I/O 컨트롤러가 인터럽트를 날린다. OS는 중단됐던 프로세스의 페이지 테이블에 물리 프레임 번호를 적고 비트를 Valid(1)로 바꾼다.
유효 비트(Valid Bit)의 역할
-
1 (Valid): 메모리에 있음. MMU가 즉시 물리 주소로 변환.
-
0 (Invalid): 메모리에 없음. MMU가 즉시 하드웨어 트랩(Exception) 발생.
-
📢 섹션 요약 비유: 메뉴판에 '준비 중' 스티커가 붙어있으면(Invalid), 주문을 멈추고 주방에 재료를 사 오라고 지시한 뒤, 재료가 도착하면 스티커를 떼고(Valid) 다시 주문을 받는 일련의 흐름입니다.
Ⅲ. 비교 및 연결
Major vs Minor Page Fault (실무적 구분)
| 구분 | Major Page Fault (Hard) | Minor Page Fault (Soft) |
|---|---|---|
| 디스크 I/O | 발생 (무거움) | 미발생 (가벼움) |
| 원인 | 진짜로 램에 데이터가 없음 | 데이터는 램에 있지만 장부에만 없음 |
| 처리 속도 | 수 밀리초 (ms) | 수 마이크로초 (μs) |
| 예시 | 스왑 영역에서 데이터 로드 | 공유 메모리 연결, 프로세스 재실행 |
페이지 폴트와 컨텍스트 스위칭의 결합
페이지 폴트가 발생했을 때 컨텍스트 스위칭을 하지 않는다면, CPU는 디스크가 데이터를 줄 때까지 수백만 클럭 동안 아무것도 못 하고 멍하니 기다려야 한다. 현대 OS는 이 유휴 시간을 활용하기 위해, 페이지 폴트가 터진 프로세스를 '대기(Wait)' 상태로 밀어내고 '준비(Ready)' 상태의 다른 프로세스에게 CPU를 넘겨주는 지능형 스케줄링을 필수적으로 수행한다.
- 📢 섹션 요약 비유: 짜장면을 시켰는데 배달이 오려면 30분이 걸립니다. 문 앞에 서서 30분 동안 배달원만 기다리는(Stall) 바보는 없습니다. 배달 올 때까지 집안일(다른 프로세스)을 하다가 벨이 울리면 그때 먹는 것이 정상입니다.
Ⅳ. 실무 적용 및 기술사 판단
실무 시나리오
-
서버 스래싱(Thrashing) 발생 시 분석
- 상황: 리눅스 서버가 갑자기 응답이 없고 하드디스크 소리만 요란함.
top명령어로 확인하니 CPU 사용률 중iowait수치가 80% 이상임. - 판단: 물리 메모리 부족으로 인해 페이지 폴트가 꼬리에 꼬리를 물고 터지는 중이다. 프로세스들이 연산은 안 하고 페이지 폴트 처리 루틴만 무한 반복하고 있다.
- 해결: 즉시 메모리 사용량이 높은 프로세스를 킬(Kill)하거나, 물리 RAM을 증설해야 한다. 스왑 영역을 늘리는 것은 치료제가 아니라 증상을 악화시킬 뿐이다.
- 상황: 리눅스 서버가 갑자기 응답이 없고 하드디스크 소리만 요란함.
-
Java 가비지 컬렉션(GC)과 페이지 폴트
- 상황: Java 힙 메모리를 물리 RAM 크기보다 크게 설정(예: 32GB 램 서버에 64GB 힙 설정).
- 여파: 가비지 컬렉터가 메모리를 스캔할 때, 스왑 영역으로 쫓겨났던 객체들을 다시 읽어오느라 페이지 폴트가 폭발한다. GC 시간이 수 초에서 수 분으로 늘어나며 'Stop-the-world' 재앙이 터진다.
- 가이드: JVM 힙 크기는 반드시 물리 메모리의 70~80% 이내로 설정하여 페이지 폴트 발생을 원천 차단해야 한다.
안티패턴
-
스왑 영역을 메인 메모리 대용으로 쓰기: "램은 비싸니 4GB만 꽂고, 100GB NVMe SSD를 스왑으로 쓰면 되겠지"라는 생각. SSD가 아무리 빨라도 램보다는 수천 배 느리다. 페이지 폴트 처리 과정의 소프트웨어 오버헤드와 인터럽트 비용은 하드웨어 속도로 커버할 수 없는 시스템의 근본적 병목이다.
-
📢 섹션 요약 비유: 페이지 폴트 처리는 보험과 같습니다. 사고 났을 때 나를 살려주는 소중한 장치이지만, 매일 사고를 내면서 보험금(I/O)으로 먹고살려 하면 결국 인생(시스템)은 파산합니다.
Ⅴ. 기대효과 및 결론
정량적 기대효과
- 멀티프로그래밍 정도(DoM) 향상: 페이지 폴트 처리 메커니즘 덕분에, 실제 램보다 10~20배 많은 수의 프로세스를 동시에 실행 상태로 유지할 수 있다.
- 메모리 활용 극대화: 사용되지 않는 80%의 코드를 디스크에 묶어둠으로써, 비싼 램 자원을 현재 가장 '핫'한 데이터에만 집중 투자할 수 있다.
결론
페이지 폴트 처리 과정은 단순히 에러를 고치는 루틴이 아니라, "가상 메모리"라는 거대한 환상을 지탱하는 유일한 실체다. 하드웨어가 한계를 느끼는 순간 소프트웨어가 개입하여 문제를 해결하고, 그 지연 시간마저 스케줄링으로 가려버리는 이 정교한 협업 덕분에 현대의 모든 소프트웨어가 자유를 얻었다. 페이지 폴트를 최소화하는 것이 곧 성능 최적화의 알파이자 오메가다.
- 📢 섹션 요약 비유: 페이지 폴트 처리는 컴퓨터의 '심폐소생술'입니다. 숨이 멎으려 할 때(데이터 부재) OS가 달려와 산소(데이터)를 공급하고 다시 심장을 뛰게 만듭니다. 이 과정이 매끄러울수록 컴퓨터는 건강하게 장수할 수 있습니다.
📌 관련 개념 맵
| 개념 명칭 | 관계 및 시너지 설명 |
|---|---|
| 유효 비트 | 페이지 폴트 발생 여부를 가르는 1비트의 운명적 판독기. |
| MMU | 페이지 폴트 트랩을 발생시키는 하드웨어 최전방 감시자. |
| 페이지 교체 | 페이지 폴트 처리 중 램에 자리가 없을 때 필수적으로 실행되는 생존 전략. |
| 컨텍스트 스위칭 | 페이지 폴트의 거대한 지연 시간을 가리기 위해 CPU를 다른 곳으로 돌리는 마술. |
| 스왑 영역 | 램에서 쫓겨난 페이지들이 잠시 잠을 자는 디스크의 임시 거처. |
👶 어린이를 위한 3줄 비유 설명
- 로봇이 그림을 그리는데 "빨간색 크레파스"가 없는 걸 발견하고 깜짝 놀라는 게 '페이지 폴트'예요.
- 로봇은 즉시 엄마(OS)에게 크레파스를 사 오라고 부탁하고, 엄마가 문방구(디스크)에 간 동안 로봇은 멍하니 있지 않고 다른 로봇의 숙제를 대신 도와주며 기다려요.
- 엄마가 크레파스를 사 오면 로봇은 다시 아까 그리던 그림을 마저 멋지게 완성한답니다!