9.9 ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น
- ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ํ๋ฉด ์ด๋ค ์ผ์ด ์ผ์ด๋๋๊ฐ: ๋ฐํ์ ๋ฉ๋ชจ๋ฆฌ ์ด๋ฏธ์ง์ ์๋ heap์์ญ์ด ์๋ก ์์นํ๋ ํํ๋ก ๋์ด๋๋ค. ์ด๋ ํ์ ํ ๋ถ๋ถ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๋ฅผ
brk
๋ผ๊ณ ํ๋ค. - ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น๊ธฐ์ ๊ตฌ๋ถ: ๋ช ์์ ํ ๋น๊ธฐ๊ฐ ์๊ณ ๋ฌต์์ ํ ๋น๊ธฐ๊ฐ ์๋ค. ๋ช ์์ ํ ๋น๊ธฐ๋ ์ฝ๋ ๋ด์์ ํน์ ํ ์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๊ณ ํด์ ํ ๋ ์ฌ์ฉํ๋ค. (c์์์ malloc, free์ c++์ new, delete๊ฐ ์ด์ ํด๋นํ๋ค.) ๋ฌต์์ ํ ๋น๊ธฐ๋ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋ ๋์ ๊ฐ์ด ๋ธ๋ก๋ค์ ๋์ด์ ์ฌ์ฉํ์ง ์์ ๋ ์๋์ผ๋ก ํ ๋น ํด์ ํด ์ค๋ค. ๋ค๋ฅธ ๋ง๋ก๋ garbage collector๋ผ๊ณ ํ๋ค
9.9.1. malloc
๊ณผ free
ํจ์
01) malloc
๊ณผ free
malloc
์ C์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ง์ํ๋ ๋ช
์์ ํ ๋น๊ธฐ๋ค. ๋ฐ์ดํธ ๋จ์๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์์ฒญ๋ฐ์ ํ ๋น๋ฐ์ ๋ค์, ๊ทธ ์์ ์ฃผ์๋ฅผ void* ๋ก ๋ฆฌํดํ๋ค. ๋ง์ฝ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์คํจํ ๊ฒฝ์ฐ์๋ NULL์ด ๋ฆฌํด๋๋ค. ํ ๋น์ ์์ฒญํ๋๋ฐ ํ ๊ณต๊ฐ์ด ๋ถ์กฑํ ๊ฒฝ์ฐ, ์์คํ
์ brk ํฌ์ธํฐ๋ฅผ ์ฆ๊ฐ์์ผ ์ถ๊ฐ์ ์ผ๋ก ํ ๊ณต๊ฐ์ ๋ํ ์ ์๋ค. ์ด๋ฅผ sbrk
๊ฐ ํ๋ค.
void* malloc(4*sizeof(int)); // 4byte ์ ์ํ * 4 = 16byte ์์ฒญ
free
๋ ์ญ์ ๋ช
์์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ฐํํ๋ ํจ์์ด๋ค. ๋ฐํํ๊ณ ์ ํ๋ ์ฃผ์๊ฐ์ ๋ฐ์์ ํ ๋น ์ํ์์ ๋ค์ ๊ฐ์ฉ ์ํ๋ก ๋ง๋ ๋ค. NULL์ ๋ฐํํ๋ผ๊ณ ๋ช
๋ นํ ๊ฒฝ์ฐ, free๋ ์๋ฌด๊ฒ๋ ํ์ง ์๋๋ค.
void free(void* ptr);
02) ๋ธ๋ก์ ๋จ์
malloc
์ 32๋นํธ ๋ชจ๋์์ 8๋ฐ์ดํธ ๋จ์๋ก ๋ธ๋ก์ ๋ฆฌํดํ๋ค. (8๋ฐ์ดํธ๋ก ์ ๋ ฌํ๋ค.) ์์ผ๊น? primitive type์ ์ต๋ ๋ฐ์ดํธ์๊ฐ 8์ด๋ค. ์ฆ, ํ๋์ ๋ธ๋ก ์ฌ์ด์ฆ๊ฐ ๋ชจ๋ ํ์
์ ๋ด๊ธฐ ์ํ ์ถฉ๋ถ์กฐ๊ฑด์ด ๋๊ธฐ ๋๋ฌธ์ด๋ค. (+๋์ ์๊ฐ: ๋ง์ฝ 4๋ฐ์ดํธ ๋จ์๋ก ์ ๋ ฌํ๋ค๋ฉด, 4byte์ ์ธ๋ถ ๋จํธํ๊ฐ ๋ค์ ์๊ธฐ๊ณ , ๊ฒฐ๊ตญ 8๋ฐ์ดํธ๊ฐ ํ ๋น๋ฐ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๋ค์ด ๋ง์์ ธ ์ด์ฉ๋๊ฐ ๋ฎ์์ง ๊ฒ ๊ฐ๋ค.)
9.9.2. ์ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ธ๊ฐ?
๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ธ์ ํ์ํ ๊น? ์ด๋ค ๊ฒฝ์ฐ, ํ๋ก๊ทธ๋จ์ด ์คํํ๊ธฐ ์ ๊น์ง๋ ์ผ๋ง๋งํผ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ์ํ ์ง ์ ์ ์๋ค. ํ๋ก๊ทธ๋จ์ด ํ์๋ก ํ๋ ๋ฉ๋ชจ๋ฆฌ ์์ด ์ฌ์ฉ์์ input์ ์ํด ๊ฒฐ์ ๋๋ ๊ฒฝ์ฐ์์๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ด ํ์ํ๋ค.
9.9.3. ํ ๋น๊ธฐ ์๊ตฌ์ฌํญ๊ณผ ๋ชฉํ
- ์์ฒญ ์์์ ๊ด๊ณ์์ด ์ฒ๋ฆฌ๋์ด์ผ ํ๋ค. malloc๊ณผ free๊ฐ ์ฐ์๋๋ค (ํ ๋น-ํด์ ์ ๋ฐ๋ณต)๋ ๋ณด์ฅ์ด ์๋ค.
- ์์ ์ ์ฆ์ ์๋ตํด์ผ ํ๋ค. ์ฆ, ์ผ๋ จ์ ์์ฒญ์ ๋ค ๋ฐ์๋๊ณ ์์ ํฌ๊ธฐ ์์ฒญ์์ผ๋ก ์ฒ๋ฆฌํ๊ฑฐ๋ ํ ์ ์๋ค.
- ํ๋ง ์ฌ์ฉํด์ผ ํ๋ค. nonscalar, ์ฆ ์ด๋ ํ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ํ ๋ฐ์ดํฐ ๊ตฌ์กฐ(์ฌ๊ธฐ์๋ ๋ธ๋ก์ ๋ฉํ๋ฐ์ดํฐ)์ ํ์ด ์๋ ๊ณ ์ ๋ ์์ญ์ ์ ์ฅํ๋ฉด ํ ๋น๋ฐ๊ณ ์ ํ๋ ๋ฉ๋ชจ๋ฆฌ์ ์์ด ์ฆ๊ฐํ ์๋ก ๊ณต๊ฐ์ด ๋ถ์กฑํด์ง๋ค. ๊ทธ๋์ ๋์ ์ผ๋ก ํ์ฅํ ์ ์๋ ํ ๊ณต๊ฐ์ ์ฌ์ฉํด์ผ ํ๋ค.
- ๋ธ๋ก์ ์ ๋ ฌ ์๊ฑด์ ๋ง์ถฐ ์ ๋ ฌํด์ผ ํ๋ค. ์ด๋ค ์ข ๋ฅ์ ๋ฐ์ดํฐ ๊ฐ์ฒด๋ผ๋ ์ ์ฅํ ์ ์๋ ๋ฐฉ์์ผ๋ก ์ ๋ ฌํด์ผ ํ๋ค.
- ํ ๋น๋ ๋ธ๋ก์ ์์ ํ ์ ์๋ค. ๊ฐ์ฉ ๋ธ๋ก๋ง ์กฐ์ํ๊ณ , ํ ๋น๋ ๋ธ๋ก์ ๊ฑด๋๋ฆฌ์ง ์๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ค ํ ๋น๊ธฐ๊ฐ ์ข์ ํ ๋น๊ธฐ์ผ๊น?
- ์์ฒญ์ ๋น ๋ฅด๊ฒ ์๋ตํ ์๋ก ์ข์ ํ ๋น๊ธฐ์ด๋ค.
- ํ ์ด๋ ๋๋น ํ ๋น๋ฐ์ ์ด๋์ ๋น์จ (๋ฉ๋ชจ๋ฆฌ ์ด์ฉ๋)์ด ๋์์๋ก ์ข์ ํ ๋น๊ธฐ์ด๋ค. (์ฆ ์ฌ๊ธฐ์ ๊ธฐ ๋จ๋ ๋ถ๋ถ์ด ์์ผ๋ฉด)
$U_k = {{max_{i \ge k}P_i}\over{H_k}}$
9.9.4. ๋จํธํ Fragmentation
๋ด๋ถ ๋จํธํ๋ ์ค์ ํ์ํ ์๋ณด๋ค ๋ ๋ง์ด ํ ๋น๋ฐ์ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค. ํนํ ๋ธ๋ก์ 8๋ฐ์ดํธ ๋จ์๋ก ์ ๋ ฌํ๊ธฐ ์ํด ํ์ํ์ง ์์ ๊ณต๊ฐ๋ ํ ๋นํด ์ฃผ๋ ๊ฒฝ์ฐ๊ฐ ์๋๋ฐ (ex. 32bit ๋ชจ๋์์ 5๋ฐ์ดํธ ์์ฒญํ๋ฉด 8๋ฐ์ดํธ ์ค๋ค.) ์ด ๊ณต๊ฐ์ ํจ๋ฉ Padding์ด๋ผ๊ณ ํ๋ค. ๋ด๋ถ ๋จํธํ๋ ์ธ๋ถ ๋จํธํ๋ณด๋ค ๋ค๋ฃจ๊ธฐ๊ฐ ์ฌ์ด๋ฐ, ์ด์ ์ ์์ฒญํ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง๊ณ ๋จํธํ๊ฐ ์ผ๋ง๋งํผ ์ผ์ด๋ฌ๋์ง ๊ณ์ฐํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ธ๋ถ ๋จํธํ๋ ๊ฐ์ฉ ๋ธ๋ก์ ์ด๋์ด ํ ๋น๋ฐ๊ณ ์ ํ๋ ์๋ณด๋ค ๋ง๊ฑฐ๋ ๊ฐ์์๋ ๋ถ๊ตฌํ๊ณ ์ฐ์๋ ๊ณณ์ ์กด์ฌํ์ง ์์ ํ ๋น๋ฐ์ ์ ์๋ ๊ฒฝ์ฐ๋ฅผ ๋งํ๋ค. ์๋ฅผ ๋ค์ด ๋ด๊ฐ 24๋ฐ์ดํธ๋ฅผ ํ ๋น๋ฐ๊ณ ์ถ์๋ฐ 8๋ฐ์ดํธ์ง๋ฆฌ ๊ฐ์ฉ ๋ธ๋ก ์ธ ๊ฐ๊ฐ ์ฐ์๋์ด ์์ง ์๋ค๋ฉด ํ ๋น๋ฐ์ ์ ์๋ค. ์ธ๋ถ ๋จํธํ๋ ์ด์ ์ ์์ฒญํ๋ ์ ๋ณด๋ง์ด ์๋๋ผ ๋ฏธ๋์ ์์ฒญ๋ฐ์ ์ ์ญ์ ์๊ฐํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋ค๋ฃจ๊ธฐ ์ด๋ ค์ด ์ธก๋ฉด์ด ์๋ค. ์ธ๋ถ ๋จํธํ์ ๋์ฒํ๊ธฐ ์ํด ๊ฐ์ฉ ๋ธ๋ก์ ํฌ๊ธฐ๋ฅผ ์ฆ๊ฐ์ํฌ ์ ์๋๋ฐ, ์ด๋ ๊ฐ์ฉ ๋ธ๋ก์ด ์์์๋ก ๋ ํฐ ๋จ์๋ฅผ ํ ๋น๋ฐ์ ๋ '์์ ๋ธ๋ก์ด ๋น์ฐ์์ ์ผ๋ก ํฉ์ด์ ธ ์๋ ๊ฒฝ์ฐ'๊ฐ ๋ง์ด ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. (๋ฌผ๋ก ๋ธ๋ก์ ํฌ๊ธฐ๊ฐ ์ปค์ง์๋ก ๋ด๋ถ ๋จํธํ์ ํ๋ฅ ๋ ๊ฐ์ด ์ปค์ง๋ค. ๊ท ํ์ ์ก๋ ๊ฒ์ด ์ข๋ค.)
9.9.5. ๊ตฌํ ์ด์
01) ๊ฐ์ฉ ๋ธ๋ก ๊ตฌ์ฑ Free Block Organization
How do we keep track of free blocks? ํ ๋น๊ธฐ์ ์๊ตฌ์ฌํญ์ ๋ง์กฑํ๊ณ ๊ธฐ๋ฅ์ ์ธ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํด์ ์ฐ๋ฆฌ๋ ๋ธ๋ก๋ง๋ค ์ด๋ค ์ ๋ณด๋ฅผ ๊ด๋ฆฌํด์ผ ํ ๊น?
02) ๋ฐฐ์น Placement
How do we choose an appropriate free block in which to place a newly allocated block? ์๋ก์ด ๋ธ๋ก์ ํ ๋น๋ฐ์ ๋, ์ด๋๋ฅผ ํ ๋น๋ฐ๋ ๊ฒ์ด ์ข์๊น?
03) ๋ถํ Splitting
After we place a newly allocated block in some free block, what do we do with the remainder of the free block? ๋ธ๋ก์ ํน์ ์์น์ ํ ๋น๋ฐ์์ ๋, ๋จ์ ๊ฐ์ฉ๋ธ๋ก์ ์ด๋ป๊ฒ ์ฒ๋ฆฌํ ๊น? (ex. 16byte ๊ฐ์ฉ๋ธ๋ก ์ค 8byte ํ ๋น. ๋จ์ ๋ธ๋ก์ ์๋ผ์ค์ผ๊ฒ ์ฃ .)
04) ์ฐ๊ฒฐ Coalescing
What do we do with a block that has just been freed? ๋ธ๋ก์ ํ ๋น ํด์ ํ์ ๋, ์ธ์ ํ ๊ณณ์ ๊ฐ์ฉ๋ธ๋ก์ด ์๋ค๋ฉด ์ฐ๊ฒฐํด ๋ ํฐ ๊ฐ์ฉ๋ธ๋ก์ ๋ง๋ค์ด ์ค์ผ ํ๋๋ฐ (์ธ๋ถ๋จํธํ ๋ฐฉ์ง) ์ด๋ป๊ฒ ํ ์ ์์๊น?
9.9.6. ๋ฌต์์ ๊ฐ์ฉ ๋ฆฌ์คํธ
๋ธ๋ก์ ํค๋, ํ์ด๋ก๋, ํจ๋ฉ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
01) ํค๋ Header
ํค๋์๋ ๋ธ๋ก์ ์ฌ์ด์ฆ๊ฐ 4byte ์ ์ํ์ผ๋ก ์ ์ฅ๋๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ ๋ธ๋ก์ ์ฌ์ด์ฆ ๋จ์๊ฐ 8๋ฐ์ดํธ๋ผ๋ ๊ฒ์ ์๊ฐํด๋ณด์. ์ด์ง ํํ์ผ๋ก ๋ฐ๊พธ๋ฉด ๋ธ๋ก์ ํ์ 3๋นํธ๋ ํญ์ 0์ด๋ค. ๊ทธ๋์ ์ด ๋นํธ๋ ๊ฐ์ฉ/ํ ๋น์ฌ๋ถ๋ฅผ ๋ํ๋ด๋ 1๋นํธ๋ฅผ ํฌํจํด ๋ธ๋ก์ ์ถ๊ฐ์ ์ธ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ๋ด์ ์ ์๋ค.
02) ํ์ด๋ก๋ Payload
์ค์ ๋ก ํ ๋น๋ฐ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ ์ฅ๋ ๋ถ๋ถ์ด๋ค. ํ ๋น ์ํ์ธ ๋ธ๋ก๋ง์ด ์ด ๊ณต๊ฐ์ ๊ฐ์ง๋ค. ๋ malloc
ํจ์๊ฐ ๋ฐํํ๋ ํฌ์ธํฐ๋ ํ์ด๋ก๋์ ์์ ๋ถ๋ถ์ ๊ฐ๋ฆฌ์ผ์ผ ํ๋ค. (ํค๋๋ฅผ ๊ฐ๋ฆฌํค๋ฉด.. ๋ฐ์ดํฐ๊ฐ ๋ฎ์ด์์์ง๊ฒ ์ฃ .)
03) ํจ๋ฉ Padding
๋ฐ์ดํฐ ์ ๋ ฌ์ ์ํ ์ถ๊ฐ์ ์ธ ๊ณต๊ฐ์ผ๋ก, ์ค ์๋ ์๊ณ ์ ์ค ์๋ ์๋ค. ์ผ๋ง๋งํผ ์ฃผ๋๋๋ ๊ตฌํ์ ์ด์์ด๋ค. 8byte ์ ๋ ฌ ๊ฐ์ฉ ๋ธ๋ก ๋ฆฌ์คํธ์์๋ 8byte ๋ฏธ๋ง ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ k๋ผ ํ ๋, 8-k ๋งํผ์ ํจ๋ฉ ๊ณต๊ฐ์ด ์๊ธธ ๊ฒ์ด๋ค.
์ด๋ฌํ ์ธ ๊ฐ์ง ์์๊ฐ ๋ฌต์์ Implicitํ ๊ฐ์ฉ ๋ฆฌ์คํธ ๊ตฌํ๋ฐฉ์์์์ ๊ธฐ๋ณธ์ ์ธ ๋ธ๋ก ํฌ๋งท์ด๋ค. ์ด ๋ฐฉ์์ด '๋ฌต์์ '์ธ ๊ฒ์ ๊ฐ ๋ธ๋ก๋ค์ด implicitํ๊ฒ ์ฐ๊ฒฐ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋๊น.. ๋ณ๋์ ํฌ์ธํฐ๋ฅผ ์ฌ์ฉํด ๊ฐ์ฉ ๋ธ๋ก์ ์ฐ๊ฒฐํ๋ ๊ฒ์ด ์๋๋ผ๋ ๊ฒ์ด๋ค. ์ด ๋ฆฌ์คํธ์์ ๊ฐ์ฉ ๋ธ๋ก์ ์ฐพ๊ธฐ ์ํด์๋ ์ค์ง ์์ฐจ์ ์ธ ๊ฒ์๋ง์ ์ฌ์ฉํ ์ ์๋ค. (๋ช ์์ ๋ฐฉ๋ฒ์์๋ ๋ค์๊ณผ ์ด์ ๋ธ๋ก์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๊ฐ ํฌํจ๋๋ค.) ์ด ๋ฐฉ๋ฒ์ ์ฅ์ ์ ์ฐ์ ๋จ์ํ๋ค๋ ์ ์ด๋ค.
๐ ๊ทธ๋ฐ๋ฐ ๊ทธ๋ผ ์ด๋ป๊ฒ ๋ค์ ๋ธ๋ก์ ์์? ๋๋ ๋ธ๋ก์ ์์ ์ฃผ์๋ฅผ ์๊ณ ์๊ณ , ์ด ๋ธ๋ก์ ์ฌ์ด์ฆ๋ฅผ ์๊ณ ์๋ค. ๋ฐ๋ผ์ ์์ ์ฃผ์์ ์ฌ์ด์ฆ๋งํผ ๋ํ๋ฉด ๋ค์ ์ฃผ์์ ๋ธ๋ก์ด ๋์ค๊ฒ ์ฃ .
9.9.7. ํ ๋นํ ๋ธ๋ก์ ๋ฐฐ์น
๊ฐ์ฉ ๋ธ๋ก์ ์ฐพ๋ ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ
๋๋ k๊ณต๊ฐ์ ํ ๋น๋ฐ๊ณ ์ถ๋ค.
01) First Fit: ๋ธ๋ก ๋ฆฌ์คํธ๋ฅผ ์์ฐจ์ ์ผ๋ก ๊ฒ์ํ๋ค๊ฐ ์ฌ์ด์ฆ๊ฐ k์ด์์ธ ๋ธ๋ก์ ๋ง๋๋ฉด ํ ๋น๋ฐ๋๋ค.
- ์ฅ์ : ๋ฆฌ์คํธ ์๋ถ๋ถ๋ถํฐ ํ ๋น๋ฐ๊ธฐ ๋๋ฌธ์ ์ด๋ฐ์ ๋นจ๋ฆฌ ํ ๋น๋ฐ์ ์ ์๋ค.
- ๋จ์ : ์์ชฝ์ ์์ ๊ฐ์ฉ ๋ธ๋ก์ด ๋ฐฐ์น๋ ๊ฐ๋ฅ์ฑ์ด ๋๋ค. ๊ฐ์๋ก ๊ฒ์ ์๊ฐ์ด ๋์ด๋๋ค!
02) Next Fit: ๋ง์ง๋ง์ผ๋ก ํ ๋น๋ฐ์ ์์น๋ฅผ ์ ์ฅํด๋์๋ค๊ฐ, ๊ทธ ์์น๋ถํฐ ์์ฐจ์ ์ผ๋ก ๊ฒ์ํ๋ค.
- ์ ์ด๋ฐ ๋ฐฉ๋ฒ? '์ด์ ๊ฒ์์์ ๊ฐ์ฉ ๋ธ๋ก์ ๋ฐ๊ฒฌํ๋ค๋ฉด ๋ค์ ๊ฒ์์์๋ ๋ฆฌ์คํธ์ ๋๋จธ์ง ๋ถ๋ถ์์ ์ํ๋ ๋ธ๋ก์ ์ฐพ์ ๊ฐ๋ฅ์ฑ์ด ๋๋ค' ๋ Donald Knuth ์ ์์ด๋์ด. First Fit์ ๋จ์ ๋ถ๋ถ์ ๊ฐ์ ํ ๋ฐฉ๋ฒ์ผ๋ก ๋ณด์ฌ์ง๋ค.
- ์ฅ์ : First Fit์ ๋นํด ๋น ๋ฅผ ์ ์๋ค. (๋จ์ ์ ํด๋นํ๋ ๊ฒฝ์ฐ์)
- ๋จ์ : ์ธ ๊ฐ์ง ๋ฐฉ๋ฒ ์ค ์ต์ ์ ๋ฉ๋ชจ๋ฆฌ ์ด์ฉ๋๋ฅผ ๊ฐ๋๋ค. - ์ฐ๊ตฌ์ ์ํด ๊ฒ์ฆ๋์๋ค.
03) Best Fit: ๋ธ๋ก ๋ฆฌ์คํธ ์ ์ฒด๋ฅผ ํ์ํด์ k๊ณต๊ฐ์ ํ ๋นํ ์ ์์ผ๋ฉด์๋ ๊ฐ์ฅ ์์ ๊ฐ์ฉ๋ธ๋ก์ ๊ฒ์ํ๋ค.
- ์ฅ์ : ๊ฐ์ฅ ์ต์ ํ๋ ๋ฐฉ๋ฒ์ด๋ค. ๋ฉ๋ชจ๋ฆฌ ์ด์ฉ๋๊ฐ ์ข๋ค.
- ๋จ์ : ์ธ์ ๋ ํ์ ๋ค ๊ฒ์ํด์ผ ํ๋ค.
9.9.8. ๊ฐ์ฉ ๋ธ๋ก์ ๋ถํ
์ ๋ถํ ํ๋๊ฐ? ํ ๋น์ ๋ฐ์๋๋ฐ, ๋จ์ ๊ณต๊ฐ์ด 8byte์ด์์ด๋ผ๋ฉด ๋ถํ ํด์ผ ๋ค์ ๋ฒ ํ ๋น์์ ์ฌ์ฉํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ถํ ํ๋ค. ๋ง์ฝ ๋ถํ ํ์ง ์๋๋ค๋ฉด, ๋ธ๋ก ์ ์ฒด๋ฅผ ๋ค ํ ๋น๋ฐ๊ฒ ๋์ด ๋ค์ ๋ฒ ํ ๋น์์ sbrk
๋ฅผ ํธ์ถํด์ผ ํ ๊ฒ์ด๋ค.
9.9.9. ์ถ๊ฐ์ ์ธ ํ ๋ฉ๋ชจ๋ฆฌ ํ๋ํ๊ธฐ
๋ง์ฝ ํ ๋น๊ธฐ๊ฐ ์์ฒญํ ๋ธ๋ก์ ์ฐพ์ ์ ์๋ค๋ฉด ์ธ์ ํด ์๋ ๊ฐ์ฉ ๋ธ๋ก์ ์ฐ๊ฒฐํด ๋ ํฐ ๊ฐ์ฉ ๋ธ๋ก์ ๋ง๋ค์ด ๋ณธ๋ค. ๊ทธ๋๋ ์ ๋๋ฉด sbrk
๋ฅผ ํธ์ถํด ํ ์์ญ์ ๋๋ฆฐ๋ค.
9.9.10. ๊ฐ์ฉ ๋ธ๋ก ์ฐ๊ฒฐํ๊ธฐ
์ด๋ค ๊ฒฝ์ฐ์ ์ฐ๊ฒฐํ๋ฉด ๋ ๊น? ๋ธ๋ก์ ๋ฐฉ๊ธ ํ ๋น ํด์ ํ๋๋ฐ, ์์ ๊ฐ์ฉ ๋ธ๋ก์ด ์ธ์ ํด ์๋ค๋ฉด ์๋ก ์ฐ๊ฒฐํ์ฌ ๋ ํฐ ๊ฐ์ฉ ๋ธ๋ก์ ๋ง๋ค์ด ์ธ๋ถ ๋จํธํ์ ์ํ์ ๋ฎ์ถ ์ ์๋ค. ํ๋์ ๊ตฌํ ์ด์๋ก์, ์ธ์ ์ฐ๊ฒฐ์ ์ํํ ๊ฒ์ธ๊ฐ ์ ๋ฌธ์ ๊ฐ ์๋ค. ๋ธ๋ก์ ํ ๋น ํด์ ํ ํ ๋ฐ๋ก ์ฐ๊ฒฐํด๋ ๋๋ค. ๊ทธ๋ฌ๋ ๋ค์ ํ ๋น์์ ๋ฐฉ๊ธ ์ฐ๊ฒฐํ ๋ธ๋ก์ ๋ค์ ๋ถํ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธธ ์ ์๋ค. ์ด๋ ๊ฒฐ๊ตญ ๋ฏธ๋์ ์ด๋ค ํ ๋น ์์ฒญ์ด ์ฌ ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์ ๋ฐ์ํ๋ค. ๋ฐ๋ผ์ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์, ๊ฐ์ฉ ๋ธ๋ก์ด ์์ ๋๊น์ง ์ฐ๊ฒฐ์ ์ง์ฐ์ํค๋ ๊ฒ์ด๋ค. ์ฆ, ์ฐ๊ฒฐ ์์
์ด ํ์ํ ๋๊น์ง ์ด๋ฅผ ๋ฏธ๋ฃฌ๋ค. ๊ทธ๋์ ๊ฐ์ฉ ๋ธ๋ก์ด ์์ผ๋ฉด, ๋ฆฌ์คํธ๋ฅผ ๊ฒ์ํ์ฌ ๋ธ๋ก๋ค์ ์ฐ๊ฒฐํด์ฃผ๊ณ , ๊ทธ๋๋ ์๋ ๊ฒฝ์ฐ sbrk
๋ฅผ ํธ์ถํ๋ค.
9.9.11. ๊ฒฝ๊ณ ํ๊ทธ๋ก ์ฐ๊ฒฐํ๊ธฐ
๊ฒฝ๊ณ ํ๊ทธ๋? ํ ๋น์ ํด์ ํ ๊ฒฝ์ฐ์๋ ์ธ์ ํ ๊ฐ์ฉ ๋ธ๋ก๋ค๋ผ๋ฆฌ ์ฐ๊ฒฐํด์ ๋ ํฐ ๊ฐ์ฉ ๋ธ๋ก์ ๋ง๋ค์ด์ผ ํ๋ค. ๋ง์ฝ ์ธ์ ํ ๊ฐ์ฉ ๋ธ๋ก์ด ๋ค์์ ์ค๋ ๋ธ๋ก์ด๋ผ๋ฉด, ํค๋๋ฅผ ์ด์ฉํด ๊ทธ ์ฃผ์๋ฅผ ์ฐพ์ ์ ์๋ค. ๊ทธ๋ฐ๋ฐ ์ด์ ๋ธ๋ก์ด ๊ฐ์ฉ ๋ธ๋ก์ด๋ผ๋ฉด ์ด๋ป๊ฒ ๋ ๊น? ๋ธ๋ก์ ์์ฐจ์ ์ผ๋ก ๋ค ๊ฒ์ํด์ผ ํ๋ค. (๋๋ก์๋ ์ด์ ๋ธ๋ก์ ์ฌ์ด์ฆ์ ์์ ์์น๋ฅผ ์ ์ ์์ผ๋ฏ๋ก)
Knuth๋ ๊ฐ ๋ธ๋ก๋ง๋ค ํค๋๋ฅผ ๋ณต์ฌํ ํธํฐ 'footer'๋ฅผ ๋ธ๋ก์ ๋์ ๋ถ์์ผ๋ก์ ์ด์ ๋ธ๋ก์ผ๋ก ์์ ์๊ฐ ๋ด์ ์ ๊ทผํ ์ ์๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ์ ์ํ๋ค. ๋ง์ฝ ๊ฐ ๋ธ๋ก์ ๋์ ํธํฐ๊ฐ ์๋ค๋ฉด, ํ์ฌ ๋ธ๋ก์ ํค๋ ์์์ง์ ์์ 1์๋(ํค๋/ํธํฐ์ ํฌ๊ธฐ)๋งํผ ๊ฐ์์ํจ ์ฃผ์๋ฅผ ํ์ธํ์ฌ ์ด์ ๋ธ๋ก์ ์ฌ์ด์ฆ๋ฅผ ์ ์ ์๋ค. ๊ทธ ํ ์ด์ ๋ธ๋ก์ ์ฌ์ด์ฆ๋งํผ ๋ค๋ก ์ด๋ํ๋ค.
์ด๋ฅผ '๊ฒฝ๊ณ ํ๊ทธ Boundary Tag' ๋ผ๊ณ ํ๋ค. ๊ฒฝ๊ณ ํ๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ์ฉ ๋ธ๋ก๋ค์ ์ฐ๊ฒฐ์ด ๋ชจ๋ ์์ ์๊ฐ $O(1)$ ์์ ์ด๋ฃจ์ด์ง ์ ์๋ค. ๋จ์ ์ผ๋ก๋ ํค๋์ ํธํฐ๋ฅผ ๋ชจ๋ ์ ์งํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ๊ฒฝ์ฐ์ ๋ฐ๋ผ์๋ ํค๋์ ํธํฐ๊ฐ ๋ธ๋ก์ ์ ๋ฐ์ ์ฐจ์งํ๊ฒ ๋ ์๋ ์๋๋ฐ, ํนํ ์์ ํฌ๊ธฐ์ ๋ธ๋ก์ ๋ง์ด ์ฌ์ฉํ๊ฒ ๋ ๊ฒฝ์ฐ ๋ถ๋ฆฌํ๋ค.
๐ ๊ฒฐ๊ตญ ์์ ๋ธ๋ก์ด ๊ฐ์ฉ ์ํ์ธ ๊ฒฝ์ฐ์๋ง ํธํฐ๊ฐ ํ์ํ ๊ฒ? ๊ทธ๋์ ํ ๋น๋ ๋ธ๋ก์ ํธํฐ๋ฅผ ์ํ ๊ณต๊ฐ์ ํ ์ ํ์ง ์์๋ ๋๋ค. ๋ธ๋ก์ด ๊ฐ์ฉ ์ํ๋ก ๋ฐ๋ ๋๋ง ํธํฐ๋ฅผ ๋ฌ์์ค๋ค.
'DevLog ๐จ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[DevLog][PintOS] PRJ1 Threads/Scheduling Algorithms (0) | 2023.10.03 |
---|---|
[DevLog][PintOS] PRJ1 Threads/Priority Scheduling (0) | 2023.09.27 |
[DevLog][CSAPP] 10์ฅ ์์คํ ์์ค ์ ์ถ๋ ฅ (10.1~10.5) (0) | 2023.09.24 |
[DevLog][CSAPP] 9์ฅ ๊ฐ์๋ฉ๋ชจ๋ฆฌ (9.1~9.4) (0) | 2023.09.10 |
[DevLog] 2์ง์ ํํ์์ 1์ ๊ฐ์ ์ธ๊ธฐ (0) | 2023.08.30 |