π 곡λΆν λ΄μ©
νμ΄μ§ ν μ΄λΈ
- κ°μ λ©λͺ¨λ¦¬μμ μ¬μ©λλ μ€μν λ°μ΄ν°κ΅¬μ‘°
- μ΄μ 체μ λ κ°μ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νμ¬ λ¬Όλ¦¬μ μΈ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬νκ³ , νλ‘μΈμ€ μκ² κ°μ μ£Όμ 곡κ°μ μ 곡νλ€
- νμ΄μ§ ν μ΄λΈμ κ°μ μ£Όμ 곡κ°κ³Ό 물리μ μΈ λ©λͺ¨λ¦¬ μ£Όμκ³΅κ° κ°μ 맀νμ κ΄λ¦¬νλλ° μ¬μ©λλ€.
νμ΄μ§
64λΉνΈ κ°μμ£Όμμ λ§μ§λ§ 12λΉνΈλ νμ΄μ§ μ€νμ μ΄κ³ , μμ λΉνΈλ€μ νμ΄μ§ ν μ΄λΈμ μΈλ±μ€λ₯Ό νμνλ€.
νλ μ
물리 λ©λͺ¨λ¦¬μμ μ°μμ μΈ μμ. νμ΄μ§μ λμΌνκ², νλ μμ νμ΄μ§μ¬μ΄μ¦μ¬μΌ νκ³ νμ΄μ§ ν¬κΈ°μ μ λ ¬λμ΄ μμ΄μΌ ν©λλ€. 64λΉνΈ 물리주μλ νλ μ λλ² μ νλ μ μ€νμ μΌλ‘ λλμ΄μ§ μ μμ΅λλ€.
ꡬνν΄μΌ ν κ²
- 보쑰 νμ΄μ§ ν μ΄λΈ
- ν΅μ¬ μ μ → νμ΄μ§ ν΄νΈ νΈλ€λ¬, νλ‘μ νΈ2μμ νμ΄μ§ ν΄νΈλ νμ 컀λ, μ μ νλ‘κ·Έλ¨μ λ²κ·Έλ₯Ό μλ―Ένλ€. νλ‘μ νΈ3μμ νμ΄μ§ ν΄νΈλ νμΌ λλ μ€μ μ¬λ‘―μμ νμ΄μ§λ₯Ό κ°μ ΈμμΌ νλ€λ μ¬μ€μ μλ―Ένλ€.
νλ μ ν μ΄λΈ
μ€μ ν μ΄λΈ
ꡬν → λ°°μ΄, 리μ€νΈ, λΉνΈλ§΅, ν΄μ ν μ΄λΈ - ν΄μ ν μ΄λΈ μ μΌ λμλ―
νμ΄μ§ ν΄νΈ νΈλ€λ¬
νμ΄μ§ ν΄νΈ νΈλ€λ¬κ° ν΄μΌνλ μΌ
- 보쑰 νμ΄μ§ ν μ΄λΈμμ ν΄νΈκ° λ°μν νμ΄μ§λ₯Ό μ°Ύλλ€.
- νμ΄μ§λ₯Ό μ μ₯νκΈ° μν΄ νλ μμ νλν©λλ€.
- λ°μ΄ν°λ₯Ό νμΌ μμ€ν μ΄λ μ€μμμ μ½μ΄μ€κ±°λ, 0μΌλ‘ μ΄κΈ°ν
- ν΄νΈκ° λ°μν κ°μμ£Όμμ λν νμ΄μ§ ν μ΄λΈ μνΈλ¦¬κ° 물리 νμ΄μ§λ₯Ό κ°λ¦¬ν€λλ‘ μ§μ ν©λλ€. mmu.cμ ν¨μλ₯Ό μ¬μ©
Memory management
ꡬνν΄μΌ ν μ½λ
void supplemental_page_table_init (struct supplemental_page_table *spt);
→ 보쑰 νμ΄μ§ ν μ΄λΈμ μ΄κΈ°ννν¨. μ¬κΈ°μ 보쑰 νμ΄μ§ ν μ΄λΈμ μ΄λ€ μλ£ κ΅¬μ‘°λ‘ ν μ§ μ ν΄μΌ νλ€. (λ°°μ΄, 리μ€νΈ, ν΄μ ν μ΄λΈ)
struct page *spt_find_page (struct supplemental_page_table *spt, void *va);
→ μΈμλ‘ λκ²¨μ§ λ³΄μ‘° νμ΄μ§ ν μ΄λΈμμλ‘λΆν° κ°μ μ£Όμμ λμλλ νμ΄μ§ ꡬ쑰체λ₯Ό μ°Ύμμ λ°νν©λλ€. μ€ν¨ νμ κ²½μ° NULL
bool spt_insert_page (struct supplemental_page_table *spt, struct page *page);
→ μΈμλ‘ μ£Όμ΄μ§ 보쑰 νμ΄μ§ ν μ΄λΈμ νμ΄μ§ ꡬ쑰체λ₯Ό μ½μ ν©λλ€.
Frame Management
static struct frame *vm_get_frame (void);
→ μμ ν¨μλ palloc_get_page ν¨μλ₯Ό νΈμΆν¨μΌλ‘μ¨ λΉμ μ λ©λͺ¨λ¦¬ νμμ μλ‘μ΄ λ¬Όλ¦¬λ©λͺ¨λ¦¬ νμ΄μ§λ₯Ό κ°μ Έμ΅λλ€. μ μ λ©λͺ¨λ¦¬ νμμ νμ΄μ§λ₯Ό μ±κ³΅μ μΌλ‘ κ°μ Έμ€λ©΄, νλ μμ ν λΉνκ³ νλ μ ꡬ쑰체μ λ©€λ²λ€μ μ΄κΈ°νν ν ν΄λΉ νλ μμ λ°νν©λλ€. λΉμ μ΄ frame *vm_get_frame ν¨μλ₯Ό ꡬνν νμλ λͺ¨λ μ μ κ³΅κ° νμ΄μ§λ€μ μ΄ ν¨μλ₯Ό ν΅ν΄ ν λΉν΄μΌ ν©λλ€.
bool vm_do_claim_page (struct page *page);
→ μ ν¨μλ μΈμλ‘ μ£Όμ΄μ§ pageμ 물리 λ©λͺ¨λ¦¬ νλ μμ ν λΉν©λλ€. λΉμ μ λ¨Όμ vm_get_frame ν¨μλ₯Ό νΈμΆν¨μΌλ‘μ¨ νλ μ νλλ₯Ό μ»μ΅λλ€(μ΄ λΆλΆμ μ€μΌλ ν€ μ½λμ ꡬνλμ΄ μμ΅λλ€). κ·Έ μ΄ν λΉμ μ MMUλ₯Ό μΈν ν΄μΌ νλλ°, μ΄λ κ°μ μ£Όμμ 물리 μ£Όμλ₯Ό 맀νν μ 보λ₯Ό νμ΄μ§ ν μ΄λΈμ μΆκ°ν΄μΌ νλ€λ κ²μ μλ―Έν©λλ€. μμ ν¨μλ μμμ λ§ν μ°μ°μ΄ μ±κ³΅μ μΌλ‘ μνλμμ κ²½μ°μ trueλ₯Ό λ°ννκ³ κ·Έλ μ§ μμ κ²½μ°μ falseλ₯Ό λ°νν©λλ€.
bool vm_claim_page (void *va);
→ μ ν¨μλ μΈμλ‘ μ£Όμ΄μ§ vaμ νμ΄μ§λ₯Ό ν λΉνκ³ , ν΄λΉ νμ΄μ§μ νλ μμ ν λΉν©λλ€. λΉμ μ μ°μ ν νμ΄μ§λ₯Ό μ»μ΄μΌ νκ³ κ·Έ μ΄νμ ν΄λΉ νμ΄μ§λ₯Ό μΈμλ‘ κ°λ vm_do_claim_pageλΌλ ν¨μλ₯Ό νΈμΆν΄μΌ ν©λλ€.
π λλ μ & λ°°μ΄ μ
ν κ² μ°λλ―Έλ€.. λ°μλ€ λ°λΉ νλμ¬ν
π₯ λ΄μΌ 곡λΆν λ΄μ©
- swap table
ποΈ ν¬μ€ν
https://spongecake.tistory.com/122
[OS] - Virtual Memory - (ing)
νμ΄μ§ ν μ΄λΈ κ°μ λ©λͺ¨λ¦¬μμ μ¬μ©λλ μ€μν λ°μ΄ν°κ΅¬μ‘° μ΄μ 체μ λ κ°μ λ©λͺ¨λ¦¬λ₯Ό μ¬μ©νμ¬ λ¬Όλ¦¬μ μΈ λ©λͺ¨λ¦¬λ₯Ό κ΄λ¦¬νκ³ , νλ‘μΈμ€ μκ² κ°μ μ£Όμ 곡κ°μ μ 곡νλ€ νμ΄μ§ ν μ΄λΈμ κ°
spongecake.tistory.com
γ λͺ¨λ κ²μ΄ μ°λ¦¬μ νλ¨μ λ¬λ Έλ€. κ·Έλ¦¬κ³ νλ¨ν μ μλ λ₯λ ₯μ μ°λ¦¬μκ² μλ€. μ±κΈν νλ¨μ νμ§ μλλ€λ©΄, μ°λ¦¬λ μμ΄λ₯Ό λμμ λ¨Ό λ°λ€λ‘ λμκ°λ λ°°μ²λΌ μμν λ¬Όκ²°κ³Ό μ’μ λ μ¨, κ·Έλ¦¬κ³ μμ ν νꡬλ₯Ό μ°Ύμ μ μλ€. γ
-λ§λ₯΄μΏ μ€ μμ°λ 리μ°μ€, λͺ μλ‘, 12.22
λμ΄ μλ μ¬λμ μ΄λ κ² νλ¨νλ€. "μ¬κ³ λ μΌμ΄λ μ μμΌλ©° κ·Έκ° μλͺ»μ λͺ¨λ₯Όμλ μλ€. λ§μ½ μκ³ μλ€λ©΄ λ€μ μΌμ΄λμ§ μμ κ²μ΄λ€." μ μμ μΈ μΆμΈ‘κ³Ό μ±κΈν νλ¨μ μΈλ΄μ κ΄μ©μ λ°ννκΈ° μ΄λ ΅κ² νλ€. μ μ€ν΄μΌ ν λ μ°λ¦¬λ μμ°λ 리μ°μ€κ° λ§ν μμ ν νμ¨μ λ°κ²¬ν μ μλ€.
γ μ² νμμ μ무λ μΈκ°μ μμ§μ μΌμ΄λλ μ¬κ±΄μ΄ μ‘°νλ₯Ό μ΄λ£¨λλ‘ μ νμν€λ κ²μ΄λ€. κ·Έλ κ² ν¨μΌλ‘μ¨ μ°λ¦¬ μμ§μ λ°νμ¬ μΌμ΄λλ κ²μ΄ μκ²λκ³ , ν¬λ§νμ§ μλ κ² λν μΌμ΄λμ§ μκ² λλ λ²μ΄μ§. γ
-μν½ν ν μ€, λνλ‘, 2.14.7
μΈκ°μ νμ‘΄μ μΈμ λ λΆμμ νλ€. λ»λλ‘ λμ§ μλλ€κ³ ν΄μ λΆλ Έμ μ¬λ‘μ‘νλ κ²λ§νΌ μ΄λ¦¬μμ μΌμ μλ€. μΈμμ μμ§λ₯Ό κ΄μ² μν€λ λ°©λ²μ μΈμκ³Ό λ§μλ κ²μ΄ μλλΌ μΈμμ νλ¦μ νλ κ²μ΄λ€. κ·Έκ²λ λκΈνκ².