ÉîÈë̽ÌÖLinuxÄں˵ÄÖ÷º¯ÊýÖ´ÐÐÁ÷³Ì
ÔÚÅÌËã»úÁìÓòÖУ¬LinuxÄÚºËÊÇÒ»¸öºÜÊÇÖ÷ÒªµÄ×é³É²¿·Ö¡£Ëü×÷Ϊ²Ù×÷ϵͳµÄ½¹µã£¬ÈÏÕæÖÎÀíϵͳ×ÊÔ´¡¢µ÷ÀíʹÃü¡¢´¦Öóͷ£ÖÐÖ¹µÈÖ÷Òª¹¦Ð§¡£±¾ÎĽ«ÉîÈë̽ÌÖLinuxÄں˵ÄÖ÷º¯ÊýÖ´ÐÐÁ÷³Ì£¬²¢ÍŽáÏêϸ´úÂëʾÀý¾ÙÐÐÆÊÎö£¬Ï£ÍûÄÜ×ÊÖú¶ÁÕ߸üÉîÈëµØÏàʶLinuxÄں˵ÄÔËÐлúÖÆ¡£
LinuxÄں˵ÄÖ÷º¯Êý
ÔÚLinuxÄں˵ÄÆô¶¯Àú³ÌÖУ¬Ö÷º¯Êýmain()Æð×ÅÒªº¦×÷Óá£ÔÚÄں˱àÒëÀú³ÌÖУ¬Á´½ÓÆ÷»á½«ËùÓÐÄ£¿éÅþÁ¬³ÉÒ»¸ö¿ÉÖ´ÐÐÎļþ¡£¶øÄÚºËÆô¶¯Ê±£¬×îÖÕÖ´ÐеÄÈë¿Úº¯Êý¼´Îªmain()º¯Êý¡£ÈÃÎÒÃÇÀ´¿´Ò»ÏÂÒ»¸ö¼ò»¯µÄLinuxÄں˵Ämainº¯ÊýʾÀý£º
int main(void) { // ³õʼ»¯ÄÚºËÊý¾Ý½á¹¹ setup_arch(); // ³õʼ»¯ÖÐÖ¹¿ØÖÆÆ÷ setup_irq(); // ³õʼ»¯ÏµÍ³µ÷ÀíÆ÷ scheduler_init(); // Æô¶¯ÏµÍ³ start_kernel(); // ÓÀÔ¶²»»áÖ´Ðе½ÕâÀï return 0; }
µÇ¼ºó¸´ÖÆ
Ö÷º¯ÊýÖ´ÐÐÁ÷³ÌÆÊÎö
³õʼ»¯ÄÚºËÊý¾Ý½á¹¹£¨setup_arch£©£ºÔÚÕâÒ»²½ÖУ¬Ö÷ÒªÊǶÔÄÚºËÊý¾Ý½á¹¹¾ÙÐгõʼ»¯£¬°üÀ¨³õʼ»¯Ò³±í¡¢³õʼ»¯ÏµÍ³µ÷ÀíµÈ¡£
³õʼ»¯ÖÐÖ¹¿ØÖÆÆ÷£¨setup_irq£©£ºÄÚºËÐèÒª´¦Öóͷ£ÖÖÖÖÖÐÖ¹£¬Í¨¹ý³õʼ»¯ÖÐÖ¹¿ØÖÆÆ÷£¬¿ÉÒÔ׼ȷµØÏìÓ¦ÖÖÖÖÓ²¼þÖÐÖ¹¡£
³õʼ»¯ÏµÍ³µ÷ÀíÆ÷£¨scheduler_init£©£ºÏµÍ³µ÷ÀíÆ÷ÈÏÕæÖÎÀíÀú³ÌµÄµ÷Àí£¬°üÀ¨Ñ¡ÔñÏÂÒ»¸öÒªÖ´ÐеÄʹÃü£¬·ÖÅÉCPUʱ¼äµÈ¡£
Æô¶¯ÏµÍ³£¨start_kernel£©£ºÆô¶¯Äںˣ¬×îÏÈ´¦Öóͷ£ÏµÍ³µ÷Àí¡¢ÖÐÖ¹´¦Öóͷ£µÈ¹¦Ð§¡£
Ïêϸ´úÂëʾÀý
½ÓÏÂÀ´£¬ÎÒÃÇÀ´¿´Ò»ÏÂLinuxÄÚºËÖÐÏÖʵµÄ´úÂëʾÀý£¬ÒÔ¸üÏêϸµØչʾÖ÷º¯ÊýµÄÖ´ÐÐÁ÷³Ì¡£
void start_kernel(void) { // Æô¶¯×¼Ê±Æ÷ init_timer(); // ³õʼ»¯Àú³Ìϵͳ init_process(); // ¿ªÆôÖÐÖ¹ enable_interrupts(); // ½øÈëϵͳµ÷ÀíÑ»· while(1) { schedule(); } }
µÇ¼ºó¸´ÖÆ
ÔÚÕâ¶ÎʾÀý´úÂëÖУ¬ÎÒÃÇ¿ÉÒÔ¿´µ½ÔÚstart_kernelº¯ÊýÖÐÆô¶¯×¼Ê±Æ÷¡¢³õʼ»¯Àú³Ìϵͳ¡¢¿ªÆôÖÐÖ¹£¬²¢½øÈëϵͳµ÷ÀíÑ»·¡£ÕâЩ°ì·¨ÊÇLinuxÄÚºËÖ÷º¯ÊýÖ´ÐÐÁ÷³ÌÖеÄÒªº¦»·½Ú£¬È·±£ÏµÍ³Äܹ»Õý³£ÔËÐС£
×ܽá
ͨ¹ý±¾ÎĵÄÏÈÈÝ£¬ÎÒÃǶÔLinuxÄں˵ÄÖ÷º¯ÊýÖ´ÐÐÁ÷³ÌÓÐÁ˸üÉîÈëµÄÏàʶ¡£Ö÷º¯ÊýÔÚÄÚºËÆô¶¯Àú³ÌÖÐÊÎÑÝ×ÅÒªº¦µÄ½ÇÉ«£¬Í¨¹ý³õʼ»¯ÖÖÖÖϵͳģ¿é¡¢Æô¶¯ÏµÍ³µ÷ÀíÆ÷µÈ°ì·¨£¬È·±£ÄÚºËÕý³£ÔËÐС£Ï£Íû¶ÁÕßͨ¹ý±¾ÎĵÄÏÈÈݺÍÏêϸ´úÂëʾÀý£¬¶ÔLinuxÄں˵ÄÔËÐлúÖÆÓиüÇåÎúµÄÊìϤ¡£
ÒÔÉϾÍÊÇÉîÈë̽ÌÖLinuxÄں˵ÄÖ÷º¯ÊýÖ´ÐÐÁ÷³ÌµÄÏêϸÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢±¾ÍøÄÚÆäËüÏà¹ØÎÄÕ£¡