๋ชฉ๋ก
- ํ๋ก์ธ์ค(Process)๋?
- ํ๋ก์ธ์ค ์์ฑ ๋จ๊ณ
- ํ๋ก์ธ์ค ์ํ ๋ฐ ์ ์ด
- ์ฃผ์ ์๋ฃ๊ตฌ์กฐ
- ์ฐธ๊ณ
Process
1. ํ๋ก์ธ์ค(Process)๋?
ํ๋ก์ธ์ค(process): ์ด์์ฒด์ ์ ๊ธฐ๋ณธ ์ถ์ํ๋ก, ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ์ ์๋ฏธํ๋ค. ํ๋ก์ธ์ค๋ ์์ ์ ์ฃผ์ ๊ณต๊ฐ, CPU ๋ ์ง์คํฐ ์ํ, I/O ์ํ(์ด๋ฆฐ ํ์ผ ๋์คํฌ๋ฆฝํฐ ๋ฑ)๋ฅผ ์บก์ฒํ์ฌ ๋ ๋ฆฝ๋ ์คํ ํ๊ฒฝ์ ์ ๊ณตํ๋ค
ํ๋ก๊ทธ๋จ: ๋์คํฌ ์์ ์กด์ฌํ๋ฉฐ ์คํ์ ์ํ ๋ช ๋ น์ด์ ์ ์ ๋ฐ์ดํฐ์ ๋ฌถ์์ด๋ค.
์๋ถํ (time sharing): ํ๋์ process๋ฅผ ์คํํ ํ, ์ค์งํ๊ณ , ๋ค๋ฅธ process๋ฅผ ์คํํ๋ค
- ์ ์ฌ์ ์ธ ๋น์ฉ: CPU๋ฅผ ๊ณต์ -> ๊ฐ process์ ์ฑ๋ฅ ์ ํ
๊ณต๊ฐ๋ถํ (space sharing): ๊ฐ์ฒด์๊ฒ ๊ณต๊ฐ์ ๋ถํ ํ๋ค
1.1. ๊ตฌ์ฑ ์์
๋ฉ๋ชจ๋ฆฌ(memory, address space):
- ๋ช ๋ น์ด
- ์คํ ํ๋ก๊ทธ๋จ์ด ์ฝ๊ณ ์ฐ๋ ๋ฐ์ดํฐ
๋ ์ง์คํฐ(register)
- ํ๋ก๊ทธ๋จ ์นด์ดํฐ(PC, Program Counter) = ๋ช ๋ น์ด ํฌ์ธํฐ(IP, Instruction Pointer): ํ๋ก๊ทธ๋จ์ ์ด๋ ๋ช ๋ น์ด๊ฐ ์คํ ์ค์ธ์ง๋ฅผ ์๋ ค์ค๋ค
- ์คํ ํฌ์ธํฐ(Stack Pointer) & ํ๋ ์ ํฌ์ธํฐ(Frame Pointer): ํจ์์ ๋ณ์์ ๋ฆฌํด ์ฃผ์๋ฅผ ์ ์ฅํ๋ ์คํ์ ๊ด๋ฆฌํ ๋ ์ฌ์ฉํ๋ ๋ ์ง์คํฐ์ด๋ค
2. ํ๋ก์ธ์ค ์์ฑ ๋จ๊ณ
- ์ฝ๋ยท์ ์ ๋ฐ์ดํฐ ๋ก๋: ์คํ ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ์ ๋ด๋๋ค
- ์คํ ์ด๊ธฐํ: ์ด๊ธฐ ์คํ ํ๋ ์(์ธ์, ๋ฐํ ์ฃผ์ ๋ฑ)์ ์ค์ ํ๋ค
- ํ ์ด๊ธฐํ: malloc() ํธ์ถ์ ๋๋นํด ํ ์์ญ์ ์ค์ ํ๋ค
- I/O ์ด๊ธฐํ: UNIX ์์คํ ์ ๊ธฐ๋ณธ ํ์ค ์ ๋ ฅ/์ถ๋ ฅ/์ค๋ฅ ๋์คํฌ๋ฆฝํฐ(descriptor)๋ฅผ ์ฐ๋ค
- ์คํ ์์: OS๊ฐ ์ง์ ์ main()์ผ๋ก ์ ํํด ์ฌ์ฉ์ ์ฝ๋๋ฅผ ์คํ ๋ฐ ๊ฐ์ํ๋ค
3. ํ๋ก์ธ์ค ์ํ ๋ฐ ์ ์ด
- Running: ์ค์ CPU์์ ๋ช ๋ น์ ์ํ ์ค
- Ready: ์คํ ์ค๋น๋ ๋์ด ์์ผ๋ ์ค์ผ์ค๋ฌ ๋๊ธฐ
- Blocked: I/O ์์ฒญ ๋ฑ์ผ๋ก ์ด๋ฒคํธ ์๋ฃ ์ ๊น์ง ๋๊ธฐ
์ ์ด ์กฐ๊ฑด:
- Ready -> Running: ์ค์ผ์ค๋ฌ๊ฐ ์ ํ(โScheduledโ)
- Running -> Ready: ํ์ค์ผ์ค(โDescheduledโ)
- Running -> Blocked: I/O ์์ ๋ฑ
- Blocked -> Ready: I/O ์๋ฃ ๋ฑ
4. ์ฃผ์ ์๋ฃ๊ตฌ์กฐ
ํ๋ก์ธ์ค ๋ฆฌ์คํธ: Ready ์ํ ํ, Running ํ๋ก์ธ์ค ์ ๋ณด, Blocked ํ ๋ฑ์ ๊ด๋ฆฌํ๋ค
PCB (Process Control Block): ํ๋ก์ธ์ค๋ณ ์ํ(enum proc_state), pid, ๋ถ๋ชจ ํฌ์ธํฐ, ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐยท์์ ์ฃผ์, ์ปค๋ ์คํ ํฌ์ธํฐ, ์ปจํ ์คํธ ์ ์ฅ ๊ณต๊ฐ(struct context), ํธ๋ฉ ํ๋ ์(struct trapframe) ๋ฑ์ ํฌํจํ๋ค