Skip to content

Latest commit

ย 

History

History
522 lines (298 loc) ยท 26 KB

ProcessThread.md

File metadata and controls

522 lines (298 loc) ยท 26 KB

ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ

Process
Thread
Multi-Process & Multi-Thread
ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ
ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ˜‘๋ ฅ


Process

โ€œProcess is a program in executionโ€

ํ”„๋กœ์„ธ์Šค๋Š” ์‹คํ–‰์ค‘์— ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์˜๋ฏธํ•œ๋‹ค.

  • ๋””์Šคํฌ์— ์‹คํ–‰ ํŒŒ์ผ(exe ๋“ฑ)์˜ ํ˜•ํƒœ๋กœ ์กด์žฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์ด โ†’ ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋˜์–ด ์‹คํ–‰๋˜๊ธฐ ์‹œ์ž‘ํ•˜๋ฉด โ†’ ์ƒ๋ช…๋ ฅ์„ ๊ฐ€์ง„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋œ๋‹ค.

## ํ”„๋กœ์„ธ์Šค Context

ํ”„๋กœ์„ธ์Šค์˜ Context(๋ฌธ๋งฅ)

์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰์ค‘์ธ ์‹œ๋ถ„ํ•  ํ™˜๊ฒฝ์—์„œ ์ž์ฃผ CPU ์ ์œ ๊ถŒ์„ ๋นผ์•—๊ธฐ๊ณ  ํš๋“ํ•˜๊ฒŒ ๋œ๋‹ค. CPU ์ ์œ ๊ถŒ์„ ๋‹ค์‹œ ํš๋“ํ•œ ํ”„๋กœ์„ธ์Šค๋Š” ์ด์ „์˜ ์ƒํƒœ๋ฅผ ์žฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ •๋ณด๊ฐ€ ํ•„์š”ํ•œ๋ฐ, ๊ทธ ์ •๋ณด๋ฅผ ํ”„๋กœ์„ธ์Šค Context(๋ฌธ๋งฅ) ์ด๋ผ๊ณ  ํ•œ๋‹ค.

Untitled

ํ”„๋กœ์„ธ์Šค Context์—๋Š” ํฌ๊ฒŒ 3๊ฐ€์ง€๋กœ ๋‚˜๋‰œ๋‹ค.

  1. CPU์˜ ์ˆ˜ํ–‰ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•˜๋“œ์›จ์–ด ๋ฌธ๋งฅ (pc๊ฐ’, ๋ ˆ์ง€์Šคํ„ฐ ์ •๋ณด)

    ํ•˜๋“œ์›จ์–ด ๋ฌธ๋งฅ์ด๋ž€ CPU์˜ ์ˆ˜ํ–‰ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์ •๋ณด๋กœ์„œ, Program Counter ๊ฐ’๊ณผ ๊ฐ์ข… ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅํ•˜๊ณ  ์žˆ๋Š” ๊ฐ’๋“ค์„ ์˜๋ฏธํ•œ๋‹ค.

    Program Counter ๊ฐ’์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ช…๋ น์–ด๋ฅผ ์–ด๋”” ์ง€์ ๊นŒ์ง€ ์ˆ˜ํ–‰ํ–ˆ๋Š”์ง€ ๊ฐ€๋ฆฌํ‚ค๊ณ  ์žˆ๋‹ค.

  2. ํ”„๋กœ์„ธ์Šค์˜ ์ฃผ์†Œ ๊ณต๊ฐ„ (code, data, stack)

  3. ํ”„๋กœ์„ธ์Šค ๊ด€๋ จ ์ปค๋„ ์ž๋ฃŒ ๊ตฌ์กฐ (PCB, Kernel stack)

    PCB

    ์šด์˜ ์ฒด์ œ ์ปค๋„์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ์„œ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ํ• ๋‹นํ•  ์ž์›์„ ์„ค์ •ํ•˜๊ณ  ๊ฐ์‹œํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๋ฅผ PCB(Process Control Block)๋ผ ํ•œ๋‹ค.

    • ์šด์˜์ฒด์ œ๋Š” ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์ž์‹ (์ปค๋„)์˜ ๋ฐ์ดํ„ฐ ์˜์—ญ์— ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์˜ PCB๋ฅผ ๋‘”๋‹ค.

    Kernel stack

    ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์Šคํ…œ ์ฝœ์„ ํ•˜๋ฉด (ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ž‘์—…์„ ์š”์ฒญํ•˜๋ฉด) PC๊ฐ€ Kernel ์ฃผ์†Œ ๊ณต๊ฐ„์˜ code๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด๋•Œ, ํ•จ์ˆ˜ ํ˜ธ์ถœ์ด ์ด๋ค„์ง€๋ฉด ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ Kernel stack์— ์Œ“์•„๋‘”๋‹ค.

    • ์ปค๋„์€ ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์˜ ์‹œ์Šคํ…œ ์ฝœ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ๋ณ„๋„์˜ Kernel stack ๊ณต๊ฐ„์„ ๋‘”๋‹ค.

