¡¡¡¡ÕâÒ»ÕÂÓÉ 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>.