7 min read

OSTEP 18 Introduction to Paging

Table of Contents

μš΄μ˜μ²΄μ œλŠ” 거의 λͺ¨λ“  곡간 관리 문제λ₯Ό ν•΄κ²°ν•  λ•Œ 두 κ°€μ§€ 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•œλ‹€. 첫 λ²ˆμ§ΈλŠ” 가상 λ©”λͺ¨λ¦¬μ˜ μ„Έκ·Έλ©˜ν…Œμ΄μ…˜ 처럼 κ°€λ³€ 크기의 μ‘°κ°λ“€λ‘œ λΆ„ν• ν•˜λŠ” 것이닀. 이 해결책은 νƒœμƒμ  문제인 λ‹¨νŽΈν™”λ₯Ό κ°€μ§€κ³  μžˆλ‹€. 두 번째 방법은 곡간을 동일 크기의 μ‘°κ°λ“€μœΌλ‘œ λΆ„ν• ν•˜λŠ” 것이닀. 가상 λ©”λͺ¨λ¦¬μ—μ„œ 이λ₯Ό νŽ˜μ΄μ§•(paging) 이라고 λΆ€λ₯Έλ‹€.

ν”„λ‘œμ„ΈμŠ€μ˜ μ£Όμ†Œ 곡간을 λͺ‡ 개의 κ°€λ³€ 크기 논리 μ„Έκ·Έλ¨ΌνŠΈ (μ½”λ“œ, νž™, μŠ€νƒ) 으둜 λ‚˜λˆ„λŠ” 것이 μ•„λ‹ˆλΌ κ³ μ • 크기의 λ‹¨μœ„λ‘œ λ‚˜λˆˆλ‹€. 이 κ³ μ • 크기 λ‹¨μœ„λ₯Ό νŽ˜μ΄μ§€(page) 라고 λΆ€λ₯Έλ‹€. 이에 μƒμ‘ν•˜μ—¬ 물리 λ©”λͺ¨λ¦¬λ„ νŽ˜μ΄μ§€ ν”„λ ˆμž„(page frame) 이라고 λΆˆλ¦¬λŠ” κ³ μ • 크기 슬둯 배열이라고 μƒκ°ν•œλ‹€. 이 ν”„λ ˆμž„ 각각은 ν•˜λ‚˜μ˜ 가상 λ©”λͺ¨λ¦¬ νŽ˜μ΄μ§€λ₯Ό μ €μž₯ν•  수 μžˆλ‹€.

νŽ˜μ΄μ§€λ₯Ό μ‚¬μš©ν•˜μ—¬ μ–΄λ–»κ²Œ λ©”λͺ¨λ¦¬λ₯Ό 가상화할 수 μžˆμ„κΉŒ? μ„Έκ·Έλ©˜ν…Œμ΄μ…˜μ˜ λ¬Έμ œμ μ„ ν•΄κ²°ν•˜λ©΄μ„œ 곡간과 μ‹œκ°„ μ˜€λ²„ν—€λ“œλ₯Ό μ΅œμ†Œλ‘œ ν•΄λ³΄μž.

1. κ°„λ‹¨ν•œ 예제 및 κ°œμš”

총 크기가 64λ°”μ΄νŠΈμ΄κ³ , 4개의 16λ°”μ΄νŠΈ νŽ˜μ΄μ§€λ‘œ κ΅¬μ„±λœ μž‘μ€ μ£Όμ†Œ 곡간을 μƒμƒν•΄λ³΄μž.

OSTEP 18 Introduction to Paging-1690876518081.jpeg

물리 λ©”λͺ¨λ¦¬λŠ” 8개의 νŽ˜μ΄μ§€ ν”„λ ˆμž„μ„ κ°€μ§€κ³  μžˆλŠ” 128 λ°”μ΄νŠΈλΌκ³  κ°€μ •ν•΄λ³΄μž.

OSTEP 18 Introduction to Paging-1690876562630.jpeg

