Process Address Space
ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜๋Š” ๊ฒƒ

 

 

ํ”„๋กœ์„ธ์Šค๋Š” CPU์— ์˜ํ•ด์„œ ์‹คํ–‰์ด ๋˜๊ณ  memory์— ์ €์žฅ์ด ๋œ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋ฉด ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„์ด memory์— ํ• ๋‹น(์ƒ์„ฑ)๋˜๋Š”๋ฐ, ํ• ๋‹น ๋œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ฒƒ์€ CPU๊ฐ€ ํ•œ๋‹ค.

๊ตฌ์„ฑ์š”์†Œ

Address Space์•ˆ์€ ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด Code, Data, Stack ๋ถ€๋ถ„์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค.

 

1) Code(Text)

  • ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์†Œ์Šค์ฝ”๋“œ๊ฐ€ ๋“ค์–ด ๊ฐ€๋Š” ๋ถ€๋ถ„. ์ฆ‰, ์‹คํ–‰ํ•  ํ”„๋กœ๊ทธ๋žจ์˜ ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์œผ๋กœ ํ…์ŠคํŠธ(code)์˜์—ญ ์ด๋ผ๊ณ ๋„ ๋ถ€๋ฅธ๋‹ค.
  • ์ฝ”๋“œ์˜์—ญ์€ ์‹คํ–‰ ํŒŒ์ผ์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ช…๋ น์–ด๋“ค์ด ์˜ฌ๋ผ๊ฐ€๋Š” ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์œผ๋กœ ํ•จ์ˆ˜, ์ œ์–ด๋ฌธ, ์ƒ์ˆ˜ ๋“ฑ์ด ์—ฌ๊ธฐ์— ์ง€์ •๋œ๋‹ค.
  • ์ปดํŒŒ์ผ ํƒ€์ž„์— ๊ฒฐ์ •๋˜๊ณ  ์ค‘๊ฐ„์— ์ฝ”๋“œ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๊ฒŒ Read-Only ๋กœ ์ง€์ •๋ผ์žˆ๋‹ค.

2) Data

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

(์ƒ์œ„ ๊ทธ๋ฆผ์—์„œ๋Š” ํ‘œํ˜„๋˜์–ด์žˆ์ง€ ์•Š์ง€๋งŒ,) ์ดˆ๊ธฐํ™” ๋œ ๋ฐ์ดํ„ฐ๋Š” Data ์˜์—ญ์— ์ €์žฅ๋˜๊ณ ,์ดˆ๊ธฐํ™” ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋Š” BSS(Block Stated Symbol)์˜์—ญ์— ์ €์žฅ๋œ๋‹ค.

Q.data์˜์—ญ๊ณผ bss ์˜์—ญ์„ ๊ตฌ๋ถ„ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ธ๊ฐ€?
์ดˆ๊ธฐํ™”๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋  ๋•Œ ์˜์—ญ๋งŒ ์žก์•„์ฃผ๋ฉด ๋˜๊ณ  ๊ทธ ๊ฐ’์„ ํ”„๋กœ๊ทธ๋žจ์— ์ €์žฅํ•˜๊ณ  ์žˆ์„ ํ•„์š”๋Š” ์—†์œผ๋‚˜ ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜๋Š” ๋ณ€์ˆ˜๋Š” ๊ทธ ๊ฐ’๋„ ํ”„๋กœ๊ทธ๋žจ์— ์ €์žฅํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ bss ์˜์—ญ ๋ณ€์ˆ˜๋“ค์ด ๋งŽ์•„์ ธ๋„ ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์ฝ”๋“œ ์‚ฌ์ด์ฆˆ๋ฅผ ๋Š˜๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.

 

3) Stack

  • ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ๊ด€๊ณ„๋˜๋Š” ์ง€์—ญ ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๋‹ค.
  • Stack์€ ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋˜๋ฉฐ, ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์ด ์™„๋ฃŒ๋˜๋ฉด ์†Œ๋ฉธํ•œ๋‹ค.
  • ์›์‹œํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ’๊ณผ ํ•จ๊ป˜ ํ• ๋‹น๋œ๋‹ค.
  • Heap ์˜์—ญ์— ์ƒ์„ฑ๋œ Object ํƒ€์ž…์˜ ๋ฐ์ดํ„ฐ ์ฐธ์กฐ๊ฐ’์ด ํ• ๋‹น๋œ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ์˜ ๋†’์€ ์ฃผ์†Œ์—์„œ ๋‚ฎ์€ ์ฃผ์†Œ์˜ ๋ฐฉํ–ฅ์œผ๋กœ ํ• ๋‹น๋œ๋‹ค.
  • ์ปดํŒŒ์ผ ํƒ€์ž„์— ํฌ๊ธฐ๊ฐ€ ๊ฒฐ์ •๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฌดํ•œํžˆ ํ• ๋‹น ํ•  ์ˆ˜ ์—†๋‹ค. ์žฌ๊ท€ํ•จ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๊นŠ๊ฒŒ ํ˜ธ์ถœ๋˜๊ฑฐ๋‚˜ ํ•จ์ˆ˜๊ฐ€ ์ง€์—ญ๋ณ€์ˆ˜๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ๊ฐ€์ง€๊ณ  ์žˆ์–ด stack ์˜์—ญ์„ ์ดˆ๊ณผํ•˜๋ฉด stack overflow ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.



