ํ๋ก์ธ์ค์ ์ค๋ ๋
ํ๋ก์ธ์ค
ํ๋ก์ธ์ค๋ CPU ์ค์ผ์ค๋ง์ ๋์์ด ๋๋ ์์ ์ผ๋ก, ํ๋ก๊ทธ๋จ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ ์ธ์คํด์คํ๋ ๊ฒ(= ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ)
| ํ๋ก๊ทธ๋จ | ํ๋ก์ธ์ค | |
| ์ ์, ์ํ | ํน์ ์์ ์ ์ํด ์์ฑ๋ ์ฝ๋์ ์งํฉ HDD, SSD์ ์ ์ฅ๋ ์ ์ ์ํ | ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋์ด ๋์ ์ผ๋ก ์๋ |
| ์์ ์ฌ์ฉ | ์ ์ฅ์ ์ํ ๋์คํฌ ๊ณต๊ฐ๋ง ์กด์ฌ | CPU, ๋ฉ๋ชจ๋ฆฌ ์ฃผ์, ๋์คํฌ ๋ฑ ๋ค์ํ ์์คํ ์์ ์ฌ์ฉ |
| ์ธ์คํด์คํ | ํ๋์ ํ๋ก๊ทธ๋จ ํ์ผ๋ก ์กด์ฌ | ์ฌ๋ฌ ๋ฒ ์คํ๋๋ฉด ์ฌ๋ฌ ๊ฐ ์์ฑ๋จ |
| ํน์ฑ | ์๋, ์ ์ ์ํฐํฐ ์คํ ์ ๊น์ง ์ด๋ค ์์ ๋ ์ํ X | ๋์ , ํ์ฑํ๋ ์ํฐํฐ OS์ ์ํด ๊ด๋ฆฌ๋จ |
ํ๋ก์ธ์ค ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
๋ฉ๋ชจ๋ฆฌ์๋ ์ปดํจํฐ๊ฐ ์คํ๋๋ ์๊ฐ๋ถํฐ ๋ค์ํ ํ๋ก์ธ์ค๋ค์ด ์ ์ฌ๋์ด ์คํ๋๋ค. ํ๋ก์ธ์ค ์ ํ์ ๋ค์๊ณผ ๊ฐ๋ค.
- ํฌ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค(foreground process): ์ฌ์ฉ์๊ฐ ๋ณด๋ ๊ณต๊ฐ์์ ์ฌ์ฉ์์ ์ํธ์์ฉํ๋ฉฐ ์คํ๋๋ ํ๋ก์ธ์ค(ex: ํฐ๋ฏธ๋ ๋ช ๋ น์ด)
- ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค(background process): ์ฌ์ฉ์๊ฐ ๋ณด์ง ๋ชปํ๋ ๊ณณ์์ ์คํ๋๋ ํ๋ก์ธ์ค
- ๋ฐ๋ชฌ(daemon): ์ฌ์ฉ์์ ๋ณ๋ค๋ฅธ ์ํธ์์ฉ ์์ด ์ฃผ์ด์ง ์์ ๋ง ์ํํ๋ ํน๋ณํ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค
ํ๋์ ํ๋ก์ธ์ค๋ฅผ ๊ตฌ์ฑํ๋ ๋ฉ๋ชจ๋ฆฌ ๋ด ์ปค๋ ์์ญ์๋ ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก(PCB) ์ ๋ณด๊ฐ ์ ์ฅ๋๊ณ , ์ฌ์ฉ์ ์์ญ์๋ ์คํ ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์ฝ๋ ์์ญ, ๋ฐ์ดํฐ ์์ญ, ํ ์์ญ, ์คํ ์์ญ์ผ๋ก ๋๋์ด ์ ์ฅ๋๋ค.


์ฝ๋ ์์ญ(TEXT ์์ญ)
- ์คํ ๊ฐ๋ฅํ ๊ธฐ๊ณ์ด๋ก ์ด๋ฃจ์ด์ง ๋ช ๋ น์ด๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ
- CPU๊ฐ ์ฝ๊ณ ์คํํ ๋ช ๋ น์ด๊ฐ ๋ด๊ฒจ ์๊ธฐ ๋๋ฌธ์ ์ฐ๊ธฐ๊ฐ ๊ธ์ง๋์ด ์๋ ์ฝ๊ธฐ ์ ์ฉ(read-only)
- ํ๋ก๊ทธ๋จ ์คํ ๋์ค ํฌ๊ธฐ๊ฐ ๋ณํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ ํ ๋น ์์ญ
๋ฐ์ดํฐ ์์ญ
- ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ๋์ ์ ์งํ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ๊ณต๊ฐ
- ์ ์ญ๋ณ์, ์ ์ ๋ณ์ ์ ์ฅ
- ํ๋ก๊ทธ๋จ ์คํ ๋์ค ํฌ๊ธฐ๊ฐ ๋ณํ์ง ์๊ธฐ ๋๋ฌธ์ ์ ์ ํ ๋น ์์ญ
• BSS segment: ์ ์ญ ๋ณ์, static & const๋ก ์ ์ธ, 0์ผ๋ก ์ด๊ธฐํ ๋๋ ์ด๊ธฐํ๊ฐ ์ด๋ค ๊ฐ์ผ๋ก๋ ๋์ด ์์ง ์์ ๋ณ์
• Data segment: ์ ์ญ ๋ณ์, static & const๋ก ์ ์ธ, 0์ด ์๋ ๊ฐ์ผ๋ก ์ด๊ธฐํ๋ ๋ณ์
ํ ์์ญ
- ํ๋ก๊ทธ๋จ์ ๋ง๋ ์ฌ์ฉ์(๊ฐ๋ฐ์)๊ฐ ์ง์ ํ ๋น ๊ฐ๋ฅํ ์ ์ฅ ๊ณต๊ฐ(ex: ๋์ ๋ฐฐ์ด malloc, ๊ฐ์ฒด new ๋ฑ)์ผ๋ก, ํ๋ก๊ทธ๋จ ์คํ ๋์ค ๋น๊ต์ ์์ ๋กญ๊ฒ ํ ๋นํด ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ
- ํ ์์ญ์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํ ๊ฒฝ์ฐ, ๋ฐ๋์ ํด๋น ๊ณต๊ฐ ๋ฐํํด์ผ ํจ! → ๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฌธ์ ๋ฐ์(ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์์ฒด์์ ์ฌ์ฉํ์ง ์์ ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํด์ ํ๋ ๊ฐ๋น์ง ์ปฌ๋ ์ ๊ธฐ๋ฅ ์ ๊ณตํ๊ธฐ๋ ํจ)
๋ฉ๋ชจ๋ฆฌ ๋์(memory leak): ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋ฐํํ์ง ์์ ํ ๋นํ ๊ณต๊ฐ์ด ๊ณ์ ๋ฉ๋ชจ๋ฆฌ ๋ด์ ๋จ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ญ๋นํ๋ ๋ฌธ์
- ํ๋ก๊ทธ๋จ ์คํ ์ค ํฌ๊ธฐ๊ฐ ๋ณํ ์ ์๋ ๋์ ํ ๋น ์์ญ
- ๋์ ํ ๋น์ ์ํด ๋ฎ์ ์ฃผ์์์ ๋์ ์ฃผ์ ๋ฐฉํฅ(Bottom-up)์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ํ ๋นํจ
- ๋ฐํ์์ ํ์ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๋ค.
๋ฐ ํ์: ์ปดํ์ผ ๊ณผ์ ์ ๋ง์น ํ๋ก๊ทธ๋จ์ด ์ฌ์ฉ์์ ์ํด ์คํ๋๊ณ ๋์๋๋ ์์
์คํ ์์ญ
- ์ผ์์ ์ผ๋ก ์ฌ์ฉํ ๊ฐ๋ค์ด ์ ์ฅ๋๋ ๊ณต๊ฐ์ผ๋ก, ํจ์์ ์คํ์ด ๋๋๋ฉด ์ฌ๋ผ์ง๋ ๋งค๊ฐ๋ณ์, ์ง์ญ ๋ณ์, ํจ์ ๋ณต๊ท ์ฃผ์ ๋ฑ์ด ์ ์ฅ๋๋ค.
- ์คํ ํธ๋ ์ด์ค ํํ์ ํจ์ ํธ์ถ ์ ๋ณด๊ฐ ์ ์ฅ๋ ์ ์๋ค.
์คํ ํธ๋ ์ด์ค(stack trace): ํน์ ์์ ์ ์คํ ์์ญ์ ์ ์ฅ๋ ํจ์ ํธ์ถ ์ ๋ณด๋ก, ๋ฌธ์ ์ ๋ฐ์ ์ง์ ์ ์ถ์ ํ ์ ์์ด ๋๋ฒ๊น ์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋๋ค.
- ํจ์ ํธ์ถ ์ ์์ฑ & ์ข ๋ฃ ์ ์ ๊ฑฐ๋๋ ํ์ฑํ ๋ ์ฝ๋ pop/push
- ๋์ ์ฃผ์์์ ๋ฎ์ ์ฃผ์ ๋ฐฉํฅ์ผ๋ก ํ ๋น๋๋ค.
- ์ปดํ์ผ ํ์์ ์คํ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋๋ค.
์ปดํ์ผ ํ์: ์์ค์ฝ๋๊ฐ ์คํ ๊ฐ๋ฅํ ๊ธฐ๊ณ์ด ์ฝ๋๋ก ๋ณํ๋์ด ๋จธ์ ์์ ์คํ ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ์ด ๋๋ ๊ณผ์

