Skip to content

Latest commit

ย 

History

History
197 lines (137 loc) ยท 10.6 KB

File metadata and controls

197 lines (137 loc) ยท 10.6 KB

Process

โ‡’ ์‹คํ–‰์ค‘์— ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ

๋””์Šคํฌ์— ์‹คํ–‰ ํŒŒ์ผ ๋“ฑ์˜ ํ˜•ํƒœ๋กœ ์กด์žฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ -> ์‹คํ–‰ -> ์ƒ๋ช…๋ ฅ์„ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค


Process Context

โ‡’ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ์‹œ๋ถ„ํ•  ํ™˜๊ฒฝ์—์„œ CPU์˜ ์ ์œ ๊ถŒ์ด ๊ณ„์†์ ์œผ๋กœ ๋ฐ”๋€๋‹ค. CPU์˜ ์ ์œ ๊ถŒ์„ ๋นผ์•—๊ฒผ๋‹ค๊ฐ€ ๋‹ค์‹œ ๋˜์ฐพ์€ ํ”„๋กœ์„ธ์Šค์˜ ์ด์ „ ์ƒํƒœ๋ฅผ ์žฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ํ•„์š”ํ•œ ์ •๋ณด = Process Context


Context ์ข…๋ฅ˜

โ‡’ ํ”„๋กœ์„ธ์Šค context ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด ๋‹ค์‹œ ์ ์œ ๊ถŒ์„ ํš๋“ํ–ˆ์„ ๋•Œ ์ด์ „์˜ ์ƒํƒœ์— ์ด์–ด์„œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. CPU์˜ ์ˆ˜ํ–‰ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•˜๋“œ์›จ์–ด ๋ฌธ๋งฅ
    • pc๊ฐ’ - ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค ๋ช…๋ น์–ด๋ฅผ ํฌ์ธํŒ…ํ•˜๊ณ  ์žˆ์œผ๋ฉฐ ๋ช…๋ น์–ด ์ฃผ์†Œ ์ €์žฅ, ๋ ˆ์ง€์Šคํ„ฐ ์ •๋ณด
    • CPU์˜ ์ˆ˜ํ–‰์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •๋ณด, ๊ฐ์ข… ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๊ฐ’๋“ค์„ ์˜๋ฏธํ•œ๋‹ค.
  2. ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„
    • code, data, stack
  3. ํ”„๋กœ์„ธ์Šค ๊ด€๋ จ ์ปค๋„ ์ž๋ฃŒ ๊ตฌ์กฐ
    • PCB
      • ์šด์˜ ์ฒด์ œ ์ปค๋„์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ์„œ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ํ• ๋‹นํ•  ์ž์›์„ ์„ค์ •ํ•˜๊ณ  ๊ฐ์‹œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํ”„๋กœ์„ธ์Šค ์ •๋ณด
    • Kernal Stack
      • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์Šคํ…œ ์ฝœ์„ ํ•˜๋ฉด PC๊ฐ€ kernal ์ฃผ์†Œ๊ณต๊ฐ„์˜ code๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด ๋•Œ code๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ kernal stack์— ์Œ“์•„๋‘”๋‹ค.

Process State

