ํ”„๋กœ์„ธ์Šค์˜ ์ •์˜, CPU ์Šค์ผ€์ฅด๋Ÿฌ, ๋ฉ€ํ‹ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค.

1. ํ”„๋กœ์„ธ์Šค(Process)

ํ”„๋กœ์„ธ์Šค๋Š” ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜์–ด ์‹คํ–‰์ค‘์ธ ์ƒํƒœ์ธ ํ”„๋กœ๊ทธ๋žจ์„ ๋งํ•œ๋‹ค. ํ”„๋กœ๊ทธ๋žจ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋“œ๋””์Šคํฌ(๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜)์— ์ €์žฅ๋˜์–ด ์•„๋ฌด ์ผ๋„ ํ•˜์ง€ ์•Š๋Š” ์ƒํƒœ์ด๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” ์‹คํ–‰ํ•˜๋ฉด์„œ stack pointer, data, text, register ๋“ฑ์ด ๋Š์ž„์—†์ด ๋ณ€ํ•œ๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” job, task ๋“ฑ์œผ๋กœ ๋ถˆ๋ฆฌ๊ธฐ๋„ ํ•œ๋‹ค.

1.1 ํ”„๋กœ์„ธ์Šค์˜ ์ƒ์„ฑ๊ณผ ์ข…๋ฃŒ

ํ”„๋กœ์„ธ์Šค๋Š” ํ”„๋กœ์„ธ์Šค์— ์˜ํ•ด ๋งŒ๋“ค์–ด์ง„๋‹ค. ์ปดํ“จํ„ฐ๊ฐ€ ๋ถ€ํŒ…์ด ๋˜๋ฉด ์šด์˜์ฒด์ œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ์˜ค๋Š”๋ฐ ์šด์˜์ฒด์ œ๊ฐ€ ์ฒ˜์Œ์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ์ผ ์ค‘์— ํ•˜๋‚˜๋Š” ์ตœ์ดˆ์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ ‡๊ฒŒ ์ฒ˜์Œ ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“ค๊ณ  ๊ทธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋˜ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

์œ„์™€ ๊ฐ™์ด ์ตœ์ดˆ์˜ ํ”„๋กœ์„ธ์Šค๋Š” Init์ด๋‹ค. ์ด ์ด๋ฆ„์€ ์šด์˜์ฒด์ œ๋งˆ๋‹ค ๋‹ค๋ฅด๊ณ , init์€ UNIX ์šด์˜์ฒด์ œ ๊ธฐ์ค€ ์ด๋ฆ„์ด๋‹ค. ์—ฌ๊ธฐ์„œ ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์ƒ์„ฑ๋˜๋ฉด ์œ„์™€ ๊ฐ™์€ ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ํŠธ๋ฆฌ ๋ชจ์–‘์œผ๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.์—ฌ๊ธฐ์„œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•œ ์ชฝ์„ ๋ถ€๋ชจ ํ”„๋กœ์„ธ์Šค, ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ž์‹ ํ”„๋กœ์„ธ์Šค๋ผ๊ณ  ํ•œ๋‹ค. ๊ฐ™์€ ๋ถ€๋ชจ๋ฅผ ๊ฐ–๋Š” ์ž์‹ ํ”„๋กœ์„ธ์Šค ๋ผ๋ฆฌ๋Š” ์„œ๋กœ Sibling(ํ˜•์ œ) ํ”„๋กœ์„ธ์Šค๋ผ๊ณ  ํ•œ๋‹ค.

ํ”„๋กœ์„ธ์Šค๋Š” ๊ฐ๊ฐ ๊ณ ์œ ์˜ ๋ฒˆํ˜ธ๋ฅผ ๊ฐ–๋Š”๋ฐ ์ด๋ฅผ **PID(Process Identifirer)**๋ผ๊ณ  ํ•œ๋‹ค. PID๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ •์ˆ˜ํ˜•(integer)์œผ๋กœ ํ‘œํ˜„ํ•œ๋‹ค. PPID๋Š” ๋ถ€๋ชจ์˜ PID๋ฅผ ๋งํ•œ๋‹ค.

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

์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งŒ๋“œ๋Š” ์‹œ์Šคํ…œ ์ฝœ์ด ์กด์žฌํ•˜๋Š”๋ฐ, ์ด๋Š” fork() ๋ผ ํ•œ๋‹ค. ๋งŒ๋“ค์–ด์ง„ ํ”„๋กœ์„ธ์Šค์—์„œ ์–ด๋– ํ•œ ํŒŒ์ผ์„ ์‹คํ–‰ํ•˜๋ ค๋ฉด exec() ์‹œ์Šคํ…œ ์ฝœ์„ ์‚ฌ์šฉํ•œ๋‹ค.

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

