Ê×Ò³ | ÐÂÎÅ | ÐÂÆ· | ÎÄ¿â | ·½°¸ | ÊÓÆµ | ÏÂÔØ | ÉÌ³Ç | ¿ª·¢°å | Êý¾ÝÖÐÐÄ | ×ù̸аæ | Åàѵ | ¹¤¾ß | ²©¿Í | ÂÛ̳ | °Ù¿Æ | GEC | »î¶¯ | Ö÷ÌâÔ | µç×ÓÕ¹
·µ»ØÁÐ±í »Ø¸´ ·¢Ìû

[תÌû]uCOSÖÐÎÄÊé(2)

[תÌû]uCOSÖÐÎÄÊé(2)

µÚ2Õ ʵʱϵͳ¸ÅÄî 1
2.0 ǰºǫ́ϵͳ £¨FOREGROUND/BACKGROUND SYSTEM£© 1
2.1 ´úÂëµÄÁÙ½ç¶Î 2
2.2 ×ÊÔ´ 2
2.3 ¹²Ïí×ÊÔ´ 2
2.4 ¶àÈÎÎñ 2
2.5 ÈÎÎñ 2
2.6 ÈÎÎñÇл»(CONTEXT SWITCH OR TASK SWITCH) 3
2.7 Äںˣ¨KERNEL£© 3
2.8 µ÷¶È£¨SCHEDULER£© 4
2.9 ²»¿É°þ¶áÐÍÄںˠ£¨NON-PREEMPTIVE KERNEL£© 4
2.10 ¿É°þ¶áÐÍÄÚºË 5
2.11 ¿ÉÖØÈëÐÔ£¨REENTRANCY£© 5
2.12 ʱ¼äƬÂÖ·¬µ÷¶È·¨ 7
2.13 ÈÎÎñÓÅÏȼ¶ 7
2.14 2.14¾²Ì¬ÓÅÏȼ¶ 7
2.15 ¶¯Ì¬ÓÅÏȼ¶ 7
2.16 ÓÅÏȼ¶·´×ª 7
2.17 ÈÎÎñÓÅÏȼ¶·ÖÅä 8
2.18 »¥³âÌõ¼þ 10
2.18.1 ¹ØÖжϺͿªÖÐ¶Ï 10
2.18.2 ²âÊÔ²¢ÖÃλ 11
2.18.3 ½ûÖ¹,È»ºóÔÊÐíÈÎÎñÇл» 11
2.18.4 ÐźÅÁ¿(Semaphores) 12
2.19 ËÀËø(»ò±§ËÀ)£¨DEADLOCK (OR DEADLY EMBRACE)£© 16
2.20 ͬ²½ 16
2.21 ʼþ±êÖ¾(EVENT FLAGS) 18
2.22 ÈÎÎñ¼äµÄͨѶ(INTERTASK COMMUNICATION) 18
2.23 ÏûÏ¢ÓÊÏä(MESSAGE MAIL BOXES) 18
2.24 ÏûÏ¢¶ÓÁÐ(MESSAGE QUEUE) 19
2.25 ÖÐ¶Ï 20
2.26 ÖжÏÑÓ³Ù 20
2.27 ÖжÏÏìÓ¦ 21
2.28 Öжϻָ´Ê±¼ä(INTERRUPT RECOVERY) 21
2.29 ÖжÏÑÓ³Ù¡¢ÏìÓ¦ºÍ»Ö¸´ 22
2.30 Öжϴ¦Àíʱ¼ä 22
2.31 ·ÇÆÁ±ÎÖжÏ(NMI) 23
2.32 ʱÖÓ½ÚÅÄ(CLOCK TICK) 24
2.33 ¶Ô´æ´¢Æ÷µÄÐèÇó 25
2.34 ʹÓÃʵʱÄں˵ÄÓÅȱµã 26
2.35 ʵʱϵͳС½á 26
 
µÚ2Õ ʵʱϵͳ¸ÅÄî
ʵʱϵͳµÄÌØµãÊÇ£¬Èç¹ûÂß¼­ºÍʱÐò³öÏÖÆ«²î½«»áÒýÆðÑÏÖØºó¹ûµÄϵͳ¡£ÓÐÁ½ÖÖÀàÐ͵Äʵʱϵͳ£ºÈíʵʱϵͳºÍӲʵʱϵͳ¡£ÔÚÈíʵʱϵͳÖÐϵͳµÄ×ÚÖ¼ÊÇʹ¸÷¸öÈÎÎñÔËÐеÃÔ½¿ìÔ½ºÃ£¬²¢²»ÒªÇóÏÞ¶¨Ä³Ò»ÈÎÎñ±ØÐëÔڶ೤ʱ¼äÄÚÍê³É¡£
ÔÚӲʵʱϵͳÖУ¬¸÷ÈÎÎñ²»½öÒªÖ´ÐÐÎÞÎó¶øÇÒÒª×öµ½×¼Ê±¡£´ó¶àÊýʵʱϵͳÊǶþÕߵĽáºÏ¡£ÊµÊ±ÏµÍ³µÄÓ¦Óú­¸Ç¹ã·ºµÄÁìÓò£¬¶ø¶àÊýʵʱϵͳÓÖÊÇǶÈëʽµÄ¡£ÕâÒâζ׿ÆËã»ú½¨ÔÚϵͳÄÚ²¿£¬Óû§¿´²»µ½Óиö¼ÆËã»úÔÚϵͳÀïÃæ¡£ÒÔÏÂÊÇһЩǶÈëʽϵͳµÄÀý×Ó£º
















ʵʱӦÓÃÈí¼þµÄÉè¼ÆÒ»°ã±È·ÇʵʱӦÓÃÈí¼þÉè¼ÆÄÑһЩ¡£±¾Õ½²Êöʵʱϵͳ¸ÅÄî¡£
ÎҵIJ©¿Í:http://blog.eccn.com/u/qianmin/index.htm
¾²¾²µÈ´ý´ºÌìµÄµ½À´!¡¡
2.0 ǰºǫ́ϵͳ £¨Foreground/Background System£©
²»¸´ÔÓµÄСϵͳһ°ãÉè¼Æ³ÉÈçͼ2.1ËùʾµÄÑù×Ó¡£ÕâÖÖϵͳ¿É³ÆÎªÇ°ºǫ́ϵͳ»ò³¬Ñ­»·ÏµÍ³(Super-Loops)¡£Ó¦ÓóÌÐòÊÇÒ»¸öÎÞÏÞµÄÑ­»·£¬Ñ­»·Öе÷ÓÃÏàÓ¦µÄº¯ÊýÍê³ÉÏàÓ¦µÄ²Ù×÷£¬Õⲿ·Ö¿ÉÒÔ¿´³Éºǫ́ÐÐΪ(background)¡£ÖжϷþÎñ³ÌÐò´¦ÀíÒ첽ʼþ£¬Õⲿ·Ö¿ÉÒÔ¿´³Éǰ̨ÐÐΪ£¨foreground£©¡£ºǫ́Ҳ¿ÉÒÔ½Ð×öÈÎÎñ¼¶¡£Ç°Ì¨Ò²½ÐÖжϼ¶¡£Ê±¼äÏà¹ØÐÔºÜÇ¿µÄ¹Ø¼ü²Ù×÷(Critical operation)Ò»¶¨ÊÇ¿¿ÖжϷþÎñÀ´±£Ö¤µÄ¡£ÒòΪÖжϷþÎñÌṩµÄÐÅÏ¢Ò»Ö±ÒªµÈµ½ºǫ́³ÌÐò×ßµ½¸Ã´¦ÀíÕâ¸öÐÅÏ¢ÕâÒ»²½Ê±²ÅÄܵõ½´¦Àí£¬ÕâÖÖϵͳÔÚ´¦ÀíÐÅÏ¢µÄ¼°Ê±ÐÔÉÏ£¬±Èʵ¼Ê¿ÉÒÔ×öµ½µÄÒª²î¡£Õâ¸öÖ¸±ê³Æ×÷ÈÎÎñ¼¶ÏìӦʱ¼ä¡£×Çé¿öϵÄÈÎÎñ¼¶ÏìӦʱ¼äÈ¡¾öÓÚÕû¸öÑ­»·µÄÖ´ÐÐʱ¼ä¡£ÒòΪѭ»·µÄÖ´ÐÐʱ¼ä²»Êdz£Êý£¬³ÌÐò¾­¹ýÄ³Ò»ÌØ¶¨²¿·ÖµÄ׼ȷʱ¼äÒ²ÊDz»ÄÜÈ·¶¨µÄ¡£½ø¶ø£¬Èç¹û³ÌÐòÐÞ¸ÄÁË£¬Ñ­»·µÄʱÐòÒ²»áÊܵ½Ó°Ïì¡£
 
ͼ2-1ǰºǫ́ϵͳ 

ºÜ¶à»ùÓÚ΢´¦ÀíÆ÷µÄ²úÆ·²ÉÓÃǰºǫ́ϵͳÉè¼Æ£¬ÀýÈç΢²¨Â¯¡¢µç»°»ú¡¢Íæ¾ßµÈ¡£ÔÚÁíÍâһЩ»ùÓÚ΢´¦ÀíÆ÷µÄÓ¦ÓÃÖУ¬´ÓÊ¡µçµÄ½Ç¶È³ö·¢£¬Æ½Ê±Î¢´¦ÀíÆ÷´¦ÔÚÍ£»ú״̬(halt)£¬ËùÓеÄʶ¼¿¿ÖжϷþÎñÀ´Íê³É¡£
2.1 ´úÂëµÄÁÙ½ç¶Î
´úÂëµÄÁÙ½ç¶ÎÒ²³ÆÎªÁÙ½çÇø£¬Ö¸´¦Àíʱ²»¿É·Ö¸îµÄ´úÂë¡£Ò»µ©Õⲿ·Ö´úÂ뿪ʼִÐУ¬Ôò²»ÔÊÐíÈκÎÖжϴòÈ롣Ϊȷ±£ÁÙ½ç¶Î´úÂëµÄÖ´ÐУ¬ÔÚ½øÈëÁÙ½ç¶Î֮ǰҪ¹ØÖжϣ¬¶øÁÙ½ç¶Î´úÂëÖ´ÐÐÍêÒÔºóÒªÁ¢¼´¿ªÖжϡ£(²ÎÔÄ2.03¹²Ïí×ÊÔ´)
2.2  ×ÊÔ´
ÈκÎΪÈÎÎñËùÕ¼ÓõÄʵÌå¶¼¿É³ÆÎª×ÊÔ´¡£×ÊÔ´¿ÉÒÔÊÇÊäÈëÊä³öÉ豸£¬ÀýÈç´òÓ¡»ú¡¢¼üÅÌ¡¢ÏÔʾÆ÷£¬×ÊÔ´Ò²¿ÉÒÔÊÇÒ»¸ö±äÁ¿£¬Ò»¸ö½á¹¹»òÒ»¸öÊý×éµÈ¡£
2.3 ¹²Ïí×ÊÔ´
¿ÉÒÔ±»Ò»¸öÒÔÉÏÈÎÎñʹÓõÄ×ÊÔ´½Ð×ö¹²Ïí×ÊÔ´¡£ÎªÁË·ÀÖ¹Êý¾Ý±»ÆÆ»µ£¬Ã¿¸öÈÎÎñÔÚÓë¹²Ïí×ÊÔ´´ò½»µÀʱ£¬±ØÐë¶ÀÕ¼¸Ã×ÊÔ´¡£Õâ½Ð×ö»¥³â£¨mutual exclusion£©¡£ÔÚ2.18½Ú¡°»¥³â¡±ÖУ¬½«¶Ô¼¼ÊõÉÏÈçºÎ±£Ö¤»¥³âÌõ¼þ×ö½øÒ»²½ÌÖÂÛ¡£
2.4 ¶àÈÎÎñ
¶àÈÎÎñÔËÐеÄʵÏÖʵ¼ÊÉÏÊÇ¿¿CPU(ÖÐÑë´¦Àíµ¥Ôª)ÔÚÐí¶àÈÎÎñÖ®¼äת»»¡¢µ÷¶È¡£CPUÖ»ÓÐÒ»¸ö£¬ÂÖ·¬·þÎñÓÚһϵÁÐÈÎÎñÖеÄijһ¸ö¡£¶àÈÎÎñÔËÐкÜÏñǰºǫ́ϵͳ£¬µ«ºǫ́ÈÎÎñÓжà¸ö¡£¶àÈÎÎñÔËÐÐʹCPUµÄÀûÓÃÂʵõ½×î´óµÄ·¢»Ó£¬²¢Ê¹Ó¦ÓóÌÐòÄ£¿é»¯¡£ÔÚʵʱӦÓÃÖУ¬¶àÈÎÎñ»¯µÄ×î´óÌØµãÊÇ£¬¿ª·¢ÈËÔ±¿ÉÒÔ½«ºÜ¸´ÔÓµÄÓ¦ÓóÌÐò²ã´Î»¯¡£Ê¹ÓöàÈÎÎñ£¬Ó¦ÓóÌÐò½«¸üÈÝÒ×Éè¼ÆÓëά»¤¡£
2.5 ÈÎÎñ
Ò»¸öÈÎÎñ£¬Ò²³Æ×÷Ò»¸öỊ̈߳¬ÊÇÒ»¸ö¼òµ¥µÄ³ÌÐò£¬¸Ã³ÌÐò¿ÉÒÔÈÏΪCPUÍêȫֻÊô¸Ã³ÌÐò×Ô¼º¡£ÊµÊ±Ó¦ÓóÌÐòµÄÉè¼Æ¹ý³Ì£¬°üÀ¨ÈçºÎ°ÑÎÊÌâ·Ö¸î³É¶à¸öÈÎÎñ£¬Ã¿¸öÈÎÎñ¶¼ÊÇÕû¸öÓ¦ÓõÄijһ²¿·Ö£¬Ã¿¸öÈÎÎñ±»¸³ÓèÒ»¶¨µÄÓÅÏȼ¶£¬ÓÐËü×Ô¼ºµÄÒ»Ì×CPU¼Ä´æÆ÷ºÍ×Ô¼ºµÄÕ»¿Õ¼ä(Èçͼ2.2Ëùʾ)¡£
 
ͼ2.2¶àÈÎÎñ¡£
µäÐ͵ء¢Ã¿¸öÈÎÎñ¶¼ÊÇÒ»¸öÎÞÏÞµÄÑ­»·¡£Ã¿¸öÈÎÎñ¶¼´¦ÔÚÒÔÏÂ5ÖÖ״̬֮һµÄ״̬Ï£¬Õâ5ÖÖ״̬ÊÇÐÝÃß̬£¬¾ÍÐ÷̬¡¢ÔËÐÐ̬¡¢¹ÒÆð̬(µÈ´ýijһʼþ·¢Éú)ºÍ±»ÖжÏ̬£¨²Î¼ûͼ2.3£©                 ÐÝÃß̬Ï൱ÓÚ¸ÃÈÎÎñפÁôÔÚÄÚ´æÖУ¬µ«²¢²»±»¶àÈÎÎñÄÚºËËùµ÷¶È¡£¾ÍÐ÷ÒâζןÃÈÎÎñÒѾ­×¼±¸ºÃ£¬¿ÉÒÔÔËÐÐÁË£¬µ«ÓÉÓÚ¸ÃÈÎÎñµÄÓÅÏȼ¶±ÈÕýÔÚÔËÐеÄÈÎÎñµÄÓÅÏȼ¶µÍ£¬»¹ÔÝʱ²»ÄÜÔËÐС£ÔËÐÐ̬µÄÈÎÎñÊÇÖ¸¸ÃÈÎÎñÕÆÎÕÁËCPUµÄ¿ØÖÆÈ¨£¬ÕýÔÚÔËÐÐÖС£¹ÒÆð״̬Ҳ¿ÉÒÔ½Ð×öµÈ´ýʼþ̬WAITING£¬Ö¸¸ÃÈÎÎñÔڵȴý£¬µÈ´ýijһʼþµÄ·¢Éú£¬£¨ÀýÈçµÈ´ýijÍâÉèµÄI/O²Ù×÷£¬µÈ´ýij¹²Ïí×ÊÔ´ÓÉÔݲ»ÄÜʹÓñä³ÉÄÜʹÓÃ״̬£¬µÈ´ý¶¨Ê±Âö³åµÄµ½À´»òµÈ´ý³¬Ê±Ðźŵĵ½À´ÒÔ½áÊøÄ¿Ç°µÄµÈ´ý£¬µÈµÈ£©¡£×îºó£¬·¢ÉúÖжÏʱ£¬CPUÌṩÏàÓ¦µÄÖжϷþÎñ£¬Ô­À´ÕýÔÚÔËÐеÄÈÎÎñÔݲ»ÄÜÔËÐУ¬¾Í½øÈëÁ˱»ÖжÏ״̬¡£Í¼2.3±íʾ¦ÌC/OS-¢òÖÐһЩº¯ÊýÌṩµÄ·þÎñ£¬ÕâЩº¯ÊýʹÈÎÎñ´ÓÒ»ÖÖ״̬±äµ½ÁíÒ»ÖÖ״̬¡£
 
