Process ๋?
Process ๋ ์คํ์ค์ธ ํ๋ก๊ทธ๋จ์ ์๋ฏธํ๋ค. Process ๋ OS ๋ก ๋ถํฐ ์์์ ํ ๋น๋ฐ์
Code
Data
Stack
Heap
์์ญ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ฉฐ ๊ธฐ๋ณธ์ ์ผ๋ก Process ๋ ์ต์ 1๊ฐ์ Thread(Main Thread) ๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
Process ๋ฉ๋ชจ๋ฆฌ ๊ตฌ์กฐ
Code
- ์ปดํ์ผ๋ ์์ค์ฝ๋๊ฐ ์ ์ฅ๋๋ ์์ญData
- ์ ์ญ ๋ณ์ ๋๋static
๋ณ์ ๋ฑ์ด ์ ์ฅ๋๋ ์์ญHeap
- ๋์ ์ผ๋ก ์์ฑ๋๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋๋ ์์ญStack
- ํธ์ถ๋ ํจ์ ๋๋ ์ง์ญ ๋ณ์ ๋ฑ์ด ์ ์ฅ๋๋ ์์ญ
Process Control Block
- Process ID - ํ๋ก์ธ์ค ์๋ณ์
- Process State - ํ๋ก์ธ์ค ์ํ (์์ฑ, ์ค๋น, ์คํ, ๋๊ธฐ, ์ข ๋ฃ)
- Program Counter - ํ๋ก์ธ์ค๊ฐ ๋ค์์ ์คํํ ๋ช ๋ น์ด์ ์ฃผ์
- Register Information - CPU Register, General Register ๋ฑ์ ํฌํจ
- CPU Scheduling Information - ์ฐ์ ์์, ์ต์ข ์คํ์๊ฐ, CPU ์ ์ ์๊ฐ ๋ฑ์ ํฌํจ
Thread ๋?
Thread ๋ Process ์์ ์คํ ์ ์ด๋ง ๋ถ๋ฆฌํ ํ๋ฆ์ ๋จ์๋ฅผ ์๋ฏธํ๋ค. Thread ๋ Process ๋ด์์
Stack
๋ง ๋ฐ๋ก ํ ๋น๋ฐ๊ณ Code
Data
Heap
์์ญ์ ๊ณต์ ํ๋ค.
ํน์ง
- Process ๋ Process Control Block ๋ด๋ถ์ Register Block ์ ํตํด Thread ๋ฅผ ๊ตฌ๋ถํ๋ค.
- Process ์ Code Data Heap ์์ญ์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ๋ณด๋ค ํจ์จ์ ์ธ ํต์ ์ด ๊ฐ๋ฅํ๋ค.
- ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋น์ฐ์ง ์๊ธฐ ๋๋ฌธ์ Context-Switching ๋น์ฉ์ด ์ ๋ ดํ๋ค.
- ์์ ๊ณต์ ๋ก ์ธํด ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋๊ธฐํ์ ์ ๊ฒฝ์ ๋ง์ด ์จ์ผํ๋ค.
Context-Switching ์ด๋?
Context-Switching ์ด๋ ์ฌ๋ฌ ์์ ์ ์ํํ ๋ ํ ์์ ์ด ๋๋ ๋๊น์ง ๋ค๋ฅธ ์์ ์ด ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ด ์๋๋ผ ์ฌ๋ฌ ์์ ์ ๋ฒ๊ฐ์๊ฐ๋ฉด์ ์คํํ์ฌ ๋์์ ์ฒ๋ฆฌ๋ ์ ์๋๋ก ํ๋ ๋ฐฉ๋ฒ์ ์๋ฏธํ๋ค.
Context-Switching ์ Process ์ ์ํ๋ฅผ PCB ์ ์ ์ฅํ๊ณ ์๋ก์ด Process ์ ์ํ๋ฅผ Register ์ ์ ์ฅํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค. ์ด๋ CPU ๋ ์๋ฌด์ผ๋ ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฆ์ Context-Switching ์ ์ฑ๋ฅ์ ํ๋ฅผ ์ผ์ผํฌ ์ ์๋ค.
Thread ๊ฐ์ Context-Switching ์ ์บ์ ๋ฉ๋ชจ๋ฆฌ๋ PCB ์ ์ ์ฅํด์ผ ํ๋ ๋ด์ฉ๊ณผ ๋น์์ผํ๋ ๋ด์ฉ์ด ์ ๊ธฐ ๋๋ฌธ์ ์๋์ ์ผ๋ก ๋ ๋น ๋ฅธ Context-Switching ์ด ์ผ์ด๋ ์ ์๋ค.
Multi Process
- ๋ฉํฐ ํ๋ก์ธ์ฑ์ด๋
- ํ๋์ ์์ฉํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๊ฐ์ ํ๋ก์ธ์ค๋ก ๊ตฌ์ฑํ๊ณ ๊ฐ ํ๋ก์ธ์ค๊ฐ ํ๋์ ์์ ์ ์ฒ๋ฆฌํ๋๋ก ํ๋ ๊ฒ
- ์ฅ์
- ์ฌ๋ฌ ๊ฐ์ ์์ ํ๋ก์ธ์ค ์ค ํ๋์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๊ทธ ์์ ํ๋ก์ธ์ค๋ง ์ฃฝ์
- ๋จ์
- Context Switching ๊ณผ์ ์์ ์บ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ด๊ธฐํ ๋ฑ ๋ฌด๊ฑฐ์ด ์์ ์ด ์งํ๋๊ณ ๋ง์ ์๊ฐ์ด ์๋ชจ๋๋ ๋ฑ์ ์ค๋ฒํค๋ ๋ฐ์
- ํ๋ก์ธ์ค๋ค์ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ธ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋น๋ฐ์๊ธฐ ๋๋ฌธ์ Context Switching ์ด ๋ฐ์ํ๋ฉด ์บ์ฌ์ ์๋ ๋ชจ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฆฌ์ ํ๊ณ ๋ค์ ์บ์ฌ ์ ๋ณด๋ฅผ ๋ถ๋ฌ์์ผํจ
- ํ๋ก์ธ์ค ์ฌ์ด์ ์ด๋ ต๊ณ ๋ณต์กํ ํต์ ๊ธฐ๋ฒ(IPC)
- ๋ ๋ฆฝ๋ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ๋๋ฌธ์ ํ ํ๋ก๊ทธ๋จ์ ์ํ๋ ํ๋ก์ธ์ค๋ค ์ฌ์ด์ ๋ณ์ ๊ณต์ ๋ถ๊ฐ
Multi Thread
- ๋ฉํฐ ์ค๋ ๋ฉ์ด๋
- ํ๋์ ์์ฉํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ ๊ฐ์ ์ค๋ ๋๋ก ๊ตฌ์ฑํ๊ณ ๊ฐ ์ค๋ ๋๋ก ํ์ฌ๊ธ ํ๋์ ์์ ์ ์ฒ๋ฆฌํ๋๋ก ํ๋ ๊ฒ
- ์๋์ฐ, ๋ฆฌ๋ ์ค ๋ฑ ๋ง์ OS๋ค์ด ๋ฉํฐ ํ๋ก์ธ์ฑ์ ์ง์ํ๊ณ ์์ง๋ง ๋ฉํฐ ์ค๋ ๋ฉ์ ๊ธฐ๋ณธ์ผ๋ก ํ๊ณ ์์
- ์น ์๋ฒ๋ ๋ํ์ ์ธ ๋ฉํฐ ์ค๋ ๋ ์์ฉ ํ๋ก๊ทธ๋จ
- ์ฅ์
- ์์คํ
์์ ์๋ชจ ๊ฐ์ (์์์ ํจ์จ์ฑ ์ฆ๋)
- ํ๋ก์ธ์ค๋ฅผ ์์ฑํ์ฌ ์์์ ํ ๋นํ๋ ์์คํ ์ฝ์ด ์ค์ด๋ค์ด ์์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์๋ค.
- ์์คํ
์ฒ๋ฆฌ๋ ์ฆ๊ฐ (์ฒ๋ฆฌ ๋น์ฉ ๊ฐ์)
- ์ค๋ ๋ ๊ฐ ๋ฐ์ดํฐ ํต์ ์ด ๊ฐ๋จํด์ง๊ณ ์์คํ ์์ ์๋ชจ๊ฐ ์ค์ด๋ฌ
- ์ค๋ ๋ ์ฌ์ด์ ์์ ๋์ด ์์ Context Switching์ด ๋น ๋ฆ
- ๊ฐ๋จํ ํต์ ๋ฐฉ๋ฒ์ผ๋ก ์ธํ ํ๋ก๊ทธ๋จ ์๋ต ์๊ฐ ๋จ์ถ
- ์ค๋ ๋๋ ํ๋ก์ธ์ค ๋ด์ Stack ์์ญ์ ์ ์ธํ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ํต์ ์ ๋ถ๋ด์ด ์ ์
- ์์คํ
์์ ์๋ชจ ๊ฐ์ (์์์ ํจ์จ์ฑ ์ฆ๋)
- ๋จ์
- ์ฃผ์ ๊น์ ์ค๊ณ ํ์
- ๊น๋ค๋ก์ด ๋๋ฒ๊น
- ๋จ์ผ ํ๋ก์ธ์ค ์์คํ ์ ๊ฒฝ์ฐ ํจ๊ณผ๋ฅผ ๊ธฐ๋ํ๊ธฐ ์ด๋ ค์
- ํ๋ก์ธ์ค ๋ฐ์์ ์ค๋ ๋ ๊ฐ๊ฐ์ ์ ์ดํ ์ ์์
- ๋ฉํฐ ์ค๋ ๋์ ๊ฒฝ์ฐ ์์ ๊ณต์ ๋ฌธ์ ๋ฐ์
- ํ๋์ ์ค๋ ๋์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด ์ ์ฒด ํ๋ก์ธ์ค์ ์ํฅ์ ๋ผ์นจ
Multi Process ๋์ Multi Thread ์ฌ์ฉํ๋ ์ด์
- ํ๋ก๊ทธ๋จ ์ฌ๋ฌ ๊ฐ๋ฅผ ํค๋ ๊ฒ๋ณด๋ค ํ๋์ ํ๋ก๊ทธ๋จ ์์์ ์ฌ๋ฌ ์์ ์ ํด๊ฒฐํ๋ ๊ฒ
- ์ฌ๋ฌ ํ๋ก์ธ์ค๋ก ํ ์ ์๋ ์์
์ ์ฌ๋ฌ ์ค๋ ๋๋ก ๋๋ ์ ํ๋ ์ด์
- ์์์ ํจ์จ์ฑ ์ฆ๋
- ํ๋ก์ธ์ค๋ฅผ ์คํํ์ฌ ์์์ ํ ๋นํ๋ ์์คํ ์ฝ์ด ์ค์ด๋ค์ด ์์์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ
- ํ๋ก์ธ์ค ๊ฐ Context Switching ์ ์ค๋ฒํค๋๊ฐ ํฌ๊ธฐ ๋๋ฌธ
- ์ฒ๋ฆฌ ๋น์ฉ ๊ฐ์ ๋ฐ ์๋ต ์๊ฐ ๋จ์ถ
- ์ค๋ ๋๋ Stack ์์ญ์ ์ ์ธํ ๋ชจ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ Inter-Process Communication ๋ณด๋ค ํต์ ๋น์ฉ์ด ์ ์
- ์ค๋ ๋ ๊ฐ Context Switching ์ Stack ์์ญ๋ง ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ค๋ ๋ ๊ฐ์ ์ ํ ์๋๊ฐ ๋น ๋ฆ
- ์์์ ํจ์จ์ฑ ์ฆ๋