๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐ŸŒฑ CS/์šด์˜์ฒด์ œ(OS)

[์šด์˜์ฒด์ œ ๊ณต๋ฃก์ฑ…] Ch 3. Processes

๐Ÿ“ ๊ณต๋ฃก์ฑ… ๊ธฐ๋ฐ˜์œผ๋กœ ํ•™๊ต์—์„œ ์ˆ˜์—…ํ–ˆ๋˜ ์šด์˜์ฒด์ œ๋ฅผ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

1๏ธโƒฃ Process

  • ์ •์˜ : ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ
    • ํ”„๋กœ๊ทธ๋žจ : passive entity, ์‹คํ–‰ํ•˜์ง€ ์•Š์€ ์ƒํƒœ์˜ ์‹คํ–‰ ํŒŒ์ผ(instruction๋“ค)
    • ํ”„๋กœ์„ธ์Šค : active entity, ์‹คํ–‰ ์š”์ฒญํ•ด์„œ ์‹คํ–‰์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ
  • ์‹คํ–‰์ค‘ → ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ(pc)๊ฐ€ ๋‹ค์Œ instruction๊ณผ resource์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ–๊ณ  ์žˆ๋‹ค.
    • ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ : ์ง„ํ–‰ ์ƒํ™ฉ ๊ธฐ๋กํ•˜๋Š” ์—ญํ• . ๋‹ค์Œ์— ์–ด๋–ค instruction์ธ์ง€ ์ €์žฅํ•œ๋‹ค.
    • ๋ฆฌ์†Œ์Šค : ์‹ค์ œ ํ”„๋กœ๊ทธ๋žจ์ด ๋Œ์•„๊ฐ€๋Š” ์ค‘์— ์‚ฌ์šฉ์ค‘์ธ ํŒŒ์ผ, open files ๋“ฑ

โ—๏ธ ๊ทธ๋ฆผ์œผ๋กœ ์•Œ์•„๋ณด๋Š” ํ”„๋กœ์„ธ์Šค ๊ณผ์ •

  • Disk
    • Program = binary file with machine instructions
  • Main Memory
    • Program Code : ํ”„๋กœ๊ทธ๋žจ → ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋˜๋ ค๋ฉด CPU๊ฐ€ ์ฝ์–ด์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๊ฐ€ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.
    • Byte Array : ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์—์„œ๋Š” Byte Array ๋ฐฉ์‹์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. = ๋ฐ”์ดํŠธ๋งˆ๋‹ค ์ฃผ์†Œ๊ฐ€ ๋ถ™์–ด์žˆ๋‹ค. ๋ฐ”์ดํŠธ ๋‹จ์œ„๋กœ ์ฃผ์†Œ๋ฅผ ์ฐธ์กฐ. ๊ฐ ์ฃผ์†Œ๋งˆ๋‹ค 8๋น„ํŠธ(= 1byte)์˜ ๋ฐ์ดํ„ฐ ์ €์žฅ
  • CPU
    • Cache : ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ(addr)์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ cache์— copy ํ•ด๋‘”๋‹ค.
    • Registers : ์›Œ๋“œ(word)๋ผ๋Š” ๋‹จ์œ„(๋ณดํ†ต 2๋ฐ”์ดํŠธ = 16bits)๋กœ ์ฝ์–ด์™€์„œ ์ž„์‹œ๋กœ ์ €์žฅํ•œ๋‹ค.
    • ALU : Arithmetic Logit Unit. ๋…ผ๋ฆฌ ์—ฐ์‚ฐ ๊ณ„์‚ฐ

2๏ธโƒฃ Process in Memory

  • ๋ฉ”๋ชจ๋ฆฌ์—๋Š” ํ•˜๋“œ์›จ์–ด instruction ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ๊ฒƒ๋“ค๋„ ์˜ฌ๋ผ๊ฐ„๋‹ค

