CS

[OS] Processes

rkawk 2024. 9. 14. 03:12

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 ํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

 

c ํ”„๋กœ๊ทธ๋žจ์—์„œ์˜ memory layout

 

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๋  ํ•„์š”๊ฐ€ ์—†๋‹ค.