ํ”„๋กœ์„ธ์Šค๋ฅผ ์ข…๋ฃŒํ•˜๋Š” ์‹œ์Šคํ…œ ์ฝœ์€ exit() ์ด๋‹ค. ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•œ ๋ชจ๋“  ์ž์›(๋ฉ”๋ชจ๋ฆฌ, ํŒŒ์ผ, I/O ๋“ฑ)์„ ํšŒ์ˆ˜ํ•ด์•ผํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ํšŒ์ˆ˜๋œ ์ž์›๊ณผ ๊ถŒํ•œ์€ ๋ชจ๋‘ ์šด์˜์ฒด์ œ๋กœ ๋˜๋Œ์•„๊ฐ€์•ผํ•œ๋‹ค.

1.2 ํ”„๋กœ์„ธ์Šค์˜ ๊ตฌ์กฐ

์ถœ์ฒ˜ : https://mintnlatte.tistory.com/{: .center-text}

์ถœ์ฒ˜ : https://rookieboxsite.wordpress.com{: .center-text}

1.2.1 Stack

  • ํ”„๋กœ๊ทธ๋žจ์˜ ์ง€์—ญ ๋ณ€์ˆ˜, ํ•จ์ˆ˜, return ์ฃผ์†Œ๋ฅผ ํฌํ•จํ•œ๋‹ค.
  • ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ํ•˜๋ฉด ํ•ด๋‹น ์ฃผ์†Œ๊ฐ€ ์Šคํƒ์˜์—ญ์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค๊ฐ€ returnํ•˜๋ฉด pop๋œ๋‹ค.

1.2.2 Heap

  • ํž™ ์˜์—ญ์—๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๋Š” ๋™์•ˆ ๋™์ ์œผ๋กœ ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋“ค์ด ์ €์žฅ๋œ๋‹ค.
  • c์–ธ์–ด์˜ malloc์„ ์ด์šฉํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋™์ ํ• ๋‹นํ•˜๋ฉด ํž™ ์˜์—ญ์— ์ €์žฅ๋œ๋‹ค.(free์‹œํ‚ค์ง€ ์•Š์œผ๋ฉด ํž™ ์˜์—ญ์— ๊ณ„์† ๋“ค์–ด ์žˆ์Œ)

1.2.3 Data

  • ๋ฐ์ดํ„ฐ ์˜์—ญ์—๋Š” ์ „์—ญ ๋ณ€์ˆ˜์™€ ์ •์  ์ง€์—ญ ๋ณ€์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. ๋ฐ์ดํ„ฐ ์˜์—ญ์€ BSS, Data๋กœ ๋‚˜๋ˆ ์ง„๋‹ค.
  • BSS๋Š” ์ดˆ๊ธฐํ™” ๋˜์ง€ ์•Š์€ ๋ณ€์ˆ˜๋“ค์ด ์ €์žฅ ์ดˆ๊ธฐํ™” ๋œ ๋ณ€์ˆ˜๋“ค์ด ์ €์žฅ๋œ ์˜์—ญ์œผ๋กœ 0์œผ๋กœ ์ž๋™ ์ดˆ๊ธฐํ™”ํ•ด ์ค€๋‹ค.
  • Data๋Š” ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•œ ์ „์—ญ ๋ณ€์ˆ˜์™€ ์ •์  ๋ณ€์ˆ˜๋ฅผ ์œ„ํ•œ ์˜์—ญ์ด๋‹ค.

BSS,Data๋กœ ๊ตฌ๋ถ„ํ•˜๋Š” ์ด์œ ?

  • ์ดˆ๊ธฐํ™” ๋œ ๋ฐ์ดํ„ฐ๋Š” ์ดˆ๊ธฐ๊ฐ’์„ ์ €์žฅํ•ด์•ผ ํ•จ์œผ๋กœ Data์˜์—ญ์— ์ €์žฅ๋˜์„œ Rom์— ์ €์žฅ๋œ๋‹ค. ํ•˜์ง€๋งŒ ์ดˆ๊ธฐํ™” ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ ๊นŒ์ง€ Rom์— ์ €์žฅ๋˜๋ฉด ํฐ size์˜ rom์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค ( ์ดˆ๊ธฐํ™” ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋Š” ram์— ์ €์žฅํ•˜์ž)

