Background
- 'DO NOT CHANGE' 적힌 부분은 수정 ㄴㄴ
- include/vm/vm.h + vm/vm.c
가상 메모리 기본적 인터페이스 제공
- vm.h에서 VM_PAGE_CACHE는 Project 4에서 쓰는거
- include/vm/uninit.h + vm/uninit.c ## vm_type = VM_UNINIT
초기화되지 않은 페이지들을 위한 기능 제공
- 현재 pintOS는 '모든 페이지가 초기화되지 않은 페이지로 설정'
이후 anonymous page / file-backed page로 변환
- include/vm/anon.h + vm/anon.c ## vm_type = VM_ANON
anonymous page를 위한 기능 제공
- include/vm/file.h + vm/file.c ## vm_type = VM_FILE
- include/vm/inspect.h + vm/inspect.c
채점을 위한 메모리 검사 기능을 포함한 파일
- include/devices/disk.h + devices/disk.c
블록 디바이스로의 섹터 기반 읽기/쓰기 제공
블록 디바이스로 스왑 파티션에 접근할 때 사용
<aside> ✅
</aside>
Pages
[Pages]
63 48 47 39 38 30 29 21 20 12 11 0
+-------------+----------------+----------------+----------------+-------------+------------+
| Sign Extend | Page-Map | Page-Directory | Page-directory | Page-Table | Page |
| | Level-4 Offset | Pointer | Offset | Offset | Offset |
+-------------+----------------+----------------+----------------+-------------+------------+
| | | | | |
+------- 9 ------+------- 9 ------+------- 9 ------+----- 9 -----+---- 12 ----+
Virtual Address
[Frame]
12 11 0
+-----------------------+-----------+
| Frame Number | Offset |
+-----------------------+-----------+
Physical Address
- x86-64 시스템에서는 물리주소에 있는 메모리에 직접적 접근이 불가
- pintOS에서는 커널 가상 메모리를 물리 메모리에 직접 매핑하는 방식으로 문제를 해결할거임
Page Tables
- Page Table은 CPU가 가상주소를 물리주소로 (Page -> Frame) 변환하기 위해 사용하는 자료구조
- threads/mmu.c 안에 페이지 테이블 관리하는 코드 제공
+----------+
.--------------->|Page Table|-----------.
/ +----------+ |
| 12 11 0 V 12 11 0
+---------+----+ +---------+----+
| Page Nr | Ofs| |Frame Nr | Ofs|
+---------+----+ +---------+----+
Virt Addr | Phys Addr ^
\\_______________________________________/
Swap Slots