์ด์™€ ๊ฐ™์ด ํ”„๋กœ์„ธ์Šค Context ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด(=ํ”„๋กœ์„ธ์Šค์˜ ์ด์ „ ์ƒํƒœ๋ฅผ ์•Œ๊ณ  ์žˆ์œผ๋ฉด), ๋‹ค์Œ ์‹œ์ ์˜ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.


ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ โ†’ Running, Ready, Blocked

  • Running
    • CPU๋ฅผ ์žก๊ณ  ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ ์ค‘์ธ ์ƒํƒœ
  • Ready
    • ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋˜์–ด ๋ฐ”๋กœ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU ์ ์œ ๊ถŒ์„ ์–ป์ง€ ๋ชปํ•ด ๋Œ€๊ธฐ์ค‘์ธ ์ƒํƒœ (Ready ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์ด CPU ์ ์œ ๊ถŒ์„ ํš๋“ํ•˜๊ณ  ๋นผ์•—์œผ๋ฉด์„œ ์‹œ๋ถ„ํ•  ํ™˜๊ฒฝ์„ ๊ตฌ์„ฑํ•œ๋‹ค)
  • Blocked (Wait, Sleep)
    • CPU๋ฅผ ํ• ๋‹น๋ฐ›๋”๋ผ๋„ ๋‹น์žฅ ๋ช…๋ น์„ ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋Š” ์ƒํƒœ (IO ์ž‘์—…๊ณผ ๊ฐ™์ด ์š”์ฒญํ•œ event๊ฐ€ ๋ฐ”๋กœ ์ˆ˜ํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ๋ชปํ•  ๋•Œ ํ”„๋กœ์„ธ์Šค๋Š” Blocked ์ƒํƒœ๊ฐ€ ๋œ๋‹ค)
  • Suspended (Stopped)
    • ์™ธ๋ถ€์ ์ธ ์ด์œ ๋กœ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜ํ–‰์ด ์ •์ง€๋œ ์ƒํƒœ์ด๋‹ค. Suspended ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋Š” ํ†ต์งธ๋กœ ๋””์Šคํฌ์— swap out ๋œ๋‹ค. (์ค‘๊ธฐ ์Šค์ผ€์ฅด๋Ÿฌ์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋นผ์•—๊ธด ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ์ด๋‹ค)
      • ์‚ฌ์šฉ์ž๊ฐ€ ํ”„๋กœ๊ทธ๋žจ์„ ์ผ์‹œ ์ •์ง€์‹œํ‚ค๊ฑฐ๋‚˜, ์‹œ์Šคํ…œ์ด ๋ฉ”๋ชจ๋ฆฌ์— ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์ด ์˜ฌ๋ผ์™€ ์žˆ์–ด ์ž ์‹œ ์ค‘๋‹จ ์‹œํ‚ฌ ๊ฒฝ์šฐ Suspended ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
  • New : ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ ์ค‘์ธ ์ƒํƒœ
  • Terminated : ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜ํ–‰์ด ๋๋‚œ ์ƒํƒœ

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

Untitled

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

ํ”„๋กœ์„ธ์Šค ์ƒํƒœ ์ „ํ™˜ ์˜ˆ์‹œ : blocked์™€ queue

Untitled

  • CPU๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์‹คํ–‰ํ•œ๋‹ค. ์ด ๋•Œ timer interrupt๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋Š” Ready Queue ๋’ค๋กœ ๋“ค์–ด๊ฐ€ ready ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
  • ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU์ ์œ ๊ถŒ์„ ์–ป์–ด ์‹คํ–‰์ค‘์ธ running ์ƒํƒœ์˜€๋‹ค๊ฐ€, Disk IO ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด Disk IO Queue ๋’ค๋กœ ๋“ค์–ด๊ฐ€ blocked ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.
    • Disk IO ์ž‘์—…์ด ๋๋‚˜๋ฉด Disk Controller๊ฐ€ CPU์—๊ฒŒ Interrupt๋ฅผ ๋‚ ๋ ค ์ด๋ฅผ ์•Œ๋ฆฐ๋‹ค.
    • CPU๋Š” ์šด์˜์ฒด์ œ์—๊ฒŒ ์ด๋ฅผ ์•Œ๋ฆฌ๊ณ , ์šด์˜์ฒด์ œ๋Š” ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ ready ์ƒํƒœ๋กœ ๋ณ€ํ™˜์‹œํ‚ค๊ณ  Ready Queue ๋’ค์— ๋„ฃ๋Š”๋‹ค.
  • ํ•˜๋“œ์›จ์–ด ์ž์›๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์†Œํ”„ํŠธ์›จ์–ด ๊ณต์œ  ์ž์›(๋ฐ์ดํ„ฐ)๊ฐ€ ์žˆ๋‹ค.
    • ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊ณต์œ  ๋ฐ์ดํ„ฐ์— ๋™์‹œ์— ์ ‘๊ทผํ•˜๋ฉด ์ผ๊ด€์„ฑ์ด ๊นจ์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ์˜ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๊ณต์œ  ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•œ ํ”„๋กœ์„ธ์Šค๋Š” Resource Queue ๋’ค์— ๋“ค์–ด๊ฐ€ blocked ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. (๊ณต์œ  ๋ฐ์ดํ„ฐ๋ฅผ ์ ‘๊ทผํ•˜๋Š” ์ž‘์—…์ด ์˜ค๋ž˜๊ฑธ๋ฆด ๊ฒฝ์šฐ blocked ์ƒํƒœ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค)

์‚ฌ์‹ค queue๋Š” ์šด์˜์ฒด์ œ์˜ Kernel data ์˜์—ญ์—์„œ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„๋˜์–ด์žˆ๋‹ค.

Untitled


PCB

Untitled

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

  1. ์šด์˜์ฒด์ œ๊ฐ€ ๊ด€๋ฆฌ์ƒ ์‚ฌ์šฉํ•˜๋Š” ์ •๋ณด
  2. CPU ์ˆ˜ํ–‰ ๊ด€๋ จ ํ•˜๋“œ์›จ์–ด ๊ฐ’
  3. ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ จ ์ •๋ณด
  4. ํŒŒ์ผ ๊ด€๋ จ ์ •๋ณด

## ํ”„๋กœ์„ธ์Šค ๋ฌธ๋งฅ ๊ตํ™˜ (Context Switch)

Untitled

๋ฌธ๋งฅ ๊ตํ™˜ ์ด๋ž€ CPU ์ ์œ ๊ถŒ์ด ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ๋„˜์–ด๊ฐ€๋Š” ๊ณผ์ •์ด๋‹ค.

