페이징과 페이지 테이블
| 스와핑(swapping) | 프로세스를 보조기억장치의 일부 영역으로 쫓아내고 당장 필요한 프로세스를 적재하는 메모리 관리 기법 |
| 스왑 아웃(swap-out) | 프로세스를 보조기억장치의 일부 영역으로 쫓아내는 것 |
| 스왑 인(swap-in) | 스왑 아웃된 프로세스를 메모리에 적재하는 것 |
| 스왑 영역 | 스왑 아웃된 프로세스가 적재되는 보조기억장치 영역 |
* 연속 메모리 할당.
- 이렇게 할당하면 외부 단편화 문제가 발생함. (작업 끝나면 빈 공간이 생기는 메모리 낭비 문제)

[Paging]
메모리와 프로세스를 일정한 단위로 자르고.
그 메모리(Frame)에 프로세스(Page)를 할당한다면 외부 단편화 문제가 안 생김.
BUT 페이징을 사용하면. 내부 단편화가 생김.
1개의 프로세스당 1개의 페이지 크기보다 작은 메모리 낭비가 생길 수 있음.
CPU 입장에서 순차적으로 실행할 수 없으니, 페이지 주소가 필요함.
-> 페이지 테이블
페이지 테이블
- 프레임과 페이지의 매핑 정보를 담고 있는 표 형태의 데이터
- 프로세스마다 페이지 테이블을 갖고 있다.


페이지 테이블은 메모리에 있으면 너무 오래걸림.
페이지 테이블의 캐시 메모리 (TLB: Translation Look-aside Buffer)에 저장.
* 페이지 테이블 내 정보: 유효 비트(valid bit)
- 접근하려는 페이지가 보조기억장치에 있을 경우: 페이지 폴트(page fault)
- 1. 작업 내역 백업
- 2. 페이지 폴트 루틴 실행 - 접근하려는 페이지 적재
- 3. 유효 비트 1로 변경
- 4. 접근하려는 페이지 접근
요구 페이징, 스래싱
- 처음부터 모든 페이지를 적재하지 않고
- 페이지 폴트가 발생하면 그때 페이지를 적재한다
스래싱
- 프로세스 실행 시간보다 페이징에 더 많은 시간이 소요되는 문제
- 지나친 페이지 폴트로 인해 페이지 교체에 너무 많은 시간을 소요하여 저하되는 문제
페이지 폴트를 줄이는 방법: 메모리 크기를 엄청 늘리기 (비현실적)
* 페이지 교체 알고리즘
페이지 교체 알고리즘
| FIFO 페이지 교체 알고리즘 | 가장 먼저 메모리에 적재된 페이지부터 페이지-아웃 |
| 2차 기회 FIFO 페이지 교체 알고리즘 | 가장 오래 메모리에 머물렀던 페이지부터 페이지-아웃 |
| 최적 페이지 교체 알고리즘 | 앞으로의 사용 빈도가 가장 낮은 페이지부터 교체하는 알고리즘 (얘는 평가용 Baseline) |
| LRU 페이지 교체 알고리즘 | 가장 오랫동안 사용되지 않은 페이지를 교체 해버림. |
캐시 메모리 정책
*캐시 메모리
- CPU와 메모리 간의 속도 차를 극복하기 위해 탄생.
- CPU와 메모리 사이에 위치, 레지스터보다는 용량이 크고 메모리보다는 빠른 SRAM 기반.
- CPU에서 사용할 법한 정보를 미리 가져와 저장
- 메모리가 대형 마트라면 캐시 메모리는 편의점.
캐시 메모리 쓰기 정책
- 즉시 쓰기(write-through) - 캐시 메모리와 메모리에 동시에 쓰기
- 메모리를 항상 최신 상태로 유지: 일관성이 깨지는 상황 방지