โ—๏ธ ๊ณ ์ •๋œ ํฌ๊ธฐ

  • Text : ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ. read-only
    • binary. ์ œ์ผ ์•„๋ž˜ ๋ถ€๋ถ„. ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•˜๋ฉด์„œ ๋ฐ”๋€Œ์ง€ ์•Š๋Š” ๋ถ€๋ถ„. ์ฝ”๋“œ๋Š” ํ•œ ๋ฒˆ ์ปดํŒŒ์ผํ•˜๋ฉด ๋ฐ”๋€Œ์ง€ ์•Š์Œ. ๋‹ค์‹œ ์ปดํŒŒ์ผ ํ•˜์ง€ ์•Š๋Š” ์ด์ƒ read-only. → ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰์ค‘์ธ๋ฐ ํ”„๋กœ๊ทธ๋žจ์ด ๋ฐ”๋€Œ๋ฉด ์•ˆ ๋˜๋‹ˆ๊นŒ ๋‹น์—ฐํžˆ read-only ๋กœ ๋ณดํ˜ธ๋˜์–ด์•ผ ํ•œ๋‹ค.
  • Data : ์ „์—ญ ๋ณ€์ˆ˜

โ—๏ธ ๊ณ ์ •๋œ ํฌ๊ธฐ X

  • Stack : ์ง€์—ญ ๋ณ€์ˆ˜, parameter, return address of function
    • ์ง€์—ญ ๋ณ€์ˆ˜
    • ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ํ–ˆ์„ ๋•Œ parameter
    • ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ์ฃผ์†Œ : ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ํ•จ์ˆ˜ ๋ถ€๋ถ„์˜ ์ฝ”๋“œ๋กœ ์ ํ”„ํ•˜๊ณ , ๋ฆฌํ„ดํ•˜๋ฉด ๋‹ค์‹œ ์›๋ž˜์˜ ํ•จ์ˆ˜๋กœ                                                ( ex - ์˜ˆ๋ฅผ ๋“ค๋ฉด main์—์„œ add๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด pc๊ฐ€ add๋กœ jumpํ•ด์„œ ์‹คํ–‰ํ•˜๊ณ  return์„ ํ•˜๋ฉด ๋‹ค์‹œ ์›๋ž˜ ์‹คํ–‰ํ•˜๋˜ main์œผ๋กœ ๋Œ์•„๊ฐ€๊ธฐ ์œ„ํ•ด์„œ return address๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค )
    • stack frame : ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ํ•จ์ˆ˜๊ฐ€ ์“ธ ์ˆ˜ ์žˆ๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ํ• ๋‹น๋˜๋Š”๋ฐ ๊ทธ๊ฒƒ์„ stack frame์ด๋ผ๊ณ  ํ•œ๋‹ค.
    • ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์Šคํƒ์ด ๋Š˜์–ด๋‚˜๋‹ค๊ฐ€, ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜๋˜๋ฉด ์Šคํƒ์ด ์ค„์–ด๋“ ๋‹ค → ์Šคํƒ์€ ์ปค์กŒ๋‹ค ์ž‘์•„์กŒ๋‹ค ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Heap : ์ถ”๊ฐ€์ ์œผ๋กœ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•  ๋•Œ. ๋™์  ํ• ๋‹น(malloc, free)

์˜ˆ์ œ)

  • text : ์ปดํŒŒ์ผ๋œ binary ํ˜•ํƒœ๋กœ ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€ ์žˆ๋‹ค.
  • data : ์ดˆ๊ธฐํ™”๋œ ๋ณ€์ˆ˜(x)์™€, ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜(y)๊ฐ€ ๋‚˜๋‰˜์–ด์ ธ์„œ ์ „์—ญ ๋ณ€์ˆ˜๊ฐ€ ์ €์žฅ๋œ๋‹ค.
  • heap : malloc ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ๋™์ ์œผ๋กœ ํ• ๋‹น๋œ ๋ฒ„ํผ(values)๊ฐ€ ์ €์žฅ๋œ๋‹ค.
  • stack : main ํ•จ์ˆ˜์—๊ฒŒ ํ• ๋‹น๋œ stack frame์•ˆ์— ์ง€์—ญ ๋ณ€์ˆ˜(*values, i)์™€ ํŒŒ๋ผ๋ฏธํ„ฐ ๋“ฑ์ด ์ €์žฅ๋œ๋‹ค.
  • high memory : command line argument๋“ค์ด argc, argv์— ์ €์žฅ๋œ๋‹ค.
  • ๊ทธ ์œ„ : kernel์ด ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„

