μ΄μ체μ λ κ±°μ λͺ¨λ κ³΅κ° κ΄λ¦¬ λ¬Έμ λ₯Ό ν΄κ²°ν λ λ κ°μ§ μ€ νλλ₯Ό μ¬μ©νλ€. 첫 λ²μ§Έλ κ°μ λ©λͺ¨λ¦¬μ μΈκ·Έλ©ν μ΄μ μ²λΌ κ°λ³ ν¬κΈ°μ μ‘°κ°λ€λ‘ λΆν νλ κ²μ΄λ€. μ΄ ν΄κ²°μ± μ νμμ λ¬Έμ μΈ λ¨νΈνλ₯Ό κ°μ§κ³ μλ€. λ λ²μ§Έ λ°©λ²μ 곡κ°μ λμΌ ν¬κΈ°μ μ‘°κ°λ€μΌλ‘ λΆν νλ κ²μ΄λ€. κ°μ λ©λͺ¨λ¦¬μμ μ΄λ₯Ό νμ΄μ§(paging) μ΄λΌκ³ λΆλ₯Έλ€.
νλ‘μΈμ€μ μ£Όμ 곡κ°μ λͺ κ°μ κ°λ³ ν¬κΈ° λ Όλ¦¬ μΈκ·Έλ¨ΌνΈ (μ½λ, ν, μ€ν) μΌλ‘ λλλ κ²μ΄ μλλΌ κ³ μ ν¬κΈ°μ λ¨μλ‘ λλλ€. μ΄ κ³ μ ν¬κΈ° λ¨μλ₯Ό νμ΄μ§(page) λΌκ³ λΆλ₯Έλ€. μ΄μ μμνμ¬ λ¬Όλ¦¬ λ©λͺ¨λ¦¬λ νμ΄μ§ νλ μ(page frame) μ΄λΌκ³ λΆλ¦¬λ κ³ μ ν¬κΈ° μ¬λ‘― λ°°μ΄μ΄λΌκ³ μκ°νλ€. μ΄ νλ μ κ°κ°μ νλμ κ°μ λ©λͺ¨λ¦¬ νμ΄μ§λ₯Ό μ μ₯ν μ μλ€.
νμ΄μ§λ₯Ό μ¬μ©νμ¬ μ΄λ»κ² λ©λͺ¨λ¦¬λ₯Ό κ°μνν μ μμκΉ? μΈκ·Έλ©ν μ΄μ μ λ¬Έμ μ μ ν΄κ²°νλ©΄μ 곡κ°κ³Ό μκ° μ€λ²ν€λλ₯Ό μ΅μλ‘ ν΄λ³΄μ.
1. κ°λ¨ν μμ λ° κ°μ
μ΄ ν¬κΈ°κ° 64λ°μ΄νΈμ΄κ³ , 4κ°μ 16λ°μ΄νΈ νμ΄μ§λ‘ ꡬμ±λ μμ μ£Όμ 곡κ°μ μμν΄λ³΄μ.

물리 λ©λͺ¨λ¦¬λ 8κ°μ νμ΄μ§ νλ μμ κ°μ§κ³ μλ 128 λ°μ΄νΈλΌκ³ κ°μ ν΄λ³΄μ.

