운영체제 9강
가상 메모리 (Virtual Memory)
✅ 가상 메모리 개념
- 프로세스가 사용하는 주소 공간을 실제 물리 메모리가 아닌 보조기억장치에 위치시켜 관리
- 실행 시 필요한 부분만 메모리에 적재 → 효율적 메모리 사용
- 가상 주소 공간(V), 실 주소 공간(R)으로 구분
✅ 주소 변환 구조
- 가상주소 → 실주소 매핑 필요
- 연속적일 필요 없음 (비연속 사상 가능)
- 동적 주소 변환 기법 필요
✅ 블록 기반 주소 변환
- 가상 메모리를 일정한 블록 단위로 나눔
- 실주소 = 시작 주소 + 변위(offset)
- 블록 크기에 따라 사상표 크기 및 성능 영향
✅ 페이지(Page) 기반 관리
- 페이지(Page): 가상 메모리의 고정된 크기 단위
- 프레임(Frame): 페이지가 적재될 물리 메모리 공간
- 페이지와 프레임의 크기는 같음
● 주소 변환
- 가상 주소 = 페이지 번호 + 오프셋
- 페이지 사상표(Page Table)를 사용하여 프레임 번호 결정
✅ 페이지 사상표 구성 요소
| 항목 | 설명 |
|---|
| 페이지 프레임 번호 | 해당 페이지가 위치한 프레임 번호 |
| 보조기억장치 주소 | 디스크 상 위치 |
| 존재 비트 | 메모리에 적재 여부 표시 |
✅ 연관 사상표 (TLB)
- 최근 참조된 페이지에 대한 변환 정보를 캐시에 저장
- 빠른 주소 변환 가능
- TLB 미스 시 일반 사상표 접근
✅ 세그먼트(Segment) 기반 관리
- 세그먼트: 논리적 의미를 가진 가변 길이 블록
- 프로그램 구성 요소 (함수, 자료구조 등) 단위로 분리
● 세그먼트 사상표 구성
| 항목 | 설명 |
|---|
| 시작주소 | 실주소 공간의 시작 주소 |
| 길이 | 세그먼트 크기 |
| 존재 비트 | 메모리 상 존재 여부 표시 |
| 보조기억장치 주소 | 디스크 위치 정보 |
✅ 세그먼트 + 페이지 혼합 기법
- 세그먼트를 먼저 나눈 뒤 각 세그먼트를 페이지로 나눔
- 변환: 세그먼트 → 페이지 → 오프셋
✅ 페이지 호출 기법
● 요구 호출 (Demand Paging)
- 필요한 시점에 페이지를 메모리로 적재
- 처음 시작 시 페이지 부재(fault) 많이 발생
● 예상 호출 (Pre-paging)
- 필요할 것으로 예상되는 페이지를 미리 적재
- 예측 실패 시 낭비 가능, 하지만 성능 향상 기대
✅ 페이지 교체 알고리즘 (다음 강의에서 계속)
- 페이지 부재 발생 시 어떤 페이지를 제거할지 결정
✅ 요약
- 가상 메모리는 프로세스 실행 시 메모리 요구량을 줄이고 효율을 높이는 핵심 기술
- 페이지 기반, 세그먼트 기반, 혼합 방식 존재
- 주소 변환에 사상표와 TLB(연관 사상표) 활용
- 페이지 호출 방식에 따라 시스템 성능 영향
운영체제 10강
페이지 교체 알고리즘 & 워킹셋 모델
✅ 페이지 교체 과정
- 교체 대상 페이지 선택
- 보조기억장치에 보관
- 새로운 페이지를 메모리에 적재
✅ 페이지 교체 알고리즘
● OPT (Optimal)
- 앞으로 가장 오랫동안 사용되지 않을 페이지를 교체
- 이론적으로 최적이나, 미래 예측이 불가능하여 실현 불가능
● FIFO (First-In First-Out)
- 가장 오래된 페이지부터 교체
- 구조: FIFO 큐 사용
- Belady의 이상현상 발생 가능
→ 프레임 수를 늘렸는데 오히려 페이지 부재 증가
● LRU (Least Recently Used)
- 가장 오래 전에 참조된 페이지를 교체
- 시간 국부성 가정 (최근 참조 → 미래에도 참조 가능)
- 테이블에 참조 시각 저장 필요 → 오버헤드 큼
● LFU (Least Frequently Used)
- 참조 횟수가 가장 적은 페이지 교체
- 초기에는 많이 사용되다 후에 사용되지 않는 페이지가 교체되지 않을 수 있음
● NUR (Not Used Recently)
- 페이지에 참조 비트 추가
- 참조되면 1, 아니라면 0
- 비트가 0인 페이지를 우선 교체
● Second Chance (Clock Algorithm)
- FIFO에 참조 비트 결합
- 비트가 1이면 0으로 바꾸고 큐 뒤로
- 0인 페이지는 교체
- 시계 형태 포인터로 회전하며 검사
✅ 워킹 셋 (Working Set) 모델
- 일정 시간(t) 동안 참조된 페이지의 집합
- 이 집합을 메모리에 유지하면 성능 향상
- 정확한 집합 추적은 어렵고 비용 큼
✅ 쓰래싱 (Thrashing)
- 페이지 부재가 과도하게 발생하여, 실제 작업보다 교체에 더 많은 시간 소모
- 워킹셋 부족, 실행 프로세스 과다로 발생
✅ 페이지 부재율 (Page Fault Frequency, PFF)
- 페이지 부재 발생 후, 얼마나 빨리 다음 부재가 발생했는지 측정
- 부재율이 너무 높으면 프레임 증가
- 낮으면 프레임 감소
✅ 요약
- 다양한 교체 알고리즘 존재 (OPT, FIFO, LRU, LFU, NUR, Clock 등)
- 국부성(temporal/spatial locality)을 잘 반영한 알고리즘이 효과적
- 워킹셋 모델과 PFF는 성능 유지에 유용
- 쓰래싱 방지를 위해 프로세스 수 조절 또는 우선순위 조정 필요