โ‡’ Running, Ready, Blocked

  1. Running
    • CPU๋ฅผ ์žก๊ณ  ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ ์ค‘์ธ ์ƒํƒœ
    • Running - User level, kernel level
      • ์‹œ์Šคํ…œ ์ฝœ โ†’ kernel level
  2. Ready
    • ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋˜์–ด ๋ฐ”๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU ์ ์œ ๊ถŒ์„ ์–ป์ง€ ๋ชปํ•ด ๋Œ€๊ธฐ์ค‘์ธ ์ƒํƒœ
      • Ready ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด CPU ์ ์œ ๊ถŒ์„ ํš๋“ํ•˜๊ณ  ๋นผ์•—์œผ๋ฉด์„œ ์‹œ๋ถ„ํ•  ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•œ๋‹ค.
  3. Blocked(wait, sleep)
    • CPU๋ฅผ ํ• ๋‹น๋ฐ›๋”๋ผ๋„ ๋‹น์žฅ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ
      • io ์ž‘์—…๊ณผ ๊ฐ™์ด ์š”์ฒญํ•œ event๊ฐ€ ๋ฐ”๋กœ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ๋ชปํ•  ๋•Œ ํ”„๋กœ์„ธ์Šค๋Š” blocked ๋œ๋‹ค.
  4. Suspended(stopped)
    • ์™ธ๋ถ€์ ์ธ ์ด์œ ๋กœ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜ํ–‰์ด ์ •์ง€๋œ ์ƒํƒœ์ด๋‹ค.
    • Suspended ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋Š” ํ†ต์งธ๋กœ ๋””์Šคํฌ์— swap out๋œ๋‹ค.
      • ์ค‘๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋บด์•˜๊ธด ํ”„๋กœ์„ธ์Šค ์ƒํƒœ์ด๋‹ค โ† ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์ผ์‹œ ์ •์ง€ ์‹œํ‚ค๊ฑฐ๋‚˜, ์‹œ์Šคํ…œ ๋ฉ”๋ชจ๋ฆฌ์— ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ์˜ฌ๋ผ์™€์žˆ์–ด ์ž ์‹œ ์ค‘๋‹จ ์‹œํ‚ฌ ๊ฒฝ์šฐ suspended ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
    • Suspended Blocked, Suspended Ready
      • io์ž‘์—… ์ค‘์ด๊ฑฐ๋‚˜, blocked ์ƒํƒœ์—์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋นผ์•—๊ฒจ ๋””์Šคํฌ๋กœ swap out โ†’ suspended blocked
      • io ์ž‘์—…์„ ๋งˆ์น˜๋ฉด โ†’ Suspended ready
  5. New
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ์ค‘์ธ ์ƒํƒœ
  6. Terminated
    • ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜ํ–‰์ด ๋๋‚œ ์ƒํƒœ

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

  1. new โ†’ ready
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ์ค‘์ด๋‹ค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ready ์ƒํƒœ๋กœ ๋ฐ”๋€๋‹ค
  2. ready โ†’ running
    • ready ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ cpu ์ ์œ ๊ถŒ์„ ์–ป์œผ๋ฉด running ์ƒํƒœ๋กœ ๋ณ€ํ•œ๋‹ค.
  3. running โ†’ terminated
    • ํ”„๋กœ์„ธ์Šค ์ˆ˜ํ–‰์ด ๋๋‚  ๊ฒฝ์šฐ, cpu์ ์œ ๊ถŒ์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  terminated ์ƒํƒœ๋กœ ๋ฐ”๋€๋‹ค.
  4. running โ†’ waiting
    • ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…(io ์ž‘์—…)์„ ์ˆ˜ํ–‰ํ•  ๊ฒฝ์šฐ, cpu์ ์œ ๊ถŒ์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  waiting ์ƒํƒœ๋กœ ๋ฐ”๋€๋‹ค.
  5. running โ†’ ready
    • timer interrupt(=ํ• ๋‹น๋œ ์‹œ๊ฐ„์ด ๋๋‚ ๊ฒฝ์šฐ)๊ฐ€ ๋“ค์–ด์™€์„œ cpu์ ์œ ๊ถŒ์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ready ์ƒํƒœ๋กœ ๋ฐ”๋€๋‹ค.

PCB(Process Control Block)

โ‡’ ์šด์˜์ฒด์ œ๊ฐ€ ๊ฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœ์„ธ์Šค๋‹น ์œ ์ง€ํ•˜๋Š” ์ •๋ณด์ด๋‹ค. pcb๋Š” ๊ตฌ์กฐ์ฒด ํ˜•ํƒœ์ด๋‹ค.

  1. ์šด์˜์ฒด์ œ๊ฐ€ ๊ด€๋ฆฌ์ƒ ์‚ฌ์šฉํ•˜๋Š” ์ •๋ณด
    • process state, process id
    • scheduling infromation, priority
  2. CPU ์ˆ˜ํ–‰ ๊ด€๋ จ ํ•˜๋“œ์›จ์–ด ๊ฐ’
    • PC, register
  3. ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ จ
    • code, data, stack
  4. ํŒŒ์ผ ๊ด€๋ จ
    • open file descriptors

Process Context Switch

โ‡’ cpu ์ ์œ ๊ถŒ์ด ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ณผ์ •

