Table of Contents, Show Frames, No Frames

µÚÎåÕ ½ø³Ì¼äͨѶ»úÖÆ


½ø³ÌÔÚºËÐĵÄЭµ÷ϽøÐÐÏ໥¼äµÄͨѶ¡£LinuxÖ§³Ö´óÁ¿½ø³Ì¼äͨѶ(IPC)»úÖÆ¡£³ýÁËÐźź͹ܵÀÍ⣬Linux »¹Ö§³ÖUnixϵͳVÖеÄIPC»úÖÆ¡£

5.1  ÐźÅ

ÐźÅÊÇUnixϵͳÖеÄ×î¹ÅÀϵĽø³Ì¼äͨѶ·½Ê½¡£ËüÃÇÓÃÀ´ÏòÒ»¸ö»ò¶à¸ö½ø³Ì·¢ËÍÒ첽ʼþÐźš£ÐźſÉÒÔ´Ó¼üÅÌÖжÏÖвúÉú£¬ÁíÍâ½ø³Ì¶ÔÐéÄâÄÚ´æµÄ·Ç·¨´æÈ¡µÈϵͳ´íÎó»·¾³ÏÂÒ²»áÓÐÐźŲúÉú¡£ÐźŻ¹±»shell³ÌÐòÓÃÀ´ÏòÆä×Ó½ø³Ì·¢ËÍÈÎÎñ¿ØÖÆÃüÁî¡£

ϵͳÖÐÓÐÒ»×é±»Ïêϸ¶¨ÒåµÄÐźÅÀàÐÍ£¬ÕâЩÐźſÉÒÔÓɺËÐÄ»òÕßϵͳÖÐÆäËü¾ßÓÐÊʵ±È¨Ï޵Ľø³Ì²úÉú¡£Ê¹ÓÃkillÃüÁî(kill -l)¿ÉÒÔÁгöϵͳÖÐËùÓÐÒѾ­¶¨ÒåµÄÐźš£ÔÚÎÒµÄϵͳ(Intelϵͳ)ÉÏÔËÐнá¹ûÈçÏ£º


 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL

 5) SIGTRAP	 6) SIGIOT	 7) SIGBUS	 8) SIGFPE

 9) SIGKILL	10) SIGUSR1	11) SIGSEGV	12) SIGUSR2

13) SIGPIPE	14) SIGALRM	15) SIGTERM	17) SIGCHLD

18) SIGCONT	19) SIGSTOP	20) SIGTSTP	21) SIGTTIN

22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ

26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO

30) SIGPWR	

µ±ÎÒÔÚAlpha AXPÖÐÔËÐдËÃüÁîʱ£¬µÃµ½Á˲»Í¬µÄÐźŸöÊý¡£³ýÁËÁ½¸öÐźÅÍ⣬½ø³Ì¿ÉÒÔºöÂÔÕâЩÐźÅÖеľø´ó²¿·Ö¡£ÆäÒ»ÊÇÒýÆð½ø³ÌÖÕÖ¹Ö´ÐеÄSIGSTOPÐźţ¬ÁíÒ»¸öÊÇÒýÆð½ø³ÌÍ˳öµÄSIGKILLÐźš£ ÖÁÓÚÆäËüÐźţ¬½ø³Ì¿ÉÒÔÑ¡Ôñ´¦ÀíËüÃǵľßÌ巽ʽ¡£½ø³Ì¿ÉÒÔ×èÈûÐźţ¬ÈçÈô²»×èÈû£¬Ôò¿ÉÒÔÔÚ×ÔÐд¦Àí´ËÐźźͽ«Æäת½»ºËÐÄ´¦ÀíÖ®¼ä×÷³öÑ¡Ôñ¡£Èç¹ûÓɺËÐÄÀ´´¦Àí´ËÐźţ¬Ëü½«Ê¹ÓöÔÓ¦´ËÐźŵÄȱʡ´¦Àí·½·¨¡£ ±ÈÈçµ±½ø³Ì½ÓÊÕµ½SIGFPE(¸¡µãÊýÒì³£)ʱ£¬ºËÐĵÄȱʡ²Ù×÷ÊÇÒýÆðcore dumpºÍ½ø³ÌµÄÍ˳ö¡£ÐźÅûÓйÌÓеÄÏà¶ÔÓÅÏȼ¶¡£Èç¹ûÔÚͬһʱ¿Ì¶ÔÓÚÒ»¸ö½ø³Ì²úÉúÁËÁ½¸öÐźţ¬ÔòËüÃǽ«¿ÉÄÜÒÔÈÎÒâ˳Ðòµ½´ï½ø³Ì²¢½øÐд¦Àí¡£Í¬Ê±Linux²¢²»Ìṩ´¦Àí¶à¸öÏàͬÀàÐÍÐźŵķ½Ê½¡£¼´½ø³ÌÎÞ·¨Çø·ÖËüÊÇÊÕµ½ÁË1¸ö»¹ÊÇ42¸öSIGCONTÐźš£

Linuxͨ¹ý´æ´¢ÔÚ½ø³Ìtask_structÖеÄÐÅÏ¢À´ÊµÏÖÐźš£ÐźŸöÊýÊܵ½´¦ÀíÆ÷×Ö³¤µÄÏÞÖÆ¡£32λ×Ö³¤µÄ´¦ÀíÆ÷×î¶à¿ÉÒÔÓÐ32¸öÐźŶø64λ´¦ÀíÆ÷ÈçAlpha AXP¿ÉÒÔÓÐ×î¶à64¸öÐźš£µ±Ç°Î´´¦ÀíµÄÐźű£´æÔÚsignalÓòÖУ¬²¢´øÓб£´æÔÚblockedÖеı»×èÈûÐÅºÅµÄÆÁ±ÎÂë¡£³ýÁËSIGSTOPºÍSIGKILLÍ⣬ËùÓеÄÐźŶ¼Äܱ»×èÈû¡£µ±²úÉú¿É×èÈûÐźÅʱ£¬´ËÐźſÉÒÔ±£³ÖÒ»Ö±´¦ÓÚ´ý´¦Àí״ֱ̬µ½×èÈûÊÍ·Å¡£Linux±£´æ×Åÿ¸ö½ø³Ì´¦Àíÿ¸ö¿ÉÄÜÐźŵÄÐÅÏ¢£¬ËüÃDZ£´æÔÚÿ¸ö½ø³Ìtask_structÖеÄsigactionÊý×éÖС£ÕâЩÐÅÏ¢°üÀ¨½ø³ÌÏ£Íû´¦ÀíµÄÐźÅËù¶ÔÓ¦µÄ¹ý³ÌµØÖ·£¬»òÕßָʾÊǺöÂÔÐźŻ¹ÊÇÓɺËÐÄÀ´´¦ÀíËüµÄ±ê¼Ç¡£Í¨¹ýϵͳµ÷Ó㬽ø³Ì¿ÉÒÔÐÞ¸ÄȱʡµÄÐźŴ¦Àí¹ý³Ì£¬Õ⽫¸Ä±äij¸öÐźŵÄsigactionÒÔ¼°×èÈûÆÁ±ÎÂë¡£