ͼ2.3ÈÎÎñµÄ״̬
2.6 ÈÎÎñÇл»(Context Switch or Task Switch)
Context Switch ÔÚÓеÄÊéÖз­Òë³ÉÉÏÏÂÎÄÇл»£¬Êµ¼Êº¬ÒåÊÇÈÎÎñÇл»£¬»òCPU¼Ä´æÆ÷ÄÚÈÝÇл»¡£µ±¶àÈÎÎñÄں˾ö¶¨ÔËÐÐÁíÍâµÄÈÎÎñʱ£¬Ëü±£´æÕýÔÚÔËÐÐÈÎÎñµÄµ±Ç°×´Ì¬£¨Context£©£¬¼´CPU¼Ä´æÆ÷ÖеÄÈ«²¿ÄÚÈÝ¡£ÕâЩÄÚÈݱ£´æÔÚÈÎÎñµÄµ±Ç°×´¿ö±£´æÇø£¨Task¡¯s Context Storage area£©£¬Ò²¾ÍÊÇÈÎÎñ×Ô¼ºµÄÕ»ÇøÖ®ÖС££¨¼ûͼ2.2£©¡£ÈëÕ»¹¤×÷Íê³ÉÒԺ󣬾ÍÊǰÑÏÂÒ»¸ö½«ÒªÔËÐеÄÈÎÎñµÄµ±Ç°×´¿ö´Ó¸ÃÈÎÎñµÄÕ»ÖÐÖØÐÂ×°ÈëCPUµÄ¼Ä´æÆ÷£¬²¢¿ªÊ¼ÏÂÒ»¸öÈÎÎñµÄÔËÐС£Õâ¸ö¹ý³Ì½Ð×öÈÎÎñÇл»¡£ÈÎÎñÇл»¹ý³ÌÔö¼ÓÁËÓ¦ÓóÌÐòµÄ¶îÍ⸺ºÉ¡£CPUµÄÄÚ²¿¼Ä´æÆ÷Ô½¶à£¬¶îÍ⸺ºÉ¾ÍÔ½ÖØ¡£×öÈÎÎñÇл»ËùÐèÒªµÄʱ¼äÈ¡¾öÓÚCPUÓжàÉټĴæÆ÷ÒªÈëÕ»¡£ÊµÊ±Äں˵ÄÐÔÄܲ»Ó¦¸ÃÒÔÿÃëÖÓÄÜ×ö¶àÉÙ´ÎÈÎÎñÇл»À´ÆÀ¼Û¡£
2.7 Äںˣ¨Kernel£©
¶àÈÎÎñϵͳÖУ¬Äں˸ºÔð¹ÜÀí¸÷¸öÈÎÎñ£¬»òÕß˵Ϊÿ¸öÈÎÎñ·ÖÅäCPUʱ¼ä£¬²¢ÇÒ¸ºÔðÈÎÎñÖ®¼äµÄͨѶ¡£ÄÚºËÌṩµÄ»ù±¾·þÎñÊÇÈÎÎñÇл»¡£Ö®ËùÒÔʹÓÃʵʱÄں˿ÉÒÔ´ó´ó¼ò»¯Ó¦ÓÃϵͳµÄÉè¼Æ£¬ÊÇÒòΪʵʱÄÚºËÔÊÐí½«Ó¦Ó÷ֳÉÈô¸É¸öÈÎÎñ£¬ÓÉʵʱÄÚºËÀ´¹ÜÀíËüÃÇ¡£Äں˱¾ÉíÒ²Ôö¼ÓÁËÓ¦ÓóÌÐòµÄ¶îÍ⸺ºÉ£¬´úÂë¿Õ¼äÔö¼ÓROMµÄÓÃÁ¿£¬Äں˱¾ÉíµÄÊý¾Ý½á¹¹Ôö¼ÓÁËRAMµÄÓÃÁ¿¡£µ«¸üÖ÷ÒªµÄÊÇ£¬Ã¿¸öÈÎÎñÒªÓÐ×Ô¼ºµÄÕ»¿Õ¼ä£¬ÕâÒ»¿é³ÔÆðÄÚ´æÀ´ÊÇÏ൱À÷º¦µÄ¡£Äں˱¾Éí¶ÔCPUµÄÕ¼ÓÃʱ¼äÒ»°ãÔÚ2µ½5¸ö°Ù·ÖµãÖ®¼ä¡£
µ¥Æ¬»úÒ»°ã²»ÄÜÔËÐÐʵʱÄںˣ¬ÒòΪµ¥Æ¬»úµÄRAMºÜÓÐÏÞ¡£Í¨¹ýÌṩ±Ø²»¿ÉȱÉÙ µÄϵͳ·þÎñ£¬ÖîÈçÐźÅÁ¿¹ÜÀí£¬ÓÊÏä¡¢ÏûÏ¢¶ÓÁС¢ÑÓʱµÈ£¬ÊµÊ±ÄÚºËʹµÃCPUµÄÀûÓøüΪÓÐЧ¡£Ò»µ©¶ÁÕßÓÃʵʱÄÚºË×ö¹ýϵͳÉè¼Æ£¬½«¾ö²»ÔÙÏë·µ»Øµ½Ç°ºǫ́ϵͳ¡£
2.8 µ÷¶È£¨Scheduler£©
µ÷¶È£¨Scheduler£©,Ó¢ÎÄ»¹ÓÐÒ»´Ê½Ðdispatcher£¬Ò²Êǵ÷¶ÈµÄÒâ˼¡£ÕâÊÇÄں˵ÄÖ÷ÒªÖ°ÔðÖ®Ò»£¬¾ÍÊÇÒª¾ö¶¨¸ÃÂÖµ½ÄĸöÈÎÎñÔËÐÐÁË¡£¶àÊýʵʱÄÚºËÊÇ»ùÓÚÓÅÏȼ¶µ÷¶È·¨µÄ¡£Ã¿¸öÈÎÎñ¸ù¾ÝÆäÖØÒª³Ì¶ÈµÄ²»Í¬±»¸³ÓèÒ»¶¨µÄÓÅÏȼ¶¡£»ùÓÚÓÅÏȼ¶µÄµ÷¶È·¨Ö¸£¬CPU×ÜÊÇÈô¦ÔÚ¾ÍÐ÷̬µÄÓÅÏȼ¶×î¸ßµÄÈÎÎñÏÈÔËÐС£È»¶ø£¬¾¿¾¹ºÎʱÈøßÓÅÏȼ¶ÈÎÎñÕÆÎÕCPUµÄʹÓÃȨ£¬ÓÐÁ½ÖÖ²»Í¬µÄÇé¿ö£¬ÕâÒª¿´ÓõÄÊÇʲôÀàÐ͵ÄÄںˣ¬ÊDz»¿É°þ¶áÐ͵ϹÊǿɰþ¶áÐÍÄںˡ£
2.9 ²»¿É°þ¶áÐÍÄÚºË £¨Non-Preemptive Kernel£©
²»¿É°þ¶áÐÍÄÚºËÒªÇóÿ¸öÈÎÎñ×ÔÎÒ·ÅÆúCPUµÄËùÓÐȨ¡£²»¿É°þ¶áÐ͵÷¶È·¨Ò²³Æ×÷Ï×÷ÐͶàÈÎÎñ£¬¸÷¸öÈÎÎñ±Ë´ËºÏ×÷¹²ÏíÒ»¸öCPU¡£Ò첽ʼþ»¹ÊÇÓÉÖжϷþÎñÀ´´¦Àí¡£ÖжϷþÎñ¿ÉÒÔʹһ¸ö¸ßÓÅÏȼ¶µÄÈÎÎñÓÉ¹ÒÆð״̬±äΪ¾ÍÐ÷״̬¡£µ«ÖжϷþÎñÒÔºó¿ØÖÆÈ¨»¹Êǻص½Ô­À´±»ÖжÏÁ˵ÄÄǸöÈÎÎñ£¬Ö±µ½¸ÃÈÎÎñÖ÷¶¯·ÅÆúCPUµÄʹÓÃȨʱ£¬ÄǸö¸ßÓÅÏȼ¶µÄÈÎÎñ²ÅÄÜ»ñµÃCPUµÄʹÓÃȨ¡£
²»¿É°þ¶áÐÍÄں˵ÄÒ»¸öÓŵãÊÇÏìÓ¦ÖжϿ졣ÔÚÌÖÂÛÖжÏÏìӦʱ»á½øÒ»²½Éæ¼°Õâ¸öÎÊÌâ¡£ÔÚÈÎÎñ¼¶£¬²»¿É°þ¶áÐÍÄÚºËÔÊÐíʹÓò»¿ÉÖØÈ뺯Êý¡£º¯ÊýµÄ¿ÉÖØÈëÐÔÒÔºó»áÌÖÂÛ¡£Ã¿¸öÈÎÎñ¶¼¿ÉÒÔµ÷Ó÷ǿÉÖØÈëÐÔº¯Êý£¬¶ø²»±Øµ£ÐÄÆäËüÈÎÎñ¿ÉÄÜÕýÔÚʹÓøú¯Êý£¬´Ó¶øÔì³ÉÊý¾ÝµÄÆÆ»µ¡£ÒòΪÿ¸öÈÎÎñÒªÔËÐе½Íê³Éʱ²ÅÊÍ·ÅCPUµÄ¿ØÖÆÈ¨¡£µ±È»¸Ã²»¿ÉÖØÈëÐͺ¯Êý±¾Éí²»µÃÓÐ·ÅÆúCPU¿ØÖÆÈ¨µÄÆóͼ¡£
ʹÓò»¿É°þ¶áÐÍÄÚºËʱ£¬ÈÎÎñ¼¶ÏìӦʱ¼ä±Èǰºǫ́ϵͳ¿ìµÃ¶à¡£´ËʱµÄÈÎÎñ¼¶ÏìӦʱ¼äÈ¡¾öÓÚ×µÄÈÎÎñÖ´ÐÐʱ¼ä¡£
²»¿É°þ¶áÐÍÄں˵ÄÁíÒ»¸öÓŵãÊÇ£¬¼¸ºõ²»ÐèҪʹÓÃÐźÅÁ¿±£»¤¹²ÏíÊý¾Ý¡£ÔËÐÐ×ŵÄÈÎÎñÕ¼ÓÐCPU£¬¶ø²»±Øµ£Ðı»±ðµÄÈÎÎñÇÀÕ¼¡£µ«ÕâÒ²²»ÊǾø¶ÔµÄ£¬ÔÚijÖÖÇé¿öÏ£¬ÐźÅÁ¿»¹ÊÇÓõÃ×ŵġ£´¦Àí¹²ÏíI/OÉ豸ʱÈÔÐèҪʹÓû¥³âÐÍÐźÅÁ¿¡£ÀýÈ磬ÔÚ´òÓ¡»úµÄʹÓÃÉÏ£¬ÈÔÐèÒªÂú×㻥³âÌõ¼þ¡£Í¼2.4ʾÒâ²»¿É°þ¶áÐÍÄں˵ÄÔËÐÐÇé¿ö£¬ÈÎÎñÔÚÔËÐйý³ÌÖ®ÖУ¬[L2.4(1)]ÖжÏÀ´ÁË£¬Èç¹û´ËʱÖжÏÊÇ¿ª×ŵģ¬CPUÓÉÖжÏÏòÁ¿[F2.4(2)]½øÈëÖжϷþÎñ×Ó³ÌÐò£¬ÖжϷþÎñ×Ó³ÌÐò×öʼþ´¦Àí[F2.4(3)]£¬Ê¹Ò»¸öÓиü¸ß¼¶µÄÈÎÎñ½øÈë¾ÍÐ÷̬¡£ÖжϷþÎñÍê³ÉÒÔºó£¬ÖжϷµ»ØÖ¸Áî[F2.4(4)], Ê¹CPU»Øµ½Ô­À´±»ÖжϵÄÈÎÎñ£¬½Ó×ÅÖ´ÐиÃÈÎÎñµÄ´úÂë[F2.4(5)]Ö±µ½¸ÃÈÎÎñÍê³É£¬µ÷ÓÃÒ»¸öÄں˷þÎñº¯ÊýÒÔÊÍ·ÅCPU¿ØÖÆÈ¨£¬ÓÉÄں˽«¿ØÖÆÈ¨½»¸øÄǸöÓÅÏȼ¶¸ü¸ßµÄ¡¢²¢ÒѽøÈë¾ÍÐ÷̬µÄÈÎÎñ[F2.4(6)]£¬Õâ¸öÓÅÏȼ¶¸ü¸ßµÄÈÎÎñ²Å¿ªÊ¼´¦ÀíÖжϷþÎñ³ÌÐò±êʶµÄʼþ[F2.4(7)]¡£    

[´ËÌù×ÓÒѾ­±»×÷ÕßÓÚ2005-11-28 16:37:09±à¼­¹ý]

ÎҵIJ©¿Í:http://blog.eccn.com/u/qianmin/index.htm
¾²¾²µÈ´ý´ºÌìµÄµ½À´!¡¡
ͼ2.4²»¿É°þ¶áÐÍÄÚºË
²»¿É°þ¶áÐÍÄں˵Ä×î´óȱÏÝÔÚÓÚÆäÏìӦʱ¼ä¡£¸ßÓÅÏȼ¶µÄÈÎÎñÒѾ­½øÈë¾ÍÐ÷̬£¬µ«»¹²»ÄÜÔËÐУ¬ÒªµÈ£¬Ò²ÐíÒªµÈºÜ³¤Ê±¼ä£¬Ö±µ½µ±Ç°ÔËÐÐ×ŵÄÈÎÎñÊÍ·ÅCPU¡£ÓëǰºóϵͳһÑù£¬
²»¿É°þ¶áÐÍÄں˵ÄÈÎÎñ¼¶ÏìӦʱ¼äÊDz»È·¶¨µÄ£¬²»ÖªµÀʲôʱºò×î¸ßÓÅÏȼ¶µÄÈÎÎñ²ÅÄÜÄõ½CPUµÄ¿ØÖÆÈ¨£¬Íêȫȡ¾öÓÚÓ¦ÓóÌÐòʲôʱºòÊÍ·ÅCPU¡£
×ÜÖ®£¬²»¿É°þ¶áÐÍÄÚºËÔÊÐíÿ¸öÈÎÎñÔËÐУ¬Ö±µ½¸ÃÈÎÎñ×ÔÔ¸·ÅÆúCPUµÄ¿ØÖÆÈ¨¡£ÖжϿÉÒÔ´òÈëÔËÐÐ×ŵÄÈÎÎñ¡£ÖжϷþÎñÍê³ÉÒÔºó½«CPU¿ØÖÆÈ¨»¹¸ø±»ÖжÏÁ˵ÄÈÎÎñ¡£ÈÎÎñ¼¶ÏìӦʱ¼äÒª´ó´óºÃÓÚǰºóϵͳ£¬µ«ÈÔÊDz»¿ÉÖªµÄ£¬ÉÌÒµÈí¼þ¼¸ºõûÓв»¿É°þ¶áÐÍÄںˡ£
2.10 ¿É°þ¶áÐÍÄÚºË
µ±ÏµÍ³ÏìӦʱ¼äºÜÖØÒªÊ±£¬ÒªÊ¹Óÿɰþ¶áÐÍÄںˡ£Òò´Ë£¬¦ÌC/OS-¢òÒÔ¼°¾ø´ó¶àÊýÉÌÒµÉÏÏúÊÛµÄʵʱÄں˶¼Êǿɰþ¶áÐÍÄںˡ£×î¸ßÓÅÏȼ¶µÄÈÎÎñÒ»µ©¾ÍÐ÷£¬×ÜÄܵõ½CPUµÄ¿ØÖÆÈ¨¡£µ±Ò»¸öÔËÐÐ×ŵÄÈÎÎñʹһ¸ö±ÈËüÓÅÏȼ¶¸ßµÄÈÎÎñ½øÈëÁ˾ÍÐ÷̬£¬µ±Ç°ÈÎÎñµÄCPUʹÓÃȨ¾Í±»°þ¶áÁË£¬»òÕß˵±»¹ÒÆðÁË£¬ÄǸö¸ßÓÅÏȼ¶µÄÈÎÎñÁ¢¿ÌµÃµ½ÁËCPUµÄ¿ØÖÆÈ¨¡£Èç¹ûÊÇÖжϷþÎñ×Ó³ÌÐòʹһ¸ö¸ßÓÅÏȼ¶µÄÈÎÎñ½øÈë¾ÍÐ÷̬£¬ÖжÏÍê³Éʱ£¬ÖжÏÁ˵ÄÈÎÎñ±»¹ÒÆð£¬ÓÅÏȼ¶¸ßµÄÄǸöÈÎÎñ¿ªÊ¼ÔËÐС£Èçͼ2.5Ëùʾ¡£
 
ͼ2.5¿É°þ¶áÐÍÄÚºË
ʹÓÿɰþ¶áÐÍÄںˣ¬×î¸ßÓÅÏȼ¶µÄÈÎÎñʲôʱºò¿ÉÒÔÖ´ÐУ¬¿ÉÒԵõ½CPUµÄ¿ØÖÆÈ¨ÊÇ¿ÉÖªµÄ¡£Ê¹Óÿɰþ¶áÐÍÄÚºËʹµÃÈÎÎñ¼¶ÏìӦʱ¼äµÃÒÔ×îÓÅ»¯¡£
ʹÓÿɰþ¶áÐÍÄÚºËʱ£¬Ó¦ÓóÌÐò²»Ó¦Ö±½ÓʹÓò»¿ÉÖØÈëÐͺ¯Êý¡£µ÷Óò»¿ÉÖØÈëÐͺ¯Êýʱ£¬ÒªÂú×㻥³âÌõ¼þ£¬ÕâÒ»µã¿ÉÒÔÓû¥³âÐÍÐźÅÁ¿À´ÊµÏÖ¡£Èç¹ûµ÷Óò»¿ÉÖØÈëÐͺ¯Êýʱ£¬µÍÓÅÏȼ¶µÄÈÎÎñCPUµÄʹÓÃȨ±»¸ßÓÅÏȼ¶ÈÎÎñ°þ¶á£¬²»¿ÉÖØÈëÐͺ¯ÊýÖеÄÊý¾ÝÓпÉÄܱ»ÆÆ»µ¡£×ÛÉÏËùÊö£¬¿É°þ¶áÐÍÄÚºË×ÜÊÇÈþÍÐ÷̬µÄ¸ßÓÅÏȼ¶µÄÈÎÎñÏÈÔËÐУ¬ÖжϷþÎñ³ÌÐò¿ÉÒÔÇÀÕ¼CPU£¬µ½ÖжϷþÎñÍê³Éʱ£¬ÄÚºËÈôËʱÓÅÏȼ¶×î¸ßµÄÈÎÎñÔËÐУ¨²»Ò»¶¨ÊÇÄǸö±»ÖжÏÁ˵ÄÈÎÎñ£©¡£ÈÎÎñ¼¶ÏµÍ³ÏìӦʱ¼äµÃµ½ÁË×îÓÅ»¯£¬ÇÒÊÇ¿ÉÖªµÄ¡£¦ÌC/OS-¢òÊôÓڿɰþ¶áÐÍÄںˡ£
2.11 ¿ÉÖØÈëÐÔ£¨Reentrancy£©
¿ÉÖØÈëÐͺ¯Êý¿ÉÒÔ±»Ò»¸öÒÔÉϵÄÈÎÎñµ÷Ó㬶ø²»±Øµ£ÐÄÊý¾ÝµÄÆÆ»µ¡£¿ÉÖØÈëÐͺ¯ÊýÈκÎʱºò¶¼¿ÉÒÔ±»Öжϣ¬Ò»¶Îʱ¼äÒÔºóÓÖ¿ÉÒÔÔËÐУ¬¶øÏàÓ¦Êý¾Ý²»»á¶ªÊ§¡£¿ÉÖØÈëÐͺ¯Êý»òÕßֻʹÓþֲ¿±äÁ¿£¬¼´±äÁ¿±£´æÔÚCPU¼Ä´æÆ÷Öлò¶ÑÕ»ÖС£Èç¹ûʹÓÃÈ«¾Ö±äÁ¿£¬ÔòÒª¶ÔÈ«¾Ö±äÁ¿ÓèÒÔ±£»¤¡£³ÌÐò2.1ÊÇÒ»¸ö¿ÉÖØÈëÐͺ¯ÊýµÄÀý×Ó¡£

³ÌÐòÇåµ¥2.1¿ÉÖØÈëÐͺ¯Êý
void strcpy(char *dest, char *src)
{
¡¡¡¡while (*dest++ = *src++) {
¡¡¡¡;
¡¡¡¡}
¡¡¡¡*dest = NUL;
}


º¯ÊýStrcpy()×ö×Ö·û´®¸´ÖÆ¡£ÒòΪ²ÎÊýÊÇ´æÔÚ¶ÑÕ»Öеģ¬¹Êº¯ÊýStrcpy()¿ÉÒÔ±»¶à¸öÈÎÎñµ÷Ó㬶ø²»±Øµ£Ðĸ÷ÈÎÎñµ÷Óú¯ÊýÆÚ¼ä»á»¥ÏàÆÆ»µ¶Ô·½µÄÖ¸Õë¡£
²»¿ÉÖØÈëÐͺ¯ÊýµÄÀý×ÓÈç³ÌÐò2.2Ëùʾ¡£Swap()ÊÇÒ»¸ö¼òµ¥º¯Êý£¬Ëüʹº¯ÊýµÄÁ½¸öÐÎʽ±äÁ¿µÄÖµ»¥»»¡£Îª±ãÓÚÌÖÂÛ£¬¼Ù¶¨Ê¹ÓõÄÊǿɰþ¶áÐÍÄںˣ¬ÖжÏÊÇ¿ª×ŵģ¬Temp¶¨ÒåΪÕûÊýÈ«³Ì±äÁ¿¡£

¡¡¡¡³ÌÐòÇåµ¥ 2.2    ²»¿ÉÖØÈëÐͺ¯Êý
int Temp;

void swap(int *x, int *y)
{
¡¡¡¡Temp = *x;
¡¡¡¡*x   = *y;
¡¡¡¡*y   = Temp;
}

³ÌÐòÔ±´òËãÈÃSwap() º¯Êý¿ÉÒÔΪÈκÎÈÎÎñËùµ÷Óã¬Èç¹ûÒ»¸öµÍÓÅÏȼ¶µÄÈÎÎñÕýÔÚÖ´ÐÐSwap()º¯Êý£¬¶ø´ËʱÖжϷ¢ÉúÁË£¬ÓÚÊÇ¿ÉÄÜ·¢ÉúµÄÊÂÇéÈçͼ2.6Ëùʾ¡£[F2.6(1)]±íʾÖжϷ¢ÉúʱTempÒѱ»¸³Öµ1£¬ÖжϷþÎñ×Ó³ÌÐòʹ¸üÓÅÏȼ¶µÄÈÎÎñ¾ÍÐ÷£¬µ±ÖжÏÍê³Éʱ[F2.6(2)]£¬Äںˣ¨¼Ù¶¨Ê¹ÓõÄÊǦÌC/OS-¢ò£©Ê¹¸ßÓÅÏȼ¶µÄÄǸöÈÎÎñµÃÒÔÔËÐÐ[F2.6(3)],¸ßÓÅÏȼ¶µÄÈÎÎñµ÷ÓÃSwap()º¯ÊýÊÇTemp¸³ÖµÎª3¡£Õâ¶Ô¸ÃÈÎÎñ±¾ÉíÀ´Ëµ£¬ÊµÏÖÁ½¸ö±äÁ¿µÄ½»»»ÊÇûÓÐÎÊÌâµÄ£¬½»»»ºóZµÄÖµÊÇ4£¬XµÄÖµÊÇ3¡£È»ºó¸ßÓÅÏȼ¶µÄÈÎÎñͨ¹ýµ÷ÓÃÄں˷þÎñº¯ÊýÖеÄÑÓ³ÙÒ»¸öʱÖÓ½ÚÅÄ[F2.6(4)],ÊÍ·ÅÁËCPUµÄʹÓÃȨ£¬µÍÓÅÏȼ¶ÈÎÎñµÃÒÔ¼ÌÐøÔËÐÐ[F2.6(5)].×¢Ò⣬´ËʱTempµÄÖµÈÔΪ3£¡ÔÚµÍÓÅÏȼ¶ÈÎÎñ½Ó×ÅÔËÐÐʱ£¬YµÄÖµ±»´íÎ󵨏³Îª3£¬¶ø²»ÊÇÕýÈ·Öµ1¡£
 
ͼ2.6²»¿ÉÖØÈëÐÔº¯Êý
Çë×¢Ò⣬ÕâÖ»ÊÇÒ»¸ö¼òµ¥µÄÀý×Ó£¬ÈçºÎÄÜʹ´úÂë¾ßÓпÉÖØÈëÐÔÒ»¿´¾ÍÃ÷°×¡£È»¶øÓÐЩÇé¿öÏ£¬ÎÊÌâ²¢·ÇÄÇôÒ׽⡣ӦÓóÌÐòÖеIJ»¿ÉÖØÈ뺯ÊýÒýÆðµÄ´íÎóºÜ¿ÉÄÜÔÚ²âÊÔʱ·¢ÏÖ²»ÁË£¬Ö±µ½²úÆ·µ½ÁËÏÖ³¡ÎÊÌâ²Å³öÏÖ¡£Èç¹ûÔÚ¶àÈÎÎñÉÏÄú»¹ÊǰÑÐÂÊÖ£¬Ê¹Óò»¿ÉÖØÈëÐͺ¯Êýʱ£¬Ç§ÍòÒªµ±ÐÄ¡£