โ‡’ ํ”„๋กœ์„ธ์Šค๋Š” cpu ์ ์œ ๊ถŒ์„ ๋นผ์•—๊ธฐ๋Š” ์‹œ์ ์˜ ๋ฌธ๋งฅ์„ pcb๋ฅผ ํ†ตํ•ด ๊ธฐ๋กํ•ด๋‘”๋‹ค. ์ดํ›„ ์ ์œ ๊ถŒ์„ ๋‹ค์‹œ ํš๋“ํ–ˆ์„ ๋•Œ, pcb๋ฅผ ํ†ตํ•ด ๋ฌธ๋งฅ์„ ๋‹ค์‹œ ์ฐพ์•„ ๋นผ์•—๊ฒผ๋˜ ์‹œ์ ์—์„œ ์ˆ˜ํ–‰๋˜๋˜ ๋ช…๋ น์–ด๋ฅผ ์ด์–ด์„œ ์ˆ˜ํ–‰ํ•œ๋‹ค.(PCB๋Š” kernal data์˜์—ญ์— ์กด์žฌ)

  1. CPU ์ ์œ ๊ถŒ์„ ๋นผ์•—๊ธฐ๋Š” ์ƒํ™ฉ
    • ๋บ๊ธฐ๋˜ ์‹œ์ ์˜ ๋ฌธ๋งฅ์„ ๊ธฐ์–ตํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์˜ PCB์—๋‹ค๊ฐ€ CPU์˜ pc๊ฐ’๊ณผ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค.
  2. CPU ์ ์œ ๊ถŒ์„ ์–ป๋Š” ์ƒํ™ฉ
    • ์šด์˜์ฒด์ œ๋Š” Kernal data์— ์ €์žฅ๋œ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์˜ PCB์—์„œ CPU์˜ PC๊ฐ’ ๋ฐ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ ๋ณต์›์‹œํ‚ค๊ณ  CPU ์ ์œ ๊ถŒ์„ ๋‹ค์‹œ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋„˜๊ฒจ์ฃผ๋ฉด์„œ ์‹คํ–‰ํ•œ๋‹ค.

Context switch ํŒ๋‹จ ๊ธฐ์ค€

โ‡’ context switch๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”์ง€ ํŒ๋‹จํ•˜๋Š” ๊ธฐ์ค€์€ CPU ์ ์œ ๊ถŒ ๊ธฐ์ค€ ๋ณด๋‹ค ํ”„๋กœ์„ธ์Šค ๊ธฐ์ค€ ์œผ๋กœ ํŒ๋‹จํ•˜๋Š” ๊ฒƒ์ด ์˜ณ๋‹ค.

โ†’ CPU ์ ์œ ๊ถŒ์ด system call์ด๋‚˜ interrupt๋กœ ์ธํ•˜์—ฌ OS๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์€ context switch๋ฅผ ํŒ๋‹จํ•˜๋Š” ๊ธฐ์ค€์ด ๋˜๊ธฐ ํž˜๋“ค๋‹ค.

โ†’ Context, ์ฆ‰ ๋ฌธ๋งฅ ์ˆ˜ํ–‰ํ•˜๋˜ ํ”„๋กœ์„ธ์Šค A์—์„œ cpu ์ ์œ ๊ถŒ์ด ํ”„๋กœ์„ธ์Šค B๋กœ ๋„˜์–ด๊ฐ€๋ฉด ๋ฌธ๋งฅ์ด ๋ฐ”๋€ ๊ฒƒ.


Scheduler

โ‡’ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ž์›์„ ํ• ๋‹นํ• ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ์šด์˜์ฒด์ œ ์ปค๋„์˜ ์ฝ”๋“œ๋ฅผ ์ง€์นญํ•œ๋‹ค.

