¡¡¡¡ÕâÒ»ÕÂÓÉ FreeBSD SMP Next Generation Project ά»¤¡£ Ç뽫ÆÀÂۺͽ¨Òé·¢Ë͸øFreeBSD ¶Ô³Æ¶à´¦Àí (SMP) ÓʼþÁбí.
¡¡¡¡ÕâÆªÎĵµÌá¸ÙêüÁìµÄ½²ÊöÁËÔÚFreeBSDÄÚºËÖеÄËø£¬ÕâÐ©ËøÊ¹µÃÓÐЧµÄ¶à´¦Àí³ÉΪ¿ÉÄÜ¡£ Ëø¿ÉÒÔÓü¸ÖÖ·½Ê½»ñµÃ¡£Êý¾Ý½á¹¹¿ÉÒÔÓÃmutex»òlockmgr(9)±£»¤¡£ ¶ÔÓÚΪÊý²»¶àµÄÈô¸É¸ö±äÁ¿£¬¼ÙÈç×ÜÊÇʹÓÃÔ×Ó²Ù×÷·ÃÎÊËüÃÇ£¬ÕâЩ±äÁ¿¾Í¿ÉÒԵõ½±£»¤¡£
ÒëÕß×¢: ½ö¶Á±¾ÕÂÄÚÈÝ£¬»¹²»×ãÒÔÕÒ³ö¡°mutex¡± ºÍ¡°¹²Ïí»¥³âËø¡±µÄÇø±ð¡£ËƺõËüÃǵŦÄÜÓÐÖØµþÖ®´¦£¬ ǰÕ߱ȺóÕߵŦÄÜÑ¡Ïî¸ü¶à¡£ËüÃÇËÆºõ¶¼ÊÇlockmgr(9)µÄ×Ó¼¯¡£
¡¡¡¡Mutex¾ÍÊÇÒ»ÖÖÓÃÀ´½â¾ö¹²Ïí/ÅÅËüì¶ÜµÄËø¡£ Ò»¸ömutexÔÚÒ»¸öʱ¿ÌÖ»¿ÉÒÔ±»Ò»¸öʵÌåÓµÓС£Èç¹ûÁíÒ»¸öʵÌåÒª»ñµÃÒѾ±»ÓµÓеÄmutex£¬ ¾Í»á½øÈëµÈ´ý£¬Ö±µ½Õâ¸ömutex±»ÊÍ·Å¡£ÔÚFreeBSDÄÚºËÖУ¬mutex±»½ø³ÌËùÓµÓС£
¡¡¡¡Mutex¿ÉÒÔ±»µÝ¹éµÄË÷Òª£¬µ«ÊÇmutexÒ»°ãÖ»±»Ò»¸öʵÌåÓµÓн϶̵ÄÒ»¶Îʱ¼ä£¬ Òò´ËÒ»¸öʵÌå²»ÄÜÔÚ³ÖÓÐmutexʱ˯Ãß¡£Èç¹ûÄãÐèÒªÔÚ³ÖÓÐmutexʱ˯Ãߣ¬ ¿ÉʹÓÃÒ»¸ö lockmgr(9) µÄËø¡£
¡¡¡¡Ã¿¸ömutexÓм¸¸öÁîÈ˸ÐÐËȤµÄÊôÐÔ:
ÔÚÄÚºËÔ´´úÂëÖÐstruct mtx±äÁ¿µÄÃû×Ö
Óɺ¯Êýmtx_init
Ö¸ÅɵÄmutexµÄÃû×Ö¡£
Õâ¸öÃû×ÖÏÔʾÔÚKTR¸ú×ÙÏûÏ¢ºÍwitness³ö´íÓ뾯¸æÐÅÏ¢Àï¡£
Õâ¸öÃû×Ö»¹ÓÃÓÚÇø·Ö±êʶÔÚwitness´úÂëÖеĸ÷¸ömutex
MutexµÄÀàÐÍ£¬ÓñêÖ¾MTX_*
±íʾ¡£ ÿ¸ö±êÖ¾µÄÒâÒåÔÚmutex(9)ÓÐËùÃèÊö¡£
MTX_DEF
Ò»¸ö˯Ãßmutex
MTX_SPIN
Ò»¸öÑ»·mutex
MTX_RECURSE
Õâ¸ömutexÔÊÐíµÝ¹é
Õâ¸öÈë¿ÚËùÒª±£»¤µÄÊý¾Ý½á¹¹Áбí»òÊý¾Ý½á¹¹³ÉÔ±ÁÐ±í¡£ ¶ÔÓÚÊý¾Ý½á¹¹³ÉÔ±£¬½«°´ÕÕ
½á¹¹Ãû
.³ÉÔ±Ãû
µÄÐÎʽÃüÃû¡£
½öµ±mutex±»³ÖÓÐʱ²Å¿ÉÒÔ±»µ÷Óõĺ¯Êý
±í 2-1. MutexÁбí
±äÁ¿Ãû | Âß¼Ãû | ÀàÐÍ | ±£»¤¶ÔÏó | ÒÀÀµº¯Êý |
---|---|---|---|---|
sched_lock | ¡°sched lock¡±(µ÷¶ÈÆ÷Ëø) | MTX_SPIN | MTX_RECURSE |
_gmonparam , cnt.v_swtch ,
cp_time , curpriority ,
mtx .mtx_blocked ,
mtx .mtx_contested ,
proc .p_procq ,
proc .p_slpq ,
proc .p_sflag ,
proc .p_stat ,
proc .p_estcpu ,
proc .p_cpticks
proc .p_pctcpu ,
proc .p_wchan ,
proc .p_wmesg ,
proc .p_swtime ,
proc .p_slptime ,
proc .p_runtime ,
proc .p_uu , proc .p_su , proc .p_iu , proc .p_uticks , proc .p_sticks , proc .p_iticks , proc .p_oncpu , proc .p_lastcpu , proc .p_rqindex , proc .p_heldmtx , proc .p_blocked , proc .p_mtxname , proc .p_contested , proc .p_priority , proc .p_usrpri , proc .p_nativepri , proc .p_nice , proc .p_rtprio , pscnt , slpque , itqueuebits , itqueues , rtqueuebits , rtqueues , queuebits , queues , idqueuebits , idqueues , switchtime , switchticks |
setrunqueue , remrunqueue ,
mi_switch , chooseproc ,
schedclock , resetpriority ,
updatepri , maybe_resched ,
cpu_switch , cpu_throw ,
need_resched , resched_wanted ,
clear_resched , aston ,
astoff , astpending ,
calcru , proc_compare |
vm86pcb_lock | ¡°vm86pcb lock¡±(ÐéÄâ8086ģʽ½ø³Ì¿ØÖÆ¿éËø) | MTX_DEF |
vm86pcb |
vm86_bioscall |
Giant | ¡°Giant¡±(¾ÞËø) | MTX_DEF | MTX_RECURSE |
¼¸ºõ¿ÉÒÔÊÇÈκζ«Î÷ | Ðí¶à |
callout_lock | ¡°callout lock¡±(ÑÓʱµ÷ÓÃËø) | MTX_SPIN | MTX_RECURSE |
callfree , callwheel ,
nextsoftcheck , proc .p_itcallout , proc .p_slpcallout , softticks , ticks |
±¾ÎĵµºÍÆäËüÎĵµ¿É´ÓÕâÀïÏÂÔØ£ºftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.
Èç¹û¶ÔÓÚFreeBSDÓÐÎÊÌ⣬ÇëÏÈÔĶÁÎĵµ£¬Èç²»Äܽâ¾öÔÙÁªÏµ<questions@FreeBSD.org>.
¹ØÓÚ±¾ÎĵµµÄÎÊÌâÇë·¢ÐÅÁªÏµ <doc@FreeBSD.org>.