¡¡¡¡LinuxÄÚºËÖ÷ÒªÓÉÎå¸ö×Óϵͳ×é³É:½ø³Ìµ÷¶È£¬ÄÚ´æ¹ÜÀí£¬ÐéÄâÎļþϵͳ£¬ÍøÂç½Ó¿Ú£¬½ø³Ì¼äͨÐÅ
¡¡¡¡1.½ø³Ìµ÷¶È£¨SCHED£©:¿ØÖƽø³Ì¶ÔCPUµÄ·ÃÎÊ¡£
¡¡¡¡2.ÄÚ´æ¹ÜÀí£¨MM£©£ºÔÊÐí¶à¸ö½ø³Ì°²È«µÄ¹²ÏíÖ÷ÄÚ´æÇøÓò¡£
¡¡¡¡3.ÐéÄâÎļþϵͳ£¨VFS£©£ºÒþ²ØÁ˸÷ÖÖÓ²¼þµÄ¾ßÌåϸ½Ú£¬ÎªËùÓеÄÉ豸ÌṩÁËͳһµÄ½Ó¿Ú£¬VFSÌṩÁ˶à´ïÊýÊ®ÖÖ²»Í¬µÄÎļþϵͳ¡£ÐéÄâÎļþϵͳ¿ÉÒÔ·ÖΪÂß¼ÎļþϵͳºÍÉ豸Çý¶¯³ÌÐò¡£É豸Çý¶¯³ÌÐòָΪÿһÖÖÓ²¼þ¿ØÖÆÆ÷Ëù±àдµÄÉ豸Çý¶¯³ÌÐòÄ£¿é¡£
¡¡¡¡4.ÍøÂç½Ó¿Ú£¨NET£©£ºÌṩÁ˶Ը÷ÖÖÍøÂç±ê×¼µÄ´æÈ¡ºÍ¸÷ÖÖÍøÂçÓ²¼þµÄÖ§³Ö¡£ÍøÂç½Ó¿Ú¿ÉÒÔ·ÖΪÍøÂçÐÒéºÍÍøÂçÇý¶¯³ÌÐò¡£ÍøÂçÐÒ鲿·Ö¸ºÔðʵÏÖÿһÖÖ¿ÉÄܵÄÍøÂç´«ÊäÐÒé¡£ÍøÂçÉ豸Çý¶¯³ÌÐò¸ºÔðÓëÓ²¼þÉ豸ͨѶ£¬Ã¿Ò»ÖÖ¿ÉÄܵÄÓ²¼þÉ豸¶¼ÓÐÏàͬµÄÉ豸Çý¶¯³ÌÐò¡£
¡¡¡¡5.½ø³Ì¼äµÄͨѶ£¨IPC£©£ºÖ§³Ö½ø³Ì¼ä¸÷ÖÖͨÐÅ»úÖÆ
¡¡¡¡ÏµÍ³Êý¾Ý½á¹¹
¡¡¡¡ÔÚLinuxµÄÄÚºËÊÓÏßÖУ¬ÓÐһЩÊý¾Ý½á¹¹Ê¹ÓÃƵ¶È½Ï¸ß£¬ËüÃÇÊÇ£ºtask_struct.
¡¡¡¡LinuxÄÚºËÀûÓÃÒ»¸öÊý¾Ý½á¹¹£¨task_struct£©´ú±íÒ»¸ö½ø³Ì£¬´ú±í½ø³ÌµÄÊý¾Ý½á¹¹Ö¸ÕëÏò³ÉÁËÒ»¸ötaskÊý×é¡£Õâ¸öÊý×éµÄ´óСÓÉNR_TASKS(ĬÈÏΪ512),±íÃ÷LinuxϵͳÖÐ×î¶àÄÜͬʱÔËÐеĽø³ÌÊý¡£
¡¡¡¡Mm_struct
¡¡¡¡Ã¿¸ö½ø³ÌµÄÐéÄâÄÚ´æÓÉÒ»¸ömm_struct½á¹¹Ìå´ú±í£¬¸Ã½á¹¹Êµ¼ÊÉÏ°üº¬Á˵±Ç°Ö´ÐÐÓ³ÏñµÄÓйØÐÅÏ¢£¬²¢ÇÒ°üº¬ÁËÒ»×éÖ¸Ïòvm_area_struct½á¹¹µÄÖ¸Õ룬vw_area_struct½á¹¹ÃèÊöÁËÐéÄâÄÚ´æµÄÒ»¸öÇøÓò
¡¡¡¡Inode
¡¡¡¡ÐéÄâÎļþϵͳÖеÄÎļþ£¬Ä¿Â¼µÈ¾ùÓɶÔÓ¦µÄË÷Òý½Úµã£¨inode£©´ú±í¡£Ã¿¸öVFSË÷Òý½ÚµãÖеÄÄÚÈÝÓÉÎļþϵͳרÊôµÄÀý³ÌÌṩ¡£VFSË÷Òý½ÚµãÖ»´æÔÚÓëÄÚºËÄÚ´æÖУ¬Êµ¼Ê±£´æÓÚVFSµÄË÷Òý½Úµã¸ßËÙ»º´æÖС£
¡¡¡¡¹ØÓÚÔ´´úÂëµÄÔĶÁ
¡¡¡¡Linux ÄÚºËÔ´´úÂëµÄ½á¹¹
¡¡¡¡LinuxÄÚºËÔ´´úÂëλÓÚ/usr/src/linuxĿ¼Ï¡£
¡¡¡¡/include×ÓĿ¼°üº¬Á˽¨Á¢Äں˴úÂëʱËùÐèµÄ´ó²¿·Ö°üº¬Îļþ£¬Õâ¸öÄ£¿éÀûÓÃÆäËûÄ£¿éÖؽ¨Äںˡ£
¡¡¡¡/init ×ÓĿ¼°üº¬ÁËÄں˵ijõʼ»¯´úÂ룬ÕâÊÇÄں˹¤×÷µÄ¿ªÊ¼µÄÆðµã¡£
¡¡¡¡/arch×ÓĿ¼°üº¬ÁËËùÓÐÓ²¼þ½á¹¹Ìض¨µÄÄں˴úÂë¡£È磺i386,alpha
¡¡¡¡/drivers×ÓĿ¼°üº¬ÁËÄÚºËÖÐËùÓеÄÉ豸Çý¶¯³ÌÐò£¬Èç¿éÉ豸ºÍSCSIÉ豸¡£
¡¡¡¡/fs×ÓĿ¼°üº¬ÁËËùÓеÄÎļþϵͳµÄ´úÂë¡£Èç:ext2,vfatµÈ¡£
¡¡¡¡/net×ÓĿ¼°üº¬ÁËÄں˵ÄÁ¬Íø´úÂë¡£
¡¡¡¡/mm×ÓĿ¼°üº¬ÁËËùÓÐÄÚ´æ¹ÜÀí´úÂë¡£
¡¡¡¡/ipc×ÓĿ¼°üº¬Á˽ø³Ì¼äͨÐÅ´úÂë¡£
¡¡¡¡/kernel×ÓĿ¼°üº¬ÁËÖ÷Äں˴úÂë¡£
¡¡¡¡ÏÂÃæ¸ø³öÔĶÁÔ´´úÂëµÄÏßË÷:
¡¡¡¡ÏµÍ³µÄÆô¶¯ºÍ³õʼ»¯£º
¡¡¡¡ÔÚ»ùÓÚIntelµÄϵͳÉÏ£¬µ±loadlin.exe»òLILO°ÑÄÚºË×°Èëµ½ÄÚ´æ²¢°Ñ¿ØÖÆȨ´«µÝ¸øÄÚºËʱ£¬Äں˿ªÊ¼Æô¶¯¡£¹ØÓÚÕâÒ»²¿·ÖÇë¿´£¬arch/i386/kernel/head.S,head.S½øÐÐÌض¨½á¹¹µÄÉèÖã¬È»ºóÌøתµ½init/main.cµÄmain()Àý³Ì¡£
¡¡¡¡ÄÚ´æ¹ÜÀí£º
¡¡¡¡ÄÚ´æ¹ÜÀíµÄ´úÂëÖ÷ÒªÔÚ/mm£¬µ«ÊÇÌض¨½á¹¹µÄ´úÂëÔÚarchkernel,µ÷¶È³ÌÐòÔÚkernel/sched.c,forkµÄ´úÂëÔÚkernel/fork.c,ÄÚºËÀý³Ì´¦Àí³ÌÐòÔÚinclude/linux/interrupt.h£¬task_structÊý¾Ý½á¹¹ÔÚinlucde/linux/sched.hÖС£
¡¡¡¡PCI:
¡¡¡¡PCIαÇý¶¯³ÌÐòÔÚdrivers/pci/pci.c,Æ䶨ÒåÔÚinclulde/linux/pci.h¡£Ã¿Ò»Öֽṹ¶¼ÓÐһЩÌض¨µÄPCI BIOS´úÂ룬IntelµÄÔÚarch/alpha/kernel/bios32.cÖС£
¡¡¡¡½ø³Ì¼äͨÐÅ£º
¡¡¡¡ËùÓеÄSystemVIPC¶ÔÏóȨÏÞ¶¼°üº¬ÔÚipc_permÊý¾Ý½á¹¹ÖУ¬Õâ¿ÉÒÔÔÚinclude/linux/ipc.hÖÐÕÒµ½¡£SystemVÏûÏ¢ÊÇÔÚipc/msg.cÖÐʵÏÖ¡£¹²ÏíÄÚ´æÔÚipc/shm.cÖÐʵÏÖ¡£ÐźÅÁ¿ÔÚipc/sem.cÖУ¬¹ÜµÀÔÚ/ipc/pipe.cÖÐʵÏÖ¡£
¡¡¡¡Öжϴ¦Àí£º
¡¡¡¡Äں˵ÄÖжϴ¦Àí´úÂ뼸ºõËùÓеÄ΢´¦ÀíÆ÷ÌØÓеġ£Öжϴ¦Àí´úÂëÔÚarch/i386/kernel/irq.cÖУ¬Æ䶨ÒåÔÚinclude/asm-i386/irq.hÖС£