Post

[OS] Operating System(5-1): CPU Scheduling

[OS] Operating System(5-1): CPU Scheduling

๐Ÿ€ ์šด์˜์ฒด์ œ ์ „๊ณต ์ˆ˜์—… ์ •๋ฆฌ

CPU Scheduling์€ ํ˜„๋Œ€์—์„œ๋Š” Thread Scheduling๊ณผ ๊ฐ™๋‹ค

CPU Scheduling basic concept

CPUโ€“I/O Burst Cycle


  • ํ”„๋กœ์„ธ์Šค ์‹คํ–‰์€ CPU burst์™€ I/O burst์˜ ๋ฐ˜๋ณต์œผ๋กœ ๊ตฌ์„ฑ๋จ.
  • ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋žจ์€ ์งง์€ CPU burst์™€ ๊ธด I/O burst๋ฅผ ๊ฐ€์ง„๋‹ค.
  • CPU brust ๋ถ„ํฌ๋Š” ๋Œ€๋ถ€๋ถ„ short bursts๊ฐ€ ๋งŽ๊ณ  longer bursts๋Š” ์ ์€ ํ˜•ํƒœ๋ฅผ ๋ณด์ธ๋‹ค.
  • CPU ํ™œ์šฉ์„ ์ตœ๋Œ€ํ•œ์œผ๋กœ ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.
    • CPU burst: ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์‹œ๊ฐ„
    • I/O burst: ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž…์ถœ๋ ฅ ์ž‘์—…์„ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„

alt text

CPU Scheduler


  • CPU Scheduler๋Š” Ready Queue์— ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ์ค‘ ์–ด๋–ค ํ”„๋กœ์„ธ์Šค์—๊ฒŒ CPU core๋ฅผ ํ• ๋‹นํ•  ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค.

  • CPU scheduling decisions์€ ๋‹ค์Œ ๋„ค ๊ฐ€์ง€ ์ƒํ™ฉ์—์„œ ๋ฐœ์ƒ:

    1. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰ ์ƒํƒœ์—์„œ ๋Œ€๊ธฐ ์ƒํƒœ๋กœ ์ „ํ™˜๋  ๋•Œ
    2. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰ ์ƒํƒœ์—์„œ ์ค€๋น„ ์ƒํƒœ๋กœ ์ „ํ™˜๋  ๋•Œ
    3. ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋Œ€๊ธฐ ์ƒํƒœ์—์„œ ์ค€๋น„ ์ƒํƒœ๋กœ ์ „ํ™˜๋  ๋•Œ
    4. ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ข…๋ฃŒ๋  ๋•Œ

โœ…CPU Scheduling์— ๋‘๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.

  1. Nonpreemptive(๋น„์„ ์ ํ˜•)
    • ์ƒํ™ฉ 1๊ณผ 4์—์„œ๋งŒ ์Šค์ผ€์ค„๋ง์ด ๋ฐœ์ƒ
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ํ• ๋‹น๋ฐ›์œผ๋ฉด ์ž๋ฐœ์ ์œผ๋กœ ๋†“์„ ๋•Œ๊นŒ์ง€ CPU๋ฅผ ๋…์ 
    • ์ฆ‰, ์ข…๋ฃŒ/wating ์ƒํƒœ๊ฐ€ ์•„๋‹ˆ๋ฉด CPU๋ฅผ ๋…์ ํ•จ
  2. Preemptive(์„ ์ ํ˜•)
    • ๋ชจ๋“  ์ƒํ™ฉ์—์„œ ์Šค์ผ€์ค„๋ง์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ
    • OS๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๋กœ๋ถ€ํ„ฐ CPU๋ฅผ ๊ฐ•์ œ๋กœ ํšŒ์ˆ˜ํ•  ์ˆ˜ ์žˆ๋‹ค
    • ๊ณ ๋ คํ•  ์  3๊ฐ€์ง€
    1. shared data์— ๋Œ€ํ•œ ์ ‘๊ทผ(race condition ๋ฐœ์ƒ ๊ฐ€๋Šฅ)
      • race condition(๊ฒฝ์Ÿ ์กฐ๊ฑด): ๋‘˜ ์ด์ƒ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ž์›์— ์ ‘๊ทผํ•˜๋ฉด์„œ, ์‹คํ–‰ ์ˆœ์„œ์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๊ฐ€ ๋‹ฌ๋ผ์ง€๋Š” ๋ฒ„๊ทธ๋ฅผ ์ผ์œผํ‚ฌ ์ˆ˜ ์žˆ๋Š” ์ƒํ™ฉ
    2. kernel mode์—์„œ์˜ ์„ ์ (์„ ์ ์‹œ์— kernel์—์„œ ์˜จ์ „ํ•˜๊ฒŒ task๊ฐ€ ๋๋‚˜์ง€ ์•Š์€์ฑ„๋กœ ์ „ํ™˜๋˜๋ฉด ๋ฌธ์ œ๊ฐ€ ์ƒ๊น€)
    3. ์ค‘์š” OS ํ™œ๋™ ์ค‘ interrupts ๋ฐœ์ƒ(๋ถˆ๊ฐ€ํ”ผํ•  ๊ฒฝ์šฐ interrupt๋ฅผ disableํ•˜๊ณ  ๋๋‚˜๋ฉด ๋‹ค์‹œ enable์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ)