ํ”„๋กœ์„ธ์Šค๋Š” CPU ์ ์œ ๊ถŒ์„ ๋บ๊ธฐ๋˜ ์‹œ์ ์˜ ๋ฌธ๋งฅ์„ ๊ธฐ์–ตํ•ด๋‘์—ˆ๋‹ค๊ฐ€ CPU ์ ์œ ๊ถŒ์„ ๋‹ค์‹œ ํš๋“ํ–ˆ์„ ๋•Œ, ๊ธฐ์–ตํ•ด๋‘” ๋ฌธ๋งฅ์„ ์ด์šฉํ•˜์—ฌ ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค.

  1. CPU ์ ์œ ๊ถŒ์„ ๋นผ์•—๊ธฐ๋Š” ์ƒํ™ฉ

    ๋บ๊ธฐ๋˜ ์‹œ์ ์˜ ๋ฌธ๋งฅ์„ ๊ธฐ์–ตํ•˜๊ธฐ ์œ„ํ•ด ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์˜ PCB์—๋‹ค CPU์˜ PC๊ฐ’๊ณผ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ ์ €์žฅํ•ด๋‘”๋‹ค. (ํ”„๋กœ์„ธ์Šค์˜ PCB ์ •๋ณด๋Š” Kernel data์— ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ์ €์žฅ๋˜์–ด์žˆ๋‹ค)

  2. CPU ์ ์œ ๊ถŒ์„ ์–ป๋Š” ์ƒํ™ฉ

    ์šด์˜์ฒด์ œ๋Š” Kernel data์— ์ €์žฅ๋œ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์˜ PCB์—์„œ CPU์˜ PC๊ฐ’ ๋ฐ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ ๋ณต์›์‹œ์ผœ์ค€๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ์— CPU ์ ์œ ๊ถŒ์„ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋„˜๊ฒจ์ฃผ๋ฉด ์‹คํ–‰๋œ๋‹ค.


System call์ด๋‚˜ Interrupt๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ•ญ์ƒ Context Switch๊ฐ€ ๋ฐœ์ƒํ•˜๋Š”๊ฐ€? โ†’ NO!

Untitled

์‹œ์Šคํ…œ ์ฝœ ์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ณธ์ธ์ด ํ•„์š”ํ•œ ์ž‘์—…์„ ์šด์˜์ฒด์ œ์—๊ฒŒ ์š”์ฒญํ•˜๋Š” ๊ฒƒ์ด๊ณ , ์ธํ„ฐ๋ŸฝํŠธ ๋Š” Controller์™€ ๊ฐ™์€ ์žฅ์น˜๊ฐ€ CPU์—๊ฒŒ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ์ˆ˜๋‹จ์ด๋‹ค.

์‹œ์Šคํ…œ ์ฝœ์ด๋‚˜ ์ธํ„ฐ๋ŸฝํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด CPU ์ œ์–ด๊ถŒ์ด ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค โ†’ ์šด์˜์ฒด์ œ ์ปค๋„๋กœ ๋„˜์–ด๊ฐ„๋‹ค. ์ด ๋•Œ, ์œ ์ € ๋ชจ๋“œ์˜ ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค๊ฐ€ ์šด์˜์ฒด์ œ ์ปค๋„๋ชจ๋“œ๋กœ ์ „ํ™˜๋˜๋Š” ๊ฒƒ์„ ๋ฌธ๋งฅ ๊ตํ™˜์ด๋ผ๊ณ  ํ•˜์ง€ ์•Š๋Š”๋‹ค. (๋ฌธ๋งฅ ๊ตํ™˜์€ ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค์—์„œ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค๋กœ CPU ์ œ์–ด๊ถŒ์ด ๋„˜์–ด๊ฐ€๋Š” ๊ฒƒ์ด๋‹ค)

  • ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค A โ†’ ์šด์˜์ฒด์ œ ์ปค๋„ โ†’ ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค A : ๋ฌธ๋งฅ ๊ตํ™˜์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค.

    ๋ฌผ๋ก  ์ด ๊ฒฝ์šฐ์—๋„ CPU ๋ฌธ๋งฅ์˜ ์ผ๋ถ€๋ฅผ PCB์— ์ €์žฅํ•˜์ง€๋งŒ ๋ฌธ๋งฅ ๊ตํ™˜๋งŒํผ ๋ถ€๋‹ด์ด ํฌ์ง€ ์•Š๋‹ค

  • ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค A โ†’ ์šด์˜์ฒด์ œ ์ปค๋„ โ†’ ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค B : ๋ฌธ๋งฅ ๊ตํ™˜์ด ์ผ์–ด๋‚œ๋‹ค.

    ํ”„๋กœ์„ธ์Šค A๊ฐ€ ์‚ฌ์šฉํ•˜๋˜ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋ชจ๋‘ ์ง€์›Œ(flush)์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถ€๋‹ด์ด ํฌ๋‹ค

## ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ฅด๋ง๋ฅผ ์œ„ํ•œ ํ(Queue)

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

  1. Job Queue : ํ˜„์žฌ ์‹œ์Šคํ…œ ๋‚ด์— ์žˆ๋Š” ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค ์ง‘ํ•ฉ์ด๋‹ค. (Ready Queue, Device Queues๋ฅผ ํฌํ•จํ•œ๋‹ค)
  2. Ready Queue : ํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ์œผ๋ฉด์„œ CPU๋ฅผ ์žก์•„์„œ ์‹คํ–‰๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค€๋น„ ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค ์ง‘ํ•ฉ์ด๋‹ค.
  3. Device Queue : I/O ๋””๋ฐ”์ด์Šค์˜ ์ฒ˜๋ฆฌ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋ด‰์‡„ ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค ์ง‘ํ•ฉ์ด๋‹ค.

Untitled

๊ทธ๋ฆผ์œผ๋กœ ๋‚˜ํƒ€๋‚ธ Ready Queue๋ฅผ ์‹ค์ œ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋งž๊ฒŒ ๋‚˜ํƒ€๋‚ด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

Untitled


ํ”„๋กœ์„ธ์Šค ์Šค์ผ€์ฅด๋ง ํ

