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.
'๐ฅ > OS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด์์ฒด์ ] ์์คํ ์ฝ System Call (0) | 2021.08.31 |
---|---|
[์ด์์ฒด์ ] ์ธํฐ๋ฝํธ Interrupt (0) | 2021.08.25 |
[์ด์์ฒด์ ] ํ๋ก์ธ์ค์ ์ค๋ ๋์ ์ฐจ์ด (0) | 2021.08.18 |
[์ด์์ฒด์ ] CPU ์ค์ผ์ค๋ฌ (0) | 2021.08.11 |
[์ด์์ฒด์ ] ์ค์ผ์ค๋ฌ์ ์ข ๋ฅ : ์ฅ๊ธฐ, ์ค๊ธฐ, ๋จ๊ธฐ (0) | 2021.08.04 |