Q. ์™œ Code ๋ถ€๋ถ„์„ ๋”ฐ๋กœ ๋‘์—ˆ๋‚˜?
Program์˜ Code๋Š” Program์ด ๋งŒ๋“ค์–ด์ง€๊ณ (์ปดํŒŒ์ผ๋˜๊ณ ) ๋‚˜์„œ๋Š” ๋ฐ”๋€” ์ผ์ด ์ „ํ˜€ ์—†๋‹ค. (๋”ฐ๋ผ์„œ Read Only)
๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œ์ผœ ๋ช‡ ๊ฐœ์˜ Prcess๊ฐ€ ์‹คํ–‰๋˜๋”๋ผ๋„ ๊ฐ™์€ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ๋ฉด Code ๋ถ€๋ถ„์€ ๋‹ค ๋˜‘๊ฐ™์€ ๋‚ด์šฉ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ฒŒ ๋œ๋‹ค.
๋”ฐ๋ผ์„œ ๊ฐ™์€ Program์˜ Process์ผ ๊ฒฝ์šฐ Code ๋ถ€๋ถ„์„ ๊ณต์œ (Share)ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์„ ์ค„์ด๋Š” ๋ชฉ์ ์ž…๋‹ˆ๋‹ค.
Q. ์™œ Stack ๋ถ€๋ถ„๊ณผ Data ๋ถ€๋ถ„์„ ๋‚˜๋ˆ„์—ˆ๋‚˜? 
Stack ๊ตฌ์กฐ๋Š” ์•„๋ž˜์˜ ์‚ฌ์ง„๊ณผ ๊ฐ™์ด ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. (ํ•˜๋‹จ ๋ถ€๊ฐ€ ๋ง‰ํ˜€์žˆ๊ณ  ์ƒ๋‹จ ๋ถ€๊ฐ€ ๋šซ๋ ค์žˆ๋Š” ๊ตฌ์กฐ)
๋”ฐ๋ผ์„œ ํ•œ ์ชฝ์œผ๋กœ๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ง‘์–ด ๋„ฃ์„ ์ˆ˜ ์žˆ๊ณ  ๊บผ๋‚ผ ๋•Œ๋Š” ์ตœ๊ทผ์— ์ง‘์–ด๋„ฃ์—ˆ๋˜ ๊ฒƒ ๋ถ€ํ„ฐ ๊บผ๋‚ผ ์ˆ˜ ๋ฐ–์— ์—†๋Š” ๊ตฌ์กฐ C์–ธ์–ด๋ฅผ ์˜ˆ๋กœ ๋“ค๋ฉด ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ์ด stack ๊ตฌ์กฐ๋กœ ๋˜์–ด์žˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.
์ „์—ญ๋ณ€์ˆ˜๋Š” ์–ด๋–ค ํ•จ์ˆ˜์—์„œ๋„ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Data๋กœ ๋”ฐ๋กœ ๊ด€๋ฆฌํ•ด์ค€๋‹ค.

 

<stack ๊ตฌ์กฐ>

main ํ•จ์ˆ˜๋ถ€ํ„ฐ ์‹คํ–‰๋˜๋ฉฐ 

์ฒ˜์Œ printf๋ฅผ ์ˆ˜ํ–‰ํ•œ ๋’ค ํ•จ์ˆ˜ func1 ์‹คํ–‰

ํ•จ์ˆ˜ func1 ์‹คํ–‰ ํ›„ main ์—์„œ ๋‹ค์‹œ printf๋ฅผ ์‹คํ–‰ํ•˜๊ณ  ํ•จ์ˆ˜ func2 ์‹คํ–‰

tunc2์—์„œ printf๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  func3์‹คํ–‰

 

์ด๋Ÿฌํ•œ stack ๊ตฌ์กฐ๋กœ ์ธํ•ด data ๋ถ€๋ถ„๊ณผ stack ๋ถ€๋ถ„์„ ๋”ฐ๋กœ ๋‚˜๋ˆ„์–ด ๋‘” ๊ฒƒ์ด๋‹ค.
์ „์—ญ ๋ณ€์ˆ˜(global variables)๋Š” ์–ด๋–ค ํ•จ์ˆ˜์—์„œ๋„ ์ ‘๊ทผ ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— Data๋กœ ๋”ฐ๋กœ ๊ด€๋ฆฌ๋ฅผ ํ•ด์ฃผ๋Š” ๊ฒƒ

 

 


Reference.

link1 link2 link3

+ Recent posts