Process
๋?
์คํ์ค์ธ ํ๋ก๊ทธ๋จ ์ด๋ผ๊ณ ํ ์ ์์ผ๋ฉฐ, ๋ฌผ๋ฆฌ์ ์ผ๋ก๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ ํ๋ก๊ทธ๋จ ๋ฐ์ดํฐ๋ฅผ ์๋ฏธํ๋ค.
์ Process ๋ผ๋ ๊ฐ๋ ์ด ํ์ํ ๊น? ๋ผ๊ณ ๋ฌป๋๋ค๋ฉด ๋๋ ์ด๋ ๊ฒ ๋๋ตํ ๊ฒ ๊ฐ๋ค.
๋์ ์ธ ์ํ์ ํ๋ก๊ทธ๋จ(ํ๋ก์ธ์ค) ๋ฅผ ๋ฐ์ดํฐํ ํ์ฌ ์ฐ๋ฆฌ๊ฐ ๊ด๋ฆฌํ ์ ์๋๋ก ํ๊ธฐ ์ํด์ Process ๊ฐ ํ์ํ๋ค.
ํ๋ก์ธ์ค ๋ผ๊ณ ์ ์ ๊ฒ์ ๋ง ๊ทธ๋๋ก ๋์ ์ธ ์ํ์ ํ๋ก๊ทธ๋จ์ ์ง์นญํ๋ ๋ง์ด๊ณ , Process ๋ ์ฐ๋ฆฌ๊ฐ ์ง์ ์กฐ์ํ ์ ์๋ ํ๋ก์ธ์ค ์ถ์ํ ๊ฐ์ฒด ์ ๋๋ก ์๊ฐํ ์ ์๋ค.
์ด๊ฒ ๋ฌด์จ ๋ง์ฅ๋ ์ฒ๋ผ ๋๊ปด์ง ์ ์๋๋ฐ, ์กฐ๊ธ ๋ ๋ถ์ฐ ์ค๋ช ์ ํด๋ณด๊ฒ ๋ค.
์์ OS ๊ฒ์๊ธ์์ ํ๋์ ํ๋ก๊ทธ๋จ์ ๋ฐ์ดํฐ์ Instruction ์ ํ๊บผ๋ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๋ ๊ฒ์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ค ๋ผ๊ณ ํ๋ค.
์ฌ๊ธฐ์ ๋จผ์ ์๊ฐํด๋ณผ ์ ์๋ ๊ฒ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋๋ฅผ ํ๋ค๋ ๊ฒ์ด ์ด๋ค ์๋ฏธ๋ฅผ ๊ฐ๋์ง์ ๋ํ ๊ฒ์ด๊ณ , ๊ทธ ๋ค์์ ๋ฉ๋ชจ๋ฆฌ์ ์ด๋ค ์ ๋ณด๊ฐ ๋ก๋๋๋์ง์ ๊ดํ ๊ฒ์ด ๋ ์ ์๋ค.
Process
๋ ์ต๋ 4GB ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ ํ ์ ์๋ค(์ด๋๊น์ง๋ ๋
ผ๋ฆฌ์ ์ผ๋ก ๊ทธ๋ ๋ค๋ ๊ฒ์ด๊ณ ์ค์ ๋ก๋ ์ฝ 3GB ๋ผ๊ณ ํ๋ค)
๊ทธ๋ ๋ค๋ฉด ๋ด๊ฐ 16GB ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐ๊ณ ์๋ค๋ฉด 4๊ฐ์ ํ๋ก์ธ์ค๋ง ๋ก๋ํ ์ ์์๊น? ๊ทธ ์ด์ ์ ํ๋์ ํ๋ก์ธ์ค๋ 4GB ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ชจ๋ ๋ค ์ฌ์ฉํ ๊น?
๋น์ฐํ ์๋๋ค. ์ค์ ๋ก ํ๋ก์ธ์ค๋ ํ ๋น๋ ๊ณต๊ฐ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ณด๋ค ๋จ๋ ๊ณต๊ฐ์ด ํจ์ฌ ๋ง๊ธฐ ๋๋ฌธ์ ์ฐ๋ฆฌ๊ฐ ๋ ผ๋ฆฌ์ ์ผ๋ก ํ ๋น๋ ๊ณต๊ฐ์ ์ ๋ถ ์ฐจ์งํ๊ณ ์์ง ์๋๋ค.
์คํ๋ ค ํ๋ก์ธ์ค๋ ๊ณต๊ฐ์ ๊ณต์ ํ๊ณ ์ฌ์ง์ด ๋ฌผ๋ฆฌ์ ์ผ๋ก๋ ํ๋์ ํ๋ก์ธ์ค๊ฐ ์ฐ์์ ์ธ ๋ฉ๋ชจ๋ฆฌ๊ณต๊ฐ์ ๊ฐ์ง๊ณ ์์ง๋ ์๋๋ค!
๊ฐ๋ น 4GB ์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ค๋ฉด ํ๋ก์ธ์ค๊ฐ ์๋ ์ฌ์ง๊ณผ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๋๋ ์ ๊ฐ๊ฐ์ ๊ณต๊ฐ์ ๊ณต์ ํ๊ณ ์๋ ๋ฐฉ์์ด๋ค
๊ฐ๊ฐ์ ๊ณต๊ฐ์ ๋ํด ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ์๋ฉด
OS kernel Space : ๋ง ๊ทธ๋๋ก kernel ํ๋ก๊ทธ๋จ์ memory ์์ญ์ด๋ค ์ค์ ๋ก ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์์ Stack ์ด ์กด์ฌํ์ง๋ง ํด๋น Stack ์ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ์ ์ํ ์์ญ์ด๊ณ systemcall ์คํ์ ๋ฐ๋ก kernel stack ์ด๋ผ๋ ๊ณณ์ ์์ฌ ํธ๋ฉ์ด ๋ฐ์ํ์ ๋ ํด๋น ์์ญ์ ๋ฐ์ดํฐ๋ฅผ ์ฐธ์กฐํ์ฌ ๋ช ๋ น์ ์ํํ๋ค.
Stack : ์ฌ์ฉ์๊ฐ ์์ฑํ ๋ฉ์๋์ ์์ญ์ ์๋ฏธํ๋ฉฐ ํ๋์ ๋ฉ์๋ ๋ณ๋ก ์ผ์ ํฌ๊ธฐ์ ๊ณต๊ฐ์ ๊ฐ์ง๊ณ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ค. ์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ก ๊ตฌํํ๋ฉด stack pointer ๋ก offset ์ ํตํด ๊ณต๊ฐ์ ํ๋ณดํ๋ ๊ฒ์ ์๋ฏธํ๋ค.
Heap : ๋ฐํ์ ์์์ ํ ๋น๋๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ํด์ ์กด์ฌํ๋ ์์ญ์ผ๋ก, ๋ํ์ ์ผ๋ก ์ปดํ์ผ ์์ ์๋ ์์ํ ์ ์๋ ๋ฐ์ดํฐ์ ํฌ๊ธฐ๋ฅผ ๋ฐํ์ ์์์ ๋ถ์ฌํ๋ ๋์ ํ ๋น(malloc) ๋ฑ์ ๋ช ๋ น์ ์ํด ์กด์ฌํ๋ค
BSS : ์์ง ์ด๊ธฐํ๋์ง ์์ static(ํ๋ก๊ทธ๋จ ์ ์ ๋ณ์, ์ฆ ์ด ํ๋ก๊ทธ๋จ์์ ๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋ ๊ฒ ๊ฐ์ ๋ณ์๋ฅผ ๋ฏธ๋ฆฌ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ฆฌ๋ ๋ฐฉ์) ๋ณ์ ์ ์ฅ ๊ณต๊ฐ์ธ๋ฐ ๋ฐ๋ก ์์ญ์ ๋ ์ผ๋ก์จ ํ๋ก๊ทธ๋จ ์ ์ฒด ํฌ๊ธฐ๋ฅผ ์ค์ผ ์ ์๋ค๊ณ ํ๋ค.
Data : ์ด๊ธฐํ๋ static ๋ณ์๊ฐ ๋ค์ด๊ฐ๋ ๊ณต๊ฐ์ผ๋ก ์์์ ์ค๋ช ํ ๋ฐ์ ๊ฐ๋ค.
Text : ํ๋ก๊ทธ๋จ์ instruction ์ด ์ ์ฅ๋ ๊ณต๊ฐ์ผ๋ก CPU ๋ instruction ์ ์ฐธ๊ณ ํด์ ์ฐ์ฐ์ ์ํํ๋ค
CPU
๋ ์ฐ์ฐ ์ฅ์น๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ฌด์์ ์ฐ์ฐํ ๊น? ๋ฐ๋ก ๋ ์ง์คํฐ์ ์ ์ฅ๋ ๊ฐ๊ณผ instruction ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๊ฐ๋ค์ ๋ฉ๋ชจ๋ฆฌ์์ ๋ถ๋ฌ์จ๋ค.
์ฆ CPU ๋ ๊ทธ๋ฅ ๊ณ์ ๋ฐ๋ ค๋ค์ด์ค๋ ๊ฐ๊ณผ instruction ์ ์ฒ๋ฆฌํ ๋ฟ์ด๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด๋ค ๋ฐ์ดํฐ ์งํฉ๋ค์ ๋ฐ์ด๋ฃ์์ง์ ๋ํ ๊ณ ๋ฏผ์ด ํ์ํ๋ฐ, ์ด ๋ ๊ฐ์ ์ข ๋ฅ์ ๋ฐ์ดํฐ๋ก ๋ฌถ์ ์ ์๋ ๊ฒ์ด ํ๋์ ํ๋ก๊ทธ๋จ, ์ฆ ํ๋ก์ธ์ค๊ฐ ๋ ์ ์๋ค.
์ด ๋์ํ๋ ํ๋ก๊ทธ๋จ์ด๋ผ๋ ๊ฐ๋ ์ ๋ฐ์ดํฐ๋ก ํํํ ๊ฒ์ด Process ์ด๊ณ , ์ค์ ๋ก ์ด Process ๋ PCB(Process Control Block) ์ด๋ผ๋ ๊ตฌ์กฐ์ฒด๋ก process ์ ๋ณด๋ฅผ ์ ์ฅํ์ฌ Kernel ์ด ๊ด๋ฆฌํ๋ค.
์ด์ CPU ์์์ ๋์ํ๋ ํ๋ก๊ทธ๋จ์ด ์ง๊ด์ ์ผ๋ก ๋ณด์ด๊ธฐ ์์ํ๋ค.
PCB ์ ์ ์ฅ๋ ๋ฐ์ดํฐ๋ ์๋์ ๊ฐ๋ค
Process State : ํ๋ก์ธ์ค๊ฐ ์ด๋ค ์ํ์ธ์ง (์๋์์ ๋ถ์ฐ ์ค๋ช )
Program Counter : ํ๋ก์ธ์ค๊ฐ ๋ช ๋ น์ด๋ฅผ ์ด๋๊น์ง ์ํํ๋์ง
CPU registers : ์ ์ฅ๋ ๋น์์ register ๊ฐ๋ค
CPU scheduling info : CPU ์ ์ํด ์ด๋ค ์์๋ก ์ฒ๋ฆฌ๋ ๊ฒ์ธ๊ฐ
Memory-management info : ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ผ๋ง๋งํผ ์ฐจ์งํ๊ณ ์๋๊ฐ
Accounting info : ์ด ํ๋ก์ธ์ค๊ฐ CPU ์์์ ์ผ๋ง๋ ์ฌ์ฉํ๋์ง
I/O status info : ํ์ฌ ์ฐ๊ฒฐ๋ผ์๋ ๋๋ฐ์ด์ค ์ ๋ณด
์์ ๊ฐ์ ์ ๋ณด๋ ์ ํ์ํ ๊น?
๊ทธ๊ฑฐ์จ ๋ฐ๋ก Process ๊ฐ ๊ด๋ฆฌ๋ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค..!!
์์ Process management
๋ kernel ์ ์ญํ ์ด๋ผ๊ณ ํ๋ค
PCB ๊ฐ ์กด์ฌํจ์ผ๋ก์จ kernel ์ PCB ๋ง ์ ์ฅํ๊ณ ์์ผ๋ฉด ์ ์ฒด Process ๋ฅผ ๋ชจ๋ ๊ด๋ฆฌ ๊ฐ๋ฅํ๋ค๊ณ ๋ณผ ์ ์๋ค.
์ค์ ๋ก ๊ฐ Process ๊ฐ ์์ฑ๋ ๋ ๋ง๋ค PCB ๊ฐ ์์ฑ๋์ด ๋๊ณ kernel ์ด PCB ๋ฆฌ์คํธ๋ฅผ ์ ์ฅํ๊ณ ์๋ค.
Process ๋ฅผ ๊ด๋ฆฌํ๋ค๋ ๊ฒ์ CPU ๊ฐ ์ฒ๋ฆฌํ๋ Process ๋ฅผ ์ ํด์ฃผ๋ ๊ฒ๊ณผ ๋ฐ์ ํ ์ฐ๊ด์ด ์๋๋ฐ, CPU ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ฒ์ ํ๋์ Process(์๋ฐํ ๋ฐ์ง๋ฉด thread) ๋ฅผ ์ฒ๋ฆฌํ ์ ์๊ธฐ ๋๋ฌธ์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌ๋๋ process ๋ฅผ ๊ต์ฒดํด์ค ํ์๊ฐ ์๋ค.
์ฒ๋ฆฌ๋๋ Process ์ ๊ตํ์ด ์ผ์ด๋๋ ๊ฒ์ Context Switching ์ด๋ผ๊ณ ํ๋๋ฐ, kernel ์ scheduling ๊ท์น์ ๋ฐ๋ผ์ ๋ค์์ ์ฒ๋ฆฌ๋ Process ๊ฐ ๊ฒฐ์ ๋๋ค.
Context Switching
์ ํ๋๋ฐ๋ ์ฌ๋ฌ ์ด์ ๊ฐ ์๊ฒ ์ง๋ง ๊ฐ์ฅ ํต์ฌ์ ์ธ ๊ธฐ๋ฅ์ ์ฌ์ฉ์๋ก ํ์ฌ๊ธ ํ๋ก๊ทธ๋จ์ด ๋์์ ๋์ํ๊ณ ์๋ ๊ฒ์ฒ๋ผ ๋๋ผ๊ฒ ํ๋ค๋ ๊ฒ์ด๋ค.
kernel ์ PCB ๋ฅผ ์ฌ์ฉํ์ฌ์ ๋ฐ๋ก๋ฐ๋ก process ์ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์ค๊ณ ํ์ฌ ์คํ์ค์ธ process ๋ ๋ค์ PCB ํํ๋ก ์ ์ฅํด์ ๋ฉ๋ชจ๋ฆฌ ํน์ ๋์คํฌ์ ์ ์ฅํด๋๋ค.
์์ฃผ ์ฌ์ฉํ๋ PCB ๋ ๋ฉ๋ชจ๋ฆฌ ready queue ์ ์ ์ฌ(์ ์ )๊ฐ ๋ ๊ฒ์ด๊ณ ๋น๊ต์ ์ฐ์ ์์๊ฐ ๋ฎ๊ฑฐ๋ I/O ๋๊ธฐ ์ค์ธ process ๋ wait queue ์ ์ ์ฌ๊ฐ ๋๋ค.
์์ธํ process ์ life cycle ์ ์๋์ ๊ฐ๋ค
์ต์ด fork
system call ๋ก ๋ถํฐ ์๋ก์ด process ๊ฐ ์์ฑ๋๋ค.
ํ๋ก๊ทธ๋จ์ด ์คํ๋๋ฉด ๊ณง๋ฐ๋ก ready
์์ run
๋จ๊ณ๋ก ๋์ด๊ฐ ๊ฒ์ด๋ค
run ์ ์ค์ ๋ก cpu ์์์ ํ ๋น๋ฐ์์(cpu ๊ฐ ํด๋น ํ๋ก์ธ์ค์ ์ฐ์ฐ์ ์ฒ๋ฆฌํ๋ค๋ ๋ป) ๋์ํ๋ค.
์ค๊ฐ์ I/O device ์ฒ๋ฆฌ๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํ๋ ๋ฑ์ idle ์ํ๊ฐ ์์์ด ๋๋ฉด wait
๋จ๊ณ ํน์ ready ๋จ๊ณ๋ก ๋์๊ฐ์ ๋๊ธฐ๋ฅผ ํ๊ณ ์๋ค๊ฐ I/O controller ์ ์ธํฐ๋ฝํธ๊ฐ ๋ฐ์ํ๋ฉด ๊ทธ์ ์์ผ ๋ค์ ๋์์ ์ด์ด๋๊ฐ ์ ์๋ค.
๋์์ด ๋ง๋ฌด๋ฆฌ ๋๊ณ ํ๋ก์ธ์ค๊ฐ ๋์ด์ ์ฐ์ฐํ ๊ฒ์ด ์์ผ๋ฉด terminate
๋๋ค
process
์ ํญ์ ๊ฐ์ด ๋์ค๋ thread
๋ ์ค์ kernel ์ scheduling ๋จ์ ์ด๋ค.
๋ถ๋ช ์์์ scheduling ์ process ๋ฅผ ๊ฐ์ง๊ณ ์ํ๋๋ค๊ณ ํ๋๋ฐ, ์ด์ผ๊ธฐ๊ฐ ๋ฌ๋ผ์ ธ์ ์ดํด๊ฐ ์ ์๋ ์ ์๋ค.
์ฌ๊ธฐ์ ๋ด๊ฐ ๋งํ๊ณ ์ถ์ ๊ฒ์ ํ๋ก์ธ์ค๋, ์ฐ๋ ๋๋ ์ ๋ถ ๋ค ์ฐ๋ฆฌ๊ฐ ๋ง๋ ๋ ผ๋ฆฌ์ ์ธ ๊ฐ๋ ์ ๋ถ๊ณผํ๋ค๋ ๊ฒ์ด๋ค.
์ฐ์ฐ ์ฃผ์ฒด์ธ cpu
๋ ์ง๊ธ ์ํํ๊ณ ์๋ ์์
์ด A process ์ธ์ง B process ์ธ์ง ํน์ A process ๋ด๋ถ์ 1๋ฒ thread ์ธ์ง ๊ถ๊ธํ์ง๋ ์๊ณ , ๊ณ์ ๋ฐ๋ ค๋ค์ด์ค๋ ์ฐ์ฐ๋ง์ ์ํํ ๋ฟ์ด๋ค.
์ด๊ฒ ๋ฌด์จ ๋ง์ด๋๋ฉด ํ๋ก์ธ์ค ๋ด๋ถ์์ ์ฐ์ฐ๋ ์์๋ฅผ ๋ด๊ฐ ์์๋ก ์ ํด์ cpu ์ ๋ฐ์ด๋ฃ๋๋ค๋ฉด cpu ๋ ๋ง์น ํ๋ก์ธ์ค ๋ด๋ถ๋ฅผ ์ชผ๊ฐ์ ๋์์ํค๋ ๊ฒ ์ฒ๋ผ ๋ณด์ผ ๊ฒ์ด๋ค.
์กฐ๊ธ ๋ ์ฝ๊ฒ ์ค๋ช ํ์๋ฉด ํ๋์ ํ๋ก์ธ์ค ๋ด์์๋ ๋ถ๋ช ๋จผ์ ์ฐ์ฐ์ ์ฒ๋ฆฌํ์ผ๋ฉด ํ๋ ๋ถ๋ถ์ด๋, ๋์์ ์ฒ๋ฆฌ๊ฐ ๋์ผ๋ฉด ํ๋ ๋ถ๋ถ์ด ์๊ธธ ๊ฒ์ธ๋ฐ
๊ฐ๋ น ์์ฒญ๋ ํ์ด์ง๋ฅผ ์ ๊ณตํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ด ์๋ค๊ณ ์ณค์ ๋ ํด๋น ํ๋ก๊ทธ๋จ์ด ๋จ์ผ ์์ฒญ๋ง์ ์ฒ๋ฆฌํ๋ค๋ฉด ๋ญ ๋ฌผ๋ก ์๋ ์์ฒด๋ ๋น ๋ฅด๊ฒ ์ง๋ง 100๋ช ์ด ์์ฒญ์ ๋ณด๋ธ๋ค๋ฉด ๋ถ๋ช ๋ค์ ๋ช๋ช ์ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๊ธฐ๊ฐ ๊ต์ฅํ ์ง๋ฃจํ ๊ฒ์ด๋ค.
๋ฐ๋๋ก 2๋ฒ์งธ ์์ฒญ์ด ๋ค์ด์์ ๋ ๋์ ํ๋ก์ธ์ค์ ๋ค์ ์ฐ์ฐ์ 2๋ฒ ์์ฒญ์ ์ฒ๋ฆฌํ๋ ๋ก์ง์ ์ํํ๋๋ก ๊ตฌํํ๋ค๋ฉด?
๊ทธ๋ฆฌ๊ณ ์ผ์ ์๊ฐ(์์ฒญ ์งง์ ์๊ฐ) ํ์๋ ๋ค์ 1๋ฒ ๋ฉ์๋๋ฅผ ์ฒ๋ฆฌํ๋๋ก ํ๋ค๋ฉด??
๋ถ๋ช ์ฒซ ๋ฒ์งธ ์ฌ์ฉ์๋ ์์ ๋ฐฉ์๋ณด๋ค ๋๋ฆฌ๋ค๊ณ ์๊ฐํ ์ ์์ง๋ง ๋ค์ ๊ธฐ๋ค๋ฆฌ๋ ์ฌ์ฉ์๋ ์์ฒญ์ด ์ฒ๋ฆฌ๋๋ค๋ ๋๋์ ๋ณด๋ค ๋น ๋ฅด๊ฒ ๋๋ ๊ฒ์ด๋ค.
์์ฒญ์ด ๋ค์ด์ฌ ๋๋ง๋ค ์์ฒญ์ ์ฒ๋ฆฌํ๋ ํ๋ก์ธ์ค๋ฅผ ์ถ๊ฐํ๋ฉด ์๋๋์?
์๋ ๊ฒ์ ์์ง๋ง, ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ ์ฐ๋ ๋๋ฅผ ํ๋ก์ธ์ค ๋ด์์ ์์ฑํ๋ ๊ฒ๋ณด๋ค ์์ฒญ ๋ง์ ์์คํ ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํจ๋ค.
๊ฐ๋จํ๊ฒ ์๊ฐํ๋ฉด, ํ๋ก์ธ์ค๋ ๋ฌด์์ ์ ๋ฅผ ์ฐฝ์กฐํ๋ ํ์๊ณ , ์ฐ๋ ๋๋ ์ด๋ฏธ ๊น๋ ค์๋ ํ์์ ๋ถ๊ฐ์ ์ธ ์์ ์ ์ถ๊ฐํ๋ ๊ฒ์ผ๋ก ๋น๊ต๋ฅผ ํ ์ ์์ ๊ฒ์ด๋ค.
Thread
์ ๊ตฌ์ฑ์์ ๋ผ๊ธฐ ๋ณด๋ค๋ ์ฐ๋ ๋๊ฐ ํ๋ก์ธ์ค ๋ด์์ ์ด๋ป๊ฒ ๋ถ๋ฆฌ๊ฐ ๋๋์ง ์์๋ณด์
์ฐ๋ ๋๋ ํฌ๊ฒ ๊ณต์ ์์ญ
๊ณผ ์ฐ๋ ๋ ์์ญ
์ผ๋ก ๋๋ ์ ์๋ค
๊ณต์ ์์ญ์ ๋ง ๊ทธ๋๋ก ์ฐ๋ ๋๊ฐ์ ๊ณต์ ํ๋ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ ๊ณต๊ฐ์ ์ด์ผ๊ธฐํ๋๋ฐ, ํด๋น ์์ญ์๋ code, data ๋ฑ ํ๋ก๊ทธ๋จ ๋์์ ํ์ํ ์ฃผ์ ๋ฐ์ดํฐ๊ฐ ์๋ค.
์ฐ๋ ๋ ์์ญ์ ํ๋ก๊ทธ๋จ์ ๋ณ๋ ฌ ์คํ์ ํ์ํ ์์์ ๊ฐ์ง๊ณ ์๋๋ฐ, ์์ ์ ์ํ๋ ์์์ ๊ด๋ จํด์ ์๊ฐํด๋ณด์.
๊ฐ ์ฌ์ฉ์์ ์์ฒญ์ ์๋ต์ ํด์ค์ผ ํ๋๋ฐ ์ฌ์ฉ์๋ณ ๋์ด์ ๋ฐ๋ผ์ ์๋ต์ ๋ค๋ฅด๊ฒ ํด์ค๋ค๊ณ ์๊ฐํด๋ณด์, ์ฌ์ฉ์์ ๋์ด๋ ํ๋ก๊ทธ๋จ์ด ์ ์ (data ์์ญ)์ผ๋ก ๊ฐ์ง๊ณ ์์ ์ ์๊ณ ๊ฐ๋ณ์ ์ธ ์์๋ค. ๋ฐ๋ผ์ ์ฐ๋ ๋๋ณ๋ก ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๋ stack ์์ญ์ ๋๊ณ ์ฌ๊ธฐ์ ๊ฐ๋ณ์ ์ธ state ๋ฅผ ์ ์ฅํ ์ ์๋ค.
๋๋ฌด ์ด๋ ต๊ฒ ์ค๋ช ํ ๊ฒ ๊ฐ์๋ฐ, ์ฝ๊ฒ ๋งํ๋ฉด ์ฐ๋ ๋๋ ์ผ์ข ์ ํจ์๋ค. ํจ์์ ๋ก์ปฌ๋ณ์๊ฐ ์กด์ฌํ๋ฏ ์ฐ๋ ๋๋ ๋ก์ปฌ ๋ณ์๊ฐ ํ์ํ ๊ฒ์ด๊ณ , ํจ์๋ก ๋ณผ ์ ์๋ ์ด์ ๊ฐ process ์ ํจ์์ฉ ๋ฐ์ดํฐ ์์ญ์ด stack ์ธ ๊ฒ๊ณผ๋ ์ผ์นํ๋ค.
์ด๋ฏธ ์ฌ๊ธฐ๊น์ง ์ฝ์๋ค๋ฉด ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ๋๋ ๊ฒ๋ณด๋ค ์ฐ๋ ๋ ์ฌ๋ฌ๊ฐ์ ์ฅ์ ์ด ๋ฌด์์ธ์ง๋ ์์ํ ์ ์๊ฒ ์ง๋ง ์ ๋ฆฌํ์๋ฉด ์๋์ ๊ฐ๋ค.
ํ๋ก์ธ์ค๋ฅผ ํตํด ์ค์ผ์ฅด๋ง์ ์คํํ๋ ค๋ฉด ์ธํฐ๋ฝํธ๊ฐ ํ์ฐ์ ์ด๋ค. Context Swithching ์ด ๋ฐ์ํ๋ ๋์์๋ idle ์ฆ cpu ๊ฐ ๋ ธ๋ ์๊ฐ์ด ๋ฐ์ํ์ฌ ๋นํจ์จ์ ์ธ ์์ ํ์ฉ์ ์ด๋ํ๋ค.
๋ฐ๋๋ก ์ฐ๋ ๋๋ ๋ชจ๋ ์ฝ๋ ์์์ ํ ํ๋ก์ธ์ค ๋ด์์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ ์ธํฐ๋ฝํธ๋ฅผ ๋ฐ์์ํฌ ํ์์์ด ๋ณ๋ ฌ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค
์ฆ ๋น ๋ฅด๊ณ ํธ๋ฆฌํ๋ค !!!!!
๋น์ฐํ ์ฅ์ ๋ง ์์์ผ๋ฉด ํ๋ก์ธ์ค๋ผ๋ ๊ฐ๋ ์ ์ฌ๋ผ์ง๊ณ ์ฐ๋ ๋๋ง ๋จ์์ ๊ฒ์ด๋ค.
๋จ์ ์ ๋ฉํฐ์ฐ๋ ๋ฉ์ด ๊ฐ๋ฅํ ํ๋ก๊ทธ๋จ์ ์ง์ ๊ตฌํํ ์ ์์ด์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ์ด๊ฒ ์ ๋จ์ ์ค ํ๋๋ผ๊ณ ๋ฌป๋๋ค๋ฉด ์์คํ ์ด ๋ณต์กํด์ง์๋ก ํ๋ก๊ทธ๋จ์ ๋์ํ๋๋ฐ ํ์ํ ๋ฐ์ดํฐ๊ฐ ๋์ด๋ ๊ฒ์ด๋ค.
ํน์๋ผ๋ ๋ฐํ์์์์ ๊ฐ๋ณ์ ์ธ state ๊ฐ ๊ณต์ ์์ญ์ ์๋ค๋ฉด ํด๋น ๋ฐ์ดํฐ๋ฅผ ์ฐ๋ ๋๊ฐ ๋๊ธฐํ ํด์ค ํ์๊ฐ ์๋ค. ์ฆ ํน์ ์ฐ๋ ๋๊ฐ ๊ณต์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ง๊ณ ์์ ์ ์ํํ๋ ๋์์๋ ํด๋น ๋ฐ์ดํฐ๋ ์ ๋ ์์ ๋๋ฉด ์๋ ๊ฒ์ด๋ค(ํน์ ์์ธก ๊ฐ๋ฅํ ๊ฐ์ผ๋ก ์์ )
์ค์ ์๊ณ์์ญ(critical area) ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด์ผ ํ ๋๋ locking ํน์ ์ด์ ์ ์ฌํ ๊ธฐ๋ฒ์ thread-safe ๋ฅผ ๋ณด์ฅํ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํด์ผํ๋ค.
๋ํ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๊ตฌํ์ ํ๋ค๊ณ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋๊ฒ ์๋๋ผ ๋ณ๋ชฉ์ด ์ผ์ด๋์ง ์๋๋ก ์ฝ๋๋ฅผ ์ ์ง์ผํ๋ค...