7 min read

OSTEP 17 Free Space Management

Table of Contents

OSTEP 17 Free Space Management-1690828800464.jpeg

๋ฉ”๋ชจ๋ฆฌ์— ๋นˆ ๊ณต๊ฐ„์ด ์ด๋ ‡๊ฒŒ ์กด์žฌํ•œ๋‹ค๊ณ  ํ•ด๋ณด์ž. ํ”„๋กœ์„ธ์Šค A๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ 10์„ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๊ณ , ๋นˆ ๊ณต๊ฐ„์˜ ์ „์ฒด ํฌ๊ธฐ๋Š” 20์ด๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ๊ฐ 10์œผ๋กœ ํŒŒํŽธํ™” ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์„ธ์Šค B์˜ 15๋ฐ”์ดํŠธ์˜ ์š”์ฒญ์€ ์‹คํŒจํ•  ๊ฒƒ์ด๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ์ด๋ฒˆ ์žฅ์—์„œ ํ•ด๊ฒฐํ•ด๋ณด์ž.

1. ๊ฐ€์ •

๋งค๋ฒˆ ํ•˜๋“ฏ ๋ช‡ ๊ฐ€์ง€ ๊ฐ€์ •์„ ํ•˜๊ณ  ์‹œ์ž‘ํ•˜์ž.

malloc()๊ณผ free()์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๊ธฐ๋ณธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ •ํ•œ๋‹ค.

void *malloc(size_t size)๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์š”์ฒญํ•œ ๋ฐ”์ดํŠธ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” size๋ฅผ ๋ฐ›์•„๋“ค์ด๊ณ , ์š”์ฒญ๋œ ํฌ๊ธฐ์™€ ๊ฐ™๊ฑฐ๋‚˜ ๋” ํฐ ์˜์—ญ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” void ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

void free(void *ptr)๋Š” ํฌ์ธํ„ฐ๋ฅผ ์ „๋‹ฌ๋ฐ›๊ณ  ํ•ด๋‹น ์˜์—ญ์„ ํ•ด์ œํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ•ด์ œํ•  ๋•Œ ์‚ฌ์šฉ์ž๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๊ฒŒ ํฌ๊ธฐ๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํฌ์ธํ„ฐ๋งŒ์œผ๋กœ ํ•ด์ œํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์˜ ํฌ๊ธฐ๋ฅผ ํŒŒ์•…ํ•ด์•ผ ํ•œ๋‹ค.

์šฐ๋ฆฌ๋Š” ์˜ค๋Š˜ ์™ธ๋ถ€ ๋‹จํŽธํ™” ๋ฐฉ์ง€์— ์ดˆ์ ์„ ๋‘˜ ๊ฒƒ์ด๋‹ค.

์™ธ๋ถ€ ๋‹จํŽธํ™”: ์œ„์—์„œ ๋ณธ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์ž‘์€ ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋‰˜์–ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ•˜๋Š” ์ƒํƒœ. ๋‚ด๋ถ€ ๋‹จํŽธํ™”: ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ ๋‚ด์—์„œ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” ๊ณต๊ฐ„์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ.

๋˜, ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ํ• ๋‹น๋œ ๋ฉ”๋ชจ๋ฆฌ๋Š” ๋‹ค๋ฅธ ์œ„์น˜๋กœ ์žฌ๋ฐฐ์น˜๋  ์ˆ˜ ์—†๋‹ค๊ณ  ๊ฐ€์ •ํ•  ๊ฒƒ์ด๋‹ค. ์ฆ‰ malloc()์„ ํ˜ธ์ถœํ•ด์„œ ํž™์˜ ์ผ๋ถ€๋ฅผ ํ• ๋‹น๋ฐ›์€ ๊ฒฝ์šฐ, ๊ทธ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์€ free()๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „ ๊นŒ์ง€ ํ”„๋กœ๊ทธ๋žจ์ด ์†Œ์œ ํ•˜๊ฒŒ ๋˜๊ณ , ๋‹ค๋ฅธ ์œ„์น˜๋กœ ์˜ฎ๊ฒจ์งˆ ์ˆ˜ ์—†๋‹ค. ์ด ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ ์••์ถ• ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.

