[OS] Processes
Process
Process -> program in execution ์คํ์ค์ธ ํ๋ก๊ทธ๋จ์ ์๋ฏธํ๋ค.
process์ ์ํ๋ Program counter์ contents of processor's registers ์ ์ํด ํ์ธ๋๋ค.
process memory layout
text section : ์คํ๊ฐ๋ฅํ ์ฝ๋
data section : ์ ์ญ๋ณ์
heap section : ๋ฐํ์๋์ ๋์ ์ผ๋ก ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ
stack section : ํจ์ ํธ์ถ์์ ์์ ๋ฐ์ดํฐ ์ ์ฅ
text, data section์ ์ฌ์ด์ฆ๋ ๊ณ ์ ๋์ด์๋ค.
ํ์ง๋ง stack, heap section์ ์ฌ์ด์ฆ๋ ํ๋ก๊ทธ๋จ ์คํ์ค ๊ณ์ ๋์ด๋ ์ ์๋ค.
stack section์ ๊ฒฝ์ฐ ํจ์ ์ธ์, ์ง์ญ๋ณ์, ret address๊ฐ stack์ push๋๊ณ , ํจ์์์์ ์ ์ด๊ฐ ๋๋ ํ์ ๋ค์ pop๋๋ค.
heap๋ ๋ง์ฐฌ๊ฐ์ง๋ก ๋ฐํ์ ์์ ๋์ ์ผ๋ก ๋ฉ๋ชจ๋ฆฌ๊ฐ ํ ๋น๋๊ณ , ํด์ ๋๋ค.
OS์์๋ ์๋ก๋ฅผ ํฅํด์ ์๋ผ๋๋ stack, heap์ด ์๋ก๋ฅผ overlap ํ์ง ์๋๋ก ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
Process state
๋๋ต์ ์ธ ํ๋ก์ธ์ค์ ์ํ์ด๋ค.
ํ๋์ processor core์ ํ๋์ process๋ง running์ํ๊ฐ ๋ ์ ์๋ค๋ ๊ฒ์ ์์์ผ ํ๋ค.
Process Control Block
๊ฐ๊ฐ์ ํ๋ก์ธ์ค๋ OS ์์ PCB๋ฅผ ํตํด ๋ํ๋ด์ง๋ค. (์ด์์ฒด์ ์์ process์ ์ ๋ณด๋ฅผ ๋ํ๋ด๊ธฐ ์ํ ์๋ฃ๊ตฌ์กฐ. ๋ณ๋์ ์ฅ)
๊ฐ ํ๋ก์ธ์ค๊ฐ ์์ฑ๋ ๋ PCB๊ฐ ์์ฑ๋๊ณ , ์ข ๋ฃ์ ์ ๊ฑฐ๋๋ค.
ํ์ฌ ํ๋ก์ธ์ค์ ์ํ, ํ๋ก์ธ์ค์์ ๋ค์์ ์คํํ ๋ช ๋ น์ด์ ์ฃผ์, CPU registers ๋ฑ๋ฑ์ ๊ดํ ์ ๋ณด๊ฐ ํฌํจ๋๋ค.
Process Scheduling
multiprogramming์ ๋ชฉ์ ์ maximize CPU utilization์ด๊ณ , time sharing์ ๋ชฉ์ ์ CPU core๋ฅผ ์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ ๋น ๋ฅด๊ฒ ๊ต์ฒดํ ์์๋๋ก ํ์ฌ ์ํธ์์ฉ ํ๋๋ก ํ๋๊ฒ์ด๋ค.
I/O bound, CPU bound process์ ๋ฐ๋ผ ์ด๋ฅผ ์ scheduling ํด์ผํ๋ค.
Scheduling Queues
ํ๋ก์ธ์ค๊ฐ ์์คํ ์ ์ฒ์ ๋ค์ด๊ฐ๋ฉด, Ready Queue์ ๋ค์ด๊ฐ๊ฒ ๋๋ค.
CPU core์์ ์คํ์ค์ธ ํ๋ก์ธ์ค๊ฐ ์ฌ๋ฌ๊ฐ์ง ์ด์ ๋ก ๋๊ธฐ์ํฉ์ ๋ค์ด๊ฐ๊ฒ ๋๋ฉด Wait Queue์ ๋ค์ด๊ฐ๋ค.
Context Switch
Interrupt๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค๋ฉด, CPU core์์ ํ์ฌ ์์ ์ค์ธ ๋ด์ฉ์ด ๋ฐ๋๊ณ kernel routine์ ์คํํ๋ค. ๊ทธ ๊ฒฝ์ฐ, ์ด์ ์์ ๋ด์ฉ์ ๋ค์ ์คํํ๊ธฐ ์ํด ์ด์ ์์ ์ ์คํ์ ๋ณด, ์ฆ PCB๋ฅผ ์ ์ฅํ๊ณ ๋ค๋ฅธ PCB๋ฅผ ๊ฐ์ ธ์ ์คํํ๋ ๊ณผ์ ์ ๊ฑฐ์ณ์ผํ๋ค.
์ด๋ฌํ ์ผ๋ จ์ ๊ณผ์ ์ด Context Switch์ด๋ค.
Context Switch overhead๋ ์ํฉ์ ๋ฐ๋ผ ๋งค์ฐ ๋ค๋ฅด๊ณ , ์ฃผ๋ก hardware์ ๊ด๋ จ์๋ค.
Process Creation
ํ๋ก์ธ์ค๋ ์ ์ํ์ pid๋ก ๊ตฌ๋ถ๋๊ณ , ์์ ํ๋ก์ธ์ค์ ๋ถ๋ชจ ํ๋ก์ธ์ค๋ก ๋์ด์๋ค.
UNIX์์๋ init process๊ฐ pid 1์ธ root process๊ฐ ๋๊ณ , LINUX์์๋ systemd๊ฐ root process๊ฐ ๋๋ค.
ํ๋ก์ธ์ค๊ฐ ๋ค๋ฅธ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ ๋, ๋ถ๋ชจ ํ๋ก์ธ์ค๋
1. ์์๊ณผ ํจ๊ป ๋์์ ์คํ๋ ์ ์๋ค
2. ์์์ด ์ ๊ฑฐ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ๋ค
๊ทธ๋ฆฌ๊ณ ์์ ํ๋ก์ธ์ค๋
1. ๋ถ๋ชจ ํ๋ก์ธ์ค์ ๋ณต์ ๋ณธ์ด ๋ ์ ์๋ค.
2. ์์ ํ ์๋ก์ด ํ๋ก๊ทธ๋จ์ ๊ฐ์ง๊ณ ์จ๋ค
C์์ fork()๋ฅผ ํตํด ์์ ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ฉด, ๋๊ฐ์ ๋ด์ฉ์ ๊ฐ์ง๊ณ fork() ์ดํ ์์ ๋ถํฐ ์คํ๋๋ ์์ํ๋ก์ธ์ค๋ฅผ ์์ฑํ๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ fork()์ดํ์ pid์ ์ ์ฅ๋ ๊ฐ์ด 0์ด๋ฉด ์์, 0๋ณด๋ค ํฌ๋ฉด ๋ถ๋ชจ๋ก ์ธ์งํ๋ค.
๋ง์ฝ exec()๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด, ํด๋น ํ๋ก์ธ์ค์ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ด exec()์ ํด๋นํ๋ ์๋ก์ด ํ๋ก์ธ์ค๋ก ์์ ํ ๋ฎ์ด์์์ง๋ค. ๊ทธ๋ฌ๋ฏ๋ก exec()๋ค์ ๊ตฌ๋ฌธ์ ์คํ๋์ง ์๋๋ค.
Process Termination
Process๋ exit()์ ํตํด ์ผ์ ๋ง์น๊ณ ์ข ๋ฃ๋๋ค. ์ด๋ฅผ ํตํด ํ ๋น๋ ๋ฉ๋ชจ๋ฆฌ๊ฐ ํด์ ๋๊ณ , ๋ถ๋ชจ ํ๋ก์ธ์ค๊ฐ status value๋ฅผ return ๋ฐ๋๋ก ํ๋ค.
๋ถ๋ชจ ํ๋ก์ธ์ค๋ ์์ ํ๋ก์ธ์ค๋ฅผ ์ข ๋ฃํ๊ธฐ ์ํด์ identities๋ฅผ ๊ฐ์ง๊ณ ์์ด์ผ ํ๋ค.
๋ถ๋ชจํ๋ก์ธ์ค์ ์์ ํ๋ก์ธ์ค ๊ฐ์ wait()๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐ์ฌ์ง์ง ์์ ๊ฒฝ์ฐ zombie, orphan์ด ์๊ธธ ์ ์๋ค.
IPC
์ฌ๋ฌ ํ๋ก์ธ์ค๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ๊ธฐ ์ํด์๋ ํฌ๊ฒ Shared memory, Message-passing System์ผ๋ก ๋๋๋ค.
Shared Memory
๋ค๋ฅธ ํ๋ก์ธ์ค๋ ๋ค๋ฅธ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ฐ์ง๊ฒ ๋๋๋ฐ, ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ์ ์๋ ๊ณต๊ฐ์ ๋ง๋ค์ด ์ฃผ๋ ๊ฒ ์ด๋ค.
Producer-Consumer์ ๊ฐ์ ๊ณต์ ์์ ๊ด๋ จ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผํ๋ค.
Message-passing System
message-queue๋ฅผ ํตํด ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์์ด๋ค.
Synchronize
Sender์ Receiver ๊ฐ์ ๋๊ธฐํ ๋ฌธ์ ๊ฐ ์์ ์ด ๋๋ค.
blocking send : ์์ ์๊ฐ ๋ฉ์์ง๋ฅผ ๋ฐ์ ๋ ๊น์ง sender๊ฐ blocked๋๋ค.
Nonblocking send : ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ , ๋ค์ ํ๋์ ํ๋ค.
blocking receive : ๋ฉ์์ง๊ฐ ์์ ๋ ๋ ๊น์ง blocked๋๋ค.
Nonblocking receive : message๋ฅผ ๊ฐ์ ธ์ค๋๊ฐ, null์ ๊ฐ์ ธ์ค๊ณ ๋ค์ ํ๋์ ํ๋ค.
Buffering
๋ฉ์์ง๋ ์์์ ์ธ ๋ฒํผ์ ๋ค์ด๊ฐ๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ฒํผ(ํ)๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌํ๋๋ค.
Zero capacity : queue์ ์ฌ์ด์ฆ๊ฐ 0์ด๋ผ, ๋ฉ์ธ์ง๋ ๋๊ธฐํ ์ ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก sender๋ receiver๊ฐ ๋ฉ์ธ์ง๋ฅผ ๋ฐ์๋ ๊น์ง ๋ฌด์กฐ๊ฑด block๋์ด์ผ ํ๋ค.
Bounded capacity : ํน์ N๋งํผ์ ์ฌ์ด์ฆ๊ฐ queue์ ํ ๋น ๋ ๊ฒฝ์ฐ, ์ฌ์ด์ฆ๊ฐ ๊ฐ๋ ์ฐจ๊ฒ ๋๋ค๋ฉด sender๊ฐ block๋์ด์ผ ํ๋ค.
Unbounded capacity : queue์ ์ฌ์ด์ฆ๊ฐ ์ ํด์ ธ ์์ง ์๋ค. ๊ทธ๋ฌ๋ฏ๋ก sender๋ block๋ ํ์๊ฐ ์๋ค.