3๏ธโƒฃ Process State

  • ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ OS๊ฐ€ ๊ด€๋ฆฌํ•ด์ค˜์•ผ ํ•œ๋‹ค.
  • ๊ทธ ์ข…๋ฅ˜๋Š” OS์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค. OS-dependent
  • ์–ธ์ œ ์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ๋Š”์ง€ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  • New : ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งŒ๋“ค์–ด์ ธ์„œ ์‹œ์Šคํ…œ์— ๋“ค์–ด์™”๊ณ , ์‹คํ–‰๋˜๋ ค๋ฉด ํ”„๋กœ์„ธ์„œ๋ฅผ ๋ฐ›์•„์•ผ ํ•œ๋‹ค. ์•„์ง ํ”„๋กœ์„ธ์„œ ๋ชป ๋ฐ›์Œ
  • Ready : ํ”„๋กœ์„ธ์„œ๊ฐ€ ์—†์–ด์„œ ๊ธฐ๋‹ค๋ฆฌ๊ณ  ์žˆ๋Š” ์ƒํƒœ. ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ”„๋กœ์„ธ์„œ ํ• ๋‹น ๋ฐ›๊ธฐ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ
  • Running : Scheduler๊ฐ€ ์„ ํƒ๋˜์–ด์„œ, ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ์ƒํƒœ (์‹ฑ๊ธ€ ์ฝ”์–ด๋ผ๋ฉด running์ด 1๊ฐœ ๋ฟ)
  • waiting : ํŒŒ์ผ์„ ๋””์Šคํฌ์—์„œ ์ฝ์–ด์˜ฌ ๋•Œ, I/O ๋“ฑ๋“ฑ ๊ธฐ๋‹ค๋ฆด ๋•Œ
  • terminated : ํ”„๋กœ์„ธ์„œ๊ฐ€ ์ตœ์ข…์ ์œผ๋กœ exit

4๏ธโƒฃ Process Control Block (PCB)

  • state๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ stucture(๊ตฌ์กฐ). OS๊ฐ€ ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค PCB๋ฅผ ๊ด€๋ฆฌ.
  • ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ •๋ณด ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ data structrue (representation of a process)
  • Kernel์ด ๊ด€๋ฆฌํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ → ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์˜ ์œ„์ชฝ์— ์œ„์น˜ํ•˜๊ณ  ์žˆ๋‹ค. ์•„๋ฌด๋‚˜ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ.
  • ํ”„๋กœ์„ธ์Šค์˜ ๊ฐœ์ˆ˜์— ๋งž๊ฒŒ PCB๊ฐ€ ์žˆ๋‹ค.

  • process state : ํ”„๋กœ์„ธ์Šค ์ƒํƒœ (running, waiting ...)
  • process number : pid, ํ”„๋กœ์„ธ์Šค ์‹๋ณ„์ž
  • program counter : ์ง„ํ–‰ ์ƒํ™ฉ ๊ธฐ๋ก. ํ”„๋กœ์„ธ์Šค๋ฅผ ์œ„ํ•ด ์‹คํ–‰๋  ๋‹ค์Œ ๋ช…๋ น์–ด(instruction)์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•œ๋‹ค
  • registers : register๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, register์˜ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด๋‹ค. register ๊ฐ’์ด ๊ณ„์† ์—†๋ฐ์ดํŠธ ๋ ํ…๋ฐ, ๊ทธ ๊ฐ’๋“ค์„ backupํ•ด๋‘”๋‹ค๊ณ  ์ƒ๊ฐํ•˜๋ฉด ๋œ๋‹ค.
  • memory limits : ๋ฉ”๋ชจ๋ฆฌ ์–ผ๋งˆ๋‚˜ ์“ธ ์ˆ˜ ์žˆ๋Š”์ง€ (os์— ์˜ํ•ด ์‚ฌ์šฉ๋œ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ์ •๋ณด - page table, segment table ๋“ฑ)
  • list of open files : ์—ด๋ฆฐ ํŒŒ์ผ ๋ชฉ๋ก ( ์ด๊ฒƒ ์™ธ์—๋„ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ํ• ๋‹น๋œ I/O ๋””๋ฐ”์ด์Šค ๋ชฉ๋ก๋“ค์ด PCB ์ €์žฅ๋œ๋‹ค. )
  • ๊ทธ ์™ธ์—๋„ CPU ์Šค์ผ€์ค„๋ง ์ •๋ณด(ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„  ์ˆœ์œ„) ๋“ฑ ๋งŽ์€ ์ •๋ณด๊ฐ€ ์ €์žฅ๋œ๋‹ค