Untitled

  • ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘์ด ๋˜๋ฉด ready queue์—์„œ ๋Œ€๊ธฐํ•˜๋‹ค๊ฐ€ CPU ์ ์œ ๊ถŒ์„ ์–ป๊ฒŒ ๋œ๋‹ค.
  • CPU ์ ์œ ๊ถŒ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ฐ€
    • CPU ํ• ๋‹น ์‹œ๊ฐ„์ด ๋งŒ๋ฃŒ๋˜๋ฉด ๋‹ค์‹œ ready queue์—์„œ ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค.
    • ์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š” ์ž‘์—…(IO ์ž‘์—…)์„ ์ˆ˜ํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด, ํ•ด๋‹น ์ž‘์—… queue์—์„œ ๋Œ€๊ธฐํ•˜๋‹ค๊ฐ€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  โ†’ IO ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด Controller๊ฐ€ interrupt๋ฅผ ์ผ์œผ์ผœ CPU์—๊ฒŒ ์•Œ๋ฆฌ๋ฉด โ†’ ํ”„๋กœ์„ธ์Šค๋Š” ready queue์—์„œ CPU ์ ์œ ๋ฅผ ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค.

## ์Šค์ผ€์ฅด๋Ÿฌ

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

  1. Long-Term Scheduler (์žฅ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ or job scheduler)

    ๋ฉ”๋ชจ๋ฆฌ ๋ฐ ๊ฐ์ข… ์ž์›์„ ์–ด๋–ค new ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ํ• ๋‹นํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์Šค์ผ€์ฅด๋Ÿฌ์ด๋‹ค.

    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ ์ค‘์ด๋‹ค๊ฐ€(new) ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ๋ฐ›์œผ๋ฉด ๋น„๋กœ์†Œ ready ์ƒํƒœ๊ฐ€ ๋˜์–ด ready queue์—์„œ ๋Œ€๊ธฐํ•œ๋‹ค. ์ด ๋•Œ new ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š”๊ฒŒ Long-Term ์Šค์ผ€์ฅด๋Ÿฌ์ด๋‹ค.
    • degree of Multiprogramming ์ œ์–ด : ๋ฉ”๋ชจ๋ฆฌ์— ๋™์‹œ์— ์˜ฌ๋ผ๊ฐˆ ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜๋ฅผ ์ œ์–ดํ•œ๋‹ค.

    ๋ณดํ†ต ์šฐ๋ฆฌ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ์‹œ๋ถ„ํ•  ์‹œ์Šคํ…œ์—์„œ๋Š” ์žฅ๊ธฐ ์Šค์ผ€์ฅด๋Ÿฌ๊ฐ€ ์—†๋‹ค. (new ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋Š” ๊ณง๋ฐ”๋กœ ready ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.) ๊ทธ๋ ‡๋‹ค๋ฉด ์‹œ๋ถ„ํ•  ์‹œ์Šคํ…œ์—์„œ๋Š” degree of Multiprogramming ์ œ์–ด๋ฅผ ์–ด๋–ป๊ฒŒ ํ• ๊นŒ? โ†’ ์ค‘๊ธฐ ์Šค์ผ€์ฅด๋Ÿฌ๋ฅผ ์ด์šฉํ•œ๋‹ค.

  2. Short-Term Scheduler (๋‹จ๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ or CPU scheduler)

    CPU ์ ์œ ๊ถŒ์„ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ํ• ๋‹นํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์Šค์ผ€์ฅด๋Ÿฌ์ด๋‹ค.

    • ์Šค์ผ€์ฅด๋ง์ด ์ผ์–ด๋‚˜๋Š” ๋‹จ์œ„๊ฐ€ milisecond๋กœ ๊ต‰์žฅํžˆ ์ž์ฃผ ์ผ์–ด๋‚œ๋‹ค.
  3. Medium-Term Scheduler (์ค‘๊ธฐ ์Šค์ผ€์ค„๋Ÿฌ or Swapper)

    ๋ฉ”๋ชจ๋ฆฌ์— ๋งŽ์€ ํ”„๋กœ๊ทธ๋žจ์ด ๋™์‹œ์— ์˜ฌ๋ผ๊ฐ€๊ฒŒ ๋˜๋ฉด ์ค‘๊ธฐ ์Šค์ผ€์ฅด๋Ÿฌ๊ฐ€ ์ผ๋ถ€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ณจ๋ผ๋‚ด์–ด ๋””์Šคํฌ๋กœ ์ซ“์•„๋‚ธ๋‹ค(ํ”„๋กœ์„ธ์Šค์—๊ฒŒ์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋นผ์•—๋Š”๋‹ค). โ†’ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์œผ๋กœ degree of Multiprogramming ์ œ์–ด๋ฅผ ํ•˜์—ฌ ๋ฉ”๋ชจ๋ฆฌ์— ๋™์‹œ์— ์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜๋ฅผ ์กฐ์ ˆํ•œ๋‹ค.

    ์ค‘๊ธฐ ์Šค์ผ€์ฅด๋Ÿฌ์— ์˜ํ•ด ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋นผ์•—๊ธด ํ”„๋กœ์„ธ์Šค๋Š” Suspended ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.


Blocked ์ƒํƒœ์™€ Suspended ์ƒํƒœ์˜ ์ฐจ์ด์ 

Blocked์ƒํƒœ๋Š” ํ”„๋กœ์„ธ์Šค ๋ณธ์ธ์ด ์š”์ฒญํ•œ ์ด๋ฒคํŠธ(IO ์ž‘์—…)๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค์ด๋‹ค. Blocked ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋Š” ์ด๋ฒคํŠธ ์ˆ˜ํ–‰์„ ๋งˆ์น˜๋ฉด Ready ์ƒํƒœ๋กœ ๋ณ€ํ™˜๋œ๋‹ค. (ํ”„๋กœ์„ธ์Šค ์ž…์žฅ์—์„œ๋Š” ๊ณ„์† ํŠน์ •ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰์ค‘์ด๋‹ค)

Suspended์ƒํƒœ๋Š” CPU ๋˜๋Š” ์™ธ๋ถ€(์‚ฌ๋žŒ ๋˜๋Š” ์ค‘๊ธฐ ์Šค์ผ€์ฅด๋Ÿฌ)์—์„œ๋ถ€ํ„ฐ ๊ฐ•์ œ๋กœ ์ •์ง€ ๋‹นํ–ˆ์„ ๋•Œ์˜ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ์ด๋‹ค. Suspended ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋นผ์•—๊ฒจ ๋””์Šคํฌ๋กœ swap out์ด ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์™ธ๋ถ€(์‚ฌ๋žŒ)์—์„œ resumeํ•ด์ค˜์•ผ active(Running, Ready)ํ•œ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