[´ËÌù×ÓÒѾ­±»×÷ÕßÓÚ2005-11-28 16:38:00±à¼­¹ý]

ÎҵIJ©¿Í:http://blog.eccn.com/u/qianmin/index.htm
¾²¾²µÈ´ý´ºÌìµÄµ½À´!¡¡
ʹÓÃÒÔϼ¼ÊõÖ®Ò»¼´¿ÉʹSwap()º¯Êý¾ßÓпÉÖØÈëÐÔ£º

l °ÑTemp¶¨ÒåΪ¾Ö²¿±äÁ¿
l µ÷ÓÃSwap()º¯Êý֮ǰ¹ØÖжϣ¬µ÷¶¯ºóÔÙ¿ªÖжÏ
l ÓÃÐźÅÁ¿½ûÖ¹¸Ãº¯ÊýÔÚʹÓùý³ÌÖб»Ôٴε÷ÓÃ

Èç¹ûÖжϷ¢ÉúÔÚSwap()º¯Êýµ÷ÓÃ֮ǰ»òµ÷ÓÃÖ®ºó£¬Á½¸öÈÎÎñÖеÄX£¬YÖµ¶¼»áÊÇÕýÈ·µÄ¡£
2.12 ʱ¼äƬÂÖ·¬µ÷¶È·¨
µ±Á½¸ö»òÁ½¸öÒÔÉÏÈÎÎñÓÐͬÑùÓÅÏȼ¶£¬ÄÚºËÔÊÐíÒ»¸öÈÎÎñÔËÐÐÊÂÏÈÈ·¶¨µÄÒ»¶Îʱ¼ä£¬½Ð×öʱ¼ä¶î¶È£¨quantum£©£¬È»ºóÇл»¸øÁíÒ»¸öÈÎÎñ¡£Ò²½Ð×öʱ¼äƬµ÷¶È¡£ÄÚºËÔÚÂú×ãÒÔÏÂÌõ¼þʱ£¬°ÑCPU¿ØÖÆÈ¨½»¸øÏÂÒ»¸öÈÎÎñ¾ÍÐ÷̬µÄÈÎÎñ£º
l µ±Ç°ÈÎÎñÒÑÎÞÊ¿É×ö
l µ±Ç°ÈÎÎñÔÚʱ¼äƬ»¹Ã»½áÊøÊ±ÒѾ­Íê³ÉÁË¡£
Ŀǰ£¬¦ÌC/OS-¢ò²»Ö§³Öʱ¼äƬÂÖ·¬µ÷¶È·¨¡£Ó¦ÓóÌÐòÖи÷ÈÎÎñµÄÓÅÏȼ¶±ØÐ뻥²»Ïàͬ¡£
2.13 ÈÎÎñÓÅÏȼ¶
ÿ¸öÈÎÎñ¶¼ÓÐÆäÓÅÏȼ¶¡£ÈÎÎñÔ½ÖØÒª£¬¸³ÓèµÄÓÅÏȼ¶Ó¦Ô½¸ß¡£
2.14 2.14¾²Ì¬ÓÅÏȼ¶
Ó¦ÓóÌÐòÖ´Ðйý³ÌÖÐÖîÈÎÎñÓÅÏȼ¶²»±ä£¬Ôò³ÆÖ®Îª¾²Ì¬ÓÅÏȼ¶¡£ÔÚ¾²Ì¬ÓÅÏȼ¶ÏµÍ³ÖУ¬ÖîÈÎÎñÒÔ¼°ËüÃǵÄʱ¼äÔ¼ÊøÔÚ³ÌÐò±àÒëʱÊÇÒÑÖªµÄ¡£
2.15 ¶¯Ì¬ÓÅÏȼ¶
Ó¦ÓóÌÐòÖ´Ðйý³ÌÖУ¬ÈÎÎñµÄÓÅÏȼ¶ÊǿɱäµÄ£¬Ôò³ÆÖ®Îª¶¯Ì¬ÓÅÏȼ¶¡£ÊµÊ±ÄÚºËÓ¦µ±±ÜÃâ³öÏÖÓÅÏȼ¶·´×ªÎÊÌâ¡£
2.16 ÓÅÏȼ¶·´×ª
ʹÓÃʵʱÄÚºË,ÓÅÏȼ¶·´×ªÎÊÌâÊÇʵʱϵͳÖгöÏÖµÃ×î¶àµÄÎÊÌ⡣ͼ2.7½âÊÍÓÅÏȼ¶·´×ªÊÇÈçºÎ³öÏֵġ£Èçͼ£¬ÈÎÎñ1ÓÅÏȼ¶¸ßÓÚÈÎÎñ2£¬ÈÎÎñ2ÓÅÏȼ¶¸ßÓÚÈÎÎñ3¡£ÈÎÎñ1ºÍÈÎÎñ2´¦ÓÚ¹ÒÆð״̬£¬µÈ´ýijһʼþµÄ·¢Éú£¬ÈÎÎñ3ÕýÔÚÔËÐÐÈç[ͼ2.7(1)]¡£´Ëʱ£¬ÈÎÎñ3ҪʹÓÃÆä¹²Ïí×ÊÔ´¡£Ê¹Óù²Ïí×ÊԴ֮ǰ£¬Ê×ÏȱØÐëµÃµ½¸Ã×ÊÔ´µÄÐźÅÁ¿(Semaphore)(¼û2. 18.04ÐźÅÁ¿)¡£ÈÎÎñ3µÃµ½Á˸ÃÐźÅÁ¿£¬²¢¿ªÊ¼Ê¹Óøù²Ïí×ÊÔ´[ͼ2.7£¨2£©]¡£ÓÉÓÚÈÎÎñ1ÓÅÏȼ¶¸ß£¬ËüµÈ´ýµÄʼþµ½À´Ö®ºó°þ¶áÁËÈÎÎñ3µÄCPUʹÓÃȨ[ͼ2.7(3)]£¬ÈÎÎñ1¿ªÊ¼ÔËÐÐ[ͼ2.7(4)]¡£ÔËÐйý³ÌÖÐÈÎÎñ1ҲҪʹÓÃÄǸöÈÎÎñ3ÕýÔÚʹÓÃ×ŵÄ×ÊÔ´£¬ÓÉÓÚ¸Ã×ÊÔ´µÄÐźÅÁ¿»¹±»ÈÎÎñ3Õ¼ÓÃ×Å£¬ÈÎÎñ1Ö»ÄܽøÈë¹ÒÆð״̬£¬µÈ´ýÈÎÎñ3ÊͷŸÃÐźÅÁ¿[ͼ2.7(5)]¡£ÈÎÎñ3µÃÒÔ¼ÌÐøÔËÐÐ[ͼ2.7(6)]¡£ÓÉÓÚÈÎÎñ2µÄÓÅÏȼ¶¸ßÓÚÈÎÎñ3£¬µ±ÈÎÎñ2µÈ´ýµÄʼþ·¢Éúºó£¬ÈÎÎñ2°þ¶áÁËÈÎÎñ3µÄCPUµÄʹÓÃȨ[ͼ2.7(7)]²¢¿ªÊ¼ÔËÐС£´¦ÀíËü¸Ã´¦ÀíµÄʼþ[ͼ2.7(8)]£¬Ö±µ½´¦ÀíÍêÖ®ºó½«CPU¿ØÖÆÈ¨»¹¸øÈÎ3[ͼ2.7(9)]¡£ÈÎÎñ3½Ó×ÅÔËÐÐ[ͼ2.7(10)]£¬Ö±µ½ÊÍ·ÅÄǸö¹²Ïí×ÊÔ´µÄÐźÅÁ¿[ͼ27(11)]¡£Ö±µ½´Ëʱ,ÓÉÓÚʵʱÄÚºËÖªµÀÓиö¸ßÓÅÏȼ¶µÄÈÎÎñÔڵȴýÕâ¸öÐźÅÁ¿£¬ÄÚºË×öÈÎÎñÇл»£¬Ê¹ÈÎÎñ1µÃµ½¸ÃÐźÅÁ¿²¢½Ó×ÅÔËÐÐ[ͼ2.7(12)]¡£
ÔÚÕâÖÖÇé¿öÏÂ,ÈÎÎñ1ÓÅÏȼ¶Êµ¼ÊÉϽµµ½ÁËÈÎÎñ3 µÄÓÅÏȼ¶Ë®Æ½¡£ÒòΪÈÎÎñ1ÒªµÈ,Ö±µÈµ½ÈÎÎñ3ÊÍ·ÅÕ¼ÓеÄÄǸö¹²Ïí×ÊÔ´¡£ÓÉÓÚÈÎÎñ2°þ¶áÈÎÎñ3µÄCPUʹÓÃȨ,ʹÈÎÎñ1µÄ×´¿ö¸ü¼Ó¶ñ»¯,ÈÎÎñ2ʹÈÎÎñ1Ôö¼ÓÁ˶îÍâµÄÑÓ³Ùʱ¼ä¡£ÈÎÎñ1ºÍÈÎÎñ2µÄÓÅÏȼ¶·¢ÉúÁË·´×ª¡£
¾ÀÕýµÄ·½·¨¿ÉÒÔÊÇ,ÔÚÈÎÎñ3ʹÓù²Ïí×ÊԴʱ,ÌáÉýÈÎÎñ3µÄÓÅÏȼ¶¡£ÈÎÎñÍê³ÉʱÓèÒÔ»Ö¸´¡£ÈÎÎñ3µÄÓÅÏȼ¶±ØÐëÉýÖÁ×î¸ß,¸ßÓÚÔÊÐíʹÓøÃ×ÊÔ´µÄÈκÎÈÎÎñ¡£¶àÈÎÎñÄÚºËÓ¦ÔÊÐí¶¯Ì¬¸Ä±äÈÎÎñµÄÓÅÏȼ¶ÒÔ±ÜÃâ·¢ÉúÓÅÏȼ¶·´×ªÏÖÏó¡£È»¶ø¸Ä±äÈÎÎñµÄÓÅÏȼ¶ÊǺܻ¨Ê±¼äµÄ¡£Èç¹ûÈÎÎñ3²¢Ã»ÓÐÏȱ»ÈÎÎñ1°þ¶áCPUʹÓÃȨ£¬ÓÖ±»ÈÎÎñ2ÇÀ×ßÁËCPUʹÓÃȨ,»¨ºÜ¶àʱ¼äÔÚ¹²Ïí×ÊԴʹÓÃǰÌáÉýÈÎÎñ3µÄÓÅÏȼ¶,È»ºóÓÖÔÚ×ÊԴʹÓúó»¨Ê±¼ä»Ö¸´ÈÎÎñ3µÄÓÅÏȼ¶,ÔòÎÞÐÎÖÐÀË·ÑÁ˺ܶàCPUʱ¼ä¡£ÕæÕýÐèÒªµÄÊÇ,Ϊ·ÀÖ¹·¢ÉúÓÅÏȼ¶·´×ª,ÄÚºËÄÜ×Ô¶¯±ä»»ÈÎÎñµÄÓÅÏȼ¶,Õâ½Ð×öÓÅÏȼ¶¼Ì³Ð(Priority inheritance)µ«¦ÌC/OS-¢ò²»Ö§³ÖÓÅÏȼ¶¼Ì³Ð,һЩÉÌÒµÄÚºËÓÐÓÅÏȼ¶¼Ì³Ð¹¦ÄÜ¡£
 

[´ËÌù×ÓÒѾ­±»×÷ÕßÓÚ2005-11-28 16:39:10±à¼­¹ý]

ÎҵIJ©¿Í:http://blog.eccn.com/u/qianmin/index.htm
¾²¾²µÈ´ý´ºÌìµÄµ½À´!¡¡
ͼ2.7ÓÅÏȼ¶·´×ªÎÊÌâ
ͼ2.8½âÊÍÈç¹ûÄÚºËÖ§³ÖÓÅÏȼ¶¼Ì³ÐµÄ»°,ÔÚÉÏÊöÀý×ÓÖлáÊÇÔõÑùÒ»¸ö¹ý³Ì¡£ÈÎÎñ3ÔÚÔËÐÐ[ͼ2.8(1)],ÈÎÎñ3ÉêÇëÐźÅÁ¿ÒÔ»ñµÃ¹²Ïí×ÊԴʹÓÃȨ[ͼ2.8(2)],ÈÎÎñ3µÃµ½²¢¿ªÊ¼Ê¹Óù²Ïí×ÊÔ´[ͼ2.8(3)]¡£ºóÀ´CPUʹÓÃȨ±»ÈÎÎñ1°þ¶á[ͼ2.8(4)],ÈÎÎñ1¿ªÊ¼ÔËÐÐ[ͼ2.8(5)],ÈÎÎñ1ÉêÇë¹²Ïí×ÊÔ´ÐźÅÁ¿[ͼ2.8(6)]¡£´Ëʱ,ÄÚºËÖªµÀ¸ÃÐźÅÁ¿±»ÈÎÎñ3Õ¼ÓÃÁË,¶øÈÎÎñ3µÄÓÅÏȼ¶±ÈÈÎÎñ1µÍ,ÄÚºËÓÚÊǽ«ÈÎÎñ3µÄÓÅÏȼ¶ÉýÖÁÓëÈÎÎñ1Ò»Ñù,,È»¶ø»Øµ½ÈÎÎñ3¼ÌÐøÔËÐÐ,ʹÓøù²Ïí×ÊÔ´[ͼ2.7(7)],Ö±µ½ÈÎÎñ3ÊͷʲÏí×ÊÔ´ÐźÅÁ¿[ͼ2¡£8(8)]¡£Õâʱ,Äں˻ָ´ÈÎÎñ3±¾À´µÄÓÅÏȼ¶²¢°ÑÐźÅÁ¿½»¸øÈÎÎñ1,ÈÎÎñ1µÃÒÔ˳ÀûÔËÐС£ [ͼ2.8(9)],ÈÎÎñ1Íê³ÉÒÔºó[ͼ2.8(10)]ÄÇЩÈÎÎñÓÅÏȼ¶ÔÚÈÎÎñ1ÓëÈÎÎñ3Ö®¼äµÄÈÎÎñÀýÈçÈÎÎñ2²ÅÄܵõ½CPUʹÓÃȨ,²¢¿ªÊ¼ÔËÐР[ͼ2.8(11)]¡£×¢Òâ,ÈÎÎñ2ÔÚ´Ó[ͼ2.8(3)]µ½[ͼ2.8(10)]µÄÈκÎÒ»¿Ì¶¼ÓпÉÄܽøÈë¾ÍÐ÷̬,²¢²»Ó°ÏìÈÎÎñ1¡¢ÈÎÎñ3µÄÍê³É¹ý³Ì¡£ÔÚijÖ̶ֳÈÉÏ,ÈÎÎñ2ºÍÈÎÎñ3Ö®¼äÒ²»¹ÊÇÓв»¿É±ÜÃâµÄÓÅÏȼ¶·´×ª¡£
 
ͼ2.8
2.17 ÈÎÎñÓÅÏȼ¶·ÖÅä
¸øÈÎÎñ¶¨ÓÅÏȼ¶¿É²»ÊǼþСÊ£¬ÒòΪʵʱϵͳÏ൱¸´ÔÓ¡£Ðí¶àϵͳÖУ¬²¢·ÇËùÓеÄÈÎÎñ¶¼ÖÁ¹ØÖØÒª¡£²»ÖØÒªµÄÈÎÎñ×ÔÈ»ÓÅÏȼ¶¿ÉÒÔµÍһЩ¡£ÊµÊ±ÏµÍ³´ó¶à×ÛºÏÁËÈíʵʱºÍӲʵʱÕâÁ½ÖÖÐèÇó¡£ÈíʵʱϵͳֻÊÇÒªÇóÈÎÎñÖ´Ðеþ¡Á¿¿ì£¬²¢²»ÒªÇóÔÚÄ³Ò»ÌØ¶¨Ê±¼äÄÚÍê³É¡£Ó²ÊµÊ±ÏµÍ³ÖУ¬ÈÎÎñ²»µ«ÒªÖ´ÐÐÎÞÎ󣬻¹Òª×¼Ê±Íê³É¡£
Ò»ÏîÓÐÒâ˼µÄ¼¼Êõ¿É³ÆÖ®Îªµ¥µ÷Ö´ÐÐÂʵ÷¶È·¨RMS(Rate Monotonic Scheduling),ÓÃÓÚ·ÖÅäÈÎÎñÓÅÏȼ¶¡£ÕâÖÖ·½·¨»ùÓÚÄĸöÈÎÎñÖ´ÐеĴÎÊý×îÆµ·±,Ö´ÐÐ×îÆµ·±µÄÈÎÎñÓÅÏȼ¶×î¸ß¡£¼ûͼ2.9¡£

ͼ2.9 »ùÓÚÈÎÎñÖ´ÐÐÆµ·±¶ÈµÄÓÅÏȼ¶·ÖÅä·¨

ÈÎÎñÖ´ÐÐÆµ·±¶È£¨Hz£©
RMS×öÁËһϵÁмÙÉ裺
l ËùÓÐÈÎÎñ¶¼ÊÇÖÜÆÚÐÔµÄ
l ÈÎÎñ¼ä²»ÐèҪͬ²½£¬Ã»Óй²Ïí×ÊÔ´,ûÓÐÈÎÎñ¼äÊý¾Ý½»»»µÈÎÊÌâ
l CPU±ØÐë×ÜÊÇÖ´ÐÐÄǸöÓÅÏȼ¶×î¸ßÇÒ´¦ÓÚ¾ÍÐ÷̬µÄÈÎÎñ¡£»»¾ä»°Ëµ£¬ÒªÊ¹Óÿɰþ¶áÐ͵÷¶È·¨¡£
¸ø³öһϵÁÐnÖµ±íʾϵͳÖеIJ»Í¬ÈÎÎñÊý£¬ÒªÊ¹ËùÓеÄÈÎÎñÂú×ãӲʵʱÌõ¼þ£¬±ØÐëʹ²»µÈʽ[2.1]³ÉÁ¢£¬Õâ¾ÍÊÇRMS¶¨Àí£º

[2.1] 

ÕâÀïEiÊÇÈÎÎñi×ִÐÐʱ¼ä£¬TiÊÇÈÎÎñiµÄÖ´ÐÐÖÜÆÚ¡£»»¾ä»°Ëµ£¬Ei/TiÊÇÈÎÎñiËùÐèµÄCPUʱ¼ä¡£±í2.1¸ø³ön(21/n - 1 )µÄÖµ£¬nÊÇϵͳÖеÄÈÎÎñÊý¡£¶ÔÓÚÎÞÇî¶à¸öÈÎÎñ£¬¼«ÏÞÖµÊÇ  »ò0.693¡£Õâ¾ÍÒâζ×Å£¬»ùÓÚRMS£¬ÒªÈÎÎñ¶¼Âú×ãӲʵʱÌõ¼þ£¬ËùÓÐÓÐʱ¼äÌõ¼þÒªÇóµÄÈÎÎñi×ܵÄCPUÀûÓÃʱ¼äӦСÓÚ70%£¡Çë×¢Ò⣬ÕâÊÇÖ¸ÓÐʱ¼äÌõ¼þÒªÇóµÄÈÎÎñ£¬ÏµÍ³Öе±È»»¹¿ÉÒÔÓжÔʱ¼äûÓÐʲôҪÇóµÄÈÎÎñ£¬Ê¹µÃCPUµÄÀûÓÃÂÊ´ïµ½100%¡£Ê¹CPUÀûÓÃÂÊ´ïµ½100%²¢²»ºÃ£¬ÒòΪÄÇÑùµÄ»°³ÌÐò¾ÍûÓÐÁËÐ޸ĵÄÓàµØ£¬Ò²Ã»·¨Ôö¼Óй¦ÄÜÁË¡£×÷ΪϵͳÉè¼ÆµÄÒ»ÌõÔ­Ôò£¬CPUÀûÓÃÂÊӦСÓÚ60%µ½70%¡£
    RMSÈÏΪ×î¸ßÖ´ÐÐÂʵÄÈÎÎñ¾ßÓÐ×î¸ßµÄÓÅÏȼ¶£¬µ«×îijЩÇé¿öÏ£¬×î¸ßÖ´ÐÐÂʵÄÈÎÎñ²¢·ÇÊÇ×îÖØÒªµÄÈÎÎñ¡£Èç¹ûʵ¼ÊÓ¦Óö¼ÕæµÄÏñRMS˵µÄÄÇÑù£¬Ò²¾ÍûÓÐʲôÓÅÏȼ¶·ÖÅä¿ÉÌÖÂÛÁË¡£È»¶øÌÖÂÛÓÅÏȼ¶·ÖÅäÎÊÌ⣬RMSÎÞÒÉÊÇÒ»¸öÓÐÒâ˼µÄÆðµã¡£

±í2.1»ùÓÚÈÎÎñµ½CPU×î¸ßÔÊÐíʹÓÃÂÊ.
ÈÎÎñÊý n(21/n - 1)
1 1.000
2 0.828
3 0.779
4 0.756
5 0.743
. .
. .
. .
¡Þ 0.693