²¢²»ÊÇϵͳÖÐÿ¸ö½ø³Ì¶¼¿ÉÒÔÏòËùÓÐÆäËü½ø³Ì·¢ËÍÐźţºÖ»ÓкËÐĺͳ¬¼¶Óû§¾ßÓдËȨÏÞ¡£ÆÕͨ½ø³ÌÖ»ÄÜÏò¾ßÓÐÏàͬuidºÍgidµÄ½ø³Ì»òÕßÔÚͬһ½ø³Ì×éÖеĽø³Ì·¢ËÍÐźš£ÐźÅÊÇͨ¹ýÉèÖÃtask_struct½á¹¹ÖÐsignalÓòÀïµÄijһλÀ´²úÉúµÄ¡£Èç¹û½ø³ÌûÓÐ×èÈûÐźŲ¢ÇÒ´¦ÓÚ¿ÉÖжϵĵȴý״̬£¬Ôò¿ÉÒÔ½«Æä״̬¸Ä³ÉRunning£¬Í¬Ê±ÈçÈ·ÈϽø³Ì»¹´¦ÔÚÔËÐжÓÁÐÖУ¬¾Í¿ÉÒÔͨ¹ýÐźŻ½ÐÑËü¡£ÕâÑùϵͳÏ´η¢Éúµ÷¶Èʱ£¬µ÷¶È¹ÜÀíÆ÷½«Ñ¡ÔñËüÔËÐС£Èç¹û½ø³ÌÐèҪȱʡµÄÐźŴ¦Àí¹ý³Ì£¬ÔòLinux¿ÉÒÔÓÅ»¯¶Ô´ËÐźŵĴ¦Àí¡£ÀýÈçSIGWINCH£¨X´°¿ÚµÄ½¹µã¸Ä±ä£©Ðźţ¬Æäȱʡ´¦Àí¹ý³ÌÊÇʲôҲ²»×ö¡£

ÐźŲ¢·ÇÒ»²úÉú¾ÍÁ¢¿Ì½»¸ø½ø³Ì£¬¶øÊDZØÐëµÈ´ýµ½½ø³ÌÔÙ´ÎÔËÐÐʱ²Å½»¸ø½ø³Ì¡£Ã¿´Î½ø³Ì´Óϵͳµ÷ÓÃÖÐÍ˳öǰ£¬Ëü¶¼»á¼ì²ésignalºÍblockedÓò£¬¿´ÊÇ·ñÓпÉÒÔÁ¢¿Ì·¢Ë͵ķÇ×èÈûÐźš£Õâ¿´ÆðÀ´·Ç³£²»¿É¿¿£¬µ«ÊÇϵͳÖÐÿ¸ö½ø³Ì¶¼ÔÚ²»Í£µØ½øÐÐϵͳµ÷Óã¬ÈçÏòÖÕ¶ËÊä³ö×Ö·û¡£µ±È»½ø³Ì¿ÉÒÔÑ¡ÔñÈ¥µÈ´ýÐźţ¬´Ëʱ½ø³Ì½«Ò»Ö±´¦ÓÚ¿ÉÖжÏ״ֱ̬µ½ÐźųöÏÖ¡£¶Ôµ±Ç°²»¿É×èÈûÐźŵĴ¦Àí´úÂë·ÅÖÃÔÚsigaction½á¹¹ÖС£

Èç¹ûÐźŵĴ¦Àí¹ý³Ì±»ÉèÖóÉȱʡÔòÓɺËÐÄÀ´Ó¦¸¶Ëü¡£SIGSTOPÐźŵÄȱʡ´¦Àí¹ý³ÌÊǽ«µ±Ç°½ø³ÌµÄ״̬¸Ä±ä³ÉΪStopped²¢ÔËÐе÷¶È¹ÜÀíÆ÷ÒÔÑ¡ÔñÒ»¸öнø³Ì¼ÌÐøÔËÐС£SIGFPEµÄȱʡ´¦Àí¹ý³ÌÔòÊÇÒýÆðcore dump²¢Ê¹½ø³ÌÍ˳ö¡£µ±È»£¬½ø³Ì¿ÉÒÔ¶¨ÒåÆä×ÔÉíµÄÐźŴ¦Àí¹ý³Ì¡£Ò»µ©ÐźŲúÉú£¬Õâ¸ö¹ý³Ì¾Í½«±»µ÷Óá£ËüµÄµØÖ·´æ´¢ÔÚsigaction½á¹¹ÖС£ºËÐıØÐëµ÷Óýø³ÌµÄÐźŴ¦ÀíÀý³Ì£¬¾ßÌåÈçºÎÈ¥×öÒÀÀµÓÚ´¦ÀíÆ÷ÀàÐÍ£¬µ«ÊÇËùÓеÄCPU ±ØÐë´¦ÀíÕâ¸öÎÊÌ⣺Èç¹ûÐźŲúÉúʱ£¬µ±Ç°½ø³ÌÕýÔÚºËÐÄģʽÏÂÔËÐв¢ÇÒÂíÉÏÒª·µ»Øµ÷ÓúËÐÄ»òÕßϵͳÀý³ÌµÄ½ø³Ì£¬¶ø¸Ã½ø³Ì´¦ÔÚÓû§Ä£Ê½Ï¡£½â¾öÕâ¸öÎÊÌâÐèÒª²Ù×ݽø³ÌµÄ¶ÑÕ»¼°¼Ä´æÆ÷¡£½ø³ÌµÄ³ÌÐò¼ÆÊýÆ÷±»ÉèÖÃ³ÉÆäÐźŴ¦Àí¹ý³ÌµÄµØÖ·£¬¶ø²ÎÊýͨ¹ýµ÷Óÿò¼Ü»òÕ߼ĴæÆ÷´«µÝµ½´¦ÀíÀý³ÌÖС£µ±½ø³Ì¼ÌÐøÖ´ÐÐʱ£¬ÐźŴ¦ÀíÀý³ÌºÃÏóÆÕͨµÄº¯Êýµ÷ÓÃÒ»Ñù¡£

