PCB & Context Switching
์ปจํ
์คํธ ์ค์์นญ
CPU๊ฐ ํ ํ๋ก์ธ์ค์์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก ์ ํํ ๋ ๋ฐ์ํ๋ ์ผ๋ จ์ ๊ณผ์ ์ ๋งํ๋ค.
๋์ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ๋๊ธฐ๋ฅผ ํ๋ฉด์ ํด๋น ํ๋ก์ธ์ค์ ์ํ๋ฅผ ๋ณด๊ดํ๊ณ , ๋๊ธฐํ๊ณ ์๋ ๋ค์ ์์์ ํ๋ก์ธ์ค๊ฐ ๋์ํ๋ฉฐ๋ ์ด์ ์ ๋ณด๊ดํ๋ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ๋ณต๊ตฌํ๋ ์์ ์ด๋ค. ์ด๋ฌํ ์ปจํ ์คํธ ์ค์์นญ์ด ์ผ์ด๋ ๋ ๋ค์๋ฒ ํ๋ก์ธ์ค๋ ์ค์ผ์ค๋ฌ๊ฐ ๊ฒฐ์ ํ๊ฒ ๋๋ค. ์ฆ, ์ปจํ ์คํธ ์ค์์นญ์ ํ๋ ์ฃผ์ฒด๋ ์ค์ผ์ค๋ฌ์ด๋ค.
ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก (Process Control Block, PCB)
์ด์์ฒด์ ์์ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด ํด๋น ํ๋ก์ธ์ค์ ์ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.
ํ๋ก์ธ์ค๋ฅผ ์ปจํ ์คํธ ์ค์์นญํ ๋ ๊ธฐ์กด ํ๋ก์ธ์ค์ ์ํ๋ฅผ ์ด๋๊ฐ์ ์ ์ฅํด ๋ฌ์ผ ๋ค์์ ๋๊ฐ์ ์์ ์ ์ด์ด์ ํ ์ ์์ ๊ฒ์ด๊ณ , ์๋ก ํด์ผ ํ ์์ ์ ์ํ ๋ํ ์์์ผ ์ด๋์๋ถํฐ ๋ค์ ์์ ์ ์์ํ ์ง ๊ฒฐ์ ํ ์ ์์ ๊ฒ์ด๋ค. ์ฆ, PCB๋ ํ๋ก์ธ์ค ์ค์ผ์ค๋ง์ ์ํด ํ์ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ์์ ์ ์ฅ์์ด๋ค. PCB๋ ํ๋ก์ธ์ค๊ฐ ์์ฑ๋ ๋๋ง๋ค ์์ฑ๋๋ฉฐ, ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ฉด ์ ๊ฑฐ๋๋ค.
PCB์ ์ ์ฅ๋๋ ์ ๋ณด

ํฌ์ธํฐ(Pointer) : ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉํ๋ ์ฃผ์ ๊ณต๊ฐ์ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
ํ๋ก์ธ์ค ์ํ(Process State) : ํ๋ก์ธ์ค์ ์ํ ์ ๋ณด(new, ready, running, waiting, terminated๋ฅผ ์ ์ฅ)
ํ๋ก์ธ์ค ์์ด๋(Process ID,
PID) : ํ๋ก์ธ์ค๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํ ๊ณ ์ ํ ์์ด๋ํ๋ก๊ทธ๋จ ์นด์ดํฐ(Program Counter) : ํ๋ก์ธ์ค๊ฐ ๋ค์์ ์คํํ ๋ช ๋ น์ด์ ์ฃผ์
๋ ์ง์คํฐ(Registers) : ํ๋ก์ธ์ค์ ๋ ์ง์คํฐ ์ํ๋ฅผ ์ ์ฅ
๋ฉ๋ชจ๋ฆฌ ์ ํ(Memory Limits) : ์ด์์ฒด์ ์์ ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉํ ์ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฒ์
์ด๋ฆฐ ํ์ผ ๋ชฉ๋ก(List of Open Files) : ํ๋ก์ธ์ค๋ฅผ ์ํด ์ด๋ฆฐ ํ์ผ ๋ชฉ๋ก
๊ฐ PCB๋ ์ฃผ์๊ฐ ์๊ณ , ๋ค์์ ์คํํ ๋ช ๋ น์ด์ ์ฃผ์๋ ๊ฐ๊ณ ์์ผ๋ ์ฐ๊ฒฐ๋ฆฌ์คํธ(Linked List)๋ก ๊ด๋ฆฌ๋๋ค.
์ปจํ
์คํธ ์ค์์นญ ๊ณผ์

