CS/์šด์˜์ฒด์ œ

[์šด์˜์ฒด์ œ] ch03. Process

rngPwns 2025. 4. 21. 08:57

๐Ÿ“Œ ๊ทธ๋ฆผ ์ „์ฒด ์„ค๋ช…

  • ์ด ๊ทธ๋ฆผ์€ .exe ์‹คํ–‰ํŒŒ์ผ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์ ์žฌ๋˜๊ณ ,
  • ๊ทธ ์ฝ”๋“œ๊ฐ€ CPU์— ์˜ํ•ด fetch โ†’ decode โ†’ execute ๋˜๋Š” ํ๋ฆ„์„ ์„ค๋ช…ํ•˜๊ณ  ์žˆ์–ด.

๐Ÿง  ์ „์ฒด ํ๋ฆ„ ๋‹จ๊ณ„๋ณ„ ์„ค๋ช…

โ‘  ์‹คํ–‰ํŒŒ์ผ a.exe๊ฐ€ DRAM(๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ)์— ์ ์žฌ

  • ์˜ˆ: a.exe (์ฃผ์†Œ: 0x452320)
  • โœ๏ธ ํ•„๊ธฐ: "memory โ† a.exe ์ ์žฌ๋จ"

โ‘ก **์ฝ”๋“œ(Code ์˜์—ญ)**๊ฐ€ DRAM ๋‚ด์— ์œ„์น˜ํ•จ

  • ์ฝ”๋“œ ์˜์—ญ์€ Read-only, ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด๋“ค์ด ์ €์žฅ๋จ

โ‘ข CPU๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ช…๋ น์–ด fetch

  • CPU ๋‚ด๋ถ€ ๊ตฌ์กฐ์—์„œ:
    • Program Counter(PC): ํ˜„์žฌ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด ์ฃผ์†Œ ์ €์žฅ
    • Instruction Register(IR): ๋ช…๋ น์–ด ๋ณด๊ด€ ํ›„ decode
  • โœ๏ธ ํ•„๊ธฐ: โ€œCPU fetch โ†’ decode โ†’ execute ์ˆœ์„œ๋กœ ๋ช…๋ น ์ฒ˜๋ฆฌโ€

โ‘ฃ Kernel ์˜์—ญ์€ ๋ณ„๋„ ๊ด€๋ฆฌ

  • ์ปค๋„ ์ฝ”๋“œ๋Š” ์‚ฌ์šฉ์ž ์˜์—ญ๊ณผ ๋ถ„๋ฆฌ๋˜์–ด ๋ณดํ˜ธ๋จ

โœ… ์•”๊ธฐ ํฌ์ธํŠธ ์š”์•ฝ

  • ์‹คํ–‰ํŒŒ์ผ(.exe)์€ DRAM(๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ)์— ์ ์žฌ๋œ๋‹ค
  • ์ฝ”๋“œ ์˜์—ญ์€ read-only๋กœ, CPU๊ฐ€ ๋ช…๋ น์–ด๋ฅผ fetchํ•˜๋Š” ๋Œ€์ƒ์ด๋‹ค
  • CPU๋Š” fetch โ†’ decode โ†’ execute ์ˆœ์„œ๋กœ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•œ๋‹ค
  • Program Counter๋Š” ๋‹ค์Œ ๋ช…๋ น์–ด ์ฃผ์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋ฉฐ, IR์— ๋ช…๋ น์–ด๊ฐ€ ๋กœ๋“œ๋˜์–ด ์‹คํ–‰๋œ๋‹ค

๐Ÿ’ก ๋ณด์ถฉ ์„ค๋ช…: ์‹คํ–‰ ํ๋ฆ„ ์ •๋ฆฌ

๋‹จ๊ณ„์„ค๋ช…
1๋‹จ๊ณ„ ์‹คํ–‰ํŒŒ์ผ a.exe๊ฐ€ ํŒŒ์ผ ์‹œ์Šคํ…œ์—์„œ DRAM์œผ๋กœ ๋กœ๋“œ๋จ
2๋‹จ๊ณ„ DRAM ๋‚ด ์ฝ”๋“œ ์˜์—ญ์— ๋ช…๋ น์–ด ์ €์žฅ๋จ
3๋‹จ๊ณ„ CPU์˜ PC๊ฐ€ ํ•ด๋‹น ์ฃผ์†Œ ๊ฐ€๋ฆฌํ‚ค๊ณ  โ†’ fetch
4๋‹จ๊ณ„ IR๋กœ ๋ช…๋ น์–ด ์ „๋‹ฌ โ†’ decode โ†’ execute
5๋‹จ๊ณ„ PC๋Š” ๋‹ค์Œ ๋ช…๋ น์–ด ์ฃผ์†Œ๋กœ ์ž๋™ ์ฆ๊ฐ€

 

 

๐Ÿ“„ ํ”„๋กœ์„ธ์Šค์˜ ๊ฐœ๋… (Process is a program in execution)

 

 

์ „์ฒด ์š”์•ฝ

ํ”„๋กœ์„ธ์Šค๋ž€ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ์ด๋ฉฐ, CPU๊ฐ€ ์ด ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰ํ•  ๋•Œ ํ•„์š”ํ•œ ์ƒํƒœ ์ •๋ณด์˜ ๋ฌถ์Œ์„ '๋ฌธ๋งฅ(context)'๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.


ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ ์ •๋ฆฌ

โ–ถ ๋ฌธ๋งฅ(context)

  • ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ์ƒํƒœ ์ •๋ณด ์ „์ฒด
  • โœ๏ธ "CPU ์ˆ˜ํ–‰ ์ƒํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ํ•˜๋“œ์›จ์–ด ์ •๋ณด"๋ผ๊ณ  ํ•„๊ธฐํ•จ
  • ๋ฌธ๋งฅ์—๋Š” ๋‹ค์Œ ์ •๋ณด๋“ค์ด ํฌํ•จ๋จ:
    • Program Counter (PC): ๋‹ค์Œ ์‹คํ–‰ํ•  ๋ช…๋ น์–ด ์ฃผ์†Œ
    • ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’๋“ค (R1, R2, ..., Rn): ์—ฐ์‚ฐ ๋„์ค‘์˜ ์ค‘๊ฐ„๊ฐ’
    • ํ”„๋กœ์„ธ์Šค ์ฃผ์†Œ ๊ณต๊ฐ„ ์ •๋ณด (code, data, stack)

