Table of Contents, Show Frames, No Frames

µÚʮһÕ ºËÐÄ»úÖÆ


±¾ÕÂÖ÷ÒªÃèÐðLinuxºËÐÄΪʹºËÐÄÆäËû²¿·ÖÄÜÓÐЧ¹¤×÷¶øÌṩµÄ¼¸¸ö³£ÓÃÈÎÎñÓë»úÖÆ¡£

11.1  µ×²ã²¿·Ö´¦Àí»úÖÆ


ͼ11.1 µ×²ã²¿·Ö´¦Àí»úÖÆÊý¾Ý½á¹¹

Ä³Ð©ÌØÊâʱ¿ÌÎÒÃDz¢²»Ô¸ÒâÔÚºËÐÄÖÐÖ´ÐÐһЩ²Ù×÷¡£ÀýÈçÖжϴ¦Àí¹ý³ÌÖС£µ±ÖжϷ¢Éúʱ´¦ÀíÆ÷½«Í£Ö¹µ±Ç°µÄ¹¤×÷, ²Ù×÷ϵͳ½«ÖжϷ¢Ë͵½ÏàÓ¦µÄÉ豸Çý¶¯ÉÏÈ¥¡£ÓÉÓÚ´ËʱϵͳÖÐÆäËû³ÌÐò¶¼²»ÄÜÔËÐÐ, ËùÒÔÉ豸Çý¶¯ÖеÄÖжϴ¦Àí¹ý³Ì²»Ò˹ý³¤¡£ÓÐЩÈÎÎñ×îºÃÉÔºóÖ´ÐС£Linuxµ×²ã²¿·Ö´¦Àí»úÖÆ¿ÉÒÔÈÃÉ豸Çý¶¯ºÍLinuxºËÐÄÆäËû²¿·Ö½«ÕâЩ¹¤×÷½øÐÐÅÅÐòÒÔÑÓ³ÙÖ´ÐС£Í¼11.1¸ø³öÁËÒ»¸öÓëµ×²ã²¿·Ö´¦ÀíÏà¹ØµÄºËÐÄÊý¾Ý½á¹¹¡£

ϵͳÖÐ×î¶à¿ÉÒÔÓÐ32¸ö²»Í¬µÄµ×²ã´¦Àí¹ý³Ì£»bh_baseÊÇÖ¸ÏòÕâЩ¹ý³ÌÈë¿ÚµÄÖ¸ÕëÊý×é¡£¶øbh_activeºÍ bh_maskÓÃÀ´±íʾÄÇЩ´¦Àí¹ý³ÌÒѾ­°²×°ÒÔ¼°ÄÇЩ´¦Óڻ״̬¡£Èç¹ûbh_maskµÄµÚNλÖÃλÔò±íʾbh_baseµÄ µÚN¸öÔªËØ°üº¬µ×²ã²¿·Ö´¦ÀíÀý³Ì¡£Èç¹ûbh_activeµÄµÚNλÖÃλÔò±íʾµÚN¸öµ×²ã´¦Àí¹ý³ÌÀý³Ì¿ÉÔÚµ÷¶ÈÆ÷ÈÏ ÎªºÏÊʵÄʱ¿Ìµ÷Óá£ÕâЩË÷Òý±»¶¨Òå³É¾²Ì¬µÄ£»¶¨Ê±Æ÷µ×²ã²¿·Ö´¦ÀíÀý³Ì¾ßÓÐ×î¸ßÓÅÏȼ¶£¨Ë÷ÒýֵΪ0£©£¬ ¿ØÖÆÌ¨µ×²ã²¿·Ö´¦ÀíÀý³ÌÆä´Î£¨Ë÷ÒýֵΪ1£©¡£µäÐ͵ĵײ㲿·Ö´¦ÀíÀý³Ì°üº¬ÓëÖ®ÏàÁ¬µÄÈÎÎñÁ´±í¡£ÀýÈç immediateµ×²ã²¿·Ö´¦ÀíÀý³Ìͨ¹ýÄÇЩÐèÒª±»Á¢¿ÌÖ´ÐеÄÈÎÎñµÄÁ¢¼´ÈÎÎñ¶ÓÁУ¨tq_immediate£©À´Ö´ÐС£