ํ vs ์คํ
์คํ๊ณผ ํ ์์ญ์ ๊ฐ์ ๊ณต๊ฐ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์, ์คํ ์์ญ์ด ํด์๋ก ํ ์์ญ์ด ์์์ง๊ณ . ์คํ ์์ญ์ด ์์์๋ก ํ ์์ญ์ด ์ปค์ง๋ค.
์ ์ ์์ญ๋ณด๋ค ๋์ ์ฃผ์์ ์ปค๋ ์์ญ์ด ์๊ธฐ ๋๋ฌธ์ ์ปค๋ ์์ญ์ ๋ณดํธํ๊ธฐ ์ํด ์ ์ ์ ์คํ ์์ญ์ ๋์ ์ฃผ์ → ๋ฎ์ ์ฃผ์ ๋ฐฉํฅ์ผ๋ก ํ ๋น๋๊ณ , ํ ์์ญ์ ๋ฎ์ ์ฃผ์ → ๋์ ์ฃผ์ ๋ฐฉํฅ์ผ๋ก ํ ๋น๋๋ค.
์คํ๊ณผ ํ ์์ญ์ด ์๋ก ์๋์ ์์ญ์ ์นจ๋ฒํ๊ฒ ๋๋ฉด, ์คํ ์ค๋ฒํ๋ก์ฐ(Stack Overflow)์ ํ ์ค๋ฒํ๋ก์ฐ(Heap Overflow)๊ฐ ๋ฐ์ํ๋ค.
ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก(PCB, Process Control Block)
์ด์์ฒด์ ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋ ๋ค์์ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ๋ ค๋ฉด ํ๋ก์ธ์ค๋ฅผ ์๋ณํ ์ ์๋ ์ปค๋ ์์ญ ๋ด์ ์ ๋ณด๊ฐ ํ์ํ๋ค. ์ด ์ ๋ณด๊ฐ ๋ฐ๋ก ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก(PCB)์ด๋ค.
PCB๋ ์ด์์ฒด์ ์์ ํ๋ก์ธ์ค์ ๋ํ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ๋ฐ์ดํฐ๋ก, ํ๋ก์ธ์ค์ ๊ด๋ จ๋ ๋ค์ํ ์ ๋ณด๋ฅผ ๋ดํฌํ๋ ๊ตฌ์กฐ์ฒด์ ์ผ์ข ์ด๋ค.
๊ตฌ์กฐ์ฒด(struct): ์๋ก ๋ค๋ฅธ ์๋ฃํ์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ๋ฅผ ํ๋๋ก ๋ฌถ์ด ํ์ฉํ ์ ์๋๋ก ํ๋ ๋ณตํฉ ์๋ฃํ์ ์ผ์ข
- ์๋ก์ด ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ(ํ๋ก์ธ์ค ์์ฑ)๋์ ๋ ์ปค๋ ์์ญ์ ๋ง๋ค์ด์ง๊ณ , ํ๋ก์ธ์ค ์คํ์ด ๋๋๋ฉด ํ๊ธฐ๋๋ค.
- ํ๋ก์ธ์ค์ ์ค์ํ ์ ๋ณด๋ฅผ ํฌํจํ๊ณ ์๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ์ปค๋ ์คํ์ ๊ฐ์ฅ ์ ๋ถ๋ถ์์ ๊ด๋ฆฌ๋จ
PCB ์ ๋ณด

- ํ๋ก์ธ์ค ์๋ณ์(PID): ๊ฐ ํ๋ก์ธ์ค์ ๊ณ ์ ํ ID
- ํ๋ก์ธ์ค ์ํ: ์คํ, ๋๊ธฐ, ์ ์ง ์ํ ๋ฑ
- ํ๋ก๊ทธ๋จ ์นด์ดํฐ: ๋ค์์ ์คํํ ๋ช ๋ น์ด์ ์ฃผ์
- ์คํ ๊ณผ์ ์์ ์ฌ์ฉํ CPU ๋ ์ง์คํฐ ๊ฐ: ๋์ฐ๊ธฐ(Accumulator), ์คํ ํฌ์ธํฐ, ๋ฒ ์ด์ค ๋ ์ง์คํฐ ๋ฑ
- CPU ์ค์ผ์ค๋ง ์ ๋ณด: CPU ์ค์ผ์ค๋ฌ์ ์ํด ์ค๋จ๋ ์๊ฐ ๋ฑ์ ๋ํ ์ ๋ณด
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ จ ์ ๋ณด: ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ ์์น
- I/O ์ํ ์ ๋ณด: ํ๋ก์ธ์ค์ ํ ๋น๋ I/O ๋๋ฐ์ด์ค ๋ชฉ๋ก
- ๊ณ์ ์ ๋ณด: ํ๋ก์ธ์ค ์คํ์ ์ฌ์ฉ๋ CPU ์ฌ์ฉ๋, ์คํํ ์ ์ ์ ์ ๋ณด
- ํฌ์ธํฐ: ๋ถ๋ชจ ํ๋ก์ธ์ค์ ๋ํ ํฌ์ธํฐ, ์์ ํ๋ก์ธ์ค์ ๋ํ ํฌ์ธํฐ, ํ๋ก์ธ์ค๊ฐ ์ํ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์์ ๋ํ ํฌ์ธํฐ, ํ ๋น๋ ์์์ ๋ํ ํฌ์ธํฐ ์ ๋ณด ๋ฑ. ํ๋ก์ธ์ค๊ฐ ์ค๋น์ํ๋ ๋๊ธฐ ์ํ์ผ ๊ฒฝ์ฐ ํ๋ก ์ด์์ด ๋๋๋ฐ, PCB์ ์ฐ๊ฒฐ ์ ํ๋ก ๊ตฌํํ๊ธฐ ์ํด ํฌ์ธํฐ ์ฌ์ฉ