2. ์ €์ˆ˜์ค€ ๊ธฐ๋ฒ•๋“ค

์šฐ์„  ๋Œ€๋ถ€๋ถ„์˜ ํ• ๋‹น๊ธฐ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์ผ๋ฐ˜์ ์ธ ๊ธฐ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.

๋ถ„ํ• ๊ณผ ๋ณ‘ํ•ฉ

๋นˆ ๊ณต๊ฐ„ ๋ฆฌ์ŠคํŠธ๋Š” ํž™์— ์žˆ๋Š” ๋นˆ ๊ณต๊ฐ„๋“ค์˜ ์ง‘ํ•ฉ์ด๋‹ค.

OSTEP 17 Free Space Management-1690828800464.jpeg

์ด ํž™์˜ ๋นˆ ๊ณต๊ฐ„ ๋ฆฌ์ŠคํŠธ์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‘ ๊ฐœ์˜ ์›์†Œ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

OSTEP 17 Free Space Management-1690866725253.jpeg

10๋ฐ”์ดํŠธ๋ณด๋‹ค ํฐ ์š”์ฒญ์€ ๋ชจ๋‘ ์‹คํŒจํ•˜์—ฌ NULL์„ ๋ฐ˜ํ™˜ํ•  ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ 1๋ฐ”์ดํŠธ๋ฅผ ์š”์ฒญํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ์ด ๊ฒฝ์šฐ ํ• ๋‹น๊ธฐ๋Š” ๋ถ„ํ• (splitting) ์ด๋ผ๋Š” ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์š”์ฒญ์„ ๋งŒ์กฑ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š” ๋นˆ ์ฒญํฌ๋ฅผ ์ฐพ์•„ ์ด๋ฅผ ๋‘˜๋กœ ๋ถ„ํ• ํ•œ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ฒญํฌ๋Š” ํ˜ธ์ถœ์ž์—๊ฒŒ ๋ฐ˜ํ™˜๋˜๊ณ , ๋‘ ๋ฒˆ์งธ ์ฒญํฌ๋Š” ๋ฆฌ์ŠคํŠธ์— ๋‚จ๊ฒŒ ๋œ๋‹ค. ์œ„์˜ ๊ทธ๋ฆผ์—์„œ 1๋ฐ”์ดํŠธ ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๊ณ , ํ• ๋‹น๊ธฐ๊ฐ€ ๋ฆฌ์ŠคํŠธ์˜ ๋‘ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋  ๊ฒƒ์ด๋‹ค.

OSTEP 17 Free Space Management-1690867003290.jpeg

malloc()์€ 20(1๋ฐ”์ดํŠธ๊ฐ€ ํ• ๋‹น๋œ ์˜์—ญ์˜ ์ฃผ์†Œ)์„ ๋ฐ˜ํ™˜ํ•˜๊ณ , ๋นˆ ๊ณต๊ฐ„์˜ ์ฃผ์†Œ๋Š” 21๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ณ , ๊ธธ์ด๋Š” 9๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค. ์š”์ฒญ์ด ํŠน์ • ๋นˆ ์ฒญํฌ์˜ ํฌ๊ธฐ๋ณด๋‹ค ์ž‘์€ ๊ฒฝ์šฐ ๋ถ„ํ•  ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

๋ถ„ํ• ์— ๋™๋ฐ˜๋˜๋Š” ๊ธฐ๋ฒ•์€ ๋นˆ ๊ณต๊ฐ„์˜ ๋ณ‘ํ•ฉ(coalescing) ์ด๋‹ค. ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด free(10)์„ ํ˜ธ์ถœํ•˜์—ฌ ํž™์˜ ์ค‘๊ฐ„์— ์กด์žฌํ•˜๋Š” ๊ณต๊ฐ„์„ ๋ฐ˜ํ™˜ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

