기능
1. '디스크에서 활성화 영역' → '메인 메모리' 로 취급
2. 각 프로세스에 통일된 주소 공간 제공 → 메모리 관리 단순화
3. 각 프로세스의 주소 공간을 다른 프로세스에 의한 손상으로부터 보호.
물리 주소 방식: 메인 메모리가 M개의 연속적인 바이트 크기 셀의 배열로 구성.
각 바이트가 물리주소(Physical Address)를 가지고 있고, 이를 통해 데이터에 접근.
가상 주소 방식:
가상 메모리: 디스크에 저장된 N개의 바이트 크기 셀 배열로 구성.
각 바이트는 가상 주소를 가지며, 이는 배열의 인덱스로 사용.
SRAM (V1 ~ V3 캐시): 메모리 ↔ 디스크 간 징검다리 역할.
VM system은 가상 메모리를 규정된 사이즈 블록 단위로 분할 → 분할된 블록 = '가상 페이지'라고 부름.
* 위의 큰 그림을 먼저 이해하고, 안의 디테일한 내용들을 이해하자!
- 결국, 어떤 데이터를 가져올 때 해당 데이터를 디스크 / 메인 메모리 사이에서 핸들링 하는 것을 운영체제 내의 VM system이 한다.
- 이는 운영체제가 '가상 주소'와 '페이지 테이블'이라는 자료구조를 갖고 관장한다.
물리 메모리에 저장된 자료구조로, 운영체제 S/W, MMU 내 주소 번역 H/W, 가상 페이지를 물리 페이지로 매핑.
PTE(페이지 테이블 엔트리)의 배열. 1개의 유효 비트와 n개의 주소 필드라고 생각해보자.
아래의 그림과 같이 생겼다.
아래 그림과 예시들을 보며 페이지 테이블의 동작에 대해 조금 더 이해해보자.
*Page Hit
- ex) 위 그림에서 VP2에 접근
- 가상 주소를 이용해 주소 번역 H/W가 페이지 테이블의 PTE2를 읽어들임.
- 'PTE2를 봤더니 유효 비트가 1 이네?' → PTE 내 주소 필드 참조 해 물리 주소 사용.
* Page Fault (=DRAM 캐시 미스)
- ex) 위 그림에서 CPU가 VP3에 접근
- 가상 주소를 이용해 주소 번역 H/W가 페이지 테이블의 PTE3을 읽어들임.
- 'PTE3을 봤더니 유효 비트가 0 이네?' → 'Page Fault' 발생 → 페이지 오류 예외 핸들러 호출!
- PP3에 있는 희생자 페이지 VP4를 선택.
- VP4가 수정된 사항이 있다면 디스크로 다시 복사.
- 커널은 VP3를 디스크 → 메인 메모리(PP3 자리)로 복사. → PTE3도 갱신해주고 리턴.
- 핸들러가 리턴할 때 오류 인스트럭션을 재시작.
* 페이지 할당
- ex) malloc을 호출 → VP5가 디스크 상에 공간 만듦. → PTE5를 디스크의 VP5를 가리키도록 함.
(여기서는 swap 영역을 말하는 듯)
* 지역성
- 가상 메모리 시스템의 효율 ∝ 지역성
* Thrashing
- '동작 집합의 크기 > 물리 메모리의 크기'인 경우, 페이지들이 연속적으로 swap 해 들어오고 나가기 반복.
참고 자료 / 이미지 출처
[OS]가상 메모리(Virtual Memory) - 3. 페이지(Page), 페이지 프레임(Page Frame), 페이지 테이블(Page Table)
https://mooneegee.blogspot.com/2015/01/os-virtual-memory-3-page-page-frame.html
CS:APP - 가상 메모리 1
https://koyo.kr/post/csapp-virtual-memory-1/
[컴퓨터 구조] 27. Virtual Memory (2) - TLB
https://blog.everdu.com/399