- ์ฌ๋ฌ PCB๋ค์ ์ปค๋ ๋ด์ ํ๋ก์ธ์ค ํ ์ด๋ธ์ ํํ๋ก ๊ด๋ฆฌ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค. ์ฆ, ํ๋ก์ธ์ค ํ ์ด๋ธ์ ์คํ ์ค์ธ PCB์ ๋ชจ์
- ์๋กญ๊ฒ ์คํ๋๋ ํ๋ก์ธ์ค๊ฐ ์์ผ๋ฉด ํด๋น ํ๋ก์ธ์ค์ PCB๋ฅผ ํ๋ก์ธ์ค ํ ์ด๋ธ์ ์ถ๊ฐํ๊ณ , ํ์ํ ์์์ ํ ๋นํ๋ค. ๋ฐ๋๋ก, ์ข ๋ฃ๋๋ ํ๋ก์ธ์ค๊ฐ ์๋ค๋ฉด ์ฌ์ฉ ์ค์ด๋ ์์ ํด์ ํ๊ณ PCB๋ ํ๋ก์ธ์ค ํ ์ด๋ธ์์ ์ญ์ ํ๋ค.
- ํ๋ก์ธ์ค ํ ์ด๋ธ ์ฌ์ฉ์ผ๋ก ์ด์์ฒด์ ๋ ๋น ๋ฅด๊ฒ PCB์ ์ ๊ทผ ๊ฐ๋ฅํ๋ค.
์ข๋น ํ๋ก์ธ์ค: ํ๋ก์ธ์ค๊ฐ ๋น์ ์ ์ข ๋ฃ๋์ด ์ฌ์ฉํ ์์์ด ํ์๋์์์๋ ํ๋ก์ธ์ค ํ ์ด๋ธ์ ์ข ๋ฃ๋ ํ๋ก์ธ์ค์ PCB๊ฐ ๋จ์ ์๋ ๊ฒฝ์ฐ


๋ฌธ๋งฅ ๊ตํ(Context Switching)
๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋ ํ๋ก์ธ์ค๋ค์ ํ์ ๋ ์๊ฐ ๋์ ๋ฒ๊ฐ์ ๊ฐ๋ฉฐ ์คํ๋๋ค. (ํ๋ก์ธ์ค๊ฐ ์คํ๋๋ค = ์ด์์ฒด์ ์ํด CPU์ ์์์ ํ ๋น๋ฐ์๋ค)
ํ๋ก์ธ์ค์ CPU ์ฌ์ฉ ์๊ฐ์ ํ์ด๋จธ ์ธํฐ๋ฝํธ์ ์ํด ์ ํ๋๋ค. ํ๋ก์ธ์ค๋ ์์ ์ ์ฐจ๋ก๊ฐ ๋๋ฉด ์ ํด์ง ์๊ฐ๋งํผ CPU๋ฅผ ์ด์ฉํ๊ณ , ํ์ด๋จธ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด ์์ ์ ์ฐจ๋ก๋ฅผ ์๋ณดํ๊ณ ๋ค์ ์ฐจ๋ก๊ฐ ์ฌ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค.

์ ์์์ฒ๋ผ ํ๋ก์ธ์ค A๋ ํ๋ก๊ทธ๋จ ์นด์ดํฐ๋ฅผ ๋น๋กฏํ ๊ฐ์ข ๋ ์ง์คํฐ ๊ฐ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ ๋ณด, ์คํ์ ์ํด ์ด์๋ ํ์ผ, ์ฌ์ฉํ ์ ์ถ๋ ฅ์ฅ์น ๋ฑ ์ง๊ธ๊น์ง์ ์ค๊ฐ ์ ๋ณด๋ฅผ ๋ฐฑ์ ํด์ผ ๋ค์์ ๋ค์ ํ๋ก์ธ์ค A๋ฅผ ์คํํ ๋ ์ด์ ๊น์ง ์คํํ๋ ๋ด์ฉ์ ์ด์ด์ ์ฌ๊ฐํ ์ ์์
๋ฐฑ์ ๋์์ด ๋๋ ์ค๊ฐ ์ ๋ณด, ์ฆ ํ๋ก์ธ์ค ์ํ์ ์ฌ๊ฐํ๊ธฐ ์ํด ๊ธฐ์ตํด์ผ ํ ์ ๋ณด๋ฅผ ๋ฌธ๋งฅ(context)๋ผ๊ณ ํ๋ค. ํ๋ก์ธ์ค ๋ฌธ๋งฅ์ ํด๋น ํ๋ก์ธ์ค์ PCB์ ๋ช ์๋๋ค.
ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ์ฌ์ฉํ ์ ์๋ ์๊ฐ์ด ๋ค ๋๊ฑฐ๋ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด ์ด์์ฒด์ ๋ ํด๋น ํ๋ก์ธ์ค์ PCB์ ๋ฌธ๋งฅ์ ๋ฐฑ์ ํ๊ณ , ๋ค์ด์ด ์คํํ ํ๋ก์ธ์ค์ ๋ฌธ๋งฅ์ ๋ณต๊ตฌํ๋ค. ์ด๋ฌํ ์คํ์ ๋ฌธ๋งฅ ๊ตํ์ด๋ผ๊ณ ํ๋ค. ๋ฌธ๋งฅ ๊ตํ์ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋์์์ด ๋น ๋ฅด๊ฒ ๋ฒ๊ฐ์๊ฐ๋ฉฐ ์คํ๋๋ ์๋ฆฌ์ด๋ค.

- ์์ฒญ ๋ฐ์: ์ธํฐ๋ฝํธ๋ ํธ๋ฉ์ ์ํด์ ์ปจํ ์คํธ๋ฅผ ๋ฐ๊ฟ์ผํ๋ ์์ฒญ์ด ๋ค์ด์ด ex) I/O ์ ์ถ๋ ฅ, ์์ธ, ์์คํ ์ฝ ๋ฑ
- PCB์ ํ๋ก์ธ์ค ์ ๋ณด ์ ์ฅ: ๊ธฐ์กด์ ์คํ์ค์ด๋ ํ๋ก์ธ์ค P1๊ณผ ๊ด๋ จ๋ ์ ๋ณด๋ค์ PCB1์ ์ ์ฅ(running → waiting)
- CPU์ ์๋กญ๊ฒ ํ ๋น: ์ด์์ฒด์ ๋ ์๋กญ๊ฒ ์คํํ ํ๋ก์ธ์ค P2์ ๋ํ ์ ๋ณด๋ฅผ ํด๋น PCB์์ ๊ฐ์ ธ์ CPU ๋ ์ง์คํฐ์ ์ ์ฌ
- ์์ฒญ ๋ฐ์: ์ธํฐ๋ฝํธ๋ ํธ๋ฉ์ ์ํด ์ปจํ ์คํธ๋ฅผ ๋ฐ๊ฟ์ผ ํ๋ค๋ ์์ฒญ์ด ๋ค์ด์ด, P2์ ์ํ๋ฅผ PCB2์ ์ ์ฅ
- PCB1์ ์ ์ฅ๋ P1์ ์ํ ๋ถ๋ฌ์ ๋ณต๊ตฌ
- P1 ์คํ
ํ๋ก์ธ์ค ๊ฐ ๋ฌธ๋งฅ ๊ตํ์ด ์์ฃผ ๋ฐ์ํ๋ ๊ฒ์ ์ข์ง ์๋ค. ํ๋ก์ธ์ค ๊ฐ ๋๋ฌด ์ฆ์ ๋ฌธ๋งฅ ๊ตํ์ด ๋ฐ์ํ๋ฉด ์บ์ ๋ฏธ์ค๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋์์ ธ ๋ฉ๋ชจ๋ฆฌ๋ก๋ถํฐ ์คํํ ํ๋ก์ธ์ค์ ๋ด์ฉ์ ๊ฐ์ ธ์ค๋ ์์ ์ด ๋น๋ฒํด์ง๊ณ , ์ค๋ฒํค๋๋ก ์ด์ด์ง ์ ์๋ค.
ํ๋ก์ธ์ค ์ํ
ํ๋์ ํ๋ก์ธ์ค๋ ์ฌ๋ฌ ์ํ๋ฅผ ๊ฑฐ์น๋ฉฐ ์คํ๋๋๋ฐ, ์ด์์ฒด์ ๋ PCB๋ฅผ ํตํด ํ๋ก์ธ์ค์ ์ํ๋ฅผ ์ธ์ํ๊ณ ๊ด๋ฆฌํ๋ค.

