4 min read

OSTEP 15 Address Translation

Table of Contents

CPU 가상화 λΆ€λΆ„μ—μ„œ μ œν•œμ  직접 μ‹€ν–‰ (LDE) 기법에 λŒ€ν•΄ λ°°μ› λ‹€. OSTEP 06 Direct Execution λ©”λͺ¨λ¦¬ κ°€μƒν™”μ—μ„œλ„ λΉ„μŠ·ν•œ μ „λž΅μ„ μΆ”κ΅¬ν•œλ‹€. 가상화λ₯Ό μ œκ³΅ν•˜λŠ” λ™μ‹œμ— νš¨μœ¨μ„±κ³Ό μ œμ–΄ λͺ¨λ‘λ₯Ό μΆ”κ΅¬ν•œλ‹€.

νš¨μœ¨μ„±μ„ 높이기 μœ„ν•΄ ν•˜λ“œμ›¨μ–΄ μžμ›μ„ ν™œμš©ν•œλ‹€. λͺ‡ 개의 λ ˆμ§€μŠ€ν„° ν™œμš©λΆ€ν„° TLB, νŽ˜μ΄μ§€ ν…Œμ΄λΈ” λ“± 점점 λ³΅μž‘ν•œ ν•˜λ“œμ›¨μ–΄λ₯Ό μ‚¬μš©ν•œλ‹€. μ œμ–΄λŠ” ν”„λ‘œκ·Έλž¨μ΄ 자기 μžμ‹ μ˜ λ©”λͺ¨λ¦¬ μ΄μ™Έμ—λŠ” μ ‘κ·Όν•˜μ§€ λͺ»ν•˜λ„둝 μš΄μ˜μ²΄μ œκ°€ 보μž₯ν•œλ‹€λŠ” 것. μœ μ—°μ„± μΈ‘λ©΄μ—μ„œ, ν”„λ‘œκ·Έλž˜λ¨Έκ°€ μ›ν•˜λŠ” λŒ€λ‘œ μ£Όμ†Œ 곡간을 μ‚¬μš©ν•˜κ³ , ν”„λ‘œκ·Έλž˜λ°ν•˜κΈ° μ‰¬μš΄ μ‹œμŠ€ν…œμ„ λ§Œλ“€κΈ° μ›ν—Œλ‹€.

핡심 질문: μ–΄λ–»κ²Œ 효율적이고 μœ μ—°ν•˜κ²Œ λ©”λͺ¨λ¦¬λ₯Ό 가상화 ν•  수 μžˆμ„κΉŒ?

μš°λ¦¬κ°€ λ‹€λ£° 기법은 (ν•˜λ“œμ›¨μ–΄ 기반) μ£Όμ†Œ λ³€ν™˜μ΄λ‹€. 이 κΈ°μˆ μ€ μ œν•œμ  직접 μ‹€ν–‰ 방식에 λΆ€κ°€μ μœΌλ‘œ μ‚¬μš©λ˜λŠ” κΈ°λŠ₯이라고 생각할 수 μžˆλ‹€. μ£Όμ†Œ λ³€ν™˜μ„ 톡해 ν•˜λ“œμ›¨μ–΄λŠ” λͺ…λ Ήμ–΄ λ°˜μž…, νƒ‘μž¬, μ €μž₯ λ“±μ˜ 가상 μ£Όμ†Œλ₯Ό 정보가 μ‹€μ œ μ‘΄μž¬ν•˜λŠ” 물리 μ£Όμ†Œλ‘œ λ³€ν™˜ν•œλ‹€.

ν•˜λ“œμ›¨μ–΄κ°€ λ³€ν™˜μ„ κ°€μ†ν™”ν•˜λŠ”λ° 도움을 μ£Όμ§€λ§Œ κ·Έκ²ƒλ§ŒμœΌλ‘œλŠ” λͺ¨μžλΌλ‹€. μ •ν™•ν•œ λ³€ν™˜μ΄ 일어날 수 μžˆλ„λ‘ μš΄μ˜μ²΄μ œκ°€ κ΄€μ—¬ν•΄μ•Ό ν•œλ‹€.

μš΄μ˜μ²΄μ œλŠ” λ©”λͺ¨λ¦¬μ˜ 빈 곡간과 μ‚¬μš©μ€‘μΈ 곡간을 항상 μ•Œκ³  μžˆμ–΄μ•Ό ν•˜κ³ , λ©”λͺ¨λ¦¬ μ‚¬μš©μ„ μ œμ–΄ν•˜κ³  κ΄€λ¦¬ν•œλ‹€.

이 λͺ¨λ“  μž‘μ—…μ˜ λͺ©ν‘œλŠ” λ°”λ‘œ ν”„λ‘œκ·Έλž¨μ΄ μžμ‹ μ˜ μ „μš© λ©”λͺ¨λ¦¬λ₯Ό μ†Œμœ ν•˜κ³  있고, κ·Έ μ•ˆμ— μžμ‹ μ˜ μ½”λ“œμ™€ 데이터가 μžˆλ‹€λŠ” ν™˜μƒμ„ λ§Œλ“œλŠ” 것이닀.