Dispatcher


  • Dispatcher: CPU ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์„ ํƒํ•œ ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์‹ค์ œ๋กœ CPU ์ œ์–ด๊ถŒ์„ ๋„˜๊ฒจ์ฃผ๋Š” ๋ชจ๋“ˆ
    โ†’ Scheduler๋‚ด์— task์˜ ์‹คํ–‰์ˆœ์„œ๋ฅผ ์ œ์–ดํ•˜๋Š” ์—ญํ• 

  • ์ฃผ์š” ๊ธฐ๋Šฅ
    • context switching: ํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ์˜ฎ๊ฒจ๊ฐ€๋Š” ์ž‘์—…
    • switching to user mode
    • ํ”„๋กœ๊ทธ๋žจ์„ ์žฌ์‹œ์ž‘ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ์ž ํ”„๋กœ๊ทธ๋žจ์˜ ํŠน์ • ์œ„์น˜๋กœ ์ ํ”„ํ•˜๋Š” ์ž‘์—…
  • Dispatch Latency(์ง€์—ฐ): ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„

Scheduling Criteria


  • CPU utilization(์ด์šฉ๋ฅ ):
    • CPU๊ฐ€ ์–ผ๋งˆ๋‚˜ ๋ฐ”์˜๊ฒŒ ์ผํ•˜๋Š”์ง€๋ฅผ ์ธก์ •
    • 40% ์ดํ•˜๋Š” ๊ฐ€๋ฒผ์šด ์‹œ์Šคํ…œ ๋ถ€ํ•˜, 90% ์ด์ƒ์€ ๋ฌด๊ฑฐ์šด ์‹œ์Šคํ…œ ๋ถ€ํ•˜๋ฅผ ์˜๋ฏธ
  • Throughput(์ฒ˜๋ฆฌ๋Ÿ‰):
    • ๋‹จ์œ„ ์‹œ๊ฐ„๋‹น ์ฒ˜๋ฆฌ/์™„๋ฃŒ๋˜๋Š” ํ”„๋กœ์„ธ์Šค์˜ ์ˆ˜
  • Turnaround Time(๋ฐ˜ํ™˜ ์‹œ๊ฐ„):
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹œ์ž‘ํ•ด์„œ ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„
  • Waiting Time(๋Œ€๊ธฐ ์‹œ๊ฐ„):
    • ํ”„๋กœ์„ธ์Šค๊ฐ€ Ready Queue์—์„œ ๊ธฐ๋‹ค๋ฆฌ๋Š” ์ด ์‹œ๊ฐ„
    • CPU time์ด๋‚˜ I/O time์€ ์Šค์ผ€์ค„๋Ÿฌ๊ฐ€ ์ค„์ผ ์ˆ˜ ์—†๋‹ค.
    • ์ฆ‰, ๋Œ€๊ธฐ์‹œ๊ฐ„์„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ready queue์— ๋จธ๋ฌด๋Š” ์‹œ๊ฐ„์œผ๋กœ ์ธก์ •
  • Response Time(์‘๋‹ต ์‹œ๊ฐ„):
    • ์š”์ฒญ ์ œ์ถœ ์‹œ์ ๋ถ€ํ„ฐ ์ฒซ ์‘๋‹ต์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€์˜ ์‹œ๊ฐ„
    • ๋ฐ˜ํ™˜์‹œ๊ฐ„์ด ๊ฐ™์•„๋„ ์‘๋‹ต์‹œ๊ฐ„์ด ์งง์œผ๋ฉด ๊ฒฐ๊ณผ๋ฅผ ๋ฏธ๋ฆฌ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํšจ๊ณผ๊ฐ€ ์žˆ์Œ
    • ์ผ๋ฐ˜์ ์œผ๋กœ ํ‰๊ท ๋ณด๋‹ค ํŽธ์ฐจ๋ฅผ ์ค„์ด๋Š” ๊ฒƒ์ด ๋” ์ค‘์š”

Scheduling Algorithm

๊ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ‰๊ฐ€ ๊ธฐ์ค€์€ ํ‰๊ท  ๋Œ€๊ธฐ์‹œ๊ฐ„์ด๋‹ค. ํ‰๊ท  ๋Œ€๊ธฐ์‹œ๊ฐ„์ด ์งง์„ ์ˆ˜๋ก ์ข‹์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ๊ณ  ํ‰๊ฐ€

FCFS(First-Come, First-Served)


Nonpreemptive(๋น„์„ ์ ํ˜•) ์Šค์ผ€์ค„๋ง์ด๋ฉฐ, ๋จผ์ € ๋„์ฐฉํ•œ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋จผ์ € ์‹คํ–‰ alt text