ÓÐЩºËÐĵײ㲿·Ö´¦Àí¹ý³ÌÊÇÉ豸Ïà¹ØµÄ£¬µ«ÓÐЩ¸ü¼Ó¾ßÓÐͨÓÃÐÔ£º

TIMER
ÿ´ÎϵͳµÄÖÜÆÚÐÔʱÖÓÖжϷ¢Éúʱ´Ë¹ý³Ì±»±ê¼ÇΪ»î¶¯£¬Ëü±»ÓÃÀ´Çý¶¯ºËÐĵĶ¨Ê±Æ÷¶ÓÁлúÖÆ¡£
CONSOLE
´Ë¹ý³Ì±»ÓÃÀ´´¦Àí½ø³Ì¿ØÖÆÌ¨ÏûÏ¢¡£
TQUEUE
´Ë¹ý³Ì±»ÓÃÀ´´¦Àí½ø³ÌttyÏûÏ¢¡£
NET
´Ë¹ý³Ì±»ÓÃÀ´×öͨÓÃÍøÂç´¦Àí¡£
IMMEDIATE
ÕâÊDZ»¼¸¸öÉ豸Çý¶¯ÓÃÀ´½«ÈÎÎñÅŶӳÉÉÔºóÖ´ÐеÄͨÓùý³Ì¡£

µ±É豸Çý¶¯»òÕߺËÐÄÖÐÆäËû²¿·ÖÐèÒªµ÷¶ÈijЩ¹¤×÷ÑÓ³ÙÍê³Éʱ£¬ËüÃǽ«°ÑÕâЩÈÎÎñ¼ÓÈëµ½ÏàÓ¦µÄϵͳ¶ÓÁÐÖÐÈ¥£¬È綨ʱÆ÷¶ÓÁУ¬È»ºó¶ÔºËÐÄ·¢³öÐźÅ֪ͨËüÐèÒªµ÷ÓÃij¸öµ×²ã´¦Àí¹ý³Ì¡£¾ßÌ巽ʽÊÇÉèÖÃbh_activeÖеÄijЩλ¡£Èç¹ûÉ豸Çý¶¯½«Ä³¸öÈÎÎñ¼ÓÈëµ½ÁËimmediate¶ÓÁв¢Ï£Íûµ×²ã´¦Àí¹ý³ÌÔËÐкʹ¦ÀíËü,¿É½«µÚ8λÖÃ1¡£Ã¿´Îϵͳµ÷ÓýáÊø·µ»Øµ÷Óýø³Ìǰ¶¼Òª¼ì²ébh_active¡£Èç¹ûÓÐλ±»ÖÃ1Ôòµ÷Óô¦Óڻ״̬µÄµ×²ã´¦Àí¹ý³Ì¡£¼ì²éµÄ˳ÐòÊÇ´Ó0λ¿ªÊ¼Ö±µ½µÚ31λ¡£

ÿ´Îµ÷Óõײ㴦Àí¹ý³Ìʱbh_activeÖеĶÔӦ뽫±»Çå³ý¡£bh_activeÊÇÒ»¸ö˲̬±äÁ¿£¬Ëü½ö½öÔÚµ÷Óõ÷¶È¹ÜÀíÆ÷ʱÓÐÒâÒ壻ͬʱËü»¹¿ÉÒÔÔÚ¿ÕÏÐ״̬ʱ±ÜÃâ¶Ôµ×²ã´¦Àí¹ý³ÌµÄµ÷Óá£

11.2  ÈÎÎñ¶ÓÁÐ


ͼ 11.2: Ò»¸öÈÎÎñ¶ÓÁÐ

