๐พ Process
Process๋ ํ๋ก๊ทธ๋จ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋์ด ์คํ๋๋ ๊ฒ์ ๋งํฉ๋๋ค.
Process์ ์ข ๋ฅ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Foreground Process: User๊ฐ ๋ณผ ์ ์๋ ๊ณต๊ฐ์์ ์คํ๋๋ Process
- Background Process: User๊ฐ ๋ณด์ง ๋ชปํ๋ ๊ณต๊ฐ์์ ์คํ๋๋ Process
- Demon(Service): User์ ์ํธ์์ฉํ์ง ์๊ณ ์ ํด์ง ์ผ๋ง ์ํํ๋ Process
- Unix โ Demon
- Window โ Service
- Demon(Service): User์ ์ํธ์์ฉํ์ง ์๊ณ ์ ํด์ง ์ผ๋ง ์ํํ๋ Process
๐พ PCB(Process Control Block)
PCB๋ Process๋ฅผ ์๋ณํ๊ธฐ ์ํด ๊ผญ ํ์ํ ์ ๋ณด(Context)๋ฅผ ์ ์ฅํ๋ ์๋ฃ๊ตฌ์กฐ์ด๋ฉฐ Process ์์ฑ์์ Kernel ์์ญ์ ๋ง๋ค์ด์ง๊ณ ์คํ์ด ์ข ๋ฃ๋๋ฉด ํ๊ธฐ๋ฉ๋๋ค.
Context์ ํฌํจ๋๋ ์ ๋ณด์๋ OS๋ง๋ค ์ฐจ์ด๊ฐ ์์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ ๋ณด๋ค์ด ํฌํจ๋ฉ๋๋ค.
- PID(Process ID): ํน์ Process๋ฅผ ์๋ณํ๊ธฐ ์ํด ๋ถ์ฌํ๋ ๊ณ ์ ํ ๋ฒํธ
- Register Value: ํด๋น Process๊ฐ ์คํํ๋ฉฐ ์ฌ์ฉํ๋ PC(Program Counter)์ ๊ฐ์ ๋ ์ง์คํฐ ๊ฐ๋ค์ ์ ์ฅ
- Process State: ํด๋น Process์ ํ์ฌ ์ํ๋ฅผ ์ ์ฅ
- CPU Scheduling: ํด๋น Process๊ฐ CPU๋ฅผ ์ธ์ , ์ด๋ค ์์๋ก ํ ๋น ๋ฐ์์ง์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅ
- Memory Management: ํด๋น Process๊ฐ ์ ์ฅ๋ ๋ฉ๋ชจ๋ฆฌ์ ์์น๋ฅผ ์ ์ฅ
- Used File: ์ด๋ค File๋ค์ ์ด์๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅ
- Used I/O Device: ์ด๋ค I/O Device๊ฐ ํด๋น Process์ ํ ๋น๋์๋์ง์ ๋ํ ์ ๋ณด๋ฅผ ์ ์ฅ
Process๋ค์ ์ฐจ๋ก๋๋ก ๋์๊ฐ๋ฉฐ ํ์ ๋ ์๊ฐ๋งํผ CPU๋ฅผ ์ฌ์ฉํ๋๋ฐ ํน์ Process๊ฐ ์ ํด์ง ์๊ฐ๋งํผ ๋ชจ๋ ์ฌ์ฉํ๊ฑฐ๋ ์๊ธฐ์น ๋ชปํ ์ํฉ์ด ๋ฐ์ํ์ฌ Interrupt๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ OS๋ PCB์ Context๋ฅผ ๋ฐฑ์ ํ๊ณ ์ดํ ๋ค์ ํด๋น Process๊ฐ CPU๋ฅผ ์ฌ์ฉํ ๋ PCB์ ์ ์ฅ๋ Context๋ฅผ ๋ณต๊ตฌํ์ฌ ์คํํฉ๋๋ค. ์ด์ฒ๋ผ PCB์ Context ๋ฐฑ์ ํ๊ณ ๋ค์ ๋ณต๊ตฌํ์ฌ ์คํํ๋ ๊ณผ์ ์ Context Switching์ด๋ผ ํฉ๋๋ค.
Context Switching์ด ์์ฃผ ์ผ์ด๋๋ฉด Process๋ค์ด ๋์์ ์คํ๋๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง Overhead๊ฐ ๋ฐ์ํ ์๋ ์์ต๋๋ค.
๐พ Memory
Process๋ User Space์์ ๋ค์๊ณผ ๊ฐ์ด ๋๋์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ฉ๋๋ค.
๋์ ์ผ๋ก ํ ๋น๋๋ Heap Segment์ Stack Segment์ ์ฃผ์๊ฐ ๊ฒน์น์ง ์๋๋ก Heap Segment๋ ๋ฉ๋ชจ๋ฆฌ์ ๋ฎ์ ์ฃผ์์์ ์์ํ๊ณ Stack Segment๋ ๋์ ์ฃผ์์์ ์์ํฉ๋๋ค.
ย | Definition | ์ ์ or ๋์ |
---|---|---|
Code Segment (Text Segment) | CPU๊ฐ ์คํํ ๊ธฐ๊ณ์ด๋ก ์ด๋ฃจ์ด์ง ๋ช
๋ น์ด๊ฐ ์ ์ฅ (Read-Only) | ์ ์ ํ ๋น ์์ญ |
Data Segment | Program์ด ์คํ๋๋ ๋์ ์ ์งํ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ (Ex. ์ ์ญ ๋ณ์) | ์ ์ ํ ๋น ์์ญ |
Heap Segment | ํ๋ก๊ทธ๋๋จธ๊ฐ ์ง์ ํ ๋นํ ์ ์์ผ๋ฉฐ ์ธ์ ๊ฐ๋ ๋ฐํํด์ผ ํ๋ ๊ณต๊ฐ (โ ๏ธ ๋ฐํํ์ง ์์ผ๋ฉด Memory Leak ๋ฌธ์ ๋ฐ์) | ๋์ ํ ๋น ์์ญ |
Stack Segment | ๋ฐ์ดํฐ๋ฅผ ์ผ์์ ์ผ๋ก ์ ์ฅํ๋ ๊ณต๊ฐ (Ex. ๋งค๊ฐ๋ณ์, ์ง์ญ ๋ณ์) | ๋์ ํ ๋น ์์ญ |
๐พ Process State
PCB์ ์ ์ฅ๋๋ Process State๋ OS๋ง๋ค ์์ดํ์ง๋ง ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ ์ํ๋ฅผ ๊ฑฐ์น๋ฉฐ ์คํ๋ฉ๋๋ค.
- ์์ฑ ์ํ(New): ๋ฐฉ๊ธ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋์ด PCB๋ฅผ ํ ๋น ๋ฐ์ ์ํ
- ์ค๋น ์ํ(Ready): ๋น์ฅ CPU๋ฅผ ํ ๋น ๋ฐ์์ ์คํํ ์ ์๋ ์ํ
- ์คํ ์ํ(Running): CPU๋ฅผ ํ ๋น ๋ฐ์์ ์คํ์ค์ธ ์ํ
- ๋๊ธฐ ์ํ(Blocked): I/O Device์ ์์ ์ ์์ฒญํด์ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ์ํ
- ์ข ๋ฃ ์ํ(Terminated): Process๊ฐ ์ข ๋ฃ๋ ์ํ๋ก PCB์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ชจ๋ ์ ๋ฆฌ
๐พ Process ๊ณ์ธต ๊ตฌ์กฐ
๋ง์ OS๋ค์ Process๋ฅผ ๊ณ์ธต์ ์ธ ๊ตฌ์กฐ๋ก ๊ด๋ฆฌํ๋ฉฐ Process๋ ์คํ ๋์ค System Call์ ํตํด ๋ค๋ฅธ Process๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
์ด๋ ๊ธฐ์กด์ Process๋ฅผ Parent Process, ์๋ก ์์ฑํ Process๋ฅผ Child Process๋ผ๊ณ ํฉ๋๋ค.
Parent Process์ Child Process๋ ๋ค๋ฅธ Process์ด๊ธฐ ๋๋ฌธ์ ์๋ก ๋ค๋ฅธ PID๋ฅผ ๊ฐ์ง์ง๋ง ์ผ๋ถ OS์์๋ Child Process์ PCB์ Parent Prcoess์ PID๋ฅผ Context์ ํฌํจ์ํต๋๋ค.
Child Process์ ์์ฑ๊ณผ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- Parent Process๋
fork()
๋ฅผ ํตํด ์์ ์ ๋ณต์ฌ๋ณธ(Child Process)์ ์์ฑ - Child Process๋
exec()
๋ฅผ ํตํด Code Segment์ Data Segment์ ๋ด์ฉ์ด ์คํํ ํ๋ก๊ทธ๋จ์ ๋ด์ฉ์ผ๋ก ๋ฐ๋๊ณ Heap Segment์ Stack Segment๋ ์ด๊ธฐํ
๐พ Thread
Thread๋ Process๋ฅผ ๊ตฌ์ฑํ๋ ์คํ์ ํ๋ฆ ๋จ์์ด๋ฉฐ ์ฌ๋ฌ Thread๋ก ์ฌ๋ฌ ๋ช ๋ น์ด๋ฅผ ๋์์ ์คํํ๋ ๊ฒ์ Multi-Thread๋ผ๊ณ ํฉ๋๋ค.
Process๋ค๋ผ๋ฆฌ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์์ ๊ณต์ ํ์ง ์์ง๋ง Thread๋ผ๋ฆฌ๋ ๊ฐ์ Process ๋ด์ ์์์ ๊ณต์ ํฉ๋๋ค.
Multi-Thread์ ์ฅ์ ๊ณผ ๋จ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ์ฅ์
- ์ฌ๋ฌ Process๋ค์ ํจ๊ป ์คํํ๋ ๊ฒ๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์์
- Thread๋ Process ๋ด์ ์์์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ์๋ก ํ๋ ฅ๊ณผ ํต์ ์ ์ ๋ฆฌ
- ๋จ์
- Multi-Thread๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํ๋์ Thread์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด Process ์ ์ฒด์ ๋ฌธ์ ๊ฐ ์๊น