โ–ถ PCB (Process Control Block)

  • ํ”„๋กœ์„ธ์Šค์˜ ๋ฌธ๋งฅ์„ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ
  • ํ”„๋กœ์„ธ์Šค ์ „ํ™˜ ์‹œ ์ด์ „ ํ”„๋กœ์„ธ์Šค์˜ context๋Š” PCB์— ์ €์žฅ
  • ์ƒˆ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•  ๋• ํ•ด๋‹น PCB์—์„œ context๋ฅผ ๋ณต์›ํ•จ
  • โœ๏ธ "ํ”„๋กœ์„ธ์Šค ๋ฌธ๋งฅ ์ €์žฅ ๊ตฌ์กฐ"

โ–ถ Program Counter (PC)

  • ํ˜„์žฌ CPU๊ฐ€ ์‹คํ–‰ํ•  ๋‹ค์Œ ๋ช…๋ น์–ด ์ฃผ์†Œ ์ €์žฅ
  • โœ๏ธ "ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ: ๋ช…๋ น์–ด ์ˆœ์„œ ๊ธฐ์–ต", "jumpํ•  ์ฃผ์†Œ๋„ ํฌํ•จ"์ด๋ผ๊ณ  ์ ํ˜€ ์žˆ์Œ

โ–ถ ์ปค๋„ ์Šคํƒ (kernel stack)

  • ์‹œ์Šคํ…œ ์ฝœ, ์ธํ„ฐ๋ŸฝํŠธ ๋“ฑ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ์Šคํƒ
  • ์‚ฌ์šฉ์ž ์Šคํƒ๊ณผ ๋ณ„๊ฐœ๋กœ ์กด์žฌ
  • โœ๏ธ "system call ์‹œ user โ†’ kernel stack์œผ๋กœ switch" ๋ผ๊ณ  ํ‘œ์‹œ๋จ

ํ๋ฆ„ ์š”์•ฝ

  1. CPU๋Š” ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ PC์™€ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
  2. ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ์‹œ:
    • ํ˜„์žฌ ํ”„๋กœ์„ธ์Šค์˜ PC/๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์„ PCB์— ์ €์žฅ
    • ๋‹ค์Œ ์‹คํ–‰ํ•  ํ”„๋กœ์„ธ์Šค์˜ PCB์—์„œ ๊ฐ’ ์ฝ์–ด์„œ ๋ ˆ์ง€์Šคํ„ฐ/PC ๋ณต์›
  3. ์‹œ์Šคํ…œ ์ฝœ ๋ฐœ์ƒ ์‹œ:
    • ์‚ฌ์šฉ์ž ๋ชจ๋“œ โ†’ ์ปค๋„ ๋ชจ๋“œ ์ „ํ™˜
    • ์ปค๋„ ์Šคํƒ ์‚ฌ์šฉ, ์ดํ›„ ๋‹ค์‹œ ์‚ฌ์šฉ์ž ๋ชจ๋“œ๋กœ ๋ณต๊ท€

โœ… ์•”๊ธฐ ํฌ์ธํŠธ

  • ํ”„๋กœ์„ธ์Šค = ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ
  • ๋ฌธ๋งฅ(context) = ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ์ƒํƒœ ์ •๋ณด ์ „์ฒด
  • Program Counter๋Š” ๋‹ค์Œ ๋ช…๋ น์–ด ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ
  • PCB๋Š” ํ”„๋กœ์„ธ์Šค ๋ฌธ๋งฅ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ์ปค๋„ ๋‚ด๋ถ€ ์ž๋ฃŒ๊ตฌ์กฐ
  • ์‹œ์Šคํ…œ ์ฝœ ์‹œ user stack โ†’ kernel stack์œผ๋กœ ์ „ํ™˜๋œ๋‹ค
  • CPU๋Š” ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ์‹œ PCB๋ฅผ ์ด์šฉํ•ด ๋ฌธ๋งฅ์„ ์ €์žฅ/๋ณต์›ํ•œ๋‹ค

 
 
 

๐Ÿ“„ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ (Process States)

์ „์ฒด ๊ตฌ์กฐ ๊ฐœ์š”

ํ”„๋กœ์„ธ์Šค๋Š” ์‹คํ–‰ ์ค‘ ๋ฐœ์ƒํ•˜๋Š” ์ด๋ฒคํŠธ์— ๋”ฐ๋ผ ์ƒํƒœ๊ฐ€ ๋ณ€ํ™”ํ•˜๋ฉฐ, ๊ฐ ์ƒํƒœ๋Š” ์šด์˜์ฒด์ œ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ํ(queue)๋ฅผ ํ†ตํ•ด ์ „์ด๋œ๋‹ค.


์ฃผ์š” ์ƒํƒœ ์„ค๋ช…

โ–ถ New

  • ์ƒˆ๋กœ ์ƒ์„ฑ๋œ ํ”„๋กœ์„ธ์Šค
  • โœ๏ธ ํ•„๊ธฐ: NEW ์ƒํƒœ์—์„œ ready๋กœ ์ง„์ž…ํ•จ

โ–ถ Ready

  • ์‹คํ–‰ ์ค€๋น„ ์™„๋ฃŒ๋œ ์ƒํƒœ
  • Ready Queue์— ๋“ค์–ด๊ฐ€ ์žˆ์Œ
  • โœ๏ธ ํ•„๊ธฐ: "Ready โ†’ Running ์ƒํƒœ๋กœ ์ง„์ž… ์‹œ CPU ํ• ๋‹น๋ฐ›์Œ"