ÈÎÎñ¶ÓÁÐÊǺËÐÄÑÓ³ÙÈÎÎñÆô¶¯µÄÖ÷ÒªÊֶΡ£ Linux ÌṩÁ˶ԶÓÁÐÉÏÈÎÎñÅŶÓÒÔ¼°´¦ÀíËüÃǵÄͨÓûúÖÆ¡£

ÈÎÎñ¶ÓÁÐͨ³£ºÍµ×²ã´¦Àí¹ý³ÌÒ»ÆðʹÓ㻵ײãµÄ¶¨Ê±Æ÷¶ÓÁд¦Àí¹ý³ÌÔËÐÐʱ¶Ô¶¨Ê±Æ÷¶ÓÁнøÐд¦Àí¡£ÈÎÎñ¶ÓÁеĽṹºÜ¼òµ¥£¬Èçͼ  11.2 Ëùʾ£¬ËüÓÉÒ»¸ötq_struct½á¹¹Á´±í¹¹³É£¬Ã¿¸ö½ÚµãÖаüº¬´¦Àí¹ý³ÌµÄµØÖ·Ö¸ÕëÒÔ¼°Ö¸ÏòÊý¾ÝµÄÖ¸Õë¡£

´¦ÀíÈÎÎñ¶ÓÁÐÉÏÔªËØÊ±½«Óõ½ÕâЩ¹ý³Ì£¬Í¬Ê±´Ë¹ý³Ì»¹½«Óõ½Ö¸ÏòÕâЩÊý¾ÝµÄÖ¸Õë¡£

ºËÐĵÄËùÓв¿·Ö£¬ÈçÉ豸Çý¶¯, ¶¼¿ÉÒÔ´´½¨ÓëʹÓÃÈÎÎñ¶ÓÁС£µ«ÊǺËÐÄ×Ô¼º´´½¨Óë¹ÜÀíµÄÈÎÎñ¶ÓÁÐÖ»ÓÐÒÔÏÂÈý¸ö:

timer
´Ë¶ÓÁÐÓÃÀ´¶ÔÏÂÒ»¸öʱÖӵδðʱҪÇ󾡿ìÔËÐеÄÈÎÎñ½øÐÐÅŶӡ£Ã¿¸öʱÖӵδðʱ¶¼Òª¼ì²é´Ë¶ÓÁп´ÊÇ·ñΪ¿Õ£¬Èç¹û²»Îª¿ÕÔò¶¨Ê±Æ÷µ×²ã´¦Àí¹ý³Ì½«¼¤»î´ËÈÎÎñ¡£µ±µ÷¶È¹ÜÀíÆ÷Ï´ÎÔËÐÐʱ¶¨Ê±Æ÷¶ÓÁеײ㴦Àí¹ý³Ì½«ºÍÆäËûµ×²ã´¦Àí¹ý³ÌÒ»µÀ¶ÔÈÎÎñ¶ÓÁнøÐд¦Àí¡£Õâ¸ö¶ÓÁв»ÄܺÍϵͳ¶¨Ê±Æ÷Ïà»ìÏý¡£
immediate
immediate µ×²ã´¦Àí¹ý³ÌµÄÓÅÏȼ¶µÍÓÚ¶¨Ê±Æ÷µ×²ã´¦Àí¹ý³Ì£¬ËùÒÔ´ËÀàÐÍÈÎÎñ½«ÑÓ³ÙÔËÐС£
scheduler
´ËÈÎÎñ¶ÓÁÐÖ±½ÓÓɵ÷¶È¹ÜÀíÆ÷À´´¦Àí¡£Ëü±»ÓÃÀ´Ö§³ÅϵͳÖÐÆäËûÈÎÎñ¶ÓÁУ¬´Ëʱ¿ÉÒÔÔËÐеÄÈÎÎñÊÇÒ»¸ö´¦ÀíÈÎÎñ¶ÓÁеĹý³Ì£¬ÈçÉ豸Çý¶¯¡£

