- ๋ฉ๋ชจ๋ฆฌ์ ๋ค์ ํ๋ก๊ทธ๋จ ์ ์ฌ๋์ด ๋ณํ ์คํ
- process: ์คํ ์ค์ธ ํ๋ก๊ทธ๋จ
- program์ด ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ ๋๋ฉด
- sys = ์ฌ์ฉ์ ์ฝ๋ ์คํ ํ๋ก์ธ์ค + os ์ฝ๋ ์คํ ํ๋ก์ธ์ค
3.1 Process Concept
- job ์คํ โ ์ฌ์ฉ์ ํ๋ก๊ทธ๋จ/task ์คํ โ ํ๋
- ์ด๋ฐ ๋ชจ๋ ํ๋์ด ํ๋ก์ธ์ค(job ์คํํ๋ ์ผ๊ด์ฒ๋ฆฌ์์๋ ์ฌ์ฉ์+์์คํ
์ด๋)
3.1.1 The Process
- text: ์คํ ์ฝ๋
- data: ์ ์ญ ๋ณ์
- heap: ํ๋ก๊ทธ๋จ ์คํ ์ค ๋์ ํ ๋น ๋๋ ๋ฉ๋ชจ๋ฆฌ
- stack: ํจ์ ํธ์ถ ์ ์์ ๋ฐ์ดํฐ ์ ์ฅ (๋งค๊ฐ๋ณ์, ๋ณต๊ท ์ฃผ์, ์ง์ญ๋ณ์...)
- activation record ํ์ฑํ ๋ ์ฝ๋
- ํจ์ ๋งค๊ฐ๋ณ์, ์ง์ญ๋ณ์, ๋ณต๊ท์ฃผ์ ํฌํจ
- ์คํ์ push
3.1.2 Process State
- new: ํ๋ก์ธ์ค ์์ฑ ์ค
- running: ๋ช
๋ น์ด ์คํ ์ค
- waiting: ์ด๋ฒคํธ(์
์ถ๋ ฅ ์๋ฃ, ์ ํธ ์์ ๋ฑ) ๊ธฐ๋ค๋ฆฌ๋ ์ค
- ready: cpu์ ํ ๋น ๊ธฐ๋ค๋ฆผ
- terminated: ์คํ ์ข
๋ฃ
โcpu์์๋ ์ค์ง ํ๋์ ํ๋ก์ธ์ค๋ง running ๊ฐ๋ฅ
3.1.3 Process Control Block
3.1.4 Threads
- ๋จ์ผ ์ค๋ ๋ โ ์๋๋ผ๋ ํ๋ก์ธ์ค๊ฐ ์๋ค๋ฉด, ์ค๋ ๋๊ฐ ํ๋์ผ ๊ฒฝ์ฐ ํ๊ฐ์ง ์ผ๋ง ํ ์ ์์ โ ๋ฌธ์ ์
๋ ฅ๊ณผ ๋์์ ์ฒ ์ ๊ฒ์ฌ ๋ถ๊ฐ๋ฅ
- ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋ณ๋ ฌ ์คํ
- PCB์ ์ค๋ ๋ ์ ๋ณด ํฌํจ
3.2 Process Scheduling
- ๋ค์ค ํ๋ก๊ทธ๋๋ฐ ์ ๋ degree of multiprogramming
- ํ์ฌ ๋ฉ๋ชจ๋ฆฌ์ ์๋ ํ๋ก์ธ์ค ์
- I/O bound process
- CPU bound process
3.2.1 Scheduling Queue
3.2.2 CPU Scheduling
- CPU ์ค์ผ์ค๋ฌ: wait Q์ proc์ค ํ๋ ์ ํํด cpu ์ฝ์ด์ ํ ๋น
- ์ ์ด๋ 100ms ์ ํ๋ฒ ์คํ
- ์ค์ํ swaping
- swap out: ์คํ ์ค proc ์ํ ์ ์ฅ. mem โ disk
- swap in: disk โ mem. ์ํ ๋ณต์
- ๋ฉ๋ชจ๋ฆฌ๊ฐ ์ด๊ณผ ์ฌ์ฉ๋์ด ๊ฐ์ฉ๊ณต๊ฐ ํ๋ณด ํ์ํ ๋
3.2.3 Context Switch
- ์ธํฐ๋ฝํธ ์ฒ๋ฆฌ๊ฐ ๋๋ ํ์ ๋ฌธ๋งฅ ๋ณต๊ตฌ โ ์ ์ฅ ํ์
- context โ pcb์ ํํ
- process state
- ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์ ๋ณด
- context switch ๋ฌธ๋งฅ ๊ตํ
- ํ๋ก์ธ์ค ์ํ ๋ณด๊ดํ๊ณ , ์ ํ๋ก์ธ์ค ์ํ ๋ณต๊ตฌ
- state save ์ํ ์ ์ฅ: cpu์ ํ์ฌ ์ํ ์ ์ฅ
- state restore ๋ณต๊ตฌ ์์
: ์ฐ์ฐ ์ฌ๊ฐ ์ํด ์ํ ๋ณต๊ตฌ
- context switch ์๊ฐ์ ์ค๋ฒํค๋
3.3 Operation on Processes
- proc ๋ณํ ์คํ
- ๋์ ์์ฑ, ์ ๊ฑฐ
- ํ๋ก์ธ์ค ์์ฑ ๋ฐ ์ข
๋ฃ๋ฅผ ์ํ ๊ธฐ๋ฒ ํ์
3.3.1 Process Creation
- ํ๋ก์ธ์ค๊ฐ ์๋ก์ด proc ์์ฑ
- pid ๋ถ์ฌ โ index๋ก ๊ด๋ฆฌ
3.3.2 Process Teramination
- ์ข
๋ฃ๋๋ฉด ์์ ๋ฐ๋ฉ
- ๋ถ๋ชจ๋ ์์์ ๊ฐ์ ์ข
๋ฃ ์ํฌ ์ ์์
- ์์ ์์ฑ์ pid ๋ถ๋ชจ์๊ฒ ๋์ด๊ฐ
- ์ฐ์์ ์ข
๋ฃ cascading termination
- ๋ถ๋ชจ๊ฐ ์ข
๋ฃ๋๋ฉด ์์๋ ์ข
๋ฃ๋์ด์ผ ํจ
- os๊ฐ ๊ฐ์
- ์ข๋น ํ๋ก์ธ์ค
- ์ข
๋ฃ โ ์์ ๋ฐ๋ฉ but ๋ถ๋ชจ๊ฐ wait() ํธ์ถ ์ํ๋ฉด ํ๋ก์ธ์ค ํ
์ด๋ธ์๋ ๊ทธ๋๋ก ๊ธฐ๋ก๋์ด์์
- ๊ณ ์ ํ๋ก์ธ์ค
- ์ข๋น์๋๋ฐ ๋ถ๋ชจ๊ฐ wait() ์์ด exit() ํด๋ฒ๋ฆฐ ๊ฒฝ์ฐ
โ init ํ๋ก์ธ์ค์ ์์์ผ๋ก ์ค์ ํ๊ณ , ์ฃผ๊ธฐ์ ์ผ๋ก wait()์ํํด ์ฒญ์
์๋๋ก์ด๋ ํ๋ก์ธ์ค ๊ณ์ธต
- ํ์ ๋ ์์ โ ์์คํ
์์ ํ์ ์ํด ํ๋ก์ธ์ค ์ข
๋ฃ
- ์ค์๋ ๊ณ์ธต ์๋ณํด ์ค์๋ ๋ฎ์ ๊ฒ ๋ถํฐ ํ์
- forground process ์ ๊ฒฝ ํ๋ก์ธ์ค: ์ฌ์ฉ์ ํ๋ฉด์ ๋ณด์ด๋ ํ๋ก์ธ์ค
- visible process ๊ฐ์์ ํ๋ก์ธ์ค: ์ ๊ฒฝ ํ๋ก์ธ์ค๊ฐ ์ฐธ์กฐํ๋ ํ๋
- service process ์๋น์ค ํ๋ก์ธ์ค: ์ฌ์ฉ์๊ฐ ์ธ์งํ๋ ๋ฐฑ๊ทธ๋ผ์ด๋ (์์
์ฌ์....)
- background process ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค: ํ๋ ์ํ but ์ฌ์ฉ์ ์ธ์ง X
- empty process ๋น ํ๋ก์ธ์ค: ํ์ฑ ๊ตฌ์ฑ์์ X
- 5โ1 ์์๋ก ์ข
๋ฃ ์ํด
3.4 Interprocess Communication
- ๋
๋ฆฝ์ ํ๋ก์ธ์ค independent process
- ํ๋ ฅ์ ํ๋ก์ธ์ค cooperative process
- ์ํฅ ์ฃผ๊ณ ๋ฐ์
- information sharing: ๋์ผํ ์ ๋ณด ํ์๋ก ํ ์ ์์ (๋ณต๋ถ)
- computation speedup ๊ณ์ฐ ๊ฐ์ํ: ์๋ธํ์คํฌ๋ก ๋๋ ๋ณ๋ ฌ ์คํ (๋ฉํฐ์ฝ์ด)
- moularity ๋ชจ๋์ฑ: ์ฌ๋ฌ ํ๋ก์ธ์ค, ์ค๋ ๋๋ก ๋ชจ๋ ๊ตฌ์ฑ ํ ์ ์์
IPC, InterProcess Communication ํ๋ก์ธ์ค ๊ฐ ํต์
- Shared memory ๊ณต์ ๋ฉ๋ชจ๋ฆฌ
- ํต์ ์์คํ
์ฝ ์ด์ฉ โ ์ค๋ฒํค๋ ์ ์ด ๋น ๋ฆ
- ๊ตฌ์ถ ์์๋ง ์์คํ
์ฝ ํ์
- message passing ๋ฉ์ธ์ง ์ ๋ฌ
- ์ถฉ๋ X
- ์ ์ ์ ๋ฐ์ดํฐ ๊ตํ
- ๋ถ์ฐ ์์คํ
์์ ์ ๋ฆฌ
- ๋ ๋ค ๊ตฌํ๋ os๊ฐ ์ผ๋ฐ์
3.5 IPC in Shared-Memory Sys.
- ํ๋ก์ธ์ค๊ฐ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ ๊ตฌ์ถ
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์ธ๊ทธ๋จผํธ ์์ฑํ๋ ํ๋ก์ธ์ค์ ์ฃผ์ ๊ณต๊ฐ์ ์์น โ ๊ณต์ ํ๊ณ ์ถ์ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ค์ด ์ด ์ธ๊ทธ๋จผํธ๋ฅผ ์ฃผ์ ๊ณต๊ฐ์ ์ถ๊ฐ
- ๋์ผํ ์์น์ write ํ์ง ์๋๋ก ์ฑ
์ ์ ธ์ผ ํจ
- ํ๋ ฅํ๋ ํ๋ก์ธ์ค
- ์์ฐ์-์๋น์ ๋ฌธ์
- ex) ์ปดํ์ผ๋ฌ: ์ด์
๋ธ๋ฆฌ ์ฝ๋ ์์ฐ / ์ด์
๋ธ๋ฌ: ์๋น
- ๊ณต์ ๋ฉ๋ชจ๋ฆฌ โ ์์ฐํ ๊ฒ ๋ฐ๋ก ์๋น (๋๊ธฐํ ์ค์)
- ๋ฒํผ
- ๋ฌดํ ๋ฒํผ unbounded buffer
- ๋ฌดํํ ์์ฐํ๊ณ ์๋น ๊ฐ๋ฅ
- ์ ํ ๋ฒํผ bounded buffer
- ๊ณต๊ฐ ๋ถ์กฑํ๋ฉด ์์ฐ ์ ์ง, ๊ณต๊ฐ ๋น๋ฉด ์๋น ์ ์ง
- ๋๊ธฐํ, ํจ์จ์ ๊ตฌํ โ ๋ชจ๋ํฐ, ๋กํน ๋ฑ๋ฑ ๋์ค์ ๋์ด
3.6 IPC in Message-Passing Sys
- ๋คํธ์ํฌ ๊ธฐ๋ฐ ๋ถ์ฐํ๊ฒฝ์์ ํนํ๋ ์ ์ฉํจ
- msg: ๊ณ ์ ๊ธธ์ด / ๊ฐ๋ณ๊ธธ์ด
- Communication link ํต์ ์ฐ๊ฒฐ ์ค์ โ ํต์ ๊ฐ๋ฅ
- ์ง์ or ๊ฐ์ ํต์
- sync or async ํต์
- ์๋ or ๋ช
์์ ๋ฒํผ๋ง
3.6.1 Naming
- ์ง์ ํต์
- ์๋ก์ ์ด๋ฆ ๋ช
์
- ๋ ํ๋ก์ธ์ค ์ ์ฌ์ด ํ๋์ ์ฐ๊ฒฐ โ ๋์นญ์ฑ
- ๋จ์
- ๋ชจ๋์ฑ ์ ํ
- ํ๋ ์ฝ๋ฉ ๊ธฐ๋ฒ
- ๊ฐ์ ํต์
- mailbox, port๋ก ์ก์
- ๊ณต์ ๋ฉ์ผ๋ฐ์ค โ ๊ณต์ ํ๋ ํ๋ก์ธ์ค๋ผ๋ฆฌ ํต์ (๋ ๊ฐ ์ด์)
- ํ ํ๋ก์ธ์ค๊ฐ ์ฌ๋ฌ ์ฐ๊ฒฐ ๊ฐ์ ์ ์์
- receive()์ ์ ์ฑ
์ ๋ฐ๋ผ ๋ค์ํจ (FIFO, RR...)
- ํ๋ก์ธ์ค๊ฐ ์์ ํ ๋ฉ์ผ ๋ฐ์ค
- ํ๋ก์ธ์ค ์ข
๋ฃ์ ์ฌ๋ผ์ง
- ์ฌ๋ผ์ง ๋ฉ์ผ ๋ฐ์ค์ send() โ ์กด์ฌํ์ง ์๋๋ค ์๋ ค์ค์ผํจ
- OS๊ฐ ์์ ํ ๋ฉ์ผ ๋ฐ์ค
- ์์คํ
์ฝ๋ก ์์ ๊ถ, ์์ ํน๊ถ ์ ํด์ง
- ์์ฑํ๊ฑฐ๋ ์ญ์ ํ ์ ์์
3.6.2 Synchronization
- send(), receive() ๊ตฌํํ๋ ์ค๊ณ ์ต์
- blocking ๋ด์ํ โ Sync
- ๋ณด๋ด๊ธฐ: ์์ ๋ ๋๊น์ง ๋ฉ์ผํจ ๋ด์
- ๋ฐ๊ธฐ: ๋ฉ์ธ์ง ์ด์ฉ ๊ฐ๋ฅํ ๋๊น์ง ์์ ํ๋ก์ธ์ค ๋ด์
- nonblocking ๋น๋ด์ํ โ async
- ๋ณด๋ด๊ธฐ: ๋ฉ์ธ์ง ๋ณด๋ด๊ณ , ์์
์ฌ์์
- ๋ฐ๊ธฐ: ์ ํจํ msg ๋๋ null ๋ฐ์
- ๋๋ฐ๋ถ rendezvous
- send(), recieve() ๋ชจ๋ blcoking ์ผ ๋
- ๋๋ค blocking์ด๋ผ์ ๋ฉ์ธ์ง๋ฅผ ๋ณด๋ด๊ณ ๋๋๋๊ฒ ์๋๋ผ ๊ธฐ๋ค๋ ค์ผ๋ง ํจ ์๋ก.
3.6.3 Buffering
- ๋ฉ์ธ์ง ํ ๊ตฌํ ๋ฐฉ์
- zero capcity ๋ฌด์ฉ๋
- ํ์ ๊ธธ์ด๊ฐ 0
- ๋๊ธฐํ๋ ๋ฉ์ธ์ง ์์.
- ๋ฐ๋ก๋ฐ๋ก
- bounded capacity ์ ํ ์ฉ๋
- ๊ธธ์ด n
- ํ๊ฐ ๋ง์์ด๋ฉด, ๊ณต๊ฐ ์ด์ฉ์ด ๊ฐ๋ฅํ ๋ ๊น์ง block
- unbounded capacity ๋ฌดํ ์ฉ๋
- ์ ์ฌ์ ๋ฌดํํ ๊ธธ์ด
- never blocked
3.7 Examples of IP Sys.
3.7.1 POSIX Shared Memory
3.7.2 Mach Msg. Passing
3.7.3 Windows
3.7.4 Pipes
- ๋ ํ๋ก์ธ์ค๊ฐ ํต์ ํ ์ ์๋ ์ ๋ฌ์
- ๋ฌธ์
- ๋จ๋ฐฉํฅ or ์๋ฐฉํฅ
- ์๋ฐฉํฅ ์ด๋ผ๋ฉด, half duplex ๋๋ full duplex
- full์ ๊ฒฝ์ฐ, ๋์์ ์๋ฐฉํฅ
- ๋ถ๋ชจ-์์ ๊ฐ์ ํน์ ๊ด๊ณ๊ฐ ์กด์ฌํ๋๊ฐ
- ๋คํธ์ํฌ or ๊ฐ์ ๊ธฐ๊ณ ์
ls | less
// ls ๋ช
๋ น์ด๋ก๋ ๋ชจ๋ ํ์ผ ๋ชฉ๋ก์ด ๋ค ๋ณด์
// less ๋ช
๋ น์ด ํตํด ํ๋์ฉ ๋ณด๋ฉฐ ๋ฐฉํฅํค๋ก ์ด๋ ๊ฐ๋ฅ
// ls๊ฐ ์์ฐ์๋ก์จ ํ์ผ ๋ชฉ๋ก์ ๋ง๋ค๊ณ , less๊ฐ ์๋นํ๋ **ํ์ดํ** ํ
1. Ordinary Pipes
- ์์ฐ์-์๋น์ ํํ
- ์์ฐ์: ์ฐ๊ธฐ ์ข
๋จ, ์๋น์: ์ฝ๊ธฐ ์ข
๋จ โ ๋จ๋ฐฉํฅ ํต์ only โ ์๋ฐฉํฅ ํ๊ณ ์ถ์ผ๋ฉด ํ์ดํ ๋๊ฐ
- ํ์ดํ ์์ฑํ ํ๋ก์ธ์ค๋ง ์ ๊ทผ ๊ฐ๋ฅ
- ๋ถ๋ชจ-์์
- fd[0]์ ๋ถ๋ชจ๊ฐ ์ฐ๋ฉด, fd[1]๋ก ์์์ด ์ฝ๊ณ , ์์์ด fd[0]์ ์ฐ๋ฉด ๋ถ๋ชจ๊ฐ fd[1]๋ก ์ฝ์
2. Named Pipes ์ง๋ช
ํ์ดํ
- ์๋ฐฉํฅ, half duplex
- ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ์ง๋ช
ํ์ดํ ์ด์ฉ ๊ฐ๋ฅ
- ํ ๊ธฐ๊ณ ๋ด์์ ํต์
- ๋คํธ์ํฌ๋ ์์ผ ํ์
3.8 Communication in Client-Server Sys
3.8.1 Socket
- ํต์ ์ endpoint
- IP ์ฃผ์ + port #
- ํด๋ผ์ด์ธํธ๊ฐ ์ฐ๊ฒฐ ์์ฒญ โ ํธ์คํธ๊ฐ ํฌํธ ๋ฒํธ ๋ถ์ฌ โ ํด๋ผ์ด์ธํธ๊ฐ ํธ์คํธ๊ฐ listen ํ๊ณ ์๋ ํฌํธ๋ก ํจํท ์ ์ก
- ๋ชจ๋ ์ฐ๊ฒฐ์ด ์ ์ผ โ ๋์ผ ํด๋ผ์ด์ธํธ์ ํธ์คํธ, ๋ ์ฐ๊ฒฐ โ ๋ค๋ฅธ port#
- ๋ฃจํ๋ฐฑ loopback
- 127.0.0.1
- ์์ ๊ธฐ๊ณ ์ง์นญ
3.8.2 Remote Procedure Call, RPC
- ๋คํธ์ํฌ ์ฐ๊ฒฐ๋ ๋ ์์คํ
์ฌ์ด ํต์
- ํ๋ก์์ ํธ์ถ ๊ธฐ๋ฒ์ ์ถ์ํ
- ๋ฉ์ธ์ง ๊ธฐ๋ฐ IPC
- ํฌํธ์ ํด๋น ๋ฉ์ธ์ง๋ฅผ ์ฒ๋ฆฌํ๋ ๋๋จผ์ ์ฃผ์๊ฐ ์ ์ฅ๋จ โ ํด๋น ํฌํธ๋ก ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญ ๋ณด๋ โ ํจ์ ์คํ(๋งค๊ฐ๋ณ์ ๊ฐ์ง)๋๊ณ ์๋ต ๋ฉ์ธ์ง return
- ํฌํธ: ์๋น์ค๋ง๋ค ํฌํธ๊ฐ ์ง์ ๋์ด์์
- Stub ์คํ
- ์๋์ฐ MIDL Microsoft Interface Definition Language
- ํต์ ์ ํ์ํ ์์ธํ ์ฌํญ ์จ๊ฒจ์ค
- ํด๋ผ์ด์ธํธ์ ์๋ฒ ๋ชจ๋ ๊ฐ์ง โ ์์ธก์์ ํ์ํ ์ผ ์ฒ๋ฆฌํด ์ค
- marshall ์ ๋
- big endian๊ณผ small endian์ ์ฐจ์ด ๊ทน๋ณตํ๊ฒ ์ ๋ํด์ค
- XDR external dara representation ์ค๋ฆฝ์ ๋ฐ์ดํฐ ํํ ๋ฐฉ์
- ํด๋ผ์ด์ธํธ ๋น
์ธ๋์ โ ์คํ
โ XDR โ ์คํ
โ ์๋ฒ ์ค๋ชฐ์ธ๋์ ๊ฐ๋ฅํด์ง!
- ๋คํธ์ํฌ ์ค๋ฅ โ ๋ฉ์ธ์ง ์ ๋ฌ ํ์ธ ์ด๋ ค์ โ Ack ์ด์ฉ
- ๋ฐ์ธ๋ฉ
- ๊ณ ์ ํฌํธ ์ฃผ์
- ๋๋ฐ๋ถ ๋์ ๋ฐ์ธ๋ฉ
- ๋๋ฐ๋ถ์ฉ ๋๋จผ matchmaker
- RPC ์ด๋ฆ์ matchmaker์๊ฒ ๋ณด๋ โ ํฌํธ ๋ฒํธ ์๋ ค์ค โ RPC์๊ฒ ์์ฒญ ๋ณด๋
- ์ด๊ธฐ ์ค๋ฒํค๋๊ฐ ์์ผ๋ ๊ณ ์ ๋ณด๋ค ์ ์ฐํจ