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

Process Concept

(history)
Table of Contents

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

+---------------+ max
|     stack     | 
+-------+-------+
|       |       |
|       v       |
|               |
|       ^       |
|       |       |
+-------+-------+
|     heap      |
+---------------+
|     data      |
+---------------+
|     text      |
+---------------+ 0

Process State

ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋Š” ํ˜„์žฌ ํ™œ๋™์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค.

                         +------------interrupt------------+
                         v                                 |
+-----+              +-------+                        +----+----+          +------------+
| new +---admitted-->| ready +---scheduler dispatch-->| running +---exit-->| terminated |
+-----+              +-------+                        +----+----+          +------------+
                         ^           +---------+           |
                         +-----------+ waiting |<----------+
         I/O or event completion     +---------+     I/O or event wait
  • New: ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฒ˜์Œ ์ƒ์„ฑ๋˜์—ˆ์„ ๋•Œ.
  • Ready: ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ”„๋กœ์„ธ์„œ์— ํ• ๋‹น๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆด ๋•Œ.
  • Running: ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋˜์–ด ์‹คํ–‰๋  ๋•Œ.
  • Waiting: ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ๊ธฐ๋‹ค๋ฆด ๋•Œ.
  • Terminated: ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰์„ ๋งˆ์ณค์„ ๋•Œ.

Process Control Block (PCB)

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

  • Process state: ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ.
  • Program counter: ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ด์–ด์„œ ์‹คํ–‰ํ•ด์•ผ ํ•  ๋ช…๋ น์˜ ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์นด์šดํ„ฐ.
  • CPU registers: ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ธํ„ฐ๋ŸฝํŠธ ์ดํ›„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ž‘์—…์„ ์ด์–ด๊ฐ€๊ธฐ ์œ„ํ•ด ์ฐธ์กฐํ•˜๋Š” CPU ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’.
  • CPU-scheduling information: ํ”„๋กœ์„ธ์Šค์˜ ์ค‘์š”๋„, ์Šค์ผ€์ค„๋ง ํ ํฌ์ธํ„ฐ ๋“ฑ ์Šค์ผ€์ค„๋ง ํŒŒ๋ผ๋ฏธํ„ฐ ์ •๋ณด.
  • Memory-management information: base, limit ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’, ํŽ˜์ด์ง€ ํ…Œ์ด๋ธ” ๋“ฑ ๋ฉ”๋ชจ๋ฆฌ ์‹œ์Šคํ…œ ์ •๋ณด.
  • Accounting information: ์‚ฌ์šฉ๋œ CPU ์ด๋Ÿ‰, ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜, ์‹œ๊ฐ„ ์ œํ•œ ๋“ฑ.
  • I/O status information: ํ”„๋กœ์„ธ์Šค์— ํ• ๋‹น๋œ ์ž…์ถœ๋ ฅ ์žฅ์น˜ ๋ชฉ๋ก, ์—ด๋ฆฐ ํŒŒ์ผ ๋ชฉ๋ก ๋“ฑ.

Threads

ํ”„๋กœ์„ธ์Šค๋ฅผ ์ชผ๊ฐœ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ๋™์‹œ์— ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ „์ œํ•˜๊ณ  ์‚ดํŽด๋ดค๋‹ค. ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค๋Š” ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฐ€๋ น ์›Œ๋“œ ํ”„๋กœ์„ธ์„œ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•œ๋‹ค๋ฉด, ๊ธ€์ž๋ฅผ ํƒ€์ดํ•‘ํ•  ๋•Œ ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ๋™์ž‘ํ•˜๋Š” ๋ฌธ๋ฒ• ๊ต์ •๊ธฐ๊ฐ€ ๋™์‹œ์— ๋™์ž‘ํ•  ์ˆ˜ ์—†๋‹ค. ์ฑ•ํ„ฐ 4์—์„œ ์ž์„ธํžˆ ๋‹ค๋ฃฌ๋‹ค.

