Process Address Space 

ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„

ํ”„๋กœ์„ธ์Šค๋Š” ์šด์˜์ฒด์ œ๊ฐ€ ์ž์›์„ ํ• ๋‹นํ•˜๋Š” ๋‹จ์œ„์ด๋‹ค.

ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹น ๋ฐ›์œผ๋ฉด, ์ž์‹ ๋งŒ์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ด ๊ณต๊ฐ„๋“ค์„ ์–ด๋–ค ๊ตฌ์กฐ๋กœ ๊ด€๋ฆฌํ•˜๋Š”๋ฐ, ์šฐ๋ฆฌ๋Š” ์ด๋ฅผ ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ๊ณต๊ฐ„์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜๋‰˜์–ด์ง„๋‹ค.

Stack ์˜์—ญ

ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ๊ด€๊ณ„๋˜๋Š” ์ง€์—ญ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ.

Stack ์˜์—ญ์˜ ๊ฐ’์€ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜๋ฉฐ, ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์ด ์™„๋ฃŒ๋˜๋ฉด ์†Œ๋ฉธํ•œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ์˜ ๋†’์€ ์ฃผ์†Œ์—์„œ ๋‚ฎ์€ ์ฃผ์†Œ์˜ ๋ฐฉํ–ฅ์œผ๋กœ ํ• ๋‹น๋œ๋‹ค.

์žฌ๊ท€ ํ•จ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๊นŠ๊ฒŒ ํ˜ธ์ถœ๋˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜๊ฐ€ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ๊ฐ€์ง€๊ณ  ์žˆ์–ด stack ์˜์—ญ์„ ์ดˆ๊ณผํ•˜๋ฉด stack overflow ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

Heap ์˜์—ญ

๋Ÿฐํƒ€์ž„์— ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ์˜์—ญ. ์‚ฌ์šฉ์ž์— ์˜ํ•ด ๊ณต๊ฐ„์ด ๋™์ ์œผ๋กœ ํ• ๋‹น ๋ฐ ํ•ด์ œ๋œ๋‹ค.

์ฃผ๋กœ ์ฐธ์กฐํ˜• ๋ฐ์ดํ„ฐ (ex. ํด๋ž˜์Šค) ๋“ฑ์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ํ• ๋‹น๋œ๋‹ค.

๋ฉ”๋ชจ๋ฆฌ์˜ ๋‚ฎ์€ ์ฃผ์†Œ์—์„œ ๋†’์€ ์ฃผ์†Œ์˜ ๋ฐฉํ–ฅ์œผ๋กœ ํ• ๋‹น๋œ๋‹ค.

Data ์˜์—ญ

์ „์—ญ ๋ณ€์ˆ˜๋‚˜ Static ๋ณ€์ˆ˜ ๋“ฑ ํ”„๋กœ๊ทธ๋žจ์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๋Š” ์˜์—ญ์ด๋‹ค.

์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์— ์ „์—ญ/static ๋ณ€์ˆ˜๋ฅผ ์ฐธ์กฐํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ์ด ํ”„๋กœ๊ทธ๋žจ์€ ์ปดํŒŒ์ผ ๋œ ํ›„์— data ์˜์—ญ์„ ์ฐธ์กฐํ•˜๊ฒŒ ๋œ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์˜ ์‹œ์ž‘๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜๋ฉฐ, ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋˜๋ฉด ์†Œ๋ฉธํ•œ๋‹ค.

๋‹จ, ์ดˆ๊ธฐํ™” ๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค๋ฉด, ์ด๋Š” (๊ทธ๋ฆผ์—๋Š” ํ‘œํ˜„๋˜์ง€๋Š” ์•Š์•˜์ง€๋งŒ BSS ์˜์—ญ์— ์ €์žฅ๋œ๋‹ค.)

Text(Code) ์˜์—ญ

ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋„๋ก CPU๊ฐ€ ํ•ด์„ ๊ฐ€๋Šฅํ•œ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๊ณต๊ฐ„์œผ๋กœ,

ํ”„๋กœ๊ทธ๋žจ์ด ์ˆ˜์ •๋˜๋ฉด ์•ˆ ๋˜๋ฏ€๋กœ ReadOnly ์ƒํƒœ๋กœ ์ €์žฅ ๋˜์–ด์žˆ๋‹ค.

๊ฒฐ๊ตญ ๋ฉ”๋ชจ๋ฆฌ๋Š” ํ•œ์ •๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ํ”„๋กœ์„ธ์Šค๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ์•ฝํ•˜๋ ค๊ณ  ์‹œ๋„ํ•œ๋‹ค.

Data ์˜์—ญ๊ณผ Stack ์˜์—ญ

Code ์˜์—ญ์€ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด์žˆ์œผ๋‹ˆ ๋‹ค๋ฅธ ๊ตฌ์—ญ๊ณผ ๋„ˆ๋ฌด ๋‹ค๋ฅด๊ณ , Heap ์˜์—ญ์€ ๋Ÿฐํƒ€์ž„์— ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ์˜์—ญ์ด๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด Stack ์˜์—ญ๊ณผ Data ์˜์—ญ์„ ๊ตฌ๋ถ„ํ•œ ์ด์œ ๋Š” ๋ฌด์—‡์ผ๊นŒ? ๊ฐ€์žฅ ํฐ ์ด์œ ๋Š” ์—ญํ• ์˜ ๋ถ„๋ฐฐ์ด๋‹ค.

์šฐ๋ฆฌ๋Š” Stack ์˜์—ญ์„ ํ†ตํ•ด ํ•จ์ˆ˜์˜ ํ๋ฆ„์„ ๊ด€๋ฆฌํ•˜๊ณ , Data ์˜์—ญ์„ ํ†ตํ•ด ์ „์—ญ ๋ณ€์ˆ˜, static ๋ณ€์ˆ˜๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค.

๋งŒ์•ฝ ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ–๋Š”๋‹ค๋ฉด, ๊ฐ๊ฐ์˜ ์Šค๋ ˆ๋“œ๋Š” ์ž์‹ ๋งŒ์˜ Stack ์˜์—ญ์„ ๊ฐ–๋Š”๋‹ค.

์ด๋Š” ์Šค๋ ˆ๋“œ ๋‚ด์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ํ•จ์ˆ˜์˜ ํ๋ฆ„์„ ๊ฐ๊ฐ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

์—ฌ๊ธฐ์—์„œ ์˜์—ญ์„ ๊ตฌ๋ถ„ํ•œ ๋˜ ๋‹ค๋ฅธ ์ค‘์š”ํ•œ ์ด์œ ๊ฐ€ ๋‚˜์˜ค๋Š”๋ฐ, ๋ฐ”๋กœ Data ์˜์—ญ์˜ ๊ณต์œ ์ด๋‹ค.

๊ฐ๊ฐ์˜ ์Šค๋ ˆ๋“œ๋Š” Stack ์˜์—ญ์„ ๊ฐ–๊ธด ํ•˜์ง€๋งŒ Data ์˜์—ญ์€ ๊ณต์œ ํ•œ๋‹ค.

์ฆ‰, ๊ฐ๊ฐ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด Data ์˜์—ญ์˜ ๋™์ผํ•œ ๋‚ด์šฉ์„ ๊ณต์œ ํ•จ์œผ๋กœ์จ, ๋˜‘๊ฐ™์€ ๊ณต๊ฐ„์„ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ๋‹ค.


Sources

Last updated