- Program Execution์ ๊ธฐ๋ณธ ๋จ์.
- Multiprogramming : ํ๋ก๊ทธ๋จ์ ์ฌ๋ฌ๊ฐ
Multiprocessing: ํ๋ก์ธ์ค๊ฐ ์ฌ๋ฌ๊ฐ. ํ๋์ job์ ์ฒ๋ฆฌํ๋ ํํ
- Pseudoparallelism : ์ค์ ๋ก ๋ณํ ํ๋ก์ธ์ค์ธ๊ฑด ์๋์ง๋ง, ์ฌ๋์ด ๋ณผ๋๋ ๊ทธ๋ฐ ๊ฒ ์ฒ๋ผ ๋๊ปด์ง. ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋น ๋ฅด๊ฒ ๋์๊ฐ๋ฉด์ ์ฒ๋ฆฌ๋จ์ผ๋ก์ ๋์์ ์ฒ๋ฆฌ๋๋๊ฒ ์ฒ๋ผ.
- ํ๋ก์ธ์ค๊ฐ ๊ฐ์ง๊ณ ์๋๊ฒ : ์ฃผ์ ๊ณต๊ฐ, ํ๋ก๊ทธ๋จ ์คํ ์ฝ๋, ์คํ-์คํํฌ์ธํฐ, PC, ๋ ์ง์คํฐ(์ ์ํ), OS์๊ฒ ์์ฒญํด์ ์ป์ ๋ฆฌ์์ค - ๋ฑ์ ํ๋ก์ธ์ค๊ฐ ๊ฐ๊ณ ๊ด๋ฆฌํ๋ค.
Process in OS
- ๊ฐ ํ๋ก์ธ์ค๋ ์ ๋ํฌํ PID๋ก ๊ด๋ฆฌ๋๋ค.
- OS์๋ ํ๋ก์ธ์ค๋ค์ ๊ด๋ฆฌํ๊ธฐ ์ํ Process Table (PT)๊ฐ ์์.
- Process Control Block (PCB) : PT์ ์ํธ๋ฆฌ
OS์ ์๋ ๊ตฌ์กฐ์ฒด, ํ๋ก์ธ์ค์ ๋ํ ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๋ค. - PCB์์ execution state (Ready, Running, Blocked) , PC, SP, ํ๋ก์ธ์ ๋ ์ง์คํฐ ๋ฑ์ ์ ์ฅํ๊ณ ์๋ค.
Process creation
- ํ๋ก์ธ์ค๋ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ createํ ์ ์๋ค.
- Parent Process, Child Process
- ps ๋ช ๋ น์ด๋ฅผ ํตํด ๊ฐ ํ๋ก์ธ์ค์ ๋ถ๋ชจ ํ๋ก์ธ์ค PID๋ฅผ ํ์ธํ ์ ์๋ค : PPID
- fork() ๋ผ๋ ์์คํ ์ฝ์ ํธ์ถํด child๋ฅผ ์์ฑํ๋ค.
FORK (UNIX์์)
- ์๋ก์ด PCB๋ฅผ ์ด๊ธฐํํ๋ค.
- ์ ์ฃผ์๊ณต๊ฐ์ ํ ๋นํ๊ณ , (PT๋ฅผ ๋ง๋ ๋ค๋ ์๊ธฐ)
- parent์ ์ฃผ์๊ณต๊ฐ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ๋ค.
- OS๊ฐ parent์ ํ ๋นํ๋ ๋ฆฌ์์ค๋ฅผ child์์ ํ ๋น.
- ์๋ก ๋ง๋ค์ด์ง PCB๋ ready queue์ ์์นํจ.
- fork() ์์คํ
์ฝ์ ๋ ๊ตฐ๋ฐ์ ๋ฆฌํด๋๋ค.
- parent : child์ PID ๋ฆฌํด
- child : 0 ๋ฆฌํด
- ์์ : ๊ฒฐ๊ณผ์ ์ผ๋ก parent์์ global์ 200, child์์ global์ 20 ์ด๋๋ค.
EXEC
int exec(char *prog, char **argv);
- ํ์ฌ ํ๋ก์ธ์ค๋ฅผ ๋ฉ์ถ๊ณ ์๋ก์ด ํ๋ก๊ทธ๋จ(prog)๋ฅผ ๋ก๋ฉํจ
- PID๋ ๋ฐ๋์ง ์์. ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋๊ฒ ์๋๋ค!!
- PCB๋ ready queue์ ๋ค์ด๊ฐ๋ค.
- exec() ํธ์ถ์ด ์ฑ๊ณตํ๋ฉด ์ํํ ํ๋ก๊ทธ๋จ ๋ด์ฉ์ด ๋ฐ๋๋ฏ๋ก, ํธ์ถ ์ฑ๊ณต์์ ๋ฆฌํด๊ฐ์ด ์๋ฏธ๊ฐ ์๋ค.
- ์๋ฌ๊ฐ ๋๋ฉด -1 ๋ฆฌํด
A Simple Shell
- Shell์์ ๋ช ๋ น์ด๋ฅผ ์คํ์ํค๋ ๊ทธ๋ฐ ์ฝ๋
- Bash (born again shell) : ์ ์ผ ์ต์์ ํ๋ก์ธ์ค
- ํฐ๋ฏธ๋์์ ๋ช ๋ น์ด๋ฅผ ์ฝ์ด๋ค์ด๊ณ , fork()๋ก ์ ํ๋ก์ธ์ค ์์ฑ.
- child์์๋ ์ฝ์ด๋ค์ธ ๋ช ๋ น์ด(command)๋ก executeํ๊ณ ,
- parent์์๋ child๊ฐ terminate ๋ ๋๊น์ง wait ํ๋ค.
Process Termination
- Normal exit (voluntary) : main()์์
exit(0)
๋ฅผ ํธ์ถํด ์ ์์ ์ผ๋ก ์ข ๋ฃ๋๋ ๊ฒ. - Error exit (voluntary) : main()์์ ์ค๋ฅ๊ฐ ๋ฌ์ ๋ exit(?)์ ํธ์ถํด ์ข ๋ฃ. ๋ถ๋ชจ ํ๋ก์ธ์ค์์ arg๋ฅผ ๋ฐ์ ์ค๋ฅ์ ์ข ๋ฅ๋ฅผ ๊ตฌ๋ถํ ์ ์์
- Fatal error (involuntary) : fault ๊ฐ์๊ฑฐ ๋ฐ์ํ๋ฉด ๋น์ ์์ ์ผ๋ก ์ข ๋ฃ
Exit()
๋ ์์คํ ์ฝ์
Process States
- Ready : ready queue์ ๊ธฐ๋ค๋ฆฌ๋ฉด์ CPU๋ฅผ ํ ๋น๋ฐ๊ธฐ ๊ธฐ๋ค๋ฆผ
- Running : CPU๋ฅผ ํ ๋น๋ฐ์ ์ํ ์ค. CPU (์ฝ์ด) ์ซ์๋งํผ ๋์์ ์ด์ ๊ฐ๋ฅ.
- Blocked : CPU๊ฐ ํ ๋น๋๊ณ ์์ด๋ ๋ ์งํํ ์ ์์.
ex. I/O ๋๋ฆด ๋, read๋ ๊ฒฐ๊ณผ๊ฐ์ด ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋๊น์ง ๊ธฐ๋ค๋ ค์ผ ํจ / page fault
- preemptive : CPU ํ ๋นํด๋๊ณ ๋๋ฌด ์ค๋์ฐ๋ฉด ๋ค์ ์์ (์ค์ผ์ฅด๋ฌ๊ฐ)
Context Switch
- ํ๋์จ์ด๊ฐ ์๋์ ์ผ๋ก PC์ ๋ ์ง์คํฐ์ ์ ์ฅ๋ ๊ฐ๋ค์ ์ง์ ๋จ stack์ ์ ์ฅ (๋ฐฑ์ )
- interrupt ๊ฑธ๋ฆฌ๋ฉด Interrupt Handler Routine์ ์คํ. (interrupt vector๊ฐ ๊ฐ๋ฆฌํค๋ ์ฃผ์์ ์์)
- ๋๋จธ์ง ํ์ํ ๋ ์ง์คํฐ ๊ฐ๋ค์ ์ ์ฅํ๋ค. ์ด๋ฐ๊ฑด C๋ก ํ๊ธฐ ์ด๋ ค์์ ์ด์ ๋ธ๋ฆฌ์ด ๋์ด์์.
- ํ๋ก์์ ๊ฐ ๋ ์ ์๋๋ก ์๋ก์ด ์คํ์ ์ธํ ํจ (ํ์ฌ ์ฌ์ฉํ๊ณ ์๋ ์คํ ์ฌ์ฉํ๋ฉด ํ๋ก๊ทธ๋จ์ด ์ํฌ์ ์์)
- interrupt ์๋น์ค ๋ฃจํด์ ์คํํจ (์ด๊ฑด C๋ก ์ง์ฌ์ ธ ์์ / ์๊น ์ธํ ํ ์ ์คํ์์!)
- ์๋น์ค ๋ฃจํด์ด ๋๋๋ฉด cpu ์ค์ผ๋๋ฌ๊ฐ ๋๋ค. ready queue์ ์๋ ํ๋ก์ธ์ค ์ค ํ๋๊ฐ ์คํ๋จ.
- C procedure returns to the assembly code(?)
์ฒ๋ฆฌํ ํ๋ก์ธ์ค์ PCB์์ CPU ์ํ๋ค์ load ํ๋ค๊ณ ํจ. - ์ด์ ๋ธ๋ฆฌ ์ฝ๋๊ฐ ์๋ก์ด ํ๋ก์ธ์ค๋ฅผ ์์ํจ. PCB์ ์๋ CPU ์ํ๋ค์ ๊ฐ์ ธ์, PC๊ฐ ์๋ก์ด ํ๋ก๊ทธ๋จ์ ๊ฐ๋ฆฌํค๋๋ก ์ธํ ..! ๋ชจ๋๋ ๋ค์ ์ปค๋์์ ์ ์ ๋ก ๋ฐ๋.
- context switch ํ๋ ๊ณผ์ ๋ ์ค๋ฒํค๋๊ฐ ์ซ ์์ (์๊ฐ๊ฑธ๋ฆผ)