Untitled

  • Running (user mode), Running (monitor mode)

    ์‹œ์Šคํ…œ ์ฝœ์„ ํ•œ ์œ ์ €๋ชจ๋“œ์˜ ํ”„๋กœ์„ธ์Šค๋Š” ์ปค๋„ ๋ชจ๋“œ๋กœ ์ „ํ™˜๋˜์–ด ํ•ด๋‹น ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์œ ์ € ๋ชจ๋“œ์—์„œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ Running(user mode), ์ปค๋„ ๋ชจ๋“œ๋กœ ์ „ํ™˜๋˜์–ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ Running(moitor mode)๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.

    Untitled

  • Suspeded Blocked, Suspended Ready

    ํ”„๋กœ์„ธ์Šค๊ฐ€ IO ์ž‘์—…์ค‘์ด๋ผ Blocked ์ƒํƒœ์ผ ๋•Œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋นผ์•—๊ฒจ ๋””์Šคํฌ๋กœ swap out ๋˜์—ˆ๋‹ค๋ฉด Suspended Blocked ์ƒํƒœ๊ฐ€ ๋œ๋‹ค. IO ์ž‘์—…์„ ๋งˆ์น˜๋ฉด Suspended Ready ์ƒํƒœ๋กœ ์ „ํ™˜๋œ๋‹ค.

    • Swap Out : ๋ฉ”๋ชจ๋ฆฌ โ†’ ๋””์Šคํฌ
    • Swap In : ๋””์Šคํฌ โ†’ ๋ฉ”๋ชจ๋ฆฌ

Thread

์Šค๋ ˆ๋“œ๋ผ๋Š” ๊ฐœ๋…์ด ์—†๋‹ค๋ฉด...?

Untitled

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ํ”„๋กœ์„ธ์Šค๋งŒ์˜ ์ฃผ์†Œ ๊ณต๊ฐ„๊ณผ Kernel data ์˜์—ญ์— ํ”„๋กœ์„ธ์Šค ์ •๋ณด์ธ PCB๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.

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


์Šค๋ ˆ๋“œ๋ž€

"A Thread (or lightweight process) is a basic unit of CPU utilizationโ€

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

Untitled

ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜์— CPU ์ˆ˜ํ–‰ ๋‹จ์œ„๋งŒ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ๋‘์—ˆ์„ ๋•Œ, ๊ทธ ๊ฐ๊ฐ์„ ์Šค๋ ˆ๋“œ๋ผ๊ณ  ํ•œ๋‹ค.

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

์Šค๋ ˆ๋“œ์˜ ๊ตฌ์„ฑ

  • CPU ์ˆ˜ํ–‰๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด(PC๊ฐ’, ๋ ˆ์ง€์Šคํ„ฐ๊ฐ’)
  • ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ๊ด€๋ จ ์ •๋ณด๋ฅผ ๋‹ด์•„๋‘˜ stack ์˜์—ญ

์ฆ‰, ์ด ๊ฐ’๋“ค์€ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋…๋ฆฝ์ ์œผ๋กœ ๊ฐ€์ง€๋Š” ์ •๋ณด์ด๋‹ค.

์Šค๋ ˆ๋“œ๋ผ๋ฆฌ ๊ณต์œ ํ•˜๋Š” ๋ถ€๋ถ„ = task

  • code, data ์˜์—ญ
  • OS ์ž์›

ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ์žˆ๊ณ  ํ•˜๋‚˜์˜ task๋งŒ ์กด์žฌํ•œ๋‹ค.


Multi-Process & Multi-Thread

## Multi-Process

ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ”„๋กœ์„ธ์Šค๋กœ ๊ตฌ์„ฑํ•˜์—ฌ ๊ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๊ฐ ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ๋ถ„์ด ํ•„์š”ํ•˜๊ฑฐ๋‚˜ ๋…๋ฆฝ๋œ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ฐ€์ ธ์•ผ ํ•  ๊ฒฝ์šฐ ์‚ฌ์šฉํ•œ๋‹ค.

### ์žฅ์ 

  1. ์•ˆ์ „์„ฑ

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