1.2.4 Text

  • ํ•ด๋‹น ์ฝ”๋“œ๊ฐ€ ์ €์žฅ๋˜๋Š” ์˜์—ญ์ด๋‹ค.
  • ํž™๊ณผ ,์Šคํƒ์˜์—ญ์—์„œ ์˜ค๋ฒ„ํ”Œ๋กœ์šฐ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒƒ์„ ๋Œ€๋น„ํ•ด์„œ ํž™/์Šคํƒ์˜ ์•„๋ž˜๋ถ€๋ถ„์— ์œ„์น˜ํ•œ๋‹ค.
  • ์‹คํ–‰ ์ˆœ์„œ๋“ฑ์ด ์ €์žฅ๋˜์–ด ์žˆ๋‹ค.
  • ์ฝ๊ธฐ ์ „์šฉ์ด๋‹ค.
  • ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—์„œ ์ฐธ์กฐ ๊ฐ€๋Šฅํ•˜๋‹ค.

1.2.5 ์ •๋ฆฌ

|ํฌ๊ธฐ ๋ณ€ํ™”|O|X| |:------------|:|:| ||Stack|Text| ||Heap|Data| |||Bss|

  • Text
    • Program Counter(๋‹ค์Œ๋ฒˆ์— ์‹คํ–‰๋  ๋ช…๋ น์–ด์˜ ์ฃผ์†Œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ ˆ์ง€์Šคํ„ฐ : CPU์—๊ฒŒ ์ค„ ์˜ˆ์ •)
    • ํ”„๋กœ๊ทธ๋žจ ์ฝ”๋“œ
  • Data
    • ์ „์—ญ ๋ณ€์ˆ˜ ์ €์žฅ
    • ์Šคํƒœํ‹ฑ ๋ณ€์ˆ˜ ์ €์žฅ
  • Heap
    • ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ
    • ๋™์  ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น (system call๋กœ ๊ด€๋ฆฌ)
    • ๋ฉ”๋ชจ๋ฆฌ์— ์ ‘๊ทผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์˜ํ•ด์•ผ ํ•จ
  • Stack
    • ์ž„์‹œ ๋ฐ์ดํ„ฐ ์ €์žฅ
    • ์ง€์—ญ ๋ณ€์ˆ˜
    • ๋ฐ˜ํ™˜ ์ฃผ์†Œ

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

  • New: ํ”„๋กœ๊ทธ๋žจ์ด ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋œ๋‹ค.
  • Ready: ํ• ๋‹น๋œ ํ”„๋กœ๊ทธ๋žจ์ด ์ดˆ๊ธฐํ™”์™€ ๊ฐ™์€ ์ž‘์—…์„ ํ†ตํ•ด ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ์ค€๋น„๋ฅผ ๋งˆ์นœ๋‹ค.
  • Running: CPU๊ฐ€ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
  • Waiting: ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋๋‚˜์ง€ ์•Š์€ ์‹œ์ ์—์„œ I/O๋กœ ์ธํ•ด CPU๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ์ž‘์—…์„ ํ•œ๋‹ค. (ํ•ด๋‹น ์ž‘์—…์ด ๋๋‚˜๋ฉด ๋‹ค์‹œ CPU์— ์˜ํ•ด ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด ready ์ƒํƒœ๋กœ ๋Œ์•„๊ฐ€์•ผ ํ•œ๋‹ค.)
  • Terminated: ํ”„๋กœ์„ธ์Šค๊ฐ€ ์™„์ „ํžˆ ์ข…๋ฃŒ๋œ๋‹ค.

์œ„ ๊ทธ๋ฆผ์€ ํ”„๋กœ์„ธ์Šค ์ƒํƒœ ์ „์ด๋„์˜ ๋ชจ์Šต์ด๋‹ค. new์—์„œ๋ถ€ํ„ฐ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์–ด๋–ค ์ž‘์—…์— ์˜ํ•ด ์ƒํƒœ๊ฐ€ ๋ณ€ํ•˜๋Š”์ง€ ๋‚˜ํƒ€๋‚ธ๋‹ค. running์—์„œ ready๋กœ ๋ณ€ํ•  ๋•Œ๋Š” time sharing system์—์„œ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU์‹œ๊ฐ„์„ ๋ชจ๋‘ ์†Œ์ง„ํ•˜์˜€์„ ๋•Œ ์ธํ„ฐ๋ŸฝํŠธ์— ์˜ํ•ด ๊ฐ•์ œ๋กœ ready์ƒํƒœ๋กœ ๋ณ€ํ•˜๊ณ , CPU๋Š” ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹คํ–‰์‹œํ‚จ๋‹ค.

