๐Ÿฆ• ๊ณต๋ฃก์ฑ…์œผ๋กœ ์ •๋ฆฌํ•˜๋Š” ์šด์˜์ฒด์ œ Ch.3

Process Concept

๋ณธ๊ฒฉ์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•ด์„œ ๋‹ค๋ฃจ๊ธฐ ์‹œ์ž‘ํ•œ๋‹ค. Ch.1 Overview์—์„œ ๋‚˜์™”๋“ฏ์ด ๋””์Šคํฌ์— ์žˆ๋Š” ๊ฒƒ์€ ํ”„๋กœ๊ทธ๋žจ, ๋ฉ”๋ชจ๋ฆฌ์— ๋กœ๋“œ๋œ ๊ฒƒ์€ ํ”„๋กœ์„ธ์Šค๋ผ๊ณ  ํ•œ๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” Stack, Heap, Data, Code๋กœ ๋‚˜๋‰œ๋‹ค.

Process State

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฒ˜์Œ ์ƒ์„ฑ๋์„ ๋•Œ๋Š” new, ํ”„๋กœ์„ธ์„œ์—๊ฒŒ ํ• ๋‹น๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆด ๋•Œ๋Š” ready, ํ”„๋กœ์„ธ์„œ์— ํ• ๋‹น๋˜์–ด ์‹คํ–‰๋  ๋•Œ๋Š” running, ์‹คํ–‰ ์ค‘ ์ข…๋ฃŒ๋  ๋•Œ๋Š” terminated, ์‹คํ–‰ ์ค‘ ์ž‘์—…์ด ์™„๋ฃŒ๋˜์–ด ์ž…์ถœ๋ ฅ์„ ๊ธฐ๋‹ค๋ฆด ๋•Œ๋Š” waiting ์ƒํƒœ๋ฅผ ๊ฐ–๋Š”๋‹ค.

Process Control Block (PCB)

๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค๋Š” ์ž์‹ ์˜ ์ •๋ณด ๋ฌถ์Œ์ธ PCB๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. PCB์—๋Š” ํ”„๋กœ์„ธ์Šค ์ƒํƒœ์™€ ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ, ๋ฉ”๋ชจ๋ฆฌ ํ•œ๊ณ„, ๋ ˆ์ง€์Šคํ„ฐ ์ •๋ณด ๋“ฑ์ด ๋‹ด๊ฒจ์žˆ๋‹ค.

CPU Switch

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๋‹ค๊ฐ€ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•ด ์šด์˜์ฒด์ œ๊ฐ€ ๊ฐœ์ž…ํ•˜์—ฌ ํ”„๋กœ์„ธ์„œ์— ํ• ๋‹น๋œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฐ”๊พธ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์‹œ์Šคํ…œ ์ฝœ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์šด์˜์ฒด์ œ๊ฐ€ ๊ฐœ์ž…ํ•ด์•ผ ํ•œ๋‹ค. CPU ์Šค์œ„์นญ์„ ํ•  ๋•Œ๋Š” ์ž‘์—…์ค‘์ด๋˜ ํ”„๋กœ์„ธ์Šค์˜ PCB๋ฅผ ๋ฐฑ์—…ํ•œ๋‹ค.

Threads

ํ”„๋กœ์„ธ์Šค๋ฅผ ์ชผ๊ฐœ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ๋™์‹œ์— ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฑ•ํ„ฐ5์—์„œ ์ž์„ธํžˆ ๋‹ค๋ฃฌ๋‹ค.

Process Scheduling