- ์์ฑ ์ํ(new)
ํ๋ก์ธ์ค๋ฅผ ์์ฑ ์ค์ธ ์ํ๋ก, ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋์ด PCB๋ฅผ ํ ๋น๋ฐ์ ์ํ์ด๋ค. ์์ฑ ์ํ๋ฅผ ๊ฑฐ์ณ ์คํํ ์ค๋น๊ฐ ์๋ฃ๋ ํ๋ก์ธ์ค๋ ์ค๋น ์ํ๊ฐ ๋์ด CPU์ ํ ๋น์ ๊ธฐ๋ค๋ฆฐ๋ค. - ์ค๋น ์ํ(ready)
๋น์ฅ CPU๋ฅผ ํ ๋น๋ฐ์ ์คํํ ์ ์์ง๋ง, ์์ ์ ์ฐจ๋ก๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ ์ํ์ด๋ค. ์ฆ, CPU ์ค์ผ์ค๋ฌ๋ก๋ถํฐ CPU ์์ ๊ถ์ด ๋์ด์ค๊ธธ ๊ธฐ๋ค๋ฆฌ๋ ์ํ์ด๋ค.
์ค๋น ์ํ์ธ ํ๋ก์ธ์ค๊ฐ CPU๋ฅผ ํ ๋น๋ฐ์ผ๋ฉด ์คํ ์ํ๊ฐ ๋๋ฉฐ, ์ ํ๋๋ ๊ฒ์ ๋์คํจ์น(dispatch)๋ผ๊ณ ํ๋ค. - ์คํ ์ํ(running)
CPU ์์ ๊ถ๊ณผ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ์ ์คํ ์ค์ธ ์ํ๋ก, ์ผ์ ์๊ฐ ๋์๋ง CPU๋ฅผ ์ฌ์ฉํ ์ ์๋ค. → Instruction์ ์ํ ์ค์ธ ์ํ(CPU burst)
ํ์ด๋จธ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํด์ ํ๋ก์ธ์ค๊ฐ ํ ๋น๋ ์๊ฐ์ ๋ชจ๋ ์ฌ์ฉํ๋ฉด ๋ค์ ์ค๋น ์ํ๊ฐ ๋๊ณ , ์คํ ๋์ค ์ ์ถ๋ ฅ์ฅ์น๋ฅผ ์ฌ์ฉํด ์ ์ถ๋ ฅ์ฅ์น์ ์์ ์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํ๋ฉด ๋๊ธฐ ์ํ๊ฐ ๋๋ค.
• Instruction: ์ปดํจํฐ๊ฐ ์ํํด์ผ ํ ์์ ์ ๊ธฐ์ ํ ๋ช ๋ น๋ค ํน์ ํ๋ก๊ทธ๋จ ์คํ์ ๊ธฐ๋ณธ ๋จ์๋ก, CPU๋ ํ๋ก๊ทธ๋จ ์คํ ์ค ๊ฐ ๋ช ๋ น์ด๋ฅผ ์์ฐจ์ ์ผ๋ก ๊ฐ์ ธ์ค๊ณ (fetch), ํด์(decode) ํ ์คํ(execute)ํ๋ ์ฌ์ดํด ๋ฐ๋ณต(์ด๋, ๋ช ๋ น์ด๋ ๋ฉ๋ชจ๋ฆฌ์์ ๊ฐ์ ธ์ ์คํํจ)
• cpu brust: ํ๋ก์ธ์ค๊ฐ cpu๋ฅผ ๋ ์ ์ ์ผ๋ก ์ฌ์ฉํด ์ฐ์์ ์ผ๋ก ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ๊ตฌ๊ฐ์ผ๋ก, I/O ์์ ์์ด ์ค์ง CPU์์ ์ฐ์ฐ๋ง ์ํ - ๋๊ธฐ ์ํ(blocked)
ํ๋ก์ธ์ค๊ฐ ์ ์ถ๋ ฅ ์์ ์ ์์ฒญํ๊ฑฐ๋ ๋ฐ๋ก ํ๋ณดํ ์ ์๋ ์์์ ์์ฒญํ๋ ๋ฑ ๊ณง์ฅ ์คํ์ด ๋ถ๊ฐ๋ฅํ ์กฐ๊ฑด์ ๋์ด๋ ๊ฒฝ์ฐ ๋๊ธฐ ์ํ๊ฐ ๋๋ค.(I/O ์ธํฐ๋ฝํธ)
๋๊ธฐ ์ํ์๋ ํ๋ก์ธ์ค๋ ์ ์ถ๋ ฅ ์์ ์ด ์๋ฃ๋๋ ๋ฑ ์คํ ๊ฐ๋ฅํ ์ํ๊ฐ ๋๋ฉด ๋ค์ ์ค๋น ์ํ๊ฐ ๋์ด CPU ํ ๋น์ ๊ธฐ๋ค๋ฆฐ๋ค. - ์ข
๋ฃ ์ํ(terminated)
ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋ ์ํ๋ก, ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋๋ฉด ์ด์์ฒด์ ๋ PCB์ ํ๋ก์ธ์ค๊ฐ ์ฌ์ฉํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ๋ฆฌํ๋ค.
• ๋น์๋ฐ์ ์ข ๋ฃ: ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์์ ํ๋ก์ธ์ค๋ฅผ ๊ฐ์ ์ข ๋ฃ์ํค๋ ๋น์๋ฐ์ ์ข ๋ฃ(abort)
โ ์์ ํ๋ก์ธ์ค์ ํ ๋น๋ ์์์ด ํ๊ณ์น๋ฅผ ๋๊ฒผ์ ๋
โก ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ ์ข ๋ฃ๋์ ๋
โข ์ฌ์ฉ์๊ฐprocess.kill๋ฑ ์ฌ๋ฌ ๋ช ๋ น์ด๋ก ํ๋ก์ธ์ค ์ข ๋ฃํ ๋
๋ธ๋กํน ์ ์ถ๋ ฅ(blocking I/O): ํ๋ก์ธ์ค๊ฐ ์คํ ๋์ค ์ ์ถ๋ ฅ ์์ ์ ์ํํด์ผ ํ๋ ๊ฒฝ์ฐ, ํด๋น ํ๋ก์ธ์ค๊ฐ ๋๊ธฐ ์ํ๋ก ์ ์ด๋ค๊ณ , ์ ์ถ๋ ฅ ์์ ์ด ์๋ฃ๋๋ฉด ์ค๋น ์ํ๊ฐ ๋์ด ์คํ์ ์ฌ๊ฐํ๋ ์ ์ถ๋ ฅ ์ ํ
๋ ผ๋ธ๋กํน ์ ์ถ๋ ฅ(non-blocking I/O): ์ ์ถ๋ ฅ์ฅ์น์๊ฒ ์ ์ถ๋ ฅ ์์ ์ ๋งก๊ธด ๋ค, ๊ณง๋ฐ๋ก ์ด์ด์ง ๋ช ๋ น์ด๋ฅผ ์คํํ๋ ์ ์ถ๋ ฅ ์ ํ
๋ฉํฐ ํ๋ก์ธ์ค์ ๋ฉํฐ ์ค๋ ๋
๋ฉํฐ ํ๋ก์ธ์ค(multi-process)
๊ฐ์ ํ๋ก๊ทธ๋จ์ ๊ฐ๊ธฐ ๋ค๋ฅธ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ก ์์ฑํด ๋์์ ์คํํ๋ ๋ฐฉ๋ฒ
ex) ์น ๋ธ๋ผ์ฐ์ ํญ - ํ๋์ ํญ๋ง๋ค ํ๋์ ํ๋ก์ธ์ค๋ก ๋์, ๋ฐ์ดํฐ๋ฒ ์ด์ค - ์ฌ๋ฌ ๊ฐ์ ํด๋ผ์ด์ธํธ ์์ฒญ์ ๊ฐ๋ณ ํ๋ก์ธ์ค๋ก ์ฒ๋ฆฌ
- ๊ฐ๊ธฐ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ด ๊ธฐ๋ณธ์ ์ผ๋ก ์์์ ๊ณต์ ํ์ง ์๊ณ , ๋
๋ฆฝ์ ์ผ๋ก ์คํ๋๋ค.
์ฆ, ๊ฐ์ ์์ ์ ์ํํ๊ณ ์์ง๋ง ๊ฐ๊ฐ์ PIC ๊ฐ์ด ๋ค๋ฅด๊ณ , ํ๋ก์ธ์ค๋ณ๋ก ํ์ผ๊ณผ ์ ์ถ๋ ฅ์ฅ์น ๋ฑ์ ์์์ด ๋ ๋ฆฝ์ ์ผ๋ก ํ ๋น๋์ด ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํฅ์ ๊ฑฐ์ ๋ผ์น์ง ์์ - ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์ฌ์ฉ: ๊ฐ ํ๋ก์ธ์ค๋ ์์ ๋ง์ ์ฃผ์ ๊ณต๊ฐ(์ฝ๋, ๋ฐ์ดํฐ, ํ, ์คํ ๋ฑ)์ ๊ฐ์ง๋ค.
- ํ๋ก์ธ์ค ๊ฐ ํต์ (IPC) ํ์
[์ฅ์ ]
- ์์ ์ฑ: ํ ํ๋ก์ธ์ค๊ฐ ์ฃฝ์ด๋ ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์ํฅ์ ์ฃผ์ง ์์
- ๋ฉํฐ์ฝ์ด CPU ํ์ฉ: ์ฌ๋ฌ ๊ฐ์ ์ฝ์ด์์ ๋ณ๋ ฌ๋ก ์คํ ๊ฐ๋ฅ
- ์ด์์ฒด์ ์์ ๋ฉํฐํ๋ก์ธ์ค๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ง์: ํ๋ก์ธ์ค ๋จ์์ ์์ ๊ด๋ฆฌ๊ฐ ์ฒด๊ณ์ ์
[๋จ์ ]
- IPC๊ฐ ๋์: ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ ค๋ฉด ๋ณ๋ ํต์ ๋ฐฉ์์ด ํ์ํจ
- ์ปจํ ์คํธ ์ค์์นญ ๋น์ฉ ๋์: ํ๋ก์ธ์ค ์ ํ ์ ๋ฉ๋ชจ๋ฆฌ ๋ ๋ฆฝ์ฑ ์ ์งํด์ผ ํ๋ฏ๋ก ์ฑ๋ฅ ์ ํ(ํ๋ก์ธ์ค ๊ฐ ๋ฌธ๋งฅ ์ ํ ์ ์บ์ ๋ฏธ์ค ๋ฐ์)
- ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ง์: ๊ฐ ํ๋ก์ธ์ค๊ฐ ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ์ฐจ์ง
๋ฉํฐ ์ค๋ ๋(multi-thread)
์ค๋ ๋(thread): ํ๋ก์ธ์ค ๋ด์์ ์คํ๋๋ ๊ฐ์ฅ ์์ ์คํ ๋จ์๋ก, ํ๋ก์ธ์ค๋ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ฅผ ๊ฐ์ง ์ ์์
- ํ๋ก์ธ์ค ๋ด์ ์ค๋ ๋๋ Stack์ ์ ์ธํ ๋ฉ๋ชจ๋ฆฌ ์์ญ ๊ณต์
๋ฉํฐ ์ค๋ ๋๋ ํ๋ก์ธ์ค๋ฅผ ๋์์ ์คํํ๋ ์ฌ๋ฌ ์ค๋ ๋๋ฅผ ์๋ฏธํ๋ค.
ex) ์น ์๋ฒ - ๋์์ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ ์์ฒญ ์ฒ๋ฆฌ, ๋ฉํฐ๋ฏธ๋์ด ์ ํ๋ฆฌ์ผ์ด์
- ์์/์ํฅ ์ฌ์๊ณผ ๊ธฐํ ์์
๋์ ์ํ
- ํ๋์ ์ค๋ ๋๋ ์ค๋ ๋๋ฅผ ์๋ณํ ์ ์๋ ๊ณ ์ ์ ๋ณด์ธ ์ค๋ ๋ID์ ํ๋ก๊ทธ๋จ ์นด์ดํฐ, ๋ ์ง์คํฐ ๊ฐ, ์คํ ๋ฑ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
์ค๋ ๋๋ง๋ค ๊ฐ๊ฐ์ ํ๋ก๊ทธ๋จ ์นด์ดํฐ ๊ฐ๊ณผ ์คํ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ค๋ ๋๋ง๋ค ๋ค์์ ์คํํ ์ฃผ์๋ฅผ ๊ฐ์ง ์ ์๊ณ , ์ฐ์ฐ ๊ณผ์ ์ ์์์ ์ฅ ๊ฐ์ ๊ฐ์ง ์ ์๋ค. - ์ค๋ ๋๋ค์ ๋์ผํ ์ฃผ์ ๊ณต๊ฐ์ ์ฝ๋, ๋ฐ์ดํฐ, ํ ์์ญ์ ๊ณต์ ํ๊ณ , ์ด๋ฆฐ ํ์ผ๊ณผ ๊ฐ์ ํ๋ก์ธ์ค์ ์์์ ๊ณต์ ํ๋ค.
- ๋ ๋ฆฝ์ ์ธ ์์ ์ํ
- CPU์ ์ฌ๋ฌ ์ฝ์ด๋ฅผ ํจ์จ์ ์ผ๋ก ํ์ฉ
[์ฅ์ ]
- ์๋ต์ฑ ํฅ์: ํ ์ค๋ ๋๊ฐ ์์ ์ค์ด์ด๋ ๋ค๋ฅธ ์ค๋ ๋๊ฐ ์ฌ์ฉ์ ์ ๋ ฅ์ ์๋ต ๊ฐ๋ฅ
- ์์ ํจ์จ์ฑ: ํ๋ก์ธ์ค๋ณด๋ค ์ ์ ๋ฉ๋ชจ๋ฆฌ์ ์์ ์ฌ์ฉ
- ๋น ๋ฅธ ์ปจํ ์คํธ ์ค์์นญ: ์ค๋ ๋ ๊ฐ ์ ํ์ด ํ๋ก์ธ์ค๋ณด๋ค ๋น ๋ฆ
- ๋ณ๋ ฌ ์ฒ๋ฆฌ: ๋ฉํฐ์ฝ์ด ํ๊ฒฝ์์ ์ฌ๋ฌ ์์ ๋์์ ์ฒ๋ฆฌ ๊ฐ๋ฅ
[๋จ์ ]
- ๋๊ธฐํ ๋ฌธ์ : ๊ณต์ ์์์ ๋ํ ์ ๊ทผ์ ์กฐ์ ํด์ผ ํจ
- ๋๋ฒ๊น ์ด๋ ค์: ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋์์ ์คํ๋์ด ๋ฒ๊ทธ ์ถ์ ๋ณต์ก
- ๋ฐ๋๋ฝ ๊ฐ๋ฅ์ฑ: ์ค๋ ๋ ๊ฐ ์์ ๊ฒฝ์์ผ๋ก ๊ต์ฐฉ ์ํ ๋ฐ์ ๊ฐ๋ฅ
ํ๋ก์ธ์ค ์ปจํ ์คํธ ์ค์์นญ vs ์ค๋ ๋ ์ปจํ ์คํธ ์ค์์นญ
์ปจํ ์คํธ ์ค์์นญ ๊ณผ์ ์์ PCB ๋๋ TCB๋ฅผ ์ฌ์ฉํด ๋ ์ง์คํฐ, ํ๋ก๊ทธ๋จ ์นด์ดํฐ, ์คํ ๋ฑ์ ์ ๋ณด๋ฅผ ์ ์ฅ ๋ฐ ๋ณต์ํ๋ค.
ํ๋ก์ธ์ค ์ปจํ ์คํธ ์ค์์นญ
ํ์ด๋จธ ์ธํฐ๋ฝํธ ํน์ I/O ์ธํฐ๋ฝํธ ๋ฐ์ ์ PCB๋ฅผ ๊ตํํ๋ ๊ณผ์ ์ผ๋ก, ์ปดํจํฐ๋ ๋ง์ ํ๋ก๊ทธ๋จ์ ๋์์ ์คํํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง, ์ด๋ค ์์ ์์ ์คํ๋๊ณ ์๋ ํ๋ก์ธ์ค๋ ๋จ ํ ๊ฐ์ด๋ค.
- ํ์ฌ ํ๋ก์ธ์ค ์ํ ์ ์ฅ: ๋ ์ง์คํฐ ๊ฐ, PC, ์คํ ํฌ์ธํฐ ๋ฑ์ PCB์ ์ ์ฅ
- ์๋ก์ด ํ๋ก์ธ์ค PCB ๋ก๋: PCB ์ ๋ณด ๊ฐ์ ธ์ CPU์ ๋ณต์
- ๋ฉ๋ชจ๋ฆฌ ๋งคํ ๋ณ๊ฒฝ: ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅด๋ฉด ์ฃผ์ ๊ณต๊ฐ์ด ๋ค๋ฅด๋ฏ๋ก MMU ์ค์ ๋ณ๊ฒฝ, TLB FLUSH ๋ฐ์
- CPU๊ฐ ์๋ก์ด ํ๋ก์ธ์ค ์คํ
TLB Flush
CPU๊ฐ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ๋ฉด์ TLB์ ์ ์ฅํ (page, frame) ๋งคํ ์ ๋ณด๋ฅผ ๋ชจ๋ ์ง์ฐ๋ ๊ณผ์ ์ผ๋ก, ์ฃผ๋ก ์ปจํ ์คํธ ์ค์์นญ ๊ณผ์ ์์ ๋ฐ์ํ๋ค.
์ค๋ ๋ ์ปจํ ์คํธ ์ค์์นญ
๊ฐ์ ํ๋ก์ธ์ค ๋ด ์คํ ์ค์ธ ์ค๋ ๋๋ฅผ ๋ณ๊ฒฝํ ๋ ๋ฐ์ํ๋ ๊ณผ์
- ํ์ฌ ์คํ์ค์ธ ์ค๋ ๋์ ์ํ ์ ์ฅ: ๋ ์ง์คํฐ ๊ฐ, PC, ์คํ ํฌ์ธํฐ ๋ฑ TCB์ ์ ์ฅ
- ์๋ก์ด ์ค๋ ๋์ TCB ๋ก๋
- CPU๊ฐ ์๋ก์ด ์ค๋ ๋ ์คํ
์ฆ, ์ค๋ ๋ ์ปจํ ์คํธ ์ค์์นญ์ ์ฃผ์ ๊ณต๊ฐ์ ๋ณ๊ฒฝํ๋ ๋ฉ๋ชจ๋ฆฌ ๋งคํ ๋ณ๊ฒฝ์ด ๋ฐ์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋น์ฉ์ด ๋ ๋ฎ๋ค.
TCB(Thread Control Block)
PCB๋ณด๋ค ์ ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๋ ์๋ฃ๊ตฌ์กฐ๋ก, ๋ฉ๋ชจ๋ฆฌ ์์ญ ์ค PCB๋ ์ปค๋ ์์ญ์ ์๊ณ TCB๋ ์ ์ ์์ญ๊ณผ ์ปค๋ ์์ญ ๋ ๋ค ์์ ์ ์์
- Thread ID: ์ค๋ ๋๊ฐ ์์ฑ๋ ๋ ์ด์์ฒด์ ์์ ์ค๋ ๋์ ํ ๋นํ๋ ๊ณ ์ ์๋ณ์
- ์ค๋ ๋ ์ํ: ์ค๋ ๋๊ฐ ์์คํ ์ ํตํด ์งํ๋์ ๋ฐ๋ผ ๋ณ๊ฒฝ๋๋ ์ค๋ ๋ ์ํ
- CPU ์ ๋ณด: ์ค๋ ๋๊ฐ ์ผ๋ง๋ ์งํ๋์๋์ง, ์ด๋ค ๋ฐ์ดํฐ๊ฐ ์ฌ์ฉ๋๊ณ ์๋์ง ๋ฑ OS๊ฐ ์์์ผ ํ๋ ๋ชจ๋ ์ ๋ณด๊ฐ ํฌํจ
- ์ค๋ ๋ ์ฐ์ ์์: ์ค๋ ๋ ์ค์ผ์ค๋ฌ๊ฐ Ready ๋๊ธฐ์ด์์ ๋ค์์ ์ ํํด์ผ ํ๋ ์ค๋ ๋๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐ ๋์์ด ๋๋ ๋ค๋ฅธ ์ค๋ ๋์ ๋ํ ์ค๋ ๋์ ๊ฐ์ค์น
- PCB๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ: ์ด ์ค๋ ๋ ์์ฑ์ ํธ๋ฆฌ๊ฑฐํ ํ๋ก์ธ์ค๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
- ์ด ์ค๋ ๋๊ฐ ์์ฑํ ์ค๋ ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ
- stack ํฌ์ธํฐ: ์ค๋ ๋๊ฐ ํจ์ ํธ์ถํ ๋ ์ ์ฅํ๋ ๊ณณ
1) ์ ์ ์์ญ(์์ฆ์ ๊ฑฐ์ ์ฌ์ฉ ์ํจ)

