×÷ҵϵͳ£¨Operating System£©µÄÑо¿£¬ÎÒÃÇÒÔLinux kernelµÄ̽ÌÖÀ´ËµÃ÷һЩӦÓеÄÕýÈ·¹ÛÄî¡£
¶ÔÓÚLinux kernelµÄÑо¿£¬×î¾³£Ìýµ½ÓÐÈËÌáÆð¡¸kernel source code¡¹µÄÑжÁÓë·ÖÎö£¬²¢ÇÒ×î³£¿´µ½µÄÑо¿·½Ê½Îª¡¸Ñ°ÕÒkernel½øÈëµã£¬²¢ÒÀÕÕ³ÌʽÁ÷³Ì£¨flow£©×öÑÐòÑо¿¡¹£¬²»¹ý£¬ÕâÈ´ÊÇÒ»ÖÖ¡¸´ó²¿·ÝÇé¿ö϶¼´íÎó¡¹µÄÑо¿·½Ê½¡£
ÓÉÓÚµçÄÔϵͳÊÇÒ»ÖÖforeground-background system£¬²¢ÇÒLinux kernelÊÇÔÚ´ËϵͳÉϵÄ×÷ҵϵͳ£¬Òò´ËÕûÌåµÄkernelÐÐΪÊÇ¡¸control patch¡¹£¬Ò²¾ÍÊÇ¡¸¿ØÖÆÈ¨µÄ×ªÒÆ¡¹Ó롸ϵͳ״̬µÄ¸Ä±ä¡¹£¬²¢²»ÊÇ¡¸³Ìʽ£¨º¯Êý£©Á÷³Ì£¨flow£©¡¹£¬»òÊÇ¡¸³Ìʽ½á¹¹£¨structure£©¡¹µÄÎÊÌ⣻×î½üÓÐÅóÓÑÎÊÆðÕâ·½ÃæµÄÒéÌ⣬ÕýºÃÒ²ÔÚ½øÐÐLinux device driverµÄtraining£¬Òò´ËÌØ±ðÕûÀíÕâÔòÈռǣ¬À´Óë´ó¼Ò·ÖÏí£¬ÈôÓÐÈκÎÂÛÊöÉϵÄʧÎ󣬻òÊÇÓв»Í¬µÄ¹Ûµã£¬»¶ÓÔÚÕâÀïÁôÑÔ·ÖÏí¡£
Ðí¶àÈ˶ÔÓÚ¡¸×÷ҵϵͳ¡¹µÄ¹ÛÄî¿ÉÄÜÕæµÄÓе㱡Èõ£»¾ßÌåÀ´Ëµ£¬¶ÔÓÚkernelÄÚ²¿ÔÀíµÄÑо¿£¬Æä·½·¨Ó¦¸ÃÊÇ£º
1. kernelµÄ¿ª»ú½×¶Î£¬ÊÇÒÔ¡¸Á÷³Ì£¨flow£©¡¹µÄ½Ç¶ÈÀ´×öÌÖÂÛ¡£
2. kernelÍê³É¿ª»úºó£¬»áÖ´ÐÐinit process£¬ÓÉ´ËÕýʽÇл»µ½F/B systemµÄ¹ÛÄҲ¾ÍÊÇÕû¸öϵͳÊÇÒ»¸öÙ¼´óµÄ״̬»ú£¬Õû¸öϵͳÄÚ²¿ÊÇÒ»Á¬´®¸´ÔӵĿØÖÆÈ¨×ªÒƶ¯×÷¡£
×î½üÅóÓÑÏ£ÍûÎÒÄÜÕë¶Ô¡¸kernelµÄÖ´ÐÐÁ÷³Ì¡¹×ö¼òµ¥½éÉÜ£¬µ«ÊÇÕâ¸öÎÊÌâÔÚÃüÌâÉÏÓ¦µ±ÓÐÐÞÕý»òÊǹÛÄî³ÎÇåµÄ¿Õ¼ä¡£ÓÉÓÚµçÄÔ±¾ÉíÊÇÒ»ÖÖforeground-background system£¬Òò´ËforegroundµÄ¹¤×÷»áÓ°ÏìCPU½«¿ØÖÆÈ¨Òƽ»µ½backgroundµÄÄÄÒ»¸ö²¿·Ý£»Èç¹û°Ñuser-spaceµ±³Éforeground£¬kernel-spaceµ±³Ébackground£¬ÄÇôÕûÌåϵͳ±ãÄÜÒÔÏÂͼ±íʾ¡£
BackgroundÊܵ½foregroundÐÐΪµÄÓ°Ï죬ÄÃÒÔ϶þ¸öprocessΪÀý£¬ËäȻִÐнá¹ûÏàͬ£¬µ«ÒòΪforegroundÄÚ²¿µÄÐÐΪ²»Í¬£¬Òò´Ëcontrol pathÒ²»á¡£
´Ëʱ£¬ÈÔÊÇÒÔ¡¸Á÷³Ìͼ¡¹Âß¼À´Ë¼¿¼µÄ»°£¬µ±È»ÎÞ·¨Áì»á?ÖаÂÃî¡£¼òµ¥¶þ¸ö²»Í¬µÄprocess£¬CPU½«¿ØÖÆÈ¨ÒÆ×ªµ½×÷ҵϵͳµÄ·¾¶£¨Ò²¾ÍÊÇkernelÖ´ÐÐÁËÄÄЩ³ÌʽÂ룩£¬¾ÓÈ»ÓÐÕâô´óµÄ²îÒì¡£Èç¹ûÔÙ°ÑÅÅ³ÌÆ÷£¨scheduler£©¼ÓÈ룬ÄÇôÕû¸ö¿ØÖÆÂ·¾¶ºÜ¿ÉÄÜ¡¸²»Í¬Ê±¼äÖ´ÐÐͬһ³Ìʽ¡¹Ò²»á²»Í¬¡£ Tricky£¡
ÒÔÑо¿·½·¨À´Ëµ£¬ÃüÌâʱ¹ÛÄîµÄʧÎó£¬ÖÕ½«ÎÞ·¨µÃµ½ÕýÈ·ÇÒÍêÉÆµÄ½áÂÛ£¬Òò´Ë¡¸Ï£Íû¾ÍkernelµÄÖ´ÐÐÁ÷³Ì¡¹×öÌÖÂÛµÄÃüÌ⣬Ӧµ±×öÐÞÕý£¬²¢ÇÒ¸ø¶¨Ò»¸ö¸üÃ÷È·µÄÌâÄ¿£»ÔÙÕߣ¬ÈôÎÞ·¨ÌåÈÏkernelÊÇÒ»¸ö´óÐ͵Ä״̬»ú£¬¶øÈÔÒÔ¡¸Á÷³ÌÓë³Ìʽ½á¹¹¡¹µÄ¹ÛÄîÀ´Ë¼¿¼£¬³ýÁËÔÚÎÊÌâµÄÃèÊö»áÓÐÏ൱´óµÄÎó²îÍ⣬¿ÉÄÜÒ²»á¶Ô¡¸ÈçºÎÁ˽âkernel source code¡¹µÄ·½·¨Ãþ²»×ÅÍ·Ð÷¡£
ÓÉ´Ë¿ÉÖª£¬ÕûÌåϵͳÔÚkernel¿ªÍê»ú²¢Ö´ÐÐinit processºó£¬¾Í±ØÐëÕë¶ÔÆä¡¸ÐÐΪ¡¹×ö·ÖÎöÓëÑо¿£¬¶ø²»ÊÇÅÇ»²ÔÚ¡¸½á¹¹»¯C³Ìʽ¡¹µÄȦȦÀÕâ¸ö¹ÛÄîÖ¤Ã÷ÁË¡¸ÖðÐп´code¡¹²¢²»ÊÇÑо¿kernelÔÀíµÄÕýÈ··½·¨¡£
Kernel±¾ÉíµÄÐÐΪÊÇÒ»Á¬´®¸´ÔÓµÄ״̬¸Ä±äÓë¿ØÖÆÈ¨×ªÒÆ£¬Òò´ËÊÇ״̬»úµÄ¹ÛÄî¡£ÖÁÓÚ£¬Ñо¿·½·¨ÊDzÉÓÃÁ÷³Ì»òÊÇ¿ØÖÆÂ·¾¶µÄ¹ÛÄî½øÐУ¬¾Í¿´ÎÒÃÇÏëÒª¶ÁµÄÊÇÄÄÒ»¸ö²¿·ÝµÄsource code¡£Ç°ÃæÌáµ½Ñо¿kernelµÄ¶þ¸ö½×¶ÎÓ뷽ʽ£¬µ±ÖеÄ×ªÞæµãΪinit process£¬½ÓÐøinit process£¬½¨Òé¿ÉÏÈÓÉprogram execution£¨process creation£©µÄ¹ÛÄʼÇÐÈ룬ÒÔÁ˽âÕû¸ö×÷ҵϵͳµÄÐÐΪ¡£
ËùÒÔ£¬kernelµÄÑо¿£¬ÊÇÒÔÆä¶¯Ì¬£¨run-time£©Ê±ÆÚÐÐΪ£¨behavior£©µÄ·ÖÎöÓë¹Û²ìΪÖ÷¡£

