Lionsâ Commentary on UNIX èªæ¸ä¼ã¡ã¢#5
ã¯ããã«
Lions本読書会#5ã«åå ãã¦ãã¾ããã
ãã®ã¨ãã®ã¡ã¢ãæ®ãã¦ããã¾ãã
ä»åã¯12ç« ããã©ããã¨ã·ã¹ãã ã³ã¼ã«ããèªã¿ã¾ããã
å½åã¯13ç« ãèªãäºå®ã ã£ãã®ã§ããã12ç« ããã¾ãã«ããªã¥ã¼ã ããã£ããã12ç« ã ãã詳細ã«è¿½ããã¨ã«ãªãã¾ããã
å人çãªå°è±¡ã§ãããä»ã¾ã§ã®Lionsæ¬èªæ¸ä¼ã®ä¸ã§ä¸çªè¨è«ãæ´»çºã«ãªãããæ°ããã¾ãã
(ãã¯ã¤ããã¼ãã®åçãæ®ã£ã¦ããã°ããã£ãâ¦â¦)
togetter
- togetter ãLionsæ¬èªæ¸ä¼#5ã
togetterã使ã£ã¦ãé¢é£ãã¤ã¼ããã¾ã¨ãã¾ããã
彿¥ã®é°å²æ°ãã¤ãããã¨æãã¾ãã
èªåã®çºè¨ãå¤ããã¾ããæã表ç¾ã®ããããªãã®ãå¤ãã§ããæ°ã«ããã¬ããã
ã¡ã¢
trap.c
- estabur( )(1650)ã¯ç©çââä»®æ³ã¢ãã¬ã¹ãããã³ã°ãå¸ãã¬ã¸ã¹ã¿ã®èª¿æ´ãå
é¨ã§sureg( )(1739)ãå¼ãã§ããã®ã§ãã¬ã¸ã¹ã¿ã¯æ´æ°ããè¨å®ãå³åº§ã«åæ ãããã7ç« ã®323Påç
§
- ããã»ã¹ã®ããã¹ãããã¼ã¿ãã¹ã¿ãã¯ã»ã°ã¡ã³ããµã¤ãºã®èª¿æ´å¾ã«å¼ã³åºããããã¨ãå¤ã
- ã«ã¼ãã«ã¢ã¼ãã§ãã©ããããã¾ã使ãããªãã®ã£ã¦ãªãã§ã ã£ãï¼
- 10ç« ã®340Pããããåç §ãã³ã¼ããªãã°855è¡ããããnofaultãè¨å®ãã¦ãããã¤ã«å¦çããããã®ãåºæ¬ï¼ããªã®ã§trap.cã«ããå¦çã¯é常æ³å®ãã¦ããªãï¼
- ã«ã¼ãã«ãªãã°ãä¾å¤ãèµ·ããå¦çãããããè¡ãããã¨ãäºåã«ããã£ã¦ããã®ã§ãä¾å¤åä½ãèµ·ããã¨ãã®å¦çãäºãæå®ã§ãã(nofaultè¨å®ã«ãã)
- ã«ã¼ãã«ãªãã°ãã©ãããªãã¦æ©æ§ã使ããªãã¦ãè²ã ããããã
- trap( )ã®swtchã§case 8:ã®å ´å(ã«ã¼ãã«ã¢ã¼ãã§ãã¦ã¼ã¶ã¢ã¼ãã§å®è¡ããæµ®åå°æ°ç¹å½ä»¤ã«ããä¾å¤ããã©ããããå ´åãæµ®åå°æ°ç¹å½ä»¤ã¯å¦çã«æ°ãµã¤ã¯ã«å¿
è¦ãªã®ã§ãã«ã¼ãã«ã¢ã¼ãé·ç§»åã«ã¦ã¼ã¶ã¢ã¼ãã§æµ®åå°æ°ç¹å½ä»¤ãå®è¡ããå ´åã«ããããã±ã¼ã¹ãããå¾ããã«ã¼ãã«ã¢ã¼ãã§ã¯é常浮åå°æ°ç¹å½ä»¤ã¯ä½¿ç¨ããªã)
- ä»ã®caseæã®ããã«breakããã®ã§ã¯ãªããreturnã§ããã«æ»ã£ã¦ããã®ã¯ã¹ã¿ãã¯ã®å¾©å¸°ãã§ããªããªãããï¼(ãã徿¥ãã©ãã¼ãããã)
- trap( )ã®swtchã§case 9+USER:ã®ã»ã°ã¡ã³ãã¼ã·ã§ã³ä¾å¤ã«ã¤ãã¦ããã¼ã¿ã»ã°ã¡ã³ããè¶³ããªããªã£ããgrowã§æ¡å¼µãããæåãããreturnã失æãããã½ããã¦ã§ã¢å²ãè¾¼ã¿ãè¡ã
- ã¦ã¼ã¶(人)ã¬ãã«ã§ã¯è¦ããªãã¨ããã§ãå é¨ã§trapãèµ·ãã¦ããã¨æ³åããã¨é¢ç½ã
- system call handlerãå¼ã³åºãtrap1( )ã«ã¦ãhandlerå¼ã³åºãåã«savu(u.u_qsav)ãå¼ã³åºãã¦ããã®ã¯ä½ã®ããï¼
- sleep( )(2066)ã«ã¦ãsleep( )第äºå¼æ°ã0以ä¸ã®å ´åã«ã®ã¿issig( )ã§ã·ã°ãã«ãã§ãã¯ãããã·ã°ãã«ãåãåã£ã¦ãããretu(u.u_qsav)ã«ããr5, r6復帰ããã¦ããã復帰å¾ã¯ãã®å¾ã®returnã§trap1( )ãå¼ã³åºããå½ä»¤(ã®æ¬¡ã®å½ä»¤)ã«æ»ãã¯ã
- sleepã·ã¹ãã ã³ã¼ã«(ssleep( ), 5979)ã®ããã«è¨å®ãã¦ããï¼ ssleep( )ããå¼ã³åºãsleep( )(5994)ã®ç¬¬äºå¼æ°ã¯PSLEP(=90)ã§0以ä¸
- ä»ã®system call handlerå ã§ãsleep( )ãå¼ã¶ç®æã¯ãããããããä»åè¦ãç¯å²ã§ã¯ç¬¬äºå¼æ°ã¯0æªæºã«ãªã£ã¦ããããã¯ãsavu(u.u_qsav)ã¯ssleep( )ã®ããï¼
- system call handlerã®éæ¥å¼ã³åºãã¯libcã®writeãåèã«ãªã
exec
- system call handlerã«å¯¾ãã弿°ã¯ã©ã渡ãã¦ããï¼
- ããã»ã¹åºæé åã®u.u_argã«è©°ãè¾¼ãã§æ¸¡ãã¦ããã2751è¡ããããåç §ã
- exec( )ã®å®è¡ãã¡ã¤ã«ã¯uchar( )ã使ã£ã¦èªãã§ããããuchar( )å é¨ã§u.u_dirpã使ã£ã¦ãããu.u_dirpã¯2770è¡ã§u.u_arg[0]ãå ¥ã£ã¦ããããªãu.u_arg[0]ã§ã¯ãªãu.u_dirpçµç±ã§ã¢ã¯ã»ã¹ããã®ã ããï¼ nami( )(7518)ã®é½åï¼
- execntã§å¯ãããã»ã¹(3038)ã¯ã第äºå¼æ°ãè² ãã¤ã¾ãã½ããã¦ã§ã¢å²ãè¾¼ã¿ãç¡è¦ãã
- killã§æ®ºããªãï¼ kill( )(3630)ãè¦ã¦ããããã«ã½ããã¦ã§ã¢å²ãè¾¼ã¿ãå¦çããããã«ã¯ãªã£ã¦ããªããpsignal( )ãèªãã§ã·ã°ãã«ãã»ãããã¦ããã ã
- ããããexec( )ãå®è¡ãã¦ãã¾ãã¨kill( )ã§æ®ºããªãã®ã§ãã©ãã©ãããã»ã¹ããã¾ã£ã¦ãã¾ãããã¾ããããããªãè¨è¨ï¼
- a.outã®ãããã¯man5ãåç §
- w0=410ã¯ããã¹ãã»ã°ã¡ã³ãã¨ãã¼ã¿ã»ã°ã¡ã³ãã®éã«ããã£ã³ã°ãå ¥ã£ã¦åããã¦ããæ§æ
- æè¿ã®ããã»ããµã§ã¯Iã¨Dãåãã¦ããªã
- 3127è¡ç®ã®u.u_prof[3]=0ã®è¬ã(ãªãã®ããã«è¨å®ãã¦ããï¼)
- 3138è¡ãããã®ãã¼ã¿ã»ã°ã¡ã³ãèªã¿åºãã¯ãã¢ãã¬ã¹0ã«ãã¼ã¿ã»ã°ã¡ã³ããèªã¿åºãã¦ããæ¨¡æ§ãu.u_base = 0ãªã®ã§
- PDP11ã®ä»æ§ã¨ãã¦ï¼å®è¡ããã°ã©ã ã®ãã¼ã¿ã»ã°ã¡ã³ãã¯ã¢ãã¬ã¹0ã«ç½®ãå¿ è¦ãããï¼
- åè : http://d.hatena.ne.jp/oraccha/20101228
- 3149è¡ç®ãããã®ã¹ã¿ãã¯ã»ã°ã¡ã³ãåæåã¯ãå®è¡ããã°ã©ã ã«å¯¾ãã¦å¼æ°ãã¹ã¿ãã¯ã«è©°ãã¦ããããã®å¼æ°ã¯3052è¡ç®ãããã§u.u_argãããããã¡ã«è©°ãè¾¼ãã 弿°
- 弿°ãè©°ãè¾¼ãã å¾ã®ã¹ã¿ãã¯ã®ç¶æ ã¯man2ã®execåèã®ãã¨
- 3183è¡ç®ããããè¦ãã¨ãu.u_signal[n]ã«å¶æ°(ã½ããã¦ã§ã¢å²ãè¾¼ã¿ãã³ãã©ã®ã¢ãã¬ã¹)ãè¨å®ããã¦ããå ´å0(å¼·å¶çµäº)ãã»ãããã¦ããããã«è¦ãã
- 奿°(ãã®ã½ããã¦ã§ã¢å²ãè¾¼ã¿ãç¡è¦ãã)è¨å®ã¯å¤æ´ããªã
- execã®åã«ã¯é常forkãå®è¡ããããforkã¯è¦ªããã»ã¹ã®ã³ãã¼ããã¦ããã¨è¨ã£ã¦ãããã¤ã¾ã親ããã»ã¹ã®ã½ããã¦ã§ã¢å²ãè¾¼ã¿ç¡è¦ã®è¨å®ãç¶æ¿ããã¦ããããã«è¦ãã
- 3188è¡ç®ããªãr7ã ãforæã§åããã«å¥å½ä»¤ã§ãªã»ããï¼ pcã ããï¼
fork
- newproc( )ã使ã£ã¦æ°ããããã»ã¹ãçæ(ã³ãã¼)ãã¦ãã
- éè¦ãªç¹ã¯fork( )ãå®è¡ãã親ããã»ã¹ã¨ãæ°ããçæãããåããã»ã¹ã®å¦çã®æµãã親ããã»ã¹ã¯3347è¡ç®ã®pcã¤ã³ã¯ãªã¡ã³ãã«ãããç´å¾ã®br(åå²å½ä»¤)ãé£ã³è¶ããã以前のエントリ参考のこと
sbreak
- ãªãã§breakãªãã¦ããååï¼
- man2ã®breakãè¦ãã¨ããã¼ã¿ã»ã°ã¡ã³ãã®æ«ç«¯ï¼ ã¹ã¿ãã¯ã®å é ï¼ãbreakã¨å¼ã°ãã¦ãããããããããæä½ããã®ã§breakã¨å¼ã°ãã¦ããï¼
- man2ããå¼ç¨
Break sets the systemâs idea of the lowest location not used by the program (called the break) to addr
(rounded up to the next multiple of 64 bytes).
- æ¡å¼µãããã¼ã¿ã»ã°ã¡ã³ãã«ã¯ãã¹ã¿ãã¯ã»ã°ã¡ã³ãã®å 容ãã³ãã¼ãã¦ããããã«è¦ãããLionsæ¬356Pãåèã®ãã¨
åè
ä»ã®åå è ã®èªæ¸ä¼ã¡ã¢ãèå¯ãªã©ãå«ã¾ãã¦ãã¦ãããã§ãã
çµããã«
ä»ã«ãè²ã 話ã¯åºãã®ã§ãããç´°ããé¨åã¾ã§ã¯æ¾ãããã¾ããã§ãããä»ã®åå è ã®ãã©ãã¼ãæå¾ ãã¾ãã
å®éã®OSã®ã³ã¼ããèªãã§ã¿ããï¼ãã¨ããæ¹ã¯åå ãã¦ã¿ã¦ã¯ãããã§ããããã