2.18 »¥³âÌõ¼þ
ʵÏÖÈÎÎñ¼äͨѶ×î¼ò±ãµ½°ì·¨ÊÇʹÓù²ÏíÊý¾Ý½á¹¹¡£ÌرðÊǵ±ËùÓе½ÈÎÎñ¶¼ÔÚÒ»¸öµ¥Ò»µØÖ·¿Õ¼äÏ£¬ÄÜʹÓÃÈ«³Ì±äÁ¿¡¢Ö¸Õë¡¢»º³åÇø¡¢Á´±í¡¢Ñ­»·»º³åÇøµÈ£¬Ê¹Óù²ÏíÊý¾Ý½á¹¹Í¨Ñ¶¾Í¸üΪÈÝÒס£ËäÈ»¹²ÏíÊý¾ÝÇø·¨¼ò»¯ÁËÈÎÎñ¼äµÄÐÅÏ¢½»»»£¬µ«ÊDZØÐ뱣֤ÿ¸öÈÎÎñÔÚ´¦Àí¹²ÏíÊý¾ÝʱµÄÅÅËüÐÔ£¬ÒÔ±ÜÃ⾺ÕùºÍÊý¾ÝµÄÆÆ»µ¡£Óë¹²Ïí×ÊÔ´´ò½»µÀʱ£¬Ê¹Ö®Âú×㻥³âÌõ¼þ×îÒ»°ãµÄ·½·¨ÓУº
l ¹ØÖжÏ
l ʹÓòâÊÔ²¢ÖÃλָÁî
l ½ûÖ¹×öÈÎÎñÇл»
l ÀûÓÃÐźÅÁ¿

[´ËÌù×ÓÒѾ­±»×÷ÕßÓÚ2005-11-28 16:39:58±à¼­¹ý]

ÎҵIJ©¿Í:http://blog.eccn.com/u/qianmin/index.htm
¾²¾²µÈ´ý´ºÌìµÄµ½À´!¡¡
2.18.1 ¹ØÖжϺͿªÖжÏ
´¦Àí¹²ÏíÊý¾Ýʱ±£Ö¤»¥³â£¬×î¼ò±ã¿ì½ÝµÄ°ì·¨ÊǹØÖжϺͿªÖжϡ£ÈçʾÒâÐÔ´úÂë³ÌÐò2.3Ëùʾ£º

³ÌÐòÇåµ¥2.3    ¹ØÖжϺͿªÖжÏ
Disable interrupts;                                           /*¹ØÖжÏ*/
Access the resource (read/write from/to variables);     /*¶Á/д±äÁ¿*/
Reenable interrupts;                                         /*ÖØÐÂÔÊÐíÖжÏ*/

¡¡¡¡¦ÌC/OS-¢òÔÚ´¦ÀíÄÚ²¿±äÁ¿ºÍÊý¾Ý½á¹¹Ê±¾ÍÊÇʹÓõÄÕâÖÖÊֶΣ¬¼´Ê¹²»ÊÇÈ«²¿£¬Ò²ÊǾø´ó²¿·Ö¡£Êµ¼ÊÉϦÌC/OS-¢òÌṩÁ½¸öºêµ÷Óã¬ÔÊÐíÓû§ÔÚÓ¦ÓóÌÐòµÄC´úÂëÖйØÖжÏÈ»ºóÔÙ¿ªÖжϣºOS_ENTER_CRITICAL()ºÍOS_EXIT_CRITICAL()[²Î¼û8.03.02 OS_ENTER_CRITICAL()ºÍOS_EXIT_CRITICALL()],ÕâÁ½¸öºêµ÷ÓõÄʹÓ÷¨¼û³ÌÐò2.4

³ÌÐòÇåµ¥2.4ÀûÓæÌC/OS_¢ò ºêµ÷ÓùØÖжϺͿªÖжÏ
void Function (void)
{
¡¡¡¡OS_ENTER_CRITICAL();
¡¡¡¡.
¡¡¡¡.    /*ÔÚÕâÀï´¦Àí¹²ÏíÊý¾Ý*/
¡¡¡¡.
¡¡¡¡OS_EXIT_CRITICAL();
}


¿ÉÊÇ£¬±ØÐëÊ®·ÖСÐÄ£¬¹ØÖжϵÄʱ¼ä²»ÄÜÌ«³¤¡£ÒòΪËüÓ°ÏìÕû¸öϵͳµÄÖжÏÏìӦʱ¼ä£¬¼´ÖжÏÑÓ³Ùʱ¼ä¡£µ±¸Ä±ä»ò¸´ÖÆÄ³¼¸¸ö±äÁ¿µÄֵʱ£¬Ó¦Ïëµ½ÓÃÕâÖÖ·½·¨À´×ö¡£ÕâÒ²ÊÇÔÚÖжϷþÎñ×Ó³ÌÐòÖд¦Àí¹²Ïí±äÁ¿»ò¹²ÏíÊý¾Ý½á¹¹µÄΨһ·½·¨¡£ÔÚÈκÎÇé¿öÏ£¬¹ØÖжϵÄʱ¼ä¶¼Òª¾¡Á¿¶Ì¡£
Èç¹ûʹÓÃijÖÖʵʱÄںˣ¬Ò»°ãµØËµ£¬¹ØÖжϵÄ×ʱ¼ä²»³¬¹ýÄں˱¾ÉíµÄ¹ØÖжÏʱ¼ä£¬¾Í²»»áÓ°ÏìϵͳÖжÏÑÓ³Ù¡£µ±È»µÃÖªµÀÄÚºËÀïÖжϹØÁ˶à¾Ã¡£·²ºÃµÄʵʱÄںˣ¬³§É̶¼ÌṩÕâ·½ÃæµÄÊý¾Ý¡£×ܶøÑÔÖ®£¬ÒªÏë³öÊÛʵʱÄںˣ¬Ê±¼äÌØÐÔ×îÖØÒª¡£
2.18.2 ²âÊÔ²¢ÖÃλ
Èç¹û²»Ê¹ÓÃʵʱÄںˣ¬µ±Á½¸öÈÎÎñ¹²ÏíÒ»¸ö×ÊԴʱ£¬Ò»¶¨ÒªÔ¼¶¨ºÃ£¬ÏȲâÊÔijһȫ³Ì±äÁ¿£¬Èç¹û¸Ã±äÁ¿ÊÇ0£¬ÔÊÐí¸ÃÈÎÎñÓë¹²Ïí×ÊÔ´´ò½»µÀ¡£Îª·ÀÖ¹ÁíÒ»ÈÎÎñҲҪʹÓøÃ×ÊÔ´£¬Ç°ÕßÖ»Òª¼òµ¥µØ½«È«³Ì±äÁ¿ÖÃΪ1£¬Õâͨ³£³Æ×÷²âÊÔ²¢ÖÃλ(Test-And-Set),»ò³Æ×÷TAS¡£TAS²Ù×÷¿ÉÄÜÊÇ΢´¦ÀíÆ÷µÄµ¥¶ÀÒ»Ìõ²»»á±»ÖжϵÄÖ¸Á»òÕßÊÇÔÚ³ÌÐòÖйØÖжÏ×öTAS²Ù×÷ÔÙ¿ªÖжϣ¬Èç³ÌÐòÇåµ¥2.5Ëùʾ¡£

³ÌÐòÇåµ¥2.5 ÀûÓòâÊÔ²¢ÖÃλ´¦Àí¹²Ïí×ÊÔ´
Disable interrupts;                              ¹ØÖжÏ
if (¡®Access Variable¡¯ is 0) {                  Èç¹û×ÊÔ´²»¿ÉÓ㬱ê־Ϊ0
¡¡¡¡Set variable to 1;                           ÖÃ×ÊÔ´²»¿ÉÓ㬱ê־Ϊ1
¡¡¡¡Reenable interrupts;                         ÖØ¿ªÖжÏ
¡¡¡¡Access the resource;                         ´¦Àí¸Ã×ÊÔ´
¡¡¡¡Disable interrupts;                          ¹ØÖжÏ
¡¡¡¡Set the ¡®Access Variable¡¯ back to 0;      Çå×ÊÔ´²»¿ÉʹÓ㬱ê־Ϊ0
¡¡¡¡Reenable interrupts;                         ÖØÐ¿ªÖжÏ
} else {                                            ·ñÔò
¡¡¡¡Reenable interrupts;                          ¿ªÖжÏ
/* You don¡¯t have access to the resource, try back later; *//* ×ÊÔ´²»¿ÉʹÓã¬ÒÔºóÔÙÊÔ; */
}

ÓеÄ΢´¦ÀíÆ÷ÓÐÓ²¼þµÄTASÖ¸Áî(ÈçMotorola 68000ϵÁÐ,¾ÍÓÐÕâÌõÖ¸Áî)
2.18.3 ½ûÖ¹,È»ºóÔÊÐíÈÎÎñÇл»
Èç¹ûÈÎÎñ²»ÓëÖжϷþÎñ×Ó³ÌÐò¹²Ïí±äÁ¿»òÊý¾Ý½á¹¹,¿ÉÒÔʹÓýûÖ¹¡¢È»ºóÔÊÐíÈÎÎñÇл»¡£(²Î¼û3.06¸øÈÎÎñÇл»ÉÏËøºÍ¿ªËø)¡£Èç³ÌÐòÇåµ¥2.6Ëùʾ£¬ÒÔ¦ÌC/OS-¢òµÄʹÓÃΪÀý£¬Á½¸ö»òÁ½¸öÒÔÉϵÄÈÎÎñ¿ÉÒÔ¹²ÏíÊý¾Ý¶ø²»·¢Éú¾ºÕù¡£×¢Ò⣬´ËʱËäÈ»ÈÎÎñÇл»ÊǽûÖ¹ÁË£¬µ«Öжϻ¹ÊÇ¿ª×ŵġ£Èç¹ûÕâʱÖжÏÀ´ÁË£¬ÖжϷþÎñ×Ó³ÌÐò»áÔÚÕâÒ»ÁÙ½çÇøÄÚÁ¢¼´Ö´ÐС£ÖжϷþÎñ×Ó³ÌÐò½áÊøÊ±£¬¾¡¹ÜÓÐÓÅÏȼ¶¸ßµÄÈÎÎñÒѾ­½øÈë¾ÍÐ÷̬£¬Äں˻¹ÊÇ·µ»Øµ½Ô­À´±»ÖжÏÁ˵ÄÈÎÎñ¡£Ö±µ½Ö´ÐÐÍê¸øÈÎÎñÇл»¿ªËøº¯ÊýOSSchedUnlock (),ÄÚºËÔÙ¿´ÓÐûÓÐÓÅÏȼ¶¸ü¸ßµÄÈÎÎñ±»ÖжϷþÎñ×Ó³ÌÐò¼¤»î¶ø½øÈë¾ÍÐ÷̬£¬Èç¹ûÓУ¬Ôò×öÈÎÎñÇл»¡£ËäÈ»ÕâÖÖ·½·¨ÊÇ¿ÉÐе쬵«Ó¦¸Ã¾¡Á¿±ÜÃâ½ûÖ¹ÈÎÎñÇл»Ö®Àà²Ù×÷£¬ÒòΪÄÚºË×îÖ÷ÒªµÄ¹¦ÄܾÍÊÇ×öÈÎÎñµÄµ÷¶ÈÓëЭµ÷¡£½ûÖ¹ÈÎÎñÇл»ÏÔÈ»ÓëÄں˵ijõÖÔÏàÎ¥¡£Ó¦¸ÃʹÓÃÏÂÊö·½·¨¡£

³ÌÐòÇåµ¥2.6  ÓøøÈÎÎñÇл»ÉÏËø£¬È»ºó¿ªËøµÄ·½·¨ÊµÏÖÊý¾Ý¹²Ïí.
void Function (void)
{
¡¡¡¡OSSchedLock();
¡¡¡¡.
¡¡¡¡.    /* You can access shared data in here (interrupts are recognized) */
.    /*ÔÚÕâÀï´¦Àí¹²ÏíÊý¾Ý(ÖжÏÊÇ¿ª×ŵÄ)*/
¡¡¡¡OSSchedUnlock();
}

[´ËÌù×ÓÒѾ­±»×÷ÕßÓÚ2005-11-28 16:40:48±à¼­¹ý]

ÎҵIJ©¿Í:http://blog.eccn.com/u/qianmin/index.htm
¾²¾²µÈ´ý´ºÌìµÄµ½À´!¡¡
2.18.4 ÐźÅÁ¿(Semaphores)
ÐźÅÁ¿ÊÇ60Äê´úÖÐÆÚEdgser Dijkstra ·¢Ã÷µÄ¡£ÐźÅÁ¿Êµ¼ÊÉÏÊÇÒ»ÖÖÔ¼¶¨»úÖÆ£¬ÔÚ¶àÈÎÎñÄÚºËÖÐÆÕ±éʹÓÃ.ÐźÅÁ¿ÓÃÓÚ£º
l ¿ØÖƹ²Ïí×ÊÔ´µÄʹÓÃȨ(Âú×㻥³âÌõ¼þ)
l ±ê־ijʼþµÄ·¢Éú
l ʹÁ½¸öÈÎÎñµÄÐÐΪͬ²½
(ÒëÕß×¢£ºÐźÅÓëÐźÅÁ¿ÔÚÓ¢ÎÄÖж¼½Ð×öSemaphore£¬²¢²»¼ÓÒÔÇø·Ö£¬¶øËµËüÓÐÁ½ÖÖÀàÐÍ£¬¶þ½øÖÆÐÍ(binary)ºÍ¼ÆÊýÆ÷ÐÍ(counting)¡£±¾ÊéÖеĶþ½øÖÆÐÍÐźÅÁ¿Êµ¼ÊÉÏÊÇֻȡÁ½¸öÖµ0ºÍ1µÄÐźÅÁ¿¡£Êµ¼ÊÉÏ Õâ¸öÐźÅÁ¿Ö»ÓÐһ룬ÕâÖÖÐźÅÁ¿·­ÒëΪÐźŸüΪÌùÇС£¶ø¶þ½øÖÆÐźÅÁ¿Í¨³£Ö¸Èô¸ÉλµÄ×éºÏ¡£¶ø±¾ÊéÖнâÊÍΪʼþ±êÖ¾µÄÖÃλÓëÇå³ý(
¼û2.21))¡£
ÐźÅÏñÊÇÒ»°ÑÔ¿³×£¬ÈÎÎñÒªÔËÐÐÏÂÈ¥£¬µÃÏÈÄõ½Õâ°ÑÔ¿³×¡£Èç¹ûÐźÅÒѱ»±ðµÄÈÎÎñÕ¼Ó㬸ÃÈÎÎñÖ»µÃ±»¹ÒÆð£¬Ö±µ½Ðźű»µ±Ç°Ê¹ÓÃÕßÊÍ·Å¡£»»¾ä»°Ëµ£¬ÉêÇëÐźŵÄÈÎÎñÊÇÔÚ˵£º¡°°ÑÔ¿³×¸øÎÒ£¬Èç¹ûË­ÕýÔÚÓÃ×Å£¬ÎÒÖ»ºÃµÈ£¡¡±ÐźÅÊÇÖ»ÓÐÁ½¸öÖµµÄ±äÁ¿£¬ÐźÅÁ¿ÊǼÆÊýʽµÄ¡£Ö»È¡Á½¸öÖµµÄÐźÅÊÇÖ»ÓÐÁ½¸öÖµ0ºÍ1µÄÁ¿£¬Òò´ËÒ²³ÆÖ®ÎªÐźÅÁ¿¡£¼ÆÊýʽÐźÅÁ¿µÄÖµ¿ÉÒÔÊÇ0µ½255»ò0µ½65535£¬»ò0µ½4294967295£¬È¡¾öÓÚÐźÅÁ¿¹æÔ¼»úÖÆÊ¹ÓõÄÊÇ8λ¡¢16λ»¹ÊÇ32λ¡£µ½µ×ÊǼ¸Î»£¬Êµ¼ÊÉÏÊÇÈ¡¾öÓÚÓõÄÄÄÖÖÄںˡ£¸ù¾ÝÐźÅÁ¿µÄÖµ£¬Äں˸ú×ÙÄÇЩµÈ´ýÐźÅÁ¿µÄÈÎÎñ¡£
Ò»°ãµØËµ£¬¶ÔÐźÅÁ¿Ö»ÄÜʵʩÈýÖÖ²Ù×÷£º³õʼ»¯(INITIALIZE)£¬Ò²¿É³Æ×÷½¨Á¢(CREATE)£»µÈÐźÅ(WAIT)Ò²¿É³Æ×÷¹ÒÆð(PEND)£»¸øÐźÅ(SIGNAL)»ò·¢ÐźÅ(POST)¡£ÐźÅÁ¿³õʼ»¯Ê±Òª¸øÐźÅÁ¿¸³³õÖµ£¬µÈ´ýÐźÅÁ¿µÄÈÎÎñ±í(Waiting list)Ó¦ÇåΪ¿Õ¡£
ÏëÒªµÃµ½ÐźÅÁ¿µÄÈÎÎñÖ´Ðеȴý(WAIT)²Ù×÷¡£Èç¹û¸ÃÐźÅÁ¿ÓÐЧ(¼´ÐźÅÁ¿Öµ´óÓÚ0)£¬ÔòÐźÅÁ¿Öµ¼õ1£¬ÈÎÎñµÃÒÔ¼ÌÐøÔËÐС£Èç¹ûÐźÅÁ¿µÄֵΪ0£¬µÈ´ýÐźÅÁ¿µÄÈÎÎñ¾Í±»ÁÐÈëµÈ´ýÐźÅÁ¿ÈÎÎñ±í¡£¶àÊýÄÚºËÔÊÐíÓû§¶¨ÒåµÈ´ý³¬Ê±£¬Èç¹ûµÈ´ýʱ¼ä³¬¹ýÁËijһÉ趨ֵʱ£¬¸ÃÐźÅÁ¿»¹ÊÇÎÞЧ£¬ÔòµÈ´ýÐźÅÁ¿µÄÈÎÎñ½øÈë¾ÍÐ÷̬׼±¸ÔËÐУ¬²¢·µ»Ø³ö´í´úÂë(Ö¸³ö·¢ÉúÁ˵ȴý³¬Ê±´íÎó)¡£
ÈÎÎñÒÔ·¢ÐźŲÙ×÷(SIGNAL)ÊÍ·ÅÐźÅÁ¿¡£Èç¹ûûÓÐÈÎÎñÔڵȴýÐźÅÁ¿£¬ÐźÅÁ¿µÄÖµ½ö½öÊǼòµ¥µØ¼Ó1¡£Èç¹ûÓÐÈÎÎñÔڵȴý¸ÃÐźÅÁ¿£¬ÄÇô¾Í»áÓÐÒ»¸öÈÎÎñ½øÈë¾ÍÐ÷̬£¬ÐźÅÁ¿µÄÖµÒ²¾Í²»¼Ó1¡£ÓÚÊÇÔ¿³×¸øÁ˵ȴýÐźÅÁ¿µÄÖîÈÎÎñÖеÄÒ»¸öÈÎÎñ¡£ÖÁÓÚ¸øÁËÄǸöÈÎÎñ£¬Òª¿´ÄÚºËÊÇÈçºÎµ÷¶ÈµÄ¡£ÊÕµ½ÐźÅÁ¿µÄÈÎÎñ¿ÉÄÜÊÇÒÔÏÂÁ½ÕßÖ®Ò»¡£
l µÈ´ýÐźÅÁ¿ÈÎÎñÖÐÓÅÏȼ¶×î¸ßµÄ£¬»òÕßÊÇ
l ×îÔ翪ʼµÈ´ýÐźÅÁ¿µÄÄǸöÈÎÎñ£¬¼´°´ÏȽøÏȳöµÄÔ­Ôò(First In First Out £¬FIFO)
ÓеÄÄÚºËÓÐÑ¡ÔñÏÔÊÐíÓû§ÔÚÐźÅÁ¿³õʼ»¯Ê±Ñ¡¶¨ÉÏÊöÁ½ÖÖ·½·¨ÖеÄÒ»ÖÖ¡£µ«¦ÌC/OS-¢òÖ»Ö§³ÖÓÅÏȼ¶·¨¡£Èç¹û½øÈë¾ÍÐ÷̬µÄÈÎÎñ±Èµ±Ç°ÔËÐеÄÈÎÎñÓÅÏȼ¶¸ß(¼ÙÉ裬Êǵ±Ç°ÈÎÎñÊͷŵÄÐźÅÁ¿¼¤»îÁ˱È×Ô¼ºÓÅÏȼ¶¸ßµÄÈÎÎñ)¡£ÔòÄÚºË×öÈÎÎñÇл»(¼ÙÉ裬ʹÓõÄÊǿɰþ¶áÐÍÄÚºË)£¬¸ßÓÅÏȼ¶µÄÈÎÎñ¿ªÊ¼ÔËÐС£µ±Ç°ÈÎÎñ±»¹ÒÆð¡£Ö±µ½ÓÖ±ä³É¾ÍÐ÷̬ÖÐÓÅÏȼ¶×î¸ßÈÎÎñ¡£
³ÌÐòÇåµ¥2.7ʾÒâÔÚ¦ÌC/OS-¢òÖÐÈçºÎÓÃÐźÅÁ¿´¦Àí¹²ÏíÊý¾Ý¡£ÒªÓëͬһ¹²ÏíÊý¾Ý´ò½»µÀµÄÈÎÎñµ÷ÓõȴýÐźÅÁ¿º¯ÊýOSSemPend()¡£´¦ÀíÍê¹²ÏíÊý¾ÝÒÔºóÔÙµ÷ÓÃÊÍ·ÅÐźÅÁ¿º¯ÊýOSSemPost()¡£ÕâÁ½¸öº¯Êý½«ÔÚÒÔºóµÄÕ½ÚÖÐÃèÊö¡£Òª×¢ÒâµÄÊÇ£¬ÔÚʹÓÃÐźÅÁ¿Ö®Ç°£¬Ò»¶¨Òª¶Ô¸ÃÐźÅÁ¿×ö³õʼ»¯¡£×÷Ϊ»¥³âÌõ¼þ£¬ÐźÅÁ¿³õʼ»¯Îª1¡£Ê¹ÓÃÐźÅÁ¿´¦Àí¹²ÏíÊý¾Ý²»Ôö¼ÓÖжÏÑÓ³Ùʱ¼ä£¬Èç¹ûÖжϷþÎñ³ÌÐò»òµ±Ç°ÈÎÎñ¼¤»îÁËÒ»¸ö¸ßÓÅÏȼ¶µÄÈÎÎñ£¬¸ßÓÅÏȼ¶µÄÈÎÎñÁ¢¼´¿ªÊ¼Ö´ÐС£