โ†’ ์žฅ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ(Job), ๋‹จ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ(CPU), ์ค‘๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ(Swapper)

  1. Long-Term Scheduler (์žฅ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ, job scheduler)
    • ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ๊ฐ์ข… ์ž์›์„ ์–ด๋–ค new ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ํ• ๋‹นํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์Šค์ผ€์ค„๋Ÿฌ
      • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ ์ค‘์ด๋‹ค๊ฐ€(new) ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ๋ฐ›์œผ๋ฉด ๋น„๋กœ์†Œ ready ์ƒํƒœ๊ฐ€ ๋˜์–ด ready queue์—์„œ ๋Œ€๊ธฐํ•œ๋‹ค. ์ด๋•Œ new ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š”๊ฒŒ long-term ์Šค์ผ€์ค„๋Ÿฌ์ด๋‹ค.
      • degree of multiprogramming ์ œ์–ด - ๋ฉ”๋ชจ๋ฆฌ์— ๋™์‹œ์— ์˜ฌ๋ผ๊ฐˆ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜๋ฅผ ์ œ์–ดํ•œ๋‹ค.
    • ๋ณดํ†ต์˜ ์‹œ๋ถ„ํ•  ์‹œ์Šคํ…œ์—์„œ ์žฅ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ ์—†์Œ
      • degree of multiprogramming ์ œ์–ด โ†’ ์ค‘๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ
  2. Short-Term Scheduler(๋‹จ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ, CPU ์Šค์ผ€์ค„๋Ÿฌ)
    • CPU ์ ์œ ๊ถŒ์„ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ํ• ๋‹นํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์Šค์ผ€์ค„๋Ÿฌ
      • ์Šค์ผ€์ค„๋ง์ด ์ผ์–ด๋‚˜๋Š” ๋‹จ์œ„๊ฐ€ ms โ†’ ์ž์ฃผ ์ผ์–ด๋‚จ
  3. Medium-Term Scheduler (์ค‘๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ, swapper)
    • ๋ฉ”๋ชจ๋ฆฌ์— ๋งŽ์€ ํ”„๋กœ๊ทธ๋žจ ๋™์‹œ์— ์˜ฌ๋ผ๊ฐˆ ๋•Œ โ†’ ์ค‘๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ swap out ์‹œํ‚ด
      • degree of multiprogramming ์ œ์–ด
        • ์ค‘๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋บด์•—๊ธด ํ”„๋กœ์„ธ์Šค Suspended state



Thread

โ‡’ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋ฐ›์€ ์ž์›์„ ์ด์šฉํ•˜๋Š” ์‹คํ–‰ ๋‹จ์œ„

โ†’ ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ ์‹œ kernel data ์˜์—ญ์— pcb๊ฐ€ ์ƒ์„ฑ๋˜๋Š”๋ฐ, ๋™์ผํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ์ฃผ์†Œ ๊ณต๊ฐ„ ๋‚ญ๋น„ ๋งŽ์•„์ง โ†’ ๊ทธ๋ž˜์„œ ๋™์ผ ๋‹จ์ˆœ ์ž‘์—…์€ thread๋กœ ํ•˜์ž

โ†’ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค has ํ•˜๋‚˜์˜ task + ์—ฌ๋Ÿฌ ๊ฐœ์˜ thread

  • cpu ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰์„ ์œ„ํ•ด์„œ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด์˜ ์œ„์น˜๋ฅผ ๋‹ด๋Š” pc๊ฐ’, ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์ด ํ•„์š” โ†’ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋ณ„๋„๋กœ pc, ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
  • thread๊ฐ€ code ๋ถ€๋ถ„์„ ์ˆ˜ํ–‰ํ•˜๋‹ค ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์ผ์–ด๋‚˜๋ฉด ํ•จ์ˆ˜์— ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ stack์— ์Œ“์•„๋‘”๋‹ค โ†’ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋ณ„๋„๋กœ stack ๊ฐ€์ง€๊ณ  ์žˆ์Œ (code, data์˜์—ญ์€ ์Šค๋ ˆ๋“œ๋ผ๋ฆฌ ๊ณต์œ )

โ‡’ PC๊ฐ’, ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’, Stack ์˜์—ญ per thread

โ‡’ code, data ์˜์—ญ shared



Multi-Process & Multi-Thread

Multi-Process

โ‡’ ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ž‘์—… ์ˆ˜ํ–‰

โ†’ ๊ฐ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ๋ถ„์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ๋…๋ฆฝ๋œ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ฐ€์ ธ์•ผ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.


Multi-Process ์žฅ์ 

  • ์•ˆ์ •์„ฑ
    • ๋…๋ฆฝ๋œ ๊ตฌ์กฐ๋กœ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š๋Š”๋‹ค.

Multi-Process ๋‹จ์ 

  • ์˜ค๋ฒ„ํ—ค๋“œ
    • ๋…๋ฆฝ๋œ ๋ฉ”๋ชจ๋ฆฌ ์˜์—ญ์ด๊ธฐ ๋•Œ๋ฌธ์— context switching์ด ์ž์ฃผ์ผ์–ด๋‚˜๋Š”๋ฐ, context switching๊ณผ์ •์—์„œ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ ์ดˆ๊ธฐํ™” ๋“ฑ ๋ฌด๊ฑฐ์šด ์ž‘์—…์ด ์ง„ํ–‰๋˜๊ณ  ์‹œ๊ฐ„ ์†Œ๋ชจ๊ฐ€ ํฌ๊ธฐ ๋•Œ๋ฌธ์— ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
  • ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ํ†ต์‹  ๋ฐฉ์‹์ด ๋”ฐ๋กœ ํ•„์š”ํ•˜๋‹ค(w/ ICPC)