µ±´¦ÀíÈÎÎñ¶ÓÁÐʱ£¬´¦ÓÚ¶ÓÁÐÍ·²¿µÄÔªËØ½«´Ó¶ÓÁÐÖÐɾ³ýͬʱÒÔ¿ÕÖ¸Õë´úÌæËü¡£Õâ¸öɾ³ý²Ù×÷ÊÇÒ»¸ö²»¿ÉÖжϵÄÔ­×Ó²Ù×÷¡£¶ÓÁÐÖÐÿ¸öÔªËØµÄ´¦Àí¹ý³Ì½«±»ÒÀ´Îµ÷Óá£Õâ¸ö¶ÓÁÐÖеÄÔªËØÍ¨³£Ê¹Óþ²Ì¬·ÖÅäÊý¾Ý¡£ È»¶ø²¢Ã»ÓÐÒ»¸ö¹ÌÓлúÖÆÀ´¶ªÆúÒÑ·ÖÅäÄÚ´æ¡£ÈÎÎñ¶ÓÁд¦ÀíÀý³Ì¼òµ¥µÄÖ¸ÏòÁ´±íÖÐÏÂÒ»¸öÔªËØ¡£Õâ¸öÈÎÎñ²ÅÕæÕýÇå³ýÈκÎÒÑ·ÖÅäµÄºËÐÄÄÚ´æ¡£

11.3  ¶¨Ê±Æ÷£¨TIMER£©


ͼ11.3 ϵͳ¶¨Ê±Æ÷

²Ù×÷ϵͳӦ¸ÃÄܹ»ÔÚ½«À´Ä³¸öʱ¿Ì׼ʱµ÷¶Èij¸öÈÎÎñ¡£ËùÒÔÐèÒªÒ»ÖÖÄܱ£Ö¤ÈÎÎñ½Ï׼ʱµ÷¶ÈÔËÐеĻúÖÆ¡£Ï£ÍûÖ§³ÖÿÖÖ²Ù×÷ϵͳµÄ΢´¦ÀíÆ÷±ØÐë°üº¬Ò»¸ö¿ÉÖÜÆÚÐÔÖжÏËüµÄ¿É±à³Ì¼ä¸ô¶¨Ê±Æ÷¡£Õâ¸öÖÜÆÚÐÔÖжϱ»³ÆÎªÏµÍ³Ê±Öӵδð£¬ËüÏó½ÚÅÄÆ÷Ò»ÑùÀ´×é֯ϵͳÈÎÎñ¡£

LinuxµÄʱÖÓ¹ÛÄîºÜ¼òµ¥£ºËü±íʾϵͳÆô¶¯ºóµÄÒÔʱÖӵδð¼ÇÊýµÄʱ¼ä¡£ËùÓеÄϵͳʱÖÓ¶¼»ùÓÚÕâÖÖÁ¿¶È£¬ÔÚ ÏµÍ³ÖеÄÃû³ÆºÍÒ»¸öÈ«¾Ö±äÁ¿Ïàͬ-jiffies¡£

Linux°üº¬Á½ÖÖÀàÐ͵Äϵͳ¶¨Ê±Æ÷£¬ËüÃǶ¼¿ÉÒÔÔÚij¸öϵͳʱ¼äÉϱ»¶ÓÁÐÀý³ÌʹÓ㬵«ÊÇËüÃǵÄʵÏÖÉÔÓÐÇø±ð¡£ ͼ11.3»­³öÁËÕâÁ½ÖÖ»úÖÆ¡£

µÚÒ»¸öÊÇÀϵĶ¨Ê±Æ÷»úÖÆ£¬Ëü°üº¬Ö¸Ïòtimer_struct½á¹¹µÄ32λָÕëµÄ¾²Ì¬Êý×éÒÔ¼°µ±Ç°»î¶¯¶¨Ê±Æ÷µÄÆÁ±ÎÂë £ºtime_active¡£