- ์ค๋ ๋๋ฅผ ๊ตฌํํ๊ณ ๊ด๋ฆฌํ๋ ๊ฒ์ด ์ ์ ์์ญ์ heap์์ ํ๋ค.
- ์ค๋ ๋ ๊ด๋ จ ๋ชจ๋ ๋์์ด ์ฌ์ฉ์ ์์ญ
2) ์ปค๋ ์์ญ

- ์ปค๋์์ ์ค๋ ๋ ๊ด๋ จ๋ ๋ชจ๋ ์์ (์ค์ผ์ค๋ง, ์คํ)์ ๊ด๋ฆฌํ๋ค.
- ์ฌ์ฉ์ ์ค๋ ๋์ ์ปค๋ ์ค๋ ๋๊ฐ 1:1 ๋งคํ๋์ด ์๋ค.
- ์ปค๋์ด ์ ์ฒด ํ๋ก์ธ์ค์ ์ค๋ ๋ ์ ๋ณด๊น์ง ์ ์งํ๋ค.
- ์ค์ผ์ค๋ง๊ณผ ๋๊ธฐํ๋ฅผ ์ํด ๋ ๋ง์ ์์์ด ํ์ํ๋ค.
- ์ค๋ ๋ ๊ตํ์ ์ปค๋ ๊ฐ์ ์ผ๋ก ์ฌ์ฉ์ ์์ญ์์ ์ปค๋ ์์ญ์ผ๋ก ์ ํ ํ์๊ฐ ์๋ค.
ํ๋ก์ธ์ค ๊ฐ ํต์ (IPC, Inter-Process Communication)
ํ๋ก์ธ์ค๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์์ ๊ณต์ ํ์ง ์์ง๋ง, ํ๋ก์ธ์ค ๊ฐ์๋ ์์์ ๊ณต์ ํ๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ๋ฐฉ๋ฒ์ ํ๋ก์ธ์ค ๊ฐ ํต์ (IPC)๋ผ๊ณ ํ๋ค.
ํ๋ก์ธ์ค ๊ฐ ํต์ ์ด ์ด๋ฃจ์ด์ง๋ ๋ฐฉ์์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ์ ๋ฉ์์ง ์ ๋ฌ์ด ์๋ค.
๊ณต์ ๋ฉ๋ชจ๋ฆฌ
๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ๋ก์ธ์ค๊ฐ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋๋ ํต์ ๋ฐฉ์์ด๋ค.
๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ผ๋ ํน๋ณํ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ํ ๋นํด ํ๋ก์ธ์ค๊ฐ ํด๋น ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ณต์ ํด์ ์ฝ๊ฑฐ๋ ์ธ ์ ์๊ฒ ๋๋ค.