p1,p2,p3 ์ˆœ์œผ๋กœ ๋“ค์–ด์˜จ ๊ฒฝ์šฐ
Gantt Chart๋Š” ๊ทธ๋ฆผ์ฒ˜๋Ÿผ ๋‚˜์˜ด
ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„: (0 + 24 + 27)/3 = 17

alt text

p2,p3,p1 ์ˆœ์œผ๋กœ ๋“ค์–ด์˜จ ๊ฒฝ์šฐ
ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„: (6 + 0 + 3)/3 = 3

๋‘ ๊ฐœ์˜ ์ˆœ์„œ๋ฅผ ๋น„๊ตํ•ด๋ณด๋ฉด ํ•œ task๋Š” ๊ฐ™์ง€๋งŒ ํ‰๊ท  ์‹œ๊ฐ„์ด ์—„์ฒญ๋‚˜๊ฒŒ ์ฐจ์ด๋‚œ๋‹ค.

โŒ ๋‹จ์ : Convoy Effect - CPU ์ง‘์•ฝ์ ์ธ ๊ธด ํ”„๋กœ์„ธ์Šค ๋’ค์— ์งง์€ ํ”„๋กœ์„ธ์Šค๋“ค์ด ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ ค์•ผ ํ•˜๋Š” ํ˜„์ƒ

SJF(Shortest Job First)


  • ํ‰๊ท  ๋Œ€๊ธฐ์‹œ๊ฐ„์„ ์ค„์ด๊ธฐ ์œ„ํ•ด CPU brust๊ฐ€ ๊ฐ€์žฅ ์งง์€ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋จผ์ € ์‹คํ–‰
  • Nonpreemptive(๋น„์„ ์ ํ˜•) ์Šค์ผ€์ค„๋ง
  • ์ตœ์†Œ ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ์ œ๊ณตํ•˜๋Š” optimalํ•œ ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ๋‹ค์Œ CPU brust ๊ธธ์ด๋ฅผ ์ •ํ™•ํžˆ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ต๋‹ค. alt text

๊ทธ๋Ÿผ CPU Brust๋Š” ์–ด๋–ป๊ฒŒ ์ธก์ •ํ•ด์•ผํ•˜๋Š”๊ฐ€??

โœ… exponential averaging(์ง€์ˆ˜ ๊ฐ€์ค‘ํ‰๊ท )๊ธฐ๋ฒ•์„ ์‚ฌ์šฉ

1
ฯ„โ‚™โ‚Šโ‚ = ฮฑยทtโ‚™ + (1-ฮฑ)ยทฯ„โ‚™
  • ฯ„โ‚™ = ์‹ค์ œ n๋ฒˆ์งธ CPU brust์˜ ๊ธธ์ด
  • ฯ„โ‚™โ‚Šโ‚ = ๋‹ค์Œ CPU brust์˜ ์˜ˆ์ธก ๊ฐ’
  • ฮฑ๋Š” 0๊ณผ 1์‚ฌ์ด ๊ฐ’
  • ฮฑ ๊ฐ’์— ๋”ฐ๋ผ ์ตœ๊ทผ ์ธก์ •๊ฐ’์˜ ๋ฐ˜์˜ ๋น„์œจ์ด ๊ฒฐ์ •๋œ๋‹ค. alt text

    ฮฑ = 0: ๊ณผ๊ฑฐ ๊ธฐ๋ก๋งŒ ๊ณ ๋ ค - ฯ„โ‚™โ‚Šโ‚ = tโ‚™
    ฮฑ = 1: ์ตœ๊ทผ CPU ๋ฒ„์ŠคํŠธ๋งŒ ๊ณ ๋ ค - ฯ„โ‚™โ‚Šโ‚ = ฮฑยทtโ‚™

SRTF(Shortest Remaining Time First)

  • SJF์˜ ์„ ์ ํ˜• ๋ฒ„์ „(SRTF = preemptive SJF)
  • ์ƒˆ๋กœ์šด ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋„์ฐฉํ•  ๋•Œ๋งˆ๋‹ค ๋‚จ์€ ์‹คํ–‰ ์‹œ๊ฐ„์„ ๋น„๊ตํ•˜์—ฌ ๋” ์งง์€ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU๋ฅผ ์ฐจ์ง€
  • alt text

    ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„: [(10-1)+(1-1)+(17-2)+(5-3)]/4 = 26/4 = 6.5
    p1, p2 .. ์ˆœ์ธ๋ฐ p2๋Š” 1์ดˆ๋’ค์— ๋„์ฐฉํ•˜๊ณ  ๋ฐ”๋กœ ์‹คํ–‰ํ–ˆ์œผ๋‹ˆ (1-1)์ด๋‹ค. ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„์ž„์„ ์ฃผ์˜

