CPU κ°μν λΆλΆμμ μ νμ μ§μ μ€ν (LDE) κΈ°λ²μ λν΄ λ°°μ λ€. OSTEP 06 Direct Execution λ©λͺ¨λ¦¬ κ°μνμμλ λΉμ·ν μ λ΅μ μΆκ΅¬νλ€. κ°μνλ₯Ό μ 곡νλ λμμ ν¨μ¨μ±κ³Ό μ μ΄ λͺ¨λλ₯Ό μΆκ΅¬νλ€.
ν¨μ¨μ±μ λμ΄κΈ° μν΄ νλμ¨μ΄ μμμ νμ©νλ€. λͺ κ°μ λ μ§μ€ν° νμ©λΆν° TLB, νμ΄μ§ ν μ΄λΈ λ± μ μ 볡μ‘ν νλμ¨μ΄λ₯Ό μ¬μ©νλ€. μ μ΄λ νλ‘κ·Έλ¨μ΄ μκΈ° μμ μ λ©λͺ¨λ¦¬ μ΄μΈμλ μ κ·Όνμ§ λͺ»νλλ‘ μ΄μ체μ κ° λ³΄μ₯νλ€λ κ². μ μ°μ± μΈ‘λ©΄μμ, νλ‘κ·Έλλ¨Έκ° μνλ λλ‘ μ£Όμ 곡κ°μ μ¬μ©νκ³ , νλ‘κ·Έλλ°νκΈ° μ¬μ΄ μμ€ν μ λ§λ€κΈ° μνλ€.
ν΅μ¬ μ§λ¬Έ: μ΄λ»κ² ν¨μ¨μ μ΄κ³ μ μ°νκ² λ©λͺ¨λ¦¬λ₯Ό κ°μν ν μ μμκΉ?
μ°λ¦¬κ° λ€λ£° κΈ°λ²μ (νλμ¨μ΄ κΈ°λ°) μ£Όμ λ³νμ΄λ€. μ΄ κΈ°μ μ μ νμ μ§μ μ€ν λ°©μμ λΆκ°μ μΌλ‘ μ¬μ©λλ κΈ°λ₯μ΄λΌκ³ μκ°ν μ μλ€. μ£Όμ λ³νμ ν΅ν΄ νλμ¨μ΄λ λͺ λ Ήμ΄ λ°μ , νμ¬, μ μ₯ λ±μ κ°μ μ£Όμλ₯Ό μ λ³΄κ° μ€μ μ‘΄μ¬νλ 물리 μ£Όμλ‘ λ³ννλ€.
νλμ¨μ΄κ° λ³νμ κ°μννλλ° λμμ μ£Όμ§λ§ κ·Έκ²λ§μΌλ‘λ λͺ¨μλΌλ€. μ νν λ³νμ΄ μΌμ΄λ μ μλλ‘ μ΄μ체μ κ° κ΄μ¬ν΄μΌ νλ€.
μ΄μ체μ λ λ©λͺ¨λ¦¬μ λΉ κ³΅κ°κ³Ό μ¬μ©μ€μΈ 곡κ°μ νμ μκ³ μμ΄μΌ νκ³ , λ©λͺ¨λ¦¬ μ¬μ©μ μ μ΄νκ³ κ΄λ¦¬νλ€.
μ΄ λͺ¨λ μμ μ λͺ©νλ λ°λ‘ νλ‘κ·Έλ¨μ΄ μμ μ μ μ© λ©λͺ¨λ¦¬λ₯Ό μμ νκ³ μκ³ , κ·Έ μμ μμ μ μ½λμ λ°μ΄ν°κ° μλ€λ νμμ λ§λλ κ²μ΄λ€.
1. κ°μ
- μ£Όμ 곡κ°μ 물리 λ©λͺ¨λ¦¬μ μ°μμ μΌλ‘ λ°°μΉλμ΄μΌ νλ€.
- μ£Όμ 곡κ°μ 물리 λ©λͺ¨λ¦¬ ν¬κΈ°λ³΄λ€ μλ€.
- κ° μ£Όμ 곡κ°μ ν¬κΈ°λ κ°λ€.
2. μ¬λ‘
void func() {
int x = 3000;
x = x + 3; // μ°λ¦¬κ° κ΄μ¬μλ μ½λ
}
128: movl 0x0(\%ebx), \%eax; # 0+ebxλ₯Ό eaxμ μ μ₯
132: addl \$0x03, \%eax; # eaxλ μ§μ€ν°μ 3μ λνλ€
135: movl \%eax, 0x0(\%ebx); # eaxλ₯Ό λ©λͺ¨λ¦¬μ λ€μ μ μ₯
xμ μ£Όμκ° λ μ§μ€ν° ebxμ μ μ₯λμ΄ μλ€κ³ κ°μ νκ³ , μ΄ μ£Όμμ μ μ₯λμ΄ μλ κ°μ λ²μ© λ μ§μ€ν° eaxμ λ£λλ€. λ€μ λͺ
λ Ήμ eaxμ 3μ λνκ³ , λ§μ§λ§ λͺ
λ Ήμ eaxμ κ°μ κ°μ μμΉμ λ©λͺ¨λ¦¬μ μ μ₯νλ€.
νλ‘κ·Έλ¨ μ½λλ μ£Όμ 128μ μμΉνκ³ λ³μ xμ κ°μ μ£Όμ 15KB (μλ μͺ½ μ€ν)μ μμΉνλ€.
μ΄ νλ‘κ·Έλ¨μ΄ μ€νλλ©΄ λ€μκ³Ό κ°μ λ©λͺ¨λ¦¬ μ κ·Όμ΄ μΌμ΄λλ€.
- μ£Όμ 128μ λͺ λ Ήμ΄λ₯Ό λ°μ
- μ΄ λͺ λ Ήμ΄ μ€ν (μ£Όμ 15 KBμμ νμ¬)
- μ£Όμ 132μ λͺ λ Ήμ΄λ₯Ό λ°μ
- μ΄ λͺ λ Ήμ΄ μ€ν (λ©λͺ¨λ¦¬ μ°Έμ‘° μμ)
- μ£Όμ 135μ λͺ λ Ήμ΄λ₯Ό λ°μ
- μ΄ λͺ λ Ήμ΄ μ€ν (15 KBμ μ μ₯)

