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 ํ•˜๋“œ์›จ์–ด ์ง€์› : ์š”์•ฝ

์œ„์˜ ๋กœ์ง์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ ํ•˜๋“œ์›จ์–ด ์ง€์›์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  1. ์ปค๋„ ๋ชจ๋“œ : ์œ ์ €๋ชจ๋“œ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํŠน๊ถŒ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋„๋ก ํ•œ๋‹ค.
  2. base, bounds ๋ ˆ์ง€์Šคํ„ฐ : ์ฃผ์†Œ ๋ณ€ํ™˜๊ณผ, ๋ฒˆ์œ„ ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•ด CPU๋‹น ๋‘ ๊ฐœ์˜ ๋ ˆ์ง€์Šคํ„ฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  3. ๊ฐ€์ƒ ์ฃผ์†Œ๋ฅผ ๋ณ€ํ™˜ํ•˜๊ณ  ๋ฒ”์œ„ ์•ˆ์— ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๋Šฅ๋ ฅ : ์ฃผ์†Œ ๋ณ€ํ™˜๊ณผ ๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ ํšŒ๋กœ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  4. ๋ฒ ์ด์Šค/๋ฐ”์šด๋“œ๋ฅผ ๊ฐฑ์‹ ํ•˜๊ธฐ ์œ„ํ•œ privileged instruction : ํ”„๋กœ๊ทธ๋žจ ์‹œ์ž‘ ์ „์— ์ด๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  5. ์˜ˆ์™ธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก์„ ์œ„ํ•œ privileged instruction : ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์ฃผ์†Œ์— ์ ‘๊ทผํ•  ๋•Œ, ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ์ฝ”๋“œ๋ฅผ ํ•˜๋“œ์›จ์–ด์— ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  6. ์˜ˆ์™ธ ๋ฐœ์ƒ ๊ธฐ๋Šฅ : ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚œ ์ฃผ์†Œ์— ์ ‘๊ทผํ•  ๋•Œ, ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

15.5 ์šด์˜์ฒด์ œ ์ด์Šˆ

  • ์œ„์™€ ๊ฐ™์€ ํ•˜๋“œ์›จ์–ด ์ง€์›์„ ๋ฐ›๋Š”๋‹ค๊ณ  ํ•˜๋”๋ผ๋„, ์šด์˜์ฒด์ œ๋Š” ์—ฌ์ „ํžˆ ๋ช‡ ๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด์•ผ ํ•œ๋‹ค.

  • ๋จผ์ € ๋ฒ ์ด์Šค-๋ฐ”์šด๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์šด์˜์ฒด์ œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ๊ฐœ์ž…ํ•ด์•ผํ•˜๋Š” ์‹œ์ ์ด ์„ธ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.

    • ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘๋  ๋•Œ : ์šด์˜์ฒด์ œ๋Š” ์ฃผ์†Œ ๊ณต๊ฐ„์ด ์ €์žฅ๋  ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฐพ์•„์•ผ ํ•œ๋‹ค.
    • ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋  ๋•Œ : ์šด์˜์ฒด์ œ๋Š” ์‚ฌ์šฉ๋œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšŒ์ˆ˜ํ•ด์•ผ ํ•œ๋‹ค.
    • ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ : ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์ด ์ผ์–ด๋‚  ๋•Œ, ํ”„๋กœ์„ธ์Šค๋ณ„ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋ฒ ์ด์Šค-๋ฐ”์šด๋“œ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค. (์ฐธ๊ณ ๋กœ ์ด ํ”„๋กœ์„ธ์Šค๋ณ„ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ PCB๋ผ๊ณ  ํ•œ๋‹ค.)
      • ๋‹น์—ฐํžˆ ์ƒˆ๋กœ ์‹คํ–‰๋˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ ๋ฒ ์ด์Šค-๋ฐ”์šด๋“œ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ ๋กœ๋“œํ•ด์•ผ ํ•œ๋‹ค.

๋ถ€ํŒ…์‹œ LDE + ๋™์  ์žฌ๋ฐฐ์น˜ ![๋ถ€ํŒ…์‹œ LDE + ๋™์  ์žฌ๋ฐฐ์น˜]((https://github.com/SmallzooDev/OSTEP/assets/121675217/9f3e8fba-2003-4210-9c40-10476366983d)

ํ”„๋กœ์„ธ์Šค ์‹คํ–‰์ค‘ ํ”„๋กœ์„ธ์Šค ์‹คํ–‰์ค‘

15.6 ์ •๋ฆฌ

๋ฅผ ๋”ฐ๋กœ ํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์—ฌ๊ธฐ์„œ ์ƒ๊ฒจ๋‚œ ๋ฌธ์ œ๋ฅผ ์•Œ์•„๋ณธ๋‹ค.

๊ธฐ๋ณธ์ ์œผ๋กœ ๋™์  ์žฌ๋ฐฐ์น˜๋Š” ๋น„ํšจ์œจ์ ์ด๋‹ค.

์˜ˆ๋ฅผ๋“ค์–ด ํž™์ด ์•„์ฃผ ์ž‘์€ ํ”„๋กœ์„ธ์Šค๋ผ๋„ ๋™์ผํ•œ ํฌ๊ธฐ์˜ ๋ฒ ์ด์Šค-๋ฐ”์šด๋“œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ๋‚ญ๋น„๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋‚ด๋ถ€ ๋‹จํŽธํ™”๋ผ๊ณ  ํ•œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ์˜ ์‹ค์ œ ์ด์šฉ๋ฅ ์„ ๋†’์ด๊ธฐ ์œ„ํ•ด์„œ ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•œ๋ฐ, ์ฒซ ๋ฒˆ์งธ๋Š” base and bounds๋ฅผ ์ผ๋ฐ˜ํ™” ํ•˜๋Š” ๊ฒƒ์ธ๋ฐ ์ด๊ฒƒ์„ segmentation์ด๋ผ๊ณ  ํ•œ๋‹ค.