´Ë¶¨Ê±Æ÷±íÖеÄλÖÃÊǾ²Ì¬¶¨ÒåµÄ£¨ÀàËÆµ×²ã²¿·Ö´¦Àí±íbh_base£©¡£ÆäÈë¿ÚÔÚϵͳ³õʼ»¯Ê±±»¼ÓÈëµ½±íÖС£ µÚ¶þÖÖÊÇÏà¶Ô½ÏÐµĶ¨Ê±Æ÷£¬ËüʹÓÃÒ»¸öµ½ÆÚʱ¼äÒÔÉýÐòÅÅÁеÄtimer_list½á¹¹Á´±í¡£

ÕâÁ½ÖÖ·½·¨¶¼Ê¹ÓÃjiffies×÷ΪÖÕ½áʱ¼ä£¬ÕâÑùÏ£ÍûÔËÐÐ5ÃëµÄ¶¨Ê±Æ÷½«²»µÃ²»½«5Ãëʱ¼äת»»³Éjiffies µÄµ¥Î»²¢ÇÒ½«ËüºÍÒÔjiffies¼ÇÊýµÄµ±Ç°ÏµÍ³Ê±¼äÏà¼Ó´Ó¶øµÃµ½¶¨Ê±Æ÷µÄÖÕ½áʱ¼ä¡£ÔÚÿ¸öϵͳʱÖӵδðʱ,¶¨Ê±Æ÷µÄµ×²ã²¿·Ö´¦Àí¹ý³Ì±»±ê¼Ç³É»î¶¯×´Ì¬ÒÔ±ãµ÷¶È¹ÜÀíÆ÷Ï´ÎÔËÐÐʱÄܽøÐж¨Ê±Æ÷¶ÓÁеĴ¦Àí¡£¶¨Ê±Æ÷µ×²ã ²¿·Ö´¦Àí¹ý³Ì°üº¬Á½ÖÖÀàÐ͵Äϵͳ¶¨Ê±Æ÷¡£ÀϵÄϵͳ¶¨Ê±Æ÷½«¼ì²étimer_activeλÊÇ·ñÖÃλ¡£

Èç¹û»î¶¯¶¨Ê±Æ÷ÒѾ­µ½ÆÚÔòÆä¶¨Ê±Æ÷Àý³Ì½«±»µ÷ÓÃͬʱËüµÄ»î¶¯Î»Ò²±»Çå³ý¡£Ð¶¨Ê±Æ÷λÓÚtimer_list½á¹¹Á´±íÖеÄÈë¿ÚÒ²½«Êܵ½¼ì²é¡£Ã¿¸ö¹ýÆÚ¶¨Ê±Æ÷½«´ÓÁ´±íÖÐÇå³ý,ͬʱËüµÄÀý³Ì½«±»µ÷Óá£Ð¶¨Ê±Æ÷»úÖÆµÄÓŵãÖ®Ò»ÊÇÄÜ´«µÝÒ»¸ö²ÎÊý¸ø¶¨Ê±Æ÷Àý³Ì¡£

 

11.4  µÈ´ý¶ÓÁÐ

½ø³Ì¾­³£ÒªµÈ´ýij¸öϵͳ×ÊÔ´¡£ÀýÈçij¸ö½ø³Ì¿ÉÄÜÐèÒªÃèÐðÎļþϵͳÖÐij¸öĿ¼µÄVFS inodeµ«ÊÇ´Ëinode¿É Äܲ»ÔÚbuffer cacheÖС£´ËʱÕâ¸ö½ø³Ì±ØÐëµÈµ½¸Ãinode´Ó°üº¬´ËÎļþϵͳµÄÎïÀí½éÖÊÖÐÈ¡³öÀ´²Å¿ÉÒÔ¼ÌÐø ÔËÐС£

wait_queue

*task

*next
ͼ11.4 µÈ´ý¶ÓÁÐ

