ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®æŠèŠ
ãããããã«ïŒ ç§ã®æèŠã§ã¯ãèå³æ·±ãæç®ã® XNUMX ã€ã§ãã OSTEP ã®ç¿»èš³ã·ãªãŒãºã®èšäºã玹ä»ããããšæããŸãã ãã®è³æã§ã¯ãUNIX ã«äŒŒããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®åäœãã€ãŸããææ°ã® OS ãæ§æããããã»ã¹ãããŸããŸãªã¹ã±ãžã¥ãŒã©ãã¡ã¢ãªãããã³ãã®ä»ã®åæ§ã®ã³ã³ããŒãã³ãã®åäœã«ã€ããŠéåžžã«è©³ãã説æããŸãã ãã¹ãŠã®è³æã®ãªãªãžãã«ã¯ãã¡ãããã芧ããã ããŸã
ãã®ããŒãã«é¢ããã©ãã®äœæ¥ã¯ã次ã®å Žæã«ãããŸãã
- ãªãªãžãã«ïŒ
Pages.cs.wisc.edu/~remzi/OSTEP/宿é¡/宿é¡.html - ãªãªãžãã«ïŒ
github.com/remzi-arpacidusseau/ostep-code - ç§ã®å人çãªé©å¿ïŒ
github.com/bykvaadm/OS/tree/master/ostep
ãã®ä»ã®éšå
ç§ã®ãã£ã³ãã«ããã§ãã¯ã§ããŸã
OS ããŠãŒã¶ãŒã«æäŸããæãåºæ¬çãªæœè±¡æŠå¿µã§ããããã»ã¹ãèŠãŠã¿ãŸãããã ããã»ã¹ã®å®çŸ©ã¯éåžžã«åçŽã§ãã å®è¡äžã®ããã°ã©ã ã ããã°ã©ã èªäœã¯ãã£ã¹ã¯äžã«ååšããçåœã®ãªããã®ã§ãããäžé£ã®åœä»€ãšãå Žåã«ãã£ãŠã¯èµ·åãåŸ
ã£ãŠããããã€ãã®éçããŒã¿ã§ãã ãããã®ãã€ããååŸããŠå®è¡ããããã°ã©ã ãæçšãªãã®ã«å€æããã®ã¯ OS ã§ãã
ã»ãšãã©ã®å ŽåããŠãŒã¶ãŒã¯è€æ°ã®ããã°ã©ã ãåæã«å®è¡ããããšèããŸããããšãã°ãã©ãããããäžã§ãã©ãŠã¶ãã²ãŒã ãã¡ãã£ã¢ ãã¬ãŒã€ãŒãããã¹ã ãšãã£ã¿ãªã©ãå®è¡ã§ããŸãã å®éãäžè¬çãªã·ã¹ãã ã§ã¯ãæ°åãŸãã¯æ°çŸã®ããã»ã¹ãåæã«å®è¡ã§ããŸãã ãã®ãããã·ã¹ãã ã¯äœ¿ãããããªããCPU ã空ããŠãããã©ãããæ°ã«ããå¿
èŠããªããããã°ã©ã ãå®è¡ããã ãã§æžã¿ãŸãã
ããã«ãããå€ãã® CPU ã®é¯èŠãã©ã®ããã«æäŸããããšããåé¡ãçããŸãã ç©çç㪠CPU ã XNUMX ã€ãããªãå Žåã§ããOS ã¯ã©ã®ããã«ããŠã»ãŒç¡éã®æ°ã® CPU ããããã®ãããªé¯èŠãäœãåºãããšãã§ããã®ã§ãããã?
OS 㯠CPU ä»®æ³åãéããŠãã®é¯èŠãäœãåºããŸãã XNUMX ã€ã®ããã»ã¹ãéå§ãããããåæ¢ããå¥ã®ããã»ã¹ãéå§ãããªã©ããããšã§ãå®éã«ã¯ XNUMX ã€ä»¥äžã®ç©çããã»ããµãããã«ãããããããOS ã¯å€æ°ã®ä»®æ³ CPU ããããšããé¯èŠãç¶æã§ããŸãã ãã®ãã¯ããã¯ã¯ãšåŒã°ããŸã CPUãªãœãŒã¹ãæéã§å²ã£ããã®ã ãã®æè¡ã䜿çšãããšããŠãŒã¶ãŒã¯å¿
èŠãªæ°ã ãåæããã»ã¹ãå®è¡ã§ããŸãã ãã®ãœãªã¥ãŒã·ã§ã³ã®ã³ã¹ãã¯ããã©ãŒãã³ã¹ã§ããCPU ãè€æ°ã®ããã»ã¹ã§å
±æãããå Žåãåããã»ã¹ã®åŠçãé
ããªãããã§ãã
CPU ä»®æ³åãå®è£
ããã«ã¯ãç¹ã«ãããé©åã«å®è¡ããã«ã¯ãOS ã«äœã¬ãã«ãšé«ã¬ãã«ã®äž¡æ¹ã®ãµããŒããå¿
èŠã§ãã äœã¬ãã«ã®ãµããŒããšåŒã°ããŸã ã¡ã«ããºã æ©èœã®å¿
èŠãªéšåãå®è£
ããäœã¬ãã«ã®ã¡ãœãããŸãã¯ãããã³ã«ã§ãã ãã®ãããªæ©èœã®äŸãšããŠã¯ãã³ã³ããã¹ã ã¹ã€ããã³ã°ãæããããŸããããã«ãããOS ã¯ããã»ããµäžã§ XNUMX ã€ã®ããã°ã©ã ãåæ¢ããå¥ã®ããã°ã©ã ãå®è¡ã§ããããã«ãªããŸãã ãã®æéåå²ã¯ãææ°ã®ãã¹ãŠã®ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã«å®è£
ãããŠããŸãã
ãããã®ã¡ã«ããºã ã®äžã«ããããªã·ãŒãã®åœ¢ã§ OS ã«çµã¿èŸŒãŸããããžãã¯ãããã€ããããŸãã ããªã·ãŒ ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã®ç¹å®ã®ææ決å®ã¢ã«ãŽãªãºã ã§ãã ããšãã°ããã®ãããªããªã·ãŒã¯ã(ã³ãã³ãã®ãªã¹ããã) æåã«èµ·åããããã°ã©ã ã決å®ããŸãã ãããã£ãŠãããšãã°ããã®åé¡ã¯æ¬¡ã®ãããªæ¿çã«ãã£ãŠè§£æ±ºãããŸãã ã¹ã±ãžã¥ãŒã© (ã¹ã±ãžã¥ãŒã«ããªã·ãŒ) ãããŠããœãªã¥ãŒã·ã§ã³ãéžæããéã«ã¯ãèµ·åå±¥æŽ (éå»æ°åéã«æãé·ãèµ·åãããããã°ã©ã )ããã®ããã»ã¹ã«ãããè² è· (èµ·åãããããã°ã©ã ã®çš®é¡)ãããã©ãŒãã³ã¹ææš (ã·ã¹ãã ãã€ã³ã¿ã©ã¯ãã£ããªå¯Ÿè©±ãã¹ã«ãŒããããªã©ã«æé©åãããŠããŸãã
æœè±¡åïŒããã»ã¹
ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã«ãã£ãŠå®è¡ãããå®è¡ããã°ã©ã ã®æœè±¡åããç§ãã¡ãããåŒãã§ããŸãã ããã»ã¹ã åè¿°ããããã«ãããã»ã¹ã¯ãä»»æã®ç¬éã«å®è¡ãããŠããåãªãããã°ã©ã ã§ãã ãã®ããã°ã©ã ãå®è¡äžã«ã¢ã¯ã»ã¹ãŸãã¯åœ±é¿ãäžããããŸããŸãªã·ã¹ãã ãªãœãŒã¹ããæŠèŠæ
å ±ãååŸã§ããããã°ã©ã ã
ããã»ã¹ã®ã³ã³ããŒãã³ããç解ããã«ã¯ãã·ã¹ãã ã®ç¶æ
ãã€ãŸãããã°ã©ã ãåäœäžã«äœãèªã¿åããå€æŽã§ããããç解ããå¿
èŠããããŸãã ãã€ã§ããã·ã¹ãã ã®ã©ã®èŠçŽ ãããã°ã©ã ã®å®è¡ã«ãšã£ãŠéèŠã§ããããç解ããå¿
èŠããããŸãã
ããã»ã¹ã«å«ãŸããã·ã¹ãã ç¶æ
ã®æçœãªèŠçŽ ã® XNUMX ã€ã¯æ¬¡ã®ãšããã§ãã èšæ¶ã åœä»€ã¯ã¡ã¢ãªå
ã«ãããŸãã ããã°ã©ã ãèªã¿æžãããããŒã¿ãã¡ã¢ãªå
ã«é
眮ãããŸãã ãããã£ãŠãããã»ã¹ãã¢ãã¬ã¹æå®ã§ããã¡ã¢ãª (ã¢ãã¬ã¹ç©ºéãšåŒã°ãã) ã¯ããã»ã¹ã®äžéšã§ãã
ã¬ãžã¹ã¿ãã·ã¹ãã ç¶æ
ã®äžéšã§ãã å€ãã®åœä»€ã¯ã¬ãžã¹ã¿ã®å€ãå€æŽãããããã®å€ãèªã¿åã£ããããããšãç®çãšããŠãããããã¬ãžã¹ã¿ãããã»ã¹ã®åäœã®éèŠãªéšåã«ãªããŸãã
ãã·ã³ç¶æ
ã¯ããã€ãã®ç¹æ®ã¬ãžã¹ã¿ããã圢æãããããšã«æ³šæããŠãã ããã äŸãã°ã IP - åœä»€ãã€ã³ã¿ â ããã°ã©ã ãçŸåšå®è¡ããŠããåœä»€ãžã®ãã€ã³ã¿ã ããããŸã ã¹ã¿ãã¯ãã€ã³ã¿ ãããŠããã«é¢é£ãã ãã¬ãŒã ãã€ã³ã¿ãé¢æ°ãã©ã¡ãŒã¿ãããŒã«ã«å€æ°ãæ»ãã¢ãã¬ã¹ã管çããããã«äœ¿çšãããŸãã
æåŸã«ãããã°ã©ã 㯠ROM (èªã¿åãå°çšã¡ã¢ãª) ã«ã¢ã¯ã»ã¹ããããšããããããŸãã ãã®ãI/Oã(å
¥å/åºå) æ
å ±ã«ã¯ãããã»ã¹ã«ãã£ãŠçŸåšéãããŠãããã¡ã€ã«ã®ãªã¹ããå«ãŸããŠããå¿
èŠããããŸãã
ããã»ã¹API
ããã»ã¹ãã©ã®ããã«æ©èœãããã«ã€ããŠã®ç解ãæ·±ããããã«ããªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã€ã³ã¿ãŒãã§ã€ã¹ã«å«ããå¿ èŠãããã·ã¹ãã ã³ãŒã«ã®äŸãæ€èšããŠã¿ãŸãããã ãããã® API ã¯ãã©ã® OS ã§ãäœããã®åœ¢åŒã§å©çšã§ããŸãã
â åµé ãã (äœæ): OS ã«ã¯ãæ°ããããã»ã¹ãäœæã§ããäœããã®ã¡ãœãããå«ãŸããŠããå¿
èŠããããŸãã ã¿ãŒããã«ã«ã³ãã³ããå
¥åããããã¢ã€ã³ã³ãããã«ã¯ãªãã¯ããŠã¢ããªã±ãŒã·ã§ã³ãèµ·åãããšãOS ã«åŒã³åºããéä¿¡ãããæ°ããããã»ã¹ãäœæãããæå®ãããããã°ã©ã ãèµ·åãããŸãã
â åé€: ããã»ã¹ãäœæããããã®ã€ã³ã¿ãŒãã§ã€ã¹ããããããOS ã¯ããã»ã¹ã匷å¶çã«åé€ããæ©èœãæäŸããå¿
èŠããããŸãã ã»ãšãã©ã®ããã°ã©ã ã¯ãå®è¡äžã«èªç¶ã«éå§ããã³çµäºããŸãã ãã以å€ã®å ŽåããŠãŒã¶ãŒã¯ãããã匷å¶çµäºã§ããããã«ãããã®ã§ãããã»ã¹ãåæ¢ããã€ã³ã¿ãŒãã§ã€ã¹ã圹ç«ã€ã§ãããã
â åŸ
〠(åŸ
æ©äž): ããã»ã¹ãå®äºãããŸã§åŸ
æ©ãããšäŸ¿å©ãªå ŽåããããããåŸ
æ©æ©èœãæäŸããã€ã³ã¿ãŒãã§ã€ã¹ãããã€ãæäŸãããŠããŸãã
â ãã®ä»ã®å¶åŸ¡ (åçš®å¶åŸ¡): ããã»ã¹ã匷å¶çµäºããŠåŸ
æ©ãã以å€ã«ããããŸããŸãªå¶åŸ¡æ¹æ³ããããŸãã ããšãã°ãã»ãšãã©ã®ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã«ã¯ãããã»ã¹ãããªãŒãº (äžå®æéå®è¡ãåæ¢) ããŠããåé (å®è¡ãç¶ç¶) ããæ©èœãåãã£ãŠããŸãã
â Status: (ç¶æ
): ããã»ã¹ã®å®è¡æéãçŸåšã®ç¶æ
ãªã©ãããã»ã¹ã®ã¹ããŒã¿ã¹ã«é¢ããæ
å ±ãååŸããããã®ããŸããŸãªã€ã³ã¿ãŒãã§ã€ã¹ããããŸãã
ããã»ã¹ã®äœæ: 詳现
èå³æ·±ãç¹ã® XNUMX ã€ã¯ãããã°ã©ã ãã©ã®ããã«æ£ç¢ºã«ããã»ã¹ã«å€æãããããšããããšã§ãã ç¹ã«ãOS ãããã°ã©ã ãã©ã®ããã«ååŸããŠå®è¡ããããéèŠã§ãã ããã»ã¹ãã©ã®çšåºŠæ£ç¢ºã«äœæããããã
ãŸããOS ã¯ããã°ã©ã ã³ãŒããšéçããŒã¿ãã¡ã¢ãª (ããã»ã¹ ã¢ãã¬ã¹ç©ºé) ã«ããŒãããå¿
èŠããããŸãã ããã°ã©ã ã¯éåžžãäœããã®å®è¡å¯èœåœ¢åŒã§ãã£ã¹ã¯ãŸãã¯ãœãªãã ã¹ããŒã ãã©ã€ãã«ä¿åãããŸãã ãããã£ãŠãããã°ã©ã ãšéçããŒã¿ãã¡ã¢ãªã«ããŒãããããã»ã¹ã§ã¯ãOS ããã£ã¹ã¯ãããããã®ãã€ããèªã¿åããã¡ã¢ãªã®ã©ããã«é
眮ã§ããå¿
èŠããããŸãã
åæã®ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã§ã¯ãããŒã ããã»ã¹ãç±å¿ã«å®è¡ãããŸãããããã¯ãããã°ã©ã ãèµ·åãããåã«ã³ãŒãå šäœãã¡ã¢ãªã«ããŒããããããšãæå³ããŸãã ææ°ã®ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã¯ãããé 延çã«å®è¡ããŸããã€ãŸããããã°ã©ã ã®å®è¡äžã«ã³ãŒããŸãã¯ããŒã¿ãå¿ èŠãªå Žåã«ã®ã¿ã³ãŒããŸãã¯ããŒã¿ãèªã¿èŸŒã¿ãŸãã
ã³ãŒããšéçããŒã¿ã OS ã¡ã¢ãªã«ããŒããããããããã»ã¹ãå®è¡ããåã«è¡ãå¿ èŠãããããšãããã«ããã€ããããŸãã ããçšåºŠã®éã®ã¡ã¢ãªãã¹ã¿ãã¯ã«å²ãåœãŠãå¿ èŠããããŸãã ããã°ã©ã ã¯ãããŒã«ã«å€æ°ãé¢æ°ãã©ã¡ãŒã¿ãæ»ãã¢ãã¬ã¹ã«ã¹ã¿ãã¯ã䜿çšããŸããã OS ã¯ãã®ã¡ã¢ãªãå²ãåœãŠãŠããã»ã¹ã«äžããŸãã ã¹ã¿ãã¯ã«ã¯ãããã€ãã®åŒæ°ãå²ãåœãŠãããšãã§ããŸããå ·äœçã«ã¯ãmain() é¢æ°ã®ãã©ã¡ãŒã¿ããããšãã° argc ãš argv ã®é åã§åããŸãã
ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã¯ãäžéšã®ã¡ã¢ãªãããã°ã©ã ããŒãã«å²ãåœãŠãããšããããŸãã ããŒãã¯ãåçã«å²ãåœãŠãããããŒã¿ãæ瀺çã«èŠæ±ããããã«ããã°ã©ã ã«ãã£ãŠäœ¿çšãããŸããã ããã°ã©ã ã¯é¢æ°ãåŒã³åºããŠãã®ã¹ããŒã¹ãèŠæ±ããŸãã mallocïŒïŒ é¢æ°ãåŒã³åºããŠæ瀺çã«ã¯ãªã¢ããŸã èªç±ïŒïŒã ããŒãã¯ããªã³ã¯ãããã·ãŒããããã·ã¥ ããŒãã«ãããªãŒãªã©ã®ããŒã¿æ§é ã«å¿ èŠã§ãã æåã¯å°éã®ã¡ã¢ãªãããŒãã«å²ãåœãŠãããŸãããããã°ã©ã ãå®è¡ãããã«ã€ããŠãããŒãã¯ã©ã€ãã©ãª API åŒã³åºã malloc() ãéããŠããå€ãã®ã¡ã¢ãªãèŠæ±ããããšãã§ããŸãã ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã¯ããããã®åŒã³åºããæºããããã«ãããå€ãã®ã¡ã¢ãªãå²ãåœãŠãããã»ã¹ã«é¢äžããŸãã
ãªãã¬ãŒãã£ã³ã° ã·ã¹ãã ã¯ãåæåã¿ã¹ã¯ãç¹ã« I/O ã«é¢é£ããã¿ã¹ã¯ãå®è¡ããŸãã ããšãã°ãUNIX ã·ã¹ãã ã§ã¯ãããã©ã«ãã§åããã»ã¹ã«ãæšæºå ¥åãåºåããšã©ãŒçšã« 3 ã€ã®ãªãŒãã³ ãã¡ã€ã«èšè¿°åããããŸãã ãããã®ãã³ãã«ã䜿çšãããšãããã°ã©ã ã¯ç«¯æ«ããã®å ¥åãèªã¿åããç»é¢ã«æ å ±ã衚瀺ã§ããããã«ãªããŸãã
ãããã£ãŠãã³ãŒããšéçããŒã¿ãã¡ã¢ãªã«ããŒãããã¹ã¿ãã¯ãäœæããã³åæåããI/O ã¿ã¹ã¯ã®å®è¡ã«é¢é£ãããã®ä»ã®äœæ¥ãè¡ãããšã«ãããOS ã¯ããã»ã¹ãå®è¡ããããã®æºåãæŽããŸãã æåŸã«ãæåŸã®ã¿ã¹ã¯ã XNUMX ã€æ®ã£ãŠããŸããããã¯ãmain() é¢æ°ãšåŒã°ãããšã³ã㪠ãã€ã³ããéããŠããã°ã©ã ãå®è¡ããããšã§ãã main() é¢æ°ãå®è¡ãããšãOS ã¯æ°ããäœæãããããã»ã¹ã« CPU å¶åŸ¡ã移ããããã°ã©ã ã®å®è¡ãéå§ãããŸãã
ããã»ã¹ç¶æ
ããã»ã¹ãšã¯äœãããããŠããã»ã¹ãã©ã®ããã«äœæãããããããçšåºŠç解ãããšããã§ãããã»ã¹ãåãåŸãããã»ã¹ã®ç¶æ
ããªã¹ãããŠã¿ãŸãããã æãåçŽãªåœ¢åŒã§ã¯ãããã»ã¹ã¯æ¬¡ã®ããããã®ç¶æ
ã«ãªããŸãã
â Running:ã å®è¡äžãããã»ã¹ã¯ããã»ããµäžã§å®è¡ãããŸãã ããã¯åœä»€ãå®è¡ãããŠããããšãæå³ããŸãã
â ã¬ãã£ã æºåå®äºç¶æ
ã§ã¯ãããã»ã¹ãå®è¡ããæºåãã§ããŠããŸãããäœããã®çç±ã§ OS ã¯æå®ãããæéã«ããã»ã¹ãå®è¡ããŸããã
â ãããã¯ãããŸããã ãããã¯ãããç¶æ
ã§ã¯ãããã»ã¹ã¯ãäœããã®ã€ãã³ããçºçãããŸã§å®è¡æºåãæŽããªãããã«ããããã€ãã®æäœãå®è¡ããŸãã äžè¬çãªäŸã® XNUMX ã€ã¯ãããã»ã¹ã IO æäœãéå§ãããšãããã¯ãããä»ã®ããã»ã¹ããã®ããã»ããµãŒã䜿çšã§ããããã«ãªããŸãã
ãããã®ç¶æ
ãã°ã©ãã®åœ¢ã§æ³åããããšãã§ããŸãã å³ãããããããã«ãããã»ã¹ã®ç¶æ
㯠OS ã®è£éã«ãã£ãŠ RUNNING ãš READY ã®éã§å€åããŸãã ããã»ã¹ã®ç¶æ
ã READY ãã RUNNING ã«å€ãããšãããã»ã¹ãã¹ã±ãžã¥ãŒã«ãããããšãæå³ããŸãã å察æ¹å - ã¬ã€ã¢ãŠãããåé€ãããŸãã ããšãã°ãIO æäœãéå§ãããªã©ãããã»ã¹ããããã¯ç¶æ
ã«ãªã£ãç¬éãOS ã¯ãIO ã®å®äºãªã©ã®äœããã®ã€ãã³ããçºçãããŸã§ããã»ã¹ããã®ç¶æ
ã«ä¿ã¡ãŸãã ãã®æç¹ã§ READY ç¶æ
ã«ç§»è¡ããOS ãå€æããå Žåã¯ããã« RUNNING ç¶æ
ã«ç§»è¡ããå¯èœæ§ããããŸãã
XNUMX ã€ã®ããã»ã¹ããããã®ç¶æ
ãã©ã®ããã«ééãããã®äŸãèŠãŠã¿ãŸãããã ãŸããäž¡æ¹ã®ããã»ã¹ãå®è¡äžã§ãããããã CPU ã®ã¿ã䜿çšããŠãããšæ³åããŠã¿ãŸãããã ãã®å Žåãç¶æ
ã¯æ¬¡ã®ããã«ãªããŸãã
次ã®äŸã§ã¯ãæåã®ããã»ã¹ã¯ããã°ããå®è¡ããåŸãIO ãèŠæ±ã㊠BLOCKED ç¶æ
ã«å
¥ããå¥ã®ããã»ã¹ã®å®è¡ãèš±å¯ããŸã (å³ 1.4)ã OS ã¯ããã»ã¹ 0 ã CPU ã䜿çšããŠããªãããšã確èªããããã»ã¹ 1 ãéå§ããŸããããã»ã¹ 1 ã®å®è¡äžã« IO ãå®äºããããã»ã¹ 0 ã®ã¹ããŒã¿ã¹ã READY ã«å€ãããŸãã æåŸã«ãããã»ã¹ 1 ãå®äºããå®äºãããšããã»ã¹ 0 ãéå§ãå®è¡ãããäœæ¥ãçµäºããŸãã
ããŒã¿æ§é
OS èªäœã¯ããã°ã©ã ã§ãããä»ã®ããã°ã©ã ãšåæ§ã«ãããŸããŸãªé¢é£æ å ±ã远跡ããããã€ãã®éèŠãªããŒã¿æ§é ãæã£ãŠããŸãã åããã»ã¹ã®ç¶æ ã远跡ããããã«ãOS ã¯ããã€ãã®æ©èœããµããŒãããŸãã ããã»ã¹ãªã¹ã READY ç¶æ ã®ãã¹ãŠã®ããã»ã¹ãšãçŸåšå®è¡äžã®ããã»ã¹ã远跡ããããã®è¿œå æ å ±ã ãŸããOS ã¯ãããã¯ãããããã»ã¹ãç£èŠããå¿ èŠããããŸãã IO ãå®äºããããOS ã¯å¿ èŠãªããã»ã¹ãèµ·åããå®è¡å¯èœãªç¶æ ã«ããå¿ èŠããããŸãã
ããšãã°ãOS ã¯ããã»ããµ ã¬ãžã¹ã¿ã®ç¶æ ãä¿åããå¿ èŠããããŸãã ããã»ã¹ãåæ¢ããç¬éã«ã¬ãžã¹ã¿ã®ç¶æ ãããã»ã¹ã®ã¢ãã¬ã¹ç©ºéã«ä¿åãããåäœãç¶ç¶ããç¬éã«ã¬ãžã¹ã¿ã®å€ã埩å ããããã®ããã»ã¹ã®å®è¡ãç¶ç¶ãããŸãã
æºåå®äºããããã¯æžã¿ãå®è¡äžã®ç¶æ ã«å ããŠããã®ä»ã®ç¶æ ããããŸãã å Žåã«ãã£ãŠã¯ãããã»ã¹ã®äœææã«ããã»ã¹ã INIT ç¶æ ã«ãªãããšããããŸãã æåŸã«ãããã»ã¹ã¯ãã§ã«å®äºããŠãããããã®æ å ±ã¯ãŸã ã¯ãªã¢ãããŠããªãå Žåãããã»ã¹ã FINAL ç¶æ ã«ããããšãã§ããŸãã UNIX ã·ã¹ãã ã§ã¯ããã®ç¶æ ã¯æ¬¡ã®ããã«åŒã°ããŸãã ãŸã³ãããã»ã¹ã ãã®ç¶æ ã¯ã芪ããã»ã¹ãåã®æ»ãã³ãŒããç¥ãããå Žåã«åœ¹ç«ã¡ãŸããããšãã°ãé垞㯠0 ã¯æåã瀺ãã1 ã¯ãšã©ãŒã瀺ããŸãããããã°ã©ãã¯è¿œå ã®åºåã³ãŒããçºè¡ããŠå¥ã®åé¡ãç¥ãããããšãã§ããŸãã 芪ããã»ã¹ãçµäºãããšãwait() ãªã©ã®æçµã·ã¹ãã ã³ãŒã«ãå®è¡ããŠåããã»ã¹ãçµäºããã®ãåŸ ã¡ãçµäºããããã»ã¹ã«é¢é£ä»ããããããŒã¿ãã¯ãªã¢ã§ããããšã OS ã«éç¥ããŸãã
è¬çŸ©ã®èŠç¹:
â ããã»ã¹ â OS å
ã§å®è¡äžã®ããã°ã©ã ã®äž»ãªæœè±¡åã ãã€ã§ããããã»ã¹ã¯ãã®ç¶æ
ãã€ãŸãã¢ãã¬ã¹ç©ºéå
ã®ã¡ã¢ãªã®å
容ãåœä»€ãã€ã³ã¿ãã¹ã¿ã㯠ãã€ã³ã¿ãå«ãããã»ããµ ã¬ãžã¹ã¿ã®å
容ãèªã¿æžãããããªãŒãã³ ãã¡ã€ã«ãªã©ã® IO æ
å ±ã«ãã£ãŠèª¬æã§ããŸãã
â ããã»ã¹API ããã°ã©ã ãããã»ã¹ã«å¯ŸããŠå®è¡ã§ããåŒã³åºãã§æ§æãããŸãã éåžžããããã¯äœæãåé€ããŸãã¯ãã®ä»ã®åŒã³åºãã§ãã
â ããã»ã¹ã¯ãå®è¡äžãæºåå®äºããããã¯åãªã©ã®ããŸããŸãªç¶æ
ã®ããããã«ãããŸãã ã¹ã±ãžã¥ãŒãªã³ã°ãã¹ã±ãžã¥ãŒãªã³ã°ããã®äŸå€ãåŸ
æ©ãªã©ã®ããŸããŸãªã€ãã³ãã«ãããããã»ã¹ã®ç¶æ
ãå¥ã®ç¶æ
ã«å€åããå¯èœæ§ããããŸãã
â ããã»ã¹ãªã¹ã ã·ã¹ãã å
ã®ãã¹ãŠã®ããã»ã¹ã«é¢ããæ
å ±ãå«ãŸããŠããŸãã ãã®äžã®åãšã³ããªã¯ããã»ã¹å¶åŸ¡ãããã¯ãšåŒã°ããå®éã«ã¯ç¹å®ã®ããã»ã¹ã«é¢ããå¿
èŠãªæ
å ±ããã¹ãŠå«ãŸããæ§é ã§ããâ
åºæïŒ habr.com