내 잡다한 노트

Page Fault와 Thrashing 본문

운영체제

Page Fault와 Thrashing

peanutwalnut 2025. 1. 26. 16:18

페이지 폴트는 가상 메모리(가상 주소와 실제 주소가 매핑됨)에 존재하지만 실제 메모리인 RAM에는 없는 데이터에 접근할 경우 발생하게 된다.

 

이때, 메모리에서 당장 사용하지 않는 영역을 하드디스크로 옮기고 하드디스크의 일부분을 메모리처럼 불러와 쓰는 것을 swapping 이라고 한다. 이를 통해 페이지 폴트가 일어나지 않는 것처럼 만든다.

 

그리고 과도한 페이지 폴트가 나타나게되면 Thrashing 이 발생하게 된다.

Thrashing이란 운영체제의 가상 메모리 관리 과정에서, **과도한 페이지 부재(Page Fault)**가 발생하여 시스템 성능이 급격히 저하되는 현상이다.

CPU가 실제 작업(프로세스 실행)을 거의 하지 못하고, 계속해서 페이지 교체 작업(디스크 스왑)만 반복하는 상태에 빠지는 것을 의미한다.

 

1. 왜 발생하는가?

  1. 메모리 부족
    • 동시에 실행되는 프로세스가 많거나, 각 프로세스가 사용하는 메모리가 매우 커서 **실제 주기억장치(RAM)**보다 더 많은 메모리를 요구할 때 발생합니다.
    • 이로 인해 필요한 페이지가 자주 메모리에 올라오지 못하고, 페이지 부재가 빈번해집니다.
  2. 작업 집합(Working Set) 문제
    • 각 프로세스가 실행되기 위해 자주 사용하는 페이지의 모음(작업 집합)이 존재합니다.
    • 시스템이 작업 집합을 충분히 메모리에 상주시키지 못할 정도로 과도한 멀티프로그래밍(프로세스가 너무 많거나 각각 차지하는 작업 집합이 큼)을 수행하면, 필요한 페이지가 계속 디스크로부터 교체되어야 합니다.
  3. 과도한 컨텍스트 스위치
    • 프로세스가 메모리에 충분히 올라오지 않은 상태에서 계속 CPU를 할당받고, 곧바로 필요한 페이지가 없어 페이지 부재가 발생 → 또 다른 프로세스에게 CPU가 넘어가고, 그 프로세스 역시 필요한 페이지가 없어 다시 페이지 부재...
    • 이렇게 CPU 스케줄링페이지 교체가 빈번하게 일어나며 시스템 전체가 바쁘게 스왑만 하다가 결국 성능이 크게 떨어집니다.

2. 구체적인 증상

  1. 디스크 I/O 급증
    • 물리 메모리가 부족하므로, 필요한 페이지를 디스크(스왑 영역)에서 자주 가져와야 해서 디스크 사용률이 매우 높아집니다.
  2. CPU 이용률 감소
    • CPU는 페이지 부재를 처리하기 위해 대기하거나, 페이지 교체 작업(디스크 I/O)이 끝날 때까지 할 일이 없어 **유휴 상태(Idle)**가 늘어납니다.
  3. 시스템 전반 응답 속도 저하
    • 사용자 프로그램, GUI, 서버 응답 등 모든 작업이 느려지며, 사실상 “멈춘 것처럼” 느껴지는 현상이 벌어집니다.

3. 해결 방법

  1. 프로세스 수(멀티프로그래밍 정도) 줄이기
    • 작업 집합을 충분히 메모리에 담을 수 있도록, 동시에 실행 중인 프로세스 수를 줄이거나, 우선순위가 낮은 프로세스를 스왑 아웃하여 대기시키는 전략이 있습니다.
  2. 물리 메모리(RAM) 확장
    • 근본적으로 하드웨어 메모리가 충분하다면, 페이지 교체 빈도가 줄어들어 Thrashing 위험이 감소합니다.

 

 

정리하면, Thrashing이 일어났는지 알기 위해선 물리메모리의 usage와 page fault 지표를 살펴봐야한다.

page fault중에서도 major과 minor로 나뉘게 되는데 이 두개의 차이점은

major은 필요한 페이지가 디스크에서 로드되어야하는경우이다. 즉, swap i/o가 발생한것이다.

minor은 이미 메모리에 있으나 다른 프로세스 주소 공간에서 참조 가능한 경우이다. 디스크 i/o가 아닌것이다.

thrashing이 발생하면 major page fault가 급격하게 증가하게 된다.

 

 

 

'운영체제' 카테고리의 다른 글

Unix Domain Socket  (0) 2025.01.20
IPC 방식에 따른 속도 비교  (0) 2025.01.20
Ephemeral port란?  (0) 2025.01.09
시스템콜 처리 과정, 시스템 콜 테이블  (0) 2023.03.31
프로세스 생성 시스템 콜  (0) 2023.03.20