LinuxºËÐÄʹÓÃÒ»¸ö·Ç³£¼òµ¥µÄ¶ÓÁУºµÈ´ý¶ÓÁУ¨¼ûͼ11.4£©¡£Ëü°üº¬Ò»¸öÖ¸Ïò½ø³Ìtask_struct½á¹¹µÄÖ¸ÕëÒÔ¼°µÈ´ý¶ÓÁÐÖÐÏÂÒ»¸öÔªËØµÄÖ¸Õë¡£¼ÓÈëµ½µÈ´ý¶ÓÁÐÖеĽø³Ì¼È¿ÉÒÔÊÇ¿ÉÖжÏÒ²¿ÉÒÔÊDz»¿ÉÖжϵġ£¿ÉÖÐ¶Ï ½ø³ÌÄܹ»±»È綨ʱÆ÷µ½ÆÚ»òÕßÐźŵÈʱ¼äÖжϡ£´ËµÈ´ý½ø³ÌµÄ״̬±ØÐë˵Ã÷³ÉÊÇINTERRUPTIBLE»¹ÊÇ UNINTERRUPTIBLE¡£ÓÉÓÚ½ø³ÌÏÖÔÚ²»ÄܼÌÐøÔËÐÐÔòµ÷¶È¹ÜÀíÆ÷½«½Ó¹ýϵͳ¿ØÖÆÈ¨²¢Ñ¡ÔñÒ»¸öнø³ÌÔËÐжøµÈ´ý½ø³Ì½«±»¹ÒÆð¡£´¦ÀíµÈ´ý½ø³Ìʱ£¬Ã¿¸ö´¦Óڵȴý¶ÓÁÐÖеĽø³Ì¶¼±»ÖÃΪRUNNING״̬¡£Èç¹û´Ë½ø³ÌÒѾ­´ÓÔËÐжÓÁÐÖÐɾ³ýÔòËü½«±»ÖØÐ·ÅÈëÔËÐжÓÁС£Ï´ε÷¶È¹ÜÀíÆ÷ÔËÐÐʱ, ÓÉÓÚÕâЩ½ø³Ì²»ÔٵȴýËùÒÔËüÃǶ¼½«ÊÇÔËÐкòÑ¡Õß¡£ µÈ´ý¶ÓÁпÉÒÔÓÃÀ´Í¬²½¶Ôϵͳ×ÊÔ´µÄ·ÃÎÊ, ͬʱËüÃÇ»¹±»LinuxÓÃÓÚÐźŵƵÄʵÏÖÖС£

11.5  Buzz Ëø

ËüʹÓøüƵ·±µÄÃû×Ö½Ð×ÔÐýËø¡£ÕâÊÇÒ»ÖÖ±£»¤Êý¾Ý½á¹¹»ò´úÂëÆ¬¶ÎµÄԭʼ·½Ê½¡£ÔÚij¸öʱ¿ÌÖ»ÔÊÐíÒ»¸ö½ø³Ì·ÃÎÊÁÙ½çÇøÄڵĴúÂë¡£Linux»¹Í¬Ê±½«Ò»¸öÕûÊýÓò×÷ÎªËøÀ´ÏÞÖÆ¶ÔÊý¾Ý½á¹¹ÖÐijЩÓòµÄ´æÈ¡¡£Ã¿¸öÏ£Íû½øÈë ´ËÇøÓòµÄ½ø³Ì¶¼ÊÔͼ½«´ËËøµÄ³õʼֵ´Ó0¸Ä³É1¡£Èç¹ûµ±Ç°ÖµÊÇ1Ôò½ø³Ì½«Ôٴγ¢ÊÔ£¬´Ëʱ½ø³ÌºÃÏóÔÚÒ»¶Î½ôÑ­»·´úÂëÖÐ×ÔÐý¡£¶Ô°üº¬´ËËøµÄÄÚ´æÇøÓòµÄ´æÈ¡±ØÐëÊÇÔ­×ÓÐԵ쬼´¼ìÑéÖµÊÇ·ñΪ0²¢½«Æä¸Ä±ä³É1µÄ¹ý³Ì²»Äܱ»Èκνø³ÌÖжϡ£¶àÊýCPU½á¹¹Í¨¹ýÌØÊâÖ¸ÁîÌṩ¶Ô´Ë·½Ê½µÄÖ§³Ö£¬Í¬Ê±ÎÒÃÇ¿ÉÒÔÔÚÒ»¸ö·Ç»º³åÖ÷´æÖÐʵÏÖÕâ¸öÁ÷ÑÔËø¡£