CPU๋ Process P1์ ์คํํ๋ค.(Executing)
์ผ์ ์๊ฐ์ด ์ง๋ Interrupt ๋๋ system call์ด ๋ฐ์ํ๋ค.(CPU๋ idle(๋๊ธฐ) ์ํ)
CPU๋ ํ์ฌ ์คํ ์ค์ธ Process P1์ ์ํ๋ฅผ PCB์ ์ ์ฅํ๋ค.(Saving)
Process P2์ ์ํ๋ฅผ PCB์์ ์ฝ์ด CPU๊ฐ ์คํํ๋ค.(Loading)
CPU๋ Process P2๋ฅผ ์คํํ๋ค.(Executing)
์ผ์ ์๊ฐ์ด ์ง๋ Interrupt ๋๋ system call์ด ๋ฐ์ํ๋ค.(CPU๋ idle(๋๊ธฐ) ์ํ)
CPU๋ ํ์ฌ ์คํ ์ค์ธ Process P2์ ์ํ๋ฅผ PCB์ ์ ์ฅํ๋ค.(Saving)
Process P1์ ์ํ๋ฅผ PCB์์ ์ฝ์ด CPU๊ฐ ์คํํ๋ค.(Loading)
CPU๋ Process P1์ ์ค๊ฐ ์์ ๋ถํฐ ์คํํ๋ค.(Executing)
Context Switching์ Overhead
Context Switching์ ๋งค์ฐ ๋น ๋ฅด๊ฒ ์ผ์ด๋์ง๋ง, ๊ทธ๋ผ์๋ ๋ถ๊ตฌํ๊ณ ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ๋ค.
PCB ์ ์ฅ ๋ฐ ๋ณต์ ๋น์ฉ
CPU Cache ์ด๊ธฐํ ๋น์ฉ
ํ๋ก์ธ์ค ์ค์ผ์ค๋ง ๋น์ฉ
์ปจํ ์คํธ ์ค์์นญ ์ค๋ฒํค๋๋ ๋ํ์ ์ผ๋ก ์์ ๊ฐ์ ํ์์ ์ํด์ ๋ฐ์ํ๋ค. ์ปจํ ์คํธ ์ค์์นญ์ ํ๋ก์ธ์ค ๋ฟ๋ง ์๋๋ผ ์ฌ๋ฌ๊ฐ์ ์ค๋ ๋๋ค๋ผ๋ฆฌ๋ ๋ฐ์ํ๋ค. ๋ฉํฐ ์ค๋ ๋๋ผ๊ณ ํ๋ฉด ์ฌ๋ฌ๊ฐ์ ์ค๋ ๋๊ฐ ๋์์ ๋์๊ฐ๋ ํ๋ก๊ทธ๋จ ์ฑ๋ฅ์ด ์ข์์ง ๊ฒ ๊ฐ์ง๋ง, ์ค์ ๋ก๋ ์ปจํ ์คํธ ์ค์์นญ ์ค๋ฒํค๋ ๋๋ฌธ์ ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์๋ค.
์ค๋ ๋ ์ค์ผ์ค๋ง
ํ๋ก์ธ์ค ์ค์ผ์ค๋ง๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ค๋ ๋ ์ค์ผ์ค๋ง๋ ์ค๋ ๋๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํ ์์ ์ด๋ค. ์ค๋ ๋ ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ์ ํ๋ก์ธ์ค ์ค์ผ์ค๋ง ์๊ณ ๋ฆฌ์ฆ๊ณผ ์ ์ฌํ๋ค. ๋ค๋ง ์ฐจ์ด์ ์ ํ๋์ ํ๋ก์ธ์ค ๋ด์์ ๋ค์์ ์ค๋ ๋๊ฐ ๋์ํ๋ ํํ์ด๊ธฐ ๋๋ฌธ์ ์ค๋ ๋ ๊ฐ์ ์ํธ์์ฉ๊ณผ ๋๊ธฐํ ๋ฌธ์ ๋ฅผ ๊ณ ๋ ค ํด์ผ ํ๋ค.
์ค๋ ๋ ์ปจํ
์คํธ ์ค์์นญ
๋ฉํฐ ์ค๋ ๋ฉ ํ๊ฒฝ์์ ์ค๋ ๋ ๊ฐ์ ์คํ์ ์ ํํ๋ ๊ธฐ์ ๋ก, ํ๋ก์ธ์ค ์ปจํ ์คํธ ์ค์์นญ๊ณผ ๋ค๋ฅธ ์ ์ ์ค๋ ๋ ์ปจํ ์คํธ ์ค์์นญ์ ํ๋์ ํ๋ก์ธ์ค ๋ด์ ์ค๋ ๋๋ค์ ๊ตํํ๋ค๋ ์ ์ด๋ค.