μ΄λ ‡κ²Œ 가상 μ£Όμ†Œ κ³΅κ°„μ˜ νŽ˜μ΄μ§€λ“€μ€ 물리 λ©”λͺ¨λ¦¬ 전체에 λΆ„μ‚° λ°°μΉ˜λ˜μ–΄ μžˆλ‹€. 또, μš΄μ˜μ²΄μ œκ°€ μžμ‹ μ„ μœ„ν•΄ 물리 λ©”λͺ¨λ¦¬μ˜ νŽ˜μ΄μ§€ ν”„λ ˆμž„μ„ μ‚¬μš©ν•  수 μžˆλ‹€.

νŽ˜μ΄μ§•μ€ 이전 방식에 λΉ„ν•΄ λ§Žμ€ μž₯점을 κ°€μ§€κ³  μžˆλ‹€. ν”„λ‘œμ„ΈμŠ€μ˜ μ£Όμ†Œ 곡간 μ‚¬μš© λ°©μ‹κ³ΌλŠ” 상관 없이 μœ μ—°ν•˜κ³  효율적으둜 μ£Όμ†Œ 곡간 κ°œλ…μ„ 지원할 수 μž‡λ‹€. νž™κ³Ό μŠ€νƒμ΄ μ–΄λ””λ‘œ μ»€μ§€λŠ”μ§€, μ–΄λ–»κ²Œ μ‚¬μš©λ˜λŠ”μ§€ μ•Œ ν•„μš”κ°€ μ—†λ‹€.

또 λ‹€λ₯Έ μž₯점은 빈 곡간 κ΄€λ¦¬μ˜ λ‹¨μˆœν•¨μ΄λ‹€. 예λ₯Ό λ“€μ–΄ 64λ°”μ΄νŠΈ μ£Όμ†Œ 곡간을 8νŽ˜μ΄μ§€ 물리 λ©”λͺ¨λ¦¬μ— λ°°μΉ˜ν•˜κΈ°λ₯Ό μ›ν•œλ‹€λ©΄, λΉ„μ–΄ μžˆλŠ” 4개의 νŽ˜μ΄μ§€λ§Œ 찾으면 λœλ‹€. μ•„λ§ˆ μš΄μ˜μ²΄μ œλŠ” 이λ₯Ό μœ„ν•΄ λͺ¨λ“  λΉ„μ–΄ μžˆλŠ” νŽ˜μ΄μ§€μ˜ 빈 곡간 리슀트λ₯Ό μœ μ§€ν•˜κ³  리슀트의 첫 λ„€ 개 νŽ˜μ΄μ§€λ₯Ό 선택할 것이닀.

μ£Όμ†Œ κ³΅κ°„μ˜ 각 가상 νŽ˜μ΄μ§€μ— λŒ€ν•œ 물리 λ©”λͺ¨λ¦¬ μœ„μΉ˜ 기둝을 μœ„ν•΄, μš΄μ˜μ²΄μ œλŠ” ν”„λ‘œμ„ΈμŠ€λ§ˆλ‹€ νŽ˜μ΄μ§€ ν…Œμ΄λΈ” μ΄λΌλŠ” 자료 ꡬ쑰λ₯Ό μœ μ§€ν•œλ‹€. νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ˜ μ£Όμš” 역할은 μ£Όμ†Œ κ³΅κ°„μ˜ 가상 νŽ˜μ΄μ§€ μ£Όμ†Œ λ³€ν™˜ 정보λ₯Ό μ €μž₯ν•˜λŠ” 것이닀.

64λ°”μ΄νŠΈ μ£Όμ†Œ 곡간을 κ°€μ§„ ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€μŒ λ©”λͺ¨λ¦¬ 접근을 μˆ˜ν–‰ν•œλ‹€κ³  κ°€μ •ν•˜μž

movl <virtual address>, %eax

μ£Όμ†Œ <virtual address>의 데이터λ₯Ό eax λ ˆμ§€μŠ€ν„°μ— νƒ‘μž¬ν•˜λŠ” 데 μ§‘μ€‘ν•˜μž. ν”„λ‘œμ„ΈμŠ€κ°€ μƒμ„±ν•œ 가상 μ£Όμ†Œμ˜ λ³€ν™˜μ„ μœ„ν•΄ λ¨Όμ € 가상 μ£Όμ†Œλ₯Ό 가상 νŽ˜μ΄μ§€ 번호(virtual page number, VPN) 와 νŽ˜μ΄μ§€ λ‚΄μ˜ μ˜€ν”„μ…‹ 두 개의 ꡬ성 μš”μ†Œλ‘œ λΆ„ν• ν•œλ‹€.

