๐ก Multi Process
Multi process๋ 2๊ฐ ์ด์์ process๊ฐ ๋์์ ์คํ๋๋ ๊ฒ์ ๋งํ๋ค ๋์์๋ผ๋ ๋ง์ *๋์์ฑ(concurrency)์ *๋ณ๋ ฌ์ค(parallelism) ๋๊ฐ์ง๋ฅผ ์๋ฏธํจ
๐ก ๋์์ฑ(concurrency)
CPU๊ฐ 1 core์ธ ๊ฒฝ์ฐ์, ์ฌ๋ฌ process๋ฅผ ์งง์ ์๊ฐ๋์ ๋ฒ๊ฐ์ ๊ฐ๋ฉด์ ์ฐ์ฐ์ ํ๊ฒ ๋๋ ์๋ถํ (time sharing system)์ผ๋ก ์คํ๋๋ ๊ฒ
๐ก ๋ณ๋ ฌ์ค(parallelism)
CPU core๊ฐ ์ฌ๋ฌ๊ฐ์ผ ๋, ๊ฐ๊ฐ์ core๊ฐ ๊ฐ๊ฐ์ process๋ฅผ ์ฐ์ผํจ์ผ๋ก์จ process๊ฐ ๋ง ๊ทธ๋๋ก ๋์์ ์คํ๋๋ ๊ฒ

๋ฉํฐ ํ๋ก์ธ์ค๋ 2๊ฐ ์ด์์ process๊ฐ ๋์์ ์คํ๋๋ ๊ฒ ์ฒ๋ผ ๋ณด์ด๋๊ฒ์ ๋งํ๋ค ์์ ์์ฑํ memory์ ๊ฒฝ์ฐ์ ์ฌ๋ฌ process๋ค์ด ๊ฐ์์ ์ฃผ์๋ฅผ ๊ฐ์ ๊ณต๊ฐ์ ์ฐจ์งํ๊ฒ ๋๋๋ฐ
๋ฐ๋ฉด์ ํ๋์ CPU๋ ๋งค ์๊ฐ ํ๋์ process๋ง์ ์ฐ์ฐํ ์ ์๋ค ํ์ง๋ง CPU์ ์ฒ๋ฆฌ ์๋๊ฐ ๊ต์ฅํ ๋น ๋ฅด๊ธฐ ๋๋ฌธ์
์ฌ๋ฌ process๋ค์ด ๋์์ ์คํ๋๋๊ฒ์ผ๋ก ์ฐฉ๊ฐํ๊ฒ ๋ง๋๋๋ฐ ์ด์ฒ๋ผ CPU ์์ ์๊ฐ์ ์ฌ๋ฌ process๋ค์ด ๋๋์ด ์ฐ๋ ์์คํ ์ ์๋ถํ (time sharing system)์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค

๋ฉํฐ ํ๋ก์ธ์ค๋ ์์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ์ ํ๋ก์ธ์ค๊ฐ ์ฌ๋ผ๊ฐ ๋ ๊ฐ๊ฐ์ ๊ณต๊ฐ์ ์นจ๋ฒํ์ง ๋ชปํ๋๋ก ๋๋์ด ํ ๋น๋ฐ๊ฒ ๋๋ค

CPU๋ PC(Prgram counter) register๊ฐ ๊ฐ๋ฅดํค๊ณ ์๋ ๋ช ๋ น์ด๋ฅผ ์ฝ์ด๋ค์ฌ ์ฐ์ฐ์ ์งํํจ(์ ๊ทธ๋ฆผ ์ฐธ๊ณ ) pc register๋ ๋ค์ ์คํ ๋ process์ ์ฃผ์๊ฐ์ ์ ์ฅํ๊ณ ์์
๋ง์ฝ process1, process2๊ฐ ์กด์ฌํ๊ณ process1์ด ํ์ฌ ์งํ์ค์ด๋ผ๋ฉด process1์ code์์ญ์ pc register๊ฐ ๊ฐ๋ฅดํค๋ค
process2๊ฐ ์งํ๋๋ฉด process2์ code ์์ญ์ ๊ฐ๋ฆฌํค๊ฒ ๋จ

