์ธ ๋ฒ์งธ ํ๋ก์ ํธ๊ฐ ๋๋ฌ๋ค.
์ง๊ธ๊ณผ ๋์ค์ ์ํด ๊ตฌํํ๋ฉด์ ์๊ฒ๋ ๊ฒ๋ค์ ์ ์ด๋๋ค.
ํ๋ก์ธ์ค๊ฐ load ๋ ๋, ํด๋น ํ๋ก์ธ์ค๊ฐ ๊ฐ์ง๋ memory segment (code(or text), data, bss, heap, stack) ๋ค์ ๊ณง ๋ฐ๋ก ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ(DRAM)์ ๋ฐฐ์ ๋์ง ์๋๋ค. ์ค์ ๋ก๋ ๊ทธ ํ๋ก์ธ์ค๊ฐ ํด๋น ๋ฉ๋ชจ๋ฆฌ ์์ญ(page)์ ์๊ตฌํ ๋(demand), ๊ทธ์ ์์ผ kernel์ ํ์ฌ ๊ฐ์ฉํ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์์ญ(frame)์ ํ๋ ์ฐพ์ ํ, loadํ ๋ ๊ตฌ์ฑํด ๋์๋ page table์ ๊ฐ์ง๊ณ ํ์ํ ์ ๋ณด๋ฅผ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ด์ค๋ค.
์ข ๋ ์ ํํ ๋งํ์๋ฉด, kernel์ ํ๋ก์ธ์ค์ ์๊ตฌ(demand)๋ฅผ ์ฒ๋ฆฌํ๋ค๊ธฐ ๋ณด๋ค๋, ํ๋ก์ธ์ค๊ฐ ์ผ์ผํจ ์ค๋ฅ (fault)๋ฅผ ์ฒ๋ฆฌํด ์ค๋ค. ํ๋ก์ธ์ค์ ์ํ์ ๋ฐ๋ผ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ ๊ทผํ๊ฒ ๋ ๊ฒ์ธ๋ฐ, ํด๋น ์์ญ์ ์์ง ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ๋ฐฐ์ ๋์ง ์์์ผ๋ฏ๋ก ์ด๋ฌํ ์ ๊ทผ์ page fault๋ผ๋ interrupt๋ฅผ (ํ๋์จ์ด์ ์ผ๋ก) ์ผ์ผํจ๋ค. ์ด ๋ kernel mode์ ์ง์
ํ๊ฒ ๋๋ฉด์, kernel์ ํ๋ก์ธ์ค๊ฐ ์ ๊ทผํ๊ณ ์ ํ๋ ๊ฐ์ ์ฃผ์๋ฅผ CR2 register์์ ์ฝ์ ํ (ํ๋์จ์ด๊ฐ ์ ์ด์ค๋ค), ๊ทธ ํ๋ก์ธ์ค์ page table์ ์ฐธ๊ณ ํด ๊ทธ์ ์์ผ ๋ฌผ๋ฆฌ๋ฉ๋ชจ๋ฆฌ์ lazy ํ๊ฒ load ํด์ฃผ๋ ๊ฒ์ด๋ค.
์ด๋ ๊ฒ ํ๋ฉด, ํ๋ก์ธ์ค๊ฐ ์ ๊ทผํ์ง ์๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ ๋งํผ์ ์ค์ ๋ฌผ๋ฆฌ๋ฉ๋ชจ๋ฆฌ ์์์ ๋ค๋ฅธ ํ๋ก์ธ์ค์๊ฒ ํ ๋นํด ์ค ์ ์๋ค. ์ด๋ storage ๊ณต๊ฐ์ ํ์ฉํ๋ swap ๊ธฐ๋ฅ๊ณผ ํจ๊ปํ๋ฉด์ (๋ค์์ ์ค๋ช
ํ๊ฒ ๋ค), OS๊ฐ ์์ ์ key role ์ค์ ํ๋์ธ Sharing (ํนํ, space sharing)์ ์คํํ ์ ์๋๋ก ํด์ค๋ค.
mmap
kernel์ด mmap
system call์ ๋ฐ์ผ๋ฉด, ์์ฒญ ํ์ผ์, ์์ฒญ offset์์ ์์ํ๋, ์์ฒญ ํฌ๊ธฐ๋งํผ์ ์ฐ์๋๋ ๋ฉ๋ชจ๋ฆฌ ์์ญ์(๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ์์์ ์ฐ์๋ ํ์๋ ์๋ค. ์ด์ฐจํผ page ๋จ์๋ก ๊ด๋ฆฌํ๊ธฐ ๋๋ฌธ์.), ์์ฒญ ํ๋ก์ธ์ค์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์์ ํ ๋นํด ์ค๋ค. ์ด ๋ ๋ํ demand paging์ด ์ ์ฉ๋์ด mmap
ํธ์ถ๋ง์ผ๋ก๋ ์ค์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ํ์ผ ๋ด์ฉ์ด ์ ํ์ง ์๊ณ , ํ๋ก์ธ์ค๊ฐ ์๊ตฌํด์ผ๋ง (fault๊ฐ ๋ฐ์ํด์ผ๋ง) ๊ทธ์ ์์ผ ํ์ผ์ ์ฝ์ด์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ด์ค๋ค.
mmap
system call์ file system์ ๋ํ ์ผ์ข
์ interface๋ผ๊ณ ๋ ๋ณผ ์ ์๋ค. ํ๋ก์ธ์ค๊ฐ mmap
์ผ๋ก ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ writeํ๋ฉด ๊ทธ ๋ณ๊ฒฝ์ฌํญ์ด ์ค์ ๋ก storage์ file์ ์ ์ฅ(write-back) ๋๋ค. ํ๋ก์ธ์ค๊ฐ ๋ช
์์ ์ผ๋ก read
๋๋ write
๋ฅผ ํ์ง ์๊ณ ๋ file์ ๋ํ ์์
์ ํ ์ ์๊ฒ ๋์์ฃผ๋ ๊ฒ์ด๋ค. ๋ณ๊ฒฝ์ฌํญ์ด ์ ์ฅ๋๋ ์๊ฐ์, ํ๋ก์ธ์ค๊ฐ ๋ช
์์ ์ผ๋ก munmap
system call์ ํธ์ถํ๊ฑฐ๋, ํด๋น ์์ญ์ ํฌํจ๋ page๊ฐ swap out ๋๊ฑฐ๋ (๋ค์์ ์ค๋ช
ํ๊ฒ ๋ค), ๋ช
์์ munmap
ํธ์ถ ์์ด ํ๋ก์ธ์ค๊ฐ ์ข
๋ฃ๋ ๋์ด๋ค.
Memory swapping ์ ์์ ์ธ๊ธ๋ space sharing์ ๊ฐ๋ฅํ๊ฒ ํ๊ธฐ ์ํ ๊ธฐ๋ฒ์ผ๋ก, storage์ ๊ณต๊ฐ์ ํ์ฉํ๋ค. demand paging์ ํตํด ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ๊ฐ ํ์ด์ง๋ค์ด ๋ค์ด ์ฐฐํ ๋ฐ, demand๊ฐ ๊ฐ์ง๋์์ ๋ ๋ฌผ๋ฆฌ๋ฉ๋ชจ๋ฆฌ์ ๋ ์ด์ ํ์ด์ง๋ฅผ ๋ฐฐ์ ํด ์ค ์ ์๋ค๋ฉด, ๊ฐ์ฅ ์ค๋ ์ ๊ทผ๋์ง ์์ page(victim page: ํฌ์์ ํ์ด์ง)๋ฅผ ๊ณจ๋ผ ํด๋น ํ์ด์ง๋ฅผ storage๋ก evict(swap out)ํ๋ค. ํฌ์์ ํ์ด์ง์ type (anonymous memory vs file-backed memory)์ ๋ฐ๋ผ swap out๋๋ ๊ณต๊ฐ(backing storage)์ด ๋๋๊ฒ ๋๋ค (swap dist vs backing file).
๊ทธ๋ฆฌ๊ณ ์ด๋ ๊ฒ swap out ๋ page์ ๋ํ์ฌ ๋ค์ demand๊ฐ ๊ฐ์ง๋๋ค๋ฉด, ๊ทธ๋ ๊ทธ page๋ฅผ swap in ํ๋ค. ์ฆ, storage์ ํด๋น ํ์ด์ง๊ฐ ์กด์ฌํ๋ ๋ถ๋ถ์ ์ฝ์ด ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ด์ค๋ค. ์ฐธ๊ณ ๋ก ์์ ๊ทธ๋ฆผ์ฒ๋ผ process ์ memory๊ฐ ํต์งธ๋ก swap out ๋์ง ์์์ ์ ์ํ์. page ๋จ์๋ก swap in/out ์ด ์ผ์ด๋๋ค.
CSAPP์์๋ ์ด๋ฌํ ์ํฉ์ ๋ํ์ฌ "๋ฉ์ธ๋ฉ๋ชจ๋ฆฌ๋ ๋์คํฌ์ ๋ํ ์บ์" ๋ผ๊ณ ์ ์ํ๋ค. ์ฐ๋ฆฌ๋ ํ๋ก์ธ์ค๊ฐ ์คํ๋ ๋ ํญ์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๊ฐํ์ง๋ง, ๋งจ ์ฒ์ ํ๋ก๊ทธ๋จ์ ์คํํ๊ธฐ ์ํด์๋ ๋์คํฌ์์ ๊ทธ ํ์ผ์ ์ฝ์ด์ค๋ ์์ ์ด ์ ํ๋์ด์ผ ํจ์ ๋ ์ฌ๋ ค๋ณด๋ฉด, ํ๋ก์ธ์ค๊ฐ ์ํ๋๋ฉด์ ์ฝ๊ณ ์ฐ๋ ๋ชจ๋ ์ ๋ณด๊ฐ ๋์คํฌ์ ์๋ค๋ ๊ด์ ์ผ๋ก ์๊ฐํด ๋ณผ ์๋ ์๋ค (๋คํธ์ํฌ ํต์ ์ ์ธ). ๊ทธ๋์ ํ๋ก์ธ์ค๋ storage๋ฅผ ์ง์ ์ฝ๊ณ ์ฐ๋ฉฐ ์์ ํ๊ณ ์ถ์ง๋ง, disk I/O๋ ๋งค์ฐ ๋๋ฆฌ๋ค. ๋ฐ๋ผ์ "๋ฉ์ธ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋์คํฌ์ ๋ํ ์บ์"์ฒ๋ผ ์ฌ์ฉํ๊ธฐ ์ํด swap in/out์ ํ์ฉํ๋ค๊ณ ์ดํดํ ์๋ ์๊ฒ ๋ค.
์ด๋ฒ ์ฃผ์ฐจ๋ ํนํ ๋๊ธฐ ํ๋ค๋ก๋ถํฐ ์ฌ๋ฌ ์ ์ตํ ์ง๋ฌธ๋ค์ ๋ง์ด ๋ฃ๊ณ , ๊ฐ์ด ์๊ฐํด๋ณด๋ ์๊ฐ์ด ๋ง์๋ค. ๊ฐ๊ฐ์ ๋ํด ์๊ฒ๋ ๋ด์ฉ์ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.
"code segment๋ data segment๋ ๋ถ๋ช ํ ์คํ ํ์ผ์์ ์ฝ์ด์ค์์,
๊ทผ๋ฐ ์ anonymous memory๋ก type์ ์ง์ ํด์ฃผ์ง?"
pintos๋ process๋ฅผ loadํ ๋, ํด๋น๋๋ executable file์์ segment๋ค์ ์ฝ์ด์ page table์ ๊ธฐ๋กํ๋ค (pintos์ ๊ตฌํ ์์ผ๋ก ์ ํํ๋ Supplemental page table(spt)์ ๊ธฐ๋ก).
vm_alloc_page_with_initializer
๊ฐ ๋ฐ๋ก segment์ page ๋ค์ ๊ฐ๊ฐ spt์ ๋ฑ๋กํ๋ ๊ณผ์ ์ ์ํํ๋ ํจ์์ด๋ค. ๊ทผ๋ฐ ์ง๋ฌธ์ฒ๋ผ page์ type์ file-backed memory์ ํด๋นํ๋ VM_FILE
์ด ์๋, VM_ANON
์ผ๋ก ์ง์ ํ์ฌ ๋ฑ๋กํ๋ค.
์ง๋ฌธ์ ๋ตํ๊ธฐ ์ํด์๋ ์ ๊ตณ์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ anonymous memory์ file-backed memory๋ก ๋๋์ด ๊ด๋ฆฌํ๋์ง๋ฅผ ๋จผ์ ์์์ผ ํ๋ค. ๋์ ์ฐจ์ด์ ์ (๋๋ฌด๋ ๋น์ฐํ์ง๋ง) ์ด๋ฆ์์๋ถํฐ ์ ์ ์๋๋ฐ, ๊ทธ ๋์ ์ด๋ฆ์ ๊ฐ๊ฐ ๊ทธ๋ค์ด swap out ๋๋ ๊ณต๊ฐ์ธ backing store ์ ์ด๋ฆ๊ณผ ๊ฐ๋ค. anonymous memory๋ disk์ swap disk์ ์กด์ฌํ๋ ์ต๋ช ์ file์, file-backed memory๋ disk์ ์กด์ฌํ๋ ์์ ์ ์๋ file์ swap out ๋๋ค.
์ฌ์ค ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ anonymous memory๋ก ๊ด๋ฆฌํ ์๋ ์์ ๊ฒ์ด๋ค. ์ฆ, ๋ชจ๋ swap out์ swap disk๋ฅผ ํฅํ๊ฒ ํ ์๋ ์์ ๊ฒ์ด๋ค. ํ์ง๋ง, ์๋ ๊ทธ ๋ฉ๋ชจ๋ฆฌ์ ํด๋นํ๋ ์ ๋ณด๋ฅผ ์ง๋ file์ด disk์ ์กด์ฌํ๋ค๋ฉด ์ด๋ swap disk๋ผ๋ ๊ณต๊ฐ์์์ ๋ญ๋น์ด๋ค. ๋๋ถ์ด, anonymous memory๋ swap out ์ ํ์ฐ์ ์ผ๋ก write back ์ด ์ผ์ด๋๋ค. ๋ค์ ์๊ตฌ๊ฐ ๊ฐ์ง๋์ด swap in ๋์ด์ผ ํ ๋๊น์ง ๊ทธ ์ ๋ณด๋ฅผ ์ ์ฅํด ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง file-backed memory์ swap out์ ๋ฐ๋์ write back์ ํฌํจํ์ง๋ ์๋๋ค. ์ด๋ฏธ disk ์์ ํด๋น ๋ฉ๋ชจ๋ฆฌ์ ์ ๋ณด๋ฅผ ์ ์ฅํด๋ file์ด ๋ฏธ๋ฆฌ ์กด์ฌํ๊ณ ์์๊ธฐ์, write back์ ํด๋์ง ์์๋ ๋ค์ ์๊ตฌ๊ฐ ๊ฐ์ง๋์์ ๋ ๊ทธ file์ ์ฝ์ด ๋ฐ๋ก swap in์ ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋จ, swap out๋๋ ์์ ์์ ๊ทธ ๋ฉ๋ชจ๋ฆฌ ์์ ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋์์ ๊ฒฝ์ฐ (== modified == dirty), ํด๋น file์ write backํด์ฃผ์ด์ผ ํ๋ค. ๊ทธ๋์ผ swap out๋ ์์ ์ ์ ๋ณด๋ฅผ ๊ทธ๋๋ก ๊ฐ์งํ ์ฑ ์ดํ์ swap in ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฌํ ํน์ฑ์ ์ ๋
ํ๋ฉด์ ๋ค์ pintos์ ๊ตฌํ์ ์ดํด๋ณด์. load_segment
๊ฐ ์ํ๋๋ segment๋ ๋ ๊ฐ์ง ์ธ๋ฐ, code segment์ data segment๊ฐ ๊ทธ๊ฒ์ด๋ค. code segment๋ ๋ง๊ทธ๋๋ก ์ํ๋ ์ฝ๋ (cpu๊ฐ ์ฝ๊ณ ์คํํ ์ ์๋ binary)๊ฐ ์ ํ์์ ๊ฒ์ด๊ณ , data segment๋ ๊ทธ ๊ณผ์ ์์ ์ฌ์ฉ๋๋ ๋ณ์๋ค์ ์ ๋ณด๊ฐ ์ ํ ์์ ๊ฒ์ด๋ค. ์ง๋ฌธ์ ์์ง๋ file์์ ์ฝ์ด์๋๋ฐ ์ file-backed memory๊ฐ ์๋๋๋ ๊ฒ์ด์๋ค.
์๊น ์ธ๊ธํ ๋ memory type์ ์ฐจ์ด๋ฅผ ๋ค์ ๋ ์ฌ๋ ค ๋ณด์. -> backing store์ ์ฐจ์ด.
์ฌ์ค, data segment๋ file์ ์ ๋ณด๊ฐ ์กด์ฌํ์ง ์๋๋ค. run-time ์์ ์์ ์ด๊ธฐํ ๋๋ ๋ณ์๋ค(bss)์ ๊ทธ ๋ณ์์ ํฌ๊ธฐ๊ฐ ์๋, ๋ณ์์ ๋ด์ฉ์ด file์ ์ด๋ฏธ ์ ํ์๋ค๋ ๋ง ์์ฒด๊ฐ ์ด๋ถ์ฑ์ค์ด๋ค. compile ์์ ์ ์ด๊ธฐํ๋ ๋ณ์๋ผ๊ณ ํด๋, run time์ ๊ทธ ๋ณ์์ ๊ฐ์ด ์ถฉ๋ถํ ๋ฐ๋ ์ ์๋ค. ๋ฐ๋ผ์ data segment๋ ๋ค์ file์ ์ ํ๋ฉด ๊ณค๋ํ๋ค. ์ฆ, file์ swap out๋๋ฉด ์๋๋ค. ๊ทธ '๋ด์ฉ'์ด file์ ์ด๋ฏธ ์์๊ฑฐ๋์, ์์๋ค ํ๋๋ผ๋ ๊ทธ ๋ด์ฉ์ ๋ฐ๊ฟ์๋ ์๋๊ธฐ ๋๋ฌธ์ด๋ค. (compile์ด ๋๋ ์์ ์ ์ด๋ฏธ ์ ํด์ง ๋ด์ฉ์ด๊ธฐ ๋๋ฌธ) ๊ทธ๋์ swap disk๋ก swap out ํ๊ธฐ ์ํด (swap out์ด file์ ํฅํ๋ค๋ ๊ฑด write back์ด ์ธ์ ๋ ์ผ์ด๋ ์ ์๋ค๋ ๋ง์ด๋ค), anonymous memory๋ก ๊ด๋ฆฌํ๋ค.
๋ค๋ง, code segment๋ swap out์ด file์ ํฅํ๋๋ก ํด๋ ๋ฌธ์ ๊ฐ ์๋ค. ์๋ํ๋ฉด code segement ๋ read-only ๋ฉ๋ชจ๋ฆฌ๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค์ ๋์์ค์ modify ๋ ์ผ์ด ์ ํ ์๊ธฐ ๋๋ฌธ์ด๋ค. ํ์ง๋ง pintos skeleton์์ ๊ตฌํ์ ๋ณต์ก์ฑ์ ํผํ๊ธฐ ์ํด data segment์ ๋์ผํ๊ฒ anonymous memory๋ก ์ง์ ํ๋ค๊ณ ํ๋จํ๋ค.
"ํ๋ก์ธ์ค์ code segment์ data segment์ ๋ํ ๋ฌผ๋ฆฌ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๋ ๋ถ๋ถ์ ์กด์ฌํ๋๋ฐ, kernel์ code์ data segment์ ๋ํ ๋ฌผ๋ฆฌ๋ฉ๋ชจ๋ฆฌ๋ ์ธ์ ํ ๋น๋ฐ๋ ๊ฑฐ์ง?"
์ง๋ฌธ์ ์์์, ์ปค๋์ code segment์ data segment์ ๋ํ์ฌ palloc_get_page
ํจ์์ ํธ์ถ์ ์ฐพ์ง ๋ชปํ๋ฉด์๋ถํฐ์๋ค. ์๋ฌธ์ ํด์ํ๊ธฐ ์ํด์๋, pintos๊ฐ ๋ฌผ๋ฆฌ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๋ป๊ฒ ๊ด๋ฆฌํ๋ ์ง๋ฅผ ์์์ผ ํ๋ค.
pintos๋ ๋ฌผ๋ฆฌ๋ฉ๋ชจ๋ฆฌ๋ฅผ 2๋ฑ๋ถํ์ฌ ํ์ชฝ์ kernel์ด ์ฌ์ฉํ ์์ญ, ํ์ชฝ์ user '๋ค'์ด ์ฌ์ฉํ ์์ญ์ผ๋ก ๋๋์ด ๊ด๋ฆฌํ๋ค. ๋๋์ด ๊ด๋ฆฌํ๋ค๋ ๋ง์ kernel ์์ ์ด ์ง๋๊ณ ์๋ ํ์ด์ง ํ ๋น๊ธฐ๊ฐ, ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ kernel pool๊ณผ user pool๋ก ๋๋์ด ๊ด๋ฆฌํ๋๋ก ํ๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋์ test case๊ฐ ์ง์ ํ๋ ๋ฌผ๋ฆฌ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ์ธ 20MB๋ฅผ ๊ธฐ์ค์ผ๋ก, kernel pool๊ณผ user pool์ ๊ฐ์ฉํ page ๊ฐ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
ํ์ง๋ง ์ด๋ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฒด ํฌ๊ธฐ๋ฅผ ๋จ์ํ๊ฒ ๋ฐ์ผ๋ก ๋๋์ด ๊ฐ๋ฅํ ํ์ด์ง์ ๊ฐ์๋ฅผ ๊ณ์ฐํ ๊ฒ ๋ฟ์ด๊ณ , ์ค์ ๋ก ์ด ๋ ๊ฐ์ pool์ด ์ด๊ธฐํ ๋๋ ๊ณผ์ ์ ๊ฑฐ์น๊ณ ๋ ๋ค์ ํ์ด์ง ๊ฐ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
user pool์ ํ์ด์ง ๊ฐ์๋ ๊ทธ๋๋ก์ง๋ง, kernel pool์ ํ์ด์ง ๊ฐ์๋ ๊ฐ์ํ๋ค.
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด ์ฐ๋ฆฌ๋ ์ด ๊ฐ์๋ 463๊ฐ์ ํ์ด์ง (463 = 2496 - 2033) ๋ค์ด kernel code segment์ kernel data segment์ ํ ๋น๋์๋ค๊ณ ํ๋จํ๊ณ , 1๋ฒ์งธ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ํ์ค ์ถ๋ ฅ์ ํตํด ์ค์ ๊ฒฝ๊ณ๊ฐ๋ค์ ํ์ธํ์ฌ, 2๋ฒ์งธ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ ๋์์ ์์ฑํ๋ค.
(ํ๋ํด์ ๋ณด๋ฉด ์ข๋ค ๐
)
(mem_end๊ฐ ์ ํํ 20MB๊ฐ ๋์ง ์๋ ์ด์ ๋ ์ฌ๋ฌ๊ฐ์ง ๊ฐ๋ฅ์ฑ(MB, MiB ์ฐจ์ด ๋ฑ)์ ์๊ฐํด ๋ดค์ง๋ง, ํ์ฌ์ ๋
ผ์์์ ํฌ๊ฒ ์ค์ํ์ง ์๋ค๊ณ ํ๋จํด ์ค๋ช
ํ์ง ์๋๋ค.)
(์๋ก ์๊ฒ๋ ์ ์, kernel์ code segment์ data segment์ memory ์์ layout์ด user process์ ๊ทธ๊ฒ๊ณผ ๊ฑฐ์ ๋์ผํ๋ค๋ ๊ฒ์ด๋ค.)
kernel ๋ถํ
์ user pool๊ณผ kernel pool์ ๊ด๋ฆฌํ๋ ํ์ด์ง ํ ๋น๊ธฐ๋ฅผ palloc_init ()
ํธ์ถ๋ก ์ด๊ธฐํ ํ๋๋ฐ, ์ด ์ด๊ธฐํ ์ดํ์ ๊ฐ์ฅ ์ฒ์์ผ๋ก ํ ๋น๋๋ ํ์ด์ง๊ฐ ๋ฐ๋ก base_pml4
๋ฅผ ์ํ ํ ๊ฐ์ ํ์ด์ง๋ค (paging_init (mem_end)
ํธ์ถ ์์์ base_pml4
๋ฅผ ์ํ ํ์ด์ง ํ ๊ฐ๋ฅผ ์ป๊ธฐ ์ํด palloc_get_page(0)
๋ฅผ ํธ์ถํ๋ค). ๊ทธ๋์ kernel pool์ ์์์ง์ ์, ๊ฐ์ฅ ์ฒ์์ผ๋ก ํ ๋น๋ ํ์ด์ง์ ์์์ฃผ์, ์ฆ base_pml4
์ ์์์ฃผ์์ธ 0x8004230000 ๋ผ๊ณ ๋ณผ ์ ์๋ค. ์ด๋ฅผ ํตํด, ์์ ์ธ๊ธํ ๊ฐ์๋ 463๊ฐ์ ํ์ด์ง๊ฐ 0x8004000000 ~ 0x8004230000 ์ฌ์ด์ ํฌํจ๋๋ ๊ฒ์ด๋ผ๊ณ ์ถ๋ก ํด ๋ณผ ์ ์๋ค. ์ค์ ๋ก ๊ณ์ฐ์ ํด๋ณด๋ฉด, 0x230000 ์ 560๊ฐ ํ์ด์ง ํฌ๊ธฐ์ ํด๋นํ๋ ๊ฐ์ธ๋ฐ, ๋๋จธ์ง 97๊ฐ(560 - 463) ํ์ด์ง์ ํด๋นํ๋ ์์ญ์ ํ์ค ์ถ๋ ฅ์์ ๋ณด์ด๋ base_mem
์ ๋๊ณผ ext_mem
์ ์์ ์ฌ์ด์ ํด๋นํ๋ ์์ญ์ด๋ผ๊ณ ์ถ๋ก ํด ๋ณผ ์ ์๋ค(0x100000 - 0x9fc00 == 385KB == 96.25 pages).
์๋์ ์ง๋ฌธ์ผ๋ก ๋์์ค์๋ฉด, kernel์ code์ data segment์ ๋ํ ๋ฌผ๋ฆฌ๋ฉ๋ชจ๋ฆฌ ํ ๋น์, ํด๋น ์์ญ๋ค์ ํ์ด์ง ํ ๋น๊ธฐ์ ์ด๊ธฐํ ์์ ์ด๋ฏธ kernel pool ์์ occupied๋ ์ํ๋ผ๊ณ ์ง์ ํจ์ผ๋ก์จ ์ด๋ฃจ์ด์ง๊ณ ์๋ ๊ฒ์ด๋ค.
"ํฌ์๋ ํ์ด์ง๋ฅผ ์ฐพ๋ page replacment policy๋ก LRU๋ฅผ ์ ์ฉํ๊ณ ์ถ์๋ฐ ์ด๋ป๊ฒ ํด์ผํ์ง?"
๋ฉ์ธ๋ฉ๋ชจ๋ฆฌ์ ๋ ์ด์ ๊ฐ์ฉํ ํ๋ ์์ด ์์๋ ํฌ์์ ํ์ด์ง๋ฅผ ์ ํํ๋ page replacment policy ์๋ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋ค. โก Optimal, LRU, Clock, Belady's anomaly
์ฐ๋ฆฌ๋ ์บ์ฑ์ ํํ ์ฌ์ฉ๋๋ LRU (Least Recently Used)๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ๋ค. ์๋ํ๋ฉด page replacment policy ์ ์ฑ๋ฅ์, ์ ์ ๊ฐ ์ ๊ทผํ๋ ค๊ณ ์๋ํ๋ ํ์ด์ง๊ฐ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ์์ ์๋ ์ํฉ์ด ์ผ๋ง๋ ์ ๊ฒ ๋ฐ์ํ๋๊ฐ, ์ฆ page fault๊ฐ ์ผ๋ง๋ ์ ๊ฒ ๋ฐ์ํ๋๊ฐ ๋ก ์ธก์ ํ ์ ์๊ธฐ ๋๋ฌธ์, ์ด๊ฒ์ด cache miss๋ฅผ ์ค์ด๋ ๊ณผ์ ๊ณผ ๋น์ทํ๊ฒ ๋๊ปด์ก๊ธฐ ๋๋ฌธ์ด๋ค. ("๋ฉ์ธ๋ฉ๋ชจ๋ฆฌ๋ ๋์คํฌ์ ๋ํ ์บ์์ด๋ค.") ํ์ง๋ง ์ด๋ฅผ ์ฝ๋๋ก ๊ตฌํํ ๋ฐฉ๋ฒ์ด ๋์ ํ ๋ ์ค๋ฅด์ง ์์๋ค. ์ ๊ทธ๋ฌ์๊น?
์ฌ์ค ๊ด๋ฆฌํด์ผํ list์ LRU๋ฅผ ์ ์ฉํ๋ ๊ฒ์ ์ด๋ ต์ง ์๋ค. ์ด๋ค ์์๊ฐ 'Used'๋ ๋๋ง๋ค ๊ทธ ์์๋ฅผ list์ head๋ก ๋ณด๋ด์ค๋ค๋ฉด, ํญ์ list์ tail์ ์กด์ฌํ๋ ์์๊ฐ Least Recently Used์ธ ์์๊ฐ ๋๋ค. ๊ทธ๋์ ์ด 'Used'๋ผ๋ ๊ฐ๋
์, ์ ์ ๊ฐ ํ์ด์ง์ ํด๋นํ๋ ์ฃผ์์ '์ ๊ทผ' ํ๋ ๊ฒ์ผ๋ก ๋์นํด์ ์๊ฐํด ๋ฐฉ๋ฒ์ ๊ณ ์ํ๋ ค๋ค๊ฐ ๋ถ๊ฐ๋ฅํจ(๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ด ์์์ง๋ ๋ชจ๋ฅธ๋ค)์ ๊นจ๋ฌ์๋ค.
์๋ํ๋ฉด ์ ์ ํ๋ก๊ทธ๋จ์ด ์ด๋ค ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผ ํ์ ๋ ๊ทธ ์ฌ์ค์ ์ปค๋์ด โ์์์ผโ ๊ทธ ํ์ด์ง๋ฅผ ๊ด๋ฆฌ ๋ฆฌ์คํธ ์์์ head๋ก ์ฎ๊ธธ ์๊ฐ ์์ ํ ๋ฐ, ์ปค๋์ด ์ ์ ๊ฐ ์ด๋ค ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ์์ โ์๋โ ๋ฐฉ๋ฒ์ ์ธํฐ๋ฝํธ ๋ฐ์ ์๋ค. ์ปค๋์ด โ์๋ค๋โ๊ฑด ์ปค๋ ๋ชจ๋๊ฐ '์ผ์ ธ์ผ'(๋น์ ํ์๋ฉด ์์์ด ์์ด์ผ) ์ํ ๋ฐ ์ ์ ๋ชจ๋์์ ์ปค๋ ๋ชจ๋๊ฐ ์ผ์ง๋ ค๋ฉด(์ปค๋์ ๊นจ์ฐ๋ ค๋ฉด) ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํด์ผ ํ๋ค. ์ด๋ง์ ๊ฒฐ๊ตญ LRU ๊ตฌํ์ ์ํด์๋ ์ ์ ํ๋ก๊ทธ๋จ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ๋ ๋ชจ๋ ์๊ฐ์ ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์์์ผ์ผ ํ๋ค๋ ๋ง๊ณผ ๊ฐ์์ง๋ค. ๋ง๋ ์๋๋ ์๊ธฐ.
๊ทธ๋์ ๋๋ถ๋ถ์ kernel ๊ตฌํ์์ page replacment policy ๋ก clock ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํ๋ค.
clock ์๊ณ ๋ฆฌ์ฆ์ ํ๋์จ์ด์ ๋์์ ๋ฐ๋๋ค. ์ ์ ํ๋ก๊ทธ๋จ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ์ ๋, ํด๋น ํ์ด์ง์ PTE์ ํด๋น ํ์ด์ง๊ฐ ์ ๊ทผ ๋์๋ค๊ณ ํ๋ ๋นํธ(accessed)๋ฅผ ํ๋์จ์ด๊ฐ ์ผ์ค๋ค. ์ด ๊ณผ์ ์์ ํ์ด์ง ํดํธ๋ ์ผ์ด๋์ง ์๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ค์ evict๊ฐ ํ์ํ ์์ ์ด ๋์์ผ ์ปค๋์ด ์ด ๋นํธ๋ฅผ ์ฐธ๊ณ ํด์ ํฌ์์ ํ์ด์ง๋ฅผ ์ ํ๋ค.
๊ทธ๋ฆผ์์ ๋ณด์ด๋ ๊ฒ๊ณผ ๊ฐ์ด, ํ๋ ์ ํฌ์ธํฐ๊ฐ ์๊ณ์ ์ด์นจ์ฒ๋ผ ํ ์ด๋ธ์ ์ํํ๋ฉด์ ํฌ์๋ ํ์ด์ง๋ฅผ ์ฐพ๋๋ค. ํด๋น ํ์ด์ง์ ์ฐธ์กฐ ๋นํธ(accessed bit)๊ฐ 1์ด๋ผ๋ฉด (์ผ์ ธ์๋ค๋ฉด) 0์ผ๋ก ๋ง๋ค๊ณ ๋ค์ ํ์ด์ง๋ก ๋์ด๊ฐ๋ค. ์ด๋ฅผ ๋ฐ๋ณตํ๋ค ์ฐธ์กฐ ๋นํธ๊ฐ 0์ธ ํ์ด์ง๋ฅผ ๋ง๋๋ค๋ฉด ๊ทธ ํ์ด์ง๋ฅผ ํฌ์์ ํ์ด์ง๋ก ์ผ๊ณ ๋จ์ evict ๊ณผ์ ์ ์ด์ด์ ์งํํ๋ค.
๊ทธ ์ดํ๋ก ํ๋ก๊ทธ๋จ์ด ๊ณ์ ์คํ๋๋ค๊ฐ ๋ค์ evict๊ฐ ํ์ํ ์๊ฐ์ด ๋ฐ์ํ๋ค๊ณ ํ์. ํ๋์จ์ด๋ ์ด์ evict๊ฐ ์ฒ๋ฆฌ๋ ์ดํ๋ถํฐ, ๋ค์ ๋งค ์ ๊ทผ๋ง๋ค ํด๋น PTE์ ๋นํธ๋ฅผ ์ผ์ฃผ๊ณ ์์์ ๊ฒ์ด๋ค. ์ด๋ฒ์๋ kernel์ ์์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค. ์ด๋ ์ฐธ์กฐ ๋นํธ๊ฐ 0์ธ ํ์ด์ง๋ ์ด์ evict ๋ฐ์ ์๊ฐ๊ณผ ํ์ฌ์ evict ๋ฐ์ ์๊ฐ ์ฌ์ด์ ์ ํ ์ ๊ทผ๋์ง ์์์์ ์ถ๋ก ํด ๋ผ ์ ์๋ค. ์ด๋ฅผ ํตํด ์ฐ๋ฆฌ๋ ๊ทธ ํ์ด์ง๊ฐ recently ํ๊ฒ used๋์ง ์์๋ค๊ณ ํ๋จํ ์ ์๋ค.
clock ์๊ณ ๋ฆฌ์ฆ์ LRU๋ฅผ approximate ํ ์ ์๋ค. ์๋ํ๋ฉด ์ฐ๋ฆฌ๋ ์ด๋ค ํ์ด์ง๊ฐ ๊ฐ์ฅ ์ต๊ทผ์ ์ฌ์ฉ๋์๋์ง์ ๋ํด์๋ ์ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋ค์ ๋งํด, list๋ก LRU๊ฐ ๊ตฌํ๋ ์ํฉ์ด๋ผ๋, list์ head์ ์ด๋ค ํ์ด์ง๊ฐ ์๋์ง ๋ณด๋ค๋ tail์ ์ด๋ค ํ์ด์ง๊ฐ ์๋์ง์๋ง ๊ด์ฌ์ ๋๋ฉด ๋๋ค. ์ฆ, ์ด๋ค ํ์ด์ง๊ฐ ๊ฐ์ฅ โ์ฝ๋โํ ํ์ด์ง ์ธ์ง๋ง ์๋ฉด๋๋ค. ๊ทธ๋์ ํด๋ฝ์ ์ฌ์ฉํ๋ฉด LRU์ ๊ทผ์ ํ ์ํ์ ํ ์ ์๊ฒ ๋๋ค.
"writable ํ์ง ์์ ํ์ด์ง์ ๊ณ์ ์ฐ๊ธฐ๋ฅผ ํ๊ณ ์์๋๋ฐ ์ฌํ๊ป ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์์์ด.
์ด๊ฒ ๋ญ์ง...???"
lazy load๋ฅผ ์ํํด์ฃผ๋ do_lazy_load
ํจ์์ด๋ค. ์ค๊ฐ ๋ผ์ธ ์ ๋์ file_read_at
์ ๋ณด๋ฉด user buffer๋ก page์ va๋ฅผ ์ฃผ๊ณ ์๋ค. ํ์ง๋ง ๋ง์ฝ ์ด page๊ฐ read-only๋ผ๋ฉด? page fault in kernel context ๊ฐ ๋ฐ์ํด ์ปค๋์ด ์ฃฝ๊ฒ ๋ ๊ฒ์ด๋ค. ์ฌ์ค ์ด๋ฌํ ์์ฌ์์ด ๊ณ์ ์ด ์ฝ๋๋ก test๋ฅผ ๋๋ฆฌ๊ณ ์์๋๋ฐ, ์๋ฌด ๋ฌธ์ ๊ฐ ์์๋ค๋ ๊ฑธ ๋ค๋ฆ๊ฒ์ผ ๋ฐ๊ฒฌํ๋ค.
ํ๋์ ๋ฌผ๋ฆฌ์ฃผ์๋ ๋๊ฐ์ง ๊ฒฝ๋ก๋ก ์ ๊ทผ๋ ์ ์๋ค. ํ๋๋ ์ ์ ์ virtual address (page->va
) ์ ํด๋นํ๋ PTE, ๋ค๋ฅธ ํ๋๋ ์ปค๋์ virtual address (frame->kva
) ์ ํด๋นํ๋ PTE. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ do_lazy_load
์คํ๋๊ธฐ ์ , ์ ์ ํ์ด์ง์ PTE๊ฐ pml4_set_page์ ํตํด not writable ๋ก ์ง์ ๋๋๋ผ๋, ์ปค๋ kva๋ฅผ ํตํด writeํ ์ ์๋ค. ์ปค๋ PTE๋ (์ปค๋ text ์์ญ ์ ์ธ) ๋ชจ๋ writable ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ผ์ ์ ๊ฒฝ์ฐ์๋ file_read_at
์ user buffer ์ฃผ์๋ก frame->kva
๋ฅผ ์ ๋ฌํ๋ฉด ๋ฌธ์ ์์ด lazy load๋ฅผ ์ํํ ์ ์๊ฒ ๋๋ค. ํ์ง๋ง page->va
๋ฅผ ์ ๋ฌํ์ ๋๋ ์ ์๋ฌด ๋ฌธ์ ๊ฐ ์์๋ ๊ฒ์ผ๊น?
skeleton ์ฝ๋๋ฅผ ํ์ฐธ๋์ ๋ฏ์ด๋ณด๊ณ , stack overflow๋ ๋ค์ ธ๋ณด๊ณ , ์กฐ๊ต๋๊ป ์ง๋ฌธ๋ ํด๋ณธ ๊ฒฐ๊ณผ, ์ด๋ pintos ๋ถํ
์์ ๊ธฐ๋ณธ ์ค์ ๋๋ถ์ด์์์ ์๊ฒ ๋์๋ค.
x86-64 ์ํคํ ์ณ์๋ Control Register๊ฐ ์กด์ฌํ๋ค. ํ์ด์ง ํ ์ด๋ธ ๊ณ์ธต์์ ์ต์์ ํ ์ด๋ธ์ธ pml4์ ์์ ์ฃผ์๋ฅผ ์ ์ฅํด๋ฌ์ผ ํ๋(๊ทธ๋์ผ mmu๊ฐ ์ด ์ฃผ์๋ฅผ ๋ณด๊ณ walking ํ ์ ์๋ค) CR3 (PDBR : Page Directory Base Register), page fault ๋ฐ์ ์ cpu๊ฐ fault address ๋ฅผ ์ ์ด๋๋ CR2 ๋ชจ๋ ์ด Control Register ์ด๋ค.
์ง๊ธ ๋ฌธ์ ๊ฐ ๋์๋ ๋ ์ง์คํฐ๋ CR0. ํนํ Write Protection (WP) bit ์๋ค. WP bit๊ฐ ๊บผ์ ธ ์๋ค๋ฉด, ring 0 (kernel mode) ์ฝ๋๋ ์ฐ๊ธฐ์ ๋ํ ์ ๊ทผ ์ ํ์ ๋ฌด์ํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ pintos์ ๋ถํ ๊ณผ์ ์์ CR0์ WP bit๋ ์ผ์ง์ง ์๋๋ค.
๋ฐ๋ผ์ kernel code๋ write ์ ๊ทผ์ ํ์ ๋ฌด์ํ๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ ์ ์์๋ ๊ฒ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด ์ ์ด๋ฌํ ์ค์ ์ด ํ์ํ ๊น? kernel์ ์ ์ ํ๋ก์ธ์ค๋ค์ supervisor ์ด๋ค. user์๊ฒ read-only์ธ page๋ supervisor๋ ํ์ํ๋ค๋ฉด ์ฝ๊ณ ์ธ ์ ์์ด์ผ ํ๋ค (e.g. lazy loading์ .text ์์ญ). ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก๋ WP bit๊ฐ set๋์ด ์์ง ์๋ค.
ํ์ง๋ง ์ด WP bit๊ฐ set ๋์ด์์ผ๋ฉด ํธ๋ฆฌํ ๊ฒฝ์ฐ๊ฐ ์๋ค : Copy on write.
์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋จ ํ๋์ ๋ฌผ๋ฆฌ ๊ณต๊ฐ์ ๋ฐ๋ผ๋ณด๋ฉด์ ๊ทธ ๋ฉ๋ชจ๋ฆฌ ๋ด์ฉ์ ๊ณต์ ํ๋ค๊ฐ (๊ทธ ๋ฉ๋ชจ๋ฆฌ๋ read-only๋ก ์ค์ ํด๋๋ค), ์ด๋ ํ ํ๋ก์ธ์ค๊ฐ ํด๋น ์์ญ์ ์ฐ๊ธฐ(write)๋ฅผ ์๋ํ๋ฉด ๊ทธ์ ์์ผ(on) ์๋ํ ํ๋ก์ธ์ค ๋ง์ ์ํ ๋ฌผ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํ์ฌ ์๋ ๋ด์ฉ์ ๋ณต์ฌํด์ค๋ค (copy). ์ด ๋ ์ปค๋์ write์ ๋ํ ์๋๋ฅผ page fault๋ฅผ ํตํด ์ธ์งํ๊ฒ ๋๋๋ฐ, WP bit๊ฐ set ๋์ด ์์ง ์๋ค๋ฉด, (์ ์ ์ write ์๋๋ ์ ์ ๊ฐ ์ผ์ผํค๋ page fault๋ฅผ ํตํด ์ถฉ๋ถํ ์ธ์งํ ์ ์์ง๋ง) ์ปค๋ ์๊ธฐ์์ ์ด write ์๋๋ฅผ ํ๋ ์ํฉ์ ๋ํด์๋ ์ธ์งํ ์ ์๊ฒ ๋๋ค (์์คํ ์ฝ๋ก ์ธํด ์ ์ ์ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค๊ฐ ํด๋น ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ write๋ฅผ ์๋ํ๊ฒ ๋ ์๋ ์๊ธฐ ๋๋ฌธ์, ์ปค๋์ ์๊ธฐ ์์ ์ด ์ผ์ผํค๋ page fault๋ ์ธ์งํ ์ ์์ด์ผ ํ๋ค). ๊ทธ๋์ WP bit๋ฅผ set ํจ์ผ๋ก์จ ์ปค๋์ ์๊ธฐ ์์ ์ write ์๋์ ๋ํด์๋ ์ถฉ๋ถํ ์ธ์งํ ์ ์๊ฒ ๋๋ค. ๋ฆฌ๋ ์ค์์๋ ์ด ๊ฒฝ์ฐ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด WP bit์ setํด ์ฃผ๊ณ ์๋ค.
์ด๋ฒ ํ๋ก์ ํธ๋ฅผ ํตํด ํญ์ ์ด๋ก ์ผ๋ก๋ง ๊ณต๋ถํด ์ ์๋ฟ์ง ์์๋ ๊ฐ์๋ฉ๋ชจ๋ฆฌ์ ์ค์ ๋์๋ฐฉ์์ ์์ฃผ ๋ช ์พํ๊ฒ ์ดํดํ ์ ์์๋ค. pintos์ ๊ตฌํ์ด generalํ๋ค๊ณ ๋ณด๊ธฐ์ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์์ง ๊ณต๋ถํด์ผ ํ ๊ฒ์ด ๋ง์ด ๋จ์์ง๋ง, ์ด์จ๋ ์ง์ ์ฝ๋๋ฅผ ์ณ๋ณด๋ฉด์ ๊ณต๋ถํ๋ ๊ฒ์ด ์ ๋ง ์ค์ํ๊ตฌ๋, ์ฌ๋๋ค์ด ๊ดํ ๊ทธ๋ ๊ฒ ๋งํ๋ ๊ฒ์ด ์๋๊ตฌ๋ ํ๊ณ ๋๋ผ๊ฒ ๋ 2์ฃผ์๋ค.
์์ฝ์์ต๋๋ค~