1. κ°€μ •

  1. μ£Όμ†Œ 곡간은 물리 λ©”λͺ¨λ¦¬μ— μ—°μ†μ μœΌλ‘œ λ°°μΉ˜λ˜μ–΄μ•Ό ν•œλ‹€.
  2. μ£Όμ†Œ 곡간은 물리 λ©”λͺ¨λ¦¬ 크기보닀 μž‘λ‹€.
  3. 각 μ£Όμ†Œ κ³΅κ°„μ˜ ν¬κΈ°λŠ” κ°™λ‹€.

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에 μ €μž₯)

OSTEP 15 Address Translation-1689616534903.jpeg

μ΄λ ‡κ²Œ ν”„λ‘œμ„ΈμŠ€ κ΄€μ μ—μ„œ λ©”λͺ¨λ¦¬ μ£Όμ†Œκ°€ 0λΆ€ν„° μ‹œμž‘ν•˜λ„λ‘ 가상 ν™˜κ²½μ„ μ œκ³΅ν•΄μ•Ό ν•œλ‹€.

OSTEP 15 Address Translation-1689616860906.jpeg

μ‹€μ œλ‘œλŠ” 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λŠ” μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œν‚€κ³  ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œλœλ‹€. λ°”μš΄λ“œ λ ˆμ§€μŠ€ν„° κ΅¬ν˜„ 방법은 두 κ°€μ§€κ°€ μžˆλ‹€.

  1. μ£Όμ†Œ κ³΅κ°„μ˜ 크기 μ €μž₯
  2. μ£Όμ†Œ κ³΅κ°„μ˜ λ§ˆμ§€λ§‰ 물리 μ£Όμ†Œλ₯Ό μ €μž₯

μ΄λ ‡κ²Œ μ£Όμ†Œ λ³€ν™˜μ— 도움을 μ£ΌλŠ” ν”„λ‘œμ„Έμ„œμ˜ 일뢀λ₯Ό λ©”λͺ¨λ¦¬ 관리 μž₯치 (MMU) 라고 λΆ€λ₯Έλ‹€.

예제

μ£Όμ†Œ κ³΅κ°„μ˜ 크기가 4KB(4096)인 ν”„λ‘œμ„ΈμŠ€κ°€ 물리 μ£Όμ†Œ 16KB(16384)에 νƒ‘μž¬λ˜μ–΄ μžˆλ‹€κ³  κ°€μ •ν•˜μž.

OSTEP 15 Address Translation-1689617753303.jpeg

가상 μ£Όμ†Œκ°€ λ„ˆλ¬΄ 크면(λ°”μš΄λ“œλ₯Ό λ²—μ–΄λ‚˜λ©΄) 였λ₯˜κ°€ λ°œμƒν•œλ‹€.

4. ν•˜λ“œμ›¨μ–΄ 지원 μš”μ•½

OSTEP 15 Address Translation-1689673685369.jpeg

5. 운영체제 이슈

λ² μ΄μŠ€μ™€ λ°”μš΄λ“œ λ°©μ‹μ˜ 가상 λ©”λͺ¨λ¦¬ κ΅¬ν˜„μ„ μœ„ν•΄ μš΄μ˜μ²΄μ œκ°€ λ°˜λ“œμ‹œ κ°œμž…λ˜μ–΄μ•Ό ν•˜λŠ” μ‹œμ μ΄ 4개 μ‘΄μž¬ν•œλ‹€.

  1. ν”„λ‘œμ„ΈμŠ€κ°€ 생성될 λ•Œ μš΄μ˜μ²΄μ œλŠ” μ£Όμ†Œ 곡간이 μ €μž₯될 λ©”λͺ¨λ¦¬ 곡간을 μ°Ύμ•„ 쑰치λ₯Ό μ·¨ν•΄μ•Ό ν•œλ‹€.
  2. ν”„λ‘œμ„ΈμŠ€κ°€ μ’…λ£Œν•  λ•Œ(정상적 μ’…λ£Œ 및 잘λͺ»λœ ν–‰λ™μœΌλ‘œ μΈν•œ κ°•μ œ μ’…λ£Œ) μ‚¬μš©ν•˜λ˜ λ©”λͺ¨λ¦¬λ₯Ό νšŒμˆ˜ν•˜μ—¬ λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€λ‚˜ μš΄μ˜μ²΄μ œκ°€ μ‚¬μš©ν•  수 있게 ν•΄μ•Ό ν•œλ‹€.
  3. μš΄μ˜μ²΄μ œλŠ” λ¬Έλ§₯ κ΅ν™˜μ΄ 일어날 λ•Œ, λ² μ΄μŠ€μ™€ λ°”μš΄λ“œ μŒμ„ μ €μž₯ν•˜κ³  볡원해야 ν•œλ‹€. -> PCB에 있음
  4. μ˜ˆμ™Έκ°€ λ°œμƒν•  λ•Œ 호좜될 ν•¨μˆ˜λ₯Ό μ œκ³΅ν•΄μ•Ό ν•œλ‹€. -> λΆ€νŒ…ν•  λ•Œ μ„€μΉ˜

OSTEP 15 Address Translation-1689674031826.jpeg

OSTEP 15 Address Translation-1689674090849.jpeg