ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®æŠèŠ
ãããããã«ïŒ ç§ã®æèŠã§ã¯ãèå³æ·±ãæç®ã® XNUMX ã€ã§ãã OSTEP ã®ç¿»èš³ã·ãªãŒãºã®èšäºã玹ä»ããããšæããŸãã ãã®è³æã§ã¯ãUNIX ã«äŒŒããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®åäœãã€ãŸããææ°ã® OS ãæ§æããããã»ã¹ãããŸããŸãªã¹ã±ãžã¥ãŒã©ãã¡ã¢ãªãããã³ãã®ä»ã®åæ§ã®ã³ã³ããŒãã³ãã®åäœã«ã€ããŠéåžžã«è©³ãã説æããŸãã ãã¹ãŠã®è³æã®ãªãªãžãã«ã¯ãã¡ãããã芧ããã ããŸã
ãã®ããŒãã«é¢ããã©ãã®äœæ¥ã¯ã次ã®å Žæã«ãããŸãã
ãã®ä»ã®éšå
ããŒã 1: ã€ã³ãããã¯ã·ã§ã³ ããŒã 2: æœè±¡å: ããã»ã¹ ããŒã 3: ããã»ã¹ API ã®æŠèŠ ããŒã 4: ã¹ã±ãžã¥ãŒã©ã®æŠèŠ ããŒã 5: MLFQ ã¹ã±ãžã¥ãŒã©
ç§ã®ãã£ã³ãã«ããã§ãã¯ã§ããŸã
èšç»: ãã«ãã¬ãã«ã®ãã£ãŒããã㯠ãã¥ãŒ
ãã®è¬çŸ©ã§ã¯ãæãæåãªã¢ãããŒãã® XNUMX ã€ãéçºããéã®åé¡ã«ã€ããŠèª¬æããŸãã
ãããããã©ã³ãã³ã° ãã«ãã¬ãã«ãã£ãŒãããã¯ãã¥ãŒ (MLFQ)ã MLFQ ã¹ã±ãžã¥ãŒã©ã¯ã1962 幎ã«ãã§ã«ãã³ã J. ã³ã«ããã«ãã£ãŠããšåŒã°ããã·ã¹ãã ã§åããŠèšè¿°ãããŸããã
äºææ§ã®ããã¿ã€ã ã·ã§ã¢ãªã³ã° ã·ã¹ãã (CTSS)ã ãããã®äœåïŒä»¥éã®äœåãå«ãïŒ
Multics) ã¯ãã®åŸãã¥ãŒãªã³ã°è³ã«ããããŒããããŸããã ã¹ã±ãžã¥ãŒã©ãŒã¯
ãã®åŸæ¹è¯ããããã§ã«èŠãããå€èŠ³ãåŸãããŸããã
ããã€ãã®ææ°ã®ã·ã¹ãã ã
MLFQ ã¢ã«ãŽãªãºã ã¯ãéè€ãã 2 ã€ã®åºæ¬çãªåé¡ã解決ããããšããŸãã
ãŸã第äžã«ãã¿ãŒã³ã¢ã©ãŠã³ãã¿ã€ã ã®ââæé©åãè©Šã¿ãŸããåã®è¬çŸ©ã§èª¬æããããã«ããã¥ãŒã®å
é ããéå§ããæ¹æ³ã«ãã£ãŠæé©åãããŸãã
çãã¿ã¹ã¯ã ãã ããOS ã¯ç¹å®ã®ããã»ã¹ãã©ããããã®æéå®è¡ãããããç¥ããŸããã
SJFãSTCFã¢ã«ãŽãªãºã ã®æäœã«å¿
èŠãªç¥èã 第äºã«ãMLFQ ãè©Šã¿ãŸã
ãŠãŒã¶ãŒã«å¯ŸããŠã·ã¹ãã ã®å¿çæ§ãé«ããŸã (ããšãã°ã座ã£ãŠãã人ã座ã£ãŠãã人ãªã©)ã
ã¿ã¹ã¯ãå®äºããã®ãåŸ
ã£ãŠããéç»é¢ãèŠã€ããïŒãããæéãæå°éã«æããããšãã§ããŸãã
å¿çã æ®å¿µãªãããRR ã®ãããªã¢ã«ãŽãªãºã ã¯å¿çæéãççž®ããŸããã
æèŠæéã®ææšã«æªåœ±é¿ãåãŒããŸãã ãããã£ãŠãç§ãã¡ã®åé¡ã¯ãã©ã®ããã«èšèšããããã§ãã
äœãç¥ããªããŠãèŠä»¶ãæºããã¹ã±ãžã¥ãŒã©
äžè¬çãªããã»ã¹ã®æ§è³ªã¯äœã§ãã? ã¹ã±ãžã¥ãŒã©ãŒã¯ã¿ã¹ã¯ã®ç¹æ§ãã©ã®ããã«ããŠåŠç¿ããããšãã§ããŸãã?
ã©ã¡ããèµ·åããã°ãããè¯ãèšç»æ±ºå®ãã§ãââãã§ãããã?
åé¡ã®æ¬è³ª: å®ç§ãªç¥èããªãã®ã«ãã©ããã£ãŠã¿ã¹ã¯ã®èšå®ãèšç»ããã?
åæã«å¿çæéãæå°éã«æããã¹ã±ãžã¥ãŒã©ãŒãèšèšããæ¹æ³
ã€ã³ã¿ã©ã¯ãã£ããªã¿ã¹ã¯ã«äœ¿çšã§ãããšåæã«ãç¥ããç¥ããã®ãã¡ã«æèŠæéãæå°éã«æããŸãã
ã¿ã¹ã¯ã®å®è¡æéã«ã€ããŠã®ç¥èã¯ãããŸãã?
泚: éå»ã®åºæ¥äºããåŠã¶
MLFQ ãã¥ãŒã¯ããã¬ãŒãã³ã°ãããã·ã¹ãã ã®åªããäŸã§ãã
æªæ¥ãäºæž¬ããããã«éå»ã®åºæ¥äºã ãã®ãããªã¢ãããŒãã¯å€ãã®å Žåã
OS (ããã³ã³ã³ãã¥ãŒã¿ãŒ ãµã€ãšã³ã¹ã®ä»ã®å€ãã®åéã
ããŒããŠã§ã¢äºæž¬ãšãã£ãã·ã¥ ã¢ã«ãŽãªãºã )ã åæ§ã®ãã€ãã³ã°
ã¿ã¹ã¯ã«è¡åãã§ãŒãºããããäºæž¬å¯èœãªå Žåã«ããªã¬ãŒãããŸãã
ãã ããäºæž¬ã¯éåžžã«ç°¡åã§ããããããã®ææ³ã«ã¯æ³šæãå¿
èŠã§ãã
ãããééã£ãŠããããšãå€æããã·ã¹ãã ã以åãããæªã決å®ãäžãããšã«ãªãå¯èœæ§ããããŸãã
å
šãç¥èãç¡ãã§ãããã
MLFQ: åºæ¬ã«ãŒã«
MLFQ ã¢ã«ãŽãªãºã ã®åºæ¬ã«ãŒã«ãèŠãŠã¿ãŸãããã ãããŠããã®ã¢ã«ãŽãªãºã ã®å®è£
ã¯
ããã€ããããŸãããåºæ¬çãªã¢ãããŒãã¯äŒŒãŠããŸãã
ç§ãã¡ãæ€èšããå®è£
ã§ã¯ãMLFQ ã«ã¯ããã€ãã®æ©èœããããŸãã
å¥ã
ã®ãã¥ãŒã§ãããããããã«ç°ãªãåªå
床ãèšå®ãããŸãã ãã€ã§ãã
å®è¡æºåãã§ããŠããã¿ã¹ã¯ã¯åããã¥ãŒå
ã«ãããŸãã MLFQ ã¯åªå
é äœã䜿çšããŸãã
ã©ã®ã¿ã¹ã¯ãå®è¡ãããã決å®ããŸããã€ãŸãã ããé«ãã¿ã¹ã¯
åªå
床 (æãé«ãåªå
床ãæã€ãã¥ãŒããã®ã¿ã¹ã¯) ã¯æåã«èµ·åãããŸãã
åã
ãã¡ãããç¹å®ã®ãã¥ãŒã«è€æ°ã®ã¿ã¹ã¯ãååšããå ŽåããããŸãã®ã§ã
ãããã£ãŠããããã¯åãåªå
床ãæã€ããšã«ãªããŸãã ãã®å Žåããã®ã¡ã«ããºã ã䜿çšãããŸã
ãããã®ã¿ã¹ã¯ã®ãã¡ãæã¡äžãèšç»ã®ããã® RRã
ãããã£ãŠãMLFQ ã® XNUMX ã€ã®åºæ¬ã«ãŒã«ã«å°éããŸãã
- ã«ãŒã« 1: åªå 床 (A) > åªå 床 (B) ã®å Žåãã¿ã¹ã¯ A ãå®è¡ãããŸã (B ã¯å®è¡ãããŸãã)ã
- ã«ãŒã« 2: åªå 床(A) = åªå 床(B) ã®å ŽåãA&B 㯠RR ã䜿çšããŠéå§ãããŸãã
äžèšã«åºã¥ããŠãMLFQ ãèšç»ããããã®éèŠãªèŠçŽ ã¯æ¬¡ã®ãšããã§ãã
ãåªå
äºé
ã§ãã ããããã«åºå®ã®åªå
é äœãäžããã®ã§ã¯ãªãã
ã¿ã¹ã¯ã«å¿ããŠãMLFQ ã¯èŠ³å¯ãããåäœã«å¿ããŠåªå
é äœãå€æŽããŸãã
ããšãã°ãããŒããŒãå
¥åãåŸ
æ©ããŠããéã«ã¿ã¹ã¯ãåžžã« CPU äžã§çµäºããå Žåã
MLFQ ã¯ããã»ã¹ã®åªå
床ãé«ãä¿ã¡ãŸãã
ã€ã³ã¿ã©ã¯ãã£ããªããã»ã¹ãæ©èœããã¯ãã§ãã éã«ãã¿ã¹ã¯ãç¶ç¶çã«è¡ããã
é·æéã«ããã£ãŠ CPU ã«è² è·ãããããããMLFQ ã«ãã£ãŠããŠã³ã°ã¬ãŒããããŸã
åªå
äºé
ã ãããã£ãŠãMLFQ ã¯ããã»ã¹ã®å®è¡äžã®åäœãç 究ããŸãã
ãããŠè¡åãå©çšããŸãã
ããæç¹ã§ãã¥ãŒãã©ã®ããã«èŠãããã®äŸãæããŠã¿ãŸããã
ãããšã次ã®ãããªçµæãåŸãããŸãã
ãã®ã¹ããŒã ã§ã¯ã2 ã€ã®ããã»ã¹ A ãš B ãæé«ã®åªå
é äœã§ãã¥ãŒã«å
¥ããããŸãã ããã»ã¹
C ã¯äžéã®ã©ããã«ãããããã»ã¹ D ã¯ãã¥ãŒã®æåŸå°Ÿã«ãããŸãã äžèšã«ãããš
MLFQ ã¢ã«ãŽãªãºã ã®èª¬æã«åŸããšãã¹ã±ãžã¥ãŒã©ã¯æé«ã®ã¿ã¹ã¯ã®ã¿ãå®è¡ããŸãã
RR ã«åŸã£ãŠåªå
é äœãå€æŽãããã¿ã¹ã¯ CãD ã¯äœæ¥å€ã«ãªããŸãã
åœç¶ã®ããšãªãããéçãªã¹ãããã·ã§ããã§ã¯ãMLFQ ãã©ã®ããã«æ©èœããããå®å
šã«ææ¡ããããšã¯ã§ããŸããã
æéã®çµéãšãšãã«ç»åãã©ã®ããã«å€åããããæ£ç¢ºã«ç解ããããšãéèŠã§ãã
è©Šã¿ 1: åªå 床ãå€æŽããæ¹æ³
ãã®æç¹ã§ãMLFQ ãåªå
ã¬ãã«ãã©ã®ããã«å€æŽãããã決å®ããå¿
èŠããããŸãã
ã©ã€ããµã€ã¯ã«äžã®ã¿ã¹ã¯ (ãããã£ãŠãã¥ãŒå
ã®ã¿ã¹ã¯ã®äœçœ®)ã ã®ããã«
ããã¯ã¯ãŒã¯ãããŒã念é ã«çœ®ãããã«å¿
èŠã§ã: äžå®é
å®è¡æéãçã察話åã¿ã¹ã¯ (ãããã£ãŠé »ç¹ã«ãªãªãŒã¹ããã)
CPU) ãšãäœæ¥æéå
šäœã«ããã£ãŠ CPU ã䜿çšããããã€ãã®é·æéå®è¡ã¿ã¹ã¯ã
ãã®ãããªã¿ã¹ã¯ã§ã¯ãå¿çæéã¯éèŠã§ã¯ãããŸããã ãã®ããã«ããŠãæåã®è©Šã¿ãè¡ãããšãã§ããŸã
次ã®ã«ãŒã«ã§ MLFQ ã¢ã«ãŽãªãºã ãå®è£
ããŸãã
- ã«ãŒã« 3: ã¿ã¹ã¯ãã·ã¹ãã ã«å ¥ããšãã¿ã¹ã¯ã¯æãé«ããã¥ãŒã«é 眮ãããŸãã
- åªå é äœã
- ã«ãŒã« 4a: ã¿ã¹ã¯ããå²ãåœãŠãããæéæ å šäœã䜿çšããå Žåã
- åªå é äœãäžãããŸãã
- ã«ãŒã« 4b: ã¿ã¹ã¯ãã¿ã€ã ãŠã£ã³ããŠãæéåãã«ãªãåã« CPU ã解æŸããå Žåã
- åãåªå 床ã®ãŸãŸã§ãã
äŸ 1: åäžã®é·æéå®è¡ã¿ã¹ã¯
ãã®äŸãããããããã«ãå
¥é¢æã®ã¿ã¹ã¯ã¯æãé«ãå€ã§èšå®ãããŠããŸãã
åªå
床ã 10 ããªç§ã®æéæ ãçµéãããšãããã»ã¹ã®åªå
é äœãããŠã³ã°ã¬ãŒããããŸãã
ã¹ã±ãžã¥ãŒã©ãŒã 次ã®æéæ ãçµéãããšãã¿ã¹ã¯ã¯æçµçã«æ¬¡ã®ããã«ããŠã³ã°ã¬ãŒããããŸãã
ã·ã¹ãã å
ã§æãåªå
床ãäœãããã®ãŸãŸæ®ããŸãã
äŸ 2: çãã¿ã¹ã¯ãéžæãã
次ã«ãMLFQ ã SJF ã«ã©ã®ããã«ã¢ãããŒãããããšãããã®äžäŸãèŠãŠã¿ãŸãããã ãã®äžã§
ããšãã°ãXNUMX ã€ã®ã¿ã¹ã¯: Aãããã¯åžžã«é·æéå®è¡ãããã¿ã¹ã¯ã§ãã
CPU ãš B ãå æããŸããããã¯çã察話åã¿ã¹ã¯ã§ãã ä»®å®ãã
ã¿ã¹ã¯ B ãå°çãããŸã§ã«ãA ã¯ãã§ã«ãã°ããåããŠãããšèããããŸãã
ãã®ã°ã©ãã¯ã·ããªãªã®çµæã瀺ããŠããŸãã ã¿ã¹ã¯ A ã¯ãä»ã®ã¿ã¹ã¯ãšåæ§ã«ã
CPUã®äœ¿çšã¯æäžäœã§ããã ã¿ã¹ã¯ B ã¯æå» T=100 ã«å°çãã
æãåªå
床ã®é«ããã¥ãŒã«å
¥ããããŸãã äžæ æéãçãã®ã§ã
æåŸã®ãã¥ãŒã«å°éããåã«å®äºããŸãã
ãã®äŸãããã¢ã«ãŽãªãºã ã®äž»ãªç®çãç解ããå¿
èŠããããŸãã
é·ãã¿ã¹ã¯ãçãã¿ã¹ã¯ããç¥ã£ãŠããå ŽåããŸã第äžã«ããã®ã¿ã¹ã¯ã¯æ¬¡ã®ããšã§ãããšæ³å®ããŸãã
çããæãé«ãåªå
床ãäžããŸãã æ¬åœã«çæéã®ã¿ã¹ã¯ã§ããã°ã
ããã«å®è¡ãããŸãããé·ãã¿ã¹ã¯ã®å Žåã¯ãã£ãããšå®è¡ãããŸãã
åªå
é äœã¯äžãã£ãŠããã圌女ãæ¬åœã«é·ãä»äºã§ããããšãããã«èšŒæãããã§ããã
å¿çãå¿
èŠã§ãã
äŸ 3: I/O ã¯ã©ããªãã§ãããã?
次ã«ãI/O ã®äŸãèŠãŠã¿ãŸãããã ã«ãŒã« 4b ã«èšèŒãããŠããããã«ã
ããã»ã¹ãããã»ããµæéãå®å
šã«äœ¿çšããã«ããã»ããµã解æŸããå Žåã
ãã®åŸãåãåªå
ã¬ãã«ã®ãŸãŸã«ãªããŸãã ãã®ã«ãŒã«ã®ç®çã¯éåžžã«åçŽã§ãã
- 察話åãžã§ãã倧éã® I/O ãå®è¡ããå Žå (ããšãã°ãåŸ
æ©äž)
ãŠãŒã¶ãŒã®ããŒã¹ãããŒã¯ãŸãã¯ããŠã¹ããã®ã¿ã¹ã¯ãå®è¡ãããšãããã»ããµã解æŸãããŸãã
å²ãåœãŠãããçªå£ã®åã§ã ãã®ãããªåªå
課é¡ãææãããããªãã®ã§ããã
ãããã£ãŠãåãã¬ãã«ã«çãŸããŸãã
ãã®äŸã§ã¯ããã®ãããªããã»ã¹ (å®è¡åã« CPU ã 1 ããªç§ã ãå¿
èŠãšãã察話åã¿ã¹ã¯ B) ã§ã¢ã«ãŽãªãºã ãã©ã®ããã«æ©èœãããã瀺ããŸãã
I/O ããã»ã¹ãšé·æéå®è¡ããããžã§ã AãCPU ã®äœ¿çšã«ãã¹ãŠã®æéãè²»ãããŸãã
MLFQ ã¯ããã»ã¹ B ãç¶ç¶ãããããæé«ã®åªå
床ãç¶æããŸãã
CPUã解æŸããŸãã B ã察話åã¿ã¹ã¯ã®å Žåãã¢ã«ãŽãªãºã ã¯æ¬¡ã®ããšãéæããŸãã
ãã®ç®çã¯ã察話åã¿ã¹ã¯ãè¿
éã«èµ·åããããšã§ãã
çŸåšã® MLFQ ã¢ã«ãŽãªãºã ã®åââé¡ç¹
åã®äŸã§ã¯ãMLFQ ã®åºæ¬ããŒãžã§ã³ãæ§ç¯ããŸããã ãããŠåœŒã¯ã©ããã
ãã®ä»äºã¯é©åãã€å
¬å¹³ã«å®è¡ãããCPU æéãå
¬å¹³ã«åé
ããŸãã
é·æéã®ã¿ã¹ã¯ãšãçæéãŸãã¯å€§éã®ã¿ã¹ã¯ã®å®è¡ãå¯èœ
é«éã«åŠçããããã« I/O ã«è»¢éããŸãã æ®å¿µãªããããã®ã¢ãããŒãã«ã¯ããã€ãã®èŠçŽ ãå«ãŸããŠããŸãã
æ·±å»ãªåé¡ã
ãŸã第äžã«ã飢é€ã®åé¡: ã·ã¹ãã ã«å€ãã®ã€ã³ã¿ã©ã¯ãã£ãæ©èœãããå Žå
ã¿ã¹ã¯ãå®è¡ãããšããã¹ãŠã® CPU æéãæ¶è²»ãããããåäžã®é·ãæéã¯ããããŸããã
ã¿ã¹ã¯ã¯å®è¡ãããæ©äŒããããŸãã (ã¿ã¹ã¯ã¯é£¢ããŠããŸã)ã
第äºã«ãè³¢ããŠãŒã¶ãŒã¯æ¬¡ã®ããã«ããã°ã©ã ãæžãããšãã§ããŸãã
ã¹ã±ãžã¥ãŒã©ããã«ã«ããã 欺çãšã¯ãäœãã匷å¶ããããšã«ãã
ã¹ã±ãžã¥ãŒã©ã䜿çšããŠããã»ã¹ã«ããã«å€ãã® CPU æéãäžããŸãã ãã®ã¢ã«ãŽãªãºã ã¯ã
äžã§èª¬æãããã®ã¯ããã®ãããªæ»æã«å¯ŸããŠéåžžã«è匱ã§ããã€ãŸããæéæ ãå®è³ªçã«æºããããåã«ã
以äžã(ã©ã®ãã¡ã€ã«ã§ãã£ãŠã) I/O æäœãå®è¡ããå¿
èŠããããŸãã
ãããã£ãŠãCPU ã解æŸãããŸãã ãã®ãããªè¡åã«ãããåãç¶æ
ã«çãŸãããšãã§ããŸã
ãã¥ãŒèªäœãåŠçããåã³ CPU æéã®ãã倧ããªå²åãååŸããŸãã å®äºããã
ããã¯æ£ããã§ã (ããšãã°ãCPU ã解æŸããåã«ãŠã£ã³ããŠæéã® 99% ãå®è¡ããŸã)ã
ãã®ãããªã¿ã¹ã¯ã¯åã«ããã»ããµãç¬å ããå¯èœæ§ããããŸãã
æåŸã«ãããã°ã©ã ã¯æéã®çµéãšãšãã«åäœãå€ããããšãã§ããŸãã ãããã®ã¿ã¹ã¯
CPU ã䜿çšãããã®ã¯ã€ã³ã¿ã©ã¯ãã£ãã«ãªãå¯èœæ§ããããŸãã ãã®äŸã§ã¯ãåæ§ã®
ã¿ã¹ã¯ã¯ãä»ã®ã¿ã¹ã¯ãšã¯ç°ãªããã¹ã±ãžã¥ãŒã©ããé©åãªåŠçãåããŸããã
(ãªãªãžãã«ã®) ã€ã³ã¿ã©ã¯ãã£ããªã¿ã¹ã¯ã
èŽè¡ãžã®è³ªå: çŸä»£äžçã§ã¯ã¹ã±ãžã¥ãŒã©ã«å¯ŸããŠã©ã®ãããªæ»æãè¡ãããå¯èœæ§ããããŸãã?
è©Šã¿ 2: åªå 床ãäžãã
ã«ãŒã«ãå€æŽããŠãåé¡ãåé¿ã§ãããã©ããè©ŠããŠã¿ãŸãããã
飢é€ã é¢é£æ§ã確ä¿ããããã«äœãã§ããã
CPU ã¿ã¹ã¯ã«ã¯ (é·ããªãå Žåã§ã) æéãããããŸãã
åé¡ã®ç°¡åãªè§£æ±ºçãšããŠãå®æçã«ææ¡ããããšãã§ããŸãã
ã·ã¹ãã å
ã®ãã®ãããªãã¹ãŠã®ã¿ã¹ã¯ã®åªå
é äœãäžããŸãã ããããã®æ¹æ³ããããŸã
ãããå®çŸããããã«ãäŸãšããŠç°¡åãªãã®ãå®è£
ããŠã¿ãŸãããã
ãã¹ãŠã®ã¿ã¹ã¯ã«ã¯çŽã¡ã«æé«ã®åªå
é äœãäžãããããããæ°ããã«ãŒã«ã¯æ¬¡ã®ããã«ãªããŸãã
- Rule5: äžå®æé S ã®åŸãã·ã¹ãã å ã®ãã¹ãŠã®ã¿ã¹ã¯ãæäžäœã®ãã¥ãŒã«è»¢éããŸãã
ç§ãã¡ã®æ°ããã«ãŒã«ã¯ XNUMX ã€ã®åé¡ãäžåºŠã«è§£æ±ºããŸãã ãŸããããã»ã¹
飢ããªãããšãä¿èšŒãããŠããŸã: æãé«ããã¥ãŒã«ããã¿ã¹ã¯ã¯å
±æãããŸã
RR ã¢ã«ãŽãªãºã ã«åŸã£ãŠããã»ããµãŒæéãèšå®ããããããã¹ãŠã®ããã»ã¹ã¯
ããã»ããµãŒæéã 次ã«ã以åã«äœ¿çšããŠããããã»ã¹ãããå Žåã
ããã»ããµã®ã¿ã察話åã«ãªããæãé«ãããã»ããµã®ãã¥ãŒã«æ®ããŸãã
äžåºŠæé«åªå
床ãžã®ããŒã¹ããåããåŸã®åªå
床ã
äŸãèããŠã¿ãŸãããã ãã®ã·ããªãªã§ã¯ã次ã䜿çšããåäžããã»ã¹ãæ€èšããŸãã
CPU ãš 50 ã€ã®å¯Ÿè©±åã®çãããã»ã¹ã å³ã®å·ŠåŽã¯ãåªå
é äœãããŒã¹ãããªãå Žåã®åäœã瀺ããŠããããã50 ã€ã®å¯Ÿè©±åã¿ã¹ã¯ãã·ã¹ãã ã«å°çããåŸãé·æéå®è¡ãããŠããã¿ã¹ã¯ãåæ¢ãå§ããŸãã å³ã®å³ã§ã¯ãXNUMX ããªç§ããšã«åªå
床ã®å¢å ãå®è¡ãããããããã¹ãŠã®ããã»ã¹ãããã»ããµãŒæéãåãåãããšãä¿èšŒãããå®æçã«éå§ãããŸãã ãã®å Žåã® XNUMXms ã¯äŸãšããŠæããŠããŸãããå®éã«ã¯ãã®æ°å€ã¯ããå°ã倧ãããªããŸãã
åšæçãªç«ã¡äžããæé S ãè¿œå ãããšã次ã®çµæãåŸãããããšã¯æããã§ãã
è«ççãªè³ªå: ã©ã®ãããªå€ãèšå®ããå¿
èŠããããŸãã? åœç¶ã®ããšã® XNUMX ã€
ã·ã¹ãã ãšã³ãžãã¢ã®ãžã§ã³ã»ãªãŒã¹ã¿ãŒããŠãã¯ãã·ã¹ãã å
ã®åæ§ã®éãããŒãã¥ãŒãšåŒãã§ããŸããã
æ£ãããã®ãåŸãã«ã¯äœããã®åœ¢ã§é»éè¡ãå¿
èŠã ã£ããããäžå®ã§ãã
æŽé²ã ãããŠãæ®å¿µãªããšã«ãSã«ã¯ãã®ãããªå³ããããŸãã å€ãèšå®ããå Žå
倧ãã - é·ãã¿ã¹ã¯ã¯æ¯æžããŸãã ãŸããèšå®ãäœããããããšã
察話åã¿ã¹ã¯ã¯é©å㪠CPU æéãåãåããŸããã
è©Šã¿ 3: äŒèšã®æ¹å
ããŠã解決ãã¹ãåé¡ããã XNUMX ã€ãããŸãã
ç§ãã¡ã®ã¹ã±ãžã¥ãŒã©ãŒãã ãŸãããã®ãèš±ããŠãã ãã? ãã®å¯èœæ§ã«ã€ããŠè²¬ä»»ãè² ãã®ã¯æ¬¡ã®äººã
ã§ã
ããã»ããµã解æŸããããšã§ãžã§ãã®åªå
é äœãç¶æã§ããããã«ããã«ãŒã« 4aã4b
å²ãåœãŠãããæéãçµéããåã«ã ã©ããã£ãŠå¯ŸåŠããã°ããã®ã§ããããïŒ
ãã®å Žåã®è§£æ±ºçã¯ãããããã® CPU æéãããé©åã«èšç®ããããšã§ãããšèããããšãã§ããŸãã
MLFQã¬ãã«ã ããã°ã©ã ã䜿çšããæéãå¿ãã代ããã«
ããã»ããµã«å²ãåœãŠãããééã䜿çšããå¿
èŠãããå Žåã¯ããããèæ
®ããŠä¿åããå¿
èŠããããŸãã åŸ
ããã»ã¹ã¯å²ãåœãŠãããæéã䜿ãæãããã®ã§ã次ã®ããã»ã¹ã«éæ Œããå¿
èŠããããŸã
åªå
ã¬ãã«ã ä»ã§ã¯ãããã»ã¹ãã©ã®ããã«æéã䜿ããã¯åé¡ã§ã¯ãããŸããã
ããã»ããµäžã§ããŸãã¯äžé£ã®åŒã³åºããšããŠåžžã«èšç®ãããŸãã ãããã£ãŠã
ã«ãŒã« 4 ã¯æ¬¡ã®ããã«æžãæããå¿
èŠããããŸãã
- Rule4: ã¿ã¹ã¯ãçŸåšã®ãã¥ãŒã«å²ãåœãŠãããæéã䜿ãæãããš (äœåºŠ CPU ã解æŸãããã«é¢ä¿ãªã)ããã®ã¿ã¹ã¯ã®åªå 床ã¯äžãããŸã (ãã¥ãŒã®äžã«ç§»åããŸã)ã
äŸãèŠãŠã¿ãŸããã:
»
ãã®å³ã¯ã次ã®ããã«ã¹ã±ãžã¥ãŒã©ãéšãããšããå Žåã«äœãèµ·ãããã瀺ããŠããŸãã
以åã®ã«ãŒã« 4aã4b ã䜿çšããå Žåã¯ãå·Šã®çµæãåŸãããŸãã ããã§ãšãããããŸã
ã«ãŒã«ã¯çµæãå³åŽã«ãããšããããšã§ãã ä¿è·ãããåã¯ãã©ã®ããã»ã¹ãå®äºåã« I/O ãåŒã³åºãããšãã§ãã
ãããã£ãŠãä¿è·ãæå¹ã«ããåŸã¯ãåäœã«é¢ä¿ãªã CPU ãæ¯é
ããŸãã
I/Oã圌ã¯ãŸã ãã¥ãŒã«æ®ã£ãŠãããããäžæ£ã«ã¢ã¯ã»ã¹ããããšã¯ã§ããŸããã
CPUãªãœãŒã¹ãåŒãç¶ããŸãã
MLFQ ããã³ãã®ä»ã®åé¡ã®æ¹å
äžèšã®æ¹åã«ãããæ°ããªåé¡ãçºçããŸãã
質å - ãã®ãããªã¹ã±ãžã¥ãŒã©ããã©ã¡ãŒã¿åããã«ã¯ã©ãããã°ããã§ãã? ãããã®ã ãããããã¹ãã
è¡åïŒ ãã¥ãŒå
ã®ããã°ã©ã ãŠã£ã³ããŠã®ãµã€ãºã¯ã©ããããã«ãã¹ãã§ãããã? ã©ããã£ãŠ
å€ãã®å Žåã飢é€ãé¿ããããã«ããã°ã©ã ãåªå
ããå¿
èŠããããŸãã
ããã°ã©ã ã®åäœã®å€åãèæ
®ããã«ã¯? ãããã®è³ªåã«å¯ŸããŠãåçŽãªçãã¯ãããŸãã
å¿çãšãè² è·ãšãã®åŸã®æ§æã®å®éšã®ã¿
ã¹ã±ãžã¥ãŒã©ã䜿çšãããšãããçšåºŠæºè¶³ã®ãããã©ã³ã¹ãåŸãããŸãã
ããšãã°ãã»ãšãã©ã® MLFQ å®è£
ã§ã¯ãç°ãªãå€ãå²ãåœãŠãããšãã§ããŸãã
ããŸããŸãªãã¥ãŒã®æéééã éåžžãåªå
床ã®é«ããã¥ãŒ
çãééã ãããã®ãã¥ãŒã¯å¯Ÿè©±åã¿ã¹ã¯ã§æ§æãããŸãã
ã©ã¡ãã®åãæ¿ãã¯éåžžã«ç¹çŽ°ã§ããã10 以äžã®æéããããã¯ãã§ã
MSã 察ç
§çã«ãåªå
床ã®äœããã¥ãŒã¯ã次ã®ãããªé·æéå®è¡ã¿ã¹ã¯ã§æ§æãããŸãã
CPUã ãã®å Žåãé·ãæééé (100 ããªç§) ãéåžžã«ããé©åããŸãã
ãã®äŸã§ã¯ãé«åªå
床ãã¥ãŒ 2 ã§åäœããŠããã¿ã¹ã¯ã 20 ã€ãããŸãã
ms ã 10ms ãŠã£ã³ããŠã«åå²ããŸãã äžéãã¥ãŒ (40 ããªç§ãŠã£ã³ããŠ) ããã³äœåªå
床ãã¥ãŒã§ 20 ããªç§
ã¿ã¹ã¯ãäœæ¥ãå®äºãããã¥ãŒ ã¿ã€ã ãŠã£ã³ããŠã 40 ããªç§ã«ãªããŸããã
Solaris OS ã§ã® MLFQ ã®å®è£
ã¯ãã¿ã€ã ã·ã§ã¢ãªã³ã° ã¹ã±ãžã¥ãŒã©ã®ã¯ã©ã¹ã§ãã
ãã©ã³ããŒã¯ãå¿
èŠãªãšããã«æ£ç¢ºã«å®çŸ©ããäžé£ã®ããŒãã«ãæäŸããŸãã
ããã»ã¹ã®åç¶æéå
šäœã«ããã£ãŠããã»ã¹ã®åªå
é äœãå€æŽããŸãããµã€ãºã¯ã©ã®ãããã«ãã¹ãã§ãã
å²ãåœãŠããããŠã£ã³ããŠãšãã¿ã¹ã¯ã®åªå
é äœãäžããå¿
èŠãããé »åºŠã 管çè
ã·ã¹ãã ã¯ãã®ããŒãã«ãšå¯Ÿè©±ããã¹ã±ãžã¥ãŒã©ãåäœãããããšãã§ããŸã
éãã ããã©ã«ãã§ã¯ããã®ããŒãã«ã«ã¯ 60 åã®ãã¥ãŒããããåŸã
ã«å¢å ããŸãã
ãŠã£ã³ã㊠ãµã€ãºã¯ 20 ããªç§ (åªå
床ãé«ã) ããæ°çŸããªç§ (åªå
床ãæãäœã)ã
ãŸãããã¹ãŠã®ã¿ã¹ã¯ã XNUMX ç§ã« XNUMX åããŒã¹ãããŸãã
ä»ã® MLFQ ã¹ã±ãžã¥ãŒã©ã¯ãããŒãã«ãç¹å®ã®ããŒãã«ã䜿çšããŸããã
ãã®è¬çŸ©ã§èª¬æããã«ãŒã«ã¯ãéã«ã以äžã䜿çšããŠåªå
床ãèšç®ããŸãã
æ°åŒã ããšãã°ãFreeBSD ã®ã¹ã±ãžã¥ãŒã©ã¯æ¬¡ã®åŒã䜿çšããŸãã
ããã»ã¹ã«ãããæéã«åºã¥ããŠã¿ã¹ã¯ã®çŸåšã®åªå
床ãèšç®ãã
䜿çšããCPUã ããã«ãCPU 䜿çšçã¯æéã®çµéãšãšãã«äœäžããããã
ãããã£ãŠãåªå
床ã®å¢å ã¯äžèšãšã¯å€å°ç°ãªããŸãã ããã¯æ¬åœã§ã
æžè¡°ã¢ã«ãŽãªãºã ãšåŒã°ããŸãã ããŒãžã§ã³ 7.1 以éãFreeBSD 㯠ULE ã¹ã±ãžã¥ãŒã©ã䜿çšããŸãã
æåŸã«ãå€ãã®ã¹ã±ãžã¥ãŒã©ã«ã¯ä»ã®æ©èœããããŸãã ããšãã°ãããã€ãã®
ã¹ã±ãžã¥ãŒã©ã¯ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®åäœã®ããã«æé«ã¬ãã«ãäºçŽããããã
ãããã£ãŠãã©ã®ãŠãŒã¶ãŒããã»ã¹ãæé«ã®åªå
é äœãååŸã§ããŸããã
ã·ã¹ãã ã äžéšã®ã·ã¹ãã ã§ã¯ã圹ç«ã€ã¢ããã€ã¹ãæäŸã§ããŸã
ã¹ã±ãžã¥ãŒã©ãæ£ããåªå
é äœãä»ããŸãã ããšãã°ã次ã®ã³ãã³ãã䜿çšãããšã nice
ã¿ã¹ã¯ã®åªå
床ãå¢æžã§ãããããå¢æžããããšãã§ããŸãã
ããã°ã©ã ã CPU æéãè²»ããå¯èœæ§ãæžãããŸãã
MLFQ: æŠèŠ
MLFQ ãšåŒã°ããèšç»ã¢ãããŒãã«ã€ããŠèª¬æããŸããã 圌ã®åå
åäœåçã§çµè«ä»ããããŠããŸã - ããã€ãã®ãã¥ãŒãããããã£ãŒãããã¯ã䜿çšããŸã
ã¿ã¹ã¯ã«åªå
é äœãä»ããããã
ã«ãŒã«ã®æçµçãªåœ¢åŒã¯æ¬¡ã®ããã«ãªããŸãã
- Rule1: åªå 床(A) > åªå 床(B) ã®å Žåãã¿ã¹ã¯ A ãå®è¡ãããŸã (B ã¯å®è¡ãããŸãã)ã
- Rule2: åªå 床(A) = åªå 床(B)ã®å ŽåãRRã䜿çšããŠA&Bãéå§ãããŸãã
- Rule3: ã¿ã¹ã¯ãã·ã¹ãã ã«å ¥åããããšããã®ã¿ã¹ã¯ã¯æãåªå 床ã®é«ããã¥ãŒã«é 眮ãããŸãã
- Rule4: ã¿ã¹ã¯ãçŸåšã®ãã¥ãŒã«å²ãåœãŠãããæéã䜿ãæãããš (äœåºŠ CPU ã解æŸãããã«é¢ä¿ãªã)ããã®ã¿ã¹ã¯ã®åªå 床ã¯äžãããŸã (ãã¥ãŒã®äžã«ç§»åããŸã)ã
- Rule5: äžå®æé S ã®åŸãã·ã¹ãã å ã®ãã¹ãŠã®ã¿ã¹ã¯ãæäžäœã®ãã¥ãŒã«è»¢éããŸãã
MLFQ ãèå³æ·±ãã®ã¯ã次ã®çç±ããã§ãã
ã¿ã¹ã¯ã®æ§è³ªãäºåã«åŠç¿ããã¢ã«ãŽãªãºã ãã¿ã¹ã¯ã®éå»ã®åäœãåŠç¿ãã
ããã«å¿ããŠåªå
é äœãä»ããããŸãã ãããã£ãŠã圌ã¯äžåºŠã« XNUMX ã€ã®æ€
åã«åº§ãããšããŸã - å°ããªã¿ã¹ã¯ (SJFãSTCF) ã®çç£æ§ãéæããæ£çŽã«é·ãèµ°ãããã«ã
CPU è² è·ã®é«ããžã§ãã ãããã£ãŠãBSD ãšãã®æŽŸçã·ã¹ãã ãå«ãå€ãã®ã·ã¹ãã ã¯ã
SolarisãWindowsãMac ã¯ã¹ã±ãžã¥ãŒã©ãšããŠäœããã®ã¢ã«ãŽãªãºã ã䜿çšããŸã
ããŒã¹ã©ã€ã³ãšããŠã® MLFQã
è¿œå ã®è³æ
manpages.debian.org/stretch/manpages/sched.7.en.html en.wikipedia.org/wiki/Scheduling_ ïŒã³ã³ãã¥ãŒãã£ã³ã°ïŒPages.lip6.fr/Julia.Lawall/atc18-bouron.pdf www.usenix.org/legacy/event/bsdcon03/tech/full_papers/roberson/roberson.pdf chebykin.org/freebsd-process-scheduling
åºæïŒ habr.com