μ΄λ κ² κ°μ μ£Όμ 곡κ°μ νμ΄μ§λ€μ 물리 λ©λͺ¨λ¦¬ μ 체μ λΆμ° λ°°μΉλμ΄ μλ€. λ, μ΄μ체μ κ° μμ μ μν΄ λ¬Όλ¦¬ λ©λͺ¨λ¦¬μ νμ΄μ§ νλ μμ μ¬μ©ν μ μλ€.
νμ΄μ§μ μ΄μ λ°©μμ λΉν΄ λ§μ μ₯μ μ κ°μ§κ³ μλ€. νλ‘μΈμ€μ μ£Όμ κ³΅κ° μ¬μ© λ°©μκ³Όλ μκ΄ μμ΄ μ μ°νκ³ ν¨μ¨μ μΌλ‘ μ£Όμ κ³΅κ° κ°λ μ μ§μν μ μλ€. νκ³Ό μ€νμ΄ μ΄λλ‘ μ»€μ§λμ§, μ΄λ»κ² μ¬μ©λλμ§ μ νμκ° μλ€.
λ λ€λ₯Έ μ₯μ μ λΉ κ³΅κ° κ΄λ¦¬μ λ¨μν¨μ΄λ€. μλ₯Ό λ€μ΄ 64λ°μ΄νΈ μ£Όμ 곡κ°μ 8νμ΄μ§ 물리 λ©λͺ¨λ¦¬μ λ°°μΉνκΈ°λ₯Ό μνλ€λ©΄, λΉμ΄ μλ 4κ°μ νμ΄μ§λ§ μ°ΎμΌλ©΄ λλ€. μλ§ μ΄μ체μ λ μ΄λ₯Ό μν΄ λͺ¨λ λΉμ΄ μλ νμ΄μ§μ λΉ κ³΅κ° λ¦¬μ€νΈλ₯Ό μ μ§νκ³ λ¦¬μ€νΈμ 첫 λ€ κ° νμ΄μ§λ₯Ό μ νν κ²μ΄λ€.
μ£Όμ 곡κ°μ κ° κ°μ νμ΄μ§μ λν 물리 λ©λͺ¨λ¦¬ μμΉ κΈ°λ‘μ μν΄, μ΄μ체μ λ νλ‘μΈμ€λ§λ€ νμ΄μ§ ν μ΄λΈ μ΄λΌλ μλ£ κ΅¬μ‘°λ₯Ό μ μ§νλ€. νμ΄μ§ ν μ΄λΈμ μ£Όμ μν μ μ£Όμ 곡κ°μ κ°μ νμ΄μ§ μ£Όμ λ³ν μ 보λ₯Ό μ μ₯νλ κ²μ΄λ€.
64λ°μ΄νΈ μ£Όμ 곡κ°μ κ°μ§ νλ‘μΈμ€κ° λ€μ λ©λͺ¨λ¦¬ μ κ·Όμ μννλ€κ³ κ°μ νμ
movl <virtual address>, %eax
μ£Όμ <virtual address>μ λ°μ΄ν°λ₯Ό eax λ μ§μ€ν°μ νμ¬νλ λ° μ§μ€νμ. νλ‘μΈμ€κ° μμ±ν κ°μ μ£Όμμ λ³νμ μν΄ λ¨Όμ κ°μ μ£Όμλ₯Ό κ°μ νμ΄μ§ λ²νΈ(virtual page number, VPN) μ νμ΄μ§ λ΄μ μ€νμ
λ κ°μ κ΅¬μ± μμλ‘ λΆν νλ€.
μ΄ μμμμλ κ°μ μ£Όμ 곡κ°μ ν¬κΈ°κ° 64λ°μ΄νΈμ΄κΈ° λλ¬Έμ κ°μ μ£Όμλ 6κ°μ λΉνΈκ° νμνλ€.

Va5λ κ°μ μ£Όμμ μ΅μμ λΉνΈμ΄λ©°, Va0μ κ°μ μ£Όμμ μ΅νμ λΉνΈμ΄λ€. νμ΄μ§ ν¬κΈ°κ° 16λ°μ΄νΈ μ΄κΈ° λλ¬Έμ, λ€μκ³Ό κ°μ΄ λλ μ μλ€. 64λ°μ΄νΈ μ£Όμ 곡κ°μμ 16λ°μ΄νΈ νμ΄μ§ 4κ° μ€ 1κ°λ₯Ό μ νν΄μΌ νκΈ° λλ¬Έμ μ°λ¦¬λ 2λΉνΈ κ°μ νμ΄μ§ λ²νΈ (VPN) μ΄ νμνλ€. λλ¨Έμ§ λΉνΈλ νμ΄μ§ λ΄μμ μ°λ¦¬κ° μνλ λ°μ΄νΈμ μμΉλ₯Ό λνλΈλ€. μ΄κ²μ μ€νμ μ΄λΌκ³ λΆλ₯Έλ€.
movl 21, %eax
κ°μ μ£Όμ 21μ μ΄μ§ νμμΌλ‘ λ³ννλ©΄ 010101μ΄κ³ , μ΄λ₯Ό κ°μ νμ΄μ§ λ²νΈμ μ€νμ μΌλ‘ λλλ€.

