์ •๊ธ€/TIL

[TIL] - 2023.06.11

Casteira 2023. 6. 11. 23:26

๐Ÿ“Œ  ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ

 

๐Ÿ“Œ - multi-oom`์€ memory leak์„ ์ธก์ •ํ•˜๋Š” ํ…Œ์ŠคํŠธ์ธ๋ฐ ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ์ธก์ •ํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•ด์„œ ์ฐพ์•„๋ด„ :

์žฌ๊ท€์ ์œผ๋กœ ์ž์‹ํ”„๋กœ์„ธ์Šค๋ฅผ forkํ•ด์„œ ๋” ์ด์ƒ fork ํ•  ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ์ง„ํ–‰ํ•˜๊ณ  ์ฒ˜์Œ forkํ•œ ์ˆซ์ž๋ฅผ ์ €์ •ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ด๊ฒƒ์„ 10๋ฒˆ ๋ฐ˜๋ณตํ•˜๋ฉด์„œ ์ฒ˜์Œ forkํ•œ ์ˆ˜์™€ ๋น„๊ตํ•˜๋ฉด์„œ ์ฒ˜์Œ๊ณผ ๋‹ค๋ฅด๋‹ค๋ฉด ๋ฉ”๋ชจ๋ฆฌ์— ๋ˆ„์ˆ˜๊ฐ€ ์ƒ๊ธด ๊ฒƒ์ด๋ฏ€๋กœ fail์„ ๋ฐ˜ํ™˜ํ•˜๊ฒŒ ๋œ๋‹ค.

int
main (int argc UNUSED, char *argv[] UNUSED) {
  msg ("begin");
  int first_run_depth = make_children ();
  CHECK (first_run_depth >= EXPECTED_DEPTH_TO_PASS, "Spawned at least %d children.", EXPECTED_DEPTH_TO_PASS);

  for (int i = 0; i < EXPECTED_REPETITIONS; i++) {
    int current_run_depth = make_children();
    if (current_run_depth < first_run_depth) {
      fail ("should have forked at least %d times, but %d times forked", 
              first_run_depth, current_run_depth);
    }
  }

  msg ("success. Program forked %d iterations.", EXPECTED_REPETITIONS);
  msg ("end");
}

multi-oom์„ ํ…Œ์ŠคํŠธ ํ•˜๋ฉด์„œ fdt๋ฅผ ์ดˆ๊ธฐํ™” ์‹œํ‚ฌ ๋•Œ palloc_get_page๋ฅผ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐ
palloc.c๋ฅผ ๋ณด๋‹ˆ get_page๋Š” palloc_get_multiple์—์„œ FDT_PAGES๋ฅผ 1์„ ๋„ฃ์–ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ

 
/* Frees the page at PAGE. */
void
palloc_free_page (void *page) {
	palloc_free_multiple (page, 1);
}
 

 

 

๊ทธ๋ž˜์„œ FDT_PAGES๋ฅผ 1๋กœ ํ•˜๋Š” ๊ฒƒ๊ณผ 2๋กœ ํ•˜๋Š” ๊ฒƒ์˜ ์ฐจ์ด๊ฐ€ ๊ถ๊ธˆํ•ด์„œ ์ฐพ์•„๋ณด๋‹ˆ๊นŒ

palloc_get_multiple(PAL_ZERO, FDT_PAGES);

palloc_get_page(cur->fdt);

 

PAGE๋ฅผ 2๋กœ ํ•  ๊ฒฝ์šฐ์— fork๋ฅผ ํ•ด์„œ kernel memory๋ฅผ ์ฑ„์šฐ๋Š” ๊ฒƒ์ด 1๋ณด๋‹ค 2๊ฐ€ ๋” ๋นจ๋ผ์„œ

์‹คํ–‰์„ ํ–ˆ์„ ๋•Œ, 1๋กœ ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค 2๋กœํ•˜๋Š”๊ฒŒ ์กฐ๊ธˆ ๋” ์‹œ๊ฐ„์ด ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ์„ ์•Œ๊ฒŒ๋จ.


 

๐Ÿ’ญ  ๋А๋‚€ ์  & ๋ฐฐ์šด ์ 

 

3์ฃผ์ฐจ๋Š” ๋” ์ž์„ธํ•˜๊ฒŒ

 


 

๐Ÿ”ฅ  ๋‚ด์ผ ๊ณต๋ถ€ํ•  ๋‚ด์šฉ

 

-gitbook

-Virtual Memory

 

 

 


 

๐Ÿ—’๏ธ  ํฌ์ŠคํŒ…

 

 

 

 

๋”๋ณด๊ธฐ

ใ€Œ ๋‚˜์œ ์Šต๊ด€์„ ๋ฐ”๊พธ๋ ค ํ•  ๋•Œ ์šฐ๋ฆฌ๊ฐ€ ์ฆ‰์‹œ ์‹ค์ฒœํ•  ์ˆ˜ ์žˆ๋Š” ํ–‰๋™์€ ๋ฌด์—‡์ผ๊นŒ? ๋ฐ˜๋Œ€๋กœ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค! ใ€

-์—ํ”ฝํ…Œํ† ์Šค, ๋Œ€ํ™”๋ก, 1.27. 4

 

๋ถˆ๋ฉด์ฆ ํ™˜์ž๊ฐ€ ์žˆ์„ ๋•Œ ๊ธฐ์กด์˜ ์˜๋ฃŒ๊ณ„์—์„œ๋Š” ์ด์™„ ๊ธฐ์ˆ ์„ ๊ฐ€๋ฅด์น˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ธ ์ฒ˜๋ฐฉ์ด์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ํ”„๋žญํด์€ ํ™˜์ž๋“ค์—๊ฒŒ "์ž ๋“ค๋ ค๊ณ  ํ•˜์ง€๋งˆ์„ธ์š”"๋ผ๊ณ  ๋งํ–ˆ๋‹ค. ๊ทธ๋Š” ๋ฌธ์ œ์— ์ดˆ์ ์„ ๋งž์ถ”์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์œผ๋กœ ํ™˜์ž์˜ ๊ฐ•๋ฐ•๊ด€๋…์„ ํ•ด๋ฐฉ์‹œ์ผฐ๋‹ค.

์›ํ•˜๋Š” ์ผ์ด ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์„ ๋•Œ ์šฐ๋ฆฌ๋Š” ๊ฐ•๋ฐ•๊ด€๋…์— ํœฉ์‹ธ์ธ๋‹ค. ๊ทธ๋•Œ์˜ ๊ฐ•๋ฐ•๊ด€๋…์€ ๊ฒ‰์œผ๋กœ๋Š” ์„ฑ๊ณต์— ๋Œ€ํ•œ ์˜์ง€์ธ ๋“ฏ ๋ณด์ด๋‚˜ ์‹ค์ œ๋กœ๋Š” ์žฅ์• ๋ฌผ์ด๋‹ค. ์„ฑ๊ณตํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์„ฑ๊ณต์— ๋Œ€ํ•œ ์˜์ง€์ธ ๋“ฏ ๋ณด์ด๋‚˜ ์‹ค์ œ๋กœ๋Š” ์žฅ์• ๋ฌผ์ด๋‹ค. ์„ฑ๊ณตํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์„ฑ๊ณต์— ๋Œ€ํ•œ '๊ฐ€์งœ ์˜์ง€'๋ฅผ ๋ฒ„๋ ค์•ผ ํ•œ๋‹ค. ์„ฑ๊ณต์— ๋Œ€ํ•œ ์ง„์งœ ์˜์ง€๋Š” ์—ญ์„ค์ ์œผ๋กœ ์„ฑ๊ณต์„ ์ƒ๊ฐํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด๋‹ค. ์‹คํŒจ์— ๋Œ€ํ•œ ๋‘๋ ค์›€๋„ ๋งˆ์ฐฌ๊ฐ€์ง€์ด๋‹ค. ์‹คํŒจํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค๋ฉด ์‹คํŒจ์— ๋Œ€ํ•œ ์ƒ๊ฐ ์ž์ฒด๋ฅผ ๋ฒ„๋ ค์•ผ ํ•œ๋‹ค.

 

์—ฌ๊ธฐ์„œ ์ด์ „์— ํ–ˆ๋˜ ์ƒ๊ฐ์ด ๋– ์˜ค๋ฅธ๋‹ค. ํ˜„์ž๋Š” ์ตœ์•…์˜ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•œ๋‹ค๋Š” ๋ง๊ณผ ์„ฑ๊ณตํ•œ ์‚ฌ๋žŒ๋“ค์€ ๋งŽ์ด๋“ค ์™œ ์‹คํŒจ๋ฅผ ๋จผ์ € ์ƒ๊ฐํ•˜๋ƒ๊ณ  ์ด๊ฒŒ ๋ฌด์—‡์ด ๋‹ค๋ฅธ์ง€๊ฐ€ ๊ถ๊ธˆํ–ˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ์ตœ์•…์˜ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•˜๋Š” ๊ฒƒ๊ณผ ์‹คํŒจ๋ฅผ ์ƒ๊ฐํ•˜๋Š” ๊ฒƒ์€ ์—„์—ฐํžˆ ๋‹ค๋ฅด๋‹ค. ์‹คํŒจ์— ๋Œ€ํ•œ ์ƒ๊ฐ ์ž์ฒด๋ฅผ ๋ฒ„๋ฆฌ๊ณ  ์ตœ์•…์˜ ์ƒํ™ฉ์„ ๊ณ ๋ คํ•˜์—ฌ ์ค€๋น„๋ฅผ ๋” ๋‹จ๋‹จํžˆ ํ•˜๋Š”๊ฒŒ ๊ฒฐ๊ตญ ์˜ณ์€ ๊ฒƒ ๊ฐ™๋‹ค.

๋”๋ณด๊ธฐ

ใ€Œ ์–ด๋–ป๊ฒŒ ๋„์™€์ค„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ง์ธ๊ฐ€? ๋ถˆํ‰ํ• ์ˆ˜๋ก ๋ถˆ์šด์€ ๋”์šฑ ๋ฌด๊ฑฐ์›Œ์ง€๋Š” ๊ฒƒ์„. ์—ญ๊ฒฝ์— ํฌํš๋‹นํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์™•์—๊ฒŒ ์–ด์šธ๋ฆฌ๋Š” ๊ฒƒ์ด ์–ด๋”” ์žˆ๋Š”๊ฐ€? ๊ทธ์˜ ์ง€์œ„๊ฐ€ ํ”๋“ค๋ฆด์ˆ˜๋ก, ๊ถŒ์ขŒ์—์„œ ๊ธˆ๋ฐฉ์ด๋ผ๋„ ๋–จ์–ด์งˆ ๊ฒƒ ๊ฐ™์„์ˆ˜๋ก ์ง€ํ‚ค๊ณ  ์‹ธ์›Œ์•ผ ํ•˜๋Š” ๊ฒƒ์ด ๋ถ„๋ช…ํ•˜๊ฑฐ๋Š˜, ์šด๋ช… ์•ž์—์„œ ๋ฌผ๋Ÿฌ์„œ๋Š” ๊ฒƒ์ด ์–ด์ฐŒ ์šฉ๋งนํ•œ ์ผ์ธ๊ฐ€!  ใ€

-์„ธ๋„ค์นด, ์˜ค์ด๋””ํ‘ธ์Šค, 80

 

์›”ํ„ฐ ๋ฒ ํŒ…๊ฑฐ๋Š” ์ด์‚ฌํšŒ์˜ ์ธ๋ฌผ์„ ์ฑ„์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋‹จ ํ•œ๊ฐ€์ง€์˜ ๋ฐฉ๋ฒ•์„ ์“ฐ๋Š”๋ฐ ๊ทธ๊ฒƒ์€ ์ž์‹ ์˜ ์•„์นจ ์‹์‚ฌ ์ž๋ฆฌ์— ํ›„๋ณด์ž๋ฅผ ์ดˆ๋Œ€ํ•˜๊ณ , ์‹๋‹น๋งค๋‹ˆ์ €์—๊ฒŒ ๊ณ ์˜์ ์œผ๋กœ ์‹์‚ฌ ์ฃผ๋ฌธ์„ ์—‰๋ง์œผ๋กœ ๋งŒ๋“ค๊ฒŒ ํ•œ๋‹ค.

ํ›„๋ณด์ž๊ฐ€ ํ™”๋ฅผ ๋‚ด๊ฑฐ๋‚˜ ๋ฌด๋ก€ํ•˜๊ฒŒ ๋ฐ˜์‘ํ•˜๋ฉฐ ์‚ฌ์†Œํ•œ ์ผ๋กœ ์ค‘์š”ํ•œ ์ž๋ฆฌ๋ฅผ ๋ง์น˜๋Š”๊ฐ€? ์•„๋‹ˆ๋ฉด ์šฐ์•„ํ•˜๊ณ  ์„ธ๋ จ๋œ ํƒœ๋„๋กœ ๋ถˆํŽธํ•จ์„ ๋‹ค๋ฃจ๋Š”๊ฐ€?

์ž‘์€ ์—ญ๊ฒฝ๊ณผ ๋ถ€๋”ชํ˜”์„ ๋•Œ ์•„๋ฌด๋ ‡์ง€๋„ ์•Š๊ฒŒ ๋ฐ˜์‘ํ•˜๋Š” ๊ฒƒ์€ ๊ฒฐ์ฝ” ์‚ฌ์†Œํ•œ ๋Šฅ๋ ฅ์ด ์•„๋‹ˆ๋‹ค. ๊ฑฐ๊ธฐ์„œ ๋ชจ๋“  ์—ญ๋Ÿ‰์ด ๋“œ๋Ÿฌ๋‚œ๋‹ค.