LinuxÊÇPOSIX¼æÈݵģ¬ËùÒÔµ±Ä³¸öÌØ¶¨ÐźŴ¦ÀíÀý³Ì±»µ÷ÓÃʱ£¬½ø³Ì¿ÉÒÔÉ趨ÄĸöÐźſÉÒÔ×èÈû¡£ÕâÒâζ×Å¿ÉÒÔÔÚ½ø³ÌÐźŴ¦Àí¹ý³ÌÖиıäblockedÆÁ±ÎÂë¡£µ±ÐźŴ¦ÀíÀý³Ì½áÊøÊ±£¬´ËblockedÆÁ±ÎÂë±ØÐëÉèÖóÉÔ­ÓÐÖµ¡£ Òò´Ë£¬LinuxÌí¼ÓÁËÒ»¸ö¹ý³Ìµ÷ÓÃÀ´½øÐÐÕûÀí¹¤×÷£¬Í¨¹ýËüÀ´ÖØÐÂÉèÖñ»·¢ËÍÐźŽø³Ìµ÷ÓÃÕ»ÖеÄÔ­ÓÐblockedÆÁ±ÎÂë¡£ ¶ÔÓÚͬһʱ¿Ì¼¸¸öÐźŴ¦Àí¹ý³Ì£¬Linuxͨ¹ý¶ÑÕ»·½Ê½À´ÓÅ»¯ÆäʹÓã¬Ã¿µ±Ò»¸ö´¦Àí¹ý³ÌÍ˳öʱ£¬ÏÂÒ»¸ö´¦Àí¹ý³Ì±ØÐëµÈµ½ÕûÀíÀý³Ì½áÊøºó²ÅÖ´ÐС£

5.2  ¹ÜµÀ

Ò»°ãµÄLinux shell³ÌÐò¶¼ÔÊÐíÖØ¶¨Ïò¡£Èç



$ ls | pr | lpr



ÔÚÕâ¸ö¹ÜµÀÓ¦ÓÃÖУ¬lsÁе±Ç°Ä¿Â¼µÄÊä³ö±»×÷Ϊ±ê×¼ÊäÈëË͵½pr³ÌÐòÖУ¬¶øprµÄÊä³öÓÖ±»×÷Ϊ±ê×¼ÊäÈëË͵½lpr³ÌÐòÖС£¹ÜµÀÊǵ¥ÏòµÄ×Ö½ÚÁ÷£¬Ëü½«Ä³¸ö½ø³ÌµÄ±ê×¼Êä³öÁ¬½Óµ½ÁíÍâ½ø³ÌµÄ±ê×¼ÊäÈë¡£µ«ÊÇʹÓùܵÀµÄ½ø³Ì¶¼²»»áÒâʶµ½Öض¨ÏòµÄ´æÔÚ£¬²¢ÇÒÆäÖ´Ðнá¹ûÒ²²»»áÓÐʲô²»Í¬¡£shell³ÌÐò¸ºÔðÔÚ½ø³Ì¼ä½¨Á¢ÁÙʱµÄ¹ÜµÀ¡£


ͼ5.1 ¹ÜµÀ

ÔÚLinuxÖУ¬¹ÜµÀÊÇͨ¹ýÖ¸Ïòͬһ¸öÁÙʱVFS inodeµÄÁ½¸öfileÊý¾Ý½á¹¹À´ÊµÏֵ쬴ËVFS inodeÖ¸ÏòÄÚ´æÖеÄÒ»¸öÎïÀíÒ³Ãæ¡£Í¼5.1ÖÐÿ¸öfileÊý¾Ý½á¹¹Ö¸Ïò²»Í¬µÄÎļþ²Ù×÷Àý³ÌÏòÁ¿£¬Ò»¸öÊÇʵÏֶԹܵÀµÄд£¬ÁíÒ»¸ö´Ó¹ÜµÀÖжÁ¡£

ÕâÑù¾ÍÒþ²ØÁ˶Áд¹ÜµÀºÍ¶ÁдÆÕͨµÄÎļþʱϵͳµ÷ÓõIJî±ð¡£µ±Ð´Èë½ø³Ì¶Ô¹ÜµÀдʱ£¬×Ö½Ú±»¿½±´µ½¹²ÏíÊý¾ÝÒ³ÃæÖУ¬µ±¶ÁÈ¡½ø³Ì´Ó¹ÜµÀÖжÁʱ£¬×Ö½Ú´Ó¹²ÏíÊý¾ÝÒ³ÃæÖп½±´³öÀ´¡£Linux±ØÐëͬ²½¶Ô¹ÜµÀµÄ·ÃÎÊ¡£Ëü±ØÐë±£Ö¤¶ÁÕߺÍдÕßÒÔÈ·¶¨µÄ²½ÖèÖ´ÐУ¬Îª´ËÐèҪʹÓÃËø¡¢µÈ´ý¶ÓÁкÍÐźŵÈͬ²½»úÖÆ¡£

µ±Ð´ÕßÏë¶Ô¹ÜµÀдÈëʱ£¬ËüʹÓñê×¼µÄд¿âº¯Êý¡£±íʾ´ò¿ªÎļþºÍ´ò¿ª¹ÜµÀµÄÃèÐð·ûÓÃÀ´¶Ô½ø³ÌµÄfileÊý¾Ý ½á¹¹¼¯ºÏ½øÐÐË÷Òý¡£Linuxϵͳµ÷ÓÃʹÓÃÓɹܵÀfileÊý¾Ý½á¹¹Ö¸ÏòµÄwrite¹ý³Ì¡£Õâ¸öwrite¹ý³ÌÓñ£´æÔÚ±íʾ¹ÜµÀµÄVFS inodeÖеÄÐÅÏ¢À´¹ÜÀíдÇëÇó¡£

