14. ๋ง๊ฐ : ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ API
stack
: ํ๋ก๊ทธ๋๋จธ๋ฅผ ์ํด, ์ปดํ์ผ๋ฌ์ ์ํด ์๋์ผ๋ก ํ ๋น๊ณผ ํด์ ๊ฐ ์ด๋ฃจ์ด์ง๋ค(automatic).
void func() {
int x;
}
-
func()
๊ฐ ํธ์ถ๋๋ฉด ์คํ์ ๊ณต๊ฐ์ ํ๋ณดํ๊ณ ,func()
๊ฐ ์ข ๋ฃ๋๋ฉด ์คํ์์ ๊ณต๊ฐ์ ํด์ ํ๋ค. -
heap
: ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ํ ๋น๊ณผ ํด์ ๋ฅผ ํด์ผํ๋ค.
void func() {
int *x = (int *) malloc(sizeof(int));
free(x);
}
-
malloc()
์ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๊ณ ,free()
๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ค. -
heap์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ , func()์ ์คํ์๋ heap์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ์ฃผ์๋ฅผ ์ ์ฅํ๋ค.
stack
๋งํผ ๋ช ์์ ์ด๊ณ ๋จ์ํ๊ธฐ๋ ํ์ง๋ง, ์ฐ์์๊ฐ ๋ค์ํ๊ณ ์ค์๋ฅผ ํ ์ฌ์ง๊ฐ ๋ง๋ค.
14.2 malloc()
ํจ์
-
malloc()
์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ๋ ํจ์์ด๋ค. -
์ฝ๊ฐ ๋ ์์ธํ๊ฒ ์ค๋ช ํ๋ฉด,
malloc()
์ ํ์ ์์ฒญํ ๊ณต๊ฐ์ ํฌ๊ธฐ๋ฅผ ๋ฐ์ ์ฑ๊ณตํ๋ฉด ํ ๋นํ ๋ฉ๋ชจ๋ฆฌ์ ์ฃผ์๋ฅผ ๋ฐํํ๊ณ , ์คํจํ๋ฉดNULL
์ ๋ฐํํ๋ค. -
์ฐธ๊ณ ๋ก
sizeof()
๋ ์ฐ์ฐ์์ ๊ด์ ์์ ๋ฐ๋ผ๋ณด๋ฉด ์กฐ๊ธ ๋ ์ ์ ํ ๋ถ๋ถ์ด ์๋ค.sizeof()
๋ ์ปดํ์ผ ์๊ฐ์ ๊ณ์ฐ๋๋ ์ฐ์ฐ์์ด๋ค.- ์๋ฅผ๋ค์ด
int *x = malloc(sizeof(int) * 10); printf(sizeof(x))
. ์ด ์ฝ๋์์๋ 4 ๋๋ 8๊ฐ์ด ๋ฐํ๋๋ค. - ์ฆ ๋์ ์ผ๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ํฌ๊ธฐ๊ฐ ์๋, ํฌ์ธํฐ์ ํฌ๊ธฐ๋ฅผ ๋ฐํํ๊ธฐ ๋๋ฌธ์ด๋ค.
14.3 free()
ํจ์
-
free()
๋malloc()
์ ํตํด ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ํจ์์ด๋ค. -
free()
๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ ๋ ํ ๋น๋ ์์ญ์ ํฌ๊ธฐ๋ฅผ ์ ํ์๊ฐ ์๋ค. (๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์์ ์ฒ๋ฆฌํ๋ค.)
14.4 ํํ ์ค๋ฅ
| ๊ธฐ๋ณธ์ ์ผ๋ก malloc()
๊ณผ free()
๋ฅผ ์ฌ์ฉํ ๋ ์์ฃผ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋๋ฐ, ํนํ ๊ฐ๋น์ง์ปฌ๋ ํฐ๊ฐ ์๋ ๊ฒฝ์ฐ์ ๋์ฑ ์ ๊ฒฝ์จ์ผ ํ๋ค.
๋ฉ๋ชจ๋ฆฌ ํ ๋น ์์ด๋ฒ๋ฆฌ๊ธฐ
๋ง์ ๋ฃจํด์ ์์ ์ด ํธ์ถ๋๊ธฐ ์ ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ด๋ฏธ ํ ๋น๋์๋ค๊ณ ๊ฐ์ ํ๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ์ง ์๊ณ ์ฌ์ฉํ๋ ค๊ณ ํ ๋, ํ๋ก๊ทธ๋จ์ ์ธ๊ทธ๋ฉํ ์ด์ ํดํธ๋ฅผ ๋ฐ์ํ๊ณ ์ข ๋ฃ๋๋ค.
| ์ฌ์ค ์ด๋ฌํ ๊ฒฝ์ฐ๋ ๋๋ฌด ํํด์ ์กฐ๊ธ ๋ ์์ ํ ๋ฃจํด์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
๋ฒํผ ์ค๋ฒํ๋ก์ฐ : ์ถฉ๋ถํ์ง ์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
ํ๋ก๊ทธ๋จ์ด ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๋ณด๋ค ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๋ ค๊ณ ํ ๋, ๋ฌธ์ ์์ด ๋์ํ๋ ๊ฒ ์ฒ๋ผ ๋ณด์ด์ง๋ง, ์ค์ ๋ก๋ ํ ๋น๋ฐ์ง ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค. ๋ค๋ฅธ ๋ณ์๋ ์ค์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฎ์ด์ฐ๋ ๊ฒฝ์ฐ๊ฐ ๋ฐ์ํ ์ ์๊ณ , ๋ณด์์ ์ผ๋ก ๋งค์ฐ ์ํํ๋ค.
ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ด๊ธฐํ ํ์ง ์๊ธฐ
malloc()
์ ํตํด ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ๋ ์ด๊ธฐํ๋์ง ์๋๋ค. ๋์ค์ uninitialized read
๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก ๊ณต๊ฒฉ์์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์๊ฒ ๋๋ ๋ณด์์ ์ธ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ ํด์ ํ์ง ์๊ธฐ
free()
๋ฅผ ํธ์ถํ์ง ์์ผ๋ฉด, ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ๋ค. ์ด๋ ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ๊ณ์ ์ฆ๊ฐํ๊ฒ ๋๊ณ , ๊ฒฐ๊ตญ ํ๋ก๊ทธ๋จ์ด ๋ ์ด์ ์คํ๋์ง ์๊ฒ ๋๋ค.
๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ด ๋๋๊ธฐ ์ ์ ๋ฉ๋ชจ๋ฆฌ ํด์ ํ๊ธฐ
dangling pointer
๋ ์ด๋ฏธ ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ ๋ ๋ฐ์ํ๋ค. ์ด๋ ํ๋ก๊ทธ๋จ์ด ์ข
๋ฃ๋๊ฑฐ๋, ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ์ ๋ ๋ฐ์ํ ์ ์๋ค.
๋ ๋ฒ ํด์ ํ๊ธฐ
double free
๋ ์ด๋ฏธ ํด์ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ค์ ํด์ ํ๋ ค๊ณ ํ ๋ ๋ฐ์ํ๋ค. ์ด๋ ํ๋ก๊ทธ๋จ์ด ์ข
๋ฃ๋๊ฑฐ๋, ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ์ ๋ ๋ฐ์ํ ์ ์๋ค.
free()
์๋ชป ํธ์ถํ๊ธฐ
14.5 ์ด์์ฒด์ ์ ์ง์
-
malloc()๊ณผ free()๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํจ์์ด๊ธฐ ๋๋ฌธ์, ์์คํ ์ฝ์ ์ง์ ์ ์ผ๋ก ์ธ๊ธํ์ง๋ ์์์ง๋ง, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด๋ ๋น์ฐํ ์์คํ ์ฝ์ ์ฌ์ฉํ๋ค.
-
brk
,sbrk
์์คํ ์ฝ์ ์ฌ์ฉํ๊ณ ์์ง๋ง, ์ง์ ์ ์ผ๋ก ์ฌ์ฉํ์ง๋ ์๋๋ค.
15. ์ฃผ์ ๋ณํ์ ์๋ฆฌ
LDE์์ ํ๋ก๊ทธ๋จ์ด ํ๋์จ์ด์ ์ํด ์ง์ ์คํ๋๋ฉด์๋, ์ฝ๊ฐ์ ํ๋์จ์ด ์ง์์ ๋ฐ์ ์ด์์ฒด์ ์ ๊ฐ์ ์ผ๋ก ์ด๋ป๊ฒ ๊ฐ์ํ๋ฅผ ์ ๊ณตํ๋ฉด์๋, ํ๋ก๊ทธ๋จ์ ๋ฐฉํดํ์ง ์๋์ง์ ๋ํด์ ์์๋ดค๋ค, ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ํ์๋ ๋ง์ฐฌ๊ฐ์ง๋ก, ๋น์ทํ ๋์์ ์์๋ณธ๋ค.
-
๋ฉ๋ชจ๋ฆฌ ๊ฐ์ํ์์๋
์ ์ด
์ํจ์จ์ฑ
์ ๋์์ ์ถ๊ตฌํ๋ค. -
์ ์ด
: ํ๋ก๊ทธ๋จ์ด ์๊ธฐ ์์ ์ ๋ฉ๋ชจ๋ฆฌ ์ด์ธ์ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ์ง ๋ชปํ๋๊ฒ์ ์ด์์ฒด์ ๊ฐ ๋ณด์ฅํ๋ค. -
ํจ์จ์ฑ
: ํ๋์จ์ด์ ์ง์์ผ๋ก ํ์ฌ๊ธ, ๋ค์ํ ์์์ ์ฌ์ฉํ์ฌ ๊ฐ์ํ๋ฅผ ํจ์จ์ ์ผ๋ก ์ํํ ์ ์๋๋ก ํ๋ค. -
์ฌ๊ธฐ์ ๋ค๋ฃฐ ๊ธฐ๋ฒ์
hardware-based address translation
, ์งง๊ฒ๋address translation
์ด๋ค. -
address translation
์ ํ๋ก๊ทธ๋จ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ ๋, ๊ฐ์ ์ฃผ์๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์๋ก ๋ณํํ๋ ๊ธฐ๋ฒ์ด๋ค. -
๊ทธ๋ฆฌ๊ณ ํด๋น ๊ธฐ๋ฒ์ ๋ค๋ฃจ๋ฉฐ ๋ฌ์ฑํ๊ณ ์ ํ๋ ๋ชฉํ๋ ํ๋ก๊ทธ๋จ์ด ์์ ์ ์ ์ฉ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ง๊ณ ์๋ค๊ณ ๋ฏฟ๊ฒ ํ๋ฉด์๋, ์ค์ ๋ก๋ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๋๋ก ํ๋ ๊ฒ์ด๋ค.
15.1 ๊ฐ์
CPU ๊ฐ์ํ ๋ถ๋ถ์์ LDE์ ๋ํ ์ด์ผ๊ธฐ๋ฅผ ํ์๋๋ฐ, ์์ฝํ์๋ฉด ๋๋ถ๋ถ์ ํ๋ก๊ทธ๋จ์ ํ๋์จ์ด์์ ์ง์ ์คํ๋๋ฉด์, ํ๋ก์ธ์ค๊ฐ ์์คํ ์ฝ์ ํธ์ถํ๊ฑฐ๋ ํ์ด๋จธ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด, ํ๋์จ์ด๋ ์ปค๋๋ก ์ ์ด๊ถ์ ๋๊ธฐ๊ณ , ์ด์์ฒด์ ๊ฐ ์ ์ ํ ์์ ์ ์ํํ๋ค. ์ฆ ์คํ ํ๋ก๊ทธ๋จ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ง ์๋๋ก ์ ์ ํ ์์ ์ ๊ฐ์ ํด์ ํ๋์จ์ด ์ง์์ ๋ฐ์ ์ญํ ์ ์ํํ๋ค๋ ๊ฒ์ด๋ค.
-
LDE์์ ์์ ๊ฐ์ ๊ฒ๋ค์ ๋ฌ์ฑํ๊ธฐ ์ํด์, ์ค์ํ ํฌ์ธํธ๋ฅผ
ํจ์จ์ฑ
๊ณผ์ ์ด
๋ผ๊ณ ํ ์ ์์๋ค. -
๋ฉ๋ชจ๋ฆฌ ๊ฐ์ํ๋ ๋ง์ฐฌ๊ฐ์ง๋ก, ๊ฐ์ํ๋ฅผ ์ ๊ณตํ๋ ๋ชฉํ๋
ํจ์ธ์ฑ
๊ณผ์ ์ด
๋ฅผ ๋ฌ์ฑํ๊ธฐ ์ํจ์ด๋ค. -
๋ฌผ๋ก ์ด๋ฐ๊ฒ๋ค์ ๋ฌ์ฑํ๋ ค๋ฉด ์ ์ ํ
ํ๋์จ์ด์ ์ง์
์ด ํ์ํ๋ค. -
์ด์ ์ฅ์์์ ๋ง์ฐฌ๊ฐ์ง๋ก, ์ฒ์์๋ ๋จ์ ํ๋์จ์ด์ ์ง์(๋ ์ง์คํฐ๋ง ์ฌ์ฉํ๋ ์ ๋)์์ TLB, ํ์ด์ง ํ ์ด๋ธ๋ฑ ์ ์ฐจ ๋ณต์กํ ํ๋์จ์ด ์ง์์ ๊ณต๋ถํ๋ ๋ฐฉ์์ผ๋ก ์งํํ๋ค.
-
๋ง์ง๋ง์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ํ ๊ด์ ์์
ํจ์จ์ฑ
๊ณผ์ ์ด
์ ๋ชฉํ๋ฅผ ๊ฐ๊ฐ ์์๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.ํจ์จ์ฑ
: ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ํ๋ ๋ฌผ๋ฆฌ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ํด์ผํ๋ค.์ ์ด
: ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ํ๋ ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ํด์ผํ๋ค.
๊ฒฐ๋ก , ํต์ฌ ์ง๋ฌธ
- ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ํ๋ฅผ ๋ฐฐ์ฐ๋ ์์ ์ฅ์์ ํต์ฌ ์ง๋ฌธ์ ๋ค์๊ณผ ๊ฐ๋ค.
์ด๋ป๊ฒ ํจ์จ์ ์ด๊ณ ์ ์ฐํ๊ฒ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ํํ ์ ์์๊น?
-
๋จผ์ ๋ค๋ฃฐ ๊ธฐ๋ฒ์
ํ๋์จ์ด ๊ธฐ๋ฐ ์ฃผ์ ๋ณํ(hardware-based address translation)
, ๊ทธ๋ฅ ์งง๊ฒ์ฃผ์ ๋ณํ(address translation)
์ด๋ผ๊ณ ๋ ํ๋ค. -
ํต์ฌ์ ๊ทธ๋ฅ
ํ๋ก๊ทธ๋จ์ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ๋ฅผ ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ก ์ฌ์ง์ ํ๊ธฐ ์ํด์ ํ๋์จ์ด๊ฐ ์ฃผ์๋ฅผ ๋ณํํ๋ ๊ฒ
์ด๋ค. -
ํ๋์จ์ด๋ง์ผ๋ก๋ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ํ๋ฅผ ์ ๊ณต ํ ์ ์๋ค. ์ด์์ฒด์ ๊ฐ ์ค์ ๋ก ๋ฉ๋ชจ๋ฆฌ์ ๋น๊ณต๊ฐ๊ณผ ์ฌ์ฉ์ค์ธ ๊ณต๊ฐ์ ์๊ณ ๊ด๋ฆฌํด์ผ ํ๋ฉฐ, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ์ ๊ณตํด์ผํ๋ค.
-
๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ํ๋ก๊ทธ๋จ์ด ์์ ์ ์ ์ฉ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ง๊ณ ์๋ค๋ ํ์์ ์ ๊ณตํด์ผ ํ๋ค.
15.1 ๊ฐ์
์ค์ผ์ค๋ง์ ๋ฐฐ์ธ ๋ ๋ฌธ์ ๋ฅผ ์ฝ๊ฒ ์ดํดํ๊ธฐ ์ํด์ ๊ฐ์ ์ ํตํด ๊ณ ๋ ค ์์ธ์ ๋จ์ํ ํ๋ฏ์ด, ์ฌ๊ธฐ์๋ ๊ฐ์ ์ ํตํด ๋ง์ ์ ํ์ฌํญ์ ๋๊ณ ์์ํ๋ค.
- ๋จผ์ ์ฌ์ฉ์ ์ฃผ์ ๊ณต๊ฐ์ ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์ฐ์์ ์ผ๋ก ๋ฐฐ์น๋์ด์ผ ํ๋ค๊ณ ๊ฐ์ ํ๋ค.
- ๊ทธ๋ฆฌ๊ณ ์ฃผ์ ๊ณต๊ฐ์ ํฌ๊ธฐ๊ฐ ๋๋ฌด ํฌ์ง ์๋ค๊ณ ๊ฐ์ ํ๋ค.
- ๋ง์ง๋ง์ผ๋ก, ๊ฐ ์ฃผ์๊ณต๊ฐ์ ํฌ๊ธฐ๊ฐ ๊ฐ๋ค๊ณ ๊ฐ์ ํ๋ค.
์ฌ์๋ณด์ด์ง๋ง, ๊ฐ์ ์ ์ํํ๋ ๊ณผ์ ์์ ๋จธ๋ฆฌ๊ฐ ๊นจ์ง ์์ ! ๐คช
15.2 ์ฌ๋ก
void func() {
int x = 3000;
x = x + 3;
}
- ์ ์ฝ๋๋ฅผ x86 ์ด์ ๋ธ๋ฆฌ๋ก ๋ณํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
movl 0x0(%ebx), %eax; // 0 + ebx๋ฅผ eax์ ์ ์ฅ
addl $3, %eax; // eax์ 3์ ๋ํ๋ค.
movl %eax, 0x0(%ebx); // eax๋ฅผ ebx์ ์ ์ฅ
์ด ๋ช ๋ น์ด๊ฐ ์คํ๋๋ฉด ํ๋ก์ธ์ค ๊ด์ ์์ ์๋์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ์ด ๋ฐ์ํ๋ค.
(์ถ์ฒ : OSTEP)
-
์ฃผ์ 128์ ๋ช ๋ น์ด๋ฅผ ๋ฐ์
-
์ด ๋ช ๋ น์ด ์คํ(์ฃผ์ 15kb์์ ํ์ฌ)
-
์ฃผ์ 132์ ๋ช ๋ น์ด๋ฅผ ๋ฐ์
-
์ด ๋ช ๋ น์ด ์คํ (๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ ์์)
-
์ฃผ์ 135์ ๋ช ๋ น์ด๋ฅผ ๋ฐ์
-
์ด ๋ช ๋ น์ด ์คํ (์ฃผ์ 15kb์ ์ ์ฅ)
์ง๊ธ ์์ ์ ํ๋ก๊ทธ๋จ ๊ด์ ์์ ์ฃผ์๊ณต๊ฐ์ 0๋ถํฐ 16kb๊น์ง์ ์ฃผ์๊ณต๊ฐ์ ๊ฐ์ง๊ณ ์๋ค. (ํ๋ก๊ทธ๋จ์ด ์์ฑํ๋ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ ์ฐธ์กฐ๋ ์ด ๋ฒ์ ๋ด์ ์์ด์ผ ํ๋ค.)
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ํ๋ฅผ ์ํด ๋ฌผ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ 0์ด ์๋ ๋ค๋ฅธ๊ณณ์ ์์น์ํค๊ณ ์ถ๋ค.
์ด๊ฑธ ์ค์ ๋ก ํ๋ก์ธ์ค ๋ชจ๋ฅด๊ฒ ์ด๋ป๊ฒ ์ฌ๋ฐฐ์น ํ๋๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ํ์ ํต์ฌ์ด๋ค.
์ผ๋จ ์์ ๊ทธ๋ฆผ์ฒ๋ผ ๊ฐ๋จํ ์ํฉ์ด ์์ ์ ์๋ค.
15.3 ๋์ ์ฌ๋ฐฐ์น
-
์ด ๋ฌธ์ ์ ๋ํ ์ฒซ ๋ฒ์งธ ํด๊ฒฐ ์ฌ๋ก๋
๋์ ์ฌ๋ฐฐ์น(dynamic relocation), ๋๋ base and bounds
๋ก ๋ถ๋ฆฌ๋ ๋ฐฉ๋ฒ์ด. -
์ด ๋ฐฉ๋ฒ์ ํ๋ก์ธ์ค๊ฐ ์์๋ ๋, ์ด์์ฒด์ ๊ฐ ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ์ ์ํ ๋ ๊ฐ์ง ๋ ์ง์คํฐ(base, bounds)๋ฅผ ์ค์ ํ๋ค.
-
base
: ํ๋ก์ธ์ค์ ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ ์ง์คํฐ -
bounds
: ํ๋ก์ธ์ค์ ํ ๋น๋ ๋ง์ง๋ง ์ฃผ์๋ฅผ ๊ฐ๋ฆฌํค๋ ๋ ์ง์คํฐ -
๊ทธ๋ฆฌ๊ณ ์์ฃผ ๊ฐ๋จํ ๊ฐ์ํ ๊ณต์์ ์ป์ ์ ์๋ค!
physical address = virtual address + base
-
๊ทธ๋ฌ๋ฉด ์์ฐ์ค๋ฝ๊ฒ
bounds
๋ ๋ณดํธ๋ฅผ ์ํด ์ฐ์ด๋ฉฐ, ์ด ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๋ํ ์ฐธ์กฐ๊ฐ ์ ํจํ์ง ํ์ธํ๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก์๋์ ๊ฐ์ ๊ฐ๋จํ ๋ก์ง์ผ๋ก ๋์ํ๋ค.
if (virtual address < 0 || virtual address > bounds) {
raise an error(fault);
} else {
physical address = virtual address + base;
}
15.4 ํ๋์จ์ด ์ง์ : ์์ฝ
์์ ๋ก์ง์ ๋ฌ์ฑํ๊ธฐ ์ํด์ ํ์ํ ํ๋์จ์ด ์ง์์ ๋ค์๊ณผ ๊ฐ๋ค.
- ์ปค๋ ๋ชจ๋ : ์ ์ ๋ชจ๋์ ํ๋ก์ธ์ค๊ฐ ํน๊ถ ์ฐ์ฐ์ ์ํํ ์ ์๋๋ก ํ๋ค.
- base, bounds ๋ ์ง์คํฐ : ์ฃผ์ ๋ณํ๊ณผ, ๋ฒ์ ๊ฒ์ฌ๋ฅผ ์ํด CPU๋น ๋ ๊ฐ์ ๋ ์ง์คํฐ๊ฐ ํ์ํ๋ค.
- ๊ฐ์ ์ฃผ์๋ฅผ ๋ณํํ๊ณ ๋ฒ์ ์์ ์๋์ง ํ์ธํ๋ ๋ฅ๋ ฅ : ์ฃผ์ ๋ณํ๊ณผ ๊ฒ์ฌ๋ฅผ ์ํ ํ๋ก๊ฐ ํ์ํ๋ค.
- ๋ฒ ์ด์ค/๋ฐ์ด๋๋ฅผ ๊ฐฑ์ ํ๊ธฐ ์ํ privileged instruction : ํ๋ก๊ทธ๋จ ์์ ์ ์ ์ด๋ฅผ ์ค์ ํ ์ ์์ด์ผ ํ๋ค.
- ์์ธ ํธ๋ค๋ฌ ๋ฑ๋ก์ ์ํ privileged instruction : ๋ฒ์๋ฅผ ๋ฒ์ด๋ ์ฃผ์์ ์ ๊ทผํ ๋, ์์ธ ์ฒ๋ฆฌ ์ฝ๋๋ฅผ ํ๋์จ์ด์ ๋ฑ๋กํ ์ ์์ด์ผ ํ๋ค.
- ์์ธ ๋ฐ์ ๊ธฐ๋ฅ : ๋ฒ์๋ฅผ ๋ฒ์ด๋ ์ฃผ์์ ์ ๊ทผํ ๋, ์์ธ๋ฅผ ๋ฐ์์ํฌ ์ ์์ด์ผ ํ๋ค.
15.5 ์ด์์ฒด์ ์ด์
-
์์ ๊ฐ์ ํ๋์จ์ด ์ง์์ ๋ฐ๋๋ค๊ณ ํ๋๋ผ๋, ์ด์์ฒด์ ๋ ์ฌ์ ํ ๋ช ๊ฐ์ง ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํ๋ค.
-
๋จผ์ ๋ฒ ์ด์ค-๋ฐ์ด๋๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์ ์ด์์ฒด์ ๊ฐ ๋ฐ๋์ ๊ฐ์ ํด์ผํ๋ ์์ ์ด ์ธ๊ฐ์ง๊ฐ ์๋ค.
- ํ๋ก๊ทธ๋จ์ด ์์๋ ๋ : ์ด์์ฒด์ ๋ ์ฃผ์ ๊ณต๊ฐ์ด ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ์ฐพ์์ผ ํ๋ค.
- ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ ๋ : ์ด์์ฒด์ ๋ ์ฌ์ฉ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ์ํด์ผ ํ๋ค.
- ์ปจํ
์คํธ ์ค์์นญ : ์ปจํ
์คํธ ์ค์์นญ์ด ์ผ์ด๋ ๋, ํ๋ก์ธ์ค๋ณ ์๋ฃ๊ตฌ์กฐ์ ๋ฒ ์ด์ค-๋ฐ์ด๋ ๋ ์ง์คํฐ ๊ฐ์ ์ ์ฅํด์ผ ํ๋ค. (์ฐธ๊ณ ๋ก ์ด ํ๋ก์ธ์ค๋ณ ์๋ฃ๊ตฌ์กฐ๋ฅผ
PCB
๋ผ๊ณ ํ๋ค.)- ๋น์ฐํ ์๋ก ์คํ๋๋ ํ๋ก์ธ์ค์ ๋ฒ ์ด์ค-๋ฐ์ด๋ ๋ ์ง์คํฐ ๊ฐ์ ๋ก๋ํด์ผ ํ๋ค.
๋ถํ ์ LDE + ๋์ ์ฌ๋ฐฐ์น ![๋ถํ ์ LDE + ๋์ ์ฌ๋ฐฐ์น]((https://github.com/SmallzooDev/OSTEP/assets/121675217/9f3e8fba-2003-4210-9c40-10476366983d)
ํ๋ก์ธ์ค ์คํ์ค
15.6 ์ ๋ฆฌ
๋ฅผ ๋ฐ๋ก ํ๊ธฐ๋ณด๋ค๋ ์ฌ๊ธฐ์ ์๊ฒจ๋ ๋ฌธ์ ๋ฅผ ์์๋ณธ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋์ ์ฌ๋ฐฐ์น๋ ๋นํจ์จ์ ์ด๋ค.
์๋ฅผ๋ค์ด ํ์ด ์์ฃผ ์์ ํ๋ก์ธ์ค๋ผ๋ ๋์ผํ ํฌ๊ธฐ์ ๋ฒ ์ด์ค-๋ฐ์ด๋๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
๊ทธ๋ ๊ฒ ๋ญ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ด๋ถ ๋จํธํ๋ผ๊ณ ํ๋ค.
๋ฉ๋ชจ๋ฆฌ์ ์ค์ ์ด์ฉ๋ฅ ์ ๋์ด๊ธฐ ์ํด์ ๋ ๋์ ๋ฐฉ๋ฒ์ด ํ์ํ๋ฐ, ์ฒซ ๋ฒ์งธ๋ base and bounds๋ฅผ ์ผ๋ฐํ ํ๋ ๊ฒ์ธ๋ฐ ์ด๊ฒ์ segmentation
์ด๋ผ๊ณ ํ๋ค.