μ΄λ κ² νλ‘μΈμ€ κ΄μ μμ λ©λͺ¨λ¦¬ μ£Όμκ° 0λΆν° μμνλλ‘ κ°μ νκ²½μ μ 곡ν΄μΌ νλ€.

μ€μ λ‘λ 0λΆν° μμνμ§ μλλΌλ νλ‘κ·Έλ¨μ΄ 0λΆν° μμνλ κ² μ²λΌ μλν΄μΌ νλ€.
3. λμ (νλμ¨μ΄-κΈ°λ°) μ¬λ°°μΉ
Base And Bound (dynamic relocation)
κ° CPUλ§λ€ 2κ°μ νλμ¨μ΄ λ μ§μ€ν°κ° νμνλ€. νλλ λ² μ΄μ€ λ μ§μ€ν°λ‘, νλ‘μΈμ€μ μ£Όμ 곡κ°μ΄ μμνλ 물리 λ©λͺ¨λ¦¬ μ£Όμλ₯Ό μ μ₯νλ€. λ€λ₯Έ νλλ λ°μ΄λ λ μ§μ€ν°λ‘, νλ‘μΈμ€μ μ£Όμ κ³΅κ° ν¬κΈ°λ₯Ό μ μ₯νλ€.
physical address = virtual address + base
128: movl 0x0(%EBX) , % eax
νλμ¨μ΄κ° μ΄ λͺ λ Ήμ΄λ₯Ό λ°μ ν λ, PCκ°(128)μ λ² μ΄μ€ λ μ§μ€ν°μ κ°(32KB = 32768)μ λν΄μ 물리 μ£Όμ(32896)λ₯Ό μ»λλ€.
μ΄ μ£Όμμ μ¬λ°°μΉλ μ€ν μμ μΌμ΄λκ³ , μ€ν νμλ μ£Όμ 곡κ°μ μ΄λν μ μκΈ° λλ¬Έμ λμ μ¬λ°°μΉ (dynamic relocation) λΌκ³ λ λΆλ¦°λ€.
λ°μ΄λ λ μ§μ€ν°λ 보νΈλ₯Ό μ§μνκΈ° μν΄ μ‘΄μ¬νλ€. κ°μ μ£Όμκ° λ°μ΄λ μμ μλμ§ νμΈνλ μ©λ. λ°μ΄λλ³΄λ€ ν° κ°μ μ£Όμλ₯Ό μ°Έμ‘°νλ©΄ CPUλ μμΈλ₯Ό λ°μμν€κ³ νλ‘μΈμ€κ° μ’ λ£λλ€. λ°μ΄λ λ μ§μ€ν° ꡬν λ°©λ²μ λ κ°μ§κ° μλ€.
- μ£Όμ 곡κ°μ ν¬κΈ° μ μ₯
- μ£Όμ 곡κ°μ λ§μ§λ§ 물리 μ£Όμλ₯Ό μ μ₯
μ΄λ κ² μ£Όμ λ³νμ λμμ μ£Όλ νλ‘μΈμμ μΌλΆλ₯Ό λ©λͺ¨λ¦¬ κ΄λ¦¬ μ₯μΉ (MMU) λΌκ³ λΆλ₯Έλ€.
μμ
μ£Όμ 곡κ°μ ν¬κΈ°κ° 4KB(4096)μΈ νλ‘μΈμ€κ° 물리 μ£Όμ 16KB(16384)μ νμ¬λμ΄ μλ€κ³ κ°μ νμ.