โ–ถ Running

  • CPU๋ฅผ ์‹ค์ œ๋กœ ์ ์œ ํ•˜๊ณ  ์žˆ๋Š” ์ƒํƒœ
  • ์˜ค์ง ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋งŒ Running ์ƒํƒœ์ผ ์ˆ˜ ์žˆ์Œ
  • โœ๏ธ ํ•„๊ธฐ: CPU๊ฐ€ process ์‹คํ–‰ ์ค‘

โ–ถ Blocked

  • I/O ์š”์ฒญ ๋“ฑ์œผ๋กœ ์ธํ•ด ๋Œ€๊ธฐ ์ค‘์ธ ์ƒํƒœ
  • CPU๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉฐ, I/O Queue์— ๋“ค์–ด๊ฐ€ ์žˆ์Œ
  • โœ๏ธ ํ•„๊ธฐ: ์ž์› ์š”์ฒญํ•˜๋ฉด blocked ์ƒํƒœ๋กœ ๋น ์ง โ†’ ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์‹œ Ready

ํ ์„ค๋ช… ๋ฐ ํ๋ฆ„

  • ๊ฐ ์ƒํƒœ๋Š” ์šด์˜์ฒด์ œ๊ฐ€ **ํ(queue)**๋กœ ๊ด€๋ฆฌํ•จ:
    • Ready Queue: ์‹คํ–‰ ๋Œ€๊ธฐ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ๋ชจ์Œ (ex. A, B, C, D, E)
    • Disk/Keyboard I/O Queue: I/O ์š”์ฒญ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค ๋ชจ์Œ (blocked)
  • Running ์ค‘ I/O ์š”์ฒญ โ†’ ํ•ด๋‹น I/O queue๋กœ ์ด๋™ (Blocked ์ƒํƒœ)
  • I/O ์ž‘์—… ์™„๋ฃŒ ์‹œ โ†’ ์ธํ„ฐ๋ŸฝํŠธ๋กœ OS์— ํ†ต๋ณด โ†’ ๋‹ค์‹œ Ready Queue๋กœ ์ด๋™

์ƒํƒœ ์ „์ด ํ๋ฆ„ ์š”์•ฝ (ํ•„๊ธฐ ๋ฐ˜์˜)

  • โœ๏ธ ํ”„๋กœ์„ธ์Šค๋Š” ready โ†’ running โ†’ blocked โ†’ ๋‹ค์‹œ ready ์ˆœ์œผ๋กœ ์ƒํƒœ๊ฐ€ ๊ณ„์† ๋ณ€ํ•จ
  • โœ๏ธ CPU๊ฐ€ running ์ค‘์ธ ์ƒํƒœ์—์„œ context switching ๋ฐœ์ƒ ์‹œ โ†’ ๋‹ค์‹œ ready๋กœ ์ด๋™
  • โœ๏ธ I/O๊ฐ€ ๋๋‚˜์•ผ blocked ์ƒํƒœ์—์„œ ๋ฒ—์–ด๋‚  ์ˆ˜ ์žˆ์Œ (์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ์œผ๋กœ ์ „ํ™˜)

โœ… ์•”๊ธฐ ํฌ์ธํŠธ

  • Ready: ์‹คํ–‰ ์ค€๋น„ ์ƒํƒœ (CPU ๊ธฐ๋‹ค๋ฆผ)
  • Running: CPU๊ฐ€ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ์ƒํƒœ
  • Blocked: I/O ๋“ฑ ์ž์› ๋Œ€๊ธฐ ์ƒํƒœ (CPU ๋ฏธ์‚ฌ์šฉ)
  • ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ ์‹œ Blocked โ†’ Ready๋กœ ์ƒํƒœ ์ „์ด
  • Context switching ๋ฐœ์ƒ ์‹œ Running โ†’ Ready๋กœ ์ „์ด๋จ
  • Ready Queue / I/O Queue๋Š” ๊ฐ ์ƒํƒœ๋ฅผ ์šด์˜์ฒด์ œ๊ฐ€ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ

 
 

๐Ÿ“„ ๋ฌธ๋งฅ ๊ตํ™˜ (Context Switch)

์ „์ฒด ๊ฐœ์š”

๋ฌธ๋งฅ ๊ตํ™˜์ด๋ž€ CPU๊ฐ€ ํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์‹คํ–‰ ์ƒํƒœ(context)๋ฅผ PCB์— ์ €์žฅํ•˜๊ณ , ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณต์›ํ•˜์—ฌ ์‹คํ–‰์„ ์ „ํ™˜ํ•˜๋Š” ๊ณผ์ •์ด๋‹ค.


ํ•ต์‹ฌ ๊ตฌ์„ฑ ์š”์†Œ ์„ค๋ช…

โ–ถ CPU ๋‚ด๋ถ€ ๊ตฌ์„ฑ (๋ ˆ์ง€์Šคํ„ฐ, PC, ALU)

  • Program Counter (PC): ๋‹ค์Œ ๋ช…๋ น์–ด ์ฃผ์†Œ
  • ๋ ˆ์ง€์Šคํ„ฐ๋“ค (R1~Rn): ์—ฐ์‚ฐ ๋„์ค‘์˜ ๊ฐ’ ์ €์žฅ
  • ALU: ์—ฐ์‚ฐ ์žฅ์น˜
  • โœ๏ธ ํ•„๊ธฐ: "PC + R ๊ฐ’์„ PCB์— ๋ฐฑ์—… / ๋ณต์›"

โ–ถ Process A, B์˜ PCB

  • ๊ฐ๊ฐ์˜ ํ”„๋กœ์„ธ์Šค๋Š” ์ž์‹ ์˜ PCB์— PC, R1~Rn ๊ฐ’์„ ์ €์žฅํ•จ
  • ํ”„๋กœ์„ธ์Šค ์ „ํ™˜ ์‹œ PCB ๊ฐ’์ด ๊ต์ฒด๋จ

ํ๋ฆ„ ์ •๋ฆฌ