- ์์คํ
์ฝ์ ๊ธฐ๋ฐ์ผ๋ก ์ํ๋๊ฑฐ๋, ํ๋ก์ธ์ค๊ฐ ๊ณต์ ํ๋ ๋ณ์๋ ํ์ผ์ ํ์ฉํ ์ ์๋ค.
ex) ํ๋ก์ธ์ค A๋ hi.txt ํ์ผ์ ์์ ํ๋ ํ๋ก์ธ์ค์ด๊ณ , ํ๋ก์ธ์ค B๋ hi.txt ํ์ผ์ ์ฝ๋ ํ๋ก์ธ์ค์ธ ๊ฒฝ์ฐ, hi.txt ํ์ผ์ ๋งค๊ฐ๋ก ํ๋ก์ธ์ค ๊ฐ ํต์ ์ ์ฃผ๊ณ ๋ฐ๋๋ค. - ํต์ ์ ์ฃผ๊ณ ๋ฐ๋ ๊ฐ ํ๋ก์ธ์ค๊ฐ ๋ง์น ์์ ์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฝ๊ณ ์ฐ๋ ๊ฒ์ฒ๋ผ ํต์ ํ๋ค.
- ํ๋ก์ธ์ค๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ณผ์ ์์ ์ปค๋์ ๊ฐ์ ์ด ๊ฑฐ์ ์๋ค.(๋ฉ์์ง ์ ๋ฌ ๋ฐฉ์๋ณด๋ค ํต์ ์๋๊ฐ ๋น ๋ฅด๋ค.)
- ๊ฐ๊ฐ์ ํ๋ก์ธ์ค๊ฐ ์๋ก์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋์์ ์ฝ๊ณ ์ฐ๋ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ์ ์ผ๊ด์ฑ์ด ํผ์๋ ์ ์๋ค.(๋ ์ด์ค ์ปจ๋์ ๋ฐ์ ์ํ ์กด์ฌ)
๋ฉ์์ง ์ ๋ฌ
ํ๋ก์ธ์ค ๊ฐ์ ์ฃผ๊ณ ๋ฐ์ ๋ฐ์ดํฐ๊ฐ ์ปค๋์ ๊ฑฐ์ณ ์ก์์ ๋๋ ํต์ ๋ฐฉ์์ด๋ค.
๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ์๋จ๊ณผ ๋ฐ๋ ์๋จ์ด ๋ช ํํ๊ฒ ๊ตฌ๋ถ๋์ด ์๋ค. ์๋ฅผ ๋ค์ด, ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ์์คํ ์ฝ์ธ send()๋ผ๋ ์์คํ ์ฝ๊ณผ ๋ฉ์์ง๋ฅผ ๋ฐ๋ ์์คํ ์ฝ์ธ recv()๋ผ๋ ์์คํ ์ฝ์ด ์ ํด์ ธ ์๊ณ , ๊ฐ ํ๋ก์ธ์ค๋ ๋ ์์คํ ์ฝ์ ํธ์ถํ๋ฉฐ ๋ฉ์์ง๋ฅผ ์ก์์ ํ๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ํ๋ก์ธ์ค์ ์ ์ฅ์์๋ ์ปค๋์ ๋์์ ์ ๊ทน์ ์ผ๋ก ๋ฐ์ ์ ์์ด ๋ ์ด์ค ์ปจ๋์ , ๋๊ธฐํ ๋ฑ์ ๋ฌธ์ ๋ฅผ ๊ณ ๋ คํ๋ ์ผ์ด ์๋์ ์ผ๋ก ์ ๋ค.
- ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ดํฐ๊ฐ ์ปค๋์ ํตํด ์ก์์ ๋๋ฏ๋ก ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๊ธฐ๋ฐ IPC๋ณด๋ค ํต์ ์๋๊ฐ ๋๋ฆฌ๋ค.
- ๋ํ์ ์ธ ์๋จ์ผ๋ก ํ์ดํ, ์๊ทธ๋, ์์ผ, ์๊ฒฉ ํ๋ก์์ ํธ์ถ(RPC) ๋ฑ์ด ์๋ค.
ํ์ดํ(pipe)
๋จ๋ฐฉํฅ ํ๋ก์ธ์ค ๊ฐ์ ํต์ ๋๊ตฌ๋ก, ํ์ดํ์ ํ ์ชฝ ๋ฐฉํฅ์์ ๋ฐ์ดํฐ๋ฅผ ์ฐ๋ฉด ํ์ดํ ๋ฐ๋์ชฝ์ผ๋ก ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ์ ์๋ค.
์๋ฐฉํฅ ํต์ ์ ์ํํ ๊ฒฝ์ฐ, ์ฝ๊ธฐ์ฉ ํ์ดํ์ ์ฐ๊ธฐ์ฉ ํ์ดํ 2๊ฐ๋ฅผ ์ด์ฉํด ์๋ฐฉํฅ์ผ๋ก ํต์ ํ๋ ๊ฒฝ์ฐ๋ ๋ง์
- ๋ณด๋ด์ง ์์๋๋ก๋ง ๋ฐ๋๋ค.(ordering)
- Pipe์ ์ฐ์ฌ์ง๋ ๋ฐ์ดํฐ๋ ์ปค๋(buffer)์ ์ ์ฅ๋๊ณ ๊ด๋ฆฌ๋๋ค.(๋๊ธฐํ ๋ณด์ฅ, ํ ์์ ์ ํ๋์ ํ๋ก์ธ์ค๋ง ์ ๊ทผ ๊ฐ๋ฅ)

