Search
๐Ÿ’ฟ

05 : Multi-Level Feedback Queue

course
last review
2023/04/10
mastery
intermediate
progress
pending
date
2023/03/16
4 more properties
Previous chapter

Main Question : Scheduling without Information

MLFQ๊ฐ€ ํ•ด๊ฒฐํ•˜๋ ค๋Š” ๊ธฐ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š” ๋‘๊ฐ€์ง€์ด๋‹ค.
1.
์งง์€ ์ž‘์—…์„ ๋จผ์ € ์‹คํ–‰์‹œ์ผœ ๋ฐ˜ํ™˜์‹œ๊ฐ„์„ ์ตœ์ ํ™”ํ•œ๋‹ค.
a.
SJF๋‚˜ STCF๋Š” ์ž‘์—… ์‹คํ–‰์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ํ•„์š”๋กœ ํ•˜์ง€๋งŒ, ์šด์˜์ฒด์ œ๋Š” ์ด ์‹คํ–‰์‹œ๊ฐ„์„ ์•Œ ์ˆ˜ ์—†๋‹ค.
2.
๋Œ€ํ™”ํ˜• ์‚ฌ์šฉ์ž์—๊ฒŒ ๋‚˜์€ ๊ฒฝํ—˜์„ ์œ„ํ•ด ์‘๋‹ต์‹œ๊ฐ„์„ ์ตœ์ ํ™”ํ•œ๋‹ค.
a.
RR์€ ์‘๋‹ต์‹œ๊ฐ„์€ ๋‹จ์ถ•์‹œํ‚ค์ง€๋งŒ ๋ฐ˜ํ™˜์‹œ๊ฐ„์€ ์ตœ์•…์ด๋‹ค.
์ฆ‰, ํ”„๋กœ์„ธ์Šค์— ๋Œ€ํ•œ ์ •๋ณด ์—†์ด ์ด๋Ÿฐ ๋‘๊ฐ€์ง€ ๋ฌธ์ œ๋ฅผ ๋ชจ๋‘ ๋งŒ์กฑํ•  ์ˆ˜ ์žˆ๋Š” ์Šค์ผ€์ค„๋Ÿฌ๋Š” ์–ด๋–ค ๊ฒƒ์ด ์žˆ๋Š”๊ฐ€?
์ž‘์—…์˜ ์‹คํ–‰์‹œ๊ฐ„์— ๋Œ€ํ•œ ์„ ํ–‰ ์ •๋ณด ์—†์ด ๋Œ€ํ™”ํ˜• ์ž‘์—…์˜ ์‘๋‹ต ์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋™์‹œ์— ๋ฐ˜ํ™˜์‹œ๊ฐ„์„ ์ตœ์†Œํ™”ํ•˜๋Š” ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์–ด๋–ป๊ฒŒ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋Š”๊ฐ€?

Basic Rules