OSTEP 17 Free Space Management-1690867282520.jpeg

์ด ๋นˆ ๊ณต๊ฐ„์„ ๋ฆฌ์ŠคํŠธ์— ์ถ”๊ฐ€ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ชจ์–‘์ด ๋  ๊ฒƒ์ด๋‹ค. ํž™ ์ „์ฒด๊ฐ€ ๋น„์–ด ์žˆ์ง€๋งŒ 10๋ฐ”์ดํŠธ ๊ธธ์ด์˜ ์ฒญํฌ 3๊ฐœ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ์žˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ 20๋ฐ”์ดํŠธ๋ฅผ ์š”์ฒญํ•˜๋Š” ๊ฒฝ์šฐ, ๋‹จ์ˆœํ•œ ๋ฆฌ์ŠคํŠธ ํƒ์ƒ‰์€ ์‹คํŒจํ•  ๊ฒƒ์ด๋‹ค.

ํ• ๋‹น๊ธฐ๋Š” ์ด๋Ÿฐ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๋นˆ ๊ณต๊ฐ„์„ ๋ณ‘ํ•ฉํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์ฒญํฌ๋ฅผ ๋ฐ˜ํ™˜ํ•  ๋•Œ ํ•ด์ œ๋˜๋Š” ์ฒญํฌ์˜ ์ฃผ์†Œํ™” ๋ฐ”๋กœ ์ธ์ ‘ํ•œ ๋นˆ ์ฒญํฌ์˜ ์ฃผ์†Œ๋ฅผ ์‚ดํŽด๋ณด๊ณ , ์ƒˆ๋กœ ํ•ด์ œ๋œ ๋นˆ ๊ณต๊ฐ„์ด ์™ผ์ชฝ์˜ ๋นˆ ์ฒญํฌ์™€ ๋ฐ”๋กœ ์ธ์ ‘ํ•ด ์žˆ๋‹ค๋ฉด, ํ•˜๋‚˜์˜ ๋” ํฐ ๋นˆ ์ฒญํฌ๋กœ ๋ณ‘ํ•ฉํ•œ๋‹ค. ์ตœ์ข…์ ์œผ๋กœ ๊ธธ์ด 30์งœ๋ฆฌ ์›์†Œ ํ•˜๋‚˜๊ฐ€ ์กด์žฌํ•˜๋Š” ๋ชจ์–‘์ด ๋  ๊ฒƒ์ด๋‹ค.

ํ• ๋‹น๋œ ๊ณต๊ฐ„์˜ ํฌ๊ธฐ ํŒŒ์•…

free(void *ptr) ํ•จ์ˆ˜๋Š” ํ• ๋‹น๋œ ํฌ๊ธฐ๋ฅผ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์ง€ ์•Š๋Š”๋ฐ ์–ด๋–ป๊ฒŒ ์ •ํ™•ํžˆ ํ•ด์ œํ•  ์ˆ˜ ์žˆ์„๊นŒ? ์ด ์ž‘์—…์„ ์œ„ํ•ด ํ• ๋‹น๊ธฐ๋Š” ์ถ”๊ฐ€ ์ •๋ณด๋ฅผ ํ—ค๋” ๋ธ”๋Ÿญ์— ์ €์žฅํ•œ๋‹ค. ํ—ค๋” ๋ธ”๋Ÿญ์€ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€๋˜๋ฉฐ, ๋ณดํ†ต ํ•ด์ œ๋œ ์ฒญํฌ ๋ฐ”๋กœ ์ง์ „์— ์œ„์น˜ํ•œ๋‹ค.

OSTEP 17 Free Space Management-1690869266755.jpeg