RR(Round Robin)


  • ๊ฐ ํ”„๋กœ์„ธ์Šค๋Š” ์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰(time quantum) q๋ฅผ ๋ฐ›๋Š”๋‹ค.
  • q ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ํ”„๋กœ์„ธ์Šค๋Š” ์„ ์ ๋˜์–ด Ready Queue์˜ ๋์œผ๋กœ ์ด๋™
  • q๊ฐ€ ํฌ๋ฉด FCFS์™€ ์œ ์‚ฌํ•ด์ง€๊ณ , q๊ฐ€ ๋งค์šฐ ์ž‘์œผ๋ฉด context switch ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ฆ๊ฐ€ alt text

    q๊ฐ€ 4์ธ ๊ฒฝ์šฐ
    SJF๋ณด๋‹ค ํ‰๊ท  ๋Œ€๊ธฐ์‹œ๊ฐ„์€ ๊ธธ์ง€๋งŒ, response๊ฐ€ ๋” ์ข‹์Œ
    q๋Š” 10ms~100ms ์ •๋„์ด๋ฉฐ, context switch time(<10ฮผs)๋ณด๋‹ค ์ถฉ๋ถ„ํžˆ ์ปค์•ผ ํ•œ๋‹ค.
    ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„ = (4+7+6)/3 = 5.66

alt text

q๊ฐ€ ์ค„์–ด๋“ฆ์— ๋”ฐ๋ผ context switch๊ฐ€ ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚จ
์ฆ‰, ํƒ€์ž„ ํ€€ํ…€ ์„ค์ •์— ๋ฏผ๊ฐํ•จ

alt text

์ผ๋ฐ˜์ ์œผ๋กœ CPU brust์˜ 80%๊ฐ€ ์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰๋ณด๋‹ค ์ž‘์„ ๋•Œ ํšจ์œจ์ ์ด๋‹ค.

Priority Scheduling


  • ๊ฐ ํ”„๋กœ์„ธ์Šค์— ์šฐ์„ ์ˆœ์œ„ ๋ฒˆํ˜ธ(์ •์ˆ˜)๋ฅผ ํ• ๋‹นํ•˜๊ณ , ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„(๊ฐ€์žฅ ์ž‘์€ ์ •์ˆ˜)์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ์„ ํƒํ•œ๋‹ค.
  • ์„ ์ ํ˜•๊ณผ ๋น„์„ ์ ํ˜• ๋ชจ๋‘ ๊ฐ€๋Šฅ
    • ์„ ์ ํ˜•: ๋‚˜๋ณด๋‹ค ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋“ค์–ด์˜ค๋ฉด ์–‘๋ณดํ•˜๋Š” ๋ฐฉ์‹
    • ๋น„์„ ์ ํ˜•: ๋‚˜๋ณด๋‹ค ๋” ๋†’์€ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋“ค์–ด์™€๋„ ํ•˜๋˜ ์ผ์„ ๋งˆ๋ฌด๋ฆฌํ•˜๋Š” ๋ฐฉ์‹

โŒ ๋ฌธ์ œ์ : Starvation - ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰ ๊ธฐํšŒ๋ฅผ ์–ป์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ๋‹ค.

โœ… ํ•ด๊ฒฐ์ฑ…: Aging - ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ํ”„๋กœ์„ธ์Šค์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ ์ง„์ ์œผ๋กœ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.

alt text

์ด ์˜ˆ์‹œ๋Š” ๋น„์„ ์ ํ˜•
ํ‰๊ท  ๋Œ€๊ธฐ ์‹œ๊ฐ„ = (0+6+16+18+1)/5 = 8.2msec

๊ทธ๋Ÿผ ๋™์‹œ์— ๋„์ฐฉํ•˜๊ณ  ์šฐ์„ ์ˆœ์œ„๋„ ๊ฐ™์€ ๊ฒฝ์šฐ๋Š”?

alt text alt text

๊ฐ™์€ ์šฐ์„ ์ˆœ์œ„๋Š” Round-Robin์„ ์‚ฌ์šฉํ•œ๋‹ค.
q๊ฐ€ 2์ธ ๊ฒฝ์šฐ๋Š” ์˜ˆ์‹œ์™€ ๊ฐ™์€ ์Šค์ผ€์ค„๋ง์„ ๊ฐ€์ง„๋‹ค.

Multilevel Queue


  • Ready Queue๋ฅผ ์šฐ์„ ์ˆœ์œ„๋ณ„๋กœ ์—ฌ๋Ÿฌ ํ๋กœ ๋ถ„ํ• ํ•œ๋‹ค. alt text

  • ์ผ๋ฐ˜์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค ์œ ํ˜•์— ๋”ฐ๋ผ ํ๋ฅผ ๋ถ„๋ฅ˜ํ•œ๋‹ค: alt text

    real-time process (์˜ˆ: ์‘๊ธ‰ ์•Œ๋ฆผ ์‹œ์Šคํ…œ, ์„ผ์„œ ์ œ์–ด ๋“ฑ โ†’ ์‹œ๊ฐ„ ๋‚ด์— ๊ผญ ์‹คํ–‰๋˜์–ด์•ผ ํ•จ) system process interactive process batch process (์ตœํ•˜์œ„ ์šฐ์„ ์ˆœ์œ„)

  1. ๋†’์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋ฌด์กฐ๊ฑด ๋จผ์ € ์‹คํ–‰ํ•  ์ˆ˜๋„ ์žˆ๊ณ ,
  2. ํ์— ๋”ฐ๋ผ time-slice (์‹œ๊ฐ„ ํ• ๋‹น)์„ ๋‹ค๋ฅด๊ฒŒ ์ค„ ์ˆ˜๋„ ์žˆ์Œ.

