Program ๐ ํผ์๋ฅผ ๋ง๋๋ ๋ ์ํผ = ํ์ผ ์์คํ ์ ์กด์ฌํ๋ ์คํํ์ผ(์ฝ๋๊ฐ ๊ตฌํ๋์ด์๋ ํ์ผ)
Process ๐ ๋ ์ํผ๋ก ๋ง๋ ํผ์ = ํ๋ก์ธ์ค๋ ๋จ์ํ ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ(ํ๋ก๊ทธ๋จ์ ์คํํ ๊ฒ)
๐ ํ๋ก๊ทธ๋จ์ด ์คํ๋์ด ํ๋ก์ธ์ค๋ฅผ ๋ง๋ค๋ฉด ์ผ์ด๋๋ 2๊ฐ์ง ์ผ
1. ํ๋ก์ธ์ค๊ฐ ํ์๋กํ๋ ์ฌ๋ฃ๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ค.
- ๊ทธ ๋ฉ๋ชจ๋ฆฌ๋ 4๊ฐ์ง ์์ญ์ผ๋ก ๋๋์ด ์๋ค
- Code ๐ ์คํ ๋ช ๋ น์ผ๋ก ํฌํจํ๋ ์ฝ๋๋ค
- Data ๐ Static ๋ณ์ ํน์ Global ๋ณ์
- Heap ๐ ๋์ ๋ฉ๋ชจ๋ฆฌ ์์ญ
- Stack ๐ ์ง์ญ๋ณ์, ๋งค๊ฐ๋ณ์, ๋ฐํ ๊ฐ ๋ฑ์ ์ผ์์ ์ธ ๋ฐ์ดํฐ
2. ํด๋น ํ๋ก์ธ์ค์ ๋ํ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ PCB ๋ธ๋ก์ด ํ๋ก์ธ์ค ์์ฑ์ ํจ๊ป ๋ง๋ค์ด์ง๋ค.
- ํ๋ก์ธ์ค ์ ์ด ๋ธ๋ก(Process Control Block) = CPU์ ์ํด ์คํ ์ค์ธ ํน์ ํ ํ๋ก์ธ์ค๋ฅผ ๊ด๋ฆฌํ ํ์๊ฐ ์๋ ์ ๋ณด๋ฅผ ํฌํจํ๋ ์ด์ ์ฒด์ ์ปค๋์ ์๋ฃ ๊ตฌ์กฐ
- pointer ๐ ์ข๋น์ํ, ๋๊ธฐ ์ํ์ ํ๋ก์ธ์ค์ ํ๋ฅผ ๊ตฌํํ๊ธฐ์ํด ํ์ํ ํฌ์ธํฐ
- process state ๐ ํ์ฌ ํ๋ก์ธ์ค์ ์ํ
- pid ๐ ํ๋ก์ธ์ค ๊ณ ์ ๋ฒํธ
- program counter ๐ ๋ค์ ์คํํ ๋ช ๋ น์ด์ ์ฃผ์๊ฐ
๐ Context Switching
ํ์ฌ ์งํํ๊ณ ์๋ Task(Process, Thread)์ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๋ค์ ์งํํ Task์ ์ํ ๊ฐ์ ์ฝ์ด ์ ์ฉํ๋ ๊ณผ์ ์ด๋ค.
- CPU๊ฐ ๋น ๋ฅธ ์๋๋ก Task๋ฅผ ๋ฐ๊ฟ ๊ฐ๋ฉฐ ์คํํ๊ธฐ ์ํด Context Switching์ด ํ์ํ๋ค.
- Context Switiching์ผ๋ก ์ฌ๋์ ๋์ผ๋ก ์ฌ๋ฌ Task๊ฐ ๋์์ ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด๊ฒ ๋๋ค.
- Context Switching์ด ๋ฐ์ํ๊ฒ ๋๋ฉด ๋ง์ Cost๊ฐ ์์๋๋ค.
- Cache, Memory Mapping ์ด๊ธฐํ ํด์ผํ๊ณ , Kernel์ ํญ์ ์คํ๋์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
- Context Switching ๋น์ฉ์ Process๊ฐ Thread๋ณด๋ค ๋ง์ด๋ ๋ค.
- Thread๋ Stack ์์ญ์ ์ ์ธํ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๋ฏ๋ก Stack ์์ญ๋ง ๋ณ๊ฒฝํ๋ฉด ๋๋ค.
๐ ๊ต์ฅํ ํผ๊ณคํ๊ณ ํ๋ ์์ ์ด๋ค
๐ ๊ทธ๋์ ๊ฒฝ๋ํ๋ ํ๋ก์ธ์ค ๋ฒ์ ์ธ Thread๊ฐ ์ฌ์ฉ๋๋ค.
Thread ๐ ํ๋ก์ธ์ค(process) ๋ด์์ ์ค์ ๋ก ์์ ์ ์ํํ๋ ์ฃผ์ฒด๋ฅผ ์๋ฏธ
- ๋ชจ๋ ํ๋ก์ธ์ค์๋ ํ ๊ฐ ์ด์์ ์ค๋ ๋๊ฐ ์กด์ฌํ์ฌ ์์ ์ ์ํํ๋ค.
- ๋ ๊ฐ ์ด์์ ์ค๋ ๋๋ฅผ ๊ฐ์ง๋ ํ๋ก์ธ์ค๋ฅผ ๋ฉํฐ์ค๋ ๋ ํ๋ก์ธ์ค(multi-threaded process)๋ผ๊ณ ํ๋ค.
- Thread๋ LWP(๊ฒฝ๋ ํ๋ก์ธ์ค)๋ผ๊ณ ๋ ํ๋ค.
๐ Thread๋ ์ LWP(๊ฒฝ๋ ํ๋ก์ธ์ค)์ธ๊ฐ
๐ ํ๋์ ํ๋ก์ธ์ค์์ ๋ค์์ Thread๊ฐ ์์ ๊ฒฝ์ฐ, ๊ณต์ ๋๋ ์์์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ค.
Thread๋ ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ค Stack ์์ญ์ ์ ์ธํ Code, Data, Heap ์์ญ์ ๊ณต์ ํ๋ฏ๋ก Context Switching ๋น์ฉ์ด ์ ๋ค.
๐ ๋ฉํฐ ํ๋ก์ธ์ค์ ๋ฉํฐ ์ค๋ ๋๋ '๋์์ ๋ ๊ฐ์ง ์ด์์ ๋ฃจํด์ ์คํ ํ ์ ์๋ ์ญํ '์ ํ๋ ๊ฒ์ ๋์ผํ๋ค.
๐ Multi-process
- fork๋ฅผ ํตํด ํ๋ก์ธ์ค๋ฅผ ๋ณต์ฌํ๋ฉด ๋ถ๋ชจํ๋ก์ธ์ค-์์ํ๋ก์ธ์ค ๊ด๊ณ๊ฐ ํ์ฑ๋๋ค. ๋ถ๋ชจ-์์ ๊ด๊ณ๋ผ๊ณ ํด๋ ์์ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๊ฐ์ง๊ฒ ๋๋ค.
- ํ๋ก์ธ์ค ๊ฐ์ ํต์ ์ ํ๋ ค๋ฉด IPC(Inter Process Communication; ์ธ๋งํฌ์ด, ํ, ๊ณต์ ๋ฉ๋ชจ๋ฆฌ)๋ฅผ ํตํด์ผ ํ๋ค.
- ํน์ง
- ๊ฐ๊ฐ์ ํ๋ก์ธ์ค๋ ๋ ๋ฆฝ์ ์ด๋ค.
- IPC๋ฅผ ์ฌ์ฉํ์ฌ ํต์ ํ๋ค.
- ์์ ์๋ชจ์ ์ด๋ฉฐ ๊ฐ๋ณ ํ๋ก์ธ์ค๊ฐ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฐจ์งํ๋ค.
- Context Switching ๋น์ฉ์ด ํฌ๋ค.
- ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ด๋ฏ๋ก ๋๊ธฐํ ์์ ์ด ๋ถํ์ํ๋ค.
- ์์
- ๊ฐ์ ์์ ์ ๋ ์ฌ๋์ด ๋ค๋ฅธ ํ์์ค์์ ์งํํ๋ค๊ฐ ๋ ผ์ํ ๋๋ง ๋ฐ์ผ๋ก ๋์ค๊ณ ๋ค์ ๊ฐ์์ ํ์์ค๋ก ๋ค์ด๊ฐ ์์ ํ๋ค.
๐ Multi-thread
- ํ๋์ ํ๋ก์ธ์ค๊ฐ ๋ค์ ๊ฐ์ ์์ ์ ๊ฐ๊ฐ ์ค๋ ๋๋ฅผ ์ด์ฉํ์ฌ ๋์์ ์๋ ์ํฌ ์ ์๋ค.
- ํ๋ก์ธ์ค๊ฐ ๋จ์ผ Thread ํ๋๋ก ์คํ๋๋ ๊ฒฝ์ฐ, ์ด๋์ ์คํ๋จ์๋ ํ๋ก์ธ์ค ๊ทธ ์์ฒด๊ฐ ๋๋ค.
- ํ๋ก์ธ์ค๊ฐ ์ฌ๋ฌ Thread๋ก ๋๋์ด์ ์คํ๋๋ ๊ฒฝ์ฐ, ์คํ๋จ์๊ฐ ๋๋์ด์ง๋ฉฐ ๋ฉํฐ์ค๋ ๋๊ฐ ๋๋ค.
- ํน์ง
- Thread๋ผ๋ฆฌ ๊ธด๋ฐํ๊ฒ ์ฐ๊ฒฐ๋์ด ์๋ค.
- ์์์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ํต์ ๋น์ฉ์ด ์ ๊ฐ๋๊ณ , ๋ฉ๋ชจ๋ฆฌ ์ธก๋ฉด์์ ํจ์จ์ ์ด๋ค.
- Context Switching ๋น์ฉ์ด ์ ๋ค.
- ๊ณต์ ์์ ๊ด๋ฆฌ๊ฐ ํ์ํ๋ค.
- ์์
- ๋ ์ฌ๋์ด ๊ฐ์ ํ์์ค์์ ๊ฐ์ ์์ ์ ์ฒ๋ฆฌํ๋ค.
๐ ๋ฉํฐ์ค๋ ๋๊ฐ ๊ฐ์ง๋ ์ด์
- Context Switching ์์ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋งํผ์ ์๊ฐ(์์) ์์ค์ด ์ค์ด๋ ๋ค.
- ํ๋ก์ธ์ค๊ฐ Context Switching์ CPU ๋ ์ง์คํฐ ๊ต์ฒด ๋ฟ๋ง์ด ์๋๋ผ RAM๊ณผ CPU์ฌ์ด์ ์บ์ฌ๋ฉ๋ชจ๋ฆฌ์ ๋ํ ๋ฐ์ดํฐ ๊น์ง ์ด๊ธฐํ ๋๋ฏ๋ก ์๋นํ ๋ถ๋ด์ด ๋ฐ์ํ๋ค.
- Stack์ ์ ์ธํ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ global(์ ์ญ), static(์ ์ ) ๋ณ์ ๊ทธ๋ฆฌ๊ณ new, malloc์ ์ํ ๋ชจ๋ ์๋ฃ๋ฅผ ๊ณต์ ํ ์๊ฐ ์๋ค.
- ํ๋ก์ธ์ค๊ฐ ํต์ (ex.pipe)๊ณผ ๊ฐ์ด ๋ณต์กํ ๊ณผ์ ์ ๊ฑฐ์น์ง ์๊ณ ๋ณด๋ค ํจ์จ์ ์ธ ์ผ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค
๐ ๋ฉํฐํ๋ก์ธ์ค๋ฅผ ์ ์ฌ์ฉํ ๊น โ
๋ฉํฐ ์ค๋ ๋๊ฐ ๋ฉํฐ ํ๋ก์ธ์ค๋ณด๋ค ์ข์ ๋ณด์ด๋๋ฐ ์ ๊ตณ์ด ๋ฉํฐ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ ๊น โ
๐ ๋ฉํฐ ์ค๋ ๋์ ํจ์จ์ฑ๊ณผ ์์ ์ฑ ๋ฌธ์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
- ๋ฉํฐ ํ๋ก์ธ์ค์ ๋ฐฉ์์ ํ๋ก๊ทธ๋จ์์
ํ๋์ ํ๋ก์ธ์ค๊ฐ ์์ ์ ๋ฐ์ดํฐ ๊ณต๊ฐ์ ๋ง๊ฐ๋จ๋ฆฐ๋ค๋ฉด ํด๋น ํ๋ก์ธ์ค๋ง ์ค๋จ๋๋ค.- ๋ฉํฐ ์ค๋ ๋ ๋ฐฉ์์ ํ๋ก๊ทธ๋จ์์
ํ๋์ ์ค๋ ๋๊ฐ ์์ ์ด ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ๊ณต๊ฐ์ ๋ง๊ฐ๋จ๋ฆฐ๋ค๋ฉด ํ๋์ ๋ฐ์ดํฐ ๊ณต๊ฐ์ ๊ณต์ ํ๋ ๋ชจ๋ ์ค๋ ๋๊ฐ ๋์์ ๋ฉ์ถ ๊ฒ์ด๋ค. (Critical Section ๊ธฐ๋ฒ์ผ๋ก ์ด ๋ฌธ์ ์ ์ ๊ฐ์ )- ์์
- ์ธํฐ๋ท ์ต์คํ๋ก๋ฌ ๋ธ๋ผ์ฐ์ ๋ ๋ฉํฐ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ค.
๊ฐ ํญ์ด ๊ธด๋ฐํ๊ฒ ์ฐ๊ฒฐ๋์ด ์์ผ๋ฏ๋ก ํ๋์ Thread ์ฆ, ํ๋์ ํญ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ์ ์ฒด ํ๋ก์ธ์ค์ ์ํฅ์ด ๋ฏธ์ณ ๋ธ๋ผ์ฐ์ ๊ฐ ๋น์ ์ ์ข ๋ฃํ๊ฒ ๋๋ค.- ๊ตฌ๊ธ ํฌ๋กฌ ๋ธ๋ผ์ฐ์ ๋ ๋ฉํฐ ํ๋ก์ธ์ค๋ฅผ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ฐ ํญ ๊ฐ์ ์ํฅ์ด ์ ๋ค. ํ๋์ ํญ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํด๋ ์ ์ฒด ๋ธ๋ผ์ฐ์ ๊ฐ ์ข ๋ฃ๋์ง ์์ ๊ฒ์ด๋ค.
๋ฉํฐ ์ฝ์ด ๐ ๋ ๊ฐ ์ด์์ ๋ ๋ฆฝ ์ฝ์ด๋ฅผ ๋จ์ผ ์ง์ ํ๋ก๋ก ์ด๋ฃจ์ด์ง ํ๋์ ํจํค์ง๋ก ํตํฉํ ๊ฒ์ด๋ค.
- ๋ฉํฐ ํ๋ก์ธ์ค, ๋ฉํฐ ์ค๋ ๋๋ "์ฒ๋ฆฌ๋ฐฉ์"์ ์ผ์ข ์ผ๋ก ์ํํธ์จ์ด ์ธก๋ฉด์ ๊ฐ๊น๋ค.
- ๋ฉํฐ ์ฝ์ด๋ ํ๋์จ์ด ์ธก๋ฉด์ ๊ฐ๊น๋ค.
๐ Multi์ ๊ฐ๋
๐ Concurrency์ Parallelism์ ์ฐจ์ด๋ฅผ ์์์ผ ํ๋ค.
1. โConcurrency (๋์์ฑ)
Pseudo Parallelism์ด๋ผ๊ณ ๋ ๋ถ๋ฆฌ๋ Concurrency๋ ๋ฉํฐํ๋ก๊ทธ๋๋ฐ์ ํ๋ '์ฒ' ํ๋ ๊ฒ์ ๋งํ๋ค. (๋ ์ด์์ ์ค๋ ๋๊ฐ ๋์์ ์ฒ๋ฆฌ๋์ง ์๋๋ค)
- Single Processor ํน์ Single Core์์ ์ค์ผ์ค๋ฌ๊ฐ ํน์ ์ค๋ ๋๋ฅผ ์ ํํด making progress๋ฅผ ํ๋ ๊ฒ์ด๋ค.
2. โParallelism (๋ณ๋ ฌ์ฑ)
๋ ์ด์์ ์ฝ์ด๊ฐ ์กด์ฌํ๋ ๋ฉํฐ ์ฝ์ด ์์คํ ์์ ์ฌ๋ฌ ์ค๋ ๋ ํน์ ํ๋ก์ธ์ค๋ฅผ ๋์์ ์ฒ๋ฆฌํ๋ ํ์๋ฅผ ๋งํ๋ค.
- Parallelism์ Data Parallelism๊ณผ Task Parallelism๊ฐ ์๋ค.
- Data Parallelism ๐ ์์ ๋์ ๋ถ๋ฐฐ (1 ~ 100์ ๋ํ๋ ์ ๋ฌด์์, 1~50์ CPU1์ด 51~100์ CPU2๊ฐ ๊ณ์ฐํ๋ค)
- Task Parallelism ๐ ํ๋ ์ ๋ฌด์ ๋ถ๋ฐฐ (1 ~ 50์ ๋ํ๊ณ , 51 ~ 100์ ๊ณฑํด ํฉ์ฐํ๋ ์ ๋ฌด์์, CPU1์ ๋ํ๋ ์ ๋ฌด๋ฅผ ๋งก๊ณ CPU2๋ ๊ณฑํ๋ ์ ๋ฌด๋ฅผ ๋งก๋๋ค)
๐ Single-core VS Multi-core
์ฑ๊ธ์ฝ์ด
- ๋์์ ์ฌ๋ฌ ์์ ์ ์คํํ๊ธฐ ์ํด์ ๋น ๋ฅธ ํ ์ผ๋ก ์ ํ์ด ๋๋ฉด์ ์ฌ๋ฌ ํ๋ก์ธ์ค๋ฅผ ์คํํ๋ค
๐ Concurrency (๋์์ฑ)
๋ฉํฐ์ฝ์ด
- ๋ฌผ๋ฆฌ์ ์ผ๋ก ์ฌ๋ฌ ๊ฐ์ ์ฝ์ด๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์์ ์คํ๋จ์๋ฅผ ํ์๊ฐ์ ๋์์ ์ฒ๋ฆฌํ๋ค
๐ Parallelism (๋ณ๋ ฌ์ฑ)