³ÌÐòÇåµ¥2.7   Í¨¹ý»ñµÃÐźÅÁ¿´¦Àí¹²ÏíÊý¾Ý
OS_EVENT *SharedDataSem;
void Function (void)
{
¡¡¡¡INT8U err;
¡¡¡¡OSSemPend(SharedDataSem, 0, &err);
¡¡¡¡.
¡¡¡¡.    /* You can access shared data in here (interrupts are recognized) */
¡¡¡¡.    /*¹²ÏíÊý¾ÝµÄ´¦ÀíÔڴ˽øÐУ¬(ÖжÏÊÇ¿ª×ŵÄ)*/
¡¡¡¡OSSemPost(SharedDataSem);
}

µ±ÖîÈÎÎñ¹²ÏíÊäÈëÊä³öÉ豸ʱ£¬ÐźÅÁ¿ÌرðÓÐÓ᣿ÉÒÔÏëÏó£¬Èç¹ûÔÊÐíÁ½¸öÈÎÎñͬʱ¸ø´òÓ¡»úËÍÊý¾Ýʱ»á³öÏÖʲôÏÖÏó¡£´òÓ¡»ú»á´ò³öÏ໥½»²æµÄÁ½¸öÈÎÎñµÄÊý¾Ý¡£ÀýÈçÈÎÎñ1Òª´òÓ¡¡°I am Task!¡±£¬¶øÈÎÎñ2Òª´òÓ¡¡°I am Task2!¡±¿ÉÄÜ´òÓ¡³öÀ´µÄ½á¹ûÊÇ£º¡°I Ia amm T Tasask k1!2!¡±
ÔÚÕâÖÖÇé¿öÏ£¬Ê¹ÓÃÐźÅÁ¿²¢¸øÐźÅÁ¿¸³³õÖµ1(Óöþ½øÖÆÐźÅÁ¿)¡£¹æÔòºÜ¼òµ¥£¬ÒªÏëʹÓôòÓ¡»úµÄÈÎÎñ£¬ÏÈÒªµÃµ½¸Ã×ÊÔ´µÄÐźÅÁ¿¡£Í¼2.10Á½¸öÈÎÎñ¾ºÕùµÃµ½ÅÅËüÐÔ´òÓ¡»úʹÓÃȨ£¬Í¼ÖÐÐźÅÁ¿ÓÃÒ»°ÑÔ¿³×±íʾ£¬ÏëʹÓôòÓ¡»úÏÈÒªµÃµ½Õâ°ÑÔ¿³×¡£
 
ͼ2.10ÓûñÈ¡ÐźÅÁ¿À´µÃµ½´òÓ¡»úʹÓÃȨ

[´ËÌù×ÓÒѾ­±»×÷ÕßÓÚ2005-11-28 16:41:42±à¼­¹ý]

ÎҵIJ©¿Í:http://blog.eccn.com/u/qianmin/index.htm
¾²¾²µÈ´ý´ºÌìµÄµ½À´!¡¡
ÉÏÀýÖУ¬Ã¿¸öÈÎÎñ¶¼ÖªµÀÓиöÐźűíʾ×ÊÔ´¿É²»¿ÉÒÔʹÓá£ÒªÏëʹÓøÃ×ÊÔ´£¬ÒªÏȵõ½Õâ¸öÐźš£È»¶øÓÐЩÇé¿öÏ£¬×îºÃ°ÑÐźÅÁ¿²ØÆðÀ´£¬¸÷¸öÈÎÎñÔÚͬijһ×ÊÔ´´ò½»µÀʱ£¬²¢²»ÖªµÀʵ¼ÊÉÏÊÇÔÚÉêÇëµÃµ½Ò»¸öÐźÅÁ¿¡£ÀýÈ磬¶àÈÎÎñ¹²ÏíÒ»¸öRS-232CÍâÉè½Ó¿Ú£¬¸÷ÈÎÎñÒªËÍÃüÁî¸ø½Ó¿ÚÁíÒ»¶ËµÄÉ豸²¢½ÓÊÕ¸ÃÉ豸µÄ»ØÓ¦¡£Èçͼ2.11Ëùʾ¡£
µ÷ÓÃÏò´®Ðпڷ¢ËÍÃüÁîµÄº¯ÊýCommSendCmd()£¬¸Ãº¯ÊýÓÐÈý¸öÐÎʽ²ÎÊý£ºCmdÖ¸ÏòËͳöµÄASCIIÂë×Ö·û´®ÃüÁî¡£ResponseÖ¸ÏòÍâÉè»ØÓ¦µÄ×Ö·û´®¡£timeoutÖ¸É趨µÄʱ¼ä¼ä¸ô¡£Èç¹û³¬¹ýÕâ¶Îʱ¼äÍâÉ軹²»ÏìÓ¦£¬Ôò·µ»Ø³¬Ê±´íÎóÐÅÏ¢¡£º¯ÊýµÄʾÒâ´úÂëÈç³ÌÐòÇåµ¥2.8Ëùʾ¡£

³ÌÐòÇåµ¥ 2.8   Òþº¬µÄÐźÅÁ¿¡£
INT8U CommSendCmd(char *cmd, char *response, INT16U timeout)
{
¡¡¡¡Acquire port's semaphore;
¡¡¡¡Send command to device;
¡¡¡¡Wait for response (with timeout);
¡¡¡¡if (timed out) {
¡¡¡¡Release semaphore;
¡¡¡¡return (error code);
¡¡¡¡} else {
¡¡¡¡Release semaphore;
¡¡¡¡return (no error);
¡¡¡¡}
}

ÒªÏòÍâÉè·¢ËÍÃüÁîµÄÈÎÎñµÃµ÷ÓÃÉÏÊöº¯Êý¡£ÉèÐźÅÁ¿³õֵΪ1£¬±íʾÔÊÐíʹÓᣳõʼ»¯ÊÇÔÚͨѶ¿ÚÇý¶¯³ÌÐòµÄ³õʼ»¯²¿·ÖÍê³ÉµÄ¡£µÚÒ»¸öµ÷ÓÃCommSendCmd()º¯ÊýµÄÈÎÎñÉêÇë²¢µÃµ½ÁËÐźÅÁ¿£¬¿ªÊ¼ÏòÍâÉè·¢ËÍÃüÁî²¢µÈ´ýÏìÓ¦¡£¶øÁíÒ»¸öÈÎÎñÒ²ÒªËÍÃüÁ´ËʱÍâÉèÕý¡°Ã¦¡±£¬ÔòµÚ¶þ¸öÈÎÎñ±»¹ÒÆð£¬Ö±µ½¸ÃÐźÅÁ¿ÖØÐ±»ÊÍ·Å¡£µÚ¶þ¸öÈÎÎñ¿´ÆðÀ´Í¬µ÷ÓÃÁËÒ»¸öÆÕͨº¯ÊýÒ»Ñù£¬Ö»²»¹ýÕâ¸öº¯ÊýÔÚûÓÐÍê³ÉÆäÏàÓ¦¹¦ÄÜʱ²»·µ»Ø¡£µ±µÚÒ»¸öÈÎÎñÊÍ·ÅÁËÄǸöÐźÅÁ¿£¬µÚ¶þ¸öÈÎÎñµÃµ½Á˸ÃÐźÅÁ¿£¬µÚ¶þ¸öÈÎÎñ²ÅÄÜʹÓÃRS-232¿Ú¡£
 
ͼ2.11ÔÚÈÎÎñ¼¶¿´²»µ½Òþº¬µÄÐźÅÁ¿
¼ÆÊýʽÐźÅÁ¿ÓÃÓÚij×ÊÔ´¿ÉÒÔͬʱΪ¼¸¸öÈÎÎñËùÓá£ÀýÈ磬ÓÃÐźÅÁ¿¹ÜÀí»º³åÇøÕóÁÐ(buffer pool)£¬Èçͼ2.12Ëùʾ¡£»º³åÇøÕóÁÐÖй²ÓÐ10¸ö»º³åÇø£¬ÈÎÎñͨ¹ýµ÷ÓÃÉêÇ뻺³åÇøº¯ÊýBufReq()Ïò»º³åÇø¹ÜÀí·½ÉêÇëµÃµ½»º³åÇøÊ¹ÓÃȨ¡£µ±»º³åÇøÊ¹ÓÃȨ»¹²»ÔÙÐèҪʱ£¬Í¨¹ýµ÷ÓÃÊÍ·Å»º³åÇøº¯ÊýBufRel()½«»º³åÇø»¹¸ø¹Ü·½¡£º¯ÊýʾÒâÂëÈç³ÌÐòÇåµ¥2.9Ëùʾ


³ÌÐòÇåµ¥ 2.9   ÓÃÐźÅÁ¿¹ÜÀí»º³åÇø¡£
BUF *BufReq(void)
{
¡¡¡¡BUF *ptr;

¡¡¡¡Acquire a semaphore;
¡¡¡¡Disable interrupts;
¡¡¡¡ptr         = BufFreeList;
¡¡¡¡BufFreeList = ptr->BufNext;
¡¡¡¡Enable interrupts;
¡¡¡¡return (ptr);
}


void BufRel(BUF *ptr)
{
¡¡¡¡Disable interrupts;
¡¡¡¡ptr->BufNext = BufFreeList;
¡¡¡¡BufFreeList  = ptr;
¡¡¡¡Enable interrupts;
¡¡¡¡Release semaphore;
}
 

[´ËÌù×ÓÒѾ­±»×÷ÕßÓÚ2005-11-28 16:42:32±à¼­¹ý]

ÎҵIJ©¿Í:http://blog.eccn.com/u/qianmin/index.htm
¾²¾²µÈ´ý´ºÌìµÄµ½À´!¡¡
ͼ2.12 ¼ÆÊýʽÐźÅÁ¿µÄÓ÷¨
»º³åÇøÕóÁйÜÀí·½Âú×ãǰʮ¸öÉêÇ뻺³åÇøµÄÈÎÎñ£¬¾ÍºÃÏñÓÐ10°ÑÔ¿³×¿ÉÒÔ·¢¸øÖîÈÎÎñ¡£µ±ËùÓеÄÔ¿³×¶¼ÓÃÍêÁË£¬ÉêÇ뻺³åÇøµÄÈÎÎñ±»¹ÒÆð£¬Ö±µ½ÐźÅÁ¿ÖØÐ±äΪÓÐЧ¡£»º³åÇø¹ÜÀí³ÌÐòÔÚ´¦ÀíÁ´±íÖ¸Õëʱ£¬ÎªÂú×㻥³âÌõ¼þ£¬ÖжÏÊǹصôµÄ(ÕâÒ»²Ù×÷·Ç³£¿ì)¡£ÈÎÎñʹÓÃÍêijһ»º³åÇø£¬Í¨¹ýµ÷Óûº³åÇøÊͷź¯ÊýBufRel()½«»º³åÇø»¹¸øÏµÍ³¡£ÏµÍ³ÏȽ«¸Ã»º³åÇøÖ¸Õë²åÈëµ½¿ÕÏлº³åÇøÁ´±íÖÐ(Linked list)È»ºóÔÙ¸øÐźÅÁ¿¼Ó1»òÊͷŸÃÐźÅÁ¿¡£ÕâÒ»¹ý³ÌÒþº¬ÔÚ»º³åÇø¹ÜÀí³ÌÐòBufReq()ºÍBufRel()Ö®ÖУ¬µ÷ÓÃÕâÁ½¸öº¯ÊýµÄÈÎÎñ²»Óùܺ¯ÊýÄÚ²¿µÄÏêϸ¹ý³Ì¡£
ÐźÅÁ¿³£±»ÓùýÁËÍ·¡£´¦Àí¼òµ¥µÄ¹²Ïí±äÁ¿Ò²Ê¹ÓÃÐźÅÁ¿ÔòÊǶàÓàµÄ¡£ÇëÇóºÍÊÍ·ÅÐźÅÁ¿µÄ¹ý³ÌÊÇÒª»¨Ï൱µÄʱ¼äµÄ¡£ÓÐʱÕâÖÖ¶îÍâµÄ¸ººÉÊDz»±ØÒªµÄ¡£Óû§¿ÉÄÜÖ»ÐèÒª¹ØÖжϡ¢¿ªÖжÏÀ´´¦Àí¼òµ¥¹²Ïí±äÁ¿£¬ÒÔÌá¸ßЧÂÊ¡£(²Î¼û2.18.0.1 ¹ØÖжϺͿªÖжÏ)¡£¼ÙÈçÁ½¸öÈÎÎñ¹²ÏíÒ»¸ö32λµÄÕûÊý±äÁ¿£¬Ò»¸öÈÎÎñ¸øÕâ¸ö±äÁ¿¼Ó1£¬ÁíÒ»¸öÈÎÎñ¸øÕâ¸ö±äÁ¿Çå0¡£Èç¹û×¢Òâµ½²»¹ÜÄÄÖÖ²Ù×÷£¬¶Ô΢´¦ÀíÆ÷À´Ëµ£¬Ö»»¨¼«¶ÌµÄʱ¼ä£¬¾Í²»»áʹÓÃÐźÅÁ¿À´Âú×㻥³âÌõ¼þÁË¡£Ã¿¸öÈÎÎñÖ»Ðè²Ù×÷Õâ¸öÈÎÎñǰ¹ØÖжϣ¬Ö®ºóÔÙ¿ªÖжϾͿÉÒÔÁË¡£È»¶ø£¬Èç¹ûÕâ¸ö±äÁ¿ÊǸ¡µãÊý£¬¶øÏàӦ΢´¦ÀíÆ÷ÓÖûÓÐÓ²¼þµÄ¸¡µãЭ´¦ÀíÆ÷£¬¸¡µãÔËËãµÄʱ¼äÏ൱³¤£¬¹ØÖжÏʱ¼ä³¤ÁË»áÓ°ÏìÖжÏÑÓ³Ùʱ¼ä£¬ÕâÖÖÇé¿öϾÍÓбØÒªÊ¹ÓÃÐźÅÁ¿ÁË¡£
2.19 ËÀËø(»ò±§ËÀ)£¨Deadlock (or Deadly Embrace)£©
ËÀËøÒ²³Æ×÷±§ËÀ£¬Ö¸Á½¸öÈÎÎñÎÞÏÞÆÚµØ»¥ÏàµÈ´ý¶Ô·½¿ØÖÆ×ŵÄ×ÊÔ´¡£ÉèÈÎÎñT1Õý¶ÀÏí×ÊÔ´R1£¬ÈÎÎñT2ÔÚ¶ÀÏí×ÊÔ´T2£¬¶ø´ËʱT1ÓÖÒª¶ÀÏíR2£¬T2Ò²Òª¶ÀÏíR1£¬ÓÚÊÇÄĸöÈÎÎñ¶¼Ã»·¨¼ÌÐøÖ´ÐÐÁË£¬·¢ÉúÁËËÀËø¡£×î¼òµ¥µÄ·ÀÖ¹·¢ÉúËÀËøµÄ·½·¨ÊÇÈÃÿ¸öÈÎÎñ¶¼£º

l Ïȵõ½È«²¿ÐèÒªµÄ×ÊÔ´ÔÙ×öÏÂÒ»²½µÄ¹¤×÷
l ÓÃͬÑùµÄ˳ÐòÈ¥ÉêÇë¶à¸ö×ÊÔ´
l ÊÍ·Å×ÊԴʱʹÓÃÏà·´µÄ˳Ðò

Äں˴ó¶àÔÊÐíÓû§ÔÚÉêÇëÐźÅÁ¿Ê±¶¨ÒåµÈ´ý³¬Ê±£¬ÒÔ´Ë»¯½âËÀËø¡£µ±µÈ´ýʱ¼ä³¬¹ýÁËijһȷ¶¨Öµ£¬ÐźÅÁ¿»¹ÊÇÎÞЧ״̬£¬¾Í»á·µ»ØÄ³ÖÖÐÎʽµÄ³öÏÖ³¬Ê±´íÎóµÄ´úÂ룬Õâ¸ö³ö´í´úÂë¸æÖª¸ÃÈÎÎñ£¬²»Êǵõ½ÁË×ÊԴʹÓÃȨ£¬¶øÊÇϵͳ´íÎó¡£ËÀËøÒ»°ã·¢ÉúÔÚ´óÐͶàÈÎÎñϵͳÖУ¬ÔÚǶÈëʽϵͳÖв»Ò׳öÏÖ¡£
2.20 ͬ²½
¿ÉÒÔÀûÓÃÐźÅÁ¿Ê¹Ä³ÈÎÎñÓëÖжϷþÎñͬ²½(»òÕßÊÇÓëÁíÒ»¸öÈÎÎñͬ²½£¬ÕâÁ½¸öÈÎÎñ¼äûÓÐÊý¾Ý½»»»)¡£Èçͼ2.13Ëùʾ¡£×¢Ò⣬ͼÖÐÓÃÒ»ÃæÆìÖÄ£¬»ò³Æ×÷Ò»¸ö±êÖ¾±íʾÐźÅÁ¿¡£Õâ¸ö±êÖ¾±íʾijһʼþµÄ·¢Éú(²»ÔÙÊÇÒ»°ÑÓÃÀ´±£Ö¤»¥³âÌõ¼þµÄÔ¿³×)¡£ÓÃÀ´ÊµÏÖͬ²½»úÖÆµÄÐźÅÁ¿³õʼ»¯³É0£¬ÐźÅÁ¿ÓÃÓÚÕâÖÖÀàÐÍͬ²½µÄ³Æ×÷µ¥Ïòͬ²½(unilateral rendezvous)¡£Ò»¸öÈÎÎñ×öI/O²Ù×÷£¬È»ºóµÈÐźŻØÓ¦¡£µ±I/O²Ù×÷Íê³É£¬ÖжϷþÎñ³ÌÐò(»òÁíÍâÒ»¸öÈÎÎñ)·¢³öÐźţ¬¸ÃÈÎÎñµÃµ½Ðźźó¼ÌÐøÍùÏÂÖ´ÐС£
 
ͼ2.13 ÓÃÐźÅÁ¿Ê¹ÈÎÎñÓëÖжϷþÎñͬ²½
Èç¹ûÄÚºËÖ§³Ö¼ÆÊýʽÐźÅÁ¿£¬ÐźÅÁ¿µÄÖµ±íʾÉÐδµÃµ½´¦ÀíµÄʼþÊý¡£Çë×¢Ò⣬¿ÉÄÜ»áÓÐÒ»¸öÒÔÉϵÄÈÎÎñÔڵȴýͬһʼþµÄ·¢Éú£¬ÔòÕâÖÖÇé¿öÏÂÄں˻á¸ù¾ÝÒÔÏÂÔ­ÔòÖ®Ò»·¢ÐźŸøÏàÓ¦µÄÈÎÎñ£º

l ·¢ÐźŸøµÈ´ýʼþ·¢ÉúµÄÈÎÎñÖÐÓÅÏȼ¶×î¸ßµÄÈÎÎñ£¬»òÕß
l ·¢ÐźŸø×îÏÈ¿ªÊ¼µÈ´ýʼþ·¢ÉúµÄÄǸöÈÎÎñ