MLFQ๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ํ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, ๊ฐ๊ฐ ๋‹ค๋ฅธ ์šฐ์„ ์ˆœ์œ„(priority level)๊ฐ€ ๋ฐฐ์ •๋œ๋‹ค.
์‹คํ–‰ ์ค€๋น„๊ฐ€ ๋œ ํ”„๋กœ์„ธ์Šค๋Š” ์ด ์ค‘ ํ•˜๋‚˜์˜ ํ์— ์กด์žฌํ•œ๋‹ค.
์ฆ‰, ๋†’์€ ์šฐ์„ ์ˆœ์œ„ ํ์— ์กด์žฌํ•˜๋Š” ์ž‘์—…์ด ์„ ํƒ๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
โ€ข
ํ์—๋Š” ๋‘˜ ์ด์ƒ์˜ ์ž‘์—…์ด ์กด์žฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋•Œ ๋‘ ์ž‘์—… ์‚ฌ์ด์—๋Š” RR๋ฐฉ์‹์ด ์ ์šฉ๋œ๋‹ค.
MLFQ์˜ ํ•ต์‹ฌ์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
โ€ข
ํ‚ค๋ณด๋“œ ์ž…๋ ฅ์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ๋ฐ˜๋ณต์ ์œผ๋กœ CPU๋ฅผ ์–‘๋ณดํ•œ๋‹ค๋ฉด ํ•ด๋‹น ์ž‘์—…์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋†’๊ฒŒ ์œ ์ง€ํ•œ๋‹ค.
โ€ข
๊ธด ์‹œ๊ฐ„๋™์•ˆ CPU๋ฅผ ์ง‘์ค‘์ ์œผ๋กœ ๊ฐˆ๊ตฌ๋ฉด MLFQ๋Š” ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‚ฎ์ถ˜๋‹ค.
์šฐ๋ฆฌ๋Š” ์œ„ ์ž‘์—…์˜ ํŠน์„ฑ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
I/O-bound jobs
โ—ฆ
Interactive and short-running
โ€ข
CPU-bound jobs
โ—ฆ
compute intensive and longer-running
์ž‘์—…์ด ์ง„ํ–‰๋˜๋Š” ๋™์•ˆ ํ•ด๋‹น ์ž‘์—…์˜ ๊ณผ๊ฑฐ์˜ ์ •๋ณด๋ฅผ ์–ป๊ณ , ์ด ์ •๋ณด๋ฅผ ์ด์šฉํ•ด ๋ฏธ๋ž˜ ํ–‰๋™์„ ์˜ˆ์ธกํ•˜๋Š” ๋ฐฉ์‹์ด MLFQ์ด๋‹ค.
MLFQ์˜ ๊ธฐ๋ณธ ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
Priority(A) > Priority(B) ์ด๋ฉด, A๊ฐ€ ์šฐ์„ ์ ์œผ๋กœ ์‹คํ–‰๋œ๋‹ค. (B๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.)
Priority(A) = Priority(B) ์ด๋ฉด, A์™€ B๋Š” RR๋ฐฉ์‹์œผ๋กœ ์‹คํ–‰๋œ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜ ์‚ฌ์†Œํ•œ(?) ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธด๋‹ค.
๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ๊ฐ€ ๋ฐฐ์น˜๋˜์—ˆ์„ ๊ฒฝ์šฐ, A์™€ B๊ฐ€ ๊ฐ€์žฅ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์œผ๋ฏ€๋กœ A์™€ B๊ฐ€ RR๋กœ ๋Œ์•„๊ฐˆ ๊ฒƒ์ด๋ฉฐ, C์™€ D๋Š” ์˜์˜ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค. ์–ด๋–ป๊ฒŒ ์ด๋Ÿฐ ์ผ์ด!!!
๋‹คํ–‰ํžˆ๋„ ์•ž์—์„œ ๋งํ–ˆ๋˜ ๊ฒƒ ์ฒ˜๋Ÿผ ์ž‘์—…์˜ ์šฐ์„ ์ˆœ์œ„๋Š” ๊ณ ์ •๋˜์ง€ ์•Š๋Š”๋‹ค. ์ž‘์—…์˜ ์šฐ์„ ์ˆœ์œ„๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ฐ”๋€Œ๋Š”์ง€ ์ด์ œ๋ถ€ํ„ฐ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

Attempt 1 : Change Priority

MLFQ์˜ ํ•ต์‹ฌ์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ •ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
โ€ข
ํ‚ค๋ณด๋“œ ์ž…๋ ฅ์„ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ๋ฐ˜๋ณต์ ์œผ๋กœ CPU๋ฅผ ์–‘๋ณดํ•œ๋‹ค๋ฉด ํ•ด๋‹น ์ž‘์—…์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋†’๊ฒŒ ์œ ์ง€ํ•œ๋‹ค.
โ€ข
๊ธด ์‹œ๊ฐ„๋™์•ˆ CPU๋ฅผ ์ง‘์ค‘์ ์œผ๋กœ ๊ฐˆ๊ตฌ๋ฉด MLFQ๋Š” ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋‚ฎ์ถ˜๋‹ค.
์šฐ๋ฆฌ๋Š” ์œ„ ์ž‘์—…์˜ ํŠน์„ฑ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ•ด์„ํ•  ์ˆ˜ ์žˆ๋‹ค.
โ€ข
I/O-bound jobs
โ—ฆ
Interactive and short-running
โ€ข
CPU-bound jobs
โ—ฆ
compute intensive and longer-running
์œ„ ํŠน์„ฑ์„ ์ด์šฉํ•ด์„œ ์šฐ์–ธ์ˆœ์œ„ ์กฐ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋‹ค์‹œ ์งœ๋ณด๋„๋ก ํ•˜์ž.
์ž‘์—…์ด ์‹œ์Šคํ…œ์— ์ง„์ž…ํ•˜๋ฉด, ๊ฐ€์žฅ ๋†’์€ ์šฐ์„ ์ˆœ์œ„, ์ฆ‰ ๋งจ ์œ„ ํ์— ๋†“์—ฌ์ง„๋‹ค.
a. ์ฃผ์–ด์ง„ ํƒ€์ž„์Šฌ๋ผ์ด์Šค๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋ฉด ์šฐ์„ ์ˆœ์œ„๋Š” ๋‚ฎ์•„์ง„๋‹ค. ์ฆ‰, ํ•œ๋‹จ๊ณ„ ์•„๋ž˜ ํ๋กœ ์ด๋™ํ•œ๋‹ค. b. ํƒ€์ž„ ์Šฌ๋ผ์ด์Šค๋ฅผ ์†Œ์ง„ํ•˜๊ธฐ ์ „์— CPU๋ฅผ ์–‘๋„ํ•˜๋ฉด ๊ฐ™์€ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์œ ์ง€ํ•œ๋‹ค.

