페이지 폴트 (Page Fault)

간만에 페이지 폴트에 대한 질문을 받았는데 순간 멍하더라
반성하는 차원에서 다시 정리해본다

간혹 컴퓨터를 사용하며 프로세스가 너무 많아져 메모리의 크기를 넘어버리는 경우가 발생할 수 있다.
우리는 그런 경우에서도 컴퓨터가 정상적으로 동작하기를 원한다.
이를 가능하게 해주는 것이 페이징(Paging), 혹은 스와핑(Swapping) 기술이다.

방법은 단순하다.
보조기억장치(하드디스크 등)의 일부를 메모리(이것을 가상메모리라 한다)로서 사용하면 된다.
이렇게 하면 메모리가 확장된 것 같은 효과를 얻을 수 있다.
하지만 메모리와 보조기억장치는 엄연히 다른 저장매체이기 때문에 추가적인 조치가 필요하다.

페이징 기술을 실현하기위해 OS는 메모리를 페이지(Page)라는 형태로 블럭화해 관리한다.
그리고 메모리와 보조기억장치 간 페이지를 정책에 따라 교환(스왑)하는 형태로 페이징 기술을 실현한다.

만약 메모리에 CPU가 요청한 페이지가 없다면 어떻게 될까?
이것이 페이지 폴트이다.
이 경우 스왑 영역(가상 메모리)에서 페이지를 찾아 메모리에 로드한다.

페이지 폴트는 그 원인에 따라 세 가지로 분류된다.

Major Page Fault

Major 페이지 폴트는 일반적으로 스와핑으로 알려져있는 동작을 의미한다.
요청한 페이지가 메모리로부터 스왑아웃(Swap-Out)되어 가상 메모리, 즉 보조기억장치에 저장되어있다면, 해당 페이지를 다시 메모리로 스왑인(Swap-In)하여야 할 것이다.
이것을 Major 페이지 폴트라 한다.
Major 페이지 폴트는 Disk I/O를 발생시킨다.

Minor Page Fault

요청한 페이지가 메모리에는 로드되었지만 메모리 관리 유닛(Memory Management Unit, MMU)에는 로드되어있지 않다고 표시된 경우 이를 Minor 페이지 폴트라 한다.
설명이 좀 복잡하다.

예를 들어, 한 프로세스가 어떤 공유된 페이지를 사용하고 있을 때 다른 프로세스가 이 페이지를 요청하는 경우를 말한다.
이 경우, MMU는 해당 페이지를 가리키도록 하면 되기 때문에 스왑인이 발생하지 않는다.
다시말해 Disk I/O가 생기지 않는다.

Invalid Page Fault

흔한 윈도우 블루 스크린 원인이다.

요청한 페이지가 스왑영역의 밖을 참조하거나, 페이지를 쓰기 불가능한 영역에 쓰려고할 때 발생하는 페이지 폴트이다.

이 경우에는 페이지 폴트 핸들러가 세그멘테이션 폴트(Segmentation Fault)를 발생시킨다.
결과는 보통 커널 패닉(블루 스크린)으로 나타난다.

Page Replacement Algorithm

페이지 교체 알고리즘은 다양하다.
흔히 언급되는 것들은 다음과 같다.

  • FIFO (First In First Out)
  • Optimal
  • LRU (Least Recently Used)
  • LFU (Least Frequently Used)
  • MFU (Most Frequently Used)

굳이 설명해야하나 싶을 정도로 네이밍을 잘 해놨다.

아무래도 가장 많이 사용되는 것은 LRU이다.
직관적으로도 가장 잘 될 것 같다.
가장 오랫동안 안쓰인 페이지를 교체하는 알고리즘이다.

이 외에도 많은 페이지 교체 알고리즘들이 있으며 아직도 연구되는 중이다.

Hits: 241

댓글 남기기