โ‘  Process A ์‹คํ–‰ ์ค‘

  • CPU๋Š” A์˜ ๋ ˆ์ง€์Šคํ„ฐ/PC ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์‹คํ–‰ ์ค‘
  • ๋ฌธ๋งฅ ์Šค์œ„์น˜ ๋ฐœ์ƒํ•˜๋ฉด โ†’ ํ˜„์žฌ ์ƒํƒœ๋ฅผ A์˜ PCB์— ์ €์žฅ (โœ๏ธ "backup")

โ‘ก PCB ์Šค์œ„์น˜

  • A์˜ PCB โ†’ ์ €์žฅ
  • B์˜ PCB โ†’ ๋ณต์› (โœ๏ธ "restore")

โ‘ข Process B๋กœ ์ „ํ™˜๋จ

  • B์˜ ๋ ˆ์ง€์Šคํ„ฐ/PC ๊ฐ’์ด CPU๋กœ ๋กœ๋“œ๋จ
  • CPU๋Š” ์ด์ œ B์˜ ๋ช…๋ น์–ด๋ถ€ํ„ฐ ์‹คํ–‰ ์‹œ์ž‘

โœ… ์•”๊ธฐ ํฌ์ธํŠธ

  • Context Switch๋Š” ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ(context)๋ฅผ PCB์— ์ €์žฅํ•˜๊ณ , ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ๋ณต์›ํ•˜๋Š” ์ž‘์—…์ด๋‹ค
  • context์—๋Š” Program Counter์™€ ๋ชจ๋“  ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’์ด ํฌํ•จ๋œ๋‹ค
  • context switch ์‹œ CPU๋Š” backup โ†’ restore์˜ ๊ณผ์ •์„ ๊ฑฐ์นœ๋‹ค
  • PCB๋Š” ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ ๋ฌธ๋งฅ ์ •๋ณด๋ฅผ ๋‹ด๋Š” ์ปค๋„์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋‹ค
  • context switch๋Š” ์‹œ๊ฐ„์ด ๋งŽ์ด ๋“œ๋Š” ์ž‘์—…์ด๋‹ค (๋น„์šฉ ์žˆ์Œ)

ํ•„๊ธฐ ์ •๋ฆฌ ํฌ์ธํŠธ

  • โœ๏ธ โ€œbackup: PC, R ๊ฐ’ A์— ์ €์žฅ / restore: B์˜ PCB์—์„œ PC, R ๊ฐ’ ๋ณต์›โ€
  • โœ๏ธ โ€œALU ์—ฐ์‚ฐ ์ค‘๊ฐ„ ๊ฒฐ๊ณผ๋„ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋˜๋ฏ€๋กœ ์ค‘์š”ํ•จโ€
  • โœ๏ธ โ€œ๋ฌธ๋งฅ ๊ตํ™˜ ์‹œ ์ €์žฅ/๋ณต์›๋งŒ ํ•˜์ง€, ๋ช…๋ น์–ด ์‹คํ–‰์€ ํ•˜์ง€ ์•Š์Œโ€

 
 
 

๐Ÿ“„ ๋ฌธ๋งฅ ๊ตํ™˜ (Context Switch)์˜ ์กฐ๊ฑด๊ณผ ๋ฐœ์ƒ ์‹œ์ 

์ „์ฒด ์š”์•ฝ

๋ฌธ๋งฅ ๊ตํ™˜์ด๋ž€ ๋ฐ˜๋“œ์‹œ CPU๋ฅผ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ๋„˜๊ธธ ๋•Œ๋งŒ ๋ฐœ์ƒํ•˜๋ฉฐ,
๋‹จ์ˆœํžˆ ์ปค๋„ ๋ชจ๋“œ๋กœ ์ง„์ž…ํ•˜๋Š” ๋ชจ๋“  ์ƒํ™ฉ์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๊ฑด ์•„๋‹ˆ๋‹ค!


์ƒํ™ฉ โ‘ : ์ปค๋„ ์ง„์ž…์€ ํ–ˆ์ง€๋งŒ Context Switch๋Š” ์—†์Œ

ํ๋ฆ„

  • ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค A ์‹คํ–‰ ์ค‘ โ†’ system call ๋˜๋Š” interrupt ๋ฐœ์ƒ
  • ์ปค๋„ ๋ชจ๋“œ๋กœ ์ „ํ™˜๋จ
  • A์˜ ์ปค๋„ ์ฝ”๋“œ ์‹คํ–‰
  • ๋‹ค์‹œ A์˜ ์‚ฌ์šฉ์ž ๋ชจ๋“œ๋กœ ๋ณต๊ท€

โœ๏ธ ํ•„๊ธฐ ์„ค๋ช…

  • โ€œprocess A๋Š” ๊ณ„์† ์‹คํ–‰๋จ (Aโ†’A), context switch Xโ€
  • โ€œ๋‹จ์ˆœ ์ปค๋„ ์ง„์ž…๋งŒ์œผ๋ก  PCB save ํ•„์š” Xโ€

์ƒํ™ฉ โ‘ก: ์ง„์งœ Context Switch ๋ฐœ์ƒ

ํ๋ฆ„

  • ์‚ฌ์šฉ์ž ํ”„๋กœ์„ธ์Šค A ์‹คํ–‰ ์ค‘ โ†’ system call ๋˜๋Š” interrupt ๋ฐœ์ƒ
  • ์ปค๋„ ์ง„์ž…
  • ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ A ์ค‘๋‹จํ•˜๊ณ  B ์„ ํƒ
  • โ†’ A์˜ context ์ €์žฅ + B์˜ context ๋ณต์›

โœ๏ธ ํ•„๊ธฐ ์„ค๋ช…

  • โ€œA โ†’ B๋กœ ๊ต์ฒด, context switch Oโ€
  • โ€œPCB ์ €์žฅ + ๋ ˆ์ง€์Šคํ„ฐ/PC ๊ฐ’ ๋ณต์› ํ•„์š”โ€
  • โ€œ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ๊ฐœ์ž…ํ•œ ๊ฒฝ์šฐ๋งŒ ์ง„์งœ ๋ฌธ๋งฅ ๊ตํ™˜โ€