κ°μ μ£Όμ 21μ κ°μ νμ΄μ§ 01λ²μ 0101λ²μ§Έ λ°μ΄νΈκ° λλ€.
μ΄ κ°μ νμ΄μ§ λ²νΈλ₯Ό κ°μ§κ³ μ€μ 물리 νλ μ μ΄λμ μ μ₯λμ΄ μλμ§ μ°Ύμ μ μλ€.

μ€νμ μ λμΌνκ³ , κ°μ μ£Όμ 01μ 물리 μ£Όμ 111λ‘ λ³ννλ€.
물리 νλ μ λ²νΈ: (physical frame number, PFN) 물리 νμ΄μ§ λ²νΈ: (physical page number, PPN)
2. νμ΄μ§ ν μ΄λΈμ μ΄λμ μ μ₯λλκ°
νμ΄μ§ ν μ΄λΈμ λ§€μ° μ»€μ§ μ μλ€. 4KB ν¬κΈ°μ νμ΄μ§λ₯Ό κ°μ§λ μ νμ μΈ 32λΉνΈ μ£Όμ 곡κ°μ μκ°ν΄ 보μ. μ΄ κ°μ μ£Όμλ 20λΉνΈμ VPNκ³Ό 12λΉνΈμ μ€νμ μΌλ‘ ꡬμ±λλ€.
20λΉνΈ VPNμ μ΄μ체μ κ° κ° νλ‘μΈμ€λ₯Ό μν΄ κ΄λ¦¬ν΄μΌ νλ λ³νμ κ°μκ° κ° λΌλ κ²μ μλ―Ένλ€. 물리 μ£Όμλ‘μ λ³ν μ 보μ λ€λ₯Έ νμν μ 보λ₯Ό μ μ₯νκΈ° μνμ¬ νμ΄μ§ ν μ΄λΈ νλͺ©(page table entry, PTE)λ§λ€ 4λ°μ΄νΈκ° νμνλ€κ³ κ°μ νλ©΄, κ° νμ΄μ§ ν μ΄λΈμ μ μ₯νκΈ° μν΄ νλ‘μΈμ€λ§λ€ 4MBμ λ©λͺ¨λ¦¬κ° νμνκ² λλ€. νλ‘μΈμ€ 100κ°κ° μ€νμ€μ΄λΌλ©΄ 400MBμ λ©λͺ¨λ¦¬κ° νμν κ²μ΄λ€.
νμ΄μ§ ν μ΄λΈμ΄ λ§€μ° ν¬κΈ° λλ¬Έμ νμ¬ μ€ν μ€μΈ νλ‘μΈμ€μ νμ΄μ§ ν μ΄λΈμ MMUκ° μλ λ©λͺ¨λ¦¬μ μ μ₯ν κ²μ΄λ€. λΉλΆκ° μ΄μ체μ κ° κ΄λ¦¬νλ 물리 λ©λͺ¨λ¦¬μ νμ΄μ§ ν μ΄λΈμ΄ μμ£Όνλ€κ³ κ°μ νμ. νμ΄μ§ ν μ΄λΈμ κ°μ λ©λͺ¨λ¦¬μ μ μ₯λ μ μκ³ λμ€ν¬μ μ€μλ μλ μμ§λ§ 볡μ‘νλκΉ μΌλ¨ 무μνμ. μ΄μ체μ λ©λͺ¨λ¦¬ μμ (PFN 0)μ νμ΄μ§ ν μ΄λΈμ΄ μ‘΄μ¬νλ€κ³ νμ.