์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ ํ”„๋กœ์„ธ์„œ์— ํ• ๋‹นํ•  ๊ฒƒ์ธ๊ฐ€ ๊ฒฐ์ •ํ•˜๋Š” ์ผ์„ ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ค„๋ง์ด๋ผ๊ณ  ํ•œ๋‹ค. ์Šค์ผ€์ค„๋Ÿฌ์—๋Š” ready ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์„œ๊ฐ€ ์Œ“์—ฌ ์žˆ๋Š” ๋ ˆ๋”” ํ(Ready queue)์— ํ”„๋กœ์„ธ์Šค๋ฅผ ์˜ฎ๊ธฐ๋Š” Long-term ์Šค์ผ€์ค„๋Ÿฌ์™€ ํ”„๋กœ์„ธ์Šค๋ฅผ ํ”„๋กœ์„ธ์„œ์— ํ• ๋‹นํ•˜๋Š” Short-term scheduler๊ฐ€ ์žˆ๋‹ค. Long-term ์Šค์ผ€์ค„๋Ÿฌ๋Š” CPU ๋ฐ–์—์„œ ์ž‘์—…ํ•˜๋ฉฐ, ๊ฐ€๋” ์ˆ˜ํ–‰๋œ๋‹ค. Short-term ์Šค์ผ€์ค„๋Ÿฌ๋Š” ๊ทธ ๋ฐ˜๋Œ€๋‹ค.

Context Switch

ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ์Šค์œ„์น˜ํ•  ๋•Œ, ์‹œ์Šคํ…œ์€ ์ž‘์—…์ค‘์ด๋˜ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ๋กœ๋“œํ•œ๋‹ค. ์ด๊ฒƒ์„ ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜๋ผ๊ณ  ํ•œ๋‹ค. ์ปจํ…์ŠคํŠธ๋Š” ๋งฅ๋ฝ์ด๋ผ๋Š” ๋œป์ธ๋ฐ, ์ปดํ“จํ„ฐ๊ณผํ•™์—์„œ๋Š” ๋‚ด ์‹œ์Šคํ…œ์—์„œ ํ™œ์šฉ ๊ฐ€๋Šฅํ•œ ๋ชจ๋‹ˆํ„ฐ๋ฆญ๋œ ์ •๋ณด๋“ค์„ ์˜๋ฏธํ•œ๋‹ค. ํ”„๋กœ์„ธ์„œ ์ž…์žฅ์—์„œ ์ปจํ…์ŠคํŠธ๋Š” PCB์ด๊ธฐ ๋•Œ๋ฌธ์— PCB ์ •๋ณด๊ฐ€ ๋ฐ”๋€Œ๋Š” ๊ฒƒ์„ ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜๋ผ๊ณ  ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ์ž‘์—…์ด๊ธฐ ๋•Œ๋ฌธ์— ๋„ˆ๋ฌด ์ž์ฃผ ์ผ์–ด๋‚˜๋ฉด ์„ฑ๋Šฅ์„ ์ €ํ•˜ํ•œ๋‹ค.

Process Creation

ํ”„๋กœ์„ธ์Šค๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ๋กœ ๋˜์–ด ์žˆ๋‹ค. ์ฆ‰, ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“ ๋‹ค. PCB์— ์ €์žฅ๋œ pid๊ฐ’์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹๋ณ„ํ•˜๋Š”๋ฐ, ์ด๋Š” ์šด์˜์ฒด์ œ๊ฐ€ ์ •ํ•ด์ค€ ๊ณ ์œ  ๋ฒˆํ˜ธ๋‹ค. ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ์€ ํ”Œ๋ผ๋‚˜๋ฆฌ์•„ ๋ฒˆ์‹๊ณผ ์œ ์‚ฌํ•˜๋‹ค. ์‹œ์Šคํ…œ ์ฝœ์˜ fork() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋Š” ์ž์‹ ๊ณผ ๋˜‘๊ฐ™์€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” exec()๋ฅผ ํ†ตํ•ด ๋‚ด์šฉ์„ ๋ชจ๋‘ ๋ฐ”๊พผ๋‹ค. fork() ํ•จ์ˆ˜๋Š” ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์—๊ฒ ์ž์‹ ํ”„๋กœ์„ธ์Šค์˜ pid๋ฅผ, ์ž์‹ํ”„๋กœ์„ธ์Šค์—๊ฒ 0์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค. ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ๋™์‹œ์— ์ž‘๋™ํ•œ๋‹ค.