โœ… ์•”๊ธฐ ํฌ์ธํŠธ

  • ์ปค๋„ ๋ชจ๋“œ ์ง„์ž…์ด ํ•ญ์ƒ context switch๋ฅผ ์˜๋ฏธํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค
  • ๋ฌธ๋งฅ ๊ตํ™˜์€ CPU๋ฅผ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ๋„˜๊ธธ ๋•Œ ๋ฐœ์ƒ
  • context switch ์‹œ์—๋Š” PCB์— PC + ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’ ์ €์žฅ/๋ณต์›
  • A โ†’ A์ธ ๊ฒฝ์šฐ (์ปค๋„ ์ง„์ž…๋งŒ ํ•˜๊ณ  ๋‹ค์‹œ ์‚ฌ์šฉ์ž ๋ชจ๋“œ ๋ณต๊ท€)๋Š” ๋ฌธ๋งฅ ๊ตํ™˜ ์•„๋‹˜
  • A โ†’ B์ธ ๊ฒฝ์šฐ์—๋งŒ ๋ฌธ๋งฅ ๊ตํ™˜ ๋ฐœ์ƒ

๐Ÿ“ฆ Ready Queue์™€ Device Queue


๊ตฌ์กฐ ์„ค๋ช…

  • Ready Queue: ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ํ”„๋กœ์„ธ์Šค ๋ฆฌ์ŠคํŠธ
    • ์˜ˆ: PCB A, B, C, D
    • โœ๏ธ ํ•„๊ธฐ: โ€œlinked list๋กœ ๊ด€๋ฆฌ๋จโ€
  • Device Queue (ex. Disk I/O Queue): ์ž์›์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ”„๋กœ์„ธ์Šค ๋ฆฌ์ŠคํŠธ
    • ์˜ˆ: ํ‚ค๋ณด๋“œ, ๋””์Šคํฌ, ํ”„๋ฆฐํ„ฐ ๋“ฑ ๊ฐ๊ฐ์˜ ์žฅ์น˜๋งˆ๋‹ค ํ ์กด์žฌ

ํ๋ฆ„ ์˜ˆ์‹œ

  • Process A๊ฐ€ read() ์‹œ์Šคํ…œ ์ฝœ ํ˜ธ์ถœ
  • โ†’ I/O ์š”์ฒญ โ†’ A๋Š” blocked ์ƒํƒœ๋กœ Disk Queue์— ๋“ค์–ด๊ฐ
  • โ†’ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค(B)๊ฐ€ CPU ์‚ฌ์šฉํ•˜๊ฒŒ ๋จ
  • โœ๏ธ ํ•„๊ธฐ: โ€œkeyboard interrupt ๋ฐœ์ƒ ์‹œ, A๊ฐ€ stop๋˜๊ณ  B๊ฐ€ ์‹คํ–‰๋จโ€

โœ… ์•”๊ธฐ ํฌ์ธํŠธ

  • Ready Queue๋Š” ์‹คํ–‰ ์ค€๋น„ ์ƒํƒœ์˜ ํ”„๋กœ์„ธ์Šค๋“ค์„ ๊ด€๋ฆฌ
  • Device Queue๋Š” ์ž์› ์š”์ฒญ ์ค‘์ธ blocked ํ”„๋กœ์„ธ์Šค๋“ค์„ ๊ด€๋ฆฌ
  • read() ๋“ฑ I/O ์š”์ฒญ ์‹œ ํ•ด๋‹น device queue๋กœ ์ด๋™
  • I/O ์™„๋ฃŒ ์‹œ ์ธํ„ฐ๋ŸฝํŠธ โ†’ ๋‹ค์‹œ Ready Queue๋กœ ์ด๋™

 
 
 

๐Ÿ“„ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ๋„ (Process State Diagram โ€“ ํ™•์žฅ ๋ชจ๋ธ)

์ „์ฒด ํ๋ฆ„ ๊ฐœ์š”

ํ”„๋กœ์„ธ์Šค๋Š” ์‹คํ–‰ ํ๋ฆ„์— ๋”ฐ๋ผ ์—ฌ๋Ÿฌ ์ƒํƒœ๋กœ ์ „์ด๋˜๋ฉฐ, ์‹คํ–‰ ์ƒํƒœ๋ฟ ์•„๋‹ˆ๋ผ ์ค‘์ง€(suspend) ์ƒํƒœ๋„ ์กด์žฌํ•œ๋‹ค.


์ƒํƒœ ๋ชฉ๋ก๊ณผ ์˜๋ฏธ

์ƒํƒœ์˜๋ฏธ
New ์ƒ์„ฑ ์ค‘์ธ ์ƒํƒœ (์•„์ง ์ค€๋น„ ์•ˆ ๋จ)
Ready ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ (CPU ๋Œ€๊ธฐ ์ค‘)
Running (User mode) CPU ์‚ฌ์šฉ ์ค‘ (์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰)
Running (Monitor mode) ์ปค๋„ ๋ชจ๋“œ ์ง„์ž… ํ›„ ์‹œ์Šคํ…œ ์ฝœ, ์ธํ„ฐ๋ŸฝํŠธ ์ฒ˜๋ฆฌ ์ค‘
Blocked (Sleep, wait) I/O ์™„๋ฃŒ ๋“ฑ ์ด๋ฒคํŠธ ๋Œ€๊ธฐ ์ค‘
Exit ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ ์ƒํƒœ
Suspended Ready ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ซ“๊ฒจ๋‚ฌ์ง€๋งŒ ์‹คํ–‰ ์ค€๋น„ ์ƒํƒœ
Suspended Blocked ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ซ“๊ฒจ๋‚ฌ๊ณ , ์ด๋ฒคํŠธ๋„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ƒํƒœ