### ๋‹จ์ 

  1. ์˜ค๋ฒ„ํ—ค๋“œ

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

  2. ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ํ†ต์‹  ๋ฐฉ์‹์ด ๋”ฐ๋กœ ํ•„์š”ํ•˜๋‹ค โ†’ IPC

    ํ”„๋กœ์„ธ์Šค ๊ฐ„์—๋Š” ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์ด ์›์น™์ ์œผ๋กœ ์ œํ•œ๋˜์–ด ์žˆ๋‹ค. ํ”„๋กœ์„ธ์Šค๋งˆ๋‹ค ๋…๋ฆฝ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ณ , CPU๊ฐ€ ์ฝ˜ํ…์ŠคํŠธ ์Šค์œ„์นญ์„ ์ˆ˜์‹œ๋กœ ํ•˜๋Š”๋ฐ, ํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•ด์„œ ๊ฐ’์„ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ์ฃผ์†Œ๋ฅผ ๋ณ€๊ฒฝํ•ด๋ฒ„๋ฆฌ๋ฉด ํ•ดํ‚น์ด๋‚˜ ๋‹ค๋ฆ„์—†๋Š” ๊ฒƒ์ด๋‹ค.

    ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋ณ„๋„์˜ ํ†ต์‹ ์ด ํ•„์š”ํ•œ ๋•Œ๊ฐ€ ์žˆ๋Š”๋ฐ IPC(Inter-Process Communication) ์ด๋ผ๋Š” ํ†ต์‹ ์„ ํ™œ์šฉํ•œ๋‹ค.

    • file ๊ณต์œ ํ•˜๊ธฐ

      ํ”„๋กœ์„ธ์Šค ๊ฐ„ ์ €์žฅ๋งค์ฒด๋Š” ๊ณต์œ ํ•˜๋ฏ€๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‚˜, ์‹œ์Šคํ…œ์ฝœ ๋“ฑ๋“ฑ ๊ฑฐ์น˜๊ธฐ์—๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

    • ๋ฉ”์‹œ์ง€ ํ

      ํ‚ค๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์–‘๋ฐฉํ–ฅ ํ†ต์‹ ์„ ํ•จ

    • shared memory

      ์ปค๋„์— ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ•˜๋‚˜ ํŒŒ๊ณ , ์ฝ๊ณ  ์“ฐ๋Š” ๋ณ€์ˆ˜๋ฅผ ํ•˜๋‚˜ ์ง€์ •ํ•จ

    • ํŒŒ์ดํ”„

      fork()ํ•ด์„œ ์ƒ์„ฑํ•œ ๋ถ€๋ชจ/์ž์‹ ๊ด€๊ณ„์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ๊ฒฝ์šฐ์— ๋‹จ๋ฐฉํ–ฅ์œผ๋กœ ํ†ต์‹ ํ•˜์—ฌ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•˜๋‹ค.

    • signal

      ์ปค๋„ ๋ชจ๋“œ์—์„œ ์‚ฌ์šฉ์ž๋ชจ๋“œ ์ „ํ™˜ ์‹œ, ํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์ด๋ฒคํŠธ๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

    • ์„ธ๋งˆํฌ์–ด

      ์Šค๋ ˆ๋“œ์—์„œ ์ž„๊ณ„์˜์—ญ์— ๋Œ€ํ•œ ์ ‘๊ทผ์„ ์ผ์‹œ์ ์œผ๋กœ ๋ฝํ•˜๊ธฐ ์œ„ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜7. ์†Œ์ผ“ - ๋„คํŠธ์›Œํฌ ํ†ต์‹ ์— ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.


## Multi-Thread

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

### ์žฅ์ 

  1. ์‘๋‹ต์„ฑ (Responsiveness)

    • ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑ๋œ task ๊ตฌ์กฐ์—์„œ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ blocked ์ƒํƒœ์ธ ๋™์•ˆ์—๋„ ๋™์ผํ•œ task ๋‚ด์˜ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ running ์ƒํƒœ๋กœ ์‹คํ–‰๋˜์–ด ๋น ๋ฅธ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
      • ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๋กœ ์ˆ˜ํ–‰๋  ๋•Œ, ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋Š” ์ด๋ฏธ์ง€๋ฅผ ๋‹ค์šด๋กœ๋“œํ•˜๊ธฐ ์œ„ํ•ด ์„œ๋ฒ„์— ๋„คํŠธ์›Œํฌ ์š”์ฒญ์„ ๊ฑธ์–ด blocked ์ƒํƒœ๊ฐ€ ๋˜์ง€๋งŒ(์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…), ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋Š” running ์ƒํƒœ์—์„œ ๋ฐ›์•„์˜ค๋Š” html ํŒŒ์ผ์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•ด์ค„ ์ˆ˜ ์žˆ๋‹ค.
  2. ์ž์› ๊ณต์œ  (Resource Sharing)

    ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์— CPU ์ˆ˜ํ–‰ ๋‹จ์œ„์ธ ์“ฐ๋ ˆ๋“œ๋ฅผ ๋‘๊ฒŒ ๋˜๋ฉด code, data, resource ์ž์›์„ ๊ณต์œ ํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ์ž์› ํ™œ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

  3. ๊ฒฝ์ œ์„ฑ (Ecomony)

    • ๋™์ผํ•œ ์ผ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๊ฐ€ ํ˜‘๋ ฅํ•˜์—ฌ ๋†’์€ ์ฒ˜๋ฆฌ์œจ, ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
    • ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ ๋ณด๋‹ค ๊ธฐ์กด์˜ ํ”„๋กœ์„ธ์Šค์— ์“ฐ๋ ˆ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ํ›จ์”ฌ ์ ๋‹ค. (์Šค๋ ˆ๋“œ ๊ฐ„์˜ Context Switching์€ ํ”„๋กœ์„ธ์Šค์˜ Context Switching๊ณผ ๋‹ฌ๋ฆฌ ์บ์‹œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ํ•„์š”๊ฐ€ ์—†๊ณ  Code, Data, Resource ์˜์—ญ์„ ๊ณต์œ ํ•˜๋ฏ€๋กœ Stack ์˜์—ญ๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ)
  4. ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์„œ ์•„ํ‚คํ…์ฒ˜์—์„œ์˜ ์ด์šฉ์„ฑ (Utilization of MP Architectures)

    Multi-Processer(CPU๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ) ์•„ํ‚คํ…์ณ์—์„œ ๊ฐ๊ฐ์˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ CPU์—์„œ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ž‘์—…์„ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ›จ์”ฌ ํšจ์œจ์ ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

### ๋‹จ์ 

  1. ์ž์›์„ ๊ณต์œ ํ•˜๊ธฐ์— ๋™๊ธฐํ™” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. (๋ณ‘๋ชฉํ˜„์ƒ, ๋ฐ๋“œ๋ฝ ๋“ฑ)

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

  2. ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด ์ „์ฒด ํ”„๋กœ์„ธ์Šค๊ฐ€ ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค

    ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์˜ ๊ฒฝ์šฐ, ํ•œ ํ”„๋กœ์„ธ์Šค์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ๋„ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰์—๋Š” ์˜ํ–ฅ์ด ์—†๋‹ค.


## ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €๋Š” Multi-Process & Multi-Thread ํ™˜๊ฒฝ์ด๋‹ค.

ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ ธ๋Š” ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค๋ฅผ ํ•˜๋ฉด์„œ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋ฅผ ํ•œ๋‹ค.

  • ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค

    ๊ฐ๊ฐ์˜ ํƒญ๋“ค์€ ํ”„๋กœ์„ธ์Šค์ด๋‹ค. ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•œ๋ฒˆ์— ์‹คํ–‰๋œ๋‹ค. ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฃฝ๋”๋ผ๋„ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋Š” ์‚ด์•„์žˆ๋‹ค.๋˜ํ•œ ์„œ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ

    ๊ฐ ํŽ˜์ด์ง€์•ˆ์—์„œ ํ•œ๋ฒˆ์— ์—ฌ๋Ÿฌ ์ผ์„ ํ•œ๋‹ค. ํ•˜๋‚˜์˜ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๋๋‚˜์ง€ ์•Š์•˜๋Š”๋ฐ ๋‹ค๋ฅธ ๋‹ค์šด๋กœ๋“œ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฏธ์ง€ ๋กœ๋”ฉ์ด ๋๋‚˜์ง€ ์•Š์•„๋„ ๊ทธ ๋‹ค์Œ ๊ธ€๋“ค์˜ ๋กœ๋”ฉ์ด ๋˜์–ด ์žˆ๋‹ค.


ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ

ํ”„๋กœ์„ธ์Šค ๊ด€๋ฆฌ

## ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ

  • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. (์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ง์ ‘ ์ƒ์„ฑํ•˜์ง€ ๋ชปํ•˜๊ณ  fork ๋ผ๋Š” ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด ์šด์˜์ฒด์ œ์—๊ฒŒ ์š”์ฒญ์„ ํ•œ๋‹ค)
    • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค ๊ฐ„์—๋Š” ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ๊ณ„์ธต ๊ตฌ์กฐ๊ฐ€ ํ˜•์„ฑ๋œ๋‹ค. (์ตœ์ดˆ์˜ ํ”„๋กœ์„ธ์Šค โ†’ ์ž์‹ ํ”„๋กœ์„ธ์Šค1 โ†’ ์ž์‹ 2 ...)
  • ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ํ•„์š”ํ•œ ์ž์›์„ ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ๋ฐ›๊ฑฐ๋‚˜ ๋ถ€๋ชจ์™€ ๊ณต์œ ํ•œ๋‹ค.
  • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์„œ๋กœ ๊ณต์กดํ•˜๋ฉฐ ์ˆ˜ํ–‰๋˜๋Š” ๋ชจ๋ธ์ด ์žˆ๊ณ , ์ž์‹์ด ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋ถ€๋ชจ๊ฐ€ ๊ธฐ๋‹ค๋ฆฌ๋Š”(wait, blocked) ๋ชจ๋ธ์ด ์žˆ๋‹ค.
  • ์ž์‹ ํ”„๋กœ์„ธ์Šค๋งŒ์˜ ๋…์ž์ ์ธ ์ฃผ์†Œ ๊ณต๊ฐ„์ด ๋งŒ๋“ค์–ด์ง„๋‹ค
    • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ ์ฃผ์†Œ ๊ณต๊ฐ„(code, data, stack)์„ ๋ณต์‚ฌํ•œ๋‹ค. ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ ์ƒํƒœ๊ฐ€ ๊ทธ๋Œ€๋กœ ๋ณต์‚ฌ๋˜๋Š” ๊ฒƒ์ด๋‹ค.
    • ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ๋ณต์ œ๋œ ๊ทธ ๊ณต๊ฐ„์— ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ์˜ฌ๋ ค ์‹คํ–‰ํ•œ๋‹ค. (fork ๋กœ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“ค๊ณ , ๋งŒ๋“ค์–ด์ง„ ์ž์‹ ํ”„๋กœ์„ธ์Šค์— ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ๋ฎ์–ด์”Œ์›Œ ์‹คํ–‰์‹œํ‚ค๊ธฐ ์œ„ํ•ด exec ์‹œ์Šคํ…œ ์ฝœ์„ ์ด์šฉํ•œ๋‹ค)

fork ์‹œ์Šคํ…œ ์ฝœ

Untitled

fork() ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ˆœ๊ฐ„ ๋˜‘๊ฐ™์€ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ƒˆ๋กœ ์ƒ๊ธด๋‹ค.

Untitled

fork() ๋ฅผ ์ฒ˜์Œ ์‹คํ–‰ํ•œ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋Š” ๊ทธ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋Š” ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์˜ ์ฃผ์†Œ ๊ณต๊ฐ„๊ณผ PC๊ฐ’์„ ๋ณต์ œํ•˜์˜€๊ธฐ ๋•Œ๋ฌธ์— main ํ•จ์ˆ˜ ์‹œ์ž‘๋ถ€ํ„ฐ ์‹คํ–‰๋˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์™€ ๋˜‘๊ฐ™์ด ๊ทธ ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๊ฒŒ ๋œ๋‹ค.

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


exec ์‹œ์Šคํ…œ ์ฝœ

Untitled

execlp ๋ผ๋Š” exec ์‹œ์Šคํ…œ ์ฝœ์ด ์ˆ˜ํ–‰๋˜๋ฉด, ํ˜„์žฌ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ execlp ์— ์˜ํ•ด ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์œผ๋กœ ๋ฎํ˜€์”Œ์›Œ์ง„๋‹ค. ๊ทธ๋Ÿฌ๋ฉด execlp ์‹œ์Šคํ…œ ์ฝœ ์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๊ณ  ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋œ๋‹ค.

์ด๋ ‡๋“ฏ exec ์‹œ์Šคํ…œ ์ฝœ์€ ์ž์‹ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ๋ฎ์–ด์”Œ์šธ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. (pid==0 : ์ž์‹์—๊ฒŒ๋Š” execlp๋กœ ์ƒˆ๋กœ์šด ํ”„๋กœ๊ทธ๋žจ์„ ๋Œ๋ฆฌ๊ณ , pid>0 : ๋ถ€๋ชจ๋Š” ๋ณธ์ธ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.)


## ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ข…๋ฃŒ๋  ๋•Œ๋Š” exit ์‹œ์Šคํ…œ ์ฝœ์„ ํ†ตํ•ด ์šด์˜์ฒด์ œ์—๊ฒŒ ์ด๋ฅผ ์•Œ๋ฆฐ๋‹ค.

  • ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๋Š” ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ output data๋ฅผ ๋ณด๋‚ด ์ด๋ฅผ ์•Œ๋ฆฐ๋‹ค. wait ์‹œ์Šคํ…œ ์ฝœ

๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ•์ œ ์ข…๋ฃŒ์‹œํ‚ฌ ๋•Œ๋Š” abort ์‹œ์Šคํ…œ ์ฝœ์„ ์ด์šฉํ•œ๋‹ค.

  • ์ž์‹์ด ํ• ๋‹น ์ž์›์˜ ํ•œ๊ณ„์น˜๋ฅผ ๋„˜์–ด์„ค ๊ฒฝ์šฐ
  • ์ž์‹์—๊ฒŒ ํ• ๋‹น๋œ Task๊ฐ€ ๋”์ด์ƒ ํ•„์š”ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ
  • ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋จผ์ € ์ข…๋ฃŒ(exit)๋˜๋Š” ๊ฒฝ์šฐ ์ž์‹์„ ๋จผ์ € ์ฃฝ์ด๊ณ  ๋ถ€๋ชจ๊ฐ€ ์ข…๋ฃŒ๋œ๋‹ค.

wait ์‹œ์Šคํ…œ ์ฝœ

Untitled

๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ fork๋กœ ์ž์‹์„ ์ƒ์„ฑํ•œ ๋‹ค์Œ ๋ถ€๋ชจ๊ฐ€ wait ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•˜๋ฉด โ†’ ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋Š” Blocked์ƒํƒœ๊ฐ€ ๋œ๋‹ค. (์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์ด๋‹ˆ๊นŒ Blocked ์ƒํƒœ)

์ดํ›„์— ์ž์‹ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๋Š” Ready ์ƒํƒœ๋กœ ์ „ํ™˜๋œ๋‹ค.


exit ์‹œ์Šคํ…œ ์ฝœ

ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž๋ฐœ์ ์œผ๋กœ ์ข…๋ฃŒ์‹œํ‚ค๋Š” ์‹œ์Šคํ…œ ์ฝœ์ด๋‹ค. exit ์‹œ์Šคํ…œ ์ฝœ๋กœ ์ข…๋ฃŒ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ โ€œ์ž๋ฐœ์  ์ข…๋ฃŒโ€๋ผ๊ณ  ํ•œ๋‹ค.

๋ฐ˜๋ฉด์— โ€œ๋น„์ž๋ฐœ์  ์ข…๋ฃŒโ€๋Š” ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฐ•์ œ ์ข…๋ฃŒ์‹œํ‚ค๋Š” ๊ฒฝ์šฐ, ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋Š” ๊ฒฝ์šฐ, ํ‚ค๋ณด๋“œ๋กœ break key๋ฅผ ๋ˆ„๋ฅธ ๊ฒฝ์šฐ์ด๋‹ค.


ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ˜‘๋ ฅ

ํ”„๋กœ์„ธ์Šค ๊ฐ„ ํ˜‘๋ ฅ ๋ฉ”์ปค๋‹ˆ์ฆ˜ : IPC (Interprocess Communication)

๐Ÿ“Œ Message Passing

Untitled

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


Message Passing ๋ฐฉ์‹์€ ํฌ๊ฒŒ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค

  1. Direct Communication

    ํ†ต์‹ ํ•˜๋ ค๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ด๋ฆ„์„ ๋ช…์‹œ์ ์œผ๋กœ ํ‘œ์‹œํ•˜์—ฌ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

    Untitled

  2. Indirect Communication

    mailbox ๋˜๋Š” port๋ฅผ ํ†ตํ•ด ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ„์ ‘์ ์œผ๋กœ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. (ํ”„๋กœ์„ธ์Šค๊ฐ€ mailbox์— ๋ฉ”์‹œ์ง€๋ฅผ ์ง‘์–ด๋„ฃ์œผ๋ฉด, ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๊บผ๋‚ด ๋ณธ๋‹ค. ํŠน์ • ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์—†๋‹ค)

    Untitled


๐Ÿ“Œ Shared Memory

Untitled

์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ฃผ์†Œ ๊ณต๊ฐ„์˜ ์ผ๋ถ€๋ฅผ ๊ณต์œ ํ•˜์—ฌ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์›์น™์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋“ค์€ ๊ฐ์ž ์ž์‹ ์˜ ์ฃผ์†Œ ๊ณต๊ฐ„๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  shared memory ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋ถ€ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค. (์ฒ˜์Œ์—๋Š” Kernel์—๊ฒŒ ์š”์ฒญ์„ ํ•˜์—ฌ shared memory๋ฅผ ํ• ๋‹น ๋ฐ›์•„์•ผ ํ•œ๋‹ค.)

shared memory ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค ๊ฐ„ ๋™๊ธฐํ™” ๋ฌธ์ œ๋ฅผ ์Šค์Šค๋กœ ์ฑ…์ž„์ ธ์•ผ ํ•œ๋‹ค.


์ฐธ๊ณ 

๋ฐ˜ํšจ๊ฒฝ ๊ต์ˆ˜๋‹˜ ์šด์˜์ฒด์ œ ๊ฐ•์˜

https://steady-coding.tistory.com/522

๋ฉ€ํ‹ฐ-ํ”„๋กœ์„ธ์Šค์™€-๋ฉ€ํ‹ฐ-์Šค๋ ˆ๋“œ

๋ฉด์ ‘ ์˜ˆ์ƒ ์งˆ๋ฌธ

ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”? (Context, Context Switching, Blocked ์ƒํƒœ์™€ Suspended ์ƒํƒœ ์ฐจ์ด)

์Šค์ผ€์ฅด๋Ÿฌ์— ๋Œ€ํ•ด ์•„์‹œ๋‚˜์š”? (์Šค์ผ€์ฅด๋Ÿฌ ์ข…๋ฅ˜)

์Šค๋ ˆ๋“œ๊ฐ€ ๋ฌด์—‡์ธ๊ฐ€์š”?

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค, ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์˜ ์žฅ๋‹จ์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด๋ณด์„ธ์š”

IPC์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด๋ณด์„ธ์š”