본문 바로가기

컴퓨터시스템

Page Fault, Lazy Loading, Page Replacement Policy 간단하게 정리

728x90

 

 

 

Page Fault  페이지 폴트

 

페이지 - 가상 메모리를 사용하는 최소 크기 단위

 

각 프로세스는 페이지를 관리하는 Page Table을 가진다.

 

페이지 폴트는 요구 페이징 기법에서 필요한 페이지가 물리 메모리에 없을 때 발생하는 인터럽트다.

요구 페이징(Demand paging)
 - 모든 페이지를 물리 메모리에 올리지 않고, 필요한 페이지만 메모리에 올리는 방식

 

 

  Page Fault 처리 과정

  1.  물리메모리(주기억장치)를 확인하여 페이지가 없으면 trap을 발생, 운영체제에 알린다.
  2.  운영체제는 페이지 테이블을 확인하여 가상 메모리에 페이지가 존재하는지 확인한다. 없으면 프로세스 중단.
  3.  페이지 폴트면, 현재 물리 메모리에 비어있는 프레임이 있는지 찾는다.
     -  페이지 폴트가 발생하면 운영체제는 해당 페이지를 저장공간(보조기억장치 또는 스왑영역, 가상메모리)에서 가져온다.
  4.  비어있는 프레임에 해당 페이지를 적재하고, 페이지 테이블을 최신화한다.
     -  비어있는 프레임이 없다면 페이지 교체 알고리즘을 사용하여 희생 프레임을 고른다.
  5.  다시 프로세스를 실행한다.

 

  참고

 페이지 폴트가 발생, 디스트에서 메모리를 가져오는 과정은 I/O 과정으로 프로세스는 BLOCK 상태가 되며, CPU는 다른 프로세스를 실행할 수 있다.

 

 

 

Page Replacement Policy  페이지 교체 알고리즘

 

페이지 교체 알고리즘은 희생할 프레임을 선택하는 알고리즘이지만, 페이지 폴트를 최소화하기 위한 알고리즘이기도 하다.

 

 

  종류

  • FIFO : 가장 먼저 적재된 페이지를 우선으로 내보낸다. 페이지 프레임을 증가시켜도 페이지 폴트가 증가하는 FIFO 이상 현상이 발생할 수 있다.

  • LRU : 가장 오래전에 참조가 이루어진 페이지를 내보낸다. 시간 지역성을 참고해 사용 가능성이 낮는 페이지를 내보내는 방식.

  • LFU : 가장 참조 횟수가 적은 페이지를 내보낸다. 최신 흐름을 잘 반영하지 못 할 수도 있다.
    - Incache-LFU : 메모리에 적재될 때부터 페이지의 횟수를 카운트
    - Perfect-LFU: 메모리 적재 여부와 상관 없이 페이지의 과거 총 참조 횟수를 카운트
    (perfect-LFU는 정확하게 참조 횟수를 참조할 수 있지만, 시간에 따른 참조의 변화를 반영하지 못하고 구현이 복잡하다는 단점이 있다.)

  • MFU : 가장 참조 횟수가 많은 페이지를 내보낸다.

  • 클럭 알고리즘 : 하드웨어 자원을 통해 기존 알고리즘의 운영 오버헤드를 줄였다. NRU(not used recently) 또는 NUR(not recently used) 알고리즘이라고도 불린다. 가장 최근에 참조되지 않은 페이지를 내보내지만, 교체되는 페이지의 참조 시점이 가장 오래되었다는 것을 보장하지 않는다.

    1. 프레임 내의 페이지가 참조될 때, 하드웨어에 의해 1로 세팅된다.
    2. 한 바퀴 돌며 참조되지 않은 페이지의 참조 비트 값을 0으로 바꾼 후 지나간다.
    3. 참조 비트가 0인 페이지를 방문하면 해당 페이지를 교체한다.

    클럭 알고리즘은 시계 바늘이 한 바퀴 도는 동안 걸리는 시간만큼 페이지를 메모리에 유지시켜 페이지 폴트를 줄이도록 설계되었다. 이에 클럭 알고리즘을 2차 기회 알고리즘이라 부르기도 한다.

  • OPT(Optimal) : 앞으로 가장 오랫동안 사용하지 않을 페이지를 내보낸다.
    모든 알고리즘 중 페이지 폴트 발생이 가장 적다. 다만 프로세스가 앞으로 사용할 페이지를 미리 알아야 하기 때문에 실제로 구현하기는 거의 불가능한 알고리즘이다.

 

 

 