Process Termination

exit()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ๋จผ์ € ์ข…๋ฃŒ๋˜๋ฉด ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ๊ทธ ์ƒ์œ„ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋กœ ๋ฐ”๋ผ๋ณธ๋‹ค. ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜์—ˆ๋Š”๋ฐ, ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฐ˜ํ™˜ํ•œ ์ •๋ณด๋ฅผ ํšŒ์ˆ˜ํ•˜์ง€ ์•Š์œผ๋ฉด ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ์ข…๋ฃŒ๋˜์—ˆ์Œ์—๋„ ์ •๋ณด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ๋‚จ์•„ ์žˆ๋Š” ์ข€๋น„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋œ๋‹ค.

Interprocess Communication (IPC)

ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•˜๊ฑฐ๋‚˜ ์„œ๋กœ ํ˜‘๋ ฅํ•˜๋ฉฐ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ˜‘๋ ฅํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์€ ํ†ต์‹ ํ•˜๋ฉฐ ์„œ๋กœ์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค. IPC ๋ชจ๋ธ์—๋Š” ๋ฉ”์‹œ์ง€ ํŒจ์‹ฑ(Message passing)๊ณผ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ(Shared memory)๊ฐ€ ์žˆ๋‹ค.

Message Passing

๋ฉ”์‹œ์ง€ ํŒจ์‹ฑ์€ ์šฐํŽธ์ด๋‹ค. ์†ก์‹  ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ •๋ณด๋ฅผ ๋ฐ›๋Š” ์ˆ˜์‹  ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ปค๋„์„ ํ†ตํ•ด ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๋ฉฐ, ์ˆ˜์‹  ํ”„๋กœ์„ธ์Šค๋„ ์ปค๋„์— ์ ‘๊ทผํ•ด ์ •๋ณด๋ฅผ ์ˆ˜์‹ ํ•œ๋‹ค. ๋ฉ”์‹œ์ง€ ํŒจ์‹ฑ์€ ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋Š๋ฆฌ๋‹ค. ๋‹ค๋งŒ ์ปค๋„์ด ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋ฏ€๋กœ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ ๋ฐฉ์‹์— ๋น„ํ•ด์„  ๊ตฌํ˜„์ด ์‰ฝ๋‹ค.

Shared Memory

๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ๋Š” ๊ฒŒ์‹œํŒ์ด๋‹ค. ํŠน์ • ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๋‘ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉฐ ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š”๋‹ค. ์ปค๋„์„ ๊ฑฐ์น˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ์†๋„๊ฐ€ ๋น ๋ฅด์ง€๋งŒ ๋ฉ”๋ชจ๋ฆฌ์— ๋™์‹œ ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋”ฐ๋กœ ๊ตฌํ˜„์„ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.

Producer-Consumer Problem

ํ˜‘๋ ฅํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ์ค‘ ์ •๋ณด๋ฅผ ์ƒ์‚ฐํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์‚ฐ์ž(Producer), ์ •๋ณด๋ฅผ ์†Œ๋น„ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์†Œ๋น„์ž(Consumer)๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. ์ƒ์‚ฐ์ž-์†Œ๋น„์ž ๋ฌธ์ œ๋Š” ๋‘ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋™์‹œ์— ๋™์ž‘ํ•  ๋•Œ ์ผ์–ด๋‚˜๋Š” ์ด์Šˆ๋ฅผ ๋งํ•œ๋‹ค. ๋ณดํ†ต ์ •๋ณด๊ฐ€ ์ƒ์‚ฐ๋˜๋Š” ์†๋„๊ฐ€ ์†Œ๋น„ํ•˜๋Š” ์†๋„๋ณด๋‹ค ๋น ๋ฅด๊ธฐ ๋•Œ๋ฌธ์— ๋™๊ธฐํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๋ฐ, ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์‚ฐ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์•„๋‘๋Š” ๋ฒ„ํผ(Buffer)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํฌ๊ธฐ์— ํ•œ๊ณ„๊ฐ€ ์žˆ๋Š” ๋ฒ„ํผ๋ฅผ ์œ ํ•œ ๋ฒ„ํผ(Bounded buffer), ๋ฒ„ํผ์˜ ์‹œ์ž‘๊ณผ ๋์„ ์ด์–ด๋ถ™์—ฌ ํฌ๊ธฐ๊ฐ€ ๋ฌดํ•œํ•œ ๋ฒ„ํผ๋ฅผ ๋ฌดํ•œ ๋ฒ„ํผ(Unbounded buffer)๋ผ๊ณ  ํ•œ๋‹ค.

