Virtual Memory & Demand Paging
Virtual Memory & Demand Paging
📝 가상 메모리란?
실제 메모리 용량보다 커 보이게 하는 기술
프로세스 전체가 메모리에 없어도 실행 가능
RAM과 디스크를 하나의 추상화된 메모리 영역으로 제공
🎯 등장 배경
1. 시스템 안정성 확보
프로그램 비정상 종료 시 시스템 전체 영향 방지
프로세스 공간을 가상 세계로 제한
2. 큰 프로세스 실행
실제 메모리보다 큰 프로세스 실행
3. 참조 지역성 활용
전체 프로세스가 메모리에 없어도 실행 가능
✅ 가상 메모리 장점
1. 메모리 크기 제한 없음
프로그램이 실제 물리 메모리 크기에 제한받지 않음
2. 멀티 프로그래밍
여러 프로그램 동시 실행
CPU 이용률과 처리율 증가
3. I/O 감소
프로그램 스왑 필요 I/O 감소
🗺️ 가상 주소 공간
사용자/프로세스의 논리적 메모리 공간
0번지부터 시작
MMU(Memory Management Unit)에 의해 물리 주소로 변환
🔧 핵심 기술
1. 요구 페이징 (Demand Paging)
필요할 때 페이지를 메모리에 적재
2. 페이지 교체 (Page Replacement)
메모리 부족 시 페이지 교체
📄 요구 페이징 (Demand Paging)
논리 주소 공간의 각 페이지를 실제로 필요할 때만 메모리 적재
특징
사용 안 하는 페이지: 스왑 공간에 저장
메모리 절약
스왑 시간 감소
🔍 Valid/Invalid Bit
페이지의 논리적 위치 구분
Valid
페이지가 메모리에 있는 상태
Invalid
페이지가 스왑 공간에 있는 상태
🚨 Page Fault 처리 과정
1. Page Table 참조
프로세스가 새 데이터 접근
해당 페이지는 Invalid
2. Page Fault Trap 발생
내부 인터럽트 발생
OS 인터럽트 핸들러로 전달
3. I/O 작업 시작
스왑 공간에서 데이터 읽기
4. 메모리 적재
필요한 데이터를 메모리에 적재
5. Page Table 갱신
Invalid → Valid
6. 프로세스 재시작
인터럽트 종료
프로세스 진행
⚡ 성능 고려 사항
1. 이론적 성능
Page Fault율에 영향
통상 10배 성능 저하
참조 지역성으로 실제 저하는 드묾
2. 스왑 공간 관리
일반 파일 I/O보다 빠른 I/O 제공
큰 데이터 입출력 단위(block) 사용
파일 검색, 간접 할당 기법 미사용
3. Page Fault 최소화
프로세스 형태에 의존적
페이지 교체 알고리즘에 의존적
🔄 페이지 교체 (Page Replacement)
메모리 과할당 시 페이지 교체
📊 메모리 과할당
물리 메모리 모든 영역이 할당된 상태
빈 메모리 프레임 없음
💡 해소 방법
1. 프로세스 종료
메모리 관리 목적 위배
2. 프로세스 스와핑
전체 스와핑은 비용 큼
멀티 프로세싱 정도 낮춤
3. 일부 페이지 스와핑
페이지 교체
요구 페이징의 필수 요소
🔧 페이지 교체 알고리즘
목표: 페이지 폴트 최소화
1. FIFO (First In First Out)
가장 오래된 페이지 교체
Queue로 관리
간단하지만 성능 보장 안 됨
Belady 모순 발생 가능
2. OPR (Optimal Page Replacement)
가장 오랫동안 사용 안 될 페이지 교체
Belady 모순 없음
실제 구현 불가능 (미래 예측 필요)
다른 알고리즘 성능 비교 기준
3. LRU (Least Recently Used)
OPR에 근사한 방법
과거 참조 이력 기반
최근에 사용 안 된 페이지 교체
LRU 구현
페이지 이력 기록 필요
하드웨어 지원 필요
스택으로 페이지 정보 유지
최근 참조 페이지 → 스택 top
교체 페이지 → 스택 bottom
4. Counting
페이지 사용 횟수 기록
LFU/MFU로 나뉨
LFU (Least Frequently Used)
참조 횟수 가장 적은 페이지 교체
MFU (Most Frequently Used)
참조 횟수 가장 많은 페이지 교체
❓ 면접 질문 예시
Q1. 가상 메모리란 무엇인가요?
답변: 가상 메모리는 실제 메모리 용량보다 커 보이게 하는 기술로, 프로세스 전체가 메모리에 올라가지 않아도 실행할 수 있습니다. RAM과 디스크를 하나의 추상화된 메모리 영역으로 제공하며, 참조 지역성을 활용하여 필요한 부분만 메모리에 적재하고 나머지는 디스크에 저장합니다.
Q2. 요구 페이징이란 무엇인가요?
답변: 요구 페이징은 논리 주소 공간의 각 페이지를 실제로 필요할 때만 메모리에 적재하는 기법입니다. 사용되지 않는 페이지는 스왑 공간에 저장되어 메모리를 절약하고 스왑 시간을 감소시킵니다.
Q3. Page Fault 처리 과정을 설명해주세요.
답변:
- 프로세스가 새 데이터 접근 시 Page Table 참조하여 Invalid 확인, 2) Page Fault Trap 발생하여 OS 인터럽트 핸들러로 전달, 3) 스왑 공간에서 데이터 읽는 I/O 작업 시작, 4) 필요한 데이터를 메모리에 적재, 5) Page Table을 Invalid에서 Valid로 갱신, 6) 프로세스 재시작하여 진행합니다.
Q4. 페이지 교체 알고리즘의 종류는?
답변: FIFO는 가장 오래된 페이지를 교체하지만 Belady 모순이 발생할 수 있습니다. OPR은 가장 오랫동안 사용 안 될 페이지를 교체하여 최적이지만 미래 예측이 필요해 구현 불가능합니다. LRU는 OPR에 근사하여 과거 참조 이력 기반으로 최근에 사용 안 된 페이지를 교체합니다. Counting은 LFU와 MFU로 나뉘어 사용 횟수를 기록합니다.
Q5. LRU 알고리즘은 어떻게 구현하나요?
답변: LRU는 페이지 이력을 기록할 수 있어야 하고 하드웨어 지원이 필요합니다. 스택으로 페이지 정보를 유지하며, 최근 참조된 페이지는 스택 top으로 이동하고, 교체될 페이지는 스택 bottom에 위치합니다.
📚 원본 참고 자료
출처: 2023-CS-Study
- 파일: os_virtual_memory_and_demand_paging.md
- 내용: 가상 메모리, 요구 페이징, 페이지 교체
추가 학습 자료
🔗관련 문서
이 개념과 함께 학습하면 좋은 문서들입니다.