µ±¿ØÖƽø³ÌÀ뿪ÁÙ½çÇøÊ±Ëü½«µÝ¼õ´ËBuzzËø¡£Èκδ¦ÓÚ×ÔÐý״̬µÄ½ø³Ì¶¼¿ÉÒÔ¶ÁÈ¡Ëü£¬ËüÃÇÖÐ×î¿ìµÄÄǸö½«µÝÔö´ËÖµ²¢½øÈëÁÙ½çÇø¡£

11.6  ÐźŵÆ

ÐźŵƱ»ÓÃÀ´±£»¤ÁÙ½çÇøÖеĴúÂëºÍÊý¾Ý¡£Çë¼Çסÿ´Î¶ÔÁÙ½çÇøÊý¾Ý, ÈçÃèÐðij¸öĿ¼VFS inodeµÄ·ÃÎÊ, ÊÇͨ¹ý´ú±í½ø³ÌµÄºËÐÄ´úÂëÀ´½øÐеġ£ÔÊÐíij¸ö½ø³ÌÉÃ×ÔÐÞ¸ÄÓÉÆäËû½ø³ÌʹÓõÄÁÙ½çÇøÊý¾ÝÊǷdz£Î£Ïյġ£·ÀÖ¹´ËÎÊÌâ·¢ÉúµÄÒ»ÖÖ·½Ê½ÊÇÔÚ±»´æÈ¡ÁÙ½çÇøÖÜΧʹÓÃbuzzËø£¬µ«ÕâÖÖ¼òµ¥µÄ·½Ê½½«½µµÍϵͳÐÔÄÜ¡£LinuxʹÓÃÐźŵÆÀ´ÆÈʹij¸öʱ¿ÌÖ»ÓÐΨһ½ø³Ì·ÃÎÊÁÙ½çÇø´úÂëºÍÊý¾Ý£¬ÆäËû½ø³Ì¶¼±ØÐëµÈ´ý×ÊÔ´±»ÊͷŲſÉʹÓá£ÕâЩµÈ´ý½ø³Ì½«±»¹ÒÆð¶øÏµÍ³ÖÐÆäËû½ø³Ì¿ÉÒÔ¼ÌÐøÔËÐС£

Ò»¸öLinux semaphore½á¹¹°üº¬ÁËÒÔÏÂÐÅÏ¢£º

count
´ËÓòÓÃÀ´±£´æÏ£Íû·ÃÎÊ´Ë×ÊÔ´µÄÎļþ¸öÊý¡£µ±ËüΪÕýÊýʱ±íʾ×ÊÔ´¿ÉÓ᣸ºÊýºÍ0±íʾ½ø³Ì±ØÐëµÈ´ý¡£µ±Ëü³õʼֵΪ1ʱ±íʾһ´Î½öÔÊÐíÒ»¸ö½ø³ÌÀ´·ÃÎÊ´Ë×ÊÔ´¡£µ±½ø³ÌÐèÒª´Ë×ÊԴʱËüÃDZØÐ뽫´Ëcount Öµ¼õ1²¢ÇÒÔÚʹÓÃÍêºó½«Æä¼Ó1¡£
waking
ÕâÊǵȴý´Ë×ÊÔ´µÄ½ø³Ì¸öÊý£¬Í¬Ê±Ò²Êǵ±×ÊÔ´¿ÉÀûÓÃʱµÈ´ý±»»½ÐѵĽø³Ì¸öÊý¡£
wait queue
µ±½ø³ÌµÈ´ý´Ë×ÊԴʱ£¬ËüÃDZ»·ÅÈë´ËµÈ´ý¶ÓÁС£
lock
·ÃÎÊwakingÓòʱʹÓõÄbuzzËø¡£