Synchronization

๋ฉ”์‹œ์ง€ ํŒจ์‹ฑ์˜ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด blocking ๋ฐฉ์‹๊ณผ non-blocking ๋ฐฉ์‹์ด ์‚ฌ์šฉ๋œ๋‹ค.

  • Blocking send: ์ˆ˜์‹ ์ž๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์„ ๋•Œ๊นŒ์ง€ ์†ก์‹ ์ž๋Š” block๋œ๋‹ค.
  • Blocking receive: ๋ฉ”์‹œ์ง€๋ฅผ ์ˆ˜์‹ ํ•  ๋•Œ๊นŒ์ง€ ์ˆ˜์‹ ์ž๋Š” block๋œ๋‹ค.
  • Non-blocking send: ์†ก์‹ ์ž๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๊ณ  ์ž‘์—…์„ ๊ณ„์†ํ•œ๋‹ค.
  • None-blocking receive: ์ˆ˜์‹ ์ž๊ฐ€ ์œ ํšจํ•œ ๋ฉ”์‹œ์ง€๋‚˜ Null ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๋Š”๋‹ค.

Sockets

์†Œ์ผ“์€ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. IP์ฃผ์†Œ์™€ ํฌํŠธ ์ •๋ณด๊ฐ€ ์žˆ์œผ๋ฉด ํด๋ผ์ด์–ธํŠธ๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ์„œ๋ฒ„ ํ”„๋กœ์„ธ์Šค์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค. RPC(Remote Procedure Calls)๋Š” ํ”„๋กœ์„ธ์Šค์™€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„คํŠธ์›Œํฌ๋กœ ์ด์–ด์ ธ ์žˆ์„ ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ˜ธ์ถœ์„ ๋งํ•œ๋‹ค. ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ†ต์‹ ํ•  ๋•Œ๋Š” IP์ฃผ์†Œ์™€ ํฌํŠธ๋ฅผ ๋ž˜ํ•‘ํ•ด์„œ Stub์œผ๋กœ ๋งŒ๋“ค์–ด ์ „์†กํ•œ๋‹ค.

Pipes

ํŒŒ์ดํ”„๋Š” ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ†ต์‹ ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์— ํŒŒ์ดํ”„๋ฅผ ๋‘๊ณ  ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ฑด๋ฐ, ํŒŒ์ดํ”„๋Š” ๋‹จ๋ฐฉํ–ฅ ํ†ต์‹ ๋งŒ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์–‘๋ฐฉํ–ฅ์œผ๋กœ ์ •๋ณด๋ฅผ ์ฃผ๊ณ  ๋ฐ›์œผ๋ ค๋ฉด ๋‘ ๊ฐœ์˜ ํŒŒ์ดํ”„๊ฐ€ ํ•„์š”ํ•˜๋‹ค. (ํŒŒ์ดํ”„๋Š” ํŒŒ์ผ์ด๋‹ค.) ํŒŒ์ดํ”„์— ์ด๋ฆ„์„ ๋ถ™์ธ named pipe๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ผญ ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„ ํŒŒ์ดํ”„๋ฅผ ์ด์šฉํ•ด ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.