이 μ˜ˆμ‹œμ—μ„œλŠ” 가상 μ£Όμ†Œ κ³΅κ°„μ˜ 크기가 64λ°”μ΄νŠΈμ΄κΈ° λ•Œλ¬Έμ— 가상 μ£Όμ†ŒλŠ” 6개의 λΉ„νŠΈκ°€ ν•„μš”ν•˜λ‹€. 26=642^6 = 64

OSTEP 18 Introduction to Paging-1690878110052.jpeg

Va5λŠ” 가상 μ£Όμ†Œμ˜ μ΅œμƒμœ„ λΉ„νŠΈμ΄λ©°, Va0은 가상 μ£Όμ†Œμ˜ μ΅œν•˜μœ„ λΉ„νŠΈμ΄λ‹€. νŽ˜μ΄μ§€ 크기가 16λ°”μ΄νŠΈ 이기 λ•Œλ¬Έμ—, λ‹€μŒκ³Ό 같이 λ‚˜λˆŒ 수 μžˆλ‹€. 64λ°”μ΄νŠΈ μ£Όμ†Œ κ³΅κ°„μ—μ„œ 16λ°”μ΄νŠΈ νŽ˜μ΄μ§€ 4개 쀑 1개λ₯Ό 선택해야 ν•˜κΈ° λ•Œλ¬Έμ— μš°λ¦¬λŠ” 2λΉ„νŠΈ 가상 νŽ˜μ΄μ§€ 번호 (VPN) 이 ν•„μš”ν•˜λ‹€. λ‚˜λ¨Έμ§€ λΉ„νŠΈλŠ” νŽ˜μ΄μ§€ λ‚΄μ—μ„œ μš°λ¦¬κ°€ μ›ν•˜λŠ” λ°”μ΄νŠΈμ˜ μœ„μΉ˜λ₯Ό λ‚˜νƒ€λ‚Έλ‹€. 이것을 μ˜€ν”„μ…‹μ΄λΌκ³  λΆ€λ₯Έλ‹€.

movl 21, %eax

가상 μ£Όμ†Œ 21을 이진 ν˜•μ‹μœΌλ‘œ λ³€ν™˜ν•˜λ©΄ 010101이고, 이λ₯Ό 가상 νŽ˜μ΄μ§€ λ²ˆν˜Έμ™€ μ˜€ν”„μ…‹μœΌλ‘œ λ‚˜λˆˆλ‹€.

OSTEP 18 Introduction to Paging-1690878278570.jpeg

가상 μ£Όμ†Œ 21은 가상 νŽ˜μ΄μ§€ 01번의 0101번째 λ°”μ΄νŠΈκ°€ λœλ‹€.

이 가상 νŽ˜μ΄μ§€ 번호λ₯Ό κ°€μ§€κ³  μ‹€μ œ 물리 ν”„λ ˆμž„ 어디에 μ €μž₯λ˜μ–΄ μžˆλŠ”μ§€ 찾을 수 μžˆλ‹€.

OSTEP 18 Introduction to Paging-1691519804168.jpeg

μ˜€ν”„μ…‹μ€ λ™μΌν•˜κ³ , 가상 μ£Όμ†Œ 01을 물리 μ£Όμ†Œ 111둜 λ³€ν™˜ν–ˆλ‹€.

물리 ν”„λ ˆμž„ 번호: (physical frame number, PFN) 물리 νŽ˜μ΄μ§€ 번호: (physical page number, PPN)

2. νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ€ 어디에 μ €μž₯λ˜λŠ”κ°€

νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ€ 맀우 컀질 수 μžˆλ‹€. 4KB 크기의 νŽ˜μ΄μ§€λ₯Ό κ°€μ§€λŠ” μ „ν˜•μ μΈ 32λΉ„νŠΈ μ£Όμ†Œ 곡간을 생각해 보자. 이 가상 μ£Όμ†ŒλŠ” 20λΉ„νŠΈμ˜ VPNκ³Ό 12λΉ„νŠΈμ˜ μ˜€ν”„μ…‹μœΌλ‘œ κ΅¬μ„±λœλ‹€. 212=40962^{12}=4096