5๏ธโƒฃ Process Scheduling

  • ์—„์ฒญ ๋งŽ์€ ํ”„๋กœ์„ธ์Šค → ์Šค์ผ€์ค„๋ง ์—ญํ• ๋„ ์ค‘์š”
  • ์–ด๋–ค CPU ์ฝ”์–ด์— ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰์‹œํ‚ฌ์ง€ ๊ฒฐ์ •ํ•ด์ค€๋‹ค.
  • ์ตœ๋Œ€ํ•œ CPU๋ฅผ ํ™œ์šฉํ•ด์„œ ๋‚ญ๋น„๋˜๋Š” ์‹œ๊ฐ„์ด ์—†๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ์ฃผ์š” ๋ชฉํ‘œ
  • ํ(Queue)๋ฅผ ํ™œ์šฉํ•œ ์Šค์ผ€์ฅด๋ง
      • ํ”„๋กœ์„ธ์Šค ํ• ๋‹น์€ ํ ์ˆœ์„œ ๋ง๊ณ , ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์•Œ์•„์„œ
      • wait queue๋Š” ์ƒํ™ฉ์— ๋งž๊ฒŒ ์—ฌ๋Ÿฌ๊ฐœ ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.
      • wait queue์—์„œ ๋‚˜์˜ค๋ฉด ready queue๋กœ ๊ฐ„๋‹ค.
      • Ready queue : 1๊ฐœ
      • Wait queues : ์—ฌ๋Ÿฌ๊ฐœ
    • Queuing Diagram
      • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์Šคํ…œ์— ๋“ค์–ด๊ฐ€๋ฉด, Ready queue์— ๋“ค์–ด๊ฐ€์„œ CPU ์ฝ”์–ด์—์„œ ์‹คํ–‰๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.                                    (์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ์— PCB ๊ฐ€๋ฆฌํ‚ค๋Š” ํฌ์ธํ„ฐ ์ €์žฅ)
      • ์ฝ”์–ด๊ฐ€ ํ• ๋‹น๋˜์–ด์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰
      • → I/O ์š”์ฒญ์— ๋Œ€ํ•œ ๋Œ€๊ธฐ, child ํ”„๋กœ์„ธ์Šค์˜ ์ข…๋ฃŒ ๋Œ€๊ธฐ, interrupt๋กœ ์ธํ•œ ๋Œ€๊ธฐ ๋“ฑ์œผ๋กœ ์ธํ•ด์„œ waiting queue์—์„œ ๋Œ€๊ธฐ
      • → I/O, child ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ, interrupt ๋ฐœ์ƒ ์ดํ›„ ๋‹ค์‹œ Ready queue๋กœ ๋Œ์•„์•„๊ฒŒ ๋œ๋‹ค.

6๏ธโƒฃ Context Switch โญ๏ธ

  • Context Switch = CPU๊ฐ€ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•˜๋‹ค๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ
  • Old Process : P0์„ ์ค‘๋‹จ ํ•˜๊ธฐ ์œ„ํ•ด, P0์˜ PCB์— ์‹คํ–‰ ์ค‘์ธ ์ •๋ณด๋ฅผ ์ €์žฅ (→ save the architectural state )
  • New Process : P1์ด ์˜ˆ์ „์— ์‹คํ–‰๋˜์—ˆ๋˜ ๋ฐ์ดํ„ฐ๋ฅผ PCB์—์„œ ๋ถˆ๋Ÿฌ์˜จ๋‹ค. (→ load the saved state )

์–ด๋–ค ๊ฒƒ์„ ๋ฐฑ์—…?

  • Context : Program Counter + Registers
  • pure overhead ; ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ๋“œ๋Š” ์ถ”๊ฐ€ cost.
    • OS๊ฐ€ PCB๋ฅผ ์ž˜ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ •๋ณด๋ฅผ ์ถ”๊ฐ€๋กœ ์ €์žฅ → ์ƒํƒœ ์ „ํ™˜์ด ๋” ๋น ๋ฅด๊ฒŒ

 

