๐ํ๋ก์ธ์ค
๐PCB (Process Control Block)
PCB๋ ์ด์์ฒด์ ๊ฐ ํ๋ก์ธ์ค๋ฅผ ์ ์ดํ๊ธฐ ์ํด ์ ๋ณด๋ฅผ ์ ์ฅํด๋ ๊ณณ์ผ๋ก, ํ๋ก์ธ์ค์ ์ํ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ

- ์ด์์ฒด์ ๋ ๋น ๋ฅด๊ฒ PCB์ ์ ๊ทผํ๊ธฐ ์ํด ํ๋ก์ธ์ค ํ ์ด๋ธ์ ์ฌ์ฉํ์ฌ ๊ฐ ํ๋ก์ธ์ค์ PCB๋ฅผ ๊ด๋ฆฌ
- ํ๋ก์ธ์ค๊ฐ ์์ฑ๋๋ฉด Process Metadata๋ฅผ PCB์ ์ ์ฅ (1 Process : 1 PCB)
๐Process Metadata
PCB๊ฐ ๊ฐ์ง๊ณ ์๋ ํ๋ก์ธ์ค์ ๊ดํ ์ ๋ณด

- ํ๋ก์ธ์ค ๋ฒํธ(PID) : ๋ชจ๋ ํ๋ก์ธ์ค์๋ ํ๋ก์ธ์ค ์๋ณ์๋ฅผ ์ ์ฅํ๋ ํ๋ก์ธ์ค ID ๋๋ PID๋ผ๋ ๊ณ ์ ํ ID๊ฐ ํ ๋น๋จ
- ํ๋ก์ธ์ค ํ์ฌ ์ํ : ํ๋ก์ธ์ค์ ๊ฐ ์ํ (์์ฑ(New), ์ค๋น(Ready), ์คํ(Running), ๋๊ธฐ(Waiting), ์ข ๋ฃ(Terminated))๋ฅผ ์ ์ฅ
- ํฌ์ธํฐ : ํ๋ก์ธ์ค์ ํ์ฌ ์์น๋ฅผ ์ ์ฅํ๋ ํฌ์ธํฐ ์ ๋ณด
- ํ๋ก๊ทธ๋จ ์นด์ดํฐ(PC) : ํ๋ก์ธ์ค๋ฅผ ์ํด ์คํ๋ ๋ค์ ๋ช ๋ น์ด์ ์ฃผ์๋ฅผ ํฌํจํ๋ ์นด์ดํฐ ๊ฐ์ ์ ์ฅํจ
- ๋ ์ง์คํฐ ์ ๋ณด : ๋์ฐ๊ธฐ, ๋ฒ ์ด์ค, ๋ ์ง์คํฐ ๋ฐ ๋ฒ์ฉ ๋ ์ง์คํฐ๋ฅผ ํฌํจํ๋ CPU ๋ ์ง์คํฐ์ ์๋ ์ ๋ณด. ์คํ ํฌ์ธํฐ(SP) ๋ํ ๋ ์ง์คํฐ ์ค ํ๋์ด๋ฉฐ, ์์คํ ์คํ ํฌ์ธํฐ์ Top ์ฃผ์๋ฅผ ์ ์ฅ
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ ๋ณด : ์ด์์ฒด์ ์์ ์ฌ์ฉํ๋ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์์คํ ์ ๋ํ ์ ๋ณด๊ฐ ํฌํจ๋จ. ํ์ด์ง ํ ์ด๋ธ, ์ธ๊ทธ๋จผํธ ํ ์ด๋ธ ๋ฑ์ด ํฌํจ๋ ์ ์์
- ์ ,์ถ๋ ฅ ์ํ ์ ๋ณด : ์ ์ถ๋ ฅ์ฅ์น, ๊ฐ๋ฐฉ๋ ํ์ผ ๋ชฉ๋ก
๐PCB์ Process Metadata๊ฐ ์ ์ฅ๋๋ ๊ณผ์