์ƒํƒœ ์ „์ด ํ๋ฆ„ ์ •๋ฆฌ (โ†’๋Š” ์ „์ด ๋ฐฉํ–ฅ)

  • New โ†’ Ready: ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค€๋น„ ์™„๋ฃŒ๋จ
    โœ๏ธ ํ•„๊ธฐ: โ€œ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ค‘ ์ƒํƒœ ์•„๋‹˜!โ€
  • Ready โ†’ Running (User mode): CPU ํ• ๋‹น๋จ
    โ†’ โœ๏ธ ํ•„๊ธฐ: โ€œCPU ํ• ๋‹น๋ฐ›์•„ ์‹คํ–‰โ€
  • Running (User) โ†’ Monitor mode: ์‹œ์Šคํ…œ ์ฝœ ๋˜๋Š” ์ธํ„ฐ๋ŸฝํŠธ ๋ฐœ์ƒ
    โ†’ โœ๏ธ โ€œtrap, system call ๋“ฑ์œผ๋กœ ์ปค๋„ ์ง„์ž…โ€
  • Running โ†’ Blocked: I/O ์š”์ฒญ ๋“ฑ์œผ๋กœ ๋Œ€๊ธฐ ์ƒํƒœ
    โœ๏ธ โ€œevent ๋Œ€๊ธฐ (ex. ๋””์Šคํฌ, ํ‚ค๋ณด๋“œ)โ€
  • Running โ†’ Ready: ํƒ€ ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ์„ ์ ๋จ (preempted)
    โœ๏ธ โ€œํ• ๋‹น์‹œ๊ฐ„ ์ดˆ๊ณผ๋กœ ์ „ํ™˜๋จโ€
  • Blocked โ†’ Ready: ์ด๋ฒคํŠธ ๋ฐœ์ƒ (I/O ์™„๋ฃŒ) โ†’ ๊นจ์–ด๋‚จ
    โœ๏ธ โ€œinterrupt ๋ฐœ์ƒ์œผ๋กœ ready ๋ณต๊ท€โ€
  • Running โ†’ Exit: ํ”„๋กœ์„ธ์Šค ์ข…๋ฃŒ
    โœ๏ธ โ€œexit() ํ˜ธ์ถœ ๋“ฑโ€
  • Blocked โ†’ Suspended Blocked: ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ๋“ฑ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ซ“๊ฒจ๋‚จ (swap out)
  • Suspended Blocked โ†’ Blocked: ๋‹ค์‹œ ๋ฉ”๋ชจ๋ฆฌ ์˜ฌ๋ผ์˜ค๋ฉด (swap in)
  • Ready โ†” Suspended Ready: ๋ฉ”๋ชจ๋ฆฌ ์ƒํƒœ์— ๋”ฐ๋ผ swap in/out

โœ… ์•”๊ธฐ ํฌ์ธํŠธ

  • New โ†’ Ready๋Š” "์ƒ์„ฑ ์™„๋ฃŒ"๋ฅผ ์˜๋ฏธํ•˜๊ณ  ์‹คํ–‰ ๋Œ€๊ธฐ ์‹œ์ž‘
  • Ready โ†’ Running์€ ์Šค์ผ€์ค„๋Ÿฌ์— ์˜ํ•ด CPU ํ• ๋‹น๋จ
  • Running โ†’ Monitor mode๋Š” ์‹œ์Šคํ…œ ์ฝœ์ด๋‚˜ ์ธํ„ฐ๋ŸฝํŠธ์— ์˜ํ•ด ์ง„์ž…
  • Running โ†’ Blocked๋Š” I/O ๋“ฑ์˜ ์ด๋ฒคํŠธ ๋Œ€๊ธฐ (CPU ๋ฐ˜๋‚ฉ)
  • Running โ†’ Ready๋Š” ํƒ€ ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ์„ ์ ๋  ๋•Œ
  • Blocked ์ƒํƒœ์—์„œ I/O ์™„๋ฃŒ ์‹œ โ†’ Ready ๋ณต๊ท€ (์ธํ„ฐ๋ŸฝํŠธ)
  • Suspended๋Š” ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ซ“๊ฒจ๋‚œ ์ƒํƒœ์ด๋ฉฐ, swap์œผ๋กœ ๋ณต๊ท€ ๊ฐ€๋Šฅ
  • Exit์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„์ „ํžˆ ์ข…๋ฃŒ๋œ ์ƒํƒœ

ํ•„๊ธฐ ์š”์•ฝ ํฌํ•จ ํ•ต์‹ฌ ์ •๋ฆฌ

  • โœ๏ธ โ€œinterrupt & system call ์‹œ์  = trap โ†’ ์ปค๋„ ์ง„์ž…โ€
  • โœ๏ธ โ€œsuspended๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ถ€์กฑ ๋“ฑ์˜ ์ด์œ ๋กœ ๋ฐœ์ƒโ€
  • โœ๏ธ โ€œexit์€ ์™„์ „ํžˆ ์ข…๋ฃŒ๋œ ์ƒํƒœ๋กœ inactive ์˜์—ญ ์ง„์ž…โ€

 
 

๐Ÿ“„ Thread (์Šค๋ ˆ๋“œ)

 

์ „์ฒด ์š”์•ฝ

Thread๋ž€ CPU ์‹คํ–‰์„ ์œ„ํ•œ ์ตœ์†Œ ๋‹จ์œ„์ด๋ฉฐ, ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ๊ฐ€๋ฒผ์šด ์ž‘์—… ๋‹จ์œ„์ด๋‹ค.


Thread์˜ ์ •์˜

  • ์Šฌ๋ผ์ด๋“œ ์ •์˜:
  • โ€œA thread (or lightweight process) is a basic unit of CPU utilization.โ€
  • โœ๏ธ ํ•„๊ธฐ:
    • โ€œ= PC, register, memory 3๊ฐœ ๊ฐ€์ง€๊ณ  ๋‹ค๋‹˜โ€
    • โ€œcall stack ๋‹จ์œ„๋กœ ๋ฌธ๋งฅ ์ €์žฅ/๋ณต์›๋œ๋‹คโ€