cf. ์‹ฌํ™”) Time dependent on hardware support

  • ์ปจํ…์ŠคํŠธ ์Šค์œ„์น˜ ๊ฐ’์ด hw support์— ๋”ฐ๋ผ ๋‹ค๋ฅด๋‹ค.→ ๋ถˆ๋Ÿฌ์™”๋‹ค๊ฐ€ ๋‹ค์‹œ ์ €์žฅํ•  ํ•„์š” ์—†์ด, ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ์™”๋‹ค๊ฐ”๋‹ค
  • hyperthreading
  • → ํ•œ CPU์— ์—ฌ๋Ÿฌ๊ฐœ์˜ Register๋ฅผ ์ œ๊ณต = ์—ฌ๋Ÿฌ๊ฐœ Context๋ฅผ ํ•œ๋ฒˆ์— ๋กœ๋“œ ๊ฐ€๋Šฅ
  • ๊ฐ ์ฝ”์–ด๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ์˜ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์—ฌ๊ธด๋‹ค
  • Logical(virtual) cores (↔ physical cores )

7๏ธโƒฃ Operations on Processes : Process Creation

  • ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ์‹ : Parent ํ”„๋กœ์„ธ์Šค child ํ”„๋กœ์„ธ์Šค
    • ๋ฆฌ๋ˆ…์Šค PCB ๊ตฌ์กฐ์ฒด๋ฅผ ๋ณด๋ฉด parent๋ผ๋Š” ํฌ์ธํ„ฐ๊ฐ€ ์žˆ์–ด์„œ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ PCB๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค.
    • pid(process identifier)๋ฅผ ํ†ตํ•ด ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ตฌ๋ถ„. ์ž์‹์€ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ pid ๊ฐ’์„ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค.
  • ์ƒ์„ฑ, ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์€ OS ๋งˆ๋‹ค ๋‹ค๋ฅด๋‹ค → ๋‹ค์–‘ํ•œ ์˜ต์…˜์ด ์žˆ๋‹ค.
    • Resource Sharing - ์ „๋ถ€, ์ผ๋ถ€, ์—†์Œ
    • Execution - ๋™์‹œ์—(๊ฐ™์ด), ๋ถ€๋ชจ๊ฐ€ …
    • Address space - ๋ณต์ œ, ์ž์ฒด ํ”„๋กœ๊ทธ๋žจ

๐Ÿ”Ž Example

  • fork() : ์ƒˆ ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑํ•˜๋Š” system call
  • exec() : fork ์ดํ›„ ํ”„๋กœ์„ธ์Šค ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ƒˆ ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” system call
  • wait() : parent ํ”„๋กœ์„ธ์Šค๊ฐ€ child ํ”„๋กœ์„ธ์Šค์˜ ์ข…๋ฃŒ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” system call
  • code example


8๏ธโƒฃ Operations on Processes : Process Termination

๐Ÿ“ exit()

  • exit() : ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋งˆ์ง€๋ง‰ ๋ช…๋ น์„ ์ˆ˜ํ–‰ํ•œ ํ›„ OS์—๊ฒŒ ์ข…๋ฃŒ๋ฅผ ์•Œ๋ ค์ฃผ๋Š” System call
    • exit()์ด ๋˜๋ฉด
      1. ์ž์‹์ด ๋ถ€๋ชจ์—๊ฒŒ output data๋ฅผ ๋ณด๋‚ธ๋‹ค. (→child๊ฐ€ ๋๋‚ฌ๋Š”์ง€๋ฅผ wait()๋ฅผ ํ†ตํ•ด ์•Œ ์ˆ˜ ์žˆ๋‹ค.)
      2. ํ”„๋กœ์„ธ์Šค์˜ ๋ฆฌ์†Œ์Šค๋“ค์ด OS์— ์˜ํ•ด deallocated(๋ฐ˜๋‚ฉ) ๋œ๋‹ค.
    • child๊ฐ€ exit๋˜๋ฉด terminated ์ƒํƒœ๊ฐ€ ๋˜๊ณ , ์ด๊ฒƒ์ด system call๋กœ parent๋กœ ์ „๋‹ฌ๋˜๋ฉด, wait์ด์—ˆ๋˜ parent๋Š” ๋‹ค์‹œ ready ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.