Lazy Loading

 

Lazy Loading은 효율적인 자원 관리와 시스템 성능 최적화를 위한 기법이다. 

프로그램이 실제로 해당 데이터를 필요로 할 때까지 데이터의 로딩을 지연시키는 기법으로 주로 메모리 관리에 사용된다. 프로그램이 시작할 때 필요한 모든 데이터를 메모리에 적재하지 않고, 필요한 순간에만 해당 부분을 로드한다.

 

이 기업은 메모리 사용의 효율성을 높히고, 시스템의 전반적인 성능을 개선하기 위해 사용한다.

메모리는 한정된 자원이므로 모든 데이터를 미리 적재하는 것은 불필요한 메모리 사용으로 이어질 수 있다.

 

 

  작동 방식

  • 디맨드 페이징(Demand Paging) : 대표적인 예. 프로세스가 페이지에 접근하려 할 때, 해당 페이지가 메모리에 없으면 페이지 폴트가 발생한다. 운영 체제는 이때 필요한 페이지를 디스크 -> 메모리로 적재한다.
  • 리소스 사용 최적화 : 프로세스가 실제로 사용하지 않는 페이지는 메모리에 적재되지 않는다. 이는 시스템 리소스의 낭비를 줄이고, 사용 가능한 메모리를 더 효율적으로 사용할 수 있게 한다.

처음 프로세스 실행 - 모든 데이터에 대한 정보를 페이지 테이블에 로드 - page fault 발생 - 디스크나 메모리를 참조해 데이터를 가져옴 - 다시 프로세스 실행

 

  장단점

  • 장점
    - 메모리 사용 최적화
    - 초기 로딩 시간 감소
    - 시스템 자원의 효율적 사용

  • 단점
    - 페이지 폴트 발생 시 성능 저하 가능성 존재
    - 관리가 복잡해질 수 있음

 

 


 

 

 

  여담

늦은 로딩과 반대의 개념도 존재한다.

 

Eager Loading

객체나 데이터를 조회할 때, 연관된 모든 데이터를 함께 로딩하는 방식.

운영체제에서는 프로세스가 생성될 때, 모든 데이터를 메모리에 적재하는 방식이라고 생각하면 될 것 같다.

 

 

 

lazy loading을 검색하면 대부분 웹 관점에서의 개념과 구현이 나온다. 운영체제 관점에서 검색해보니 다 정글 선배님 ㅠㅋㅋㅋㅋㅋ 덕분에 공부합니다.. 선배님...

 

 


출처

 

가상 메모리(Virtual Memory), 페이징(Paging)

[OS] 가상메모리와 페이지폴트

[OS] 페이지 교체 알고리즘 (FIFO, LRU, LFU, NRU, NUR)

[운영체제] 페이지 교체 알고리즘 (FIFO/OPT/LRU/LFU/MFU)

Lazy Loading

[정글] 열한째주. 운영체제가 메모리를 관리하는 방법

 

 

'컴퓨터시스템' 카테고리의 다른 글

Segmentation Fault  (0) 2024.03.11
레지스터와 메모리, 그리고 캐시  (0) 2024.03.11
프로세스와 스레드  (0) 2024.02.29
웹서버와 CGI와 WAS (+ MIME Type)  (2) 2024.02.22
파일 디스크립터란? (File Descriptor)  (0) 2024.02.22