์‚ฌ์šฉ์ž๊ฐ€ ptr = malloc(20); ์„ ํ˜ธ์ถœํ•˜์˜€๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์ž. ํ—ค๋”๋Š” ํ• ๋‹น๋œ ํฌ๊ธฐ (20๋ฐ”์ดํŠธ) ๋ฅผ ์ €์žฅํ•ด์•ผ ํ•œ๋‹ค. ๋˜, ํ•ด์ œ ์†๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•œ ์ถ”๊ฐ€์˜ ํฌ์ธํ„ฐ, ๋ถ€๊ฐ€์ ์ธ ๋ฌด๊ฒฐ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๋งค์ง ๋„˜๋ฒ„ ๋ฐ ๊ธฐํƒ€ ์ •๋ณด๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค.

typedef struct __header_t {
    int size;
    int magic;
} header_t;

์‚ฌ์šฉ์ž๊ฐ€ free(ptr); ํ˜ธ์ถœ์„ ํ•˜๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ํ—ค๋”์˜ ์‹œ์ž‘ ์œ„์น˜๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์œ„ํ•ด ํฌ์ธํ„ฐ ์—ฐ์‚ฐ์„ ํ•œ๋‹ค.

void free(void *ptr) {
    header_t *hptr = (void *)ptr โˆ’ sizeof(header_t);
    // rest of code
}

ํ—ค๋”๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ์–ป์–ด ๋‚ด๋ฉด, ๋งค์ง ๋„˜๋ฒ„๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ๊ฐ’๊ณผ ์ผ์น˜ํ•˜๋Š”์ง€ ์•ˆ์ •์„ฑ ๊ฒ€์‚ฌ (sanity check)๋ฅผ ์‹ค์‹œํ•œ๋‹ค. assert(hptr->magic == 1234567) ํ—ค๋”์˜ ํฌ๊ธฐ์™€ ํ•ด์ œ๋œ ์˜์—ญ์˜ ํฌ๊ธฐ๋ฅผ ๋”ํ•ด ์ด ํ•ด์ œ๋œ ๋ฉ”๋ชจ๋ฆฌ์˜ ํฌ๊ธฐ๋ฅผ ๊ณ„์‚ฐํ•œ๋‹ค.

๋•Œ๋ฌธ์—, ์‚ฌ์šฉ์ž๊ฐ€ NN๋ฐ”์ดํŠธ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฒญํฌ๋ฅผ ์š”์ฒญํ•˜๋ฉด, ์šด์˜์ฒด์ œ๋Š” N+header_sizeN + header\_size ํฌ๊ธฐ์ธ ์ฒญํฌ๋ฅผ ์ฐพ๋Š”๋‹ค.

๋นˆ ๊ณต๊ฐ„ ๋ฆฌ์ŠคํŠธ ๋‚ด์žฅ

์ด๋Ÿฌํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋นˆ ๊ณต๊ฐ„์— ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์„๊นŒ? 4096 ๋ฐ”์ดํŠธ ํฌ๊ธฐ์˜ ๋ฉ”๋ชจ๋ฆฌ ์ฒญํฌ๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•˜์ž. ์ด๋ฅผ ๋นˆ ๊ณต๊ฐ„ ๋ฆฌ์ŠคํŠธ๋กœ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋จผ์ € ๋ฆฌ์ŠคํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•ด์•ผ ํ•œ๋‹ค. ์ฒ˜์Œ์— ๋ฆฌ์ŠคํŠธ๋Š” 4096 - header size ํ•ญ๋ชฉ ํ•˜๋‚˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

typedef struct __node_t {
    int size;
    struct __node_t *next;
} node_t;

๋นˆ ๊ณต๊ฐ„ ๋ฆฌ์ŠคํŠธ์— ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋ฅผ ๋„ฃ๋Š” ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

// mmap()์ด ๋นˆ ๊ณต๊ฐ„์˜ ์ฒญํฌ์— ๋Œ€ํ•œ ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜
node_t *head = mmap(NULL, 4096, PROT_READ|PROT_WRITE,
                                MAP_ANON|MAP_PRIVATE, โˆ’1, 0);