Process Scheduling

๋ฉ€ํ‹ฐํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๋ชฉ์ ์€ CPU๋ฅผ ์ตœ๋Œ€๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ•ญ์ƒ ์ผ๋ถ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ํƒ€์ž„์‰์–ด๋ง์˜ ๋ชฉ์ ์€ ํ”„๋กœ์„ธ์Šค ๊ฐ„์— CPU๋ฅผ ์ž์ฃผ ์ „ํ™˜ํ•จ์œผ๋กœ์จ ์‚ฌ์šฉ์ž๊ฐ€ ๊ฐ ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ์„œ๋กœ ์ƒํ˜ธ์ž‘์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋Ÿฌํ•œ ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ค„๋Ÿฌ๋Š” CPU์—์„œ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์„ ์œ„ํ•ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํƒํ•˜๋ฉฐ, ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ ํ”„๋กœ์„ธ์„œ์— ํ• ๋‹นํ•  ๊ฒƒ์ธ๊ฐ€ ๊ฒฐ์ •ํ•˜๋Š” ์ผ์„ ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ค„๋ง์ด๋ผ๊ณ  ํ•œ๋‹ค.

Scheduling Queues

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์Šคํ…œ์— ๋“ค์–ด์˜ค๋ฉด ์žก ํ(Job queue)์— ๋“ค์–ด๊ฐ„๋‹ค. ์žก ํ๋Š” ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค. ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์‹คํ–‰์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ready ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์€ ๋ ˆ๋”” ํ(Ready queue)์— ์Œ“์ธ๋‹ค. ์ž…์ถœ๋ ฅ ์žฅ์น˜๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค๋“ค์€ ๋””๋ฐ”์ด์Šค ํ(Device queue)๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

Schedulers

๋ ˆ๋”” ํ์— ํ”„๋กœ์„ธ์Šค๋ฅผ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์€ ์žก ์Šค์ผ€์ค„๋Ÿฌ, ๋˜๋Š” Long-term ์Šค์ผ€์ค„๋Ÿฌ๋ผ๊ณ  ํ•œ๋‹ค. ํ”„๋กœ์„ธ์Šค๋ฅผ ํ”„๋กœ์„ธ์„œ์— ํ• ๋‹นํ•˜๋Š” ๊ฒƒ์€ CPU ์Šค์ผ€์ค„๋Ÿฌ, ๋˜๋Š” Short-term ์Šค์ผ€์ค„๋Ÿฌ๋ผ๊ณ  ํ•œ๋‹ค. Long-term ์Šค์ผ€์ค„๋Ÿฌ๋Š” CPU ๋ฐ–์—์„œ ๊ฐ€๋” ์ˆ˜ํ–‰๋œ๋‹ค. Short-term ์Šค์ผ€์ค„๋Ÿฌ๋Š” ๊ทธ ๋ฐ˜๋Œ€๋‹ค.

Context Switch

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

Operations on Processes

๋Œ€๋ถ€๋ถ„์˜ ์‹œ์Šคํ…œ์—์„œ ํ”„๋กœ์„ธ์Šค๋Š” ๋™์‹œ์— ์‹คํ–‰๋  ์ˆ˜ ์žˆ๊ณ , ์ด๋“ค์€ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ์‚ญ์ œ๋  ์ˆ˜ ์žˆ๋‹ค. ์‹œ์Šคํ…œ์€ ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ, ์‚ญ์ œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค.

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๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๊ผญ ๋ถ€๋ชจ-์ž์‹ ๊ด€๊ณ„๊ฐ€ ์•„๋‹ˆ๋”๋ผ๋„ ํŒŒ์ดํ”„๋ฅผ ์ด์šฉํ•ด ํ†ต์‹ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๏ผœ

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

Multithreaded Programming

๏ผž

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

System Structures

๐Ÿ“š