Èç¹ûûÓÐ×ã¹»µÄ¿Õ¼äÈÝÄɶÔËùÓÐдÈë¹ÜµÀµÄÊý¾Ý£¬Ö»Òª¹ÜµÀûÓб»¶ÁÕß¼ÓËø¡£ÔòLinuxΪдÕß¼ÓËø£¬²¢°Ñ´ÓдÈë½ø³ÌµØÖ·¿Õ¼äÖÐдÈëµÄ×Ö½Ú¿½±´µ½¹²ÏíÊý¾ÝÒ³ÃæÖÐÈ¥¡£Èç¹û¹ÜµÀ±»¶ÁÕß¼ÓËø»òÕßûÓÐ×ã¹»¿Õ¼ä´æ´¢Êý¾Ý£¬µ±Ç°½ø³Ì½«ÔڹܵÀinodeµÄµÈ´ý¶ÓÁÐÖÐ˯Ãߣ¬Í¬Ê±µ÷¶È¹ÜÀíÆ÷¿ªÊ¼Ö´ÐÐÒÔÑ¡ÔñÆäËü½ø³ÌÀ´Ö´ÐС£Èç¹ûдÈë½ø³ÌÊÇ¿ÉÖжϵģ¬Ôòµ±ÓÐ×ã¹»µÄ¿Õ¼ä»òÕ߹ܵÀ±»½âËøÊ±£¬Ëü½«±»¶ÁÕß»½ÐÑ¡£µ±Êý¾Ý±»Ð´Èëʱ£¬¹ÜµÀµÄVFS inode±»½âËø£¬Í¬Ê±ÈκÎÔÚ´ËinodeµÄµÈ´ý¶ÓÁÐÉÏ˯ÃߵĶÁÕß½ø³Ì¶¼½«±»»½ÐÑ¡£

´Ó¹ÜµÀÖжÁ³öÊý¾ÝµÄ¹ý³ÌºÍдÈëÀàËÆ¡£

½ø³ÌÔÊÐí½øÐзÇ×èÈû¶Á£¨ÕâÒÀÀµÓÚËüÃÇ´ò¿ªÎļþ»òÕ߹ܵÀµÄ·½Ê½£©£¬´ËʱÈç¹ûûÓÐÊý¾Ý¿É¶Á»òÕ߹ܵÀ±»¼ÓËø£¬ Ôò·µ»Ø´íÎóÐÅÏ¢±íÃ÷½ø³Ì¿ÉÒÔ¼ÌÐøÖ´ÐС£×èÈû·½Ê½Ôòʹ¶ÁÕß½ø³ÌÔڹܵÀinodeµÄµÈ´ý¶ÓÁÐÉÏ˯ÃßÖ±µ½Ð´Õß ½ø³Ì½áÊø¡£µ±Á½¸ö½ø³Ì¶Ô¹ÜµÀµÄʹÓýáÊøÊ±£¬¹ÜµÀinodeºÍ¹²ÏíÊý¾ÝÒ³Ãæ½«Í¬Ê±±»ÒÅÆú¡£

Linux»¹Ö§³ÖÃüÃû¹ÜµÀ(named pipe)£¬Ò²¾ÍÊÇFIFO¹ÜµÀ£¬ÒòΪËü×ÜÊǰ´ÕÕÏȽøÏȳöµÄÔ­Ôò¹¤×÷¡£µÚÒ»¸ö±»Ð´Èë µÄÊý¾Ý½«Ê×ÏȴӹܵÀÖжÁ³öÀ´¡£ºÍÆäËü¹ÜµÀ²»Ò»Ñù£¬FIFO¹ÜµÀ²»ÊÇÁÙʱ¶ÔÏó£¬ËüÃÇÊÇÎļþϵͳÖеÄʵÌå²¢ÇÒ ¿ÉÒÔͨ¹ýmkfifoÃüÁîÀ´´´½¨¡£½ø³ÌÖ»ÒªÓµÓÐÊʵ±µÄȨÏ޾ͿÉÒÔ×ÔÓÉʹÓÃFIFO¹ÜµÀ¡£´ò¿ªFIFO¹ÜµÀµÄ·½Ê½ÉÔÓв»Í¬¡£ÆäËü¹ÜµÀÐèÒªÏÈ´´½¨£¨ËüµÄÁ½¸öfileÊý¾Ý½á¹¹£¬VFS inodeºÍ¹²ÏíÊý¾ÝÒ³Ãæ£©¶øFIFO¹ÜµÀÒѾ­´æÔÚ£¬Ö»ÐèÒªÓÉʹÓÃÕß´ò¿ªÓë¹Ø±Õ¡£ÔÚдÕß½ø³Ì´ò¿ªËü֮ǰ£¬Linux±ØÐëÈöÁÕß½ø³ÌÏÈ´ò¿ª´ËFIFO¹ÜµÀ£»ÈκζÁÕß½ø³Ì´ÓÖжÁȡ֮ǰ±ØÐëÓÐдÕß½ø³ÌÏòÆäдÈëÊý¾Ý¡£FIFO¹ÜµÀµÄʹÓ÷½·¨ÓëÆÕͨ¹ÜµÀ»ù±¾Ïàͬ£¬Í¬Ê±ËüÃÇʹÓÃÏàͬÊý¾Ý½á¹¹ºÍ²Ù×÷¡£

5.3  Ì×½Ó¿Ú

5.3.1  ϵͳV IPC»úÖÆ

LinuxÖ§³ÖUnixϵͳV£¨1983£©°æ±¾ÖеÄÈýÖÖ½ø³Ì¼äͨѶ»úÖÆ¡£ËüÃÇÊÇÏûÏ¢¶ÓÁС¢ÐźŵÆÒÔ¼°¹²ÏíÄÚ´æ¡£ÕâЩϵͳV IPC»úÖÆÊ¹Óù²Í¬µÄÊÚȨ·½·¨¡£Ö»ÓÐͨ¹ýϵͳµ÷Óý«±êÖ¾·û´«µÝ¸øºËÐÄÖ®ºó£¬½ø³Ì²ÅÄÜ´æÈ¡ÕâЩ×ÊÔ´¡£ÕâЩϵͳV IPC¶ÔÏóʹÓÃÓëÎļþϵͳ·Ç³£ÀàËÆµÄ·ÃÎÊ¿ØÖÆ·½Ê½¡£¶ÔÏóµÄÒýÓñêÖ¾·û±»ÓÃÀ´×÷Ϊ×ÊÔ´±íÖеÄË÷Òý¡£Õâ¸öË÷ÒýÖµÐèҪһЩ´¦Àíºó²ÅÄܵõ½¡£

