Process Context
์ปจํ ์คํธ๋ ํ๋ก๊ทธ๋จ์ ์คํ ํ๊ฒฝ์ ์๋ฏธํ๋ค. ๊ทธ๋ฆฌ๊ณ Process Context๋ ์ปดํจํฐ๊ฐ ์คํ๋๋ ๋ฐ ํ์ํ ๊ตฌ์ฑ ์์๋ค์ ์งํฉ์ ๋งํ๋ค.
์ปจํ ์คํธ์๋ ๋ ๊ฐ์ง๋ก ๋๋๋๋ฐ ํ๋๋ User Context, ๋ค๋ฅธ ํ๋๋ System Context์ด๋ค.
- User Context
- ์ฝ๋ : ์ ์ ํ๋ก๊ทธ๋จ ์ฝ๋
- ๋ฐ์ดํฐ : ํ๋ก์ธ์ค์ ์ ์ญ ๋ณ์
- User Stack : LIFO ์๋ฃ๊ตฌ์กฐ
- ์ง์ญ ๋ณ์, ํจ์์ ํ๋ผ๋ฏธํฐ, ๋ฆฌํด ์ ๋ณด ๋ฑ์ ์ ์ฅํ๊ธฐ ์ํจ์ด๋ค.
- System Context
- ์ด์์ฒด์ ๊ฐ ๋ง๋ ๊ฒ์ด๋ค.
- Kernel Stack(System Stack)
- ์ปค๋ ์ฝ๋ ๋ด์ ์๋ ํจ์ ํธ์ถ์ ์ํ ์ธ์, ์ง์ญ ๋ณ์๋ฅผ ์ ์ฅํ๋ค.
- ์ปค๋ ์์ญ์ ์กด์ฌ
- Process Control Block(PCB)
- ํ๋ก์ธ์ค ์ ์ด๋ฅผ ์ํ ์ ๋ณด
์ด์ ์ ์์คํ ํ๋ก๊ทธ๋๋ฐ์์ ์ฝ๋๊ฐ ์ด๋ค ๋ฐฉ์์ผ๋ก ๋์ํ๋์ง ๋ฐฐ์ด ๋ฐ๊ฐ ์๋ค. _fork()_ํจ์๋ ์์์ ์์ฑํ๋ฉฐ ํด๋น ๋ถ๋ถ์์ ์ฝ๋๊ฐ ์คํ๋๋ค.
๋ฐ๋ผ์ ๋ถ๋ชจ๋ 6๊ณผ 88์ ์ถ๋ ฅํ๊ณ ์์์ 7๊ณผ 89๋ฅผ ์ถ๋ ฅํ๋ค.
User Part of Process Context
gcc์ ๊ฐ์ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณด์กฐ๊ธฐ์ต์ฅ์น์ ์์ ๊ฐ์ด _a.out_์ด๋ผ๋ ํ์ผ์ด ์์ฑ๋๋ค. Linux์์ _a.out_์ ELF๋ผ๋ format์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ค.
์ด๋ ๊ฒ ๋ง๋ค์ด์ง ์คํ ํ์ผ์ ๋ณด์กฐ๊ธฐ์ต์ฅ์น ๋ด์์ ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ฅผ ๊ฐ์ง๋ค.
- header
- ์คํ ํ์ผ์ ๋ํ ์ ๋ณด
- code
- ์ปดํ์ผ๋ ๋ฐ์ด๋๋ฆฌ ์ฝ๋
- data
- ๊ฐ์ด ์ฃผ์ด์ง ๋ฐ์ดํฐ
- bss
- ๊ฐ์ด ์ฃผ์ด์ง์ง ์์ ๋ฐ์ดํฐ
- stack
- ์ง์ญ ๋ณ์, ํ๋ผ๋ฏธํฐ, ๋ฆฌํด ๊ฐ ๋ฑ
์ด๋ฌํ _a.out_์ ๋๋ธํด๋ฆญํ์ฌ ์คํํ๋ค๋ฉด ํ๋ก์ธ์ค๊ฐ ์์ฑ๋๋ค. ์ด๋ ์์ ๊ฐ์ ์ ๋ณด๋ค๊ณผ ํจ๊ป virtual address space์ ์ฐ์ ์ ์ผ๋ก ์์ฑ๋๋ค. ์ด ๊ณต๊ฐ์ ๊ฐ์ ์ฃผ์ ๊ณต๊ฐ์์ 4GB๋งํผ ์ฑ์์ง๊ฒ ๋๋ค. ์ด๋ 2์ 32์น์ผ๋ก Hex ์ฝ๋๋ก _0xffffff_๊ฐ ๋๋ค.
์ด๋, ์ด๋ ๊ฒ๋ ํฐ ๊ณต๊ฐ์ _code_, _data_, _bss_, _stack_์ด ํ ๋ฒ์ ์ฐจ์งํ๋ ๊ฒ์ด ์๋๋ผ ๋น ๊ณต๊ฐ์ผ๋ก ๋๋ฉฐ ์ต๋ 4GB๋งํผ ์ปค์ง ์ ์์์ ์๋ฏธํ๋ค.
๋ํ 0~3GB๊น์ง๋ ์ฌ์ฉ์ ํ๋ก๊ทธ๋๋จธ์ ์ํด์ ๋ง๋ค์ด์ง๋ User Context์ด๋ฉฐ 3GB~4GB๊น์ง๋ ์ปค๋์ด ๋ค์ด๊ฐ๋ค. ์ฆ, _code_์์ 3GB๊น์ง ์ ๊ทผํ๋ ๊ฒ์ _user mode_๋ผ๊ณ ๋ถ๋ฅด๊ณ , 3GB~4GB์ ์ปค๋ ์์ญ์ ์์คํ ์ฝ(fork ๋ฑ)์ ํธ์ถํ๋ ๊ฒ์ _kernel mode_๋ผ๊ณ ๋ถ๋ฅธ๋ค.
user mode์ kernel mode๋ฅผ ๋ฐ๊ฟ๊ฐ๋ฉฐ ์งํํ๋ ๊ฒ์ mode change๋ผ๊ณ ๋ถ๋ฅธ๋ค.
virtual adress space ๋ด์ stack์ ๋ณด์กฐ๊ธฐ์ต์ฅ์น ๋ด์์์ ๋ฌ๋ฆฌ ๊ฑฐ๊พธ๋ก ๋ฐฐ์น๋ ๊ฒ์ ์ ์ ์๋๋ฐ, ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์๋๋ก ์๋ผ์ผ ํ๋ค.(๋ฉ๋ชจ๋ฆฌ ์ฃผ์๊ฐ ๋์ ๊ณณ์์ ๋ฎ์ ๊ณณ์ผ๋ก) ์ด์ ๋ kernel์ ์์ญ์ ์นจ๋ฒํ์ง ์๊ฒ ํ๊ธฐ ์ํจ์ด๋ค.
๋น์ด์๋ ์์ญ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํน์ heap ๋ฉ๋ชจ๋ฆฌ ๋ฑ์ด ๋ค์ด๊ฐ๋๋ฐ, ์ฌ๊ธฐ์ ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ ์ ์๋ค.
์ง๊ธ๊น์ง ๋ณด์กฐ๊ธฐ์ต์ฅ์น ๋ด์์ virtual address space๊ฐ ์กด์ฌํ๋ ์ํฉ์ธ๋ฐ, ์ด๋ ํ๋ก์ธ์ค ์ํ์์ _new_ ์ํ์ธ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ค๊ฐ ํ๋ก์ธ์ค๊ฐ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ๊ฒ ๋๋ฉด virtual address space์ ์๋ ๊ฐ๋ค์ด ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ก ๋ค์ด๊ฐ๊ฒ ๋๋ค. ๊ฒฐ๊ตญ์๋ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ ์ด์ธ์ ๊ณณ์์ ํ๋ก๊ทธ๋จ์ ์คํ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ ๊ฒ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๋ก ํ๋ก์ธ์ค์ ์ด๋ฏธ์ง๊ฐ ๋ค์ด๊ฐ ์๋ ์ํ๋ ํ๋ก์ธ์ค ์ํ์์ _Ready_์ํ์ด๋ค.
Main Memory, Virtual Adress Space
์์ ์ค๋ช ํ ๋ฐ์ ๊ฐ์ด Virtual Adress Space๋ ๋ชจ๋ ๋ค ์ด๋ค ๊ธฐ์ค์ ์ ๊ธฐ์ค์ผ๋ก ๊ฑฐ๋ฆฌ๋ฅผ ๋งค๊ฒผ๊ธฐ์ ์๋์ ์ธ ์ฃผ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค.(4GB)
ํท๊ฐ๋ฆฌ์ง ๋ง์. Virtual Adress Space์ ์๋ ๊ฐ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ ๊ฒ์ด ์๋๋ผ ์๋ณธ์ ํด๋น๋๋ ๊ฒ๋ค์ด๊ณ ์ค์ ๋ก ์คํ๋๋ ๊ณณ์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ(Physical Address)์ธ ๊ฒ์ด๋ค.
Context Saving in the User Stack
Stack์ ํธ์ถํ๋ ํจ์์ ๋ ์ง์คํฐ ๊ฐ์ ์ ์ฅํ๋ค.
์ฌ์ง์์ ๋ํ๋๋ ๋ฐ์ ๊ฐ์ด User Stack์์๋ ๊ฐ๊ฐ์ ํจ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค ํ๋์ ๋ ์ด์ด์ฉ ์์ด๊ฒ ๋๋ค.
๊ทธ๋ฆฌ๊ณ , ๊ฐ์ง๊ณ ์๋ ์ ๋ณด๋ ์ง์ญ๋ณ์, ์ธ์, ๊ทธ๋ฆฌ๊ณ ๋ฆฌํด๋ ์ฃผ์์ ๋ฆฌํด ๊ฐ์ ๊ฐ์ง๋ค.
ํจ์๊ฐ ์ข ๋ฃ๋๋ฉด ๋ ์ด์ด๋ ํ๋์ฉ ๋น ์ง๊ฒ ๋๋ฉฐ ๋น ์ง๊ฒ ๋ ๋ ์ด์ด์ ์๋ ๊ฐ๋ค์๋ ์ ๊ทผํ ์ ์๋ค.
Context Saving in the Kernel Stack
์ปค๋๋ ์์คํ ์ฝ์ด ํธ์ถ๋ ๋ ์คํ์ด ์ฌ์ฉ๋๋ค. ์๋ฅผ ๋ค์ด _fork()_๋ผ๋ User Level์ Execution์ด ์๊ฒผ์ ๋, System Call ํจ์๊ฐ ์คํ๋๊ณ ์ด์ ๋ํ ๋ฆฌํด ์ฃผ์์ ์ธ์, ๊ทธ๋ฆฌ๊ณ ์ง์ญ ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์๋ค. System Call์ ๋ด๋ถ์ ์ผ๋ก Disk Interrupt๋ฅผ ๋ฐ์์ํค๊ณ ์ด์ ๋ํ ํจ์๋ ์ฐ์์ ์ผ๋ก ์คํ๋๋ค.
์ฆ, User Stack์ด๋ , Kernel Stack์ด๋ ๋์ํ๋ ๋ฐฉ์์ ์ ์ฌํ๋ค.
'๐ Knowledge > ์ด์์ฒด์ (OS)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด์์ฒด์ ] ํ๋ก์ธ์ค ์ค์์น(Process Swtich) (0) | 2024.03.17 |
---|---|
[์ด์์ฒด์ ] ํ๋ก์ธ์ค ์์ฑํด๋ณด๊ธฐ (1) | 2024.03.16 |
[์ด์์ฒด์ ] ๋ฆฌ๋ ์ค ๋ช ๋ น์ด ์ ๋ฆฌ (0) | 2024.03.13 |
[์ด์์ฒด์ ] Process Control Block์ด๋? (0) | 2024.03.09 |
[์ด์์ฒด์ ] ํ๋ก์ธ์ค ์ํ๋ ์์๋ณด๊ธฐ (1) | 2024.03.09 |