Process1 - hochan222/Everything-in-JavaScript GitHub Wiki

ํ”„๋กœ์„ธ์Šค ๊ฐœ๋…

  • "Process is a program in execution"

  • ํ”„๋กœ์„ธ์Šค์˜ context == ํ”„๋กœ์„ธ์Šค์˜ ํ˜„์žฌ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š”๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ์š”์†Œ

    • CPU ์ˆ˜ํ–‰ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•˜๋“œ์›จ์–ด ๋ฌธ๋งฅ
      • Program Counter
      • ๊ฐ์ข… register
    • ํ”„๋กœ์„ธ์Šค์˜ ์ฃผ์†Œ ๊ณต๊ฐ„
      • code, data, stack
    • ํ”„๋กœ์„ธ์Šค ๊ด€๋ จ ์ปค๋„ ์ž๋ฃŒ ๊ตฌ์กฐ
      • PCB (Process Control Block)
      • Kernel stack

ํ”„๋กœ์„ธ์Šค ์ƒํƒœ (Process State)

  • ํ”„๋กœ์„ธ์Šค๋Š” ์ƒํƒœ(state)๊ฐ€ ๋ณ€๊ฒฝ๋˜๋ฉฐ ์ˆ˜ํ–‰๋œ๋‹ค.
    • Running
      • CPU๋ฅผ ์žก๊ณ  instruction์„ ์ˆ˜ํ–‰์ค‘์ธ ์ƒํƒœ
    • Ready
      • CPU๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ (๋ฉ”๋ชจ๋ฆฌ ๋“ฑ ๋‹ค๋ฅธ ์กฐ๊ฑด์„ ๋ชจ๋‘ ๋งŒ์กฑ)
    • Blocked (wait, sleep)
      • CPU๋ฅผ ์ฃผ์–ด๋„ ๋‹น์žฅ Instruction์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ
      • Process ์ž์‹ ์ด ์š”์ฒญํ•œ event(์˜ˆ: I/O)๊ฐ€ ์ฆ‰์‹œ ๋งŒ์กฑ๋˜์ง€ ์•Š์•„ ์ด๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ
      • (์˜ˆ) ๋””์Šคํฌ์—์„œ file์„ ์ฝ์–ด์™€์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ
    • New: ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ์ค‘์ธ ์ƒํƒœ
    • Terminated: ์ˆ˜ํ–‰(execution)์ด ๋๋‚œ ์ƒํƒœ
    • Suspended (stopped) (์ค‘๊ณ„์Šค์ผ€์ค„๋Ÿฌ๋กœ์ธํ•ด ์ถ”๊ฐ€๋จ)
      • ์™ธ๋ถ€์ ์ธ ์ด์œ ๋กœ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜ํ–‰์ด ์ •์ง€๋œ ์ƒํƒœ
      • ํ”„๋กœ์„ธ์Šค๋Š” ํ†ต์งธ๋กœ ๋””์Šคํฌ์— Swap out ๋œ๋‹ค.
      • ์˜ˆ) ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์ผ์‹œ ์ •์ง€ ์‹œํ‚จ ๊ฒฝ์šฐ
      • ์‹œ์Šคํ…œ์ด ์—ฌ๋Ÿฌ ์ด์œ ๋กœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž ์‹œ ์ค‘๋‹จ์‹œํ‚ด
      • (๋ฉ”๋ชจ๋ฆฌ์— ๋„ˆ๋ฌด ๋งŽ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์˜ฌ๋ผ์™€ ์žˆ์„ ๋•Œ)

Blocked: ์ž์‹ ์ด ์š”์ฒญํ•œ event๊ฐ€ ๋งŒ์กฑ๋˜๋ฉด Ready
Suspended: ์™ธ๋ถ€์—์„œ resumeํ•ด ์ฃผ์–ด์•ผ Active

ํ”„๋กœ์„ธ์Šค ์ƒํƒœ๋„

Process Control Block (PCB)

  • ์šด์˜์ฒด์ œ๊ฐ€ ๊ฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค๋‹น ์œ ์ง€ํ•˜๋Š” ์ •๋ณด

Context Switch

  • ์‚ฌ์šฉ์ž Process์—์„œ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž Process๋กœ ๋„˜๊ฒจ์ฃผ์–ด์•ผ๋Œ (์šด์˜์ฒด์ œ๋กœ ๊ฐ€๋Š”๊ฑด์•„๋‹˜)

  • CPU๋ฅผ ํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ๋„˜๊ฒจ์ฃผ๋Š” ๊ณผ์ •

  • CPU๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋„˜์–ด๊ฐˆ ๋•Œ ์šด์˜์ฒด์ œ๋Š” ๋‹ค์Œ์„ ์ˆ˜ํ–‰

    • CPU๋ฅผ ๋‚ด์–ด์ฃผ๋Š” ํ”„๋กœ์„ธ์Šค ์ƒํƒœ๋ฅผ ๊ทธ ํ”„๋กœ์„ธ์Šค์˜ PCB์— ์ €์žฅ
    • CPU๋ฅผ ์ƒˆ๋กญ๊ฒŒ ์–ป๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ PCB์—์„œ ์ฝ์–ด์˜ด
  • System call์ด๋‚˜ Interrupt ๋ฐœ์ƒ์‹œ ๋ฐ˜๋“œ์‹œ context switch๊ฐ€ ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์€ ์•„๋‹˜.

ํ”„๋กœ์„ธ์Šค๋ฅผ ์Šค์ผ€์ค„๋ง ํ•˜๊ธฐ ์œ„ํ•œ ํ

  • Job queue
    • ํ˜„์žฌ ์‹œ์Šคํ…œ ๋‚ด์— ์žˆ๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์˜ ์ง‘ํ•ฉ
  • Ready queue
    • ํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ ๋‚ด์— ์žˆ์œผ๋ฉด์„œ CPU๋ฅผ ์žก์•„์„œ ์‹คํ–‰๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ง‘ํ•ฉ
  • Device queues
    • I/O device์˜ ์ฒ˜๋ฆฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ง‘ํ•ฉ

ํ”„๋กœ์„ธ์Šค๋“ค์€ ๊ฐ ํ๋“ค์„ ์˜ค๊ฐ€๋ฉฐ ์ˆ˜ํ–‰๋œ๋‹ค.

interrupt ๋ฐœ์ƒ์‹œ ready queue๋กœ ๋„˜์–ด๊ฐ€๋Š”๊ฑด ์•„๋‹˜ (๊ทธ๋ฆผ ์ž˜๋ชป๋จ)

์Šค์ผ€์ค„๋Ÿฌ (Scheduler)