example1 : One long workload

๊ธธ ์‹คํ–‰์‹œ๊ฐ„์„ ๊ฐ€์ง„ ์ž‘์—…์ด ๋„์ฐฉํ–ˆ์„ ๋•Œ ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๋Š”์ง€ ์•Œ์•„๋ณด์ž.
ํ”„๋กœ์„ธ์Šค๋Š” ์šฐ์„ ์ˆœ์œ„ Q2๋กœ ์ง„์ž…ํ•œ๋‹ค. 10msec ํƒ€์ž„์Šฌ๋ผ์ด์Šค๋ฅผ ๋ชจ๋‘ ์†Œ์ง„ํ–ˆ์œผ๋ฏ€๋กœ, Q1์œผ๋กœ ๊ฐ•๋“ฑ๋‹นํ•œ๋‹ค. ๋‹ค์‹œ ํ•˜๋‚˜์˜ ํƒ€์ž„์Šฌ๋ผ์ด์Šค๋ฅผ ๋ชจ๋‘ ์†Œ์ง„ํ•œ ํ›„, Q0๋กœ ์ตœํ•˜์œ„ ํ๊นŒ์ง€ ๊ฐ•๋“ฑ๋‹นํ•œ ๋’ค, ์ดํ›„์—๋Š” ๊ณ„์† Q0์— ๋จธ๋ฌด๋ฅด๊ฒŒ ๋œ๋‹ค.

example2 : with short jobs

A๋Š” ์˜ค๋ž˜ ์‹คํ–‰๋˜๋Š” CPU-bound job์ด๊ณ , B๋Š” ์งง์€ I/O-bound job์ด๋‹ค. A๋Š” ์–ผ๋งˆ๋™์•ˆ ์ด๋ฏธ ์‹คํ–‰ํ•œ ์ƒํƒœ์ด๋ฉฐ, B๋Š” ์ด์ œ ๋ง‰ ๋„์ฐฉํ•œ ์ƒํƒœ์ด๋‹ค.
T=200์ผ ๋•Œ, A๋Š” ์ตœํ•˜์œ„ ํ‹ฐ์–ด์˜ ํ์—์„œ ์‹คํ–‰๋˜๊ณ , B๋Š” ๋ฐฉ๊ธˆ ๋„์ฐฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ƒ์œ„ ํ‹ฐ์–ด์˜ ํ๋กœ ๋ฐฐ์น˜๋œ๋‹ค. ์‹คํ–‰์‹œ๊ฐ„์ด ์งง๊ธฐ ๋•Œ๋ฌธ์— B๋Š” ๋‘๋ฒˆ์˜ ํƒ€์ž„์Šฌ๋ผ์ด์Šค ์Šฌ๋กฏ์„ ๋ชจ๋‘ ์†Œ๋ชจํ•˜๊ณ  ํ•˜์œ„ํ‹ฐ์–ด๋กœ ๊ฐ•๋“ฑ๋˜๊ธฐ ์ „์— ์ข…๋ฃŒ๋œ๋‹ค. ์ดํ›„ A๋Š” ๊ณ„์† ์‹คํ–‰๋œ๋‹ค.
โ†’ MLFQ๋Š” ์ž‘์—…์ด ์งง์€ ์ž‘์—…์ธ์ง€ ๊ธด ์ž‘์—…์ธ์ง€ ์•Œ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ์ผ๋‹จ ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์ž‘์—…์˜ ์šฐ์„ ์ˆœ์œ„๋ฅผ ๋†’์ธ๋‹ค.
โ€ข
๋งŒ์•ฝ ์ง„์งœ ์งง์€ ์ž‘์—…์ด๋ผ๋ฉด, ๋นจ๋ฆฌ ์‹คํ–‰๋˜๊ณ  ๋ฐ”๋กœ ์ข…๋ฃŒ๋œ๋‹ค.
โ€ข
๊ธด ์ž‘์—…์ด๋ผ๋ฉด ์ฒœ์ฒœํžˆ ์•„๋ž˜ ํ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋˜๊ณ  ์Šค์Šค๋กœ ๊ธด ๋ฐฐ์น˜ํ˜• ์ž‘์—…์ด๋ผ๋Š” ๊ฑธ ์ฆ๋ช…ํ•˜๋Š” ๊ผด์ด๋‹ค.
์ด๋Ÿฐ ์‹์œผ๋กœ MLFQ๋Š” SJF๋ฅผ ํ‰๋‚ด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.