์๋ถํ (time sharing system) ์์คํ
์์๋ ํ process๊ฐ ๋งค์ฐ ์งง์ ์ฃผ๊ธฐ๋ก CPU๋ฅผ ์ ์ ํ์ฌ ์ผ์ ๋ถ๋ถ ๋ช
๋ น์ ์ํํ๊ณ ,
๋ค๋ฅธ process์ CPU ์ ๊ฑฐ๋ฅผ ๋๊ฒจ์ฃผ๋ Context-switch๊ฐ ์ผ์ด๋๊ฒ ๋๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด์ ํ๋ก์ธ์ค์ ์ด๋ ๋ช
๋ น์ด๊น์ง ์ํ์ ์๋ฃํ์๋์ง์ ๋ํ ์ ๋ณด๊ฐ ํ์ํ๋ค.
ํด๋น ์ ๋ณด๋ฅผ ์์งํ๊ณ ์๋ ๋ถ๋ถ์ด ๋ฐ๋ก context์ด๋ค context์ ์ ๋ณด๋ PCB์ ์ ์ฅ์ ํ๊ฒ ๋๋ค.
![]() | ![]() |
|---|
PCB๋ ์ด์ ์ฒด์ ๊ฐ ํ๋ก์ธ์ค๋ฅผ ํํํ ์๋ฃ๊ตฌ์กฐ์ด๋ค PCB์๋ ์ค์ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์์ด ์ผ๋ฐ ์ฌ์ฉ์๊ฐ ์ ๊ทผํ์ง ๋ชปํ๋๋ก ๋ณดํธ๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋๋ค
์ผ๋ถ ์ด์ ์ฒด์ ๋ PCB๋ฅผ ์ปค๋ ์คํ(๊ทธ๋ฆผ ์ผ์ชฝ OS)์ ์ ์ฅํ๊ฒ ๋๋ค ๊ทธ๋ฌํ ์ด์ ๋ ๋ณดํธ๋ฅผ ๋ฐ์ผ๋ฉด์๋ ๋น๊ต์ ์ ๊ทผํ๊ธฐ๊ฐ ํธ๋ฆฌํ๊ธฐ ๋๋ฌธ์ด๋ค
์ถ๊ฐ๋ก PCB๋ ์๋์ ๊ฐ์ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์๋ค(๊ทธ๋ฆผ ์ค๋ฅธ์ชฝ)

Context switch๋ ์์์๋ ์งง๊ฒ ์ค๋ช
ํ๋ฏ์ด ์คํ์ค์ธ ํ๋ก์ธ์ค์์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ก CPU ์ ์ด๊ถ์ ๋๊ฒจ์ฃผ๋ ๊ฒ์ ๋งํ๋ค
์ด ๋ ์ด์ ์ ํ๋ก์ธ์ค ์ํ๋ฅผ *PCB์ ์ ์ฅํ์ฌ ๋ณด๊ดํ๊ณ ์๋ก์ด ํ๋ก์ธ์ค์ PCB๋ฅผ ์ฝ์ด ๋ณด๊ด๋ ์ํ๋ฅผ ๋ณต๊ตฌํ๋ ์์
์ด ์ด๋ฃจ์ด์ง๋ค
๐ก Thread
Thread๋ ํ process์ ๊ฐ์ฅ ์์ ๋์์(function)์ ๋จ์์ด๋ค

๋ฉํฐ์ค๋ ๋ฉ์ ๋จ์ผ ํ๋ก์ธ์ค๊ฐ ํด๋น ํ๋ก์ธ์ค์ "์ปจํ
์คํธ" ๋ด์์ ์ฌ๋ฌ ์ฝ๋ ์ธ๊ทธ๋จผํธ(์ฆ, ์ค๋ ๋)๋ฅผ ๋์์ ์คํํ ์ ์๋๋ก ํ๋ ์คํ ๋ชจ๋ธ์ด๋ค
์ค๋ ๋๋ ๋ถ๋ชจ ํ๋ก์ธ์ค ๋ฆฌ์์ค๋ฅผ ๊ณต์ ํ์ง๋ง ๋
๋ฆฝ์ ์ผ๋ก ์คํ๋๋ ์์ ํ๋ก์ธ์ค๋ผ๊ณ ์๊ฐํ ์ ์๋ค
๋จ์ผ ํ๋ก์ธ์ค์ ์ฌ๋ฌ ์ค๋ ๋๋ ๋จ์ผ CPU ์์คํ
์์ CPU๋ฅผ ๊ณต์ ํ๊ฑฐ๋(์์ํ๊ฒ) ๋ฉํฐํ๋ก์ธ์ฑ ์์คํ
์์ ๋ณ๋ ฌ๋ก ์คํํ ์ ์๋ค

Thread๋ Process์ code, data, stack, heap ์์ญ์ ๊ณต์ ๋ฐ๋๋ค ๋ฐ๋ฉด์ stack์์ญ์ ๊ฐ๋ณ๋ก ํ ๋น๋๊ฒ ๋๋๋ฐ ๊ทธ ์ด์ ๋ ์์ ์ค๋ช ํ๋๊ฒ๊ณผ ๊ฐ๋ค(์ค๋ ๋๋ ํ process์ ๊ฐ์ฅ ์์ ๋์์ ๋จ์์ด๋ค)
์ค๋ ๋๊ฐ ํจ์๋ฅผ ํธ์ถํ๊ธฐ ์ํด์๋ ์ธ์ ์ ๋ฌ, return address์ ์ฅ, ํจ์ ๋ด ์ง์ญ๋ณ์ ์ ์ฅ๋ฑ์ ์ํ ๋ ๋ฆฝ์ ์ธ ๊ณต๊ฐ์ด ํ์ํ๊ฒ ๋๋๋ฐ ๊ทธ๊ฒ์ด ๋ฐ๋ก stack ๋ฉ๋ชจ๋ฆฌ์ด๋ค
๋ํ multi thread์์ ๊ฐ๊ฐ์ PC register๋ฅผ ํ์๋ก ํ๋๋ฐ ๊ทธ ์ด์ ๋ thread๋ผ๋ฆฌ๋ *context swtich๊ฐ ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ด๋ค