μ •κΈ€/TIL

[TIL] - 2023.06.14

Casteira 2023. 6. 14. 11:14

πŸ“Œ  κ³΅λΆ€ν•œ λ‚΄μš©

νŽ˜μ΄μ§€ ν…Œμ΄λΈ”

  • 가상 λ©”λͺ¨λ¦¬μ—μ„œ μ‚¬μš©λ˜λŠ” μ€‘μš”ν•œ 데이터ꡬ쑰
  • 운영 μ²΄μ œλŠ” 가상 λ©”λͺ¨λ¦¬λ₯Ό μ‚¬μš©ν•˜μ—¬ 물리적인 λ©”λͺ¨λ¦¬λ₯Ό κ΄€λ¦¬ν•˜κ³ , ν”„λ‘œμ„ΈμŠ€ μ—κ²Œ 가상 μ£Όμ†Œ 곡간을 μ œκ³΅ν•œλ‹€
  • νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ€ 가상 μ£Όμ†Œ 곡간과 물리적인 λ©”λͺ¨λ¦¬ μ£Όμ†Œκ³΅κ°„ κ°„μ˜ 맀핑을 κ΄€λ¦¬ν•˜λŠ”λ° μ‚¬μš©λœλ‹€.

νŽ˜μ΄μ§€

64λΉ„νŠΈ κ°€μƒμ£Όμ†Œμ˜ λ§ˆμ§€λ§‰ 12λΉ„νŠΈλŠ” νŽ˜μ΄μ§€ μ˜€ν”„μ…‹μ΄κ³ , μƒμœ„ λΉ„νŠΈλ“€μ€ νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ˜ 인덱슀λ₯Ό ν‘œμ‹œν•œλ‹€.

ν”„λ ˆμž„

물리 λ©”λͺ¨λ¦¬μƒμ˜ 연속적인 μ˜μ—­. νŽ˜μ΄μ§€μ™€ λ™μΌν•˜κ²Œ, ν”„λ ˆμž„μ€ νŽ˜μ΄μ§€μ‚¬μ΄μ¦ˆμ—¬μ•Ό ν•˜κ³  νŽ˜μ΄μ§€ 크기에 μ •λ ¬λ˜μ–΄ μžˆμ–΄μ•Ό ν•©λ‹ˆλ‹€. 64λΉ„νŠΈ λ¬Όλ¦¬μ£Όμ†ŒλŠ” ν”„λ ˆμž„ λ„˜λ²„ 와 ν”„λ ˆμž„ μ˜€ν”„μ…‹ 으둜 λ‚˜λˆ„μ–΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

κ΅¬ν˜„ν•΄μ•Ό ν•  것

  • 보쑰 νŽ˜μ΄μ§€ ν…Œμ΄λΈ”
  • 핡심 μœ μ € → νŽ˜μ΄μ§€ 폴트 ν•Έλ“€λŸ¬, ν”„λ‘œμ νŠΈ2μ—μ„œ νŽ˜μ΄μ§€ ν΄νŠΈλŠ” 항상 컀널, μœ μ €ν”„λ‘œκ·Έλž¨μ˜ 버그λ₯Ό μ˜λ―Έν–ˆλ‹€. ν”„λ‘œμ νŠΈ3μ—μ„œ νŽ˜μ΄μ§€ ν΄νŠΈλŠ” 파일 λ˜λŠ” μŠ€μ™‘ μŠ¬λ‘―μ—μ„œ νŽ˜μ΄μ§€λ₯Ό 가져와야 ν•œλ‹€λŠ” 사싀을 μ˜λ―Έν•œλ‹€.

ν”„λ ˆμž„ ν…Œμ΄λΈ”

μŠ€μ™‘ ν…Œμ΄λΈ”

κ΅¬ν˜„ → λ°°μ—΄, 리슀트, λΉ„νŠΈλ§΅, ν•΄μ‹œ ν…Œμ΄λΈ” - ν•΄μ‹œ ν…Œμ΄λΈ” 제일 λ‚˜μ„λ“―

νŽ˜μ΄μ§€ 폴트 ν•Έλ“€λŸ¬

νŽ˜μ΄μ§€ 폴트 ν•Έλ“€λŸ¬κ°€ ν•΄μ•Όν•˜λŠ” 일

  1. 보쑰 νŽ˜μ΄μ§€ ν…Œμ΄λΈ”μ—μ„œ ν΄νŠΈκ°€ λ°œμƒν•œ νŽ˜μ΄μ§€λ₯Ό μ°ΎλŠ”λ‹€.
  2. νŽ˜μ΄μ§€λ₯Ό μ €μž₯ν•˜κΈ° μœ„ν•΄ ν”„λ ˆμž„μ„ νšλ“ν•©λ‹ˆλ‹€.
  3. 데이터λ₯Ό 파일 μ‹œμŠ€ν…œμ΄λ‚˜ μŠ€μ™‘μ—μ„œ μ½μ–΄μ˜€κ±°λ‚˜, 0으둜 μ΄ˆκΈ°ν™”
  4. ν΄νŠΈκ°€ λ°œμƒν•œ κ°€μƒμ£Όμ†Œμ— λŒ€ν•œ νŽ˜μ΄μ§€ ν…Œμ΄λΈ” μ—”νŠΈλ¦¬κ°€ 물리 νŽ˜μ΄μ§€λ₯Ό 가리킀도둝 μ§€μ •ν•©λ‹ˆλ‹€. 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

 

μΈκ°„μ˜ ν˜„μ‘΄μ€ μ–Έμ œλ‚˜ λΆˆμ•ˆμ •ν•˜λ‹€. λœ»λŒ€λ‘œ λ˜μ§€ μ•ŠλŠ”λ‹€κ³  ν•΄μ„œ 뢄노에 μ‚¬λ‘œμž‘νžˆλŠ” κ²ƒλ§ŒνΌ 어리석은 일은 μ—†λ‹€. 세상에 μ˜μ§€λ₯Ό κ΄€μ² μ‹œν‚€λŠ” 방법은 세상과 λ§žμ„œλŠ” 것이 μ•„λ‹ˆλΌ μ„Έμƒμ˜ 흐름을 νƒ€λŠ” 것이닀. 그것도 λŠκΈ‹ν•˜κ²Œ.