3. νμ΄μ§ ν μ΄λΈμλ μ€μ λ‘ λ¬΄μμ΄ μλκ°
νμ΄μ§ ν μ΄λΈμ κ°μ μ£Όμλ₯Ό 물리 μ£Όμλ‘ λ§€ννλλ° μ¬μ©λλ μλ£ κ΅¬μ‘°μ΄λ€. κ°μ₯ κ°λ¨ν ννλ μ ν νμ΄μ§ ν μ΄λΈ(linear page table)μ΄λ€. λ¨μν λ°°μ΄μ΄λ€. μ΄μ체μ λ μνλ 물리 νλ μ λ²νΈ(PFN)λ₯Ό μ°ΎκΈ° μνμ¬ κ°μ νμ΄μ§ λ²νΈ(VPN)λ‘ λ°°μ΄μ νλͺ©μ μ κ·Όνκ³ , κ·Έ νλͺ©μ νμ΄μ§ ν μ΄λΈ νλͺ©(PTE)μ κ²μνλ€.
κ° PTEμλ μ¬λ¬ λΉνΈκ° μ‘΄μ¬νλ€.

Valid bitμ νΉμ λ³νμ μ ν¨ μ¬λΆλ₯Ό λνλ΄λ μν μ νλ€. νλ‘κ·Έλ¨μ΄ μ€νμ μμν λ ν λΉλμ§ μμ μ£Όμ 곡κ°μ΄ 무ν¨λ‘ νμλλ©°, νλ‘μΈμ€κ° μ΄ λ¬΄ν¨ λ©λͺ¨λ¦¬λ₯Ό μ κ·Όνλ €κ³ νλ©΄ μ΄μ체μ μ νΈλ©μ λ°μμν¨λ€.
Protection bitμ νμ΄μ§κ° μ½μ μ μλμ§, μΈ μ μλμ§, λλ μ€νλ μ μλμ§λ₯Ό νμνλ μν μ νλ€. Protection bitκ° νμ©νμ§ μλ λ°©μμΌλ‘ νμ΄μ§μ μ κ·Όνλ €κ³ νλ©΄ μ΄μ체μ μ νΈλ©μ μμ±νλ€.
Present bitμ μ΄ νμ΄μ§κ° 물리 λ©λͺ¨λ¦¬μ μλμ§ νΉμ λμ€ν¬μ μλμ§(μ¦, μ€μ μμλμλμ§)λ₯Ό κ°λ¦¬ν€λ μν μ νλ€.
Dirty bitμ λ©λͺ¨λ¦¬μ λ°μ λ ν νμ΄μ§κ° λ³κ²½λμλμ§ μ¬λΆλ₯Ό λνλ΄λ μν μ νλ€.
Reference bit(λλ Accessed bit)λ νμ΄μ§κ° μ κ·Όλμλμ§λ₯Ό μΆμ νκΈ° μν΄ μ¬μ©λλ μν μ νλ€. μ΄ λΉνΈλ μ΄λ€ νμ΄μ§κ° μΈκΈ°κ° μλμ§ κ²°μ νμ¬ λ©λͺ¨λ¦¬μ μ μ§λμ΄μΌ νλ νμ΄μ§λ₯Ό κ²°μ νλ λ°μλ μ μ©νλ€. λμ€μ νμ΄μ§ κ΅μ²΄ μ₯μμ μμΈν λ€λ£¬λ€.
Read/Write bitμ μ΄ νμ΄μ§μ μ°κΈ°κ° νμ©λλμ§λ₯Ό κ²°μ νλ μν μ νλ€.
User/Supervisor bitμ μ¬μ©μ λͺ¨λ νλ‘μΈμ€κ° νμ΄μ§μ μ‘μΈμ€ ν μ μλμ§λ₯Ό κ²°μ νλ μν μ νλ€.
PWT, PCD, PAT, G λΉνΈλ μ΄ νμ΄μ§μ λν νλμ¨μ΄ μΊμμ λμμ κ²°μ νλ μν μ νλ€.
4. νμ΄μ§: λ무 λλ¦Ό
νμ΄μ§μ λ리λ€. κ°μ μ£Όμλ₯Ό 물리 μ£Όμλ‘ λ³ννλλ° μ€λ κ±Έλ¦°λ€.
- νλ‘μΈμ€μ νμ΄μ§ ν μ΄λΈμ μ΄ν΄ λ³Έλ€
- νμ΄μ§ ν μ΄λΈμ μ 보λ₯Ό ν΅ν΄ μ£Όμλ₯Ό λ³ννλ€
- μ€μ λ©λͺ¨λ¦¬μμ λ°μ΄ν°λ₯Ό κ°μ Έμ¨λ€
νλμ¨μ΄λ νμ¬ μ€νμ€μΈ νλ‘μΈμ€μ λν page table μμΉλ₯Ό μμμΌ νλ€.
// κ°μ μ£Όμμμ vpnλ§ μΆμΆνλ€.
VPN = (VirtualAddress & VPN_MASK) >> SHIFT
// Page table μ£Όμμ vpn κ°μΌλ‘ νμ¬ μ κ·Όνλ νλ‘μΈμ€μ PTE μ°Ύλλ€.
PTEAddr = PageTableBaseRegister + (VPN * sizeof(PTE))
// κ°μ μ£Όμμμ offsetλ§ μΆμΆνλ€.
offset = VirtualAddress & OFFSET_MASK
// offsetκ³Ό PFN κ°μΌλ‘ μ€μ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό μ»λλ€.
PhysAddr = (PFN << SHIFT) | offset
μ΄λ¬ν μμλ‘ μ€μ λ©λͺ¨λ¦¬ μ£Όμλ₯Ό μ»λλ° κ΅μ₯ν 볡μ‘νλ€. λͺ¨λ λ©λͺ¨λ¦¬ μ°Έμ‘°μ λν΄ λ¨Όμ νμ΄μ§ ν μ΄λΈμμ λ³ν μ 보λ₯Ό λ°μ ν΄μΌ νκΈ° λλ¬Έμ λ°λμ ν λ²μ μΆκ°μ μΈ λ©λͺ¨λ¦¬ μ°Έμ‘°κ° νμνκ³ , μ΄λ νλ‘μΈμ€λ₯Ό 2λ°° μ΄μ λλ €μ§κ² νλ€.

