๋ณธ ๊ฒ์๊ธ์ KOCW ์ดํ์ฌ์๋ํ๊ต ๋ฐํจ๊ฒฝ ๊ต์๋์ <์ด์์ฒด์ > ๊ฐ์๋ฅผ ๋ฃ๊ณ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
๊ฒ์๊ธ์ ํฌํจ๋๋ ์ด๋ฏธ์ง ์๋ฃ ๋ํ ํด๋น ๊ฐ์์ ํฌํจ๋ ๊ฐ์ ์๋ฃ์ ๋๋ค.
ํ๋ก์ธ์ค๋?
ํ๋ก์ธ์ค๋ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ๋๋ค.
PCB (Process Control Block)
PCB๋ ์ด์์ฒด์ ๊ฐ ๊ฐ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ํ๋ก์ธ์ค๋น ์ ์งํ๋ ์ ๋ณด์ ๋๋ค.
์ด์์ฒด์ ๋ ํ๋ก์ธ์ค ๋น PCB๋ฅผ ํ๋์ฉ ๋๊ณ (์ปค๋ ์์ญ์ ์์ฑ) ์ด๋ฅผ ์ด์ฉํด ๋น ๋ฅด๊ฒ ๋ฒ๊ฐ์ ์ํ๋๋ ํ๋ก์ธ์ค์ ์คํ ์์๋ฅผ ๊ด๋ฆฌํ๊ณ , ํ๋ก์ธ์ค์ CPU๋ฅผ ๋น๋กฏํ ์์์ ๋ฐฐ๋ถํฉ๋๋ค.
PCB์๋ ์ด๋ค ์ ๋ณด๋ค์ด ๋ด๊ธธ๊น์? PCB์ ๊ตฌ์ฑ์ ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ต๋๋ค.
(1) OS๊ฐ ๊ด๋ฆฌ์ ์ฌ์ฉํ๋ ์ ๋ณด
- Process ID(=PID): ํน์ ํ๋ก์ธ์ค๋ฅผ ์๋ณํ๊ธฐ ์ํด ๋ถ์ฌํ๋ ๊ณ ์ ํ ๋ฒํธ
- Process state: ํ๋ก์ธ์ค์ ์ํ ์ ๋ณด(ํ์ฌ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ฌ์ฉ ์ค์ธ์ง, ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ์ํ์ธ์ง ๋ฑ)
- CPU ์ค์ผ์ค๋ง ์ ๋ณด, priority: ํ๋ก์ธ์ค๊ฐ ์ธ์ , ์ด๋ค ์์๋ก CPU๋ฅผ ํ ๋น๋ฐ์์ง์ ๋ํ ์ ๋ณด)
(2) CPU ์ํ ๊ด๋ จ ํ๋์จ์ด ๊ฐ
- Program Counter
- registers
(3) ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ
- code, data, stack์ ์์น ์ ๋ณด
(4) ํ์ผ ๊ด๋ จ
- ์ฌ์ฉํ ํ์ผ ์ ๋ณด
- ์ ์ถ๋ ฅ ์ฅ์น ๋ชฉ๋ก
ํ๋ก์ธ์ค์ ๋ฌธ๋งฅ
ํ๋ก์ธ์ค์ ๋ฌธ๋งฅ(context)์ด๋ ํ๋ก์ธ์ค์ ํ์ฌ ์ํ๋ฅผ ๋ํ๋ด๋ ๋ฐ ํ์ํ ์ ๋ณด์ ๋๋ค.
ํ๋ก๊ทธ๋จ์ ์คํ์ด ๋๋ ๋๊น์ง CPU ์ ์ด๊ถ์ ๊ฐ์ง๊ณ ์์ ์ ์๋ค๋ ๋ณด์ฅ์ด ์๊ธฐ ๋๋ฌธ์ CPU ์ ์ด๊ถ์ ๋นผ์๊ฒผ๋ค ๋ค์ ์ป์์ ๋ ์ด์ ์ ์คํํ๋ ๋ด์ฉ์ ์ด์ด ๋ค์ ์คํ์ ์ฌ๊ฐํ๊ธฐ ์ํด์๋ ๋ฌธ๋งฅ์ด๋ผ๋ ์ค๊ฐ ์ ๋ณด๋ฅผ ์์์ผํฉ๋๋ค.
ํ๋ก์ธ์ค์ ๋ฌธ๋งฅ์ ํฌ๊ฒ ์ธ ๊ฐ์ง ์ ๋๋ก ๋๋์ด ์ค๋ช ํ ์ ์์ต๋๋ค.
(1) CPU์ ์ํ ์ํ๋ฅผ ๋ํ๋ด๋ ํ๋์จ์ด ๋ฌธ๋งฅ
- Program Counter (PC): ์คํ ์ค์ธ ํ๋ก์ธ์ค์ ์ฝ๋ ์์ญ์ ๊ฐ๋ฆฌํค๊ณ ์์.
- ๊ฐ์ข register
ํ์ฌ์์ ์ ํ๋ก์ธ์ค๊ฐ instruction์ ์ด๋๊น์ง ์คํํ๋์ง๋ฅผ ์๊ธฐ ์ํด์๋ ๋ ์ง์คํฐ์ ์ด๋ค ๊ฐ์ ๋ฃ๊ณ ์์๊ณ ,
Program Counter(PC)๊ฐ ์ด๋๋ฅผ ๊ฐ๋ฆฌํค๊ณ ์์๋์ง๋ฅผ ์์์ผ ํฉ๋๋ค.
(2) ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ
- code, data, stack
ํ์ฌ ์์ ์ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์ ๊ณต๊ฐ์ ์ด๋ค ๋ด์ฉ์ด ๋ค์ด์๋์ง๋ฅผ ์์์ผ ํฉ๋๋ค.
(3) ํ๋ก์ธ์ค ๊ด๋ จ ์ปค๋ ์๋ฃ ๊ตฌ์กฐ (์ปค๋์์ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ๊ฐ์ง๊ณ ์๋ ์ ๋ณด)
- PCB (Process Control Block)
- Kernel stack
์ด์์ฒด์ ๋ ํ๋ก์ธ์ค ํ๋ ๋น PCB๋ฅผ ํ๋์ฉ ๋๊ณ ์ด๋ฅผ ํตํด ํ๋ก์ธ์ค์ ์คํ ์์๋ฅผ ๊ด๋ฆฌํ๊ณ , ํ๋ก์ธ์ค์ CPU๋ฅผ ๋น๋กฏํ ์์์ ๋ฐฐ๋ถํฉ๋๋ค. ๋ํ, ์์คํ ์ฝ์ด ์ผ์ด๋๊ฒ ๋ ๊ฒฝ์ฐ Program Counter๊ฐ ์ปค๋ ์ฃผ์๊ณต๊ฐ ์ด๋๊ฐ๋ฅผ ๊ฐ๋ฆฌํค๊ฒ ๋๊ณ , ์ปค๋์ ์ฝ๋๋ฅผ ์คํํ๊ฒ ๋ฉ๋๋ค. ์์คํ ์ฝ์ ํตํด ์ปค๋์ ํจ์ ํธ์ถ์ด ์ผ์ด๋๊ฒ ๋๋ฉด ์ปค๋ ์คํ์ ๊ด๋ จ ์ ๋ณด ์์ ๋๊ฒ ๋๋๋ฐ, ์ปค๋์ ์ฝ๋๋ ๊ณต์ ๋๋ ์ฝ๋์ด๊ธฐ ๋๋ฌธ์ ํจ์ ํธ์ถ ์ ํ๋ก์ธ์ค ๋ณ๋ก ๋ณ๋์ ์คํ์ ๋๊ฒ ๋๊ธฐ ๋๋ฌธ์ kernel stack์ ๋ํ ์ ๋ณด ๋ํ ํ์ํฉ๋๋ค.
๋ฌธ๋งฅ ๊ตํ (Context Switching)
์์์ ํ๋ก์ธ์ค์ ์ค๊ฐ ์ ๋ณด, ์ฆ ํ๋์ ํ๋ก์ธ์ค ์ํ์ ์ฌ๊ฐํ๊ธฐ ์ํด ๊ธฐ์ตํด์ผ ํ ์ ๋ณด๋ฅผ ๋ฌธ๋งฅ(context)์ด๋ผ๊ณ ์ค๋ช ํ์ต๋๋ค.
์คํ ๋ฌธ๋งฅ์ ์ ๊ธฐ์ตํด ๋๋ฉด ์ธ์ ๋ ํด๋น ํ๋ก์ธ์ค์ ์คํ์ ์ฌ๊ฐํ ์ ์๊ธฐ ๋๋ฌธ์ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ฌ์ฉํ ์ ์๋ ์๊ฐ์ด ๋ค ๋๊ฑฐ๋ ์๊ธฐ์น ๋ชปํ ์ํฉ์ด ๋ฐ์ํ์ฌ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด ์ด์์ฒด์ ๋ ํด๋น ํ๋ก์ธ์ค์ PCB์ ๋ฌธ๋งฅ์ ๋ฐฑ์ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ด์ด ์คํํ ํ๋ก์ธ์ค์ ๋ฌธ๋งฅ์ ๋ณต๊ตฌํฉ๋๋ค. ์ด๋ฌํ ๊ณผ์ ์ผ๋ก ์คํ๋๋ ํ๋ก์ธ์ค๊ฐ ๋ฐ๋๊ฒ ๋๋ ๊ฒ์ธ๋ฐ, ์ด์ฒ๋ผ ๊ธฐ์กด ํ๋ก์ธ์ค์ ๋ฌธ๋งฅ์ PCB์ ๋ฐฑ์ ํ๊ณ ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์คํํ๊ธฐ ์ํด ๋ฌธ๋งฅ์ PCB๋ก๋ถํฐ ๋ณต๊ตฌํ์ฌ ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ ๊ฒ์ ๋ฌธ๋งฅ ๊ตํ(context switching)์ด๋ผ๊ณ ํฉ๋๋ค.
๋ฌธ๋งฅ ๊ตํ(context switching): CPU๋ฅผ ํ ํ๋ก์ธ์ค์์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ๋๊ฒจ์ฃผ๋ ๊ณผ์
๋ฌธ๋งฅ ๊ตํ ์ ์ด์์ฒด์ ๊ฐ ์ํํ๋ ์์
- CPU๋ฅผ ๋ด์ด์ฃผ๋ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ํด๋น ํ๋ก์ธ์ค์ PCB์ ์ ์ฅ
- CPU๋ฅผ ์๋กญ๊ฒ ์ป๋ ํ๋ก์ธ์ค์ ์ํ๋ฅผ PCB์์ ์ฝ์ด์ด
์์คํ ์ฝ์ด๋ ์ธํฐ๋ฝํธ ๋ฐ์ ์ ๋ฐ๋์ ๋ฌธ๋งฅ ๊ตํ์ด ์ผ์ด๋๋ ๊ฒ์ ์๋๋๋ค!
์์ ๊ทธ๋ฆผ์์ (1), (2)์ ๊ฒฝ์ฐ ๋ชจ๋ ์์คํ ์ฝ์ด๋ ์ธํฐ๋ฝํธ๋ก ์ธํด ์ ์ ๋ชจ๋์์ ์ปค๋ ๋ชจ๋๋ก ์ ํ๋์ง๋ง (1)์ ๋ฌธ๋งฅ ๊ตํ์ด ์ผ์ด๋์ง ์๊ณ ์ ์ ๋ชจ๋๋ก ๋ณต๊ท๋๊ณ , (2)์ ๊ฒฝ์ฐ๋ง ๋ฌธ๋งฅ ๊ตํ์ด ์ผ์ด๋๊ฒ ๋ฉ๋๋ค.
์๋ํ๋ฉด, ์ปค๋ ๋ชจ๋๋ก ์ ํ๋์๋ค๊ณ ํด์ CPU ์ ์ด๊ถ์ด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ๋์ด๊ฐ๋ ๊ฒ์ ์๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
(1)์ ๊ฒฝ์ฐ ์์คํ ์ฝ์ด ์ผ์ด๋ OS ์ปค๋ ์ฝ๋๊ฐ ์คํ๋๊ณ ๋ ํ ๋ค์ CPU ์ ์ด๊ถ์ด ํ๋ก์ธ์ค A์๊ฒ๋ก ๋์๊ฐ ๊ฒฝ์ฐ์ด๊ณ , (2)์ ๊ฒฝ์ฐ๋ ํ์ด๋จธ ์ธํฐ๋ฝํธ์ ๊ฐ์ ๊ฒฝ์ฐ๋ก ์ปค๋ ๋ชจ๋๋ก ์ ํ๋ ํ OS์์ ๋ค๋ฅธ ์ฌ์ฉ์ ํ๋ก์ธ์ค๋ก CPU ์ ์ด๊ถ์ด ๋์ด๊ฐ ๊ฒฝ์ฐ์ ๋๋ค.
'๐ฅ CS > ์ด์์ฒด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ด์์ฒด์ ] ํ๋ก์ธ์ค ๊ด๋ฆฌ (0) | 2023.02.16 |
---|---|
[์ด์์ฒด์ ] ํ๋ก์ธ์ค ์ํ (0) | 2023.02.13 |
[์ด์์ฒด์ ] ํ๋ก๊ทธ๋จ์ ์คํ (1) | 2023.02.01 |
[์ด์์ฒด์ ] I/O์ ์ํ - ์ธํฐ๋ฝํธ(Interrupt)์ ์์คํ ์ฝ(System Call) (1) | 2023.01.14 |
[์ด์์ฒด์ ] ์ปดํจํฐ ์์คํ ๊ตฌ์กฐ (2) | 2023.01.13 |