πvm/
: κ±°μ λΉμ΄μλ λλ ν 리. project 3μμ μ¬κΈ°μ κ°μ λ©λͺ¨λ¦¬λ₯Ό ꡬν
π include/vm/vm.h
,Β vm/vm.c
: κ°μ λ©λͺ¨λ¦¬μ κΈ°λ³Έμ μΈ μΈν°νμ΄μ€ μ 곡
-- VM_UNINIT, VM_ANON, VM_FILE, VM_PAGE_CACHE --
μ μ μμ μ€λͺ
π include/vm/uninit.h
,Β vm/uninit.c
: μ΄κΈ°ν λμ§ μμ νμ΄μ§λ€μ μν κΈ°λ₯ μ 곡 (vm_type = VM_UNINIT
)
π include/vm/anon.h
,Β vm/anon.c
: anonymous pageλ₯Ό μν κΈ°λ₯μ μ 곡 (vm_type =VM_ANON
)
ν λ©λͺ¨λ¦¬ κ²μ¬ κΈ°λ₯ ν¬ν¨
π include/vm/file.h
,Β vm/file.c
: file-backed pageλ₯Ό μν κΈ°λ₯μ μ 곡ν©λλ€ (vm_type =Β VM_FILE
)
π include/vm/inspect.h
,Β vm/inspect.c
: μ±μ μ μν λ©λͺ¨λ¦¬ κ²μ¬ κΈ°λ₯ ν¬ν¨ (μμ X)
π include/lib/kernel/
: Pintos 컀λμλ§ ν¬ν¨λ C λΌμ΄λΈλ¬λ¦¬μ μΌλΆ
#include <...>
νκΈ°λ² μ¬μ©π include/devices/disk.h
,Β devices/disk.c
: λΈλ‘ λλ°μ΄μ€λ‘μ μΉν° κΈ°λ° μ½κΈ°/μ°κΈ°λ₯Ό μ 곡
4,096 λ°μ΄νΈ(νμ΄μ§ ν¬κΈ°)μ κΈΈμ΄λ₯Ό κ°μ§λ κ°μ λ©λͺ¨λ¦¬μ μ°μλ μμ
컀λ(κ°μ)νμ΄μ§ μ§ν©μ μ μμ μ΄λ©°, μ΄λ€ μ°λ λλ νλ‘μΈμ€κ° μ€νλκ³ μλ κ°μ νμ κ°μ μμΉμ λ¨μ μμ
κ° νλ‘μΈμ€λ KERN_BASE (0x8004000000)
λ―Έλ§μ κ°μμ£Όμκ°μ κ°μ§λ λ
립μ μΈ μ μ (κ°μ)νμ΄μ§ μ§ν©μ κ°μ§
컀λ : μ μ νμ΄μ§, 컀λ νμ΄μ§ λͺ¨λμ μ κ·Ό κ°λ₯
μ μ νλ‘μΈμ€ : λ³ΈμΈμ μ μ νμ΄μ§μλ§ μ κ·Ό κ°λ₯
물리 λ©λͺ¨λ¦¬ μμ μ°μμ μΈ μμ
12 11 0
+-----------------------+-----------+
| Frame Number | Offset |
+-----------------------+-----------+
Physical Address
64λΉνΈ 물리주μλ νλ μ λλ²μ νλ μ μ€νμ (λλ κ·Έλ₯ μ€νμ )μΌλ‘ λλ¨
x86-64 μμ€ν
- Pintos
: 컀λ κ°μλ©λͺ¨λ¦¬λ₯Ό 물리λ©λͺ¨λ¦¬μ μ§μ 맀ν νλ λ°©μμ ν΅ν΄μ 물리주μ μ μλ λ©λͺ¨λ¦¬μ μ§μ μ μ κ·Ό
컀λ κ°μλ©λͺ¨λ¦¬λ₯Ό ν΅νλ©΄ νλ μλ€μ μ κ·Ό κ°λ₯
CPUκ° κ°μμ£Όμλ₯Ό 물리주μλ‘, μ¦ νμ΄μ§λ₯Ό νλ μμΌλ‘ λ³ννκΈ° μν΄ μ¬μ©νλ μλ£κ΅¬μ‘°
+----------+
.--------------->|Page Table|-----------.
/ +----------+ |
| 12 11 0 V 12 11 0
+---------+----+ +---------+----+
| Page Nr | Ofs| |Frame Nr | Ofs|
+---------+----+ +---------+----+
Virt Addr | Phys Addr ^
\_______________________________________/
μ€μ νν°μ λ΄μ λμ€ν¬ 곡κ°μ μλ νμ΄μ§ ν¬κΈ°μ μμ
μΈ κ°μ§μ μμ ν λ³κ°μ μλ£κ΅¬μ‘°λ₯Ό ꡬννλ κ²μ΄ νμ μλλ€.
μλ‘ μ°κ΄λ μμλ€μ ν΅ν©λ μλ£κ΅¬μ‘°λ‘ μ λΆ, λλ λΆλΆμ μΌλ‘ ν©μΉλ κ² μ΄ λ νΈλ¦¬ν μ μλ€.
- κ° μλ£κ΅¬μ‘°μμ κ°κ°μ μμκ° μ΄λ€ μ 보λ₯Ό λ΄μμ§ λ₯Ό μ νκΈ°
- μλ£κ΅¬μ‘°μ λ²μ λ₯Ό μ§μ(νλ‘μΈμ€λ³)μΌλ‘ ν μ§, μ μ(μ 체 μμ€ν μ μ μ©)μΌλ‘ ν μ§λ μ νκΈ°
- ν΄λΉ λ²μμ νμν μΈμ€ν΄μ€μ μ λ κ²°μ
μ€κ³ λ¨μνλ₯Ό μν΄, non-pageable λ©λͺ¨λ¦¬ (calloc μ΄λ malloc μ μν΄ ν λΉλ)μ μ΄λ¬ν μλ£κ΅¬μ‘°λ€ μ μ₯ κ°λ₯
= μλ£κ΅¬μ‘°λ€ μ¬μ΄μ ν¬μΈν°κ° μ ν¨ν μνλ‘ μ μ§λ κ±°λ μ¬μ€μ 보μ₯ν μ μλ€
Supplemental page table, 보쑰 νμ΄μ§ ν μ΄λΈ
Frame table , νλ μ ν μ΄λΈ
Swap table , μ€μ ν μ΄λΈ
Page-Map-Level-4 Offsetμ PML4 ν μ΄λΈμ Entryλ₯Ό κ°λ¦¬ν¨λ€.
PML4 ν
μ΄λΈμ κ°μ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό 물리 λ©λͺ¨λ¦¬ μ£Όμλ‘ λ³ννκΈ° μν νμ΄μ§ ν
μ΄λΈ κ³μΈ΅ ꡬ쑰μ κ°μ₯ μμ λ 벨λ‘μ
κ·Έ μμλ μ¬λ¬κ°μ PML4 Entry κ° μ‘΄μ¬νλ€.
PML4 Entry μλ νμ΄μ§ λλ ν 리 ν¬μΈν°(PDP), νλκ·Έ λ° μ μ΄ μ 보, κΈ°ν λ©νλ°μ΄ν°κ° μλ€.
λν λ€μ λ 벨μ νμ΄μ§ ν
μ΄λΈλ‘ μ΄μ΄μ§λλ‘ νμ¬, μ΅μ’
μ μΌλ‘ κ°μ μ£Όμλ₯Ό 물리 μ£Όμλ‘ λ³ννλ€.