¸ù¾Ý²»Í¬µÄÓ¦Ó㬷¢ÐźÅÒÔ±êʶʼþ·¢ÉúµÄÖжϷþÎñ»òÈÎÎñÒ²¿ÉÒÔÊǶà¸ö¡£
Á½¸öÈÎÎñ¿ÉÒÔÓÃÁ½¸öÐźÅÁ¿Í¬²½ËüÃǵÄÐÐΪ¡£Èçͼ2.14Ëùʾ¡£Õâ½Ð×öË«Ïòͬ²½(bilateral rendezvous)¡£Ë«Ïòͬ²½Í¬µ¥Ïòͬ²½ÀàËÆ£¬Ö»ÊÇÁ½¸öÈÎÎñÒªÏ໥ͬ²½¡£
ÀýÈçÔò³ÌÐòÇåµ¥2.10ÖУ¬ÔËÐе½Ä³Ò»´¦µÄµÚÒ»¸öÈÎÎñ·¢ÐźŸøµÚ¶þ¸öÈÎÎñ[L22.10(1)]£¬È»ºóµÈ´ýÐźŷµ»Ø[L2.10(2)]¡£Í¬Ñù£¬µ±µÚ¶þ¸öÈÎÎñÔËÐе½Ä³Ò»´¦Ê±·¢ÐźŸøµÚÒ»¸öÈÎÎñ[2.10(3)]µÈ´ý·µ»ØÐźÅ[L2.10(4)]¡£ÖÁ´Ë£¬Á½¸öÈÎÎñʵÏÖÁË»¥Ïàͬ²½¡£ÔÚÈÎÎñÓëÖжϷþÎñÖ®¼ä²»ÄÜʹÓÃË«Ïòͬ²½£¬ÒòΪÔÚÖжϷþÎñÖв»¿ÉÄܵÈÒ»¸öÐźÅÁ¿¡£
 
ͼ2.14 Á½¸öÈÎÎñÓÃÐźÅÁ¿Í¬²½±Ë´ËµÄÐÐΪ

[´ËÌù×ÓÒѾ­±»×÷ÕßÓÚ2005-11-28 16:43:44±à¼­¹ý]

ÎҵIJ©¿Í:http://blog.eccn.com/u/qianmin/index.htm
¾²¾²µÈ´ý´ºÌìµÄµ½À´!¡¡
³ÌÐòÇåµ¥2.10  Ë«Ïòͬ²½
Task1()
{
¡¡¡¡for (;;) {
¡¡¡¡Perform operation;
¡¡¡¡Signal task #2;                    (1)
¡¡¡¡Wait for signal from task #2;      (2)
¡¡¡¡Continue operation;
¡¡¡¡}
}

Task2()
{
¡¡¡¡for (;;) {
¡¡¡¡Perform operation;
¡¡¡¡Signal task #1;                    (3)
¡¡¡¡Wait for signal from task #1;      (4)
¡¡¡¡Continue operation;
¡¡¡¡}
}
2.21 ʼþ±êÖ¾(Event Flags)
µ±Ä³ÈÎÎñÒªÓë¶à¸öʼþͬ²½Ê±£¬ÒªÊ¹ÓÃʼþ±êÖ¾¡£ÈôÈÎÎñÐèÒªÓëÈκÎʼþÖ®Ò»·¢Éúͬ²½£¬¿É³ÆÎª¶ÀÁ¢ÐÍͬ²½(¼´Âß¼­»ò¹ØÏµ)¡£ÈÎÎñÒ²¿ÉÒÔÓëÈô¸Éʼþ¶¼·¢ÉúÁËͬ²½£¬³ÆÖ®Îª¹ØÁªÐÍ(Âß¼­Óë¹ØÏµ)¡£¶ÀÁ¢Ðͼ°¹ØÁªÐÍͬ²½Èçͼ2.15Ëùʾ¡£
 
ͼ2.15¶ÀÁ¢Ðͼ°¹ØÁªÐÍͬ²½
¿ÉÒÔÓöà¸öʼþµÄ×éºÏ·¢ÐźŸø¶à¸öÈÎÎñ¡£Èçͼ2.16Ëùʾ£¬µäÐ͵أ¬8¸ö¡¢16¸ö»ò32¸öʼþ¿ÉÒÔ×éºÏÔÚÒ»Æð£¬È¡¾öÓÚÓõÄÄÄÖÖÄںˡ£Ã¿¸öʼþռһλ(bit)£¬ÒÔ32λµÄÇé¿öΪ¶à¡£ÈÎÎñ»òÖжϷþÎñ¿ÉÒÔ¸øÄ³Ò»Î»ÖÃλ»ò¸´Î»£¬µ±ÈÎÎñËùÐèµÄʼþ¶¼·¢ÉúÁË£¬¸ÃÈÎÎñ¼ÌÐøÖ´ÐУ¬ÖÁÓÚÄĸöÈÎÎñ¸Ã¼ÌÐøÖ´ÐÐÁË£¬ÊÇÔÚÒ»×éеÄʼþ·¢Éúʱ±æ¶¨µÄ¡£Ò²¾ÍÊÇÔÚʼþλÖÃλʱ×ö±æ¶Ï¡£
ÄÚºËÖ§³Öʼþ±êÖ¾£¬Ìṩʼþ±êÖ¾ÖÃλ¡¢Ê¼þ±êÖ¾ÇåÁãºÍµÈ´ýʼþ±êÖ¾µÈ·þÎñ¡£Ê¼þ±êÖ¾¿ÉÒÔÊǶÀÁ¢ÐÍ»ò×éºÏÐÍ¡£¦ÌC/OS-¢òĿǰ²»Ö§³Öʼþ±êÖ¾.
2.22 ÈÎÎñ¼äµÄͨѶ(Intertask Communication)
ÓÐʱºÜÐèÒªÈÎÎñ¼äµÄ»òÖжϷþÎñÓëÈÎÎñ¼äµÄͨѶ¡£ÕâÖÖÐÅÏ¢´«µÝ³ÆÎªÈÎÎñ¼äµÄͨѶ¡£ÈÎÎñ¼äÐÅÏ¢µÄ´«µÝÓÐÁ½¸ö;¾¶£ºÍ¨¹ýÈ«³Ì±äÁ¿»ò·¢ÏûÏ¢¸øÁíÒ»¸öÈÎÎñ¡£
ÓÃÈ«³Ì±äÁ¿Ê±£¬±ØÐ뱣֤ÿ¸öÈÎÎñ»òÖжϷþÎñ³ÌÐò¶ÀÏí¸Ã±äÁ¿¡£ÖжϷþÎñÖб£Ö¤¶ÀÏíµÄΨһ°ì·¨ÊǹØÖжϡ£Èç¹ûÁ½¸öÈÎÎñ¹²Ïíij±äÁ¿£¬¸÷ÈÎÎñʵÏÖ¶ÀÏí¸Ã±äÁ¿µÄ°ì·¨¿ÉÒÔÊǹØÖжÏÔÙ¿ªÖжϣ¬»òʹÓÃÐźÅÁ¿(ÈçÇ°ÃæÌáµ½µÄÄÇÑù)¡£Çë×¢Ò⣬ÈÎÎñÖ»ÄÜͨ¹ýÈ«³Ì±äÁ¿ÓëÖжϷþÎñ³ÌÐòͨѶ£¬¶øÈÎÎñ²¢²»ÖªµÀʲôʱºòÈ«³Ì±äÁ¿±»ÖжϷþÎñ³ÌÐòÐÞ¸ÄÁË£¬³ý·ÇÖжϳÌÐòÒÔÐźÅÁ¿·½Ê½ÏòÈÎÎñ·¢ÐźŻòÕßÊǸÃÈÎÎñÒÔ²éѯ·½Ê½²»¶ÏÖÜÆÚÐԵزéѯ±äÁ¿µÄÖµ¡£Òª±ÜÃâÕâÖÖÇé¿ö£¬Óû§¿ÉÒÔ¿¼ÂÇʹÓÃÓÊÏä»òÏûÏ¢¶ÓÁС£
 
ͼ2.16ʼþ±êÖ¾
2.23 ÏûÏ¢ÓÊÏä(Message Mail boxes)
ͨ¹ýÄں˷þÎñ¿ÉÒÔ¸øÈÎÎñ·¢ËÍÏûÏ¢¡£µäÐ͵ÄÏûÏ¢ÓÊÏäÒ²³Æ×÷½»»»ÏûÏ¢£¬ÊÇÓÃÒ»¸öÖ¸ÕëÐͱäÁ¿£¬Í¨¹ýÄں˷þÎñ£¬Ò»¸öÈÎÎñ»òÒ»¸öÖжϷþÎñ³ÌÐò¿ÉÒÔ°ÑÒ»ÔòÏûÏ¢(¼´Ò»¸öÖ¸Õë)·Åµ½ÓÊÏäÀïÈ¥¡£Í¬Ñù£¬Ò»¸ö»ò¶à¸öÈÎÎñ¿ÉÒÔͨ¹ýÄں˷þÎñ½ÓÊÕÕâÔòÏûÏ¢¡£·¢ËÍÏûÏ¢µÄÈÎÎñºÍ½ÓÊÕÏûÏ¢µÄÈÎÎñÔ¼¶¨£¬¸ÃÖ¸ÕëÖ¸ÏòµÄÄÚÈݾÍÊÇÄÇÔòÏûÏ¢¡£
ÿ¸öÓÊÏäÓÐÏàÓ¦µÄÕýÔڵȴýÏûÏ¢µÄÈÎÎñÁÐ±í£¬ÒªµÃµ½ÏûÏ¢µÄÈÎÎñ»áÒòΪÓÊÏäÊǿյĶø±»¹ÒÆð£¬ÇÒ±»¼Ç¼µ½µÈ´ýÏûÏ¢µÄÈÎÎñ±íÖУ¬Ö±µ½ÊÕµ½ÏûÏ¢¡£Ò»°ãµØËµ£¬ÄÚºËÔÊÐíÓû§¶¨ÒåµÈ´ý³¬Ê±£¬µÈ´ýÏûÏ¢µÄʱ¼ä³¬¹ýÁË£¬ÈÔȻûÓÐÊÕµ½¸ÃÏûÏ¢£¬ÕâÈÎÎñ½øÈë¾ÍÐ÷̬£¬²¢·µ»Ø³ö´íÐÅÏ¢£¬±¨¸æµÈ´ý³¬Ê±´íÎó¡£ÏûÏ¢·ÅÈëÓÊÏäºó£¬»òÕßÊǰÑÏûÏ¢´«¸øµÈ´ýÏûÏ¢µÄÈÎÎñ±íÖÐÓÅÏȼ¶×î¸ßµÄÄǸöÈÎÎñ(»ùÓÚÓÅÏȼ¶)£¬»òÕßÊǽ«ÏûÏ¢´«¸ø×îÏÈ¿ªÊ¼µÈ´ýÏûÏ¢µÄÈÎÎñ(»ùÓÚÏȽøÏȳö)¡£Í¼2.17ʾÒâ°ÑÏûÏ¢·ÅÈëÓÊÏä¡£ÓÃÒ»¸öI×Ö±íʾÓÊÏ䣬ÅԱߵÄСɰ©±íʾ³¬Ê±¼ÆÊ±Æ÷£¬¼ÆÊ±Æ÷ÅԱߵÄÊý×Ö±íʾ¶¨Ê±Æ÷É趨ֵ£¬¼´ÈÎÎñ×¿ÉÒԵȶàÉÙ¸öʱÖÓ½ÚÅÄ(Clock Ticks)£¬¹ØÓÚʱÖÓ½ÚÅÄÒÔºó»á½²µ½¡£
ÄÚºËÒ»°ãÌṩÒÔÏÂÓÊÏä·þÎñ£º

l ÓÊÏäÄÚÏûÏ¢µÄÄÚÈݳõʼ»¯£¬ÓÊÏäÀï×î³õ¿ÉÒÔÓУ¬Ò²¿ÉÒÔûÓÐÏûÏ¢
l ½«ÏûÏ¢·ÅÈëÓÊÏä(POST)
l µÈ´ýÓÐÏûÏ¢½øÈëÓÊÏä(PEND)
l Èç¹ûÓÊÏäÄÚÓÐÏûÏ¢£¬¾Í½ÓÊÜÕâÔòÏûÏ¢¡£Èç¹ûÓÊÏäÀïûÓÐÏûÏ¢£¬ÔòÈÎÎñ²¢²»±»¹ÒÆð(ACCEPT)£¬Ó÷µ»Ø´úÂë±íʾµ÷Óýá¹û£¬ÊÇÊÕµ½ÁËÏûÏ¢»¹ÊÇûÓÐÊÕµ½ÏûÏ¢¡£

ÏûÏ¢ÓÊÏäÒ²¿ÉÒÔµ±×÷ֻȡÁ½¸öÖµµÄÐźÅÁ¿À´Óá£ÓÊÏäÀïÓÐÏûÏ¢£¬±íʾ×ÊÔ´¿ÉÒÔʹÓ㬶ø¿ÕÓÊÏä±íʾ×ÊÔ´Òѱ»ÆäËüÈÎÎñÕ¼Óá£
 
ͼ2.17 ÏûÏ¢ÓÊÏä

[´ËÌù×ÓÒѾ­±»×÷ÕßÓÚ2005-11-28 16:44:42±à¼­¹ý]

ÎҵIJ©¿Í:http://blog.eccn.com/u/qianmin/index.htm
¾²¾²µÈ´ý´ºÌìµÄµ½À´!¡¡
2.24 ÏûÏ¢¶ÓÁÐ(Message Queue)
ÏûÏ¢¶ÓÁÐÓÃÓÚ¸øÈÎÎñ·¢ÏûÏ¢¡£ÏûÏ¢¶ÓÁÐʵ¼ÊÉÏÊÇÓÊÏäÕóÁС£Í¨¹ýÄÚºËÌṩµÄ·þÎñ£¬ÈÎÎñ»òÖжϷþÎñ×Ó³ÌÐò¿ÉÒÔ½«Ò»ÌõÏûÏ¢(¸ÃÏûÏ¢µÄÖ¸Õë)·ÅÈëÏûÏ¢¶ÓÁС£Í¬Ñù£¬Ò»¸ö»ò¶à¸öÈÎÎñ¿ÉÒÔͨ¹ýÄں˷þÎñ´ÓÏûÏ¢¶ÓÁÐÖеõ½ÏûÏ¢¡£·¢ËͺͽÓÊÕÏûÏ¢µÄÈÎÎñÔ¼¶¨£¬´«µÝµÄÏûϢʵ¼ÊÉÏÊÇ´«µÝµÄÖ¸ÕëÖ¸ÏòµÄÄÚÈÝ¡£Í¨³££¬ÏȽøÈëÏûÏ¢¶ÓÁеÄÏûÏ¢ÏÈ´«¸øÈÎÎñ£¬Ò²¾ÍÊÇ˵£¬ÈÎÎñÏȵõ½µÄÊÇ×îÏȽøÈëÏûÏ¢¶ÓÁеÄÏûÏ¢£¬¼´ÏȽøÏȳöÔ­Ôò(FIFO)¡£È»¶ø¦ÌC/OS-¢òÒ²ÔÊÐíʹÓúó½øÏȳö·½Ê½(LIFO)¡£
ÏñʹÓÃÓÊÏäÄÇÑù£¬µ±Ò»¸öÒÔÉϵÄÈÎÎñÒª´ÓÏûÏ¢¶ÓÁнÓÊÕÏûϢʱ£¬Ã¿¸öÏûÏ¢¶ÓÁÐÓÐÒ»ÕŵȴýÏûÏ¢ÈÎÎñµÄµÈ´ýÁбí(Waiting List)¡£Èç¹ûÏûÏ¢¶ÓÁÐÖÐûÓÐÏûÏ¢£¬¼´ÏûÏ¢¶ÓÁÐÊǿգ¬µÈ´ýÏûÏ¢µÄÈÎÎñ¾Í±»¹ÒÆð²¢·ÅÈëµÈ´ýÏûÏ¢ÈÎÎñÁбíÖУ¬Ö±µ½ÓÐÏûÏ¢µ½À´¡£Í¨³££¬ÄÚºËÔÊÐíµÈ´ýÏûÏ¢µÄÈÎÎñ¶¨ÒåµÈ´ý³¬Ê±µÄʱ¼ä¡£Èç¹ûÏÞ¶¨Ê±¼äÄÚÈÎÎñûÓÐÊÕµ½ÏûÏ¢£¬¸ÃÈÎÎñ¾Í½øÈë¾ÍÐ÷̬²¢¿ªÊ¼ÔËÐУ¬Í¬Ê±·µ»Ø³ö´í´úÂ룬ָ³ö³öÏֵȴý³¬Ê±´íÎó¡£Ò»µ©Ò»ÔòÏûÏ¢·ÅÈëÏûÏ¢¶ÓÁУ¬¸ÃÏûÏ¢½«´«¸øµÈ´ýÏûÏ¢µÄÈÎÎñÖÐÓÅÏȼ¶×î¸ßµÄÄǸöÈÎÎñ£¬»òÊÇ×îÏȽøÈëµÈ´ýÏûÏ¢ÈÎÎñÁбíµÄÈÎÎñ¡£Í¼2.18ʾÒâÖжϷþÎñ×Ó³ÌÐòÈçºÎ½«ÏûÏ¢·ÅÈëÏûÏ¢¶ÓÁС£Í¼ÖÐÁ½¸ö´óдµÄI±íʾÏûÏ¢¶ÓÁУ¬¡°10¡±±íʾÏûÏ¢¶ÓÁÐ×î¶à¿ÉÒÔ·Å10ÌõÏûÏ¢£¬É³Â©ÅԱߵÄ0±íʾÈÎÎñûÓж¨Ò峬ʱ£¬½«ÓÀÔ¶µÈÏÂÈ¥£¬Ö±ÖÁÏûÏ¢µÄµ½À´¡£

µäÐ͵أ¬ÄÚºËÌṩµÄÏûÏ¢¶ÓÁзþÎñÈçÏ£º

l ÏûÏ¢¶ÓÁгõʼ»¯¡£¶ÓÁгõʼ»¯Ê±×ÜÊÇÇåΪ¿Õ¡£
l ·ÅÒ»ÔòÏûÏ¢µ½¶ÓÁÐÖÐÈ¥(Post)
l µÈ´ýÒ»ÔòÏûÏ¢µÄµ½À´(Pend)
l Èç¹û¶ÓÁÐÖÐÓÐÏûÏ¢ÔòÈÎÎñ¿ÉÒԵõ½ÏûÏ¢£¬µ«Èç¹û´Ëʱ¶ÓÁÐΪ¿Õ£¬Äں˲¢²»½«¸ÃÈÎÎñ¹ÒÆð(Accept)¡£Èç¹ûÓÐÏûÏ¢£¬ÔòÏûÏ¢´Ó¶ÓÁÐÖÐÈ¡×ß¡£Ã»ÓÐÏûÏ¢ÔòÓÃÌØ±ðµÄ·µ»Ø´úÂë֪ͨµ÷ÓÃÕߣ¬¶ÓÁÐÖÐûÓÐÏûÏ¢¡£
 
ͼ2.18 ÏûÏ¢¶ÓÁÐ
2.25 ÖжÏ
ÖжÏÊÇÒ»ÖÖÓ²¼þ»úÖÆ£¬ÓÃÓÚ֪ͨCPUÓиöÒ첽ʼþ·¢ÉúÁË¡£ÖжÏÒ»µ©±»Ê¶±ð£¬CPU±£´æ²¿·Ö(»òÈ«²¿)ÏÖ³¡(Context)¼´²¿·Ö»òÈ«²¿¼Ä´æÆ÷µÄÖµ£¬Ìø×ªµ½×¨ÃŵÄ×Ó³ÌÐò£¬³ÆÎªÖжϷþÎñ×Ó³ÌÐò(ISR)¡£ÖжϷþÎñ×Ó³ÌÐò×öʼþ´¦Àí£¬´¦ÀíÍê³Éºó£¬³ÌÐò»Øµ½£º

l ÔÚǰºǫ́ϵͳÖУ¬³ÌÐò»Øµ½ºǫ́³ÌÐò
l ¶Ô²»¿É°þ¶áÐÍÄں˶øÑÔ£¬³ÌÐò»Øµ½±»ÖжÏÁ˵ÄÈÎÎñ
l ¶Ô¿É°þ¶áÐÍÄں˶øÑÔ£¬ÈýøÈë¾ÍÐ÷̬µÄÓÅÏȼ¶×î¸ßµÄÈÎÎñ¿ªÊ¼ÔËÐÐ

ÖжÏʹµÃCPU¿ÉÒÔÔÚʼþ·¢Éúʱ²ÅÓèÒÔ´¦Àí£¬¶ø²»±ØÈÃ΢´¦ÀíÆ÷Á¬Ðø²»¶ÏµØ²éѯ(Polling)ÊÇ·ñÓÐʼþ·¢Éú¡£Í¨¹ýÁ½ÌõÌØÊâÖ¸Á¹ØÖжÏ(Disable interrupt)ºÍ¿ªÖжÏ(Enable interrupt)¿ÉÒÔÈÃ΢´¦ÀíÆ÷²»ÏìÓ¦»òÏìÓ¦Öжϡ£ÔÚʵʱ»·¾³ÖУ¬¹ØÖжϵÄʱ¼äÓ¦¾¡Á¿µÄ¶Ì¡£¹ØÖжÏÓ°ÏìÖжÏÑÓ³Ùʱ¼ä(¼û2.26ÖжÏÑÓ³Ù)¡£¹ØÖжÏʱ¼äÌ«³¤¿ÉÄÜ»áÒýÆðÖж϶ªÊ§¡£Î¢´¦ÀíÆ÷Ò»°ãÔÊÐíÖжÏǶÌ×£¬Ò²¾ÍÊÇ˵ÔÚÖжϷþÎñÆÚ¼ä£¬Î¢´¦ÀíÆ÷¿ÉÒÔʶ±ðÁíÒ»¸ö¸üÖØÒªµÄÖжϣ¬²¢·þÎñÓÚÄǸö¸üÖØÒªµÄÖжϣ¬Èçͼ2.19Ëùʾ¡£
2.26 ÖжÏÑÓ³Ù
¿ÉÄÜʵʱÄÚºË×îÖØÒªµÄÖ¸±ê¾ÍÊÇÖжϹØÁ˶೤ʱ¼ä¡£ËùÓÐʵʱϵͳÔÚ½øÈëÁÙ½çÇø´úÂë¶Î֮ǰ¶¼Òª¹ØÖжϣ¬Ö´ÐÐÍêÁÙ½ç´úÂëÖ®ºóÔÙ¿ªÖжϡ£¹ØÖжϵÄʱ¼äÔ½³¤£¬ÖжÏÑÓ³Ù¾ÍÔ½³¤¡£ÖжÏÑÓ³ÙÓɱí´ïʽ[2.2]¸ø³ö¡£