Multilevel Feedback Queue


  • ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ ์‚ฌ์ด๋ฅผ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” multilevel queue์ด๋‹ค.
  • CPU๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋Š” ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„ ํ๋กœ ์ด๋™ํ•˜๊ณ , ์˜ค๋ž˜ ๊ธฐ๋‹ค๋ฆฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋†’์€ ์šฐ์„ ์ˆœ์œ„ ํ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์Œ.
  • ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ด์ง€๋งŒ ๊ฐ€์žฅ ๋ณต์žกํ•œ ์Šค์ผ€์ค„๋ง ์•Œ๊ณ ๋ฆฌ์ฆ˜

โœ… ์„ค์ • ๊ฐ€๋Šฅํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ:

  • ๋ช‡ ๊ฐœ์˜ ํ๋ฅผ ์“ธ์ง€ (number of queues)
  • ๊ฐ ํ๋งˆ๋‹ค ์–ด๋–ค ์Šค์ผ€์ค„๋ง ๋ฐฉ์‹ ์“ธ์ง€ (scheduling algorithm)
  • ์–ด๋–ค ๊ธฐ์ค€์œผ๋กœ ํ๋ฅผ ์˜ฌ๋ฆด์ง€/๋‚ด๋ฆด์ง€ (upgrade, demote)
  • ์ฒ˜์Œ ์–ด๋–ค ํ์— ๋„ฃ์„์ง€ (entry queue)

alt text

  • Scheduling ํ๋ฆ„:
    1. ์ƒˆ job์€ Qโ‚€๋ถ€ํ„ฐ ์‹œ์ž‘ โคท CPU๋ฅผ ๋ฐ›์œผ๋ฉด 8ms ์‚ฌ์šฉํ•จ โคท ๋‹ค ๋ชป ๋๋‚ด๋ฉด Qโ‚์œผ๋กœ ์ด๋™
    2. Qโ‚์—์„  16ms ์‹œ๊ฐ„ ํ• ๋‹น โคท ๊ทธ๋ž˜๋„ ๋‹ค ๋ชป ๋๋‚ด๋ฉด Qโ‚‚๋กœ ์ด๋™
    3. Qโ‚‚์—์„  FCFS ๋ฐฉ์‹ โคท ์—ฌ๊ธฐ์„  ์‹œ๊ฐ„์ œํ•œ ์—†์ด ์ฒ˜๋ฆฌ๋จ

๐Ÿ“ํ•ต์‹ฌ ์ •๋ฆฌ

  • ๋นจ๋ฆฌ ๋๋‚  ์ˆ˜ ์žˆ๋Š” ์งง์€ job์€ ๋นจ๋ฆฌ ๋๋‚ด๊ณ , ๊ธด job์€ ์ ์  ๋‚ฎ์€ ์šฐ์„ ์ˆœ์œ„๋กœ ๋ฐ€์–ด๋ƒ„
  • ์œ ์—ฐํ•˜๊ฒŒ ํ ์ด๋™ ๊ฐ€๋Šฅ โ†’ CPU ์ž์› ๋ฐฐ๋ถ„ ํšจ์œจ์ 

Thread Scheduling


๐Ÿ“šThread Scheduling์€ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ CPU ์‹œ๊ฐ„์„ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆ„์–ด ์‚ฌ์šฉํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

โœ…์Šค๋ ˆ๋“œ ์Šค์ผ€์ค„๋ง์˜ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ๋ฒ”์œ„:

  1. PCS - Process Contention Scope
    • ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค ๋‚ด์˜ ์Šค๋ ˆ๋“œ๋“ค ๊ฐ„์— CPU ์‹œ๊ฐ„์„ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆŒ์ง€ ๊ฒฐ์ •
    • ์Šค๋ ˆ๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์‚ฌ์šฉ์ž ์ˆ˜์ค€ ์Šค๋ ˆ๋“œ๋ฅผ LWP์— ๋งคํ•‘ํ•˜์—ฌ ๊ด€๋ฆฌ
      • LWP (Lightweight Process): user-level thread๊ฐ€ ์‹ค์ œ๋กœ ์‹คํ–‰๋˜๋Š” ๋…ผ๋ฆฌ์ ์ธ ์Šค๋ ˆ๋“œ ๋‹จ์œ„
    • ์Šค์ผ€์ค„๋ง ๊ฒฝ์Ÿ์ด ํ”„๋กœ์„ธ์Šค ๋‚ด๋ถ€์—์„œ๋งŒ ๋ฐœ์ƒ
    • ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ์Šค๋ ˆ๋“œ์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ
  2. SCS - System Contention Scope
    • ์‹œ์Šคํ…œ ์ „์ฒด์˜ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋“ค ๊ฐ„์— CPU ์‹œ๊ฐ„์„ ์–ด๋–ป๊ฒŒ ๋‚˜๋ˆŒ์ง€ ๊ฒฐ์ •
    • ์ปค๋„์ด ์ง์ ‘ ์Šค๋ ˆ๋“œ๋ฅผ ์Šค์ผ€์ค„๋ง
    • ๋ชจ๋“  ํ”„๋กœ์„ธ์Šค์˜ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ์„œ๋กœ ๊ฒฝ์Ÿ