TCB(Thread Control Block)
PCB์ฒ๋ผ TCB(์ค๋ ๋ ์ ์ด ๋ธ๋ก)๋ ๊ฐ ์ค๋ ๋๋ง๋ค ์ด์์ฒด์ ์์ ์ ์งํ๋ ์ค๋ ๋์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค.

๊ทธ๋ฆผ์ฒ๋ผ TCB๋ PCB ์์ ๋ค์ด์๋ค. ๊ทธ๋ฆฌ๊ณ ์ญ์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๊ตฌํ๋์ด ์๋ค. TCB๋ ์ค๋ ๋๊ฐ ์์ฑ๋ ๋ ์์ฑ๋๋ฉฐ, ์คํ์ ๋ง์น๊ณ ์๋ฉธ๋ ๋ ํจ๊ป ์๋ฉธ๋๋ค. ๋ํ ์ค๋ ๋ ๊ฐ์ ์์ ๊ณต์ ์ ๋๊ธฐํ๋ TCB๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๋ฆฌ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฎคํ ์ค๋ ์ธ๋งํฌ์ด ์ ๊ฐ์ ๋๊ธฐํ ๊ธฐ๋ฒ์ ์ฌ์ฉํ ๋, TCB์์ ํด๋น ์ค๋ ๋์ ๋ฎคํ ์ค๋ ์ธ๋งํฌ์ด ์ ๋ณด๋ฅผ ๊ด๋ฆฌํ๊ณ , ์ค๋ ๋๊ฐ ํด๋น ์์์ ๋ํ ์ ๊ทผ ๊ถํ์ ํ๋ํ๊ฑฐ๋ ๋ฐ๋ฉํ ๋ TCB์ ์ ๋ณด๋ฅผ ์ ๋ฐ์ดํธํ๊ฒ ๋๋ค.
๋ฎคํ ์ค(mutex): ์๊ณ ๊ตฌ์ญ์ 1๊ฐ์ ์ค๋ ๋๋ง ๋ค์ด๊ฐ ์ ์๋ ๋๊ธฐํ ๊ธฐ๋ฒ์ธ๋งํฌ์ด(semaphore): ์๊ณ ๊ตฌ์ญ์ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋ค์ด๊ฐ ์ ์๊ณ , counter๋ฅผ ๋์ด์ ํ์ฉ ๊ฐ๋ฅํ ์ค๋ ๋๋ฅผ ์ ํํ๋ ๊ธฐ๋ฒ
ํ๋ก์ธ์ค vs ์ค๋ ๋ ์ปจํ
์คํธ ์ค์์นญ
๋ชจ๋ ๋ฉํฐํ์คํน ํ๊ฒฝ์์ ์ฌ๋ฌ ํ๋ก์ธ์ค ๋๋ ์ค๋ ๋๋ค์ ๋์์ ์คํํ๊ธฐ ์ํ ๊ธฐ์ ์ด๋ค.
1. TCB์ PCB์ ์ฐจ์ด์
ํ๋ก์ธ์ค ๋ด์ ์ค๋ ๋๋ค์ text, data, heap ์์ญ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๊ณ , TCB์๋ stack ๋ฐ ๊ฐ๋จํ ๋ ์ง์คํฐ ํฌ์ธํฐ ์ ๋ณด๋ง์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ PCB๋ณด๋ค TCB๊ฐ ๊ฐ๋ฒผ์ ๋ ๋นจ๋ฆฌ ์ฝ๊ณ ์ธ ์ ์๋ค.
2. ์บ์ ๋ฉ๋ชจ๋ฆฌ ์ด๊ธฐํ ์ฌ๋ถ
CPU ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ CPU์ ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ด์ ์์นํ์ฌ CPU์์ ํ๋ฒ ์ด์ ์ฝ์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํด ๋์๋ค๊ฐ ๋ค์ CPU๊ฐ ์์ฒญํ๋ฉด ๋ฉ์ธ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ์บ์ ๋ฉ๋ชจ๋ฆฌ์์ ์ฝ์ด์ค๊ธฐ ๋๋ฌธ์ ๋น ๋ฅธ ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ณ ์ธ ์ ์๋ค.