headโˆ’>size = 4096 โˆ’ sizeof(node_t);
headโˆ’>next = NULL;

OSTEP 17 Free Space Management-1690870194215.jpeg

์ด ๋•Œ 100๋ฐ”์ดํŠธ ๋ฉ”๋ชจ๋ฆฌ ์ฒญํฌ๊ฐ€ ์š”์ฒญ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ์ด ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์šฐ์„  ์ถฉ๋ถ„ํ•œ ํฌ๊ธฐ์˜ ์ฒญํฌ๋ฅผ ์ฐพ๋Š”๋‹ค. ์ด ์ฒญํฌ๋Š” ์ด์ œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ถ„ํ• ๋œ๋‹ค.

OSTEP 17 Free Space Management-1690870386570.jpeg

ํ—ค๋”๋ฅผ 8๋ฐ”์ดํŠธ๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ๊ธฐ์กด ํ•˜๋‚˜์˜ ๋นˆ ์ฒญํฌ ์ค‘ 108๋ฐ”์ดํŠธ๋ฅผ ํ• ๋‹นํ•˜๊ณ , ํ• ๋‹น ์˜์—ญ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ํ• ๋‹น๋œ ๊ณต๊ฐ„ ์ง์ „ 8๋ฐ”์ดํŠธ์— ํ—ค๋” ์ •๋ณด๋ฅผ ๋„ฃ๊ณ , ๋‚จ์€ ๋นˆ ๋…ธ๋“œ๋ฅผ 3980(4088-108)์œผ๋กœ ์ถ•์†Œํ•œ๋‹ค.

์ด๋Ÿฐ ๋ฐฉ์‹์œผ๋กœ 100๋ฐ”์ดํŠธ์”ฉ 3๋ฒˆ ํ• ๋‹น๋œ ํž™์˜ ๋ชจ์Šต์„ ์‚ดํŽด๋ณด์ž.

OSTEP 17 Free Space Management-1690870648166.jpeg

ํž™์˜ ์‹œ์ž‘ ๋ถ€๋ถ„ 324๋ฐ”์ดํŠธ๊ฐ€ ํ• ๋‹น ๋˜์–ด ์žˆ๋‹ค. ํ• ๋‹น ์˜์—ญ ์ค‘ ๊ฐ€์šด๋ฐ๋ฅผ free()ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

OSTEP 17 Free Space Management-1690871223751.jpeg

์ด์ œ ๋นˆ ๊ณต๊ฐ„ ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ ๋ฒˆ์งธ ์›์†Œ๋Š” ์ž‘์€ ๋นˆ ์ฒญํฌ (100๋ฐ”์ดํŠธ ํฌ๊ธฐ, ๋ฆฌ์ŠคํŠธ์˜ ํ—ค๋“œ๊ฐ€ ๊ฐ€๋ฆฌํ‚ด) ์ด๊ณ , ๋‘ ๋ฒˆ์งธ ์›์†Œ๋Š” ํฐ ๋นˆ ์ฒญํฌ (3764 ๋ฐ”์ดํŠธ ํฌ๊ธฐ) ์ด๋‹ค. ๋ฆฌ์ŠคํŠธ๊ฐ€ ํ•˜๋‚˜ ์ด์ƒ์˜ ์›์†Œ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜์—ˆ๊ณ , ๋‹จํŽธํ™”๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๋‹ค.

๋‚จ์€ ๋‘ ๊ฐœ์˜ ์‚ฌ์šฉ์ค‘์ธ ์ฒญํฌ๊ฐ€ ํ•ด์ œ๋œ๋‹ค๊ณ  ํ•˜์ž. ๋ณ‘ํ•ฉ์ด ์—†๋‹ค๋ฉด ์ž‘์€ ๋‹จํŽธ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋นˆ ๊ณต๊ฐ„ ๋ฆฌ์ŠคํŠธ๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค.