1.4 PCB(Process Control Block)

PCB๋Š” ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ๋ชจ๋“  ์ •๋ณด๊ฐ€ ๋ชจ์—ฌ์žˆ๋Š” ๊ณณ์œผ๋กœ, Task Control Block(TCB) ์ด๋ผ๊ณ ๋„ ํ•œ๋‹ค. PCB์•ˆ์—๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ, ํ”„๋กœ์„ธ์Šค ๋ฒˆํ˜ธ(PID), ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์˜ program counter(pc), register๊ฐ’, MMU(Memory Management Unit)์ •๋ณด, CPU์ ์œ  ์‹œ๊ฐ„ ๋“ฑ์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. PCB๋Š” ์šด์˜์ฒด์ œ ๋‚ด๋ถ€์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์ฝ”๋“œ ๋ถ€๋ถ„์— ์ €์žฅ๋˜์–ด ์žˆ๋‹ค.

CPU๋Š” ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘๊ฐ„ ์ค‘๊ฐ„์— ๋ฐ”๊ฟ”๊ฐ€๋ฉด์„œ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ CPU๋Š” ์ˆ˜ํ–‰์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‚˜๊ฐˆ ๋•Œ, ์ด ํ”„๋กœ์„ธ์Šค์˜ ์ •๋ณด๋ฅผ ์–ด๋”˜๊ฐ€์— ์ €์žฅํ•˜๊ณ  ์žˆ์–ด์•ผ ๋‹ค์Œ์— ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ์ˆ˜ํ–‰ํ•  ๋•Œ ์ด์ „์— ์ˆ˜ํ–‰ํ•œ ๊ทธ ๋‹ค์Œ๋ถ€ํ„ฐ ์ด์–ด์„œ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ์ •๋ณด๋ฅผ ์ €์žฅํ•˜๋Š” ๊ณณ์ด PCB์ด๋‹ค.

1.5 ํ”„๋กœ์„ธ์Šค ํ(Queue)

ํ”„๋กœ์„ธ์Šค์˜ ์ƒ์•  ์ฃผ๊ธฐ๋ฅผ ์ƒ๊ฐํ•ด๋ณด๋ฉด, DISK, Memory, cpu๋“ฑ์„ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค. ๊ฐˆ์ˆ˜๋ก ์ข์•„์ง€๋Š” ๊ณต๊ฐ„๊ณผ, ํ•œ์ •๋œ ์ž์› ๋•Œ๋ฌธ์— ๋ณ‘๋ชฉํ˜„์ƒ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์šฐ๋ฆฌ๋Š” ๋จผ์ € ์‹คํ–‰๋œ ํ”„๋กœ์„ธ์Šค์™€ ๊ฐ™์€ ๊ทœ์น™์— ๋”ฐ๋ผ ์ด ํ”„๋กœ์„ธ์Šค๋“ค์„ ์ค„์„ธ์›Œ ๊ด€๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ˆœ์„œ๋ฅผ Queue๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.

  • Job Queue: ํ•˜๋“œ๋””์Šคํฌ์— ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋˜๊ธฐ ์œ„ํ•ด ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์˜ ํ• ๋‹น ์ˆœ์„œ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ์ด๋‹ค.
  • Ready Queue: CPU ์ ์œ  ์ˆœ์„œ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ์ด๋‹ค.
  • Device Queue: I/O๋ฅผ ํ•˜๊ธฐ ์œ„ํ•œ ์—ฌ๋Ÿฌ ์žฅ์น˜๊ฐ€ ์žˆ๋Š”๋ฐ, ๊ฐ ์žฅ์น˜๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ํ๊ฐ€ ๊ฐ๊ฐ ์กด์žฌํ•œ๋‹ค.

Scheduling(์Šค์ผ€์ฅด๋ง)

์œ„์™€ ๊ฐ™์ด ์—ฌ๋Ÿฌ ํ๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ, ๊ฐ ํ ๋‚ด๋ถ€์— ์ €์žฅ๋œ ์‹ค์ œ ๋ฐ์ดํ„ฐ๋Š” ๊ฐ ํ”„๋กœ์„ธ์Šค์˜ PCB๊ฐ€ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Ÿฌํ•œ ์ˆœ์„œ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ณต๊ฐ„์ด ์žˆ๋‹ค๋ฉด ์ด ์ˆœ์„œ๋ฅผ ์ •ํ•ด์ฃผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ **์Šค์ผ€์ค„๋ง(Scheduling)**์ด๋ผ ํ•œ๋‹ค.

  • Job Queue - Job Scheduler(Long-term scheduler)
  • Ready Queue - CPU Scheduler(Short-term scheduler)
  • Device Queue - Device Scheduler