ํ๋ก์ธ์ค ์ปจํ ์คํธ ์ค์์นญ์ด ์ผ์ด๋ ๊ฒฝ์ฐ, ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์คํ์ผ๋ก ์ธํด CPU๊ฐ ์๋ก์ด ๋ช ๋ น์ด์ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๊ธฐํํ๋๋ฐ ์ด๊ฒ์ด ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํฌ ์ ์์ด ๋ถ๋ด์ด ๋๋ ์์์ด๋ค.
์ค๋ ๋ ์ปจํ ์คํธ ์ค์์นญ์ด ์ผ์ด๋ ๊ฒฝ์ฐ, ํ๋ก์ธ์ค ๋ด ์ค๋ ๋ ๊ฐ์ ์คํ๊ณผ ๋ ์ง์คํฐ๊ฐ ๋ฑ ์ผ๋ถ ์ปจํ ์คํธ ์ ๋ณด๋ง ๋ณ๊ฒฝ๋๊ธฐ ๋๋ฌธ์ ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๊ธฐํํ ํ์๊ฐ ์๋ค. ๋ค๋ง ์ค๋ ๋๊ฐ ๋ค๋ฅธ CPU ์ฝ์ด์์ ์คํ๋ ๋๋ ํด๋น ์ฝ์ด์ ์บ์ ๋ฉ๋ชจ๋ฆฌ์ ์ค๋ ๋ ์ปจํ ์คํธ ์ ๋ณด๊ฐ ์๊ธฐ ๋๋ฌธ์ ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๊ธฐํํด์ผ ํ๋ค.
3. ์์ ๋๊ธฐํ ๋ฌธ์
์ค๋ ๋ ์ปจํ ์คํธ ์ค์์นญ์ด ๋ฐ์ํด ๋ค๋ฅธ ์ค๋ ๋๊ฐ heap ์์ญ์ ์ ๊ทผํ ๋, ์ด์ ์ค๋ ๋๊ฐ ์ด๋ฏธ ๊ณต์ ์์์ ์ฌ์ฉํ๊ณ ์๋ ๊ฒฝ์ฐ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๋ ๊ฐ์ ์ค๋ ๋๊ฐ ๋์์ ํ๋์ ๋ณ์๋ฅผ ์์ ํ๋ ค๊ณ ํ ๋ ์ค๋ ๋ ์ปจํ ์คํธ ์ค์์นญ์ด ๋ฐ์ํ๋ฉด ๋ ์ค๋ ๋๊ฐ ๋์์ ๋ณ์๋ฅผ ์์ ํ๋ ค๊ณ ํ๊ธฐ ๋๋ฌธ์ ์์์น ๋ชปํ ๊ฒฐ๊ณผ๊ฐ ๋ฐ์ํ ์ ์๋ค. ์ด๊ฒ์ ์ค๋ ๋ ๊ฐ์ ๊ฒฝ์ ์กฐ๊ฑด (race condition) ์ด๋ผ๊ณ ํ๋ค.
Last updated