How about I/O?

B๋Š” I/O-bound job์œผ๋กœ ์ž…์ถœ๋ ฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์ „์— 1msec๋งŒ ์‹คํ–‰๋œ๋‹ค. A๋Š” CPU-bound job์œผ๋กœ B์™€ ๊ฒฝ์Ÿํ•˜๋Š” ์ƒํƒœ์ด๋‹ค.

Problems with current MLFQ

1.
๊ธฐ์•„ ์ƒํƒœ์˜ ๋ฐœ์ƒ
a.
์‹œ์Šคํ…œ์˜ ํ•œ ๊ตฌ๊ฐ„์— ๋„ˆ๋ฌด ๋งŽ์€ I/O-bound job์ด ์กด์žฌํ•˜๋ฉด ๊ทธ๋“ค์ด ๋ชจ๋“  CPU์‹œ๊ฐ„์„ ์†Œ๋ชจํ•˜๊ฒŒ ๋˜๋ฉฐ, ์ €ํ‹ฐ์–ด ํ์— ์žˆ๋Š” ์ž‘์—…์€ ์—ฌ์ „ํžˆ ์‹œ๊ฐ„์„ ๋ฐฐ์ •๋ฐ›์ง€ ๋ชปํ•  ๊ฒƒ์ด๋‹ค.
2.
์•…์šฉ๊ฐ€๋Šฅ์„ฑ
a.
ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ํƒ€์ž„์Šฌ๋ผ์ด์Šค์˜ 99%๊นŒ์ง€๋งŒ ์‹คํ–‰ํ•˜๊ณ  CPU๋ฅผ ์–‘๋„ํ•œ๋‹ค๋ฉด CPU๋ฅผ ๋…์ ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
3.
ํ‹ฐ์–ด ์Šน๊ธ‰์˜ ๋ถ€์žฌ
a.
CPU-bound job์ด I/O-bound job์œผ๋กœ ๋ฐ”๋€” ์ˆ˜ ์žˆ๋‹ค. ์ง€๊ธˆ ์ƒํƒœ์˜ MLFQ๋Š” ์ด๋•Œ ํ‹ฐ์–ด๋ฅผ ๋‹ค์‹œ ์˜ฌ๋ฆฌ๋Š” ๊ธฐ๋Šฅ์ด ์—†๋‹ค.

Attempt 2 : Priority Boost