โœ… Thread์˜ ๊ตฌ์„ฑ ์š”์†Œ (๊ฐœ๋ณ„์ ์œผ๋กœ ๊ฐ€์ง)

  • Program Counter (PC): ๋‹ค์Œ์— ์‹คํ–‰ํ•  ๋ช…๋ น์–ด ์ฃผ์†Œ
  • Register Set: ์—ฐ์‚ฐ ์ค‘ ํ•„์š”ํ•œ ๋ ˆ์ง€์Šคํ„ฐ ๊ฐ’
  • Stack Space: ํ•จ์ˆ˜ ํ˜ธ์ถœ/๋ณต๊ท€ ์œ„ํ•œ ๊ณต๊ฐ„

โžก๏ธ ์ด๋“ค์€ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋…๋ฆฝ์ 


โœ… ์Šค๋ ˆ๋“œ ๊ฐ„ ๊ณต์œ ํ•˜๋Š” ์ž์› (ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ)

  • Code Section: ์‹คํ–‰ํ•  ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ (๊ณต์šฉ)
  • Data Section: ์ „์—ญ ๋ณ€์ˆ˜ ๋“ฑ (๊ณต์šฉ)
  • OS Resources: ์—ด๋ฆฐ ํŒŒ์ผ, ํ†ต์‹  ์ฑ„๋„ ๋“ฑ (๊ณต์šฉ)

โžก๏ธ ์ด๋“ค์€ ํ”„๋กœ์„ธ์Šค ์ „์ฒด์— ์†ํ•จ, ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ํ•จ๊ป˜ ์ ‘๊ทผ


ํ•„๊ธฐ ํฌํ•จ ์š”์•ฝ

  • โœ๏ธ "Thread๋Š” lightweight process์ด๋ฉฐ, process ํ•˜๋‚˜๋‹น ์—ฌ๋Ÿฌ thread ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ"
  • โœ๏ธ "ํ”„๋กœ์„ธ์Šค๋Š” ํ•˜๋‚˜์ง€๋งŒ thread๋Š” ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ์„ฑ ๊ฐ€๋Šฅ (์˜ˆ: Thread1, Thread2, Thread3)"
  • โœ๏ธ "process ๋‹จ์œ„๋กœ ์ž์› ๊ณต์œ , thread ๋‹จ์œ„๋กœ ์‹คํ–‰ ์ƒํƒœ ๊ด€๋ฆฌ"

โœ… ์•”๊ธฐ ํฌ์ธํŠธ

  • Thread๋Š” CPU ์Šค์ผ€์ค„๋ง์˜ ์ตœ์†Œ ๋‹จ์œ„์ด๋ฉฐ, PC/๋ ˆ์ง€์Šคํ„ฐ/์Šคํƒ์„ ๊ฐœ๋ณ„๋กœ ๊ฐ€์ง„๋‹ค
  • Thread๋Š” ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์™€ ์ฝ”๋“œ/๋ฐ์ดํ„ฐ/OS ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ํ•œ๋‹ค
  • Thread๋Š” lightweight process๋กœ ๋ถˆ๋ฆฌ๋ฉฐ, ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์— ์—ฌ๋Ÿฌ ๊ฐœ ์กด์žฌ ๊ฐ€๋Šฅํ•˜๋‹ค
  • ๊ฐ Thread๋Š” call stack ๋‹จ์œ„๋กœ ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ํ๋ฆ„์„ ์œ ์ง€ํ•œ๋‹ค

 

๐Ÿ“„ Thread์˜ ๊ตฌ์กฐ์™€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์˜ ๊ฐœ๋…

 

์ „์ฒด ์š”์•ฝ

ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ, ๊ณตํ†ต ์ฃผ์†Œ ๊ณต๊ฐ„(code, data)์„ ๊ณต์œ ํ•˜๊ณ , ๊ฐœ๋ณ„ ์Šคํƒ์„ ๊ฐ€์ง„๋‹ค.


์ฃผ์†Œ ๊ณต๊ฐ„ ๊ตฌ์กฐ

  • ๊ณตํ†ต ์˜์—ญ:
    • code, data, heap์€ ๋ชจ๋“  thread๊ฐ€ ๊ณต์œ ํ•จ
  • ๊ฐœ๋ณ„ ์˜์—ญ:
    • stack์€ ๊ฐ thread๋งˆ๋‹ค ๊ฐœ๋ณ„๋กœ ์กด์žฌ
    • โœ๏ธ ํ•„๊ธฐ: โ€œ์Šคํƒ์€ ๊ฐ์ž ๋”ฐ๋กœ! (context ์ €์žฅ ๋•Œ๋ฌธ)โ€

PCB (Process Control Block)์™€ Thread

  • ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ PCB ์กด์žฌ
  • PCB ๋‚ด๋ถ€์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ **TCB(Thread Control Block)**์ฒ˜๋Ÿผ ์Šค๋ ˆ๋“œ ์ •๋ณด๊ฐ€ ํฌํ•จ๋จ
  • ๊ฐ ์Šค๋ ˆ๋“œ๋Š” ์ž๊ธฐ๋งŒ์˜ PC, register, stack์„ ๊ฐ–๊ณ , PCB์˜ ์ž์›์„ ํ•จ๊ป˜ ์‚ฌ์šฉ

์˜ˆ์‹œ ๊ตฌ์กฐ ์„ค๋ช…

  • โœ๏ธ ํ•„๊ธฐ:
    • โ€œThread1~3 โ†’ ๊ณตํ†ต ๋ฉ”๋ชจ๋ฆฌ(code/data), ๊ฐœ๋ณ„ ์Šคํƒ ์‚ฌ์šฉโ€
    • โ€œThread๊ฐ€ ๊ต์ฒด๋  ๋•Œ register์™€ stack๋งŒ ๊ต์ฒด๋˜๋ฉด ๋จโ€
    • โ€œcontext switch๋Š” Thread ๋‹จ์œ„๋กœ ๊ฐ€๋Šฅโ€
  • ๊ทธ๋ฆผ ์„ค๋ช…:
    • PCB๋Š” ์ „์ฒด ํ”„๋กœ์„ธ์Šค ์ƒํƒœ๋ฅผ ํฌํ•จ
    • Thread1, Thread2, Thread3๋Š” ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด ์Šค๋ ˆ๋“œ

