์ง์ฌ ๋๋ฌด ํ๋ค์๋ค. ๊ทธ๋๋ ์ด๋ฐ์ ์ฌ๋ฐ์๋๋ฐ ๐
3์ฃผ๊ฐ์ ํํ ์ค์์ ๋ฌด์์ ๋๋ผ๊ณ ๋ฐฐ์ ๋์ง ๋จ๊ฒจ๋์ง ์์ผ๋ฉด ๋์ค์ '์.. ํํ ์ค ํ๊ธด ํ๋๋ฐ..'๊ฐ ๋์ง ์์๊น ์ถ์ด ์ ๋ฆฌํด๋๋ค.
'ํ๋ก์ธ์ค๋ ์ปดํจํฐ๋ฅผ ์ถ์ํํ๋ค' ๋ผ๋ ๊ด์ ์ ์ป์๋ค. ๊ทธ ์ ๊น์ง๋ ํ๋ก์ธ์ค, ๊ฐ์๋ฉ๋ชจ๋ฆฌ, ์์.. ๊ณผ ๊ฐ์ ์ฉ์ด๋ค์ด ๋ง์ฐํ๊ฒ๋ง ๋ค๊ฐ์๋๋ฐ, ํ๋์ ์ปดํจํฐ๋ฅผ ์ถ์ํํ ๊ฐ๋ ์ผ๋ก์ ํ๋ก์ธ์ค๋ฅผ ์ดํดํ๊ฒ ๋ ๊ฒ ๊ฐ๋ค. ์์ resource ์ ๊ณต์ ํ๊ณ , ํ๋ํ๊ณ , ๋ฐํํ๋ ๊ฒ์ ๊ตฌ์ฒด์ ์ธ ์์๋ฅผ ์ ํด๋ณผ ์ ์์๋ค. ์ถ์ํ์ด๋ฏ๋ก, ์ค์ ๋ฌผ๋ฆฌ์ ์์ (ex. CPU ์ ์ ) ์ ๊ณต์ ํ๋ฉด์๋ ๋ง์น ํผ์๋ง ์ฐ๋ ๊ฒ์ฒ๋ผ ์ ๊ณตํด์ผ ํ๋ค. ์ด๋ฐ ์ ์์ ๋๊ธฐํ์ ๊ด๋ จ๋ ๋ฌธ์ ๋ค์ด ์ค์ํด์ง๋ ๊ฒ ๊ฐ๋ค.
Policy์ Mechanism์ ๊ตฌ๋ถํด์ผ ํ๋ค. ์ด๋ฅผํ ๋ฉด, ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ณ ๊ฐ๋์์ ๋ ์๋ ํ๋ ์ ์ค์์ ํ๋๋ฅผ evictํ๋ค๋ ๊ฒ์ ๋ฉ์ปค๋์ฆ์ด๋ค. ์ด๋ค ํ๋ ์์ ๊ณ ๋ฅด๋๋๋ ์ ์ฑ ์ด๋ค. ๋ ๊ฐ์ง๋ฅผ ๋ถ๋ฆฌํด์ผ ํ๋๊ฐ ๋ณ๊ฒฝ๋์ด๋ ๋ค๋ฅธ ๊ฒ์ด ์ํฅ์ ๋ฐ์ง ์์ ์ ์๋ค. ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์๋ mechanism ๊ตฌํ ํจ์ ์์์ policy ํจ์๋ฅผ ์ฝ ํ ์ ์๋๋ก ๊ตฌํํ๋ ๊ฒ์ด ์ข๋ค.
vm_evict_frame
์์์vm_get_victim
์ ๋ถ๋ฅด๋ ๊ฒ์ด ๋ํ์ ์ด๋ค.๋ชจ๋ ๊ฒฝ์ฐ์ ์ด์์ ์ธ ๋จ ํ๋์ ๋ฐฉ๋ฒ์ ์๊ธฐ ํ๋ค๋ค. ์ด๋ฒ์ ํ์ด์ง ๊ต์ฒด ์ ์ฑ ์ ์คํํ๋ฉฐ ๋ง์ด ๋๊ผ๋ ๋ถ๋ถ์ด๋ค. ์ด์์ ์ด๋ผ๋ฉด LRU๊ฒ ์ง๋ง, ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํ ์ค๋ฒํค๋๊ฐ ์๋นํ๋ค. ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ด์ง์ ์ ๊ทผ ๋นํธ๋ฅผ ํ์ธํด timestamp๋ฅผ ๋จ๊ฒจ์ผ ํ๋ค. LRU๋ณด๋ค ํจ์ฌ ๋จ์ํ์ง๋ง ๊ตฌํ ๋ณต์ก๋๋ฅผ ์ค์ธ Clock ์๊ณ ๋ฆฌ์ฆ์ LRU์ ์ฑ๋ฅ์ ๊ทผ์ฌํ๋ค. ํ์ง๋ง Clock ์ญ์ ํน์ ์๋๋ฆฌ์ค์์๋ FIFO์ ๋นํด ์ค๋ฒํค๋๋ก ์์ฉํ ์๋ ์๋ค. ์ง๊ธ ์ด ์ผ์ด์ค์ ํ์ํ ๊ฒ์ด ๋ฌด์์ธ์ง, ๋ง์ฝ ๋ฉ๋ชจ๋ฆฌ์ ์๋๊ฐ trade-off ๊ด๊ณ๋ผ๋ฉด, ์ํฅ์ ๋ฐ๋ ๋์์ ์๊ฐ ์ด๋ ์ ๋์ scale์ธ์ง ์๊ฐํด ๋ณด๋ ๊ฒ์ด ์ข๋ค. copy-on-write๋ฅผ ์ํด ์ฝ๋๋ฅผ ์ง๋ฉด์ ๊ตฌํํ๋ swap table์ ๊ฒฝ์ฐ, ๋จ๋ฐฉํฅ์ผ๋ก ๊ตฌํํ์ฌ ์๋ฐฉํฅ๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ๋ ๋ ๋ค์์ง๋ง, ๋์ remove ์ฐ์ฐ์์ O(1)์ด ์๋ O(n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ๋๋ค. ๊ทธ๋ผ์๋ ์ด ๋ฐฉ๋ฒ์ ํํ ์ด์ ๋.. n์ด ํ๋์ ํ๋ ์์ ๊ณต์ ํ๊ณ ์๋ ํ์ด์ง์ ์์ด๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ๊ฒ ๋ง์๊น? ํ๋ ์๊ฐ์ด ๋ค์๊ธฐ ๋๋ฌธ์ด๋ค. ์๊ฐ๋ง ํ๊ณ ์ค์ ๋ก ๊ทธ๋ฌํ์ง๋ ์ฐพ์๋ณด์ง ๋ชปํ์ง๋ง.. ๋ค์๋ถํฐ๋ ๊ฒ์ฆ๋ ํด ๋ณด์.
์ฝ๋๋ฅผ ๊ผผ๊ผผํ ์ฝ์. ๊ฐ์ธ์ ์ผ๋ก๋ ์๊ณ ๋ฆฌ์ฆ ์ฃผ์ฐจ๋ถํฐ, '๊ตฌ์ฒด์์ ์ถ์์ผ๋ก'์ ๋ ธ์ ์ ๊ฐ์ง๊ณ ์ดํดํ๋ ค๊ณ ๋ ธ๋ ฅํ๋ ์ฌ๋์ผ๋ก์ ์ด๋ฒ ํํ ์ค ์ฃผ์ฐจ์๋ ์ญ์ ์ฝ๋๋ฅผ ๋ณด๋ ๊ฒ์ด ๊ฐ์ฅ ์์ํ ๋ฐฉ๋ฒ์ด์๋ ๊ฒ ๊ฐ๋ค. ์ด์์ฒด์ ์ฑ ์ด๋ (OSTEP์ ๋์์ด ๋ง์ด ๋์๋ค) ์ํคํผ๋์๋ฅผ ์ฐธ๊ณ ํด์ ๊ฐ๋ ์ ์๊ณ ์ฝ๋๋ฅผ ๋ณด์๋ ๊ด์ฐฎ์์ ๊ฒ ๊ฐ์ง๋ง. ๊ฒฐ๊ตญ ๋ฌด์ธ๊ฐ๋ฅผ ์ดํดํ๋ ์๊ฐ์ ๊ฐ๋ ์ ์ผ๋ก ์๊ฒ ๋ ๋ด์ฉ์ ์ค์ ์ฝ๋์์ ํ์ธํ ๋์๋ ๊ฒ ๊ฐ๋ค. context switching์ ๋ํด ๋ํ ์ด์์ฒด์ ๊ฐ์์์ ๋ค์ ๋๋ ๋ฌด์จ ๋ง์ธ์ง? ๋ณ๋ก ์๋ฟ์ง ์์๋๋ฐ, ํํ ์ค์
thread_launch
์ฝ๋๊ฐ ๊ทธ๊ฒ์ ๊ตฌ์ฒด์ ์ธ ์๋ฏธ๋ฅผ ์๋ ค์ฃผ์๋ค.. ๋ ์ง์คํฐ ์ํ๋ฅผ ์ด๋๊ฐ(ํํ ์ค์์๋ ์ค๋ ๋ ๊ตฌ์กฐ์ฒด)์ ๋ฐฑ์ ํ๊ณ ๋ค์ ๊ฐ์ ธ์ค๋ ๊ณผ์ ์ ํ์ธํ ์ ์์๋ค. ๋ญ๊ฐ ๋์๋ ์๋ํ๋ ์ฝ๋๋ณด๋ค ๋ํ ์ผํ ์๋ฃ๋ ์๋ค๋ ์๊ฐ์ผ๋ก ๊ผผ๊ผผํ ์ฝ์ด๋ณด๊ณ ์ดํดํ๋ ์๊ฐ์ ๋ค์ด์.์ ๋๋์ง๋ฅผ ์๊ฐํด๋ณด์. ํํ ์ค๋ ์ด๋ฏธ ์๋ํ๋ ์ด์์ฒด์ ๋ฅผ ๋์ฑ ๋ฐ์ ์ํค๋ ํ๋ก์ ํธ์ด๋ฏ๋ก, ๋ด๊ฐ ์ง ์ค ๊ฒ ์์ด๋ ์ด๋๊ฐ์์ ์ฝ๋๊ฐ ๋์๊ฐ๊ณ ์๋ค. ์ฌ์ค ์ฝ๋๋ฅผ ์ง๋ ์๊ฐ๋งํผ, ์ฝ๋๋ฅผ ์ฝ๊ณ ์ดํดํ๋ ์๊ฐ๋ ๋ง์ด ๋ค์๋ ๊ฒ ๊ฐ๋ค. ์ฝ๋๋์ด ๋ง๋ค๋ณด๋ 1์ฃผ์ฐจ ๋๋ '์ ๋์ง?' ์ ๋ํ ๊ณ ๋ฏผ๋ณด๋ค๋ ๊ทธ์ ์ด๋๊ฐ์์ ์ฒ๋ฆฌํด์ฃผ๊ณ ์๊ฒ ๊ฑฐ๋, ํ๋ ๋ง์ธ๋๊ฐ ์ด์ง ์์๋ ๊ฒ ๊ฐ๋ค. ํ์ง๋ง ์ปดํจํฐ์ ๋ง๋ฒ์ ์์ผ๋ฏ๋ก.. ํ๋์ ํ๋ฆ, ์ด๋ฅผํ ๋ฉด ์ธํฐ๋ฝํธ์ ๋ฐ์๋ถํฐ ์ข ๋ฃ๊น์ง์ ํ๋ฆ์ ์ฐฌ์ฐฌํ ์ถ์ ํด ๋ณด๋ฉด์ ์ค์ ์ฝ๋๊ฐ ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๋์ง๋ฅผ ์ง์ด๋ณด๋ ๊ฒ์ด ๋์์ด ๋์๋ค.
intr-stub.S
์์intr_handler
์ ์ธ์๋ก ๋ค์ด๊ฐ๋intr_frame*
๊ฐ์ด ์ด๋ป๊ฒ ์ ๋ฌ๋๋์ง๋ฅผ ๋ชฐ๋ผ์ (CSAPP 8์ฅ์ ์ ์ฝ์ด์ ๐) ๊ถ๊ธ์ฆ์ ๊ฐ์ง๊ณ ์์๋๋ฐ,%rdi
๋ ์ง์คํฐ๋ฅผ ํจ์ ํธ์ถ ์ ์ธ์๋ฅผ ์ ๋ฌํ๋ ๋ฐ ์ฌ์ฉํ๋ค๋ ๊ฒ์ GPT๋ฅผ ํตํด ์๊ฒ ๋์๋ค. ์ด๋ฐ ์์ผ๋ก ๊ถ๊ธ์ฆ์ ํด๊ฒฐํด ๋๊ฐ๋ฉด์ ์ธํฐ๋ฝํธ ํ๋ฆ์ ์ดํด ๋ณธ ๊ฒฝํ์ด 2์ฃผ์ฐจ syscall์์๋ ๋ง์ด ๋์ ๋์๋ ๊ฒ ๊ฐ๋ค. ์ฌ์ํ ์๋ฌธ๋.. ๋ชจ๋ GPT์๊ฒ ๋ฌผ์ด๋ณด๋ฉด ์ ๋ต๋ณํด์ค๋ค. 98๋ ๋์ ํํ ์ค๋ฅผ ํ๋ ๋ํ์๋ค์ ๋นํ๋ฉด ์ด๋ง์ด๋งํ ํํ์ด๋ฏ๋ก ์ ์ฌ์ฉํ์.์์ ํ ์ฝ๋๋ฅผ ๊ณ ๋ คํด๋ณด์. 2์ฃผ์ฐจ์ ๋ฐค์ํ๋ฉฐ ํด๊ฒฐํ๋ multi-oom ํ ์คํธ (๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ์๋์ง๋ฅผ ํ์ธํ๋ ํ ์คํธ) ์ดํ ๋ชจ๋ alloc ๊ด๋ จ ํจ์๋ ๊ฐ๋ฐ์ ์ผ๋ก freeํด์ค ๊ณณ ์๋.. ์ฒดํฌํ๋ฉด์ ์ฝ๋๋ฅผ ์ง๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ด๊ฒ ์๊ฐ๋ณด๋ค ๋งค์ฐ ์ฝ์ง ์์ ์์ ์ธ ๊ฒ ๊ฐ๋ค. ์ด๋ฒ์ ํ๋ก์ ํธ 3์์ ๋๊ธฐํ ๋ฌธ์ (๋ฐ๋๋ฝ)๋ฅผ ๋ง์ด ๊ฒช์๋๋ฐ, ์ด๋ฅผํ ๋ฉด system call์ ํ์ผ ๊ด๋ จ ํจ์์์ ๋ฝ์ ํ๋ํ๊ณ ๋ ํ fault๊ฐ ๋ฐ์ํ๊ณ lazy_load๋ก ๊ฐ์.. ๋ค์ load ๊ด๋ จ ๋ฝ์ ํ๋ํ๋ ๊ณผ์ ์ค์์ ๋ญ๊ฐ ๊ผฌ์ด๋ ๊ฒฝ์ฐ๊ฐ ์๊ฒผ๋ ๊ฒ ๊ฐ๋ค. ํญ์ ํจ์๊ฐ ๋ฆฌํด๋๊ฑฐ๋, ์ฌ์ค ๋์ฑ ์ค์ํ๊ฒ๋ ์๊ธฐ์น ์๊ฒ ์ข ๋ฃ๋๋ ๊ฒฝ์ฐ๋ฅผ ๊ณ ๋ คํด์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ง์ฝ ์ข ๋ฃ๋๋ ์ผ์ด์ค ์์์ ์์ ๋ฐํ์ด๋ผ๋์ง.. ๋ฅผ ํด๊ฒฐํด์ฃผ์ง ๋ชปํ๋ค๋ฉด, ๊ทธ ์ผ์ด์ค ๋ฐ์ผ๋ก ๋ฐํ ๋๋ ์ ๋ฆฌ ๋ก์ง์ ๋นผ๋ ๊ฒ๋ ๋ฐฉ๋ฒ์ผ ์ ์๊ฒ ๋ค. spt_table_kill์์ hash_destroy๋ฅผ ํ๋ฉฐ file writeback์ ํ๋๊ฒ๋ณด๋ค, ํ์ฐจ๋ก writeback์ ํ ๋ค ๋ง์ ํธํ๊ฒ destroy๋ก free์์ผ์ฃผ๋ ๊ฒ์ด ๋์๋ค. ์๋ํ๋ ๋์๋ค์ ์ ๋๋์ด์ ํจ์๋ก ๋ง๋ค๋ฉด ์ข๋ค.
ASSERT ๋ฌธ์ ์ ๊ทน ํ์ฉํ์. ํํ ์ค์์ semaphore์๋ ๋ฌ๋ฆฌ lock์ ํ์ฌ ์ค๋ ๋๊ฐ lock์ ์ก์๋๋ฐ ๋ค์ ํ๋ํ๋ ค๊ณ ํ๋ค๋ฉด ASSERT๋ฅผ ๋ฐ์์ํด์ผ๋ก์ ์๋ฌ๋ฅผ ํ์ธ์์ผ์ค๋ค. ๋ฐ๋ผ์ ๋ฐ๋๋ฝ์ด ๋ฐ์ํ ์ง์ ์ ์ฝ๊ฒ ํ์ ํ ์ ์๊ณ , ์์ ํ ์ ์๋ค. ์ฝ์น๋๊ป์ 'ASSERT๋ ๋๋ฒ๊น ๊ณผ์ ์ ์ปดํจํฐ์๊ฒ ์ํค๋ ๊ฒ'์ด๋ผ๊ณ ๋ง์ํ์ จ๋ ์๋ฏธ๊ฐ ์ด๋ฒ ํ๋ก์ ํธ (ํนํ Virtual Memory)๋ฅผ ํ๋ฉด์ ์๋ฟ์๋ ๊ฒ ๊ฐ๋ค. ํ์ด์ง์ ์ํ์ ๋ฐ๋ผ ์ฒ๋ฆฌ ๋ก์ง์ด ๋ฌ๋ผ์ง๋ค๋ณด๋, ์ด ํจ์์ ์ง์ ํ์ ๋ ์๋ํ ํ์ด์ง์ ์ํ๋ ์ด๋์ผ ํ๋ค - ๋ผ๋ ์กฐ๊ฑด๋ค์ด ์์๋ค. if๋ฌธ์ผ๋ก ์์ธ์ฒ๋ฆฌ ํ ์๋ ์๊ฒ ์ง๋ง, ๋ง์ฝ ์๋ํ ๋๋ก ์ฝ๋๊ฐ ๋์๊ฐ์ผ ํ๋ค๋ ํ์ ์ด ์๋ค๋ฉด ASSERT๋ฅผ ์ฌ์ด์ ๋ด ์๊ฐ์ ๊ฒ์ฆํด ๋ณผ ์ ์๋ค. ์ด๋ฐ ์์ผ๋ก ์๋ํ ๋ถ๋ถ์ ํ์ธํ๊ณ , ์ด์ด๋ถ์ด๊ณ .. ์ ๊ณผ์ ์ ๊ฑฐ์น๋ฉด์ ๋๋ฒ๊น ํ๋ ๊ฒ ๊ฐ๋ค. ๋ฌด์์ ๋๋ฆฌ๊ณ gdb๋ก ์ฐพ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ซ๋ค.
์ด ๋ฐ์๋ ํํ ์ค๋ฅผ ํ๋ฉด์ ๋ง์ ๊ฒ์ ์ป์๋ค. ์ผ๋จ ์ด ์ ๋ ์์ ์ฝ๋๋ฅผ ์ธ์ ์ฝ์ด๋ณด๊ฒ ์ผ๋ฉฐ.. ์์ ํด๋ณด๊ฒ ์ผ๋ฉฐ.. ๊ทธ๊ฒ๋ง์ผ๋ก๋ ๋ถ๋ด๊ฐ์ด ์๋ ํ๋ก์ ํธ์๋ ๊ฒ์ ํ์คํ๋ค. ํ๋์ ์ผ๋ก ๋๋ ์ ์ด ์๋ค๋ฉด: ๋ชจ๋ฅด๊ฒ ์ผ๋ฉด ๋ฌผ์ด๋ณด๊ณ , ๊ฒ์ํ๊ณ , GPT ์ ๊ทน ํ์ฉํ๊ณ , ์๋ฌดํผ๊ฐ์ ์์ ์๋ฌธ๋ ํด์ํ๋ ค๋ ์์ธ๊ฐ ์ค์ํ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์ฝ๋์ ๊ตฌํ์ ํ๋ก ์ง์คํ๋ ํ๋๊ฐ ์์ด์ผ ๊ฐ์ ํ ๊ณผ์ ๋ฅผ (all pass๊ฐ ์๋๋๋ผ๋) ๋๋ผ ์ ์๋.. ์์ธ ๊ฒ ๊ฐ๋ค. ๊ณผ์ ์์ ์ป์ด๊ฐ ์ ์๋ ๊ฒ์ 100%๋ ๊ณ ์ฌํ๊ณ 80%๋ผ๋ ์ ๋ฐฐ์๊ฐ๋์ง์ ๋ํ ์๋ฌธ์ ์์ง๋ง, ์ด๋ฐ ๊ฒฝํ์ ํด ๋ณธ ์ ์๋ค๋ ๊ฒ๋ง์ผ๋ก๋ ์์ผ๋ก ํ๋ก์ ํธ๋ฅผ ํด๋๊ฐ๋๋ฐ ์์ด ํฐ ๋์์ด ๋์ง ์์๊น.. ์ถ๋ค. ํ๋ค๊ณ ๋ฒ
์ฐจ๊ณ ๊ทธ๋๋ ์กฐ๊ธ์ ์ฌ๋ฏธ์์๋ ํํ ์ค ํ๊ณ ๋ ๐
'DevLog ๐จ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[CS][Study] Monitor & Conditional Variable (1) | 2024.01.11 |
---|---|
[DevLog][PintOS] PRJ3 Virtual Memory/Memory Mapped Files to Copy-on-write (1) | 2023.10.24 |
[DevLog][PintOS] PRJ3 Virtual Memory/Memory Management to Stack Growth (2) | 2023.10.17 |
[DevLog][PintOS] PRJ2 User Program/Out of Memory Test (0) | 2023.10.10 |
[DevLog][PintOS] PRJ1 Threads/PintOS ์ค๋ ๋๋ ์ด๋ป๊ฒ ๋์๊ฐ๊น? (0) | 2023.10.03 |