alt text

  1. many-to-many model
    • ๋‹ค์ˆ˜์˜ ์‚ฌ์šฉ์ž ์ˆ˜์ค€ ์Šค๋ ˆ๋“œ๋ฅผ ์ ์ ˆํ•œ ์ˆ˜์˜ ์ปค๋„ ์Šค๋ ˆ๋“œ์— ๋งคํ•‘
    • ํ”„๋กœ์„ธ์Šค ๋‚ด ์Šค์ผ€์ค„๋ง์€ ์‚ฌ์šฉ์ž ์ˆ˜์ค€ ์Šค๋ ˆ๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ๋‹ด๋‹น(PCS)
  2. One-to-One model
    • ๊ฐ ์‚ฌ์šฉ์ž ์ˆ˜์ค€ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ์ปค๋„ ์ˆ˜์ค€ ์Šค๋ ˆ๋“œ์— ๋งคํ•‘
    • ์žฅ์ : ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฐจ๋‹จ๋˜์–ด๋„ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅ, ๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์„œ์—์„œ ๋ณ‘๋ ฌ ์‹คํ–‰ ๊ฐ€๋Šฅ
    • ๋‹จ์ : ์Šค๋ ˆ๋“œ ์ƒ์„ฑ ์‹œ ์ปค๋„ ์Šค๋ ˆ๋“œ๋„ ์ƒ์„ฑํ•ด์•ผ ํ•˜๋ฏ€๋กœ ์˜ค๋ฒ„ํ—ค๋“œ ๋ฐœ์ƒ
    • Linux, Windows, macOS ๋“ฑ ํ˜„๋Œ€ ์šด์˜์ฒด์ œ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ

Pthread Scheduling


  • PTHREAD_SCOPE_PROCESS: PCS ์Šค์ผ€์ค„๋ง ์‚ฌ์šฉ
  • PTHREAD_SCOPE_SYSTEM: SCS ์Šค์ผ€์ค„๋ง ์‚ฌ์šฉ

Linux์™€ macOS๋Š” PTHREAD_SCOPE_SYSTEM๋งŒ ์ง€์›

1
2
3
// Pthread๋Š” user-level์—์„œ ๊ตฌํ˜„๋  ์ˆ˜๋„ ์žˆ๊ณ  kernel-level์—์„œ ๊ตฌํ˜„๋  ์ˆ˜๋„ ์žˆ์–ด์„œ ๋‘๊ฐ€์ง€ scope๊ฐ€ ์กด์žฌ
pthread_attr_setscope(pthread_attr_t *attr, int scope);
pthread_attr_getscope(pthread_attr_t *attr, int *scope);

Multiple-Processor Scheduling


multiprocessor์˜ CPU Scheduling์€ ํ›จ์‹  complex

  • ์—ฌ๋Ÿฌ ๊ฐœ์˜ CPU๋ฅผ ๋ฃŒ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ

โœ…multiprocessor์˜ ๊ตฌ์„ฑ:

  1. Multicore CPU: ํ•˜๋‚˜์˜ ์นฉ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ”„๋กœ์„ธ์„œ ์ฝ”์–ด๊ฐ€ ํฌํ•จ
  2. Multithreaded core: ํ•˜๋‚˜์˜ ์ฝ”์–ด๊ฐ€ ์—ฌ๋Ÿฌ ํ•˜๋“œ์›จ์–ด ์Šค๋ ˆ๋“œ๋ฅผ ์ง€์›
  3. NUMA systems(Non Uniform Memory Access): ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์‹œ๊ฐ„์ด ๊ท ์ผํ•˜์ง€ ์•Š์Œ
  4. Heterogeneous multiprocessing: ๋ชจ๋ฐ”์ผ ์‹œ์Šคํ…œ์—์„œ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ํ•˜์ง€๋งŒ ์ „์›์„ ์ ˆ์•ฝํ•˜๊ธฐ ์œ„ํ•ด ์„ฑ๋Šฅ์ด ๋‹ค๋ฅธ ์ฝ”์–ด๋ฅผ ํ•จ๊ป˜ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ˜•ํƒœ

Symmetric multiprocessing(SMP)