์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆผ (๋ธŒ๋ผ์šฐ์ € ์˜ˆ์‹œ)

  • Browser process = ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค
  • ๊ฐ ํƒญ์€ Thread1, Thread2, ...
  • ๊ณตํ†ต ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž ์š”์ฒญ์— ๋”ฐ๋ผ ๊ฐ๊ฐ ๋™์ž‘
  • โœ๏ธ ํ•„๊ธฐ: โ€œ์„œ๋ฒ„ ์‘๋‹ต ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ ๋‹ค๋ฅธ ํƒญ์ด block๋˜์ง€ ์•Š์Œโ€

โœ… ์•”๊ธฐ ํฌ์ธํŠธ

  • Thread๋Š” stack๊ณผ register set์€ ๊ฐœ๋ณ„์ ์œผ๋กœ ๊ฐ–๊ณ , code/data/OS์ž์›์€ ๊ณต์œ ํ•œ๋‹ค
  • ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•  ์ˆ˜ ์žˆ๊ณ , ์ด๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ๊ตฌ์กฐ๋‹ค
  • PCB๋Š” ํ”„๋กœ์„ธ์Šค ๋‹จ์œ„๋กœ ์กด์žฌํ•˜๋ฉฐ, Thread์˜ context๋Š” ๊ฐœ๋ณ„์ ์œผ๋กœ ์œ ์ง€๋œ๋‹ค
  • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋Š” CPU ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ์“ฐ๊ณ , ๋ณ‘๋ ฌ ์‹คํ–‰์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•œ๋‹ค
  • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๊ตฌ์กฐ์—์„œ๋Š” ํ•œ ์Šค๋ ˆ๋“œ์˜ block์ด ์ „์ฒด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฉˆ์ถ”๊ฒŒ ํ•˜์ง€ ์•Š๋Š”๋‹ค

 
 

๐Ÿ“„ Thread์˜ ๋ณ‘๋ ฌ์„ฑ ๋ฐ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ์žฅ์ 

 
 

์ „์ฒด ์š”์•ฝ

๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋ฉฐ, ๋ณ‘๋ ฌ์„ฑ๊ณผ ์‘๋‹ต์„ฑ์„ ํฌ๊ฒŒ ํ–ฅ์ƒ์‹œํ‚จ๋‹ค.


์„ค๋ช… ์ •๋ฆฌ

  • ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๋กœ ๊ตฌ์„ฑ๋œ ํƒœ์Šคํฌ๋Š” ์„œ๋ฒ„ ์Šค๋ ˆ๋“œ ํ•˜๋‚˜๊ฐ€ blocked(waiting) ์ƒํƒœ์—ฌ๋„
    โ†’ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰(running) ์ƒํƒœ์—์„œ ๊ณ„์† ์ž‘์—… ๊ฐ€๋Šฅ
  • ์ฆ‰, ์Šค๋ ˆ๋“œ๋Š” ์„œ๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ์‹คํ–‰๋˜๋ฉฐ, ๋ณ‘๋ ฌ์„ฑ ์ œ๊ณต

โœ… ์•”๊ธฐ ํฌ์ธํŠธ

  • ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์—์„œ ์—ฌ๋Ÿฌ ํ๋ฆ„์„ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค
  • ์Šค๋ ˆ๋“œ ํ•˜๋‚˜๊ฐ€ blocked ์ƒํƒœ์—ฌ๋„, ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋Š” ๊ณ„์† running ๊ฐ€๋Šฅํ•˜๋‹ค
  • ์ด๋ฅผ ํ†ตํ•ด throughput(์ฒ˜๋ฆฌ๋Ÿ‰)๊ณผ responsiveness(์‘๋‹ต์„ฑ)์ด ํ–ฅ์ƒ๋œ๋‹ค
  • ์Šค๋ ˆ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ณ‘๋ ฌ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค

โœ๏ธ ํ•„๊ธฐ ์ •๋ฆฌ

  • โ€œT1์ด blocked ๋˜์–ด๋„ T2, T3๋Š” ๊ณ„์† ์ž‘๋™ ๊ฐ€๋Šฅโ€
  • โ€œ๋ธŒ๋ผ์šฐ์ €์—์„œ T1์€ ๋กœ๋”ฉ, T2๋Š” ์‚ฌ์šฉ์ž ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅโ€
  • โ€œserver๊ฐ€ ์‘๋‹ต ๋А๋ฆด ๋•Œ๋„ browser๋Š” ์ž‘๋™ ์œ ์ง€๋จโ€
  • โ€œCPU ํšจ์œจ ํ–ฅ์ƒโ€

์˜ค๋ฅธ์ชฝ ๋„์‹ (์Šค๋ ˆ๋“œ ํŠธ๋ฆฌ ๊ตฌ์กฐ)

  • ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค(P)์—์„œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ(T)๊ฐ€ ํŒŒ์ƒ๋จ
  • P โ†’ T1, T2, T3 โ€ฆ ๊ตฌ์กฐ๋กœ ๊ฐ๊ฐ ๋…๋ฆฝ๋œ ์‹คํ–‰ ํ๋ฆ„ ๊ฐ€์ง
  • PCB๋Š” ๊ณตํ†ต, stack์€ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋”ฐ๋กœ

๋ธŒ๋ผ์šฐ์ € ์˜ˆ์‹œ ๋‹ค์‹œ ์š”์•ฝ

  • Browser process = ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค
  • Tab 1 โ†’ Thread 1
    Tab 2 โ†’ Thread 2
    Tab 3 โ†’ Thread 3
  • T1์ด ์„œ๋ฒ„ ์‘๋‹ต ๊ธฐ๋‹ค๋ฆฌ๋Š” ๋™์•ˆ T2, T3๋Š” ๋ฉ€์ฉกํžˆ ์‹คํ–‰๋จ
  • ์ด๋กœ ์ธํ•ด โ€œํ•œ ํƒญ ๋ฌธ์ œ๋กœ ์ „์ฒด ๋ธŒ๋ผ์šฐ์ € ๋ฉˆ์ถ”์ง€ ์•Š์Œโ€