OSTEP 17 Free Space Management-1690871746742.jpeg

๋ชจ๋“  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ๋น„์–ด ์žˆ์ง€๋งŒ, ์ „๋ถ€ ์กฐ๊ฐ๋‚˜ ์žˆ๊ธฐ ๋Œ€๋ฌธ์— ํ•œ ์ฒญํฌ๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹จํŽธ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฉ”๋ชจ๋ฆฌ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌ์ŠคํŠธ๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ ์ธ์ ‘ํ•œ ์ฒญํฌ๋ฅผ ๋ณ‘ํ•ฉ ํ•˜๋ฉด ๋œ๋‹ค. ๋ณ‘ํ•ฉ์ด ์™„๋ฃŒ๋˜๋ฉด ํž™์€ ์ „์ฒด ํ•˜๋‚˜์˜ ํฐ ์ฒญํฌ๊ฐ€ ๋œ๋‹ค.

ํž™์˜ ํ™•์žฅ

ํž™ ๊ณต๊ฐ„์ด ๋ถ€์กฑํ•œ ๊ฒฝ์šฐ์—๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ• ๊นŒ? ์šฐ์„  ์‹คํŒจํ•˜๊ณ  NULL์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๋˜, ๋Œ€๋ถ€๋ถ„์˜ ์ „ํ†ต์ ์ธ ํ• ๋‹น๊ธฐ๋Š” ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์š”์ฒญํ•œ๋‹ค. ํ• ๋‹น๊ธฐ๋Š” ํž™์„ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ํŠน์ • ์‹œ์Šคํ…œ ์ฝœ sbrk ๋“ฑ์„ ํ˜ธ์ถœํ•œ๋‹ค. ๊ทธ๋Ÿฐ ํ›„ ํ™•์žฅ๋œ ์˜์—ญ์—์„œ ์ƒˆ๋กœ์šด ์ฒญํฌ๋ฅผ ํ• ๋‹นํ•œ๋‹ค. ์ด ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์šด์˜์ฒด์ œ๋Š” ๋นˆ ๋ฌผ๋ฆฌ ํŽ˜์ด์ง€๋ฅผ ์ฐพ์•„ ์š”์ฒญ ํ”„๋กœ์„ธ์Šค์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์— ๋งคํ•‘ํ•œ ํ›„ ์ƒˆ๋กœ์šด ํž™์˜ ๋งˆ์ง€๋ง‰ ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ์ด์ œ๋ถ€ํ„ฐ ๋” ํฐ ํž™์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

3. ๊ธฐ๋ณธ ์ „๋žต

์ด์ƒ์ ์ธ ํ• ๋‹น๊ธฐ๋Š” ์†๋„๊ฐ€ ๋น ๋ฅด๊ณ  ๋‹จํŽธํ™”๋ฅผ ์ตœ์†Œ๋กœ ํ•ด์•ผ ํ•œ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋ช‡ ๊ฐ€์ง€ ๊ธฐ๋ณธ ์ •์ฑ…์— ๋Œ€ํ•ด ์•Œ์•„ ๋ณด๊ณ  ๊ฐ๊ฐ์˜ ์žฅ๋‹จ์ ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•  ๊ฒƒ์ด๋‹ค.

์ตœ์  ์ ํ•ฉ (Best Fit)

์ตœ์  ์ ํ•ฉ ์ „๋žต์€ ์š”์ฒญํ•œ ํฌ๊ธฐ์™€ ๊ฐ™๊ฑฐ๋‚˜ ๋” ํฐ ๋นˆ ๋ฉ”๋ชจ๋ฆฌ ์ฒญํฌ๋ฅผ ์ฐพ์•„์„œ ๊ฐ€์žฅ ์ž‘์€ ํฌ๊ธฐ์˜ ์ฒญํฌ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ด๋Š” ๊ณต๊ฐ„์˜ ๋‚ญ๋น„๋ฅผ ์ค„์ด๋ ค๋Š” ์ „๋žต์ด์ง€๋งŒ, ํ•ญ์ƒ ์ „์ฒด๋ฅผ ๊ฒ€์ƒ‰ํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ์ €ํ•˜๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ตœ์•… ์ ํ•ฉ (Worst Fit)