ϵͳÖÐËùÓÐϵͳV IPC¶ÔÏóµÄLinuxÊý¾Ý½á¹¹°üº¬Ò»¸öipc_perm½á¹¹£¬Ëüº¬Óнø³ÌÓµÓÐÕߺʹ´½¨Õß¼°×é±êÖ¾·û¡£ÁíÍ⻹ÓжԴ˶ÔÏó£¨ÓµÓÐÕߣ¬×é¼°ÆäËü£©µÄ´æÈ¡Ä£Ê½ÒÔ¼°IPC¶ÔÏó¼ü¡£´Ë¼üÖµ±»ÓÃÀ´¶¨Î»ÏµÍ³V IPC¶ÔÏóµÄÒýÓñêÖ¾·û¡£ÕâÑùµÄ¼üÖµÒ»¹²ÓÐÁ½×飺¹«ÓÐÓë˽ÓС£Èç¹û´Ë¼üΪ¹«ÓУ¬ÔòϵͳÖÐÈκνÓÊÜȨÏÞ¼ì²éµÄ½ø³Ì¶¼¿ÉÒÔÕÒµ½ÏµÍ³V IPC¶ÔÏóµÄÒýÓñêÖ¾·û¡£ÏµÍ³V IPC¶ÔÏó¾ø²»ÄÜÓÃÒ»¸ö¼üÖµÀ´ÒýÓ㬶øÖ»ÄÜʹÓÃÒýÓñêÖ¾·û¡£

5.3.2  ÏûÏ¢¶ÓÁÐ

ÏûÏ¢¶ÓÁÐÔÊÐíÒ»¸ö»òÕß¶à¸ö½ø³ÌÏòËüдÈëÓë¶ÁÈ¡ÏûÏ¢¡£Linuxά»¤×ÅÒ»¸ömsgqueÏûÏ¢¶ÓÁÐÁ´±í£¬ÆäÖÐÿ¸öÔªËØ Ö¸ÏòÒ»¸öÃèÐðÏûÏ¢¶ÓÁеÄmsqid_ds½á¹¹¡£µ±´´½¨ÐµÄÏûÏ¢¶ÓÁÐʱ£¬ÏµÍ³½«´ÓϵͳÄÚ´æÖзÖÅäÒ»¸ömsqid_ds½á¹¹£¬Í¬Ê±½«Æä²åÈëµ½Êý×éÖС£


ͼ5.2 ϵͳV IPCÏûÏ¢¶ÓÁÐ

ÿ¸ömsqid_ds½á¹¹°üº¬Ò»¸öipc_perm½á¹¹ºÍÖ¸ÏòÒѾ­½øÈë´Ë¶ÓÁÐÏûÏ¢µÄÖ¸Õë¡£ÁíÍ⣬Linux±£ÁôÓйضÓÁÐÐÞ¸Äʱ¼äÐÅÏ¢£¬ÈçÉÏ´ÎϵͳÏò¶ÓÁÐÖÐдÈëµÄʱ¼äµÈ¡£msqid_ds°üº¬Á½¸öµÈ´ý¶ÓÁУºÒ»¸öΪ¶ÓÁÐдÈë½ø³ÌʹÓöøÁíÒ»¸öÓɶÓÁжÁÈ¡½ø³ÌʹÓá£

ÿ´Î½ø³ÌÊÔͼÏòдÈë¶ÓÁÐдÈëÏûϢʱ£¬ÏµÍ³½«°ÑÆäÓÐЧÓû§ºÍ×é±êÖ¾·ûÓë´Ë¶ÓÁеÄipc_perm½á¹¹ÖеÄģʽ½øÐбȽϡ£Èç¹ûÔÊÐíдÈë²Ù×÷£¬Ôò°Ñ´ËÏûÏ¢´Ó´Ë½ø³ÌµÄµØÖ·¿Õ¼ä¿½±´µ½msgÊý¾Ý½á¹¹ÖУ¬²¢·ÅÖõ½´ËÏûÏ¢¶ÓÁÐβ²¿¡£ÓÉÓÚ LinuxÑϸñÏÞÖÆ¿ÉдÈëÏûÏ¢µÄ¸öÊýºÍ³¤¶È£¬¶ÓÁÐÖпÉÄÜÈÝÄɲ»ÏÂÕâ¸öÏûÏ¢¡£´Ëʱ£¬´ËдÈë½ø³Ì½«±»Ìí¼Óµ½Õâ¸öÏûÏ¢¶ÓÁеĵȴý¶ÓÁÐÖУ¬Í¬Ê±µ÷Óõ÷¶È¹ÜÀíÆ÷Ñ¡Ôñнø³ÌÔËÐС£µ±ÓÉÏûÏ¢´Ó´Ë¶ÓÁÐÖÐÊÍ·Åʱ£¬¸Ã½ø³Ì½«±»»½ÐÑ¡£

´Ó¶ÓÁÐÖжÁµÄ¹ý³ÌÓëÖ®ÀàËÆ¡£½ø³Ì¶ÔÕâ¸öдÈë¶ÓÁеķÃÎÊȨÏÞ½«±»ÔٴμìÑé¡£¶ÁÈ¡½ø³Ì½«Ñ¡Ôñ¶ÓÁÐÖеÚÒ»¸öÏûÏ¢£¨²»¹ÜÊÇʲôÀàÐÍ£©»òÕßµÚÒ»¸öÄ³ÌØ¶¨ÀàÐ͵ÄÏûÏ¢¡£Èç¹ûûÓÐÏûÏ¢¿ÉÒÔÂú×ã´ËÒªÇ󣬶ÁÈ¡½ø³Ì½«±»Ìí¼Ó µ½ÏûÏ¢¶ÓÁеĶÁÈ¡µÈ´ý¶ÓÁÐÖУ¬È»ºóϵͳÔËÐе÷¶È¹ÜÀíÆ÷¡£µ±ÓÐÐÂÏûϢдÈë¶ÓÁÐʱ£¬½ø³Ì½«±»»½ÐѼÌÐøÖ´ÐС£

5.3.3  ÐźŵÆ

ÐźŵÆ×î¼òµ¥µÄÐÎʽÊÇij¸ö¿ÉÒÔ±»¶à¸ö½ø³Ì¼ìÑéºÍÉèÖÃ(test&set)µÄÄÚ´æµ¥Ôª¡£Õâ¸ö¼ìÑéÓëÉèÖòÙ×÷¶Ôÿ¸ö½ø³Ì¶øÑÔÊDz»¿ÉÖжϻòÕß˵ÊÇÒ»¸öÔ­×ÓÐÔ²Ù×÷£»Ò»µ©Æô¶¯Ë­Ò²ÖÕÖ¹²»ÁË¡£¼ìÑéÓëÉèÖòÙ×÷µÄ½á¹ûÊÇÐźŵƵ±Ç°Öµ¼Ó1£¬ Õâ¸öÖµ¿ÉÒÔÊÇÕýÊýÒ²¿ÉÒÔÊǸºÊý¡£¸ù¾ÝÕâ¸ö²Ù×÷µÄ½á¹û£¬½ø³Ì¿ÉÄÜ¿ÉÒÔһֱ˯Ãßµ½´ËÐźŵƵÄÖµ±»ÁíÒ»¸ö½ø³Ì¸ü¸ÄΪֹ¡£ÐźŵƿÉÓÃÀ´ÊµÏÖÁÙ½çÇø(critical region)£ºÄ³Ò»Ê±¿ÌÔÚ´ËÇøÓòÄڵĴúÂëÖ»Äܱ»Ò»¸ö½ø³ÌÖ´ÐС£