๐Ÿ“ abort()

  • abort() : ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ•์ œ ์ข…๋ฃŒํ•ด์ฃผ๋Š” system call
    • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒ์‹œํ‚ค๋Š” 3๊ฐ€์ง€ ๊ฒฝ์šฐ
      1. ๋ฆฌ์†Œ์Šค๋ฅผ ๋„ˆ๋ฌด ๋งŽ์ด ์“ฐ๋ฉด(ํ• ๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ์ดˆ๊ณผ)
      2. child์—๊ฒŒ ํ• ๋‹น๋œ task๊ฐ€ ๋”์ด์ƒ ํ•„์š”X
      3. parent๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ OS๊ฐ€ parent๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ child๊ฐ€ ๊ณ„์†๋˜๋Š” ๊ฑธ ํ—ˆ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ
      4. child ํ”„๋กœ์„ธ์Šค์˜ ๋™์ž‘์ด ์ด์ƒํ•  ๋•Œ (→ ์ด๊ฒƒ๋„ ๋ถ€๋ชจ๊ฐ€ ์ž์‹ ์ƒํƒœ๋ฅผ ์•Œ ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ)

  • cascading termination (์—ฐ์‡„ ์ข…๋ฃŒ)
    • parent๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด child๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์—†๊ฒŒ                                                                                                                               (→ ๋ช‡๋ช‡ ์‹œ์Šคํ…œ์—์„œ๋Š” ๋ถ€๋ชจ ์—†์ด ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰ ๋  ์ˆ˜ ์—†์–ด์„œ ์ข…๋ฃŒ)
    • child๊ฐ€ ๋‹ค ์ข…๋ฃŒ๋˜์–ด์•ผ parent๊ฐ€ ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ๋„๋ก. ์ฐจ๋ก€๋Œ€๋กœ ์œ„๋กœ ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ terminate.

  • zombie & orphan process
      • wait() system call → ํ”„๋กœ์„ธ์Šค ์ƒํƒœ ์ •๋ณด์™€ ์ข…๋ฃŒ๋œ ํ”„๋กœ์„ธ์Šค์˜ pid๋ฅผ ๋ฐ˜ํ™˜                                                                       → ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋Š” wait() system call์„ ์ด์šฉํ•˜์—ฌ child ํ”„๋กœ์„ธ์Šค์˜ ์ข…๋ฃŒ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
    pid = wait(&status);
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒํ•˜๋ฉด ์‚ฌ์šฉํ•˜๋˜ ์ž์›์€ OS๊ฐ€ ๋‹ค์‹œ ๊ฐ€์ ธ๊ฐ€๋Š”๋ฐ, ํ”„๋กœ์„ธ์Šค์˜ ์ข…๋ฃŒ ์ƒํƒœ๊ฐ€ ์ €์žฅ๋˜๋Š” ํ”„๋กœ์„ธ์Šค ํ…Œ์ด๋ธ”์˜ ํ•ด๋‹น ํ•ญ๋ชฉ์€ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ wait()๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๊นŒ์ง€ ๋‚จ์•„์žˆ๊ฒŒ ๋œ๋‹ค.
    • ์ฆ‰, ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ wait๋ฅผ ์•ˆ ํ•ด์ฃผ๋ฉด zombie๊ฐ€ ๋œ๋‹ค.
      • ํ”„๋กœ์„ธ์Šค๋Š” ์ข…๋ฃŒ๋˜์—ˆ์ง€๋งŒ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์•„์ง wait()๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์€ ํ”„๋กœ์„ธ์Šค = ์ข€๋น„(zombie)                                       → wait๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉด ๋ฐ˜ํ™˜ํ•  ๋•Œ state๋ฅผ ๋ฐ˜ํ™˜ํ•  ๊ณณ์ด ์—†๊ฒŒ ๋œ๋‹ค.
    • parent ํ”„๋กœ์„ธ์Šค๊ฐ€ wait()๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š์€ ์ƒํƒœ๋กœ ์ข…๋ฃŒํ•ด๋ฒ„๋ฆฌ๋ฉด ๊ฐˆ ๊ณณ ์—†๋Š” ๋ถ€๋ชจ๊ฐ€ ์—†๋Š” orphan process ๊ฐ€ ๋œ๋‹ค.