5. λ©λͺ¨λ¦¬ νΈλ μ΄μ€
κ°λ¨ν λ©λͺ¨λ¦¬ μ‘μΈμ€ μμλ₯Ό ν΅ν΄ νμ΄μ§μ μ¬μ©νμ λ λ°μνλ λͺ¨λ λ©λͺ¨λ¦¬ μ κ·Όμ μ΄ν΄λ³΄μ.
int array[1000];
for (i = 0; i < 1000; i++) {
array[i] = 0;
}
gcc -o array array.c -Wall -O
./array
1 0x1024 movl $0x0, (%edi,%eax,4)
2 0x1028 incl %eax
3 0x102c cmpl $0x03e8,%eax
4 0x1030 jne 0x1024
-
0x1024 movl $0x0, (%edi,%eax,4): μ΄ λͺ λ Ήμ 0x0 (μ¦, 0)μ λ©λͺ¨λ¦¬ μμΉ (%edi,%eax,4)λ‘ μ΄λμν€λΌλ λͺ λ Ήμ λλ€. μ¬κΈ°μ (%edi,%eax,4)λ μ£Όμ κ³μ° λ°©μμ λνλ΄λλ°, μ΄λ edi λ μ§μ€ν°μ κ°κ³Ό eax λ μ§μ€ν°μ κ°μ 4λ₯Ό κ³±ν κ²μ λν μμΉλ₯Ό κ°λ¦¬ν΅λλ€. μ΄ κ²½μ°, μ΄κ²μ λ°°μ΄μ iλ²μ§Έ μμΉλ₯Ό κ°λ¦¬ν€λ ν¬μΈν°λΌκ³ λ³Ό μ μμ΅λλ€. -
0x1028 incl %eax: μ΄ λͺ λ Ήμ eax λ μ§μ€ν°μ κ°μ 1 μ¦κ°μν€λ λͺ λ Ήμ λλ€. μ΄ λͺ λ Ήμ for 루νμμ iλ₯Ό μ¦κ°μν€λ κ²κ³Ό κ°μ μν μ ν©λλ€. -
0x102c cmpl $0x03e8,%eax: μ΄ λͺ λ Ήμ eax λ μ§μ€ν°μ κ°κ³Ό 0x03e8 (μ¦, 1000)μ λΉκ΅νλ λͺ λ Ήμ λλ€. μ΄ λͺ λ Ήμ for 루νμ μ’ λ£ μ‘°κ±΄ (μ¦, i < 1000)κ³Ό λμΌν©λλ€. -
0x1030 jne 0x1024: μ΄ λͺ λ Ήμ βjump if not equalβμ μ€μλ§λ‘, λ§μ½ eax λ μ§μ€ν°μ κ°κ³Ό 1000μ΄ κ°μ§ μλ€λ©΄ (μ¦, iκ° 1000λ³΄λ€ μλ€λ©΄) μ£Όμ 0x1024 (μ¦, 첫 λ²μ§Έ λͺ λ Ήμ΄)λ‘ μ ννλΌλ λͺ λ Ήμ λλ€. μ΄κ²μ for 루νμ λ΄μ©μ λ°λ³΅νκΈ° μν κ²μ λλ€. λ§μ½ iκ° 1000μ΄λΌλ©΄, μ΄ λͺ λ Ήμ μ ννμ§ μκ³ κ³μ μ§ννμ¬ λ£¨νλ₯Ό μ’ λ£ν©λλ€.
μ΄ μμλ₯Ό μ§μ μνν΄λ³΄μ.
νλ‘μΈμ€μ κ°μ μ£Όμλ 64KBμ΄κ³ page ν¬κΈ°λ 1KBλΌκ³ κ°μ νμ. μννκΈ° μν΄ μμμΌ νλ κ²μ page tableμ λ΄μ©κ³Ό μ€μ λ©λͺ¨λ¦¬μ μ£Όμμ΄λ€. VPN 1νμ΄μ§μ μ½λμ λν μ λ³΄κ° μκ³ , μ΄κ²μ PFN 4λ‘ μ°κ²°λλ€κ³ κ°μ νλ€. array μ VPNμ 39, 40, 41, 42μ΄κ³ κ°κ°μ PFNμ 7, 8, 9, 10μ΄λ€.

μ½λκ° μ€νλ λ λͺ λ Ήμ΄ fetchλ λ κ°μ λ©λͺ¨λ¦¬ μ°Έμ‘°λ₯Ό μμ±νλ€.
- page tableμ λν λ©λͺ¨λ¦¬ μ°Έμ‘°
- λͺ λ Ήμ΄μ λν μ°Έμ‘°
5λ²μ λ°λ³΅ λ©λͺ¨λ¦¬ μ κ·Όμ λνλΈ κ·Έλ¦Όμ΄λ€. ν λ²μ λ°λ³΅μ μν΄ 10λ²μ λ©λͺ¨λ¦¬ μ κ·Όμ΄ λ°μνλ κ²μ΄λ€. μ΄λ₯Ό μ΅μ ννλ λ°©λ²μ μμκΉ?