페이지 폴트 : 프로세스가 어떤 가상 주소에 접근하려 했을 때, CPU의 MMU가 페이지 테이블을 확인해보니 해당 페이지가 물리 메모리에 존재하지 않을 때(유효한 프레임에 매핑되어 있지 않을 때) 발생하는 하드웨어 인터럽트(예외)
역할 : 페이지 폴트가 발생하면 CPU가 제어권을 운영체제에게 넘김. 운영체제의 페이지 폴트 핸들러가 호출되어 필요한 페이지를 디스크나 다른 곳에서 가져와 물리 메모리에 적재하는 작업 수행
지연 로딩(Lazy Loading) : 프로그램이 시작될 때 모든 데이터를 메모리에 올리지 않고, 실제로 데이터가 필요한 순간이 되어서야 비로소 메모리에 올리는 전략
개념 : 당장 사용하지 않는 데이터는 디스크에 그냥 두고, 페이지 폴트가 발생했을 때 해당 페이지만 RAM으로 가져옴.
장점
1. 빠른 프로그램 시작 : 처음부터 모든 걸 로딩하지 않으므로 프로그램 시작 속도가 매우 빨라짐
2. 메모리 절약 : 실제로 사용되는 페이지만 메모리를 차지하므로, 메모리를 훨씬 효율적으로 사용할 수 있음.
페이지 교체 정책(Page Replacement Policy) : RAM이 꽉 찼을 때, 새로운 페이지를 위한 공간을 만들기 위해 어떤 기존 페이지를 디스크로 쫓아낼지 결정하는 규칙
개념 : 빈 프레임이 없을 때 페이지 폴트가 발생하면, 운영체제는 이 정책에 따라 희생양 페이지를 고름.
목표 : 앞으로 사용될 가능성이 가장 작은 페이지를 쫓아내, 페이지 폴트 발생 횟수를 최소화하는 것.
종류
1. FIFO(First-In, First-Out) : 가장 먼저 들어온 페이지를 가장 먼저 내보내는 가장 간단한 방식
2. LRU(Least Recently Used) : 가장 오랫동안 사용되지 않은 페이지를 내보내는 방식(가장 널리 쓰이고 효율적)
3. LFU(Least Frequently Used) : 참조 횟수가 가장 적은 페이지를 내보내는 방식
이 세 가지 개념은 하나의 시나리오로 연결됨
PAGE_A
에 접근을 시도. 이때 페이지 폴트가 발생되어 운영체제에 전달됨.PAGE_A
를 찾아 비어있는 프레임에 로드PAGE_B
를 선택PAGE_B
의 내용이 디스크에 저장된 후 변경됐다면(dirty), 변경 내용을 디스크(스왑 공간)에 기록PAGE_B
가 있던 자리에 디스크로부터 가져온 PAGE_A
를 로드지연 로딩이라는 효율적인 메모리 관리 전략 때문에 페이지 폴트가 필연적으로 발생하고, 이 페이지 폴트를 처리하는 과정에서 메모리가 부족하면 페이지 교체 정책을 통해 공간을 확보하는 흐름