๐Ÿ“šSymmetric multiprocessing(SMP): ๋ชจ๋“  ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋™๋“ฑ, ๊ฐ์ž ์Šค์ผ€์ค„๋ง์„ ์ฒ˜๋ฆฌ

  • ์ด๋Š” ํ˜„๋Œ€ ์šด์˜์ฒด์ œ์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๋ฐฉ์‹

โœ…SMP์˜ ์Šค๋ ˆ๋“œ ๊ด€๋ฆฌ ๋ฐฉ์‹:

  1. Common(๊ณต์œ ) ready queue:
    • ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ๊ณตํ†ต๋œ readt queue์— ์ €์žฅ๋จ
    • ๋ชจ๋“  ํ”„๋กœ์„ธ์„œ๊ฐ€ ์ด ํ์—์„œ ์ž‘์—…์„ ๊ฐ€์ ธ์˜ด
  2. Per-core run queues:
    • ๊ฐ ํ”„๋กœ์„ธ์„œ๊ฐ€ ์ž์‹ ๋งŒ์˜ ๊ฐœ๋ณ„ ์Šค๋ ˆ๋“œ ํ๋ฅผ ๊ฐ€์ง alt text

      (a) ready queue๋ฅผ ๊ณต์œ  โ†’ race condition ๋ฐœ์ƒ ๊ฐ€๋Šฅ
      race condition์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Locking์ด ํ•„์š” โ†’ ์„ฑ๋Šฅ ์ €ํ•˜+high contention (b) ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ํ˜•ํƒœ, Cahce์˜ ์„ฑ๋Šฅ์ด ์ข‹์Œ(workload balacning ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ•„์š”)

Multicore Processor


ํ˜„๋Œ€์—๋Š” ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์„œ ์ฝ”์–ด๋ฅผ ํ•˜๋‚˜์˜ ์นฉ์— ๋ฐฐ์น˜ํ•˜๋Š” ์ถ”์„ธ โœ…Multicore ์žฅ์ :

  1. ๋น ๋ฅธ ์ฒ˜๋ฆฌ ์†๋„
  2. ์ „๋ ฅ ํšจ์œจ์„ฑ
  3. ์ฝ”์–ด๋ณ„ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ(ํ•˜๋“œ์›จ์–ด ์Šค๋ ˆ๋“œ)

๋˜ํ•œ memory stall ์ƒํ™ฉ์„ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

  • memory stall(๋ฉ”๋ชจ๋ฆฌ ์ง€์—ฐ): CPU๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์˜ค๊ฑฐ๋‚˜ ๋‚ด๋ณด๋‚ผ๋•Œ ์•„๋ฌด๊ฒƒ๋„ ์•ˆํ•˜๋Š” ํ˜„์ƒ
  1. ๋‹จ์ผ ์Šค๋ ˆ๋“œ์˜ ๊ฒฝ์šฐ alt text

    ๋ฉ”๋ชจ๋ฆฌ ์ง€์—ฐ ๋™์•ˆ CPU๊ฐ€ Idle ์ƒํƒœ(ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰ํ•˜๊ณ  ์žˆ์ง€ ์•Š์€ ์ƒํƒœ)๋กœ ๋Œ€๊ธฐํ•˜๋ฏ€๋กœ CPU ํ™œ์šฉ๋ฅ ์ด ๋‚ฎ์Œ

  2. ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์˜ ๊ฒฝ์šฐ alt text

    ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ ์ง€์—ฐ ์ƒํƒœ โ†’ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋กœ ์ „ํ™˜, CPU ์ž์›์„ ๊ณ„์† ํ™œ์šฉ

Multithreaded Multicore System


๐Ÿ“š Multithreaded Multicore System: ๊ฐ ์ฝ”์–ด๊ฐ€ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ•˜๋“œ์›จ์–ด ์Šค๋ ˆ๋“œ๋ฅผ ์ง€์›ํ•˜๋Š” ์‹œ์Šคํ…œ

  • ๊ฐ ์ฝ”์–ด๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•˜๋“œ์›จ์–ด ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
  • ๊ฐ ํ•˜๋“œ์›จ์–ด ์Šค๋ ˆ๋“œ๋Š” ๋ณ„๋„์˜ IP(Instruction Pointer)์™€ register set์„ ๋ณด์œ 
    • Instruction Pointer๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ program counter๋ฅผ ์˜๋ฏธ
  • Chip-multithreading(CMT): ๊ฐ ์ฝ”์–ด์— ์—ฌ๋Ÿฌ ํ•˜๋“œ์›จ์–ด ์Šค๋ ˆ๋“œ๋ฅผ ํ• ๋‹นํ•˜๋Š” ๊ธฐ์ˆ  = simultaneous multithreading
  • Intel์€ ์ด๋ฅผ hyperthreading ์ด๋ผ๊ณ  ํ•จ
    • ex: Intel i7 hexa-core(6๊ฐœ) ํ”„๋กœ์„ธ์„œ๋Š” ์ด 12๊ฐœ์˜ ํ•˜๋“œ์›จ์–ด ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์ง
    • quad-core system์—์„œ ์ฝ”์–ด๋‹น 2๊ฐœ์˜ hardware thread๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ โ†’ OS๋Š” 8๊ฐœ์˜ logical processor๋กœ ์ธ์‹