¼ÙÉè´ËÐźŵƵijõʼֵΪ1£¬µÚÒ»¸öʹÓÃËüµÄ½ø³Ì¿´µ½´Ë¼ÇÊýΪÕýÊý£¬È»ºóËü½«Æä¼õÈ¥1¶øµÃµ½0¡£ÏÖÔڴ˽ø³Ì ÓµÓÐÁËÕâЩ±»ÐźŵƱ£»¤µÄ¶Î´úÂëºÍ×ÊÔ´¡£µ±´Ë½ø³ÌÀ뿪ÁÙ½çÇøÊ±Ëü½«Ôö¼Ó´ËÐźŵƵļÇÊýÖµ£¬×îºÃµÄÇé¿ö ÊÇûÓÐÆäËû½ø³ÌÓëÖ®Õù¶áÁÙ½çÇøµÄ¿ØÖÆÈ¨¡£Linux½«ÐźŵÆÉè¼Æ³ÉÄÜÔÚ¶àÊýÇé¿öÏÂÓÐЧ¹¤×÷¡£

Èç¹û´ËʱÁíÍâÒ»¸ö½ø³ÌÏ£Íû½øÈë´ËÒѱ»±ðµÄ½ø³ÌÕ¼¾ÝµÄÁÙ½çÇøÊ±£¬ËüÒ²½«´Ë¼ÇÊý¼õ1¡£µ±Ëü¿´µ½´Ë¼ÇÊýֵΪ-1 ÔòËüÖªµÀÏÖÔÚ²»ÄܽøÈëÁÙ½çÇø, ±ØÐëµÈ´ýµ½´Ë½ø³ÌÍ˳öʹÓÃÁÙ½çÇøÎªÖ¹¡£ÔÚÕâ¸ö¹ý³ÌÖÐLinux½«ÈÃÕâ¸öµÈ´ý ½ø³Ì˯Ãß¡£µÈ´ý½ø³Ì½«Æä×ÔÉíÌí¼Óµ½ÐźŵƵĵȴý¶ÓÁÐÖÐÈ»ºóϵͳÔÚÒ»¸öÑ­»·ÖмìÑéwakingÓòµÄÖµ²¢µ±waking·Ç0ʱµ÷Óõ÷¶È¹ÜÀíÆ÷¡£

ÁÙ½çÇøµÄËùÓÐÕß½«ÐźŵƼÇÊýÖµ¼Ó1£¬µ«ÊÇÈç¹û´ËÖµÈÔȻСÓÚµÈÓÚ0Ôò±íʾ»¹Óеȴý´Ë×ÊÔ´µÄ½ø³ÌÔÚ˯Ãß¡£ÔÚ ÀíÏëÇé¿öÏ´ËÐźŵƵļÇÊý½«·µ»Øµ½³õʼֵ1¶øÎÞÐè×öÆäËû¹¤×÷¡£ËùÓÐÕß½ø³Ì½«µÝÔöwaking¼ÇÊý²¢»½ÐÑÔÚ´Ë ÐźŵƵȴý¶ÓÁÐÉÏ˯ÃߵĽø³Ì¡£µ±µÈ´ý½ø³ÌÐÑÀ´Ê±£¬Ëü·¢ÏÖwaking¼ÇÊýÖµÒÑΪ1£¬ÄÇôËüÖªµÀÏÖÔÚ¿ÉÒÔ½øÈëÁÙ½çÇøÁË¡£È»ºóËü½«µÝ¼õwaking¼ÇÊý£¬½«Æä±ä³É0²¢¼ÌÐø¡£ËùÓжÔÐźŵÆwakingÓòµÄ·ÃÎʶ¼½«Êܵ½Ê¹ÓÃÐÅºÅµÆ µÄbuzzËøµÄ±£»¤¡£

 


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.