κ°μ μ£Όμκ° λ무 ν¬λ©΄(λ°μ΄λλ₯Ό λ²μ΄λλ©΄) μ€λ₯κ° λ°μνλ€.
4. νλμ¨μ΄ μ§μ μμ½

5. μ΄μ체μ μ΄μ
λ² μ΄μ€μ λ°μ΄λ λ°©μμ κ°μ λ©λͺ¨λ¦¬ ꡬνμ μν΄ μ΄μ체μ κ° λ°λμ κ°μ λμ΄μΌ νλ μμ μ΄ 4κ° μ‘΄μ¬νλ€.
- νλ‘μΈμ€κ° μμ±λ λ μ΄μ체μ λ μ£Όμ 곡κ°μ΄ μ μ₯λ λ©λͺ¨λ¦¬ 곡κ°μ μ°Ύμ μ‘°μΉλ₯Ό μ·¨ν΄μΌ νλ€.
- νλ‘μΈμ€κ° μ’ λ£ν λ(μ μμ μ’ λ£ λ° μλͺ»λ νλμΌλ‘ μΈν κ°μ μ’ λ£) μ¬μ©νλ λ©λͺ¨λ¦¬λ₯Ό νμνμ¬ λ€λ₯Έ νλ‘μΈμ€λ μ΄μ체μ κ° μ¬μ©ν μ μκ² ν΄μΌ νλ€.
- μ΄μ체μ λ λ¬Έλ§₯ κ΅νμ΄ μΌμ΄λ λ, λ² μ΄μ€μ λ°μ΄λ μμ μ μ₯νκ³ λ³΅μν΄μΌ νλ€. -> PCBμ μμ
- μμΈκ° λ°μν λ νΈμΆλ ν¨μλ₯Ό μ 곡ν΄μΌ νλ€. -> λΆν ν λ μ€μΉ