์ตœ์•… ์ ํ•ฉ์€ ์ตœ์  ์ ํ•ฉ์˜ ๋ฐ˜๋Œ€ ๋ฐฉ์‹์œผ๋กœ, ๊ฐ€์žฅ ํฐ ๋นˆ ์ฒญํฌ๋ฅผ ์ฐพ์•„ ์š”์ฒญ๋œ ํฌ๊ธฐ๋งŒํผ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์€ ๋นˆ ๊ณต๊ฐ„ ๋ฆฌ์ŠคํŠธ์— ๊ณ„์† ์œ ์ง€ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ตœ์•… ์ ํ•ฉ์€ ์ž‘์€ ์ฒญํฌ ๋Œ€์‹  ์ปค๋‹ค๋ž€ ๋นˆ ์ฒญํฌ๋ฅผ ๋‚จ๊ธฐ๋ ค๊ณ  ์‹œ๋„ํ•˜์ง€๋งŒ, ์ด ๋˜ํ•œ ์ „์ฒด๋ฅผ ํƒ์ƒ‰ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋น„์šฉ์ด ๋†’๋‹ค. ๋˜ํ•œ, ๋‹จํŽธํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•˜๊ณ  ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ปค์งˆ ์ˆ˜ ์žˆ๋‹ค.

์ตœ์ดˆ ์ ํ•ฉ (First Fit)

์ตœ์ดˆ ์ ํ•ฉ์€ ์š”์ฒญ๋ณด๋‹ค ํฐ ์ฒซ ๋ฒˆ์งธ ๋ธ”๋ก์„ ์ฐพ์•„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ด ๋ฐฉ์‹์˜ ์žฅ์ ์€ ํ•ญ์ƒ ์ „์ฒด๋ฅผ ํƒ์ƒ‰ํ•  ํ•„์š”๊ฐ€ ์—†์–ด ๋น ๋ฅด๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋ฆฌ์ŠคํŠธ์˜ ์‹œ์ž‘๋ถ€๋ถ„์— ์ž‘์€ ๋ธ”๋ก์ด ๋งŽ์ด ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

๋‹ค์Œ ์ ํ•ฉ (Next Fit)

๋‹ค์Œ ์ ํ•ฉ์€ ์ตœ์ดˆ ์ ํ•ฉ๊ณผ ๋น„์Šทํ•˜์ง€๋งŒ, ํ•ญ์ƒ ๋ฆฌ์ŠคํŠธ์˜ ์ฒ˜์Œ๋ถ€ํ„ฐ ํƒ์ƒ‰ํ•˜๋Š” ๋Œ€์‹  ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฐพ์•˜๋˜ ์›์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ๋ฅผ ์œ ์ง€ํ•˜์—ฌ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ๋ฆฌ์ŠคํŠธ์˜ ์ฒซ ๋ถ€๋ถ„์—๋งŒ ๋‹จํŽธํ™”๊ฐ€ ์ง‘์ค‘๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

4. ๋‹ค๋ฅธ ์ ‘๊ทผ๋ฒ•

Segregated Lists

๊ฐ€์žฅ ๋จผ์ € ์•Œ์•„๋ณผ ๋ฐฉ๋ฒ•์€ segregated list(๋ถ„๋ฆฌ๋œ ๋ฆฌ์ŠคํŠธ)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Š” ์ž์ฃผ ์š”์ฒญ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ์ด๋ฅผ ์œ„ํ•œ ๋ณ„๋„์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณ„์† ์œ ์ง€ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ธฐ๊ธฐ์˜ ์š”์ฒญ์— ์˜ํ•ด ๋งค๋ฒˆ ํ• ๋‹นํ•  ํ•„์š”๋„ ์—†๊ณ  ๋งค๋ฒˆ ํ• ๋‹นํ•  ๋•Œ๋งˆ๋‹ค ๋ฐœ์ƒํ•˜๋Š” ๋‹จํŽธํ™” ๋ฌธ์ œ๋„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