Job queue์˜ ์ˆœ์„œ๋ฅผ ์ •ํ•ด์ฃผ๋Š” job scheduler๋ฅผ long-term scheduler๋ผ๊ณ ๋„ ํ•˜๋Š”๋ฐ, ์ด๋Š” ์ด ์Šค์ผ€์ค„๋ง์ด ๋ฐœ์ƒํ•˜๋Š” ์‹œ๊ฐ„์ด ๋น„๊ต์  ์˜ค๋ž˜๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.(๋Œ€๋žต ์ดˆ~๋ถ„) ๋ฐ˜๋ฉด์— ready queue์˜ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ short-term scheduler๋ผ๊ณ ๋„ ํ•˜๋Š”๋ฐ, ์ด๋Š” ์Šค์ผ€์ค„๋ง์ด ๋ฐœ์ƒํ•˜๋Š” ์‹œ๊ฐ„์ด ๋งค์šฐ ์งง๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. CPU scheduling์€ ๋ง ๊ทธ๋Œ€๋กœ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์ ์œ ํ•˜๋Š” ์ˆœ์„œ๋ฅผ ์ •ํ•ด์ฃผ๋Š”๋ฐ ์ด๋Š” ๋งค์šฐ ๋น ๋ฅธ ์‹œ๊ฐ„์•ˆ์— ์ด๋ฃจ์–ด์ ธ์•ผํ•œ๋‹ค. ํ˜„๋Œ€ ์ปดํ“จํ„ฐ๊ฐ€ ์—ฌ๋Ÿฌ ํ”„๋กœ๊ทธ๋žจ์„ ๋™์‹œ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ์ฃผ๋Š” ์ด์œ ๊ฐ€ ์ด ์Šค์ผ€์ค„๋ง ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฅด๊ฒŒ ์ด๋ฃจ์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

2. ๋ฉ€ํ‹ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

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

2.1 Degree of multiprogramming

Degree of multiprogramming ๋Š” ํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹น๋˜์–ด ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐœ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค.

2.2. I/O bound process VS CPU bound process

ํ”„๋กœ์„ธ์Šค๋Š” I/O bound process ์™€ CPU bound process ๋กœ ๋‚˜๋‰œ๋‹ค.

  • I/O bound process: ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์—์„œ I/O(์ž…์ถœ๋ ฅ) ์ž‘์—…์ด ์ฐจ์ง€๋Š” ๋น„์ค‘์ด ๋†’์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งํ•œ๋‹ค.

    • Word processor
  • CPU bound process: ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค์—์„œ CPU ์ž‘์—…(๊ณ„์‚ฐ)์ด ์ฐจ์ง€๋Š” ๋น„์ค‘์ด ๋†’์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋งํ•œ๋‹ค.

    • Super computer

์šด์˜์ฒด์ œ, ์ •ํ™•ํžˆ ๋งํ•˜๋ฉด job scheduler ๋Š” ์ด๋Ÿฌํ•œ ํ”„๋กœ์„ธ์„œ์˜ ํŠน์ง•์„ ๊ฐ์•ˆํ•˜์—ฌ I/O bound process์™€ CPU bound process๋ฅผ ์ ์ ˆํžˆ ๋ถ„๋ฐฐํ•ด์„œ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.

2.3 Medium-term scheduler

Medium-term scheduler๋Š” ๋ง๊ทธ๋Œ€๋กœ short-term๋ณด๋‹ค๋Š” ๋œ ๋ฐœ์ƒํ•˜์ง€๋งŒ, long-term๋ณด๋‹ค๋Š” ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” scheduler์ด๋‹ค. ํ•˜๋Š” ์ผ์€ ์šด์˜์ฒด์ œ๊ฐ€ ์‹คํ–‰ํ•˜๋Š” ๋™์•ˆ ์ฃผ๊ธฐ์ ์œผ๋กœ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ๋Š” ์ „์ฒด ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ ์ง์ ‘์ ์œผ๋กœ CPU์™€ ์ผ์„ ํ•˜์ง€ ์•Š๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ฐพ์•„ ๋ณด์กฐ๊ธฐ์–ต์žฅ์น˜๋กœ ์˜ฎ๊ธฐ๋Š” ๊ฒƒ์ด๋‹ค. ์˜ฎ๊ธฐ๋Š” ๊ธฐ์ค€์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์žˆ๊ฒ ์ง€๋งŒ ๋Œ€ํ‘œ์ ์œผ๋กœ ์žฅ๊ธฐ๊ฐ„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋‹ค.

