¼¼ÊõÇ°ÑØ àñàðCÓïÑÔ ¶þ £ºÏÝÚ壬ÖжϺÍÒì³£
(2007-12-17 15:15)
·ÖÀࣺ C&C++¾«»ª
àñàðCÓïÑÔ£¨¶þ£©£ºÏÝÚ壬ÖжϺÍÒì³£
¡¡¡¡
¡¡¡¡ÉÏÒ»Õ»³ÒɱÊÕßÀϺýÍ¿µÄ¶ÁÕߣ¬¿´µ½Õâ¸ö±êÌ⣬»ù±¾ÉÏÒѾ´òÏûÁËÒÉÂÇ£ºÀϼһïȷʵºýÍ¿ÁË¡£ ÕâÈý¸ö¸ÅÄîºÍCÓïÑÔÓÐʲô¹ØÏµÄØ£¿
¡¡¡¡
¡¡¡¡ÖжÏÕâ¸ö´Ê¿ÖÅÂÈËÃñȺÖÚ¶¼²»Ä°Éú¡£ºÜ¶àÈ˰ÑÖжϷÖΪÁ½ÖÖ£ºÓ²¼þÖжϺÍÈí¼þÖжϡ£ÆäʵÔõô½Ð¹ØÏµ¶¼²»´ó£¬¹Ø¼üÊÇÎÒÃÇÒªÃ÷°×ËûÃÇÖ®¼äµÄÒìͬµã¡£
¡¡¡¡
¡¡¡¡±ÊÕß±¾Éí±È½Ïϲ»¶°Ñ ¡°Öжϡ±£¬·ÖΪÈýÖÖ¼´ÏÝÚ壬ÖжϺÍÒì³££¬ÎÒËÆºõ¼ÇµÃIntelÊÇÕâô»®·ÖµÄ£¨Õâ¾ä»°ÎÒ²»±£Ö¤ÕýÈ·°¡£¬ÓÐÐËȤµÄ¶ÁÕß×Ô¼º¿´Ò»Ï Intel µÄÊֲᣩ¡£ËûÃǵÄÓ¢ÎÄ·Ö±ðÊÇ trap£¬interrupt ºÍ exception¡£
¡¡¡¡
¡¡¡¡ÏÝÚå (trap)£º
¡¡¡¡´ó¼Ò¶¼ÖªµÀ£¬ÏÖ´úµÄCPU¶¼ÊÇÓÐÓÅÏȼ¶¸ÅÄîµÄ£¬Óû§³ÌÐòÔËÐÐÔÚµÍÓÅÏȼ¶£¬²Ù×÷ϵͳÔËÐÐÔÚ¸ßÓÅÏȼ¶¡£¸ßÓÅÏȼ¶µÄһЩָÁîµÍÓÅÏȼ¶ÎÞ·¨Ö´ÐС£ÓÐһЩ²Ù×÷Ö»ÄÜÓɲÙ×÷ϵͳÀ´Ö´ÐУ¬Óû§ÏëÒªÖ´ÐÐÕâЩ²Ù×÷µÄʱºò¾ÍҪ֪ͨ²Ù×÷ϵͳ£¬ÈòÙ×÷ϵͳÀ´Ö´ÐС£Óû§Ì¬µÄ³ÌÐò¾ÍÊÇÓÃÕâÖÖ·½·¨À´Í¨Öª²Ù×÷ϵͳµÄ¡£
¡¡¡¡
¡¡¡¡¾ßÌåÔõÑù×öµÄÄØ£¿²Ù×÷ϵͳ»á°ÑÕâЩ¹¦ÄܱàºÅ£¬±ÈÈçÏòÒ»¸ö¶Ë¿Úдһ¸ö×Ö·ûµÄ¹¦Äܵ÷ÓñàºÅ 12£¬ÓÐÁ½¸ö²ÎÊý£¬¶Ë¿ÚºÅ port ºÍдÈëµÄ×Ö·û bytevalue¡£ÎÒÃÇ¿ÉÒÔÈçÏÂʵÏÖ£º£¨Õâ¸öÀý×ÓÎÞ·¨±àÒ룬µ«ÊÇÕâÖÖ»ã±àºÍ C »ìºÏ±à³ÌµÄ·ç¸ñ΢ÈíµÄ±àÒëÆ÷Ö§³Ö£¬Ê®·ÖºÃÓã¬Ë³±ã¿äÒ»¾ä΢Èí£¬ËûÃǵıàÒëÆ÷ÊÇÎÒÓùýµÃ×îÓÅÐãµÄÉÌÒµ±àÒëÆ÷£©
¡¡¡¡
¡¡¡¡int outb(int port, int bytevalue)
¡¡¡¡{
¡¡¡¡ __asm mov r0, 12; /* ¹¦ÄܺŠ*/
¡¡¡¡ __asm mov r1, port; /* ²ÎÊý port */
¡¡¡¡ __asm mov r2, bytevalue; /* ²ÎÊý bytevalue */
¡¡¡¡ __asm trap /* ÏÝÈëÄÚºË */
¡¡¡¡
¡¡¡¡ return r0; /* ·µ»ØÖµ */
¡¡¡¡}
¡¡¡¡
¡¡¡¡ÔÚ²Ù×÷ϵͳµÄ trap ´¦ÀíµÄ handler ÀïÃæ£¬ÏàÐÅ´ó¼ÒÒѾ֪µÀÔõô°ìÁË¡£ÓÐЩÃô¸ÐµÄ¶ÁÕß¿ÉÄÜÒѾÃ÷°×ÁË£¬ÔÀ´Ò»²¿·Ö C µÄ¿âº¯ÊýÊÇÓÃÕâÖÖ·½·¨ÊµÏֵġ£
¡¡¡¡
¡¡¡¡Öжϣº
¡¡¡¡ÖжÏÎÒÃÇÕâÀïרָÀ´×ÔÓÚÓ²¼þµÄÖжϣ¬Í¨³£·ÖΪµçƽ´¥·¢ºÍ±ßÑØ´¥·¢£¨Çë²Î¿¼Êý×ֵ緣©¡£¼òµ¥µÄ˵¾ÍÊÇ CPU¡¡Ã¿Ö´ÐÐÍêÒ»Ìõ¶¼È¥¼ì²âÒ»Ìõ¹ÜÍÈµÄµçÆ½ÊÇ·ñ±ä»¯¡£Èç¹ûÂú×ãÌõ¼þ£¬CPU תÏòÊÂÏÈ×¢²áºÃµÄº¯Êý¡£ÏµÍ³ÖÐ×îÖØÒªµÄÒ»¸öÖжϾÍÊÇÎÒÃǾ³£ËµµÄʱÖÓÖжϡ£ÎªÊ²Ã´ÒªËµÕâ¸öÄØ£¿ÕâºÍ C ³ÌÐòÓÐʲô¹ØÏµÄØ£¿ÊéÉÏ˵ÁËÖжÏÊÇÓɲÙ×÷ϵͳ´¦ÀíµÄ£¬²Ù×÷ϵͳ»á±£´æ³ÌÐòµÄÏÖ³¡°¡£¬Óû§³ÌÐò¸ù±¾¸Ð¾õ²»µ½ÖжϵĴæÔÚ°¡¡£ÊéÉÏ˵µÃû´í£¬µ«ÊÇËüÓÐÁ½¼þÊÂÇéûÓиæËßÄ㣺
¡¡¡¡1. Ï̵߳÷¶È²ßÂÔ¡£
¡¡¡¡2. ³ÌÐòµÄÏÖ³¡²»°üÀ¨Ê²Ã´£¿
¡¡¡¡
¡¡¡¡ÕâÀï±ÊÕßÏë²åÒ»¾ä»°±í´ï¶Ô¹úÄÚ²Ù×÷ϵͳ½Ì²Ä×÷Õߵľ´Ñö£¬ËûÃÇÊÇÔõô°Ñ²Ù×÷ϵͳ²ð³ÉÒ»¿éÒ»¿é¶ùµÄÄØ£¿ÒòΪ£¬½ø³Ì¹ÜÀí£¬Ï̵߳÷¶È£¬ÄÚ´æ¹ÜÀí£¬ÖжϹÜÀí£¬IPC£¬¶¼ÊÇ»¥Ïà¹ØÁªµÄ¡£±ÊÕßÊ®·Ö»³ÒÉ·Ö¿éÌÖÂÛµÄÒâÒåµ½µ×Óжà´ó¡£
¡¡¡¡
¡¡¡¡ÑÔ¹éÕý´«£¬ÏȻشðµÚÒ»¸öÎÊÌ⣬Ï̵߳÷¶Èʱ»ú¡£ÔÚÄÄЩÇé¿öϲÙ×÷ϵͳ»áÔËÐÐ scheduler ÄØ£¿ÏÖ´ú²Ù×÷ϵͳµ÷¶ÈµÄ»ù±¾µ¥Î»¶¼ÊÇỊ̈߳¬ËùÒÔÎÒÃDz»ÌÖÂÛ½ø³ÌµÄ¸ÅÄî¡£
¡¡¡¡
¡¡¡¡1. һЩϵͳµ÷ÓÃ
¡¡¡¡2. I/O ²Ù×÷
¡¡¡¡3. Ò»¸öÏ̴߳´½¨
¡¡¡¡4. Ò»¸öÏ߳̽áÊø
¡¡¡¡5. mutex lock
¡¡¡¡6. P semaphore
¡¡¡¡7. Ó²¼þÖÐ¶Ï / ʱÖÓÖжÏ
¡¡¡¡8. Ö÷¶¯·ÅÆú CPU£¬±ÈÈç sleep(), yield()
¡¡¡¡9. ¸øÁíÍâÒ»¸öÏ̷߳¢ÏûÏ¢£¬ÐźÅ
¡¡¡¡10. Ö÷¶¯»½ÐÑÁíÍâÒ»¸öÏß³Ì
¡¡¡¡11. ½ø³Ì½áÊø
¡¡¡¡:
¡¡¡¡:
¡¡¡¡»¶Ó´ó¼ÒÀ´µçÀ´º¯²¹³ä £¨ÎҼDz»×¡ÄÇô¶àÁË£©
¡¡¡¡
¡¡¡¡µÚ¶þ¸öÎÊÌ⣬ÏÖ³¡²»°üÀ¨Ê²Ã´¡£ÖÁÉÙ²»°üÀ¨È«¾Ö±äÁ¿¡£
¡¡¡¡
¡¡¡¡ÓÚÊǾÍÓÐÁËÒ»¸ö¾µäµÄÃæÊÔÌ⣺
¡¡¡¡
¡¡¡¡
¡¡¡¡int a;
¡¡¡¡
¡¡¡¡void thread_1()
¡¡¡¡{
¡¡¡¡ for (;;)
¡¡¡¡ {
¡¡¡¡ do something;
¡¡¡¡ a++;
¡¡¡¡ }
¡¡¡¡}
¡¡¡¡
¡¡¡¡void thread_2()
¡¡¡¡{
¡¡¡¡ for (;;)
¡¡¡¡ {
¡¡¡¡ do something;
¡¡¡¡ a--;
¡¡¡¡ }
¡¡¡¡}
¡¡¡¡
¡¡¡¡main()
¡¡¡¡{
¡¡¡¡ create_thread(thread_1);
¡¡¡¡ create_thread(thread_2);
¡¡¡¡}
¡¡¡¡
¡¡¡¡ÏÖÔÚ´ó¼ÒÓ¦¸ÃÃ÷°×ÕâÖÖд·¨µÄ´íÎóÁ˰ɡ£ÒòΪ a++£¬a--£¬²¢²»ÊÇÒ»Ìõ»ã±àÓïÑÔ£¬Ëü»á±»Öжϴò¶Ï£¬¶øÖжÏÓÖ»áÒýÆðÏ̵߳÷¶È¡£ÓпÉÄܽ«ÁíÍâÒ»¸öÏß³ÌͶÈëÔËÐС£ËùÒÔ½á¹ûÊÇÎÞ·¨Ô¤²âµÄ¡£ÌÖÂÛÕâ¸öÎÊÌâµÄÎÄÕºܶ࣬±ÊÕßÒ²¾Í²»¶à·Ñ¿ÚÉàÁË¡£
¡¡¡¡
¡¡¡¡Ìá¸ö˼¿¼Ì⣬²Ù×÷ϵͳÄÚ²¿£¬ÖжϺÍÖжÏÖ®¼ä£¬ÖжϺÍÏß³ÌÖ®¼ä£¬Ôõô±£»¤ÁÙ½ç×ÊÔ´µÄÄØ£¿¶à¸ö CPU Ö®¼äÄØ£¿
¡¡¡¡
¡¡¡¡Òì³££ºexception
¡¡¡¡Òì³£ÊÇÖ¸Ò»ÌõÖ¸Áî»áÒýÆð CPU µÄ²»¿ì£¬±ÈÈç³ýÁã¡£ÓÐȺÖÚ˵ÁË£¬Èç¹ûÎÒ³ýÁã´íÁË£¬²Ù×÷ϵͳ°ÑÎÒÖÕÖ¹Á˲»¾ÍÍêÁË£¬ÎÒ»ØÈ¥¸Ä³ÌÐò£¬¸Ä¶ÔÁËÖØÐÂÔËÐв»¾ÍÐÐÁËô¡£
¡¡¡¡
¡¡¡¡µ«ÊÇÓÐʱºò CPU Ï£Íû²Ù×÷ϵͳÄܹ»ÅųýÕâ¸öÒì³££¬È»ºó CPU ÖØÐ³¢ÊÔÈ¥Ö´ÐÐÕâÌõÒýÆðÒì³£µÄÖ¸Áî¡£ÕâÓÐʲôÓÃÄØ£¿ÏÂÃæÎÒ¸ø´ó¼Ò½éÉÜÒ»¸öÊ®·ÖÖØÒªµÄÒì³££¬È±Ò³Òì³£¡£
¡¡¡¡
¡¡¡¡´ó¼Ò¶¼ÖªµÀ£¬ÏÖ´úµÄ CPU ¶¼Ö§³ÖÐéÄâÄÚ´æ¹ÜÀí£¬ÎÒÃÇ»¹ÊÇÔÚÎÒÃǵÄÐéÄâ CPU ÉÏÌÖÂÛÕâ¸öÎÊÌ⣬ÉÏÃæÎÒÃÇ˵¹ýÁË£¬ÎÒÃÇµÄ CPU ʹÓà 2 ¼¶Ò³±íÓ³Éä£¬Ò¶Ãæ´óС 4K¡£ÎÒʵÔÚÀÁµÃдÈçºÎÓ³ÉäÁË£¬Çë´ó¼Ò²Î¿¼ Intel µÄÊֲᡣÒòΪÎÒÃǵÄÖØµã²»ÔÚÕâÀï¡£¿´ÏÂÃæµÄÓï¾ä£º
¡¡¡¡
¡¡¡¡ char *p = (char *)malloc(100 * 1024 * 1024);
¡¡¡¡
¡¡¡¡ÓÐÈË˵£¬Ã»Ê²Ã´²»Í¬°¡£¬Ö»²»¹ýÉêÇëµÄÄÚ´æÉÔ΢Óеã¶ù¶à°¡¡£µ«²Ù×÷ÏµÍ³ÕæµØ¸øÄãÄÇô¶àÄÚ´æÁËô£¿Èç¹ûÕâÑùµÄ³ÌÐòÀ´Éϼ¸¸ö£¬ÏµÍ³ÄÚ´æÆñ²»ÊÇÔç±»ºÄ¹â£¬µ«Êµ¼ÊÉϲ¢Ã»ÓС£ËùÒÔ²Ù×÷ϵͳ²ÉÓÃÁËÔÚÎÒ¹úÊ¢ÐеÄÒ»ÖÖ»úÖÆ£º´ò°×Ìõ£¡ÆäʵÎÒÃÇÉêÇëÄÚ´æµÄʱºò²Ù×÷ϵͳ½ö½öÔÚÐé¿Õ¼äÖзÖÅäÁËÄڴ棬Ҳ¾ÍÊÇ˵½ö½öÊDZê¼Ç×Å£¬Õâ100MµÄÄÚ´æ¹éÄãÓ㬵«ÊÇÎÒÏȲ»¸øÄ㣬µ±ÄãÕæµÄÓõÄʱºòÎÒÔÙ¸øÄã·ÖÅ䣬Õâ¸ö·ÖÅäÖ¸µÄ¾ÍÊÇʵʵÔÚÔÚµÄÎïÀíÒ³ÃæÁË¡£¾ßÌåÔõôʵÏÖµÄÄØ£¿ÎÒÃÇ¿´ÏÂÃæµÄÓï¾ä·¢ÉúÁËʲô£¿
¡¡¡¡
¡¡¡¡ p[0x4538] = 'A';
¡¡¡¡
¡¡¡¡ÓÐÈËÒÉÎÊÁË£¬ÆÕͨµÄ¸³ÖµÓï¾ä°¡¡£Ã»´í£¬µ«ÊÇÕâÌõ¸³ÖµÓï¾äÖ´ÐÐÁËÁ½´Î£¨Õâ¿É²»Ò»¶¨°¡£¬ÎÒû˵¾ø¶Ô£¬ÎÒÖ»ÊÇÔÚ½éÉÜÒ»ÖÖ»úÖÆ£©£¬µÚÒ»´Îû³É¹¦£¬ÒòΪ·¢ÉúÁËȱҳÒì³££¬ÎÒÃǸղÅ˵Á˲Ù×÷ϵͳ½ö½öÊǰÑÕâ 100M ÄÚ´æ·ÖÅ䏸Óû§ÁË£¬µ«ÊÇûÓжÔÓ¦ÕæÕýµÄÎïÀíÒ³Ãæ¡£²Ù×÷ϵͳ²¢Ã»ÓÐΪ p+0x4538 ËùÔÚµÄÒ³Ãæ½¨Á¢Ò³±íÓ³Éä¡£ËùÒÔȱҳÒì³£·¢ÉúÁË¡£È»ºó²Ù×÷ϵͳһ¿´Õâ¸öµØÖ·ÊÇÒѾ·ÖÅ䏸ÄãÁË£¬ÎÒ¸øÄãÕÒ¸öÎïÀíÒ³Ãæ£¬¸øÄ㽨Á¢ºÃÓ³É䣬ÄãÔÙÖ´ÐÐÒ»´ÎÊÔÊÔ¡£¾ÍÕâÒ»µãÀ´Ëµ£¬²Ù×÷ϵͳ±ÈÎÒÃǵÄijЩ¹ÙÀÏÒ¯ÐÅÓþÒªÁ¼ºÃµÄ¶à£¬°×Ìõ¶ÒÏÖÁË¡£
¡¡¡¡
¡¡¡¡ÓÚÊǵڶþ´ÎÖ´Ðгɹ¦ÁË¡£ÓÐÈË¿´µ½ÕâÀïÒѾÂúÍ·ÎíË®ÁË£¬Õâ¸öÀϼһﵽµ×Ïë˵ʲô£¿
¡¡¡¡
¡¡¡¡×¢Òâµ½ÁËô£¬²Ù×÷ϵͳҪ¸øËûÁÙʱÕÒÒ»¸öÒ³Ãæ£¬ÕÒ²»µ½Ôõô°ì£¿¶Ô£¬Ò³Ãæ½»»»£¬ÕÒ¸öµ¹Ã¹µ°£¬°ÑËüµÄÒ»²¿·ÖÒ³ÃæÐ´µ½Ó²ÅÌÉÏ£¬Êµ¼ÊÉϲÙ×÷ϵͳֻҪ¿ÕÏÐÎïÀíÒ³ÃæÉÙÓÚÒ»¶¨µÄ³Ì¶È¾Í»á×ö swap¡£ÄÇô£¬Èç¹ûÄãÓиö³ÌÐòÐèÒª½Ï¸ßµÄЧÂÊ£¬½ÏºÃµÄ·´Ó¦ËÙ¶È£¬Ë㷨дµÃÔÙºÃҲûÓã¬Ò»¸öÒ³Ãæ±»½»»»³öȥȫÍê¡£
¡¡¡¡
¡¡¡¡ÏÖÔÚÃ÷°×Á˰ɣ¬ÓÅ»¯³ÌÐò£¬Á˽â²Ù×÷ϵͳµÄÔËÐлúÖÆÊDZز»¿ÉÉٵġ£µ±È»ÁËÓÅ»¯³ÌÐò¾ø²»½ö½öÊÇÕâЩ¡£ËùÒÔÒ»¸öÓÅÐãµÄ³ÌÐòԱʮ·ÖÓбØÒªÖªµÀ£¬ÄãµÄ³ÌÐòµ½µ×ÔËÐÐÔÚ ¡°Ê²Ã´¡± ÉÏÃæ¡£
¡¡¡¡
¡¡¡¡ÉÔ΢×ܽáһϣº
¡¡¡¡ÏÝÚ壺ÓÉ trap Ö¸ÁîÒýÆð£¬»Ö¸´ºó CPU Ö´ÐÐÏÂÒ»ÌõÖ¸Áî
¡¡¡¡ÖжϣºÓÉÓ²¼þµçƽÒýÆð£¬»Ö¸´ºó CPU Ö´ÐÐÏÂÒ»ÌõÖ¸Áî
¡¡¡¡Òì³££ºÓÉÈí¼þÖ¸ÁîÒýÆð£¬»Ö¸´ºó CPU ÖØÐÂÖ´ÐиÃÌõÖ¸Áî
¡¡¡¡
¡¡¡¡ÓиöÅ£ÈË˵¹ý£¬Oracle µÄÊý¾Ý¿âΪʲô×ܱȱðÈ˵ĿìÒ»µãµãÄØ£¿ÒòΪÄÇÅúÈËÊÇд²Ù×÷ϵͳµÄ¡£
¡¡¡¡
¡¡¡¡ÉÏÒ»Õ»³ÒɱÊÕßÀϺýÍ¿µÄ¶ÁÕߣ¬¿´µ½Õâ¸ö±êÌ⣬»ù±¾ÉÏÒѾ´òÏûÁËÒÉÂÇ£ºÀϼһïȷʵºýÍ¿ÁË¡£
¡¡¡¡
¡¡¡¡ÖжÏÕâ¸ö´Ê¿ÖÅÂÈËÃñȺÖÚ¶¼²»Ä°Éú¡£ºÜ¶àÈ˰ÑÖжϷÖΪÁ½ÖÖ£ºÓ²¼þÖжϺÍÈí¼þÖжϡ£ÆäʵÔõô½Ð¹ØÏµ¶¼²»´ó£¬¹Ø¼üÊÇÎÒÃÇÒªÃ÷°×ËûÃÇÖ®¼äµÄÒìͬµã¡£
¡¡¡¡
¡¡¡¡±ÊÕß±¾Éí±È½Ïϲ»¶°Ñ ¡°Öжϡ±£¬·ÖΪÈýÖÖ¼´ÏÝÚ壬ÖжϺÍÒì³££¬ÎÒËÆºõ¼ÇµÃIntelÊÇÕâô»®·ÖµÄ£¨Õâ¾ä»°ÎÒ²»±£Ö¤ÕýÈ·°¡£¬ÓÐÐËȤµÄ¶ÁÕß×Ô¼º¿´Ò»Ï Intel µÄÊֲᣩ¡£ËûÃǵÄÓ¢ÎÄ·Ö±ðÊÇ trap£¬interrupt ºÍ exception¡£
¡¡¡¡
¡¡¡¡ÏÝÚå (trap)£º
¡¡¡¡´ó¼Ò¶¼ÖªµÀ£¬ÏÖ´úµÄCPU¶¼ÊÇÓÐÓÅÏȼ¶¸ÅÄîµÄ£¬Óû§³ÌÐòÔËÐÐÔÚµÍÓÅÏȼ¶£¬²Ù×÷ϵͳÔËÐÐÔÚ¸ßÓÅÏȼ¶¡£¸ßÓÅÏȼ¶µÄһЩָÁîµÍÓÅÏȼ¶ÎÞ·¨Ö´ÐС£ÓÐһЩ²Ù×÷Ö»ÄÜÓɲÙ×÷ϵͳÀ´Ö´ÐУ¬Óû§ÏëÒªÖ´ÐÐÕâЩ²Ù×÷µÄʱºò¾ÍҪ֪ͨ²Ù×÷ϵͳ£¬ÈòÙ×÷ϵͳÀ´Ö´ÐС£Óû§Ì¬µÄ³ÌÐò¾ÍÊÇÓÃÕâÖÖ·½·¨À´Í¨Öª²Ù×÷ϵͳµÄ¡£
¡¡¡¡
¡¡¡¡¾ßÌåÔõÑù×öµÄÄØ£¿²Ù×÷ϵͳ»á°ÑÕâЩ¹¦ÄܱàºÅ£¬±ÈÈçÏòÒ»¸ö¶Ë¿Úдһ¸ö×Ö·ûµÄ¹¦Äܵ÷ÓñàºÅ 12£¬ÓÐÁ½¸ö²ÎÊý£¬¶Ë¿ÚºÅ port ºÍдÈëµÄ×Ö·û bytevalue¡£ÎÒÃÇ¿ÉÒÔÈçÏÂʵÏÖ£º£¨Õâ¸öÀý×ÓÎÞ·¨±àÒ룬µ«ÊÇÕâÖÖ»ã±àºÍ C »ìºÏ±à³ÌµÄ·ç¸ñ΢ÈíµÄ±àÒëÆ÷Ö§³Ö£¬Ê®·ÖºÃÓã¬Ë³±ã¿äÒ»¾ä΢Èí£¬ËûÃǵıàÒëÆ÷ÊÇÎÒÓùýµÃ×îÓÅÐãµÄÉÌÒµ±àÒëÆ÷£©
¡¡¡¡
¡¡¡¡int outb(int port, int bytevalue)
¡¡¡¡{
¡¡¡¡ __asm mov r0, 12; /* ¹¦ÄܺŠ*/
¡¡¡¡ __asm mov r1, port; /* ²ÎÊý port */
¡¡¡¡ __asm mov r2, bytevalue; /* ²ÎÊý bytevalue */
¡¡¡¡ __asm trap /* ÏÝÈëÄÚºË */
¡¡¡¡
¡¡¡¡ return r0; /* ·µ»ØÖµ */
¡¡¡¡}
¡¡¡¡
¡¡¡¡ÔÚ²Ù×÷ϵͳµÄ trap ´¦ÀíµÄ handler ÀïÃæ£¬ÏàÐÅ´ó¼ÒÒѾ֪µÀÔõô°ìÁË¡£ÓÐЩÃô¸ÐµÄ¶ÁÕß¿ÉÄÜÒѾÃ÷°×ÁË£¬ÔÀ´Ò»²¿·Ö C µÄ¿âº¯ÊýÊÇÓÃÕâÖÖ·½·¨ÊµÏֵġ£
¡¡¡¡
¡¡¡¡Öжϣº
¡¡¡¡ÖжÏÎÒÃÇÕâÀïרָÀ´×ÔÓÚÓ²¼þµÄÖжϣ¬Í¨³£·ÖΪµçƽ´¥·¢ºÍ±ßÑØ´¥·¢£¨Çë²Î¿¼Êý×ֵ緣©¡£¼òµ¥µÄ˵¾ÍÊÇ CPU¡¡Ã¿Ö´ÐÐÍêÒ»Ìõ¶¼È¥¼ì²âÒ»Ìõ¹ÜÍÈµÄµçÆ½ÊÇ·ñ±ä»¯¡£Èç¹ûÂú×ãÌõ¼þ£¬CPU תÏòÊÂÏÈ×¢²áºÃµÄº¯Êý¡£ÏµÍ³ÖÐ×îÖØÒªµÄÒ»¸öÖжϾÍÊÇÎÒÃǾ³£ËµµÄʱÖÓÖжϡ£ÎªÊ²Ã´ÒªËµÕâ¸öÄØ£¿ÕâºÍ C ³ÌÐòÓÐʲô¹ØÏµÄØ£¿ÊéÉÏ˵ÁËÖжÏÊÇÓɲÙ×÷ϵͳ´¦ÀíµÄ£¬²Ù×÷ϵͳ»á±£´æ³ÌÐòµÄÏÖ³¡°¡£¬Óû§³ÌÐò¸ù±¾¸Ð¾õ²»µ½ÖжϵĴæÔÚ°¡¡£ÊéÉÏ˵µÃû´í£¬µ«ÊÇËüÓÐÁ½¼þÊÂÇéûÓиæËßÄ㣺
¡¡¡¡1. Ï̵߳÷¶È²ßÂÔ¡£
¡¡¡¡2. ³ÌÐòµÄÏÖ³¡²»°üÀ¨Ê²Ã´£¿
¡¡¡¡
¡¡¡¡ÕâÀï±ÊÕßÏë²åÒ»¾ä»°±í´ï¶Ô¹úÄÚ²Ù×÷ϵͳ½Ì²Ä×÷Õߵľ´Ñö£¬ËûÃÇÊÇÔõô°Ñ²Ù×÷ϵͳ²ð³ÉÒ»¿éÒ»¿é¶ùµÄÄØ£¿ÒòΪ£¬½ø³Ì¹ÜÀí£¬Ï̵߳÷¶È£¬ÄÚ´æ¹ÜÀí£¬ÖжϹÜÀí£¬IPC£¬¶¼ÊÇ»¥Ïà¹ØÁªµÄ¡£±ÊÕßÊ®·Ö»³ÒÉ·Ö¿éÌÖÂÛµÄÒâÒåµ½µ×Óжà´ó¡£
¡¡¡¡
¡¡¡¡ÑÔ¹éÕý´«£¬ÏȻشðµÚÒ»¸öÎÊÌ⣬Ï̵߳÷¶Èʱ»ú¡£ÔÚÄÄЩÇé¿öϲÙ×÷ϵͳ»áÔËÐÐ scheduler ÄØ£¿ÏÖ´ú²Ù×÷ϵͳµ÷¶ÈµÄ»ù±¾µ¥Î»¶¼ÊÇỊ̈߳¬ËùÒÔÎÒÃDz»ÌÖÂÛ½ø³ÌµÄ¸ÅÄî¡£
¡¡¡¡
¡¡¡¡1. һЩϵͳµ÷ÓÃ
¡¡¡¡2. I/O ²Ù×÷
¡¡¡¡3. Ò»¸öÏ̴߳´½¨
¡¡¡¡4. Ò»¸öÏ߳̽áÊø
¡¡¡¡5. mutex lock
¡¡¡¡6. P semaphore
¡¡¡¡7. Ó²¼þÖÐ¶Ï / ʱÖÓÖжÏ
¡¡¡¡8. Ö÷¶¯·ÅÆú CPU£¬±ÈÈç sleep(), yield()
¡¡¡¡9. ¸øÁíÍâÒ»¸öÏ̷߳¢ÏûÏ¢£¬ÐźÅ
¡¡¡¡10. Ö÷¶¯»½ÐÑÁíÍâÒ»¸öÏß³Ì
¡¡¡¡11. ½ø³Ì½áÊø
¡¡¡¡:
¡¡¡¡:
¡¡¡¡»¶Ó´ó¼ÒÀ´µçÀ´º¯²¹³ä £¨ÎҼDz»×¡ÄÇô¶àÁË£©
¡¡¡¡
¡¡¡¡µÚ¶þ¸öÎÊÌ⣬ÏÖ³¡²»°üÀ¨Ê²Ã´¡£ÖÁÉÙ²»°üÀ¨È«¾Ö±äÁ¿¡£
¡¡¡¡
¡¡¡¡ÓÚÊǾÍÓÐÁËÒ»¸ö¾µäµÄÃæÊÔÌ⣺
¡¡¡¡
¡¡¡¡
¡¡¡¡int a;
¡¡¡¡
¡¡¡¡void thread_1()
¡¡¡¡{
¡¡¡¡ for (;;)
¡¡¡¡ {
¡¡¡¡ do something;
¡¡¡¡ a++;
¡¡¡¡ }
¡¡¡¡}
¡¡¡¡
¡¡¡¡void thread_2()
¡¡¡¡{
¡¡¡¡ for (;;)
¡¡¡¡ {
¡¡¡¡ do something;
¡¡¡¡ a--;
¡¡¡¡ }
¡¡¡¡}
¡¡¡¡
¡¡¡¡main()
¡¡¡¡{
¡¡¡¡ create_thread(thread_1);
¡¡¡¡ create_thread(thread_2);
¡¡¡¡}
¡¡¡¡
¡¡¡¡ÏÖÔÚ´ó¼ÒÓ¦¸ÃÃ÷°×ÕâÖÖд·¨µÄ´íÎóÁ˰ɡ£ÒòΪ a++£¬a--£¬²¢²»ÊÇÒ»Ìõ»ã±àÓïÑÔ£¬Ëü»á±»Öжϴò¶Ï£¬¶øÖжÏÓÖ»áÒýÆðÏ̵߳÷¶È¡£ÓпÉÄܽ«ÁíÍâÒ»¸öÏß³ÌͶÈëÔËÐС£ËùÒÔ½á¹ûÊÇÎÞ·¨Ô¤²âµÄ¡£ÌÖÂÛÕâ¸öÎÊÌâµÄÎÄÕºܶ࣬±ÊÕßÒ²¾Í²»¶à·Ñ¿ÚÉàÁË¡£
¡¡¡¡
¡¡¡¡Ìá¸ö˼¿¼Ì⣬²Ù×÷ϵͳÄÚ²¿£¬ÖжϺÍÖжÏÖ®¼ä£¬ÖжϺÍÏß³ÌÖ®¼ä£¬Ôõô±£»¤ÁÙ½ç×ÊÔ´µÄÄØ£¿¶à¸ö CPU Ö®¼äÄØ£¿
¡¡¡¡
¡¡¡¡Òì³££ºexception
¡¡¡¡Òì³£ÊÇÖ¸Ò»ÌõÖ¸Áî»áÒýÆð CPU µÄ²»¿ì£¬±ÈÈç³ýÁã¡£ÓÐȺÖÚ˵ÁË£¬Èç¹ûÎÒ³ýÁã´íÁË£¬²Ù×÷ϵͳ°ÑÎÒÖÕÖ¹Á˲»¾ÍÍêÁË£¬ÎÒ»ØÈ¥¸Ä³ÌÐò£¬¸Ä¶ÔÁËÖØÐÂÔËÐв»¾ÍÐÐÁËô¡£
¡¡¡¡
¡¡¡¡µ«ÊÇÓÐʱºò CPU Ï£Íû²Ù×÷ϵͳÄܹ»ÅųýÕâ¸öÒì³££¬È»ºó CPU ÖØÐ³¢ÊÔÈ¥Ö´ÐÐÕâÌõÒýÆðÒì³£µÄÖ¸Áî¡£ÕâÓÐʲôÓÃÄØ£¿ÏÂÃæÎÒ¸ø´ó¼Ò½éÉÜÒ»¸öÊ®·ÖÖØÒªµÄÒì³££¬È±Ò³Òì³£¡£
¡¡¡¡
¡¡¡¡´ó¼Ò¶¼ÖªµÀ£¬ÏÖ´úµÄ CPU ¶¼Ö§³ÖÐéÄâÄÚ´æ¹ÜÀí£¬ÎÒÃÇ»¹ÊÇÔÚÎÒÃǵÄÐéÄâ CPU ÉÏÌÖÂÛÕâ¸öÎÊÌ⣬ÉÏÃæÎÒÃÇ˵¹ýÁË£¬ÎÒÃÇµÄ CPU ʹÓà 2 ¼¶Ò³±íÓ³Éä£¬Ò¶Ãæ´óС 4K¡£ÎÒʵÔÚÀÁµÃдÈçºÎÓ³ÉäÁË£¬Çë´ó¼Ò²Î¿¼ Intel µÄÊֲᡣÒòΪÎÒÃǵÄÖØµã²»ÔÚÕâÀï¡£¿´ÏÂÃæµÄÓï¾ä£º
¡¡¡¡
¡¡¡¡ char *p = (char *)malloc(100 * 1024 * 1024);
¡¡¡¡
¡¡¡¡ÓÐÈË˵£¬Ã»Ê²Ã´²»Í¬°¡£¬Ö»²»¹ýÉêÇëµÄÄÚ´æÉÔ΢Óеã¶ù¶à°¡¡£µ«²Ù×÷ÏµÍ³ÕæµØ¸øÄãÄÇô¶àÄÚ´æÁËô£¿Èç¹ûÕâÑùµÄ³ÌÐòÀ´Éϼ¸¸ö£¬ÏµÍ³ÄÚ´æÆñ²»ÊÇÔç±»ºÄ¹â£¬µ«Êµ¼ÊÉϲ¢Ã»ÓС£ËùÒÔ²Ù×÷ϵͳ²ÉÓÃÁËÔÚÎÒ¹úÊ¢ÐеÄÒ»ÖÖ»úÖÆ£º´ò°×Ìõ£¡ÆäʵÎÒÃÇÉêÇëÄÚ´æµÄʱºò²Ù×÷ϵͳ½ö½öÔÚÐé¿Õ¼äÖзÖÅäÁËÄڴ棬Ҳ¾ÍÊÇ˵½ö½öÊDZê¼Ç×Å£¬Õâ100MµÄÄÚ´æ¹éÄãÓ㬵«ÊÇÎÒÏȲ»¸øÄ㣬µ±ÄãÕæµÄÓõÄʱºòÎÒÔÙ¸øÄã·ÖÅ䣬Õâ¸ö·ÖÅäÖ¸µÄ¾ÍÊÇʵʵÔÚÔÚµÄÎïÀíÒ³ÃæÁË¡£¾ßÌåÔõôʵÏÖµÄÄØ£¿ÎÒÃÇ¿´ÏÂÃæµÄÓï¾ä·¢ÉúÁËʲô£¿
¡¡¡¡
¡¡¡¡ p[0x4538] = 'A';
¡¡¡¡
¡¡¡¡ÓÐÈËÒÉÎÊÁË£¬ÆÕͨµÄ¸³ÖµÓï¾ä°¡¡£Ã»´í£¬µ«ÊÇÕâÌõ¸³ÖµÓï¾äÖ´ÐÐÁËÁ½´Î£¨Õâ¿É²»Ò»¶¨°¡£¬ÎÒû˵¾ø¶Ô£¬ÎÒÖ»ÊÇÔÚ½éÉÜÒ»ÖÖ»úÖÆ£©£¬µÚÒ»´Îû³É¹¦£¬ÒòΪ·¢ÉúÁËȱҳÒì³££¬ÎÒÃǸղÅ˵Á˲Ù×÷ϵͳ½ö½öÊǰÑÕâ 100M ÄÚ´æ·ÖÅ䏸Óû§ÁË£¬µ«ÊÇûÓжÔÓ¦ÕæÕýµÄÎïÀíÒ³Ãæ¡£²Ù×÷ϵͳ²¢Ã»ÓÐΪ p+0x4538 ËùÔÚµÄÒ³Ãæ½¨Á¢Ò³±íÓ³Éä¡£ËùÒÔȱҳÒì³£·¢ÉúÁË¡£È»ºó²Ù×÷ϵͳһ¿´Õâ¸öµØÖ·ÊÇÒѾ·ÖÅ䏸ÄãÁË£¬ÎÒ¸øÄãÕÒ¸öÎïÀíÒ³Ãæ£¬¸øÄ㽨Á¢ºÃÓ³É䣬ÄãÔÙÖ´ÐÐÒ»´ÎÊÔÊÔ¡£¾ÍÕâÒ»µãÀ´Ëµ£¬²Ù×÷ϵͳ±ÈÎÒÃǵÄijЩ¹ÙÀÏÒ¯ÐÅÓþÒªÁ¼ºÃµÄ¶à£¬°×Ìõ¶ÒÏÖÁË¡£
¡¡¡¡
¡¡¡¡ÓÚÊǵڶþ´ÎÖ´Ðгɹ¦ÁË¡£ÓÐÈË¿´µ½ÕâÀïÒѾÂúÍ·ÎíË®ÁË£¬Õâ¸öÀϼһﵽµ×Ïë˵ʲô£¿
¡¡¡¡
¡¡¡¡×¢Òâµ½ÁËô£¬²Ù×÷ϵͳҪ¸øËûÁÙʱÕÒÒ»¸öÒ³Ãæ£¬ÕÒ²»µ½Ôõô°ì£¿¶Ô£¬Ò³Ãæ½»»»£¬ÕÒ¸öµ¹Ã¹µ°£¬°ÑËüµÄÒ»²¿·ÖÒ³ÃæÐ´µ½Ó²ÅÌÉÏ£¬Êµ¼ÊÉϲÙ×÷ϵͳֻҪ¿ÕÏÐÎïÀíÒ³ÃæÉÙÓÚÒ»¶¨µÄ³Ì¶È¾Í»á×ö swap¡£ÄÇô£¬Èç¹ûÄãÓиö³ÌÐòÐèÒª½Ï¸ßµÄЧÂÊ£¬½ÏºÃµÄ·´Ó¦ËÙ¶È£¬Ë㷨дµÃÔÙºÃҲûÓã¬Ò»¸öÒ³Ãæ±»½»»»³öȥȫÍê¡£
¡¡¡¡
¡¡¡¡ÏÖÔÚÃ÷°×Á˰ɣ¬ÓÅ»¯³ÌÐò£¬Á˽â²Ù×÷ϵͳµÄÔËÐлúÖÆÊDZز»¿ÉÉٵġ£µ±È»ÁËÓÅ»¯³ÌÐò¾ø²»½ö½öÊÇÕâЩ¡£ËùÒÔÒ»¸öÓÅÐãµÄ³ÌÐòԱʮ·ÖÓбØÒªÖªµÀ£¬ÄãµÄ³ÌÐòµ½µ×ÔËÐÐÔÚ ¡°Ê²Ã´¡± ÉÏÃæ¡£
¡¡¡¡
¡¡¡¡ÉÔ΢×ܽáһϣº
¡¡¡¡ÏÝÚ壺ÓÉ trap Ö¸ÁîÒýÆð£¬»Ö¸´ºó CPU Ö´ÐÐÏÂÒ»ÌõÖ¸Áî
¡¡¡¡ÖжϣºÓÉÓ²¼þµçƽÒýÆð£¬»Ö¸´ºó CPU Ö´ÐÐÏÂÒ»ÌõÖ¸Áî
¡¡¡¡Òì³££ºÓÉÈí¼þÖ¸ÁîÒýÆð£¬»Ö¸´ºó CPU ÖØÐÂÖ´ÐиÃÌõÖ¸Áî
¡¡¡¡
¡¡¡¡ÓиöÅ£ÈË˵¹ý£¬Oracle µÄÊý¾Ý¿âΪʲô×ܱȱðÈ˵ĿìÒ»µãµãÄØ£¿ÒòΪÄÇÅúÈËÊÇд²Ù×÷ϵͳµÄ¡£