20λΉ„νŠΈ VPN은 μš΄μ˜μ²΄μ œκ°€ 각 ν”„λ‘œμ„ΈμŠ€λ₯Ό μœ„ν•΄ 관리해야 ν•˜λŠ” λ³€ν™˜μ˜ κ°œμˆ˜κ°€ 2202^{20}개 λΌλŠ” 것을 μ˜λ―Έν•œλ‹€. 물리 μ£Όμ†Œλ‘œμ˜ λ³€ν™˜ 정보와 λ‹€λ₯Έ ν•„μš”ν•œ 정보λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•˜μ—¬ νŽ˜μ΄μ§€ ν…Œμ΄λΈ” ν•­λͺ©(page table entry, PTE)λ§ˆλ‹€ 4λ°”μ΄νŠΈκ°€ ν•„μš”ν•˜λ‹€κ³  κ°€μ •ν•˜λ©΄, 각 νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ„ μ €μž₯ν•˜κΈ° μœ„ν•΄ ν”„λ‘œμ„ΈμŠ€λ§ˆλ‹€ 4MB의 λ©”λͺ¨λ¦¬κ°€ ν•„μš”ν•˜κ²Œ λœλ‹€. ν”„λ‘œμ„ΈμŠ€ 100κ°œκ°€ 싀행쀑이라면 400MB의 λ©”λͺ¨λ¦¬κ°€ ν•„μš”ν•  것이닀.

νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ΄ 맀우 크기 λ•Œλ¬Έμ— ν˜„μž¬ μ‹€ν–‰ 쀑인 ν”„λ‘œμ„ΈμŠ€μ˜ νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ„ MMUκ°€ μ•„λ‹Œ λ©”λͺ¨λ¦¬μ— μ €μž₯ν•  것이닀. λ‹ΉλΆ„κ°„ μš΄μ˜μ²΄μ œκ°€ κ΄€λ¦¬ν•˜λŠ” 물리 λ©”λͺ¨λ¦¬μ— νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ΄ μƒμ£Όν•œλ‹€κ³  κ°€μ •ν•˜μž. νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ€ 가상 λ©”λͺ¨λ¦¬μ— μ €μž₯될 수 있고 λ””μŠ€ν¬μ— μŠ€μ™‘λ  μˆ˜λ„ μžˆμ§€λ§Œ λ³΅μž‘ν•˜λ‹ˆκΉŒ 일단 λ¬΄μ‹œν•˜μž. 운영체제 λ©”λͺ¨λ¦¬ μ˜μ—­ (PFN 0)에 νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ΄ μ‘΄μž¬ν•œλ‹€κ³  ν•˜μž.

OSTEP 18 Introduction to Paging-1690879405984.jpeg

3. νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ—λŠ” μ‹€μ œλ‘œ 무엇이 μžˆλŠ”κ°€

νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ€ 가상 μ£Όμ†Œλ₯Ό 물리 μ£Όμ†Œλ‘œ λ§€ν•‘ν•˜λŠ”λ° μ‚¬μš©λ˜λŠ” 자료 ꡬ쑰이닀. κ°€μž₯ κ°„λ‹¨ν•œ ν˜•νƒœλŠ” μ„ ν˜• νŽ˜μ΄μ§€ ν…Œμ΄λΈ”(linear page table)이닀. λ‹¨μˆœν•œ 배열이닀. μš΄μ˜μ²΄μ œλŠ” μ›ν•˜λŠ” 물리 ν”„λ ˆμž„ 번호(PFN)λ₯Ό μ°ΎκΈ° μœ„ν•˜μ—¬ 가상 νŽ˜μ΄μ§€ 번호(VPN)둜 λ°°μ—΄μ˜ ν•­λͺ©μ— μ ‘κ·Όν•˜κ³ , κ·Έ ν•­λͺ©μ˜ νŽ˜μ΄μ§€ ν…Œμ΄λΈ” ν•­λͺ©(PTE)을 κ²€μƒ‰ν•œλ‹€.

각 PTEμ—λŠ” μ—¬λŸ¬ λΉ„νŠΈκ°€ μ‘΄μž¬ν•œλ‹€.

OSTEP 18 Introduction to Paging-1690879517425.jpeg

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. νŽ˜μ΄μ§•: λ„ˆλ¬΄ 느림