Swapping

์ผํ•˜์ง€ ์•Š๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์ซ’์•„๋‚ด๋Š” ํ–‰์œ„๋ฅผ Swapping์ด๋ผ ๋ถ€๋ฅด๋Š”๋ฐ, ์ด๋Š” ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์žฅ์‹œ๊ฐ„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ํ•˜๋“œ๋””์Šคํฌ(Swap device = Backing store, ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋“œ๋””์Šคํฌ๋Š” File system + Backing store ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.)๋กœ ์˜ฎ๊ฒจ์ฃผ๊ณ (Swap out ), ๋‚˜์ค‘์— ์ด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค์‹œ ์‚ฌ์šฉ๋˜๋ ค๊ณ  ํ•˜๋ฉด ํ•˜๋“œ๋””์Šคํฌ์—์„œ ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋ฅผ ๋‹ค์‹œ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•ด์ค€๋‹ค.(Swap in)

Swap out์„ ํ†ตํ•ด ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ณต๊ฐ„์ด ์ƒ๊ธฐ๋ฏ€๋กœ ์ด๋ฅผ ๋”์šฑ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ swap out๋œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค์‹œ swap in์œผ๋กœ ๋ฉ”์ธ ๋ฉ”๋ชจ๋ฆฌ์— ํ• ๋‹นํ•˜๋ ค๊ณ  ํ•  ๋•Œ ์ด์ „์˜ ๊ณต๊ฐ„์œผ๋กœ ํ• ๋‹น๋˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์œ„์— ๋งํ–ˆ๋“ฏ์ด swap out์œผ๋กœ ์ƒ๊ธด ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

2.4 Context Switching(๋ฌธ๋งฅ ์ „ํ™˜)

Context switching์€ CPU๊ฐ€ ํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ์˜ฎ๊ฒจ๊ฐ€๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค. ์ฆ‰, ํ•œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰์ค‘์ธ ๊ฒƒ์„ ๋ฉˆ์ถ”๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ด๋‹ค.

  • Scheduler
    • ์—ฌ๊ธฐ์„œ ์Šค์ผ€์ค„๋Ÿฌ๋Š” CPU Scheduler๋ฅผ ๋งํ•˜๋ฉฐ, CPU๊ฐ€ ์–ด๋Š ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํƒํ• ์ง€ ์ •ํ•œ๋‹ค.
  • Dispatcher
    • ์‹ค์ œ context switching์ด ๋ฐœ์ƒํ•˜๋ฉด CPU์˜ ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒˆ๋กœ ์‹œ์ž‘๋˜๋Š” ๋ฐ์ดํ„ฐ๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค. ์ด ๊ณผ์ •์—์„œ ํ˜„์žฌ ์‹คํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค์˜ PCB์— ํ˜„์žฌ๊นŒ์ง€ ์ž‘์—…๊ณผ์ •์œผ๋กœ ๊ฐฑ์‹ ํ•˜๊ณ , ์ƒˆ๋กœ ์‹œ์ž‘๋˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ PCB ๋ฐ์ดํ„ฐ๋ฅผ CPU๋กœ ๋ณต์›(Restore)ํ•˜๋Š” ์ž‘์—…์„ ํ•œ๋‹ค.
  • Context switching overhead
    • Context switching์ด ๋ฐœ์ƒํ•  ๋•Œ๋งˆ๋‹ค, dispatcher์—์„œ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์„ ๋งค๋ฒˆ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๋ฉฐ ์ด ๋ชจ๋“  ๊ฒƒ์€ overhead(๋ถ€๋‹ด)์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฌธ๋งฅ ์ „ํ™˜์€ ๋งค์šฐ ์ž์ฃผ ๋ฐœ์ƒํ•˜๋Š” ์ž‘์—…์ด๋ฏ€๋กœ overhead๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ๋Š” dispatcher๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ฝ”๋“œ์— ๋Œ€ํ•œ ํšจ์œจ์„ ์ตœ๋Œ€ํ•œ ๋†’์—ฌ์ฃผ์–ด์•ผํ•œ๋‹ค.

Reference