Èç¹ûÄãÓжà¸öЭ×÷½ø³Ì´ÓÒ»¸öÊý¾ÝÎļþÖжÁÈ¡ÓëдÈë¼Ç¼¡£ÓÐʱÄã¿ÉÄÜÐèÒªÕâЩÎļþ·ÃÎÊ×ñÑ­ÑϸñµÄ·ÃÎÊ´ÎÐò¡£ ÄÇô¿ÉÔÚÎļþ²Ù×÷´úÂëÉÏʹÓÃÒ»¸ö³õʼֵΪ1µÄÐźŵƣ¬Ëü´øÓÐÁ½¸öÐźŵƲÙ×÷£¬Ò»¸ö¼ìÑé²¢¶ÔÐÅºÅµÆ Öµ¼õ1£¬¶øÁíÒ»¸ö¼ìÑé²¢¼Ó1¡£µÚÒ»¸ö·ÃÎÊÎļþµÄ½ø³Ì½«ÊÔͼ½«ÐźŵÆÖµ¼õ1£¬Èç¹û»ñµÃ³É¹¦ÔòÐźŵÆÖµ±ä³ÉÁË 0¡£´Ë½ø³ÌÓÚÊÇ¿ªÊ¼Ê¹ÓÃÕâ¸öÊý¾ÝÎļþ£¬µ«ÊÇ´ËʱÈç¹ûÁíÒ»½ø³ÌÒ²Ï뽫ÐźŵÆÖµ¼õ1£¬ÔòÐźŵÆÖµ½«Îª-1£¬Õâ´Î²Ù×÷½«»áʧ°Ü¡£Ëü½«¹ÒÆðÖ´ÐÐÖ±µ½µÚÒ»¸ö½ø³ÌÍê³É¶Ô´ËÊý¾ÝÎļþµÄʹÓᣴËʱÕâ¸öµÈ´ý½ø³Ì½«±»»½ÐÑ£¬Õâ´ÎËü¶ÔÐźŵƵIJÙ×÷½«³É¹¦¡£


ͼ5.3 ϵͳV IPCÐźŵÆ

ÿ¸öϵͳV IPCÐźŵƶÔÏó¶ÔÓ¦Ò»¸öÐźŵÆÊý×飬LinuxʹÓÃsemid_ds½á¹¹À´±íʾ¡£ÏµÍ³ÖÐËùÓÐsemid_ds½á¹¹ÓÉÒ»×ésemaryÖ¸ÕëÀ´Ö¸Ê¾¡£ÔÚÿ¸öÐźŵÆÊý×éÖÐÓÐÒ»¸ösem_nsems£¬Ëü±íʾһ¸öÓÉsem_baseÖ¸ÏòµÄsem½á¹¹¡£ÊÚȨµÄ½ø³Ì¿ÉÒÔʹÓÃϵͳµ÷ÓÃÀ´²Ù×ÝÕâЩ°üº¬ÏµÍ³V IPCÐźŵƶÔÏóµÄÐźŵÆÊý×é¡£Õâ¸öϵͳµ÷ÓÿÉÒÔ¶¨ÒåÐí¶àÖÖ²Ù×÷£¬Ã¿¸ö²Ù×÷ÓÃÈý¸öÊäÈëÀ´ÃèÐð£ºÐźŵÆË÷Òý¡¢²Ù×÷ÖµºÍÒ»×é±êÖ¾¡£ÐźŵÆË÷ÒýÊÇÒ»¸öÐźŵÆÊý×éµÄË÷Òý£¬¶ø²Ù×÷ÖµÊǽ«±»¼Óµ½ÐźŵÆÉϵÄÊýÖµ¡£Ê×ÏÈLinux½«¼ì²éÊÇ·ñËùÓвÙ×÷ÒѾ­³É¹¦¡£Èç¹û²Ù×÷ÖµÓëÐźŵƵ±Ç°ÊýÖµÏà¼Ó´óÓÚ0£¬»òÕß²Ù×÷ÖµÓëÐźŵƵ±Ç°Öµ¶¼ÊÇ0£¬²Ù×÷½«»á³É¹¦¡£Èç¹ûËùÓÐÐźŵƲÙ×÷ʧ°Ü£¬Linux½ö½ö»á°ÑÄÇЩ²Ù×÷±ê־ûÓÐÒªÇóϵͳµ÷ÓÃΪ·Ç×èÈûÀàÐ͵Ľø³Ì¹ÒÆð¡£½ø³Ì¹ÒÆðºó£¬Linux±ØÐë±£´æÐźŵƲÙ×÷µÄÖ´ÐÐ״̬²¢½«µ±Ç°½ø³Ì·ÅÈëµÈ´ý¶ÓÁС£ÏµÍ³»¹ÔÚ¶ÑÕ»ÉϽ¨Á¢sem_queue½á¹¹²¢Ìî³ä¸÷¸öÓò¡£Õâ¸ösem_queue½á¹¹½«±»·Åµ½´ËÐźŵƶÔÏóµÈ´ý¶ÓÁеÄβ²¿£¨Ê¹Óà sem_pendingºÍsem_pending_lastÖ¸Õ룩¡£ÏµÍ³°Ñµ±Ç°½ø³ÌÖÃÈësem_queue½á¹¹Öеĵȴý¶ÓÁÐ(sleeper)ÖУ¬È»ºóÆô¶¯µ÷¶È¹ÜÀíÆ÷Ñ¡ÔñÆäËü½ø³ÌÔËÐС£