νŽ˜μ΄μ§•μ€ λŠλ¦¬λ‹€. 가상 μ£Όμ†Œλ₯Ό 물리 μ£Όμ†Œλ‘œ λ³€ν™˜ν•˜λŠ”λ° 였래 κ±Έλ¦°λ‹€.

  1. ν”„λ‘œμ„ΈμŠ€μ˜ νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ„ μ‚΄νŽ΄ λ³Έλ‹€
  2. νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ˜ 정보λ₯Ό 톡해 μ£Όμ†Œλ₯Ό λ³€ν™˜ν•œλ‹€
  3. μ‹€μ œ λ©”λͺ¨λ¦¬μ—μ„œ 데이터λ₯Ό κ°€μ Έμ˜¨λ‹€

ν•˜λ“œμ›¨μ–΄λŠ” ν˜„μž¬ 싀행쀑인 ν”„λ‘œμ„ΈμŠ€μ— λŒ€ν•œ 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λ°° 이상 λŠλ €μ§€κ²Œ ν•œλ‹€.

OSTEP 18 Introduction to Paging-1690880418810.jpeg

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
  1. 0x1024 movl $0x0, (%edi,%eax,4): 이 λͺ…령은 0x0 (즉, 0)을 λ©”λͺ¨λ¦¬ μœ„μΉ˜ (%edi,%eax,4)둜 μ΄λ™μ‹œν‚€λΌλŠ” λͺ…λ Ήμž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ (%edi,%eax,4)λŠ” μ£Όμ†Œ 계산 방식을 λ‚˜νƒ€λ‚΄λŠ”λ°, μ΄λŠ” edi λ ˆμ§€μŠ€ν„°μ˜ κ°’κ³Ό eax λ ˆμ§€μŠ€ν„°μ˜ 값에 4λ₯Ό κ³±ν•œ 것을 λ”ν•œ μœ„μΉ˜λ₯Ό κ°€λ¦¬ν‚΅λ‹ˆλ‹€. 이 경우, 이것은 λ°°μ—΄μ˜ i번째 μœ„μΉ˜λ₯Ό κ°€λ¦¬ν‚€λŠ” 포인터라고 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

  2. 0x1028 incl %eax: 이 λͺ…령은 eax λ ˆμ§€μŠ€ν„°μ˜ 값을 1 μ¦κ°€μ‹œν‚€λŠ” λͺ…λ Ήμž…λ‹ˆλ‹€. 이 λͺ…령은 for λ£¨ν”„μ—μ„œ iλ₯Ό μ¦κ°€μ‹œν‚€λŠ” 것과 같은 역할을 ν•©λ‹ˆλ‹€.

  3. 0x102c cmpl $0x03e8,%eax: 이 λͺ…령은 eax λ ˆμ§€μŠ€ν„°μ˜ κ°’κ³Ό 0x03e8 (즉, 1000)을 λΉ„κ΅ν•˜λŠ” λͺ…λ Ήμž…λ‹ˆλ‹€. 이 λͺ…령은 for λ£¨ν”„μ˜ μ’…λ£Œ 쑰건 (즉, i < 1000)κ³Ό λ™μΌν•©λ‹ˆλ‹€.

  4. 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이닀.

OSTEP 18 Introduction to Paging-1691519842728.jpeg

μ½”λ“œκ°€ 싀행될 λ•Œ λͺ…λ Ήμ–΄ fetchλŠ” 두 개의 λ©”λͺ¨λ¦¬ μ°Έμ‘°λ₯Ό μƒμ„±ν•œλ‹€.

  1. page table에 λŒ€ν•œ λ©”λͺ¨λ¦¬ μ°Έμ‘°
  2. λͺ…령어에 λŒ€ν•œ μ°Έμ‘°

5번의 반볡 λ©”λͺ¨λ¦¬ 접근을 λ‚˜νƒ€λ‚Έ 그림이닀. ν•œ 번의 λ°˜λ³΅μ„ μœ„ν•΄ 10번의 λ©”λͺ¨λ¦¬ 접근이 λ°œμƒν•˜λŠ” 것이닀. 이λ₯Ό μ΅œμ ν™”ν•˜λŠ” 방법은 μ—†μ„κΉŒ?