alt text

์ฝ”์–ด ๋‚ด์—์„œ ๋‘ ๊ฐœ์˜ ํ•˜๋“œ์›จ์–ด ์Šค๋ ˆ๋“œ๊ฐ€ ์Šค์œ„์นญ ํ•  ๋•Œ instruction pipline์ด ๊นจ์ง โ†’ ๋น„์šฉ ์ฆ๊ฐ€ ๊ฐ์•ˆ
๊ฐ ์ฝ”์–ด๋Š” ํ•˜๋‚˜์˜ ํ•˜๋“œ์›จ์–ด ์Šค๋ ˆ๋“œ๋งŒ ์‹คํ–‰ ๊ฐ€๋Šฅ

Two levels of scheduling

Multithreaded Multicore System์—์„œ๋Š” ์Šค์ผ€์ค„๋ง์ด ๋‘ ๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ง

  1. level 1 - OS scheduling: ์šด์˜์ฒด์ œ๊ฐ€ ์†Œํ”„ํŠธ์›จ์–ด ์Šค๋ ˆ๋“œ๋ฅผ logical CPU(hardware thread)์— ํ• ๋‹น
  2. level 2 - Core Internal scheduling: ๋ฌผ๋ฆฌ์  ์ฝ”์–ด๊ฐ€ ์–ด๋–ค ํ•˜๋“œ์›จ์–ด ์Šค๋ ˆ๋“œ๋ฅผ ์‹คํ–‰ํ• ์ง€ ๊ฒฐ์ •
    • level 2 ์•Œ๊ณ ๋ฆฌ์ฆ˜:
    • Round-Robin (ex: UltraSPARC)
    • Dynamic Urgency Value (ex: Intel Itanium) alt text

Load Balancing


SMP ์‹œ์Šคํ…œ์—์„œ๋Š” ํšจ์œจ์„ฑ์„ ์œ„ํ•ด ๋ชจ๋“  CPU๊ฐ€ ์ž‘์—…์„ ๊ท ๋“ฑํ•˜๊ฒŒ ๋‚˜๋ˆ  ๊ฐ€์ ธ์•ผํ•จ ์ด๋ฅผ ์œ„ํ•ด load balancing์ด ํ•„์š”

load balancing์€ ์ฝ”์–ด๊ฐ€ ๊ฐœ๋ณ„์ ์ธ ํ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์˜๋ฏธ๊ฐ€ ์žˆ์Œ

๐Ÿ“šload balancing: workload๋ฅผ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ถ„๋ฐฐํ•˜๋Š” ๊ณผ์ •

  1. Push migration: periodic task๋ฅผ ๊ฒ€์‚ฌํ•˜์—ฌ overloaded CPU์—์„œ ๋‹ค๋ฅธ CPU๋กœ ์ž‘์—…์„ ์ด๋™
  2. Pull migration: Idle processor๊ฐ€ busy prosseor๋กœ๋ถ€ํ„ฐ ์ž‘์—…์„ ๋‹น๊ฒจ์˜ด

Processor Affinity


๐Ÿ“šProcessor Affinity: ์Šค๋ ˆ๋“œ๊ฐ€ ํŠน์ • ํ”„๋กœ์„ธ์„œ์— ๋Œ€ํ•ด ๊ฐ–๋Š” ์—ฐ๊ด€์„ฑ

  • ์Šค๋ ˆ๋“œ๊ฐ€ ํ•œ ํ”„๋กœ์„ธ์„œ์—์„œ ์‹คํ–‰๋˜๋ฉด ํ•ด๋‹น ํ”„๋กœ์„ธ์„œ์˜ ์บ์‹œ์— ๋ฉ”๋ชจ๋ฆฌ ์ ‘๊ทผ ์ •๋ณด๊ฐ€ ์ €์žฅ๋จ
  • ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ์œผ๋กœ ์ธํ•ด ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์„œ๋กœ ์ด๋™ โ†’ ์บ์‹œ ์ •๋ณด๊ฐ€ ์†์‹ค๋˜์–ด ์„ฑ๋Šฅ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒ ๊ฐ€๋Šฅ

โœ…Processor Affinity ์ข…๋ฅ˜:

  1. Soft affinity: ์šด์˜์ฒด์ œ๊ฐ€ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€๋Šฅํ•œ ํ•œ ๊ฐ™์€ ํ”„๋กœ์„ธ์„œ์—์„œ ์‹คํ–‰(๋ณด์žฅX)
  2. Hard affinity: ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋  ํ”„๋กœ์„ธ์„œ ์ง‘ํ•ฉ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ง€์ •(linux - sched_setaffinity() ํ•จ์ˆ˜ ์ด์šฉ)
This post is licensed under CC BY 4.0 by the author.