- ํ๋ก๊ทธ๋จ ์คํ
- ํ๋ก์ธ์ค ์์ฑ
- ํ๋ก์ธ์ค ์ฃผ์ ๊ณต๊ฐ์ Stack, Data, Code ์์ฑ
- ์ด ํ๋ก์ธ์ค์ ๋ฉํ ๋ฐ์ดํฐ๋ค์ PCB์ ์ ์ฅ
๐PCB๊ฐ ๊ด๋ฆฌ๋๋ ๋ฐฉ์
Linked List ๋ฐฉ์์ผ๋ก ๊ด๋ฆฌ
- PCB List Head์ PCB๊ฐ ์์ฑ๋ ๋๋ง๋ค ๋ถ์
- ์ฃผ์๊ฐ์ผ๋ก ์ฐ๊ฒฐ์ด ์ด๋ฃจ์ด์ ธ์๋ Linked list์ด๊ธฐ ๋๋ฌธ์ ์ฝ์ , ์ญ์ ๊ฐ ์ฉ์ด
- ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ฉด PCB๋ ์ ๊ฑฐ๋จ
๐PCB๊ฐ ํ์ํ ์ด์
CPU์์ ํ๋ก์ธ์ค์ ์ํ์ ๋ฐ๋ผ ๊ต์ฒด ์์ ์ด ์ด๋ฃจ์ด์ง ๋, ๋ค์ ์ํํ Block ์ํ์ ํ๋ก์ธ์ค์ ์ํ๊ฐ์ PCB์ ์ ์ฅํ๊ธฐ ์ํจ
๐Context Switching
ํ์ฌ ์งํํ๊ณ ์๋ ํ๋ก์ธ์ค์ ์ํ๋ฅผ PCB์ ์ ์ฅํ๊ณ , ์๋ก ๋ค์ด์ค๋ ํ๋ก์ธ์ค์ PCB ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ๋ ์ง์คํฐ์ ๊ฐ์ ์ ์ฌํ๋ ๊ณผ์ (ํ๋ก์ธ์ค ๊ต์ฒด ๊ณผ์ ) ์ฆ, ์ํ ์ค์ธ ํ๋ก์ธ์ค๋ฅผ ๋ณ๊ฒฝํ ๋, CPU์ ๋ ์ง์คํฐ ์ ๋ณด๊ฐ ๋ณ๊ฒฝ๋๋ ๊ฒ

- Context Switching์ ํ๋ก์ธ์ค๊ฐ Ready โ Running, Running โ Ready, Running โ Block ์ฒ๋ผ ์ํ ๋ณ๊ฒฝ ์์ ๋ฐ์
๐Context Switching์ด ๋ฐ์ํ๋ ๊ฒฝ์ฐ
1. ์ธํฐ๋ฝํธ(Interrupt)
2. ์์คํ ์ฝ(System Call)
๐Context Switching์ด ํ์ํ ์ด์
CPU๊ฐ ๋์์ ์ํํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ํ๊ธฐ ์ํจ (์ค์ ๋ก CPU๋ ํ ๋ฒ์ ํ๋์ ํ๋ก์ธ์ค๋ง ์ํ ๊ฐ๋ฅ)
๐Context Switching ๊ณผ์

- Process P0์ด ์คํ๋๋ ๋์ค, ์ด๋ ํ ์ด์ ๋ก ์ธํฐ๋ฝํธ๋ ์์คํ ์ฝ์ด ๋ฐ์
- P0์ด ์ ์ ๋ชจ๋์์ ์ปค๋ ๋ชจ๋๋ก ์ ํ๋๊ณ P0์ Ready๋ก ์ํ ๋ณ๊ฒฝ
- P0์ ํ๋ก์ธ์ค ์ํ ์ ๋ณด๋ฅผ PCB์ ์ ์ฅ
- P1์ PCB ์ ๋ณด๋ฅผ ํตํด CPU ๋ ์ง์คํฐ ์ ๋ณด๋ฅผ ์
- Program Counter : ์ด๋ ๋ช ๋ น์ด๋ฅผ ์คํํ ์ง์ ๋ํ ์ ๋ณด
- Stack Pointer : ํ๋ก์ธ์ค์ ์คํ ์์ญ ๋ง์ง๋ง ์ฃผ์์ ๋ํ ์ ๋ณด
- P1 ํ๋ก์ธ์ค๋ฅผ ์ปค๋ ๋ชจ๋์์ ์ ์ ๋ชจ๋๋ก ์ ํํด ์คํ
Context Switching์ ํ ๋, ์ค๋ฒํค๋๊ฐ ๋ฐ์ํ ํ ๋ฐ Context Switching์ ํ๋ ์ด์ ?
ํ๋ก์ธ์ค ์ํ ์ค ์ ์ถ๋ ฅ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ ๋ CPU๋ฅผ ์ฌ์ฉํ์ง ์๊ฒ ๋๋๋ฐ ์ด CPU๊ฐ ๋ญ๋น๋๋ ์๊ฐ ๋์ ์ฐจ๋ผ๋ฆฌ overhead๊ฐ ๋ฐ์ํ๋๋ผ๋ Context Switching์ ํตํด ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์คํ์ํค๋ ๊ฒ ์ ์ฒด์ ์ผ๋ก ๋ดค์ ๋ ๋ ํจ์จ์ ์ด๊ธฐ ๋๋ฌธ์ overhead๋ฅผ ๊ฐ์ํ๊ณ Context Switching์ ํจ
๐Context Switching ์ค๋ฒํค๋ Context Switching์ ๊ฑธ๋ฆฐ ์๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