Èç¹ûËùÓÐÕâЩÐźŵƲÙ×÷¶¼³É¹¦ÔòÎÞÐè¹ÒÆðµ±Ç°½ø³Ì£¬Linux½«¶ÔÐźŵÆÊý×éÖÐµÄÆäËû³ÉÔ±½øÐÐÏàͬ²Ù×÷£¬È»ºó¼ì²éÄÇЩ´¦Óڵȴý»òÕß¹ÒÆð״̬µÄ½ø³Ì¡£Ê×ÏÈ£¬Linux½«ÒÀ´Î¼ì²é¹ÒÆð¶ÓÁÐ(sem_pending) ÖеÄÿ¸ö³ÉÔ±£¬¿´ÐźŵƲÙ×÷ÄÜ·ñ¼ÌÐø¡£Èç¹û¿ÉÒÔÔò½«Æäsem_queue½á¹¹´Ó¹ÒÆðÁ´±íÖÐɾ³ý²¢¶ÔÐźŵÆÊý×é·¢³öÐźŵƲÙ×÷¡£Linux»¹½«»½ÐÑ´¦ÓÚ˯Ãß״̬µÄ½ø³Ì²¢Ê¹Ö®³ÉΪÏÂÒ»¸öÔËÐеĽø³Ì¡£Èç¹ûÔÚ¶Ô¹ÒÆð¶ÓÁеıéÀú¹ý³ÌÖÐÓеÄÐźŵƲÙ×÷²»ÄÜÍê³ÉÔòLinux½«Ò»Ö±Öظ´´Ë¹ý³Ì£¬Ö±µ½ËùÓÐÐźŵƲÙ×÷Íê³ÉÇÒûÓнø³ÌÐèÒª¼ÌÐøË¯Ãß¡£

µ«ÊÇÐźŵƵÄʹÓÿÉÄܲúÉúÒ»¸öÑÏÖØµÄÎÊÌ⣺ËÀËø¡£µ±Ò»¸ö½ø³Ì½øÈëÁÙ½çÇøÊ±Ëü¸Ä±äÁËÐźŵƵÄÖµ¶øÀ뿪ÁÙ½çÇøÊ±ÓÉÓÚÔËÐÐʧ°Ü»òÕß±»kill¶øÃ»ÓиĻØÐźŵÆÊ±£¬ËÀËø½«»á·¢Éú¡£Linuxͨ¹ýά»¤Ò»×éÃèÐðÐźŵÆÊý×é±ä»¯µÄÁ´±íÀ´·ÀÖ¹¸ÃÏÖÏóµÄ·¢Éú¡£ËüµÄ¾ßÌå×ö·¨ÊÇÈÃLinux½«°Ñ´ËÐźŵÆÉèÖÃΪ½ø³Ì¶ÔÆä½øÐвÙ×÷ǰµÄ״̬¡£ÕâЩ״ֵ̬±»±£´æÔÚʹÓøÃÐźŵÆÊý×é½ø³ÌµÄsemid_dsºÍtask_struct½á¹¹µÄsem_undo½á¹¹ÖС£

ÐźŵƲÙ×÷½«ÆÈʹϵͳ¶ÔËüÒýÆðµÄ״̬±ä»¯½øÐÐά»¤¡£LinuxΪÿ¸ö½ø³Ìά»¤ÖÁÉÙÒ»¸ö¶ÔÓ¦ÓÚÐźŵÆÊý×éµÄsem_undo½á¹¹¡£Èç¹ûÇëÇó½øÐÐÐźŵƲÙ×÷µÄ½ø³ÌûÓиýṹ£¬Ôò±ØÒªÊ±Linux»áΪÆä´´½¨Ò»¸ö¡£Õâ¸ösem_undo ½á¹¹½«Í¬Ê±·ÅÈë´Ë½ø³ÌµÄtask_struct½á¹¹ºÍ´ËÐźŵÆÊý×éµÄsemid_ds½á¹¹ÖС£µ±¶ÔÐźŵƽøÐвÙ×÷ʱ£¬ÐźŵƱ仯ֵµÄ¸ºÊý±»ÖÃÈë½ø³ÌµÄsem_undo½á¹¹ÖиÃÐźŵÄÈë¿ÚÖС£ËùÒÔµ±²Ù×÷ֵΪ2ʱ£¬Ôò´ËÐźŵƵĵ÷ÕûÈë¿ÚÖн«¼ÓÈëÒ»¸ö-2¡£

ÏóÕý³£Í˳öÒ»Ñù£¬µ±½ø³Ì±»É¾³ýʱ£¬Linux½«±éÀú¸Ã½ø³ÌµÄsem_undo¼¯ºÏ¶ÔÐźŵÆÊý×éʹÓõ÷ÕûÖµ¡£Èç¹ûÐźŵƼ¯ºÏ±»É¾³ý¶øsem_undoÊý¾Ý½á¹¹»¹ÔÚ½ø³ÌµÄtask_struct½á¹¹ÖÐÔò´ËÐźŵÆÊý×é±êÖ¾·û½«±»ÖÃΪÎÞЧ¡£´Ëʱ ÐźŵÆÇå³ý´úÂëÖ»Ð趪Æúsem_undo½á¹¹¼´¿É¡£

5.3.4  ¹²ÏíÄÚ´æ

¹²ÏíÄÚ´æÔÊÐíÒ»¸ö»ò¶à¸ö½ø³Ìͨ¹ýͬʱ³öÏÖÔÚËüÃÇÐéÄâµØÖ·¿Õ¼äÖеÄÄÚ´æÀ´Í¨Ñ¶¡£´ËÐéÄâÄÚ´æµÄÒ³Ãæ³öÏÖÔÚÿ¸ö¹²Ïí½ø³ÌÒ³±íÖС£µ«´ËÒ³Ãæ²¢²»Ò»¶¨Î»ÓÚËùÓй²Ïí½ø³ÌÐéÄâÄÚ´æµÄÏàͬλÖá£ºÍÆäËüϵͳV IPC¶ÔÏóµÄʹÓ÷½·¨Ò»Ñù£¬¶Ô¹²ÏíÄÚ´æÇøÓòµÄ·ÃÎÊÊÇͨ¹ý¼üºÍ·ÃÎÊȨÏÞ¼ìÑéÀ´¿ØÖƵġ£Ò»µ©ÄÚ´æ±»¹²Ïí£¬ÔòÔÙ²»»á¼ìÑé½ø³Ì¶Ô¶ÔÏóµÄʹÓ÷½Ê½¡£ËüÒÀÀµÓÚÆäËü»úÖÆ£¬ÈçϵͳVÐźŵƣ¬À´Í¬²½¶Ô¹²ÏíÄÚ´æµÄ·ÃÎÊ¡£


ͼ5.4 ϵͳV IPC¹²ÏíÄÚ´æ

