1 연속 메모리 할당
2 페이징을 통한 가상 메모리 관리
3. 페이지 교체와 프레임 할당
가상 메모리는 물리 메모리보다 큰 프로그램을 실행할 수 있도록 해 주지만, 현실적으로 물리 메모리의 크기는 제한적입니다.
따라서 운영체제는 프로세스들이 제한된 메모리를 효율적으로 사용할 수 있도록, 불필요한 페이지는 제거하고, 필요한 페이지만 메모리에 적재하는 방식으로 관리해야 합니다.
또한 각 프로세스가 사용할 수 있는 **프레임(Frame)**의 수를 적절히 조절해야, 시스템 전체 성능을 저하시키지 않고 안정적으로 운영할 수 있습니다.
요구 페이징(Demand Paging)
요구 페이징은 프로그램을 실행할 때, 처음부터 모든 페이지를 메모리에 올리지 않고, CPU가 접근하는 시점에 필요한 페이지만 메모리에 적재하는 기법입니다.
동작 과정
- CPU가 명령어를 수행하며 특정 페이지를 요청
- 해당 페이지가 메모리에 있으면 → 정상적으로 접근
- 페이지가 없으면 → 페이지 폴트(Page Fault) 발생
- 운영체제가 디스크에서 해당 페이지를 메모리로 로드
- 페이지 테이블을 갱신하고 명령을 재실행
순수 요구 페이징(Pure Demand Paging)
- 시작 시 아무 페이지도 메모리에 적재하지 않음
- 첫 명령어 실행 시점부터 연속적인 페이지 폴트가 발생
- 초기에 느릴 수 있으나, 불필요한 페이지를 적재하지 않음으로써 메모리 효율 향상
요구 페이징은 메모리를 절약할 수 있다는 장점이 있지만, 메모리가 가득 찬 상황에서는 새로운 페이지를 넣기 위해 기존 페이지를 제거해야 하므로, 이때 어떤 페이지를 제거할지를 결정하는 페이지 교체 알고리즘이 필요합니다.
페이지 교체 알고리즘(Page Replacement Algorithm)
페이지 교체 알고리즘은 메모리가 가득 찬 상태에서 어떤 페이지를 제거할지 결정하는 방식입니다.
좋은 알고리즘은 다음 조건을 만족해야 합니다:
- 페이지 폴트 수를 최소화할 수 있어야 함
- 구현이 효율적이고, 과도한 오버헤드를 발생시키지 않아야 함
**성능 평가는 페이지 참조열(reference string)**과 페이지 폴트 횟수를 통해 비교합니다.
FIFO (First-In First-Out)
- 가장 먼저 메모리에 들어온 페이지를 가장 먼저 제거
- 큐(Queue) 구조로 간단하게 구현 가능
- 단점: 최근 사용 여부를 고려하지 않음
- 성능이 떨어질 수 있음 (예: Belady의 모순 현상)
예시
참조열: 2 3 1 3 5 2 4 2 3
프레임 수: 3 → 페이지 폴트 수: 6회
2차 기회 알고리즘 (Second-Chance)
- FIFO의 개선 버전
- 페이지마다 **참조 비트(Reference Bit)**를 두어, 교체 전에 확인
- 참조 비트가
1이면 → 0으로 초기화하고 페이지를 큐 뒤로 이동 (기회 한 번 더 줌) - 자주 사용된 페이지는 제거되지 않음
최적 페이지 교체 (Optimal Replacement)
- 앞으로 가장 오랫동안 사용되지 않을 페이지를 제거
- 페이지 폴트 수가 이론적으로 가장 적음 → 비교 기준으로 사용됨
- 단점: 미래의 참조를 알 수 없기 때문에 실제 구현 불가
LRU (Least Recently Used)
- 가장 오랫동안 사용되지 않은 페이지를 제거
- 최근 사용 이력을 바탕으로 판단
- 실제 시스템에서도 많이 사용됨
- 구현 방식: 타임스탬프 방식, 스택 방식 등
예시
참조열: 2 3 1 3 5 2 4 2 3
프레임 수: 3 → 페이지 폴트 수: 3회
스레싱(Thrashing)
스레싱은 페이지 폴트가 과도하게 발생하여, CPU가 실질적인 작업보다 계속해서 페이지 교체 작업만 수행하는 비정상적인 상태입니다.
특징
- CPU 사용률 급격히 감소
- 페이지 폴트율 급증
- 시스템 전체 응답 지연, 성능 급락
발생 원인
- 각 프로세스에 할당된 프레임 수가 너무 적은 경우
- 너무 많은 프로세스가 동시에 실행되는 경우 (과도한 멀티프로그래밍)
스레싱을 방지하려면 프레임을 적절히 할당해야 하며, 이를 위해 다음과 같은 프레임 할당 전략이 사용됩니다.
프레임 할당 방식
균등 할당 (Equal Allocation)
- 모든 프로세스에 동일한 수의 프레임을 분배
- 구현이 단순하고 공정성 확보 가능
- 하지만 프로세스의 크기나 메모리 요구량을 반영하지 못함
비례 할당 (Proportional Allocation)
- 프로세스의 크기나 요구 메모리에 비례하여 프레임을 할당
- 자원을 보다 효율적으로 분배할 수 있음
작업 집합 모델 (Working Set Model)
- **최근 일정 시간 동안 사용된 페이지 집합(작업 집합)**을 기준으로 프레임을 동적으로 조절
- 사용하지 않는 페이지는 제거하고, 자주 쓰는 페이지에 프레임을 집중
- 스레싱 방지에 효과적
정리
- 요구 페이징은 가상 메모리의 효율성을 높이기 위한 핵심 기법이며, 페이지 교체 알고리즘과 함께 사용됨
- FIFO, LRU, Optimal 등 다양한 교체 방식은 상황에 따라 성능 차이가 큼
- 스레싱은 프레임 부족이 원인이며, 적절한 프레임 할당 정책으로 완화 가능
- 실제 운영체제는 LRU의 변형, 2차 기회 알고리즘, 작업 집합 모델 등을 조합하여 사용