Multi-Thread

โ‡’ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์— ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋กœ ์ž์›์„ ๊ณต์œ ํ•˜๋ฉฐ ์ž‘์—…์„ ๋‚˜๋ˆ„์–ด ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.


Multi-Thread ์žฅ์ 

  • ์‘๋‹ต์„ฑ
    • ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑ๋œ task ๊ตฌ์กฐ์—์„œ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ blocked ์ƒํƒœ์ธ ๋™์•ˆ์—๋„ ๋™์ผํ•œ task ๋‚ด์˜ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ running ์ƒํƒœ๋กœ ์‹คํ–‰๋˜์–ด ๋น ๋ฅธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๋กœ ์ˆ˜ํ–‰๋  ๋•Œ, ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์— ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ๊ฑธ์–ด blocked ์ƒํƒœ๊ฐ€ ๋˜์ง€๋งŒ(์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…), ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋Š” running ์ƒํƒœ์—์„œ ๋ฐ›์•„์˜ค๋Š” html ํŒŒ์ผ์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
  • ์ž์›๊ณต์œ 
    • ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์— CPU ์ˆ˜ํ–‰ ๋‹จ์œ„์ธ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋‘๊ฒŒ ๋˜๋ฉด code, data, resource ์ž์›์„ ๊ณต์œ ํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ์ž์› ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ๊ฒฝ์ œ์„ฑ
    • ๋™์ผํ•œ ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๊ฐ€ ํ˜‘๋ ฅํ•˜์—ฌ ๋†’์€ ์ฒ˜๋ฆฌ์œจ, ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
    • ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ ๋ณด๋‹ค ๊ธฐ์กด์˜ ํ”„๋กœ์„ธ์Šค์— ์“ฐ๋ ˆ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํ›จ์”ฌ ์ ๋‹ค.ย (์Šค๋ ˆ๋“œ ๊ฐ„์˜ Context Switching์€ ํ”„๋กœ์„ธ์Šค์˜ Context Switching๊ณผ ๋‹ฌ๋ฆฌ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ํ•„์š”๊ฐ€ ์—†๊ณ  Code, Data, Resource ์˜์—ญ์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ Stack ์˜์—ญ๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ)
  • ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์„œ ์•„ํ‚คํ…์ฒ˜์—์„œ์˜ ์ด์šฉ์„ฑ
    • Multi-Processer(CPU๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ) ์•„ํ‚คํ…์ณ์—์„œ ๊ฐ๊ฐ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ CPU์—์„œ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ›จ์”ฌ ํšจ์œจ์ ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

Multi-Thread ๋‹จ์ 

  • ์ž์›์„ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋™๊ธฐํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ (๋ณ‘๋ชฉํ˜„์ƒ, ๋ฐ๋“œ๋ฝ)
    • ๋™์ผํ•œ ์ž์›์— ๋Œ€ํ•˜์—ฌ ๋™์‹œ์— ์ž‘์—…์ด ๋“ค์–ด๊ฐ€๋Š” ๊ฒฝ์šฐ ๊ฐ ์Šค๋ ˆ๋“œ์˜ ๊ฒฐ๊ณผ์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ์ž„๊ณ„ ์˜์—ญ์— ๋Œ€ํ•˜์—ฌ ๋ฎคํ…์Šค(mutex), ๋˜๋Š” ์„ธ๋งˆํฌ์–ด(Semaphore) ๋ฐฉ์‹์„ ํ™œ์šฉํ•œ๋‹ค.
  • ํ•˜๋‚˜์˜ thread์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ „์ฒด ํ”„๋กœ์„ธ์Šค ์˜ํ–ฅ ๋ฐ›์Œ โ†”ย ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์˜ ๊ฒฝ์šฐ, ํ•œ ํ”„๋กœ์„ธ์Šค์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ๋„ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰์—๋Š” ์˜ํ–ฅ์ด ์—†๋‹ค.