- ์ต๋ช ํ์ดํ: ์๋ฐฉํฅ ํต์ ์ ์ง์ํ์ง ์๊ณ , ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค ๊ฐ์๋ง ํต์ ์ด ๊ฐ๋ฅํ๋ค.
- ์ง๋ช ํ์ดํ(=๋ค์๋ ํ์ดํ): ์๋ฐฉํฅ ํต์ ์ ์ง์ํ๋ฉฐ, ๋ถ๋ชจ ํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค ๊ฐ์๋ง ํต์ ์ด ๊ฐ๋ฅํ ๊ฒ์ด๋ผ ์๋๋ผ, ์์์ ํ๋ก์ธ์ค ๊ฐ์๋ ์ฌ์ฉ ๊ฐ๋ฅํ๋ค.
์๊ทธ๋(signal)
ํ๋ก์ธ์ค์๊ฒ ํน์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์์ ์๋ฆฌ๋ ๋น๋๊ธฐ์ ์ธ ์ ํธ๋ก, ์๊ทธ๋์ ์ ์ ํ ํ์ฉํด IPC๋ฅผ ์ํํ ์ ์๋ค.
- ํ๋ก์ธ์ค๋ ์๊ทธ๋์ด ๋ฐ์ํ๋ฉด ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ ๊ณผ์ ๊ณผ ์ ์ฌํ๊ฒ ํ๋ ์ผ์ ์ ์ ์ค๋จํ๊ณ , ์๊ทธ๋ ์ฒ๋ฆฌ๋ฅผ ์ํ ์๊ทธ๋ ํธ๋ค๋ฌ ์คํํ ๋ค ์คํ ์ฌ๊ฐํ๋ค.
- ์ด๋ ํ๋ก์ธ์ค๋ ์ง์ ํน์ ์๊ทธ๋์ ๋ฐ์์ํฌ ์ ์๊ณ , ์ง์ ์ผ๋ถ ์๊ทธ๋ ํธ๋ค๋ฌ๋ฅผ (์ฌ)์ ์ํ ์ ์๋ค.
- ์ก์ ํ๋ก์ธ์ค: ์ฌ๋ฌ ์ ํธ ์ค ํ๋๋ฅผ ํน์ ํ๋ก์ธ์ค์ ๋ณด๋
- ์ด ๋์์ ์์ ํ ํ๋ก์ธ์ค์ ์ํ๋ฅผ ๋ฌด๊ด, ๋น๋๊ธฐ์ - ์์ ํ๋ก์ธ์ค: ์๊ทธ๋ ์์ ์ ๋์์ ๊ตฌํํ ์ ์์
- Ignore: ๋ฌด์(์ด ๊ฒฝ์ฐ์๋ SIGSTOP, SIGKILL ๋ฑ์ ๋ฌด์๋์ง ์์)
- Block: ์ ํธ๋ฅผ ๋ถ์ก์ ๋ (๋์ค์ ์ฒ๋ฆฌ)
- Handle: ์๊ทธ๋์ ์ ์ ํ๋ก๊ทธ๋จ์ด ๋ฐ๋ก ์ฒ๋ฆฌ(signal handler ๊ตฌํ)
- ์ปค๋์ด ์์ ํ๋ก์ธ์ค๊ฐ ์๊ทธ๋์ ์ฒ๋ฆฌํ๋๋ก ํจ(๋ชจ๋ ํ๋ก์ธ์ค๋ ์๊ทธ๋ ์ฒ๋ฆฌ๋ฅผ ์ํ default ์ฝ๋๋ฅผ ๊ฐ๊ฒ ๋จ) - ์๊ทธ๋ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ ์ง์ ์ ์ผ๋ก ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ์ง๋ ์์ง๋ง, ๋น๋๊ธฐ์ ์ผ๋ก ์ํ๋ ๋์์ ์ํํ ์ ์๋ค.
- ํ๋ก์ธ์ค A๊ฐ ํ๋ก์ธ์ค B์๊ฒ ์๊ทธ๋์ ๋ณด๋
- ์๊ทธ๋ ์ฒ๋ฆฌ๋ ํ๋ก์ธ์ค B๊ฐ ์ค์ผ์ค๋ง ๋์ด์ผ ๊ฐ๋ฅํจ
์๊ฒฉ ํ๋ก์์ ํธ์ถ(RPC, Remote Procedure Call)
์๊ฒฉ ์ฝ๋๋ฅผ ์คํํ๋ IPC ๊ธฐ์ ๋ก, ํ ํ๋ก์ธ์ค ๋ด์ ํน์ ์ฝ๋ ์คํ์ด ๋ก์ปฌ ํ๋ก์์ ํธ์ถ์ด๋ผ๋ฉด, ๋ค๋ฅธ ํ๋ก์ธ์ค์ ์๊ฒฉ ์ฝ๋ ์คํ์ด ์๊ฒฉ ํ๋ก์์ ํธ์ถ์ธ ์ ์ด๋ค.
- RPC๋ฅผ ํตํด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ ํ๋ซํผ๊ณผ ๋ฌด๊ดํ๊ฒ ์ฑ๋ฅ ์ ํ๋ฅผ ์ต์ํํ๋ค.
- ๋ฉ์์ง ์ก์์ ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ๋๊ท๋ชจ ํธ๋ํฝ ์ฒ๋ฆฌ ํ๊ฒฝ(์๋ฒ ๊ฐ ํต์ ํ๊ฒฝ)์์ ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง์
- RPC ๊ด๋ จ ๊ธฐ๋ฅ์ RPC ํ๋ ์์ํฌ๋ก ๊ตฌํํ ์ ์์(ex: gRPC)
์์ผ
๋์ผํ ์ปดํจํฐ์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ ๋คํธ์ํฌ์ ๋ค๋ฅธ ์ปดํจํฐ๋ก ๋คํธ์ํฌ ์ธํฐํ์ด์ค๋ฅผ ํตํด ์ ์กํ๋ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ฉฐ TCP์ UDP๊ฐ ์๋ค.
์ฐธ๊ณ ์ฌ์ดํธ
์ด๊ฒ์ด ์ทจ์ ์ ์ํ ์ปดํจํฐ ๊ณผํ์ด๋ค
์ด๊ฒ์ด ์ทจ์ ์ ์ํ ์ปดํจํฐ ๊ณผํ์ด๋ค with CS ๊ธฐ์ ๋ฉด์ | ๊ฐ๋ฏผ์ฒ - ๊ต๋ณด๋ฌธ๊ณ
์ด๊ฒ์ด ์ทจ์ ์ ์ํ ์ปดํจํฐ ๊ณผํ์ด๋ค with CS ๊ธฐ์ ๋ฉด์ | ๊ธฐ์ ๋ฉด์ ๊ณผ ์ค๋ฌด์ ํ์ํ CS ์ง์, ํ ๊ถ์ผ๋ก ๋๋ด์!ํ๋ก๊ทธ๋จ์ ์คํ ์๋ฆฌ๋ฅผ ์ดํดํ์ง ๋ชปํ ์ฑ ‘์ผ๋จ ์๋๋ง ํ๋๋ก ๋ง๋๋ ๊ฒ’๊ณผ ์
product.kyobobook.co.kr
์ด์์ฒด์ ๊ฐ์, ํ๋ก์ธ์ค & ์ค๋ ๋
์ด์์ฒด์ ์ ์ญํ ๊ณผ ๊ตฌ์กฐ์ด์์ฒด์ ์ญํ CPU ์ค์ผ์ค๋ง๊ณผ ํ๋ก์ธ์ค ๊ด๋ฆฌCPU ์์ ๊ถ์ ์ด๋คํ๋ก์ธ์ค์ ํ ๋นํ ์ง, ํ๋ก์ธ์ค์ ์์ฑ๊ณผ ์ญ์ , ์์ ํ ๋น ๋ฐ ๋ฐํ ๊ด๋ฆฌ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ: ํ์ ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ด๋ค
0woy.tistory.com
์ฌ์ฉ์ ์์ญ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ
[์ด์์ฒด์ ] ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ (Heap vs Stack)
๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ์ ๋ํด์ ์ด๋ ดํ์ด๋ง ์๊ณ ์๋ ๊ฒ ๊ฐ์ ์ ๋๋ก ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํฉ๋๋ค. ์ฃผ ๋ฉ๋ชจ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ๋ ํฌ๊ฒ ์ปค๋(kernal) ์์ญ๊ณผ ์ ์ (User) ์์ญ์ผ๋ก ๋๋์ด์ง๊ณ , ์ปค๋ ์์ญ์๋ ์ด์์ฒด์ ๊ฐ ์ ์ฌ
codingwell.tistory.com
[์ด์์ฒด์ ] TLB(Translation Lookaside Buffer)
page table์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋๋ฐ, CPU๋ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ๋ฉ๋ชจ๋ฆฌ์ ๋ ๋ฒ ์ ๊ทผํด์ผ ํ๋ค.๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ page table์ ์ ๊ทผ๊ฐ์ ์ฃผ์๋ฅผ ๋ฌผ๋ฆฌ ์ฃผ์๋ก ๋ณํํ๊ธฐ ์ํด page table์ ์ ๊ทผํ๋ค.page
server-technology.tistory.com
PCB(Process Control Block) & TCB(Thread Control Block)
๊ธฐ์ด๋ฅผ ๋ณด์ํ์
velog.io
์ด์์ฒด์ (12) - ๋ฉ๋ชจ๋ฆฌ ๊ณต์ , IPC, Signal, Pipe
์ด์์ฒด์ ์์ ์ ์๊ฐํ๋ฉฐ ์ ๋ฆฌํ ๋ด์ฉ์ ์์ฑํ๋ ค๊ณ ํฉ๋๋ค.ํ๋ก์ธ์ค์ ํน์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ณต์ ๊ณต์ ํ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ์ฝ๊ธฐ/์ฐ๊ธฐ๋ฅผ ํตํด์ ํ๋ก์ธ์ค๊ฐ ํต์ ์ ์ํํ๋ก์ธ์ค ๊ฐ ํต์ ์ ์ ์
velog.io