ÿ¸öд´½¨µÄ¹²ÏíÄÚ´æÇøÓòÓÉÒ»¸öshmid_dsÊý¾Ý½á¹¹À´±íʾ¡£ËüÃDZ»±£´æÔÙshm_segsÊý×éÖС£ shmid_dsÊý¾Ý½á¹¹ÃèÐð¹²ÏíÄÚ´æµÄ´óС£¬½ø³ÌÈçºÎʹÓÃÒÔ¼°¹²ÏíÄÚ´æÓ³Éäµ½Æä¸÷×ÔµØÖ·¿Õ¼äµÄ·½Ê½¡£Óɹ²ÏíÄÚ´æ´´½¨Õß¿ØÖƶԴËÄÚ´æµÄ´æÈ¡È¨ÏÞÒÔ¼°Æä¼üÊǹ«Óл¹ÊÇ˽ÓС£Èç¹ûËüÓÉ×㹻ȨÏÞ£¬Ëü»¹¿ÉÒÔ½«´Ë¹²ÏíÄÚ´æ¼ÓÔØµ½ÎïÀíÄÚ´æÖС£

ÿ¸öʹÓô˹²ÏíÄÚ´æµÄ½ø³Ì±ØÐëͨ¹ýϵͳµ÷Óý«ÆäÁ¬½Óµ½ÐéÄâÄÚ´æÉÏ¡£Õâʱ½ø³Ì´´½¨ÐµÄvm_area_structÀ´ÃèÐð´Ë¹²ÏíÄÚ´æ¡£½ø³Ì¿ÉÒÔ¾ö¶¨´Ë¹²ÏíÄÚ´æÔÚÆäÐéÄâµØÖ·¿Õ¼äµÄλÖ㬻òÕßÈÃLinuxÑ¡ÔñÒ»¿é×ã¹»´óµÄÇøÓò¡£ еÄvm_area_struct½á¹¹½«±»·Åµ½ÓÉshmid_dsÖ¸ÏòµÄvm_area_structÁ´±íÖС£Í¨¹ývm_next_sharedºÍvm_prev_shared Ö¸Õ뽫ËüÃÇÁ¬½ÓÆðÀ´¡£ÐéÄâÄÚ´æÔÚÁ¬½Óʱ²¢Ã»Óд´½¨£»½ø³Ì·ÃÎÊËüʱ²Å´´½¨¡£

µ±½ø³ÌÊ״ηÃÎʹ²ÏíÐéÄâÄÚ´æÖеÄÒ³ÃæÊ±½«²úÉúÒ³Ãæ´í¡£µ±È¡»Ø´ËÒ³Ãæºó£¬LinuxÕÒµ½ÁËÃèÐð´ËÒ³ÃæµÄvm_area_structÊý¾Ý½á¹¹¡£Ëü°üº¬Ö¸ÏòʹÓôËÖÖÀàÐÍÐéÄâÄÚ´æµÄ´¦Àíº¯ÊýµØÖ·Ö¸Õë¡£¹²ÏíÄÚ´æÒ³Ãæ´íÎó´¦Àí ´úÂ뽫ÔÚ´Ëshmid_ds¶ÔÓ¦µÄÒ³±íÈë¿ÚÁ´±íÖÐѰÕÒÊÇ·ñ´æÔڴ˹²ÏíÐéÄâÄÚ´æÒ³Ãæ¡£Èç¹û²»´æÔÚ£¬ÔòËü½«·ÖÅäÎïÀíÒ³Ãæ²¢ÎªÆä´´½¨Ò³±íÈë¿Ú¡£Í¬Ê±»¹½«Ëü·ÅÈ뵱ǰ½ø³ÌµÄÒ³±íÖУ¬´ËÈë¿Ú±»±£´æÔÚshmid_ds½á¹¹ÖС£ÕâÒâζ×ÅϸöÊÔͼ·ÃÎÊ´ËÄÚ´æµÄ½ø³Ì»¹»á²úÉúÒ³Ãæ´íÎ󣬹²ÏíÄÚ´æ´íÎó´¦Àíº¯Êý½«Îª´Ë½ø³ÌʹÓÃÆäд´½¨µÄÎïÀíÒ³Ãæ¡£ÕâÑù£¬µÚÒ»¸ö·ÃÎÊÐéÄâÄÚ´æÒ³ÃæµÄ½ø³Ì´´½¨Õâ¿éÄÚ´æ£¬ËæºóµÄ½ø³Ì°Ñ´ËÒ³Ãæ¼ÓÈëµ½¸÷×ÔµÄÐéÄâµØÖ·¿Õ¼äÖС£

µ±½ø³Ì²»ÔÙ¹²Ïí´ËÐéÄâÄÚ´æÊ±£¬½ø³ÌºÍ¹²ÏíÄÚ´æµÄÁ¬½Ó½«±»¶Ï¿ª¡£Èç¹ûÆäËü½ø³Ì»¹ÔÚʹÓÃÕâ¸öÄڴ棬Ôò´Ë²Ù×÷Ö»Ó°Ï쵱ǰ½ø³Ì¡£Æä¶ÔÓ¦µÄvm_area_struct½á¹¹½«´Óshmid_ds½á¹¹ÖÐɾ³ý²¢»ØÊÕ¡£µ±Ç°½ø³Ì¶ÔÓ¦´Ë¹²ÏíÄÚ´æµØÖ·µÄÒ³±íÈë¿ÚÒ²½«±»¸üв¢ÖÃΪÎÞЧ¡£µ±×îºóÒ»¸ö½ø³Ì¶Ï¿ªÓë¹²ÏíÄÚ´æµÄÁ¬½Óʱ£¬µ±Ç°Î»ÓÚÎïÀíÄÚ´æÖеĹ²ÏíÄÚ´æÒ³Ã潫±»ÊÍ·Å£¬Í¬Ê±»¹Óд˹²ÏíÄÚ´æµÄshmid_ds½á¹¹¡£

µ±¹²ÏíÄÚ´æÃ»Óб»ËøÈëÎïÀíÄÚ´æÊ±£¬Çé¿ö½«¸ü¼Ó¸´ÔÓ¡£´Ëʱ¹²ÏíÄÚ´æÒ³Ãæ¿ÉÄÜ»áÔÚÄÚ´æÊ¹Óø߷åÆÚ£¬±»½»»»µ½ÏµÍ³µÄ½»»»´ÅÅÌÉÏ¡£¹²ÏíÄÚ´æÈçºÎ±»½»»»Óëµ÷ÈëÎïÀíÄڴ潫ÔÚmmÒ»ÕÂÖÐÏêϸÃèÐð¡£

File translated from TEX by TTH, version 1.0.


Top of Chapter, Table of Contents, Show Frames, No Frames
© 1996-1999 David A Rusling copyright notice.