[2.2]  ÖжÏÑÓ³Ù = ¹ØÖжϵÄ×ʱ¼ä + ¿ªÊ¼Ö´ÐÐÖжϷþÎñ×Ó³ÌÐòµÄµÚÒ»ÌõÖ¸ÁîµÄʱ¼ä
 
ͼ2.19ÖжÏǶÌ×
2.27 ÖжÏÏìÓ¦
ÖжÏÏìÓ¦¶¨ÒåΪ´ÓÖжϷ¢Éúµ½¿ªÊ¼Ö´ÐÐÓû§µÄÖжϷþÎñ×Ó³ÌÐò´úÂëÀ´´¦ÀíÕâ¸öÖжϵÄʱ¼ä¡£ÖжÏÏìӦʱ¼ä°üÀ¨¿ªÊ¼´¦ÀíÕâ¸öÖжÏǰµÄÈ«²¿¿ªÏú¡£µäÐ͵أ¬Ö´ÐÐÓû§´úÂë֮ǰҪ±£»¤ÏÖ³¡£¬½«CPUµÄ¸÷¼Ä´æÆ÷ÍÆÈë¶ÑÕ»¡£Õâ¶Îʱ¼ä½«±»¼Ç×÷ÖжÏÏìӦʱ¼ä¡£
¶Ôǰºǫ́ϵͳ£¬±£´æ¼Ä´æÆ÷ÒÔºóÁ¢¼´Ö´ÐÐÓû§´úÂ룬ÖжÏÏìӦʱ¼äÓÉ[2.3]¸ø³ö¡£

[2.3]  ÖжÏÏìӦʱ¼ä = ÖжÏÑÓ³Ù + ±£´æCPUÄÚ²¿¼Ä´æÆ÷µÄʱ¼ä

¶ÔÓÚ²»¿É°þ¶áÐÍÄںˣ¬Î¢´¦ÀíÆ÷±£´æÄÚ²¿¼Ä´æÆ÷ÒÔºó£¬Óû§µÄÖжϷþÎñ×Ó³ÌÐò´úÂëÈ«Á¢¼´µÃµ½Ö´ÐС£²»¿É°þ¶áÐÍÄں˵ÄÖжÏÏìӦʱ¼äÓɱí´ïʽ[2.4]¸ø³ö¡£

[2.4]  ÖжÏÏìӦʱ¼ä = ÖжÏÑÓ³Ù + ±£´æCPUÄÚ²¿¼Ä´æÆ÷µÄʱ¼ä

¶ÔÓڿɰþ¶áÐÍÄںˣ¬ÔòÒªÏȵ÷ÓÃÒ»¸öÌØ¶¨µÄº¯Êý£¬¸Ãº¯Êý֪ͨÄں˼´½«½øÐÐÖжϷþÎñ£¬Ê¹µÃÄں˿ÉÒÔ¸ú×ÙÖжϵÄǶÌס£¶ÔÓÚ ¦ÌC/OS-¢ò˵À´£¬Õâ¸öº¯ÊýÊÇOSIntEnter()£¬¿É°þ¶áÐÍÄں˵ÄÖжÏÏìӦʱ¼äÓɱí´ïʽ[2.5]¸ø³ö£º

[2.5]  ÖжÏÏìÓ¦ £½ ÖжÏÑÓ³Ù + ±£´æCPUÄÚ²¿¼Ä´æÆ÷µÄʱ¼ä + Äں˵ĽøÈëÖжϷþÎñº¯ÊýµÄÖ´ÐÐʱ¼ä

ÖжÏÏìÓ¦ÊÇϵͳÔÚ×Çé¿öϵÄÏìÓ¦ÖжϵÄʱ¼ä£¬Ä³ÏµÍ³100´ÎÖÐÓÐ99´ÎÔÚ50¦ÌsÖ®ÄÚÏìÓ¦Öжϣ¬Ö»ÓÐÒ»´ÎÏìÓ¦ÖжϵÄʱ¼äÊÇ250¦Ìs£¬Ö»ÄÜÈÏΪÖжÏÏìӦʱ¼äÊÇ250¦Ìs¡£

[´ËÌù×ÓÒѾ­±»×÷ÕßÓÚ2005-11-28 16:45:36±à¼­¹ý]

ÎҵIJ©¿Í:http://blog.eccn.com/u/qianmin/index.htm
¾²¾²µÈ´ý´ºÌìµÄµ½À´!¡¡
2.28 Öжϻָ´Ê±¼ä(Interrupt Recovery)
Öжϻָ´Ê±¼ä¶¨ÒåΪ΢´¦ÀíÆ÷·µ»Øµ½±»ÖжÏÁ˵ijÌÐò´úÂëËùÐèÒªµÄʱ¼ä¡£ÔÚǰºǫ́ϵͳÖУ¬Öжϻָ´Ê±¼äºÜ¼òµ¥£¬Ö»°üÀ¨»Ö¸´CPUÄÚ²¿¼Ä´æÆ÷ÖµµÄʱ¼äºÍÖ´ÐÐÖжϷµ»ØÖ¸ÁîµÄʱ¼ä¡£Öжϻָ´Ê±¼äÓÉ[2.6]ʽ¸ø³ö¡£

[2.6]  Öжϻָ´Ê±¼ä = »Ö¸´CPUÄÚ²¿¼Ä´æÆ÷ÖµµÄʱ¼ä + Ö´ÐÐÖжϷµ»ØÖ¸ÁîµÄʱ¼ä

ºÍǰºǫ́ϵͳһÑù£¬²»¿É°þ¶áÐÍÄں˵ÄÖжϻָ´Ê±¼äÒ²ºÜ¼òµ¥£¬Ö»°üÀ¨»Ö¸´CPUÄÚ²¿¼Ä´æÆ÷ÖµµÄʱ¼äºÍÖ´ÐÐÖжϷµ»ØÖ¸ÁîµÄʱ¼ä£¬Èç±í´ïʽ[2.7]Ëùʾ¡£

[2.7]  Öжϻָ´Ê±¼ä = »Ö¸´CPUÄÚ²¿¼Ä´æÆ÷ÖµµÄʱ¼ä + Ö´ÐÐÖжϷµ»ØÖ¸ÁîµÄʱ¼ä

¶ÔÓڿɰþ¶áÐÍÄںˣ¬ÖжϵĻָ´Òª¸´ÔÓһЩ¡£µäÐ͵أ¬ÔÚÖжϷþÎñ×Ó³ÌÐòµÄĩ⣬Ҫµ÷ÓÃÒ»¸öÓÉʵʱÄÚºËÌṩµÄº¯Êý¡£ÔÚ¦ÌC/OS-¢òÖУ¬Õâ¸öº¯Êý½Ð×öOSIntExit()£¬Õâ¸öº¯ÊýÓÃÓڱ涨ÖжÏÊÇ·ñÍÑÀëÁËËùÓеÄÖжÏǶÌס£Èç¹ûÍÑÀëÁËǶÌ×(¼´ÒѾ­¿ÉÒÔ·µ»Øµ½±»ÖжÏÁ˵ÄÈÎÎñ¼¶Ê±)£¬ÄÚºËÒª±æ¶¨£¬ÓÉÓÚÖжϷþÎñ×Ó³ÌÐòISRµÄÖ´ÐУ¬ÊÇ·ñʹµÃÒ»¸öÓÅÏȼ¶¸ü¸ßµÄÈÎÎñ½øÈëÁ˾ÍÐ÷̬¡£Èç¹ûÊÇ£¬ÔòÒªÈÃÕâ¸öÓÅÏȼ¶¸ü¸ßµÄÈÎÎñ¿ªÊ¼ÔËÐС£ÔÚÕâÖÖÇé¿öÏ£¬±»ÖжÏÁ˵ÄÈÎÎñÖ»ÓÐÖØÐ³ÉΪÓÅÏȼ¶×î¸ßµÄÈÎÎñ¶ø½øÈë¾ÍÐ÷̬ʱ²ÅÄܼÌÐøÔËÐС£¶ÔÓڿɰþ¶áÐÍÄںˣ¬Öжϻָ´Ê±¼äÓɱí´ïʽ[2.8]¸ø³ö¡£ 

[2.8]  Öжϻָ´Ê±¼ä = Åж¨ÊÇ·ñÓÐÓÅÏȼ¶¸ü¸ßµÄÈÎÎñ½øÈëÁ˾ÍÐ÷̬µÄʱ¼ä + »Ö¸´ÄǸöÓÅÏȼ¶¸ü¸ßÈÎÎñµÄCPUÄÚ²¿¼Ä´æÆ÷µÄʱ¼ä + Ö´ÐÐÖжϷµ»ØÖ¸ÁîµÄʱ¼ä

2.29 ÖжÏÑÓ³Ù¡¢ÏìÓ¦ºÍ»Ö¸´
ͼ2.20µ½Í¼2.22ʾÒâǰºǫ́ϵͳ¡¢²»¿É°þ¶áÐÔÄںˡ¢¿É°þ¶áÐÔÄÚºËÏàÓ¦µÄÖжÏÑÓ³Ù¡¢ÏìÓ¦ºÍ»Ö¸´¹ý³Ì¡£
×¢Ò⣬¶ÔÓڿɰþ¶áÐÍʵʱÄںˣ¬ÖжϷµ»Øº¯Êý½«¾ö¶¨ÊÇ·µ»Øµ½±»ÖжϵÄÈÎÎñ[ͼ2.22A]£¬»¹ÊÇÈÃÄǸöÓÅÏȼ¶×î¸ßÈÎÎñÔËÐС£ÊÇÖжϷþÎñ×Ó³ÌÐòʹÄǸöÓÅÏȼ¶¸ü¸ßµÄÈÎÎñ½øÈëÁ˾ÍÐ÷̬[ͼ2.22B]¡£ÔÚºóÒ»ÖÖÇé¿öÏ£¬»Ö¸´ÖжϵÄʱ¼äÒªÉÔ³¤Ò»Ð©£¬ÒòΪÄÚºËÒª×öÈÎÎñÇл»¡£ÔÚ±¾ÊéÖУ¬ÎÒ×öÁËÒ»ÕÅÖ´ÐÐʱ¼ä±í£¬´Ë±í¶àÉÙ¿ÉÒÔºâÁ¿Ö´ÐÐʱ¼äµÄ²»Í¬£¬¼Ù¶¨¦ÌC/OS-¢òÊÇÔÚ33MHZ Intel 80186΢´¦ÀíÆ÷ÉÏÔËÐеġ£´Ë±í¿ÉÒÔʹ¶ÁÕß¿´µ½×öÈÎÎñÇл»µÄʱ¼ä¿ªÏú¡£(¼û±í9.3£¬ÔÚ33MHZ 80186ÉϦÌC/OS-¢ò·þÎñµÄÖ´ÐÐʱ¼ä).
2.30 Öжϴ¦Àíʱ¼ä
ËäÈ»ÖжϷþÎñµÄ´¦Àíʱ¼äÓ¦¸Ã¾¡¿ÉÄܵĶ̣¬µ«ÊǶԴ¦Àíʱ¼ä²¢Ã»Óоø¶ÔµÄÏÞÖÆ¡£²»ÄÜ˵ÖжϷþÎñ±ØÐëÈ«²¿Ð¡ÓÚ100¦ÌS£¬500¦ÌS»ò1mS¡£Èç¹ûÖжϷþÎñÊÇÔÚÈκθø¶¨µÄʱ¼ä¿ªÊ¼£¬ÇÒÖжϷþÎñ³ÌÐò´úÂëÊÇÓ¦ÓóÌÐòÖÐ×îÖØÒªµÄ´úÂ룬ÔòÖжϷþÎñÐèÒª¶à³¤Ê±¼ä¾ÍÓ¦¸Ã¸øËü¶à³¤Ê±¼ä¡£È»¶øÔÚ´ó¶àÊýÇé¿öÏ£¬ÖжϷþÎñ×Ó³ÌÐòӦʶ±ðÖжÏÀ´Ô´£¬´Ó½ÐÖжϵÄÉ豸ȡµÃÊý¾Ý»ò״̬£¬²¢Í¨ÖªÕæÕý×ö¸Ãʼþ´¦ÀíµÄÄǸöÈÎÎñ¡£µ±È»Ó¦¸Ã¿¼Âǵ½ÊÇ·ñ֪ͨһ¸öÈÎÎñÈ¥×öʼþ´¦ÀíËù»¨µÄʱ¼ä±È´¦ÀíÕâ¸öʼþËù»¨µÄʱ¼ä»¹¶à¡£ÔÚÖжϷþÎñÖÐ֪ͨһ¸öÈÎÎñ×öʱ¼ä´¦Àí(ͨ¹ýÐźÅÁ¿¡¢ÓÊÏä»òÏûÏ¢¶ÓÁÐ)ÊÇÐèÒªÒ»¶¨Ê±¼äµÄ£¬Èç¹ûʼþ´¦ÀíÐ軨µÄʱ¼ä¶ÌÓÚ¸øÒ»¸öÈÎÎñ·¢Í¨ÖªµÄʱ¼ä£¬¾ÍÓ¦¸Ã¿¼ÂÇÔÚÖжϷþÎñ×Ó³ÌÐòÖÐ×öʼþ´¦Àí²¢ÔÚÖжϷþÎñ×Ó³ÌÐòÖпªÖжϣ¬ÒÔÔÊÐíÓÅÏȼ¶¸ü¸ßµÄÖжϴòÈë²¢ÓÅÏȵõ½·þÎñ¡£
 
ͼ2.20ÖжÏÑÓ³Ù¡¢ÏìÓ¦ºÍ»Ö¸´(ǰºǫ́ģʽ)

[´ËÌù×ÓÒѾ­±»×÷ÕßÓÚ2005-11-28 16:46:42±à¼­¹ý]

ÎҵIJ©¿Í:http://blog.eccn.com/u/qianmin/index.htm
¾²¾²µÈ´ý´ºÌìµÄµ½À´!¡¡
2.31 ·ÇÆÁ±ÎÖжÏ(NMI)
ÓÐʱ£¬ÖжϷþÎñ±ØÐëÀ´µÃ¾¡¿ÉÄܵؿ죬ÄÚºËÒýÆðµÄÑÓʱ±äµÃ²»¿ÉÈÌÊÜ¡£ÔÚÕâÖÖÇé¿öÏ¿ÉÒÔʹÓÃ·ÇÆÁ±ÎÖжϣ¬¾ø´ó¶àÊý΢´¦ÀíÆ÷ÓÐ·ÇÆÁ±ÎÖжϹ¦ÄÜ¡£Í¨³£·ÇÆÁ±ÎÖжÏÁô×ö½ô¼±´¦ÀíÓã¬Èç¶Ïµçʱ±£´æÖØÒªµÄÐÅÏ¢¡£È»¶ø£¬Èç¹ûÓ¦ÓóÌÐòûÓÐÕâ·½ÃæµÄÒªÇó£¬·ÇÆÁ±ÎÖжϿÉÓÃÓÚʱ¼äÒªÇó×î¿Á¿ÌµÄÖжϷþÎñ¡£ÏÂÁбí´ïʽ¸ø³öÈçºÎÈ·¶¨ÖжÏÑÓ³Ù¡¢ÖжÏÏìӦʱ¼äºÍÖжϻָ´Ê±¼ä¡£

[2.9] ÖжÏÑÓ³Ùʱ¼ä £½ Ö¸ÁîÖ´ÐÐʱ¼äÖÐ×µÄÄǸöʱ¼ä + ¿ªÊ¼×ö·ÇÆÁ±ÎÖжϷþÎñµÄʱ¼ä

[2.10] ÖжÏÏìӦʱ¼ä = ÖжÏÑÓ³Ùʱ¼ä + ±£´æCPU¼Ä´æÆ÷»¨µÄʱ¼ä

[2.11] Öжϻָ´Ê±¼ä = »Ö¸´CPU¼Ä´æÆ÷µÄʱ¼ä + Ö´ÐÐÖжϷµ»ØÖ¸ÁîµÄʱ¼ä¡£

ÔÚÒ»ÏîÓ¦ÓÃÖУ¬ÎÒ½«·ÇÆÁ±ÎÖжÏÓÃÓÚ¿ÉÄÜÿ150¦ÌS·¢ÉúÒ»´ÎµÄÖжϡ£Öжϴ¦Àíʱ¼äÔÚ80ÖÁ125¦ÌSÖ®¼ä¡£ËùʹÓõÄÄں˵ĹØÖжÏʱ¼äÊÇ45¦ÌS¡£¿ÉÒÔ¿´³ö£¬Èç¹ûʹÓÃ¿ÉÆÁ±ÎÖжϵϰ£¬ÖжÏÏìÓ¦»áÍÆ³Ù20¦ÌS¡£
ÔÚ·ÇÆÁ±ÎÖжϵÄÖжϷþÎñ×Ó³ÌÐòÖУ¬²»ÄÜʹÓÃÄÚºËÌṩµÄ·þÎñ£¬ÒòΪ·ÇÆÁ±ÎÖжÏÊǹز»µôµÄ£¬¹Ê²»ÄÜÔÚ·ÇÆÁ±ÎÖжϴ¦ÀíÖд¦ÀíÁÙ½çÇø´úÂ롣Ȼ¶øÏò·ÇÆÁ±ÎÖжϴ«ËͲÎÊý»ò´Ó·ÇÆÁ±ÎÖжϻñÈ¡²ÎÊý»¹ÊÇ¿ÉÒÔ½øÐеġ£²ÎÊýµÄ´«µÝ±ØÐëʹÓÃÈ«³Ì±äÁ¿£¬È«³Ì±äÁ¿µÄλÊý±ØÐëÊÇÒ»´Î¶Á»òдÄÜÍê³ÉµÄ£¬¼´²»Ó¦¸ÃÊÇÁ½¸ö·ÖÀëµÄ×Ö½Ú£¬ÒªÁ½´Î¶Á»òд²ÅÄÜÍê³É¡£

ͼ2.21ÖжÏÑÓ³Ù¡¢ÏìÓ¦ºÍ»Ö¸´(²»¿É°þ¶áÐÍÄÚºË)

ͼ2.22ÖжÏÑÓ³Ù¡¢ÏìÓ¦ºÍ»Ö¸´(¿É°þ¶áÐÍÄÚºË)

·ÇÆÁ±ÎÖжϿÉÒÔÓÃÔö¼ÓÍⲿµç·µÄ·½·¨½ûÖ¹µô£¬Èçͼ2.23Ëùʾ¡£¼Ù¶¨ÖжÏÔ´ºÍ·ÇÆÁ±ÎÖж϶¼ÊÇÕýÂß¼­£¬ÓÃÒ»¸ö¼òµ¥µÄ¡°Ó롱ÃŲåÔÚÖжÏÔ´ºÍ΢´¦ÀíÆ÷µÄ·ÇÆÁ±ÎÖжÏÊäÈë¶ËÖ®¼ä¡£ÏòÊä³ö¿Ú(Output Port)д0¾Í½«ÖжϹØÁË¡£²»Ò»¶¨ÒªÒÔÕâÖÖ¹ØÖжϷ½Ê½À´Ê¹ÓÃÄں˷þÎñ£¬µ«¿ÉÒÔÓÃÕâÖÖ·½Ê½ÔÚÖжϷþÎñ×Ó³ÌÐòºÍÈÎÎñÖ®¼ä´«µÝ²ÎÊý(´óµÄ¡¢¶à×ֽڵģ¬Ò»´Î¶Áд²»ÄÜÍê³ÉµÄ±äÁ¿)¡£

