299. 페이지 폴트 처리 과정 (Page Fault Handling)

핵심 인사이트 (3줄 요약)

  1. 본질: 페이지 폴트 처리 과정은 CPU가 요구한 데이터가 램(RAM)에 없을 때 발생하는 하드웨어 트랩(Trap)을 감지하여, 운영체제(OS)가 디스크의 데이터를 램으로 퍼 올리고 실행을 재개하는 하드웨어와 소프트웨어의 정교한 복구 시퀀스다.
  2. 가치: 수백만 클럭이 소요되는 디스크 I/O 대기 시간 동안 CPU를 놀리지 않고 다른 프로세스로 **컨텍스트 스위칭(Context Switching)**을 수행함으로써 시스템 전체의 처리량을 극대화한다.
  3. 융합: 페이지 교체 알고리즘(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)

  1. Trap 발생 및 제어권 전이: MMU가 유효 비트가 0임을 확인하면 명령어를 중단하고 OS 커널의 Page Fault Handler 주소로 점프한다.
  2. 빈 프레임(Free Frame) 확보:
    • 램에 빈자리가 있으면 즉시 사용한다.
    • 빈자리가 없으면 **페이지 교체 알고리즘(LRU 등)**을 가동하여 희생자(Victim) 페이지를 선정한다.
    • 만약 쫓겨날 페이지가 수정된 상태(Dirty Bit=1)라면 디스크에 먼저 기록(Write-Back)한다.
  3. 디스크 스케줄링 및 읽기: 해당 페이지를 디스크의 스왑 영역에서 찾는다. 디스크 헤드가 움직이는 동안 CPU는 다른 일을 하러 떠난다.
  4. 인터럽트 및 복구: 디스크 읽기가 끝나면 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) 바보는 없습니다. 배달 올 때까지 집안일(다른 프로세스)을 하다가 벨이 울리면 그때 먹는 것이 정상입니다.

Ⅳ. 실무 적용 및 기술사 판단

실무 시나리오

  1. 서버 스래싱(Thrashing) 발생 시 분석

    • 상황: 리눅스 서버가 갑자기 응답이 없고 하드디스크 소리만 요란함. top 명령어로 확인하니 CPU 사용률 중 iowait 수치가 80% 이상임.
    • 판단: 물리 메모리 부족으로 인해 페이지 폴트가 꼬리에 꼬리를 물고 터지는 중이다. 프로세스들이 연산은 안 하고 페이지 폴트 처리 루틴만 무한 반복하고 있다.
    • 해결: 즉시 메모리 사용량이 높은 프로세스를 킬(Kill)하거나, 물리 RAM을 증설해야 한다. 스왑 영역을 늘리는 것은 치료제가 아니라 증상을 악화시킬 뿐이다.
  2. 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줄 비유 설명

  1. 로봇이 그림을 그리는데 "빨간색 크레파스"가 없는 걸 발견하고 깜짝 놀라는 게 '페이지 폴트'예요.
  2. 로봇은 즉시 엄마(OS)에게 크레파스를 사 오라고 부탁하고, 엄마가 문방구(디스크)에 간 동안 로봇은 멍하니 있지 않고 다른 로봇의 숙제를 대신 도와주며 기다려요.
  3. 엄마가 크레파스를 사 오면 로봇은 다시 아까 그리던 그림을 마저 멋지게 완성한답니다!