์ด๋ ‡๊ฒŒ ์ž์ฃผ ์‚ฌ์šฉ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ slab ํ• ๋‹น์ž๋ผ๋Š” ๊ฒƒ์ด ์žˆ๋‹ค. ์ด ํ• ๋‹น์ž๋Š” ์ปค๋„์ด ๋ถ€ํŒ…๋  ๋•Œ ์ž์ฃผ ์š”์ฒญ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ํฌ๊ธฐ๋ฅผ ๊ฐ์ฒด ์บ์‹œ๋กœ ํ• ๋‹นํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ํ•ด๋‹น ํฌ๊ธฐ๋งŒํผ ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๋ฉด ๋ฐ”๋กœ๋ฐ”๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ์ฒ˜์Œ ๋งŒ๋“  ๋ชจ๋“  ์บ์‹œ๋ฅผ ์‚ฌ์šฉ ์ค‘์ผ ๋•Œ ์š”์ฒญ์ด ๋ฐœ์ƒํ•˜๋ฉด ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋‚ฎ์•„์ง„๋‹ค.

Buddy Allocation

ํ•ฉ๋ณ‘์„ ๋‹จ์ˆœํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ๋ฐฉ์‹์ด buddy allocation ๋ฐฉ๋ฒ•์ด๋‹ค. ์šฐ์„  ์ด ๋ฐฉ๋ฒ•์€ ํ•ญ์ƒ ์—ฌ์œ  ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ 2N2^N์˜ ํฌ๊ธฐ๋กœ ์กด์žฌํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ ์š”์ฒญ์ด ์žˆ์„ ๋•Œ ์ด๋ฅผ ๋งŒ์กฑ์‹œํ‚ค๋Š” ๊ฐ€์žฅ ์ž‘์€ ๋ธ”๋ก์„ ์ฐพ์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜์œผ๋กœ ์ชผ๊ฐ ๋‹ค. ์ด๋ฅผ ๊ทธ๋ฆผ์œผ๋กœ ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

OSTEP 17 Free Space Management-1690873551914.jpeg

์ฒ˜์Œ์— 64KB๊ฐ€ ์žˆ์—ˆ๋Š”๋ฐ 8KB์˜ ์š”์ฒญ์ด ๋“ค์–ด์™”๋‹ค. ๊ทธ๋ž˜์„œ 64KB๋ฅผ ๋ฐ˜์œผ๋กœ ์ชผ๊ฐ  32KB๋ฅผ ๋˜ ๋ฐ˜์œผ๋กœ ์ชผ๊ฐ  16KB๋ฅผ ๋˜ ๋ฐ˜์œผ๋กœ ์ชผ๊ฐ  ๋‘˜ ์ค‘ ํ•˜๋‚˜์— ํ˜„์žฌ ์š”์ฒญ์„ ํ• ๋‹นํ•œ๋‹ค. ๊ทธ๋Ÿฐ ๋’ค ์ด ๊ณต๊ฐ„์„ ํ•ด์ œํ•  ๋•Œ๋Š” ๋ฐ”๋กœ ์ž์‹ ๊ณผ ํ•จ๊ป˜ ์ชผ๊ฐœ์ง„ ๋ฉ”๋ชจ๋ฆฌ, ์ฆ‰ buddy๋ฅผ ์ฐพ๊ณ  ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์ง€ ์•Š๋‹ค๋ฉด ๋ฐ”๋กœ ํ•ฉ๋ณ‘ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•ฉ๋ณ‘์„ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.