CPU ์œ„์ฃผ ์ž‘์—…์ด ์กฐ๊ธˆ์ด๋ผ๋„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์„ ์ƒˆ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
๋‹ค์Œ์€ ๊ทœ์น™ 5์— ๋Œ€ํ•œ ์„ค๋ช…์ด๋‹ค.
์ผ์ • ๊ธฐ๊ฐ„ S๊ฐ€ ์ง€๋‚˜๋ฉด, ์‹œ์Šคํ…œ์˜ ๋ชจ๋“  ์ž‘์—…์„ ์ตœ์ƒ์œ„ ํ๋กœ ์ด๋™์‹œํ‚จ๋‹ค.
๊ทœ์น™ 5๋Š” ๋†€๋ž๊ฒŒ๋„! ๋ฌธ์ œ1๊ณผ ๋ฌธ์ œ3์„ ๋™์‹œ์— ํ•ด๊ฒฐํ•œ๋‹ค.
1.
ํ”„๋กœ์„ธ์Šค์˜ ๊ธฐ์•„ ํ˜„์ƒ์„ ๋ฐฉ์ง€ํ•œ๋‹ค.
a.
์ตœ์ƒ์œ„ ํ์— ์กด์žฌํ•˜๋Š” ๋™์•ˆ์—๋Š” ๋‹ค๋ฅธ ์ž‘์—…๋“ค๊ณผ RR๋ฐฉ์‹์œผ๋กœ CPU๋ฅผ ๊ณต์œ ํ•œ๋‹ค.
2.
CPU๋ฐ”์šด๋“œ ์ž‘์—…์ด IO๋ฐ”์šด๋“œ ์ž‘์—…์œผ๋กœ ๋ฐ”๋€” ๊ฒฝ์šฐ ์šฐ์„ ์ˆœ์œ„ ์ƒํ–ฅ์„ ํ†ตํ•ด ๋ณ€๊ฒฝ๋œ ํŠน์„ฑ์— ๋งž์ถœ ์ˆ˜ ์žˆ๋‹ค.
์™ผ์ชฝ์€ ์šฐ์„ ์ˆœ์œ„ ๋ถ€์ŠคํŒ…์ด ์ ์šฉ๋˜์ง€ ์•Š์„ ๊ฒฝ์šฐ, ์˜ค๋ฅธ์ชฝ์€ ์ ์šฉ๋  ๊ฒฝ์šฐ์˜ ๊ทธ๋ฆผ์ด๋‹ค.
๋‹ค๋งŒ S์˜ ๊ฐ’์„ ์ ์ ˆํžˆ ๊ฒฐ์ •ํ•ด์•ผํ•˜๋ฉฐ, S๊ฐ’์€ ์ •ํ™•ํ•œ ๊ณต์‹์ด ์—†๋‹ค. ์ด๋Ÿฌํ•œ ์ข…๋ฅ˜์˜ ๊ฐ’์„ ๋ถ€๋‘์ƒ์ˆ˜(voo-doo constants) ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
๋„ˆ๋ฌด ํฌ๋ฉด ๊ธด ์‹คํ–‰์‹œ๊ฐ„์„ ๊ฐ€์ง„ ์ž‘์—…์ด ์—ฌ์ „ํžˆ ๊ตถ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๋„ˆ๋ฌด ์ž‘์œผ๋ฉด ๋Œ€ํ™”ํ˜• ์ž‘์—…์ด ์ ์ ˆํ•œ ์–‘์˜ CPU ์‹œ๊ฐ„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

Attempt 3 : Better Accounting

๋ฌธ์ œ2๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ?
๊ทœ์น™4๋Š” ์Šค์ผ€์ฅด๋Ÿฌ์—์„œ ์ž‘์—…์ด ์‹คํ–‰๋ ๋•Œ์—๋งŒ ํ•ด๋‹น ์‹œ๊ฐ„์ด ํƒ€์ž„์Šฌ๋ผ์ด์Šค์˜ threshold๋ฅผ ๋„˜๋Š”์ง€ ํ™•์ธํ•ด์™”๋‹ค. ์ด ๊ณผ์ •์„ ๋” ํ™•์žฅํ•ด์„œ CPU ์ด ์‚ฌ์šฉ์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋ฐ”๊ฟ”๋ณด์ž.
๊ทœ์น™4-a,b๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ†ตํ•ฉํ•œ๋‹ค.
์ฃผ์–ด์ง„ ๋‹จ๊ณ„์—์„œ ์‹œ๊ฐ„ ํ• ๋‹น๋Ÿ‰์„ ๋ชจ๋‘ ์†Œ์ง„ํ•˜๋ฉด ์šฐ์„ ์ˆœ์œ„๋Š” ๋‚ฎ์•„์ง„๋‹ค. CPU์˜ ์–‘๋„ ์—ฌ๋ถ€๋Š” ๋”ฐ์ง€์ง€ ์•Š๋Š”๋‹ค.

Another

Next chapter