ͼ2.23·ÇÆÁ±ÎÖжϵĽûÖ¹
¼Ù¶¨·ÇÆÁ±ÎÖжϷþÎñ×Ó³ÌÐòÿ40´ÎÖ´ÐÐÖÐÓÐÒ»´ÎÒª¸øÈÎÎñ·¢Ðźţ¬Èç¹û·ÇÆÁ±ÎÖжÏ150¦ÌSÖ´ÐÐÒ»´Î£¬Ôòÿ6mS(40*150¦ÌS)¸øÈÎÎñ·¢Ò»´ÎÐźš£ÔÚ·ÇÆÁ±ÎÖжϷþÎñ×Ó³ÌÐòÖУ¬²»ÄÜʹÓÃÄں˷þÎñ¸øÈÎÎñ·¢Ðźţ¬µ«¿ÉÒÔʹÓÃÈçͼ2.24ËùʾµÄÖжϻúÖÆ¡£¼´ÓÃ·ÇÆÁ±ÎÖжϲúÉúÆÕͨ¿ÉÆÁ±ÎÖжϵĻúÖÆ¡£ÔÚÕâÖÖÇé¿öÏ£¬·ÇÆÁ±ÎÖжÏͨ¹ýijһÊä³ö¿Ú²úÉúÓ²¼þÖжÏ(ÖÃÊä³ö¿ÚΪÓÐЧµçƽ)¡£ÓÉÓÚ·ÇÆÁ±ÎÖжϷþÎñͨ³£¾ßÓÐ×î¸ßµÄÓÅÏȼ¶£¬ÔÚ·ÇÆÁ±ÎÖжϷþÎñ¹ý³ÌÖв»ÔÊÐíÖжÏǶÌ×£¬ÆÕͨÖжÏÒ»Ö±ÒªµÈµ½·ÇÆÁ±ÎÖжϷþÎñ×Ó³ÌÐòÔËÐнáÊøºó²ÅÄܱ»Ê¶±ð¡£ÔÚ·ÇÆÁ±ÎÖжϷþÎñ×Ó³ÌÐòÍê³ÉÒÔºó£¬Î¢´¦ÀíÆ÷¿ªÊ¼ÏìÓ¦Õâ¸öÓ²¼þÖжϡ£ÔÚÕâ¸öÖжϷþÎñ×Ó³ÌÐòÖУ¬ÒªÇå³ýÖжÏÔ´(ÖÃÊä³ö¿ÚΪÎÞЧµçƽ)£¬È»ºóÓÃÐźÅÁ¿È¥»½ÐÑÄǸöÐèÒª»½ÐѵÄÈÎÎñ¡£ÈÎÎñ±¾ÉíµÄÔËÐÐʱ¼äºÍÐźÅÁ¿µÄÓÐЧʱ¼ä¶¼½Ó½ü6mS£¬ÊµÊ±ÐԵõ½ÁËÂú×ã¡£

¡¡¡¡Í¼2.24·ÇÆÁ±ÎÖжϲúÉúÆÕͨ¿ÉÆÁ±ÎÖжÏ
2.32 ʱÖÓ½ÚÅÄ(Clock Tick)
ʱÖÓ½ÚÅÄÊÇÌØ¶¨µÄÖÜÆÚÐÔÖжϡ£Õâ¸öÖжϿÉÒÔ¿´×÷ÊÇϵͳÐÄÔàµÄÂö¶¯¡£ÖжÏÖ®¼äµÄʱ¼ä¼ä¸ôÈ¡¾öÓÚ²»Í¬µÄÓ¦Óã¬Ò»°ãÔÚ10mSµ½200mSÖ®¼ä¡£Ê±ÖӵĽÚÅÄʽÖжÏʹµÃÄں˿ÉÒÔ½«ÈÎÎñÑÓʱÈô¸É¸öÕûÊýʱÖÓ½ÚÅÄ£¬ÒÔ¼°µ±ÈÎÎñµÈ´ýʼþ·¢Éúʱ£¬ÌṩµÈ´ý³¬Ê±µÄÒÀ¾Ý¡£Ê±ÖÓ½ÚÅÄÂÊÔ½¿ì£¬ÏµÍ³µÄ¶îÍ⿪Ïú¾ÍÔ½´ó¡£
¸÷ÖÖʵʱÄں˶¼Óн«ÈÎÎñÑÓʱÈô¸É¸öʱÖÓ½ÚÅĵŦÄÜ¡£È»¶øÕâ²¢²»Òâζ×ÅÑÓʱµÄ¾«¶ÈÊÇ1¸öʱÖÓ½ÚÅÄ£¬Ö»ÊÇÔÚÿ¸öʱÖÓ½ÚÅÄÖжϵ½À´Ê±¶ÔÈÎÎñÑÓʱ×öÒ»´Î²Ã¾ö¶øÒÑ¡£
ͼ2.25µ½ ͼ2.27ʾÒâÈÎÎñ½«×ÔÉíÑÓ³ÙÒ»¸öʱÖÓ½ÚÅĵÄʱÐò¡£ÒõÓ°²¿·ÖÊǸ÷²¿·Ö³ÌÐòµÄÖ´ÐÐʱ¼ä¡£Çë×¢Ò⣬ÏàÓ¦µÄ³ÌÐòÔËÐÐʱ¼äÊdz¤¶Ì²»Ò»µÄ£¬Õâ·´Ó³Á˳ÌÐòÖк¬ÓÐÑ­»·ºÍÌõ¼þ×ªÒÆÓï¾ä(¼´if/else, switch, ? : µÈÓï¾ä)µÄµäÐÍÇé¿ö¡£Ê±¼ä½ÚÅÄÖжϷþÎñ×Ó³ÌÐòµÄÔËÐÐʱ¼äÒ²ÊDz»Ò»ÑùµÄ¡£¾¡¹ÜÔÚͼÖл­µÃÓÐËù¿ä´ó¡£
µÚÒ»ÖÖÇé¿öÈçͼ2.25Ëùʾ£¬ÓÅÏȼ¶¸ßµÄÈÎÎñºÍÖжϷþÎñ³¬Ç°ÓÚÒªÇóÑÓʱһ¸öʱÖÓ½ÚÅĵÄÈÎÎñÔËÐС£¿ÉÒÔ¿´³ö£¬ËäÈ»¸ÃÈÎÎñÏëÒªÑÓʱ20mS£¬µ«ÓÉÓÚÆäÓÅÏȼ¶µÄÔµ¹Ê£¬Êµ¼ÊÉÏÿ´ÎÑÓʱ¶àÉÙÊDZ仯µÄ£¬Õâ¾ÍÒýÆðÁËÈÎÎñÖ´ÐÐʱ¼äµÄ¶¶¶¯¡£
µÚ¶þÖÖÇé¿ö£¬Èçͼ2.26Ëùʾ£¬ËùÓиßÓÅÏȼ¶µÄÈÎÎñºÍÖжϷþÎñµÄÖ´ÐÐʱ¼äÂÔ΢СÓÚÒ»¸öʱÖÓ½ÚÅÄ¡£Èç¹ûÈÎÎñ½«×Ô¼ºÑÓʱһ¸öʱÖÓ½ÚÅĵÄÇëÇó¸ÕºÃ·¢ÉúÔÚÏÂÒ»¸öʱÖÓ½ÚÅÄ֮ǰ£¬Õâ¸öÈÎÎñµÄÔÙ´ÎÖ´Ðм¸ºõÊÇÁ¢¼´¿ªÊ¼µÄ¡£Òò´Ë£¬Èç¹ûÒªÇóÈÎÎñµÄÑÓ³ÙÖÁÉÙΪһ¸öʱÖÓ½ÚÅĵϰ£¬ÔòÒª¶à¶¨ÒåÒ»¸öÑÓʱʱÖÓ½ÚÅÄ¡£»»¾ä»°Ëµ£¬Èç¹ûÏëÒª½«Ò»¸öÈÎÎñÖÁÉÙÑÓ³Ù5¸öʱÖÓ½ÚÅĵϰ£¬µÃÔÚ³ÌÐòÖÐÑÓʱ6¸öʱÖÓ½ÚÅÄ¡£


ͼ2.25½«ÈÎÎñÑÓ³ÙÒ»¸öʱÖÓ½ÚÅÄ(µÚÒ»ÖÖÇé¿ö)

ͼ2.26½«ÈÎÎñÑÓ³ÙÒ»¸öʱÖÓ½ÚÅÄ(µÚ¶þÖÖÇé¿ö)

ͼ2.27½«ÈÎÎñÑÓ³ÙÒ»¸öʱÖÓ½ÚÅÄ(µÚÈýÖÖÇé¿ö)

µÚÈýÖÖÇé¿ö£¬Èçͼ2.27Ëùʾ£¬ËùÓиßÓÅÏȼ¶µÄÈÎÎñ¼ÓÉÏÖжϷþÎñµÄÖ´ÐÐʱ¼ä³¤ÓÚÒ»¸öʱÖÓ½ÚÅÄ¡£ÔÚÕâÖÖÇé¿öÏ£¬ÄâÑÓ³ÙÒ»¸öʱÖÓ½ÚÅĵÄÈÎÎñʵ¼ÊÉÏÔÚÁ½¸öʱÖÓ½ÚÅĺó¿ªÊ¼ÔËÐУ¬ÒýÆðÁËÑÓ³Ùʱ¼ä³¬²î¡£ÕâÔÚijЩӦÓÃÖлòÐíÊÇ¿ÉÒԵ쬶øÔÚ¶àÊýÇé¿öÏÂÊDz»¿É½ÓÊܵġ£
ÉÏÊöÇé¿öÔÚËùÓеÄʵʱÄÚºËÖж¼»á³öÏÖ£¬ÕâÓëCPU¸ººÉÓйأ¬Ò²¿ÉÄÜÓëϵͳÉè¼Æ²»ÕýÈ·Óйء£ÒÔÏÂÊÇÕâÀàÎÊÌâ¿ÉÄܵĽâ¾ö·½°¸£º

l Ôö¼Ó΢´¦ÀíÆ÷µÄʱÖÓÆµÂÊ
l Ôö¼ÓʱÖÓ½ÚÅĵįµÂÊ
l ÖØÐ°²ÅÅÈÎÎñµÄÓÅÏȼ¶
l ±ÜÃâʹÓø¡µãÔËËã(Èç¹û·ÇʹÓò»¿É£¬¾¡Á¿Óõ¥¾«¶ÈÊý)
l ʹÓÃÄܽϺõØÓÅ»¯³ÌÐò´úÂëµÄ±àÒëÆ÷
l ʱ¼äÒªÇó¿Á¿ÌµÄ´úÂëÓûã±àÓïÑÔд
l Èç¹û¿ÉÄÜ£¬ÓÃͬһ¼Ò×åµÄ¸ü¿ìµÄ΢´¦ÀíÆ÷×öϵͳÉý¼¶¡£Èç´Ó8086Ïò80186Éý¼¶£¬´Ó68000Ïò68020Éý¼¶µÈ
l
²»¹ÜÔõôÑù£¬¶¶¶¯×ÜÊÇ´æÔڵġ£
2.33 ¶Ô´æ´¢Æ÷µÄÐèÇó
Èç¹ûÉè¼ÆÊÇǰºǫ́ϵͳ£¬¶Ô´æ´¢Æ÷ÈÝÁ¿µÄÐèÇó½ö½öÈ¡¾öÓÚÓ¦ÓóÌÐò´úÂë¡£¶øÊ¹ÓöàÈÎÎñÄÚºËʱµÄÇé¿öÔòºÜ²»Ò»Ñù¡£Äں˱¾ÉíÐèÒª¶îÍâµÄ´úÂë¿Õ¼ä(ROM)¡£Äں˵ĴóСȡ¾öÓÚ¶àÖÖÒòËØ£¬È¡¾öÓÚÄں˵ÄÌØÐÔ£¬´Ó1Kµ½100K×Ö½Ú¶¼ÊÇ¿ÉÄܵġ£8λCPUÓõÄ×îСÄÚºËÖ»ÌṩÈÎÎñµ÷¶È¡¢ÈÎÎñÇл»¡¢ÐźÅÁ¿´¦Àí¡¢ÑÓʱ¼°³¬Ê±·þÎñÔ¼ÐèÒª1Kµ½3K´úÂë¿Õ¼ä¡£´úÂë¿Õ¼ä×ÜÐèÇóÁ¿Óɱí´ïʽ[2.12]¸ø³ö¡£

[2.12]  ×Ü´úÂëÁ¿ = Ó¦ÓóÌÐò´úÂë + Äں˴úÂë

ÒòΪÿ¸öÈÎÎñ¶¼ÊǶÀÁ¢ÔËÐе쬱ØÐë¸øÃ¿¸öÈÎÎñÌṩµ¥¶ÀµÄÕ»¿Õ¼ä(RAM)¡£Ó¦ÓóÌÐòÉè¼ÆÈËÔ±¾ö¶¨·ÖÅä¸øÃ¿¸öÈÎÎñ¶àÉÙÕ»¿Õ¼äʱ£¬Ó¦¸Ã¾¡¿ÉÄÜʹ֮½Ó½üʵ¼ÊÐèÇóÁ¿ (ÓÐʱ£¬ÕâÊÇÏ൱À§ÄѵÄÒ»¼þÊÂ)¡£Õ»¿Õ¼äµÄ´óС²»½ö½öÒª¼ÆËãÈÎÎñ±¾ÉíµÄÐèÇó (¾Ö²¿±äÁ¿¡¢º¯Êýµ÷ÓõȵÈ)£¬»¹ÐèÒª¼ÆËã×î¶àÖжÏǶÌײãÊý(±£´æ¼Ä´æÆ÷¡¢ÖжϷþÎñ³ÌÐòÖеľֲ¿±äÁ¿µÈ)¡£¸ù¾Ý²»Í¬µÄÄ¿±ê΢´¦ÀíÆ÷ºÍÄں˵ÄÀàÐÍ£¬ÈÎÎñÕ»ºÍϵͳջ¿ÉÒÔÊÇ·Ö¿ªµÄ¡£ÏµÍ³Õ»×¨ÃÅÓÃÓÚ´¦ÀíÖжϼ¶´úÂë¡£ÕâÑù×öÓÐÐí¶àºÃ´¦£¬Ã¿¸öÈÎÎñÐèÒªµÄÕ»¿Õ¼ä¿ÉÒÔ´ó´ó¼õÉÙ¡£Äں˵ÄÁíÒ»¸öÓ¦¸Ã¾ßÓеÄÐÔÄÜÊÇ£¬Ã¿¸öÈÎÎñËùÐèµÄÕ»¿Õ¼ä´óС¿ÉÒÔ·Ö±ð¶¨Òå(µC/OS£­II¿ÉÒÔ×öµ½)¡£Ïà·´£¬ÓÐЩÄÚºËÒªÇóÿ¸öÈÎÎñËùÐèµÄÕ»¿Õ¼ä¶¼Ïàͬ¡£ËùÓÐÄں˶¼ÐèÒª¶îÍâµÄÕ»¿Õ¼äÒÔ±£Ö¤ÄÚ²¿±äÁ¿¡¢Êý¾Ý½á¹¹¡¢¶ÓÁеȡ£Èç¹ûÄں˲»Ö§³Öµ¥¶ÀµÄÖжÏÓÃÕ»£¬×ܵÄRAMÐèÇóÓɱí´ïʽ[2.13]¸ø³ö¡£

[2.13] RAM×ÜÐèÇó = Ó¦ÓóÌÐòµÄRAMÐèÇó + (ÈÎÎñÕ»ÐèÇó + ×î´óÖжÏǶÌ×Õ»ÐèÇó) * ÈÎÎñÊý

Èç¹ûÄÚºËÖ§³ÖÖжÏÓÃÕ»·ÖÀ룬×ÜRAMÐèÇóÁ¿Óɱí´ïʽ[2.14]¸ø³ö

[2.14]=RAM×ÜÐèÇó = Ó¦ÓóÌÐòµÄRAMÐèÇó + ÄÚºËÊý¾ÝÇøµÄRAMÐèÇó + ¸÷ÈÎÎñÕ»ÐèÇóÖ®×ÜºÍ + ×î¶àÖжÏǶÌ×Ö®Õ»ÐèÇó

³ý·ÇÓÐÌØ±ð´óµÄRAM¿Õ¼ä¿ÉÒÔËùÓ㬶ÔÕ»¿Õ¼äµÄ·ÖÅäÓëʹÓÃÒª·Ç³£Ð¡ÐÄ¡£Îª¼õÉÙÓ¦ÓóÌÐòÐèÒªµÄRAM¿Õ¼ä£¬¶Ôÿ¸öÈÎÎñÕ»¿Õ¼äµÄʹÓö¼Òª·Ç³£Ð¡ÐÄ£¬ÌرðҪעÒâÒÔϼ¸µã£º

l ¶¨Ò庯ÊýºÍÖжϷþÎñ×Ó³ÌÐòÖеľֲ¿±äÁ¿£¬ÌرðÊǶ¨Òå´óÐÍÊý×éºÍÊý¾Ý½á¹¹
l º¯Êý(¼´×Ó³ÌÐò)µÄǶÌ×
l ÖжÏǶÌ×
l ¿âº¯ÊýÐèÒªµÄÕ»¿Õ¼ä
l ¶à±äÔªµÄº¯Êýµ÷ÓÃ

×ÛÉÏËùÊö£¬¶àÈÎÎñϵͳ±Èǰºǫ́ϵͳÐèÒª¸ü¶àµÄ´úÂë¿Õ¼ä(ROM)ºÍÊý¾Ý¿Õ¼ä(RAM)¡£¶îÍâµÄ´úÂë¿Õ¼äÈ¡¾öÓÚÄں˵ĴóС£¬¶øRAMµÄÓÃÁ¿È¡¾öÓÚϵͳÖеÄÈÎÎñÊý¡£
ÎҵIJ©¿Í:http://blog.eccn.com/u/qianmin/index.htm
¾²¾²µÈ´ý´ºÌìµÄµ½À´!¡¡
2.34 ʹÓÃʵʱÄں˵ÄÓÅȱµã
ʵʱÄÚºËÒ²³ÆÎªÊµÊ±²Ù×÷ϵͳ»òRTOS¡£ËüµÄʹÓÃʹµÃʵʱӦÓóÌÐòµÄÉè¼ÆºÍÀ©Õ¹±äµÃÈÝÒ×£¬²»ÐèÒª´óµÄ¸Ä¶¯¾Í¿ÉÒÔÔö¼ÓÐµĹ¦ÄÜ¡£Í¨¹ý½«Ó¦ÓóÌÐò·Ö¸î³ÉÈô¸É¶ÀÁ¢µÄÈÎÎñ£¬RTOSʹµÃÓ¦ÓóÌÐòµÄÉè¼Æ¹ý³Ì´óΪ¼õ»¯¡£Ê¹Óÿɰþ¶áÐÔÄÚºËʱ£¬ËùÓÐʱ¼äÒªÇó¿Á¿ÌµÄʼþ¶¼µÃµ½Á˾¡¿ÉÄÜ¿ì½Ý¡¢ÓÐЧµÄ´¦Àí¡£Í¨¹ýÓÐЧµÄ·þÎñ£¬ÈçÐźÅÁ¿¡¢ÓÊÏä¡¢¶ÓÁС¢ÑÓʱ¡¢³¬Ê±µÈ£¬RTOSʹµÃ×ÊÔ´µÃµ½¸üºÃµÄÀûÓá£
Èç¹ûÓ¦ÓÃÏîÄ¿¶Ô¶îÍâµÄÐèÇó¿ÉÒÔ³ÐÊÜ£¬Ó¦¸Ã¿¼ÂÇʹÓÃʵʱÄںˡ£ÕâЩ¶îÍâµÄÐèÇóÊÇ£ºÄں˵ļ۸ñ£¬¶îÍâµÄROM/RAM¿ªÏú£¬2µ½4°Ù·ÖµãµÄCPU¶îÍ⸺ºÉ¡£
»¹Ã»ÓÐÌáµ½µÄÒ»¸öÒòËØÊÇʹÓÃʵʱÄÚºËÔö¼ÓµÄ¼Û¸ñ³É±¾¡£ÔÚһЩӦÓÃÖУ¬¼Û¸ñ¾ÍÊÇÒ»ÇУ¬ÒÔÖÁÓÚ¶ÔʹÓÃRTOSÁ¬Ïë¶¼²»¸ÒÏë¡£
µ±½ñÓÐ80¸öÒÔÉϵÄRTOSÉ̼ң¬Éú²úÃæÏò8λ¡¢16λ¡¢32λ¡¢ÉõÖÁÊÇ64λµÄ΢´¦ÀíÆ÷µÄRTOS²úÆ·¡£Ò»Ð©Èí¼þ°üÊÇÍêÕûµÄ²Ù×÷ϵͳ£¬²»½ö°üÀ¨ÊµÊ±Äںˣ¬»¹°üÀ¨ÊäÈëÊä³ö¹ÜÀí¡¢ÊÓ´°ÏµÍ³(ÓÃÓÚÏÔʾ)¡¢Îļþϵͳ¡¢ÍøÂç¡¢ÓïÑÔ½Ó¿Ú¿â¡¢µ÷ÊÔÈí¼þ¡¢½»²æÆ½Ì¨±àÒë(Cross-Platform compilers)¡£RTOSµÄ¼Û¸ñ´Ó70ÃÀÔªµ½30,000ÃÀÔª¡£RTOSÖÆÔìÉÌ»¹¿ÉÄÜË÷ȡÿ¸öÄ¿±êϵͳµÄ°æÈ¨Ê¹Ó÷ѡ£¾ÍÏñ´ÓRTOSÉ̼ÒÄÇÂòÒ»¸öоƬ°²×°µ½Ã¿Ò»¸ö²úÆ·ÉÏ£¬È»ºóһͬ³öÊÛ¡£RTOSÉ̼ҳÆÖ®Îª¹èÆ