9๏ธโƒฃ Interprocess Communication (Models)

  • ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜, cooperating → ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์˜ํ–ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
  • ํ˜‘๋ ฅํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  ์ด์œ ?
    • Information sharing : ๋‘ ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋‚˜์˜ variable์„ ๊ณต์œ 
    • Computation Speedup : ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค → task๋ฅผ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ฒ˜๋ฆฌ
    • Modularity : ํ…Œ์Šคํฌ๋ฅผ ๋ถ„๋ฆฌ → ๊ด€๋ฆฌ๊ฐ€ ์‰ฝ๋‹ค
    • Convenience : ๋ถ„๋ฆฌํ•ด์„œ ๊ด€๋ฆฌ → ํŽธ๋ฆฌํ•จ

 

  •  ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ํ†ต์‹ (IPC) ๋ฐฉ์‹ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€→ ๋‘ ๋ฐฉ์‹์˜ ์ฐจ์ด์ , ๋น„๊ต! ๊ฐ€ ์ค‘์š”
    • Shared memory : ์›๋ž˜ ์ž์‹ ์˜ ํ”„๋กœ์„ธ์Šค ๊ณต๊ฐ„ ์ž์ฒด๋Š” ๋ณดํ˜ธ๋ฐ›์•„์•ผํ•˜๋Š”๋ฐ, ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด์„œ, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก
    • Message Passing : ์ปค๋„์ด ๋ฉ”์„ธ์ง€ ํ ๊ด€๋ฆฌ
      • ๋ณด๋‚ด๊ณ  ์‹ถ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฉ”์‹œ์ง€ ํ์— ๋ฉ”์„ธ์ง€๋ฅผ ์ง‘์–ด ๋„ฃ์œผ๋ฉด → ๋ฉ”์„ธ์ง€๋ฅผ ์ฝ์–ด์™€์„œ ์ถ”๊ฐ€์ ์œผ๋กœ ๊ณต์œ                                           (์ปค๋„ ์•ˆ์— ๋ฉ”์ผ ๋ฐ•์Šค๊ฐ€ ์กด์žฌํ•œ๋‹ค. ํ”„๋กœ์„ธ์Šค๊ฐ€ ํŽธ์ง€๋ฅผ ๋‚จ๊ฒจ๋‘๊ณ , ๋ฐ›๋Š” ์• ๊ฐ€ ์ฝ๋Š”๋‹ค)

๐Ÿ”Ÿ IPC - Shared Memory

  • ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์— ๊ณต์œ ๋˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์ด ์กด์žฌ
    • ์ปค๋„(OS)์ด ์ง์ ‘ ๊ด€์—ฌ(control) X → User process ์˜ ์ œ์–ด(control)๋กœ ํ†ต์‹  ์ด๋ค„์ง„๋‹ค
  • synchronize(๋™๊ธฐํ™”) ๋ฌธ์ œ
    • p1๊ณผ p2๊ฐ€ ๋ชจ๋‘ shared memory ๊ณต๊ฐ„์— ์ ‘๊ทผ ๊ฐ€๋Šฅ → p1์ด ์“ด ๋ฐ์ดํ„ฐ๋ฅผ p2๊ฐ€ ๋ฎ์–ด๋ฒ„๋ฆด ์ˆ˜ ์žˆ๋‹ค.                                                  : ํ”„๋กœ์„ธ์Šค๊ฐ„์˜ synchronization์„ ํ†ตํ•ด ์˜๋„์น˜ ์•Š๊ฒŒ ์ˆ˜์ •๋˜๊ฑฐ๋‚˜ ๋ฎ์–ด์ง€๋Š”๊ฑธ ๋ฐฉ์ง€ํ•ด์•ผํ•จ

๐Ÿ”Ž Example

  • Producer(data ๋งŒ๋“ฌ) ↔ Consumer(data ์‚ฌ์šฉํ•จ)
  • ๋‘˜ ์‚ฌ์ด์— shared buffer ์กด์žฌ
  • in, out์œผ๋กœ circular buffer์˜ ์‹œ์ž‘๊ณผ ๋์„ ํ‘œ์‹œ


๐Ÿ”Ž POSIX

  • Shared Memory API

  • ํ”„๋กœ์„ธ์Šค๊ฐ€ shared memory segment ์ƒ์„ฑ
    • shm_fd = shm_open(name, O_CREAT, O_RDWR, 0666); : ๊ณต๊ฐ„ ์ด๋ฆ„, permission ๋“ฑ์„ ์„ค์ •
  • ์˜ค๋ธŒ์ ํŠธ์˜ ํฌ๊ธฐ ์„ค์ •
    • ftruncate(shm_fd, 4096); : file descripter, byte ์„ค์ •
  • shared memory object์— ํŒŒ์ผ ํฌ์ธํ„ฐ์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋งตํ•‘
    • char *buf = mmap(); : mmap()์— ์˜ํ•ด ๋ฐ˜ํ™˜๋˜๋Š” ํฌ์ธํ„ฐ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ณต์œ  ๋ฉ”๋ชจ๋ฆฌ์— ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ”Ÿ IPC - Message Passing

  • shared memory๋Š” ์„œ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์–ด๋””์— ์“ธ ์ค„ ์•Œ์•˜์ง€๋งŒ, ์ด๊ฑฐ๋Š” ๊ณต์œ  ๋ณ€์ˆ˜์— ์˜์ง€ํ•˜์ง€ ์•Š๋Š”๋‹ค
  • ์ง์ ‘์ ์œผ๋กœ send(message), receive(message)
  • ๋ฉ”์„ธ์ง€ ํฌ๊ธฐ๋Š” ๊ณ ์ •๋  ์ˆ˜๋„ ์žˆ๊ณ , ๋ฐ”๋€” ์ˆ˜๋„ ์žˆ๋‹ค!

 

  • ์ปค๋„์ด ๊ด€๋ฆฌํ•ด์ฃผ๋Š” communication link๊ฐ€ ์žˆ์–ด์•ผ ๋ฉ”์„ธ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
    • ์„œ๋กœ ํฌํŠธ๊ฐ€ ์žˆ์–ด์„œ, ํฌํŠธ๋ฅผ ์—ด์–ด์„œ ์–ด์ฉŒ๊ณ  ์ €์ฉŒ๊ณ  ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ์ปค๋„์—์„œ ๋งํฌ๋ฅผ ์—ด์–ด์„œ ๋ฉ”์„ธ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๋‹ค.
  • Physical(๋ฌผ๋ฆฌ์ ) ๊ตฌํ˜„
    • shared memory์—๋„ ๊ฐ€๋Šฅ์ธ๋ฐ ์ฐจ์ด๋Š” send, receive๋กœ ๋ฉ”์„ธ์ง€ ๋‹จ์œ„๋กœ!!!
    • Hardware bus, Network(Socket)
  • Logical(๋…ผ๋ฆฌ์ ) ๊ตฌํ˜„
    • direct : ๋ณด๋‚ด๋Š” ์‚ฌ๋žŒ์„ ์ง€์ •ํ•ด๋†“๋Š”๊ฒƒ → send(Q, message); (message target์˜ ์œ ๋ฌด ์ฐจ์ด)
    • indirect : ์ผ๋‹จ ๋ฐ•์Šค์— ๋ฉ”์„ธ์ง€๋ฅผ ๋„ฃ์–ด๋†“๊ณ , ํ•„์š”ํ•œ ์‚ฌ๋žŒ์ด ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ๊ฒƒ → send(message);
    • asynchronous : ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด๊ธฐ๋งŒ ํ•œ๋‹ค. ๋ฐ›์•˜๋‹ค๋Š” ๊ฒƒ ํ™•์ธ ์•ˆ ํ•˜๊ณ  ๋‹ค๋ฅธ ์ž‘์—… ์ˆ˜ํ–‰
    • synchronous : ๋™๊ธฐ ๋ฐฉ์‹. ๋‚ด๊ฐ€ ๊ทธ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ธ ๊ฒƒ์„ ๋ฐ›์•˜๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ.
    • buffering : ๋ฉ”์„ธ์ง€๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋ณด๋‚ผ ๋•Œ, ๋ฒ„ํผ์— ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๊ด€ํ•˜๊ฑฐ๋‚˜, …