±à¼ÍƼö: |
ÎÄÕÂÖØµã½²½â4¸ö²¿·ÖÄÚºËÈÎÎñ£¬ÊµÏÖ²ßÂÔ£¬ÄÚºË×é³É²¿·Ö£¬ÄÚºËÌØ±ðÖ®´¦¡£
±¾ÎÄÀ´×ÔÓÚcnblogs£º´ÓÁ㿪ʼѧ¼Ü¹¹£¬ÓÉ»ðÁú¹ûÈí¼þÒÀÈ»±à¼ÍƼö¡£ |
|
Ò»¡¢Äں˵ÄÈÎÎñ
´¿¼¼Êõ²ãÃæÉÏ£¬ÄÚºËÊÇÓ²¼þÓëÈí¼þµÄÖ®¼äµÄÒ»¸öÖмä²ã¡£×÷ÓÃÊǽ«Ó¦ÓóÌÐòµÄÇëÇ󴫵ݸøÓ²¼þ£¬²¢³äµ±µ×²ãÇý¶¯³ÌÐò£¬¶ÔϵͳÖеĸ÷ÖÖÉ豸ºÍ×é¼þ½øÐÐѰַ¡£
´ÓÓ¦ÓóÌÐòÊÓ½ÇÉÏ¿´£¬Äں˿ÉÒÔ±»ÈÏΪÊÇһ̨ÔöÇ¿µÄ¼ÆËã»ú£¬½«¼ÆËã»ú³éÏóµ½Ò»¸ö¸ß²ã´ÎÉÏ¡£Ó¦ÓóÌÐòÓëÓ²¼þ±¾Ã»ÓÐÁªÏµ£¬Ö»ÓëÄÚºËÓÐÁªÏµ£¬ÄÚºËÊÇÓ¦ÓóÌÐòËùÖªµÀµÄ²ã´Î½á¹¹ÖеÄ×îµ×²ã¡£
µ±Èô¸É³ÌÐòÔÚͬһϵͳÖв¢·¢ÔËÐÐʱ£¬Ò²¿ÉÒÔ½«ÄÚºËÊÓΪ×ÊÔ´¹ÜÀí³ÌÐò¡£Äں˸ºÔ𽫿ÉÓù²Ïí×ÊÔ´·ÖÅäµ½¸÷¸öϵͳ½ø³Ì£¬Í¬Ê±±£Ö¤ÏµÍ³µÄÍêÕûÐÔ¡£
½«ÄÚºËÊÓΪ¿â£¬ÆäÌṩÁËÒ»×éÃæÏòϵͳµÄÃüÁͨ³£ÏµÍ³µ÷ÓÃÓÃÓÚÏò¼ÆËã»ú·¢ËÍÇëÇó¡£
¶þ¡¢ÊµÏÖ²ßÂÔ
ÔÚ²Ù×÷ϵͳµÄʵÏÖ·½Ã棬ÓÐÁ½ÖÖÖ÷ÒªµÄ·ºÐÍ£ºÎ¢Äں˺ͺêÄںˡ£
΢ÄںˣºÖ»ÓÐ×î»ù±¾µÄ¹¦ÄÜÖ±½ÓÓÉÄÚºËʵÏÖ¡£ËùÓÐÆäËûµÄ¹¦ÄÜ£¨Æ©ÈçÎļþϵͳ¡¢ÄÚ´æ¹ÜÀíµÈ£©¶¼Î¯ÍиøÒ»Ð©¶ÀÁ¢µÄ½ø³Ì£¬ÕâЩ½ø³Ìͨ¹ýÃ÷È·¶¨ÒåµÄͨÐŽӿÚÓëÄÚºËͨÐÅ¡£ÕâÖÖÉè¼Æ·½Ê½Óŵã°üÀ¨£º¶¯Ì¬¿ÉÀ©Õ¹ÐÔºÍÔÚÔËÐÐʱÇл»ÖØÒª×é¼þ¡£µ«ÓÉÓÚÔÚ¸÷¸ö×é¼þÖ®¼äÖ§³Ö¸´ÔÓͨÐÅÐèÒª¶îÍâµÄCPUʱ¼ä£¬ËùÒÔ¾¡¹Ü΢ÄÚºËÔÚ¸÷Ñо¿ÁìÓòÔçÒѳÉΪ»îÔ¾Ö÷Ì⣬µ«ÔÚʹÓÃÐÔ·½Ãæ½øÕ¹Éõ΢¡£
ºêÄںˣººêÄÚºËÊǹ¹½¨ÏµÍ³Äں˵Ĵ«Í³·½·¨¡£ÕâÖÖ·½·¨ÖУ¬Äں˵ÄÈ«²¿´úÂë°üÀ¨ËùÓÐ×Óϵͳ£¨ÈçÄÚ´æ¹ÜÀí¡¢Îļþϵͳ¡¢É豸Çý¶¯³ÌÐò£©¶¼´ò°üµ½Ò»¸öÎļþÖС£ÄÚºËÖÐÿ¸öº¯Êý¶¼¿ÉÒÔ·ÃÎÊÄÚºËËùÓÐÆäËû²¿·Ö£¬ÈÝÒ×µ¼ÖÂÔ´´úÂëÖгöÏÖ¸´ÔÓµÄǶÌס£
µ±Ç°ºêÄں˵ÄÐÔÄÜÈÔÇ¿ÓÚ΢Äںˣ¬Linux²ÉÈ¡µÄÊǺêÄں˵ÄÉè¼ÆÄ£Ê½¡£µ«ÊÇÒ²½øÐÐÁËÒ»¶¨³Ì¶ÈÉϵĸĽø£¬ÏµÍ³ÔËÐÐÖУ¬Ä£¿é¿ÉÒÔ²åÈëµ½Äں˴úÂëÖУ¬Ò²¿ÉÒÔÒÆ³ý¡£
Èý¡¢Äں˵Ä×é³É²¿·Ö
ͼ1¸ÅÊöÁË×é³ÉÍêÕûLinuxϵͳµÄ¸÷¸ö²ã´Î£¬ÒÔ¼°ÄÚºËËù°üº¬µÄÒ»Ð©ÖØÒª×Óϵͳ¡£

ͼ1 LinuxÄں˵ĸ߲ã´Î¸ÅÊöÒÔ¼°ÍêÕûµÄLinuxϵͳÖеĸ÷¸ö²ã´Î
1¡¢½ø³Ì¡¢½ø³ÌÇл»¡¢µ÷¶È
½ø³Ì£º´«Í³ÉÏUNIX²Ù×÷ϵͳÏÂÔËÐеÄÓ¦ÓóÌÐò¡¢·þÎñÆ÷¼°ÆäËû³ÌÐò¶¼³ÆÎª½ø³Ì¡£Ã¿¸ö½ø³Ì¶¼ÔÚCPUµÄÐéÄâÄÚ´æÖзÖÅ䵨ַ¿Õ¼ä¡£¸÷¸ö½ø³ÌµÄµØÖ·¿Õ¼äÊÇÍêÈ«¶ÀÁ¢µÄ¡£LinuxÊǶàÈÎÎñϵͳ£¬Ö§³Ö²¢·¢Ö´ÐеÄÈô¸É½ø³Ì¡£ÏµÍ³ÖÐÍ¬Ê±ÕæÕýÔÚÔËÐеĽø³ÌÊýÄ¿×î¶à²»³¬¹ýCPUµÄÊýÄ¿¡£
½ø³ÌÇл»£º½ø³ÌÖ®¼äµÄÇл»¡£Äں˽èÖúCPUµÄ°ïÖú£¬¸ºÔð½ø³ÌÇл»µÄ¼¼Êõϸ½Ú¡£Í¨¹ýÔÚ³·Ïú½ø³ÌµÄCPU×ÊԴ֮ǰ±£´æ½ø³ÌËùÓÐÓë״̬Ïà¹ØµÄÒªËØ£¬²¢½«½ø³ÌÖÃÓÚ¿ÕÏÐ״̬¡£ÖØÐ¼¤»î½ø³Ìʱ£¬½«±£´æµÄ״̬ÔÑù»Ö¸´¡£
µ÷¶È£ºÄں˱ØÐëÈ·¶¨ÈçºÎÔÚÏÖ´æ½ø³ÌÖ®¼ä¹²ÏíCPUʱ¼ä¡£ÖØÒª½ø³ÌµÃµ½µÄCPUʱ¼ä¶àÒ»µã£¬´ÎÒª½ø³ÌÉÙÒ»µã£¬È·¶¨Äĸö½ø³ÌÔËÐж೤ʱ¼äµÄ¹ý³Ì³ÆÎªµ÷¶È¡£
2¡¢UNIX½ø³Ì
Linux¶Ô½ø³Ì²ÉÓÃÁËÒ»ÖÖ²ã´Îϵͳ£¬Ã¿¸ö½ø³Ì¶¼ÒÀÀµÓÚÒ»¸ö¸¸½ø³Ì¡£ÄÚºËÆô¶¯init³ÌÐò×÷ΪµÚÒ»¸ö½ø³Ì£¬¸ºÔð½øÒ»²½ÏµÍ³³õʼ»¯¹¤×÷£¬initÊǽø³ÌÊ÷µÄ¸ù£¬ËùÓнø³Ì¶¼Ö±½Ó»ò¼ä½ÓÆðÔ´Óڸýø³Ì£¨ÔÚlinuxϵͳÖÕ¶ËÊäÈëpstree²é¿´½ø³ÌÊ÷£©¡£
Ê÷ÐͽṹµÄÀ©Õ¹·½Ê½Óëнø³Ì´´½¨·½Ê½ÃÜÇÐÏà¹Ø¡£UNIX²Ù×÷ϵͳÖд´½¨Ð½ø³ÌµÄ»úÖÆÓÐÁ½¸ö£¬·Ö±ðÊÇforkºÍexec¡£fork¿ÉÒÔ´´½¨µ±Ç°½ø³ÌµÄÒ»¸ö¸±±¾£¬³ýÁËPID£¬×Ó½ø³ÌÍêÈ«¸´ÖƸ¸½ø³ÌµÄÄÚ´æÄÚÈÝ¡£ÔÚLinuxÖУ¬²ÉÓÃдʱ¸´ÖÆ£¨copy
on write£©¼¼Êõ£¬½«ÄÚ´æ¸´ÖÆ²Ù×÷ÑÓ³Ùµ½¸¸½ø³Ì»ò×Ó½ø³ÌÏòijÄÚ´æÒ³ÃæÐ´ÈëÊý¾Ý֮ǰ£¬ÔÚÖ»¶Á·ÃÎʵÄÇé¿öϸ¸½ø³ÌºÍ×Ó½ø³Ì¹²ÓÃÒ»¸öÄÚ´æÒ³£¬Ìá¸ßÁËÖ´ÐÐЧÂÊ¡£exec½«Ò»¸öгÌÐò¼ÓÔØµ½µ±Ç°½ø³ÌµÄÄÚ´æÖв¢Ö´ÐУ¬¾É³ÌÐòµÄÄÚ´æÒ³±»Ë¢³ö£¬ÆäÄÚÈÝÌæ»»ÎªÐÂÊý¾Ý£¬¿ªÊ¼Ö´ÐÐгÌÐò¡£
Ị̈߳ºÓÐʱҲ³ÆÎªÇáÁ¿¼¶½ø³Ì¡£±¾ÖÊÉÏÒ»¸ö½ø³Ì¿ÉÄÜÓÉÈô¸ÉÏß³Ì×é³É£¬ÕâЩÏ̹߳²ÏíͬÑùµÄÊý¾ÝºÍ×ÊÔ´£¬µ«¿ÉÄÜÖ´ÐгÌÐòÖв»Í¬µÄ´úÂë·¾¶¡£LinuxÓÃclone·½·¨´´½¨Ị̈߳¬¹¤×÷·½Ê½ÀàËÆÓÚfork£¬µ«ÊÇ»á¼ì²éÈ·ÈÏÄÄЩ×ÊÔ´Ó븸½ø³Ì¹²Ïí£¬ÄÄЩ×ÊԴΪÏ̶߳ÀÁ¢´´½¨¡£Ï¸Á£¶ÈµÄ×ÊÔ´·ÖÅäÀ©Õ¹ÁËÒ»°ãÏ̵߳ĸÅÄÔÚÒ»¶¨³Ì¶ÈÉÏÔÊÐíÏß³ÌÓë½ø³ÌÖ®¼äµÄÁ¬Ðø×ª»»¡£
ÃüÃû¿Õ¼ä£º´«Í³µÄLinuxʹÓÃÁËÐí¶àÈ«¾ÖÁ¿£¬ÆôÓÃÃüÃû¿Õ¼äºó£¬ÒÔǰµÄÈ«¾Ö×ÊÔ´¾ßÓÐÁ˲»Í¬µÄ·Ö×顣ÿ¸öÃüÃû¿Õ¼ä¿ÉÒÔ°üº¬Ò»¸öÌØ¶¨µÄPID¼¯ºÏ£¬»ò¿ÉÒÔÌṩÎļþϵͳµÄ²»Í¬ÊÓͼ£¬ÔÚij¸öÃüÃû¿Õ¼äÖйÒÔØµÄ¾í²»»á´«²¥µ½ÆäËûÃüÃû¿Õ¼äÖС££¨²¢·ÇÄں˵ÄËùÓв¿·Ö¶¼Íêȫ֧³ÖÃüÃû¿Õ¼ä£©ÃüÃû¿Õ¼äµÄ¾µä×÷ÓÃÖ®Ò»£º¿ÉÒÔͨ¹ý³ÆÎªÈÝÆ÷µÄÃüÃû¿Õ¼äÀ´½¨Á¢ÏµÍ³µÄ¶à¸öÊÓͼ£¬Ò»Ì¨ÎïÀí»úÖпÉÒÔÔËÐжà¸öÐéÄâ»ú¡£ÓëÍêÈ«µÄÐéÄâ½â¾ö·½°¸£¨ÈçKVM£©Ïà±È£¬¼ÆËã»úÉ϶àÁËÒ»¸öÄÚºËÀ´¹ÜÀíËùÓеÄÈÝÆ÷¡£
3¡¢µØÖ·¿Õ¼äÓëÌØÈ¨¼¶±ð
ÓÉÓÚÄÚ´æÇøÓòÊÇͨ¹ýÖ¸ÕëѰַ£¬Òò´ËCPUµÄ×Ö³¤¾ö¶¨ÁËËùÄܹÜÀíµÄµØÖ·¿Õ¼äµÄ×î´ó³¤¶È¡£ÒÔ32λϵͳΪÀý£¬¿ÉÒÔ¹ÜÀí232B=4GBµÄÄÚ´æ¡£
µØÖ·¿Õ¼äµÄ×î´ó³¤¶ÈÓëʵ¼Ê¿ÉÓõÄÎïÀíÄÚ´æÊýÁ¿Î޹أ¬Òò´Ë±»³ÆÎªÐéÄâµØÖ·¿Õ¼ä¡£´ÓϵͳÖÐÿ¸ö½ø³ÌµÄ½Ç¶È¿´£¬µØÖ·¿Õ¼äÖÐÖ»ÓÐ×ÔÉíÒ»¸ö½ø³Ì£¬ÎÞ·¨¸ÐÖªµ½ÆäËû½ø³ÌµÄ´æÔÚ¡£Linux½«ÐéÄâµØÖ·¿Õ¼ä»®·ÖΪÁ½¸ö²¿·Ö£¬·Ö±ðΪÄں˿ռäºÍÓû§¿Õ¼ä£¬Èçͼ2Ëùʾ¡£

ͼ2 ÐéÄâµØÖ·¿Õ¼äµÄ»®·Ö

ͼ3ÌØÈ¨¼¶±ðµÄ»·×´ÏµÍ³
ϵͳÖÐÿ¸ö½ø³Ì¶¼ÓÐ×ÔÉíµÄÐéÄâµØÖ··¶Î§£¬´Ó0µ½TASK_SIZE£¬Óû§¿Õ¼äÖ®ÉϵÄÇøÓò±£Áô¸øÄÚºËרÓá£ÒÔIA-32ΪÀý£¬µØÖ·¿Õ¼äÔÚ3GB´¦»®·Ö£¬Ã¿¸ö½ø³ÌÐéÄâµØÖ·¿Õ¼ä¶¼ÊÇ3GB£¬Äں˿ռäÓÉ1GB¿ÉÓᣴ˻®·ÖÓëÄÚ´æÊýÁ¿Î޹ء£ÓÉÓÚµØÖ·¿Õ¼äÐéÄ⻯µÄ½á¹û£¬Ã¿¸öÓû§½ø³Ì¶¼ÈÏΪ×ÔÉíÓÐ3GBÄÚ´æ¡£¸÷¸öϵͳ½ø³ÌµÄÓû§¿Õ¼ä±Ë´ËÍêÈ«·ÖÀë¡££¨64λ¼ÆËã»ú¿É¹ÜÀí¾Þ´óµÄÀíÂÛÐéÄâµØÖ·¿Õ¼ä£¬²Ù×÷ϵͳÖÐÇãÏòÓÚʹÓÃСÓÚ64µÄλÊý£¬Êµ¼ÊʹÓõÄÈç42Ϊ»ò47λµÈ£¬ÕâÑù×ö¿ÉÒÔ½ÚʡһЩCPUµÄ¹¤×÷Á¿£©¡£
ÌØÈ¨¼¶±ð£ºÄں˰ÑÐéÄâµØÖ·¿Õ¼ä»®·ÖΪÁ½¸ö²¿·Ö£¬Òò´ËÄܹ»±£»¤¸÷¸öϵͳ½ø³Ì£¬Ê¹Ö®±Ë´Ë·ÖÀë¡£ËùÓÐÏÖ´úµÄCPU¶¼ÌṩÁ˼¸ÖÖÌØÈ¨¼¶±ð£¬½ø³Ì¿ÉÒÔפÁôÔÚijһ¸öÌØÈ¨¼¶±ð¡£IA-32Ìåϵ½á¹¹Ê¹ÓÃ4ÖÖÌØÈ¨¼¶±ð¹¹³ÉµÄϵͳ£¬¸÷¼¶±ð¿ÉÒÔ¿´×÷ÊÇ»·£¬Èçͼ3Ëùʾ¡£Intel´¦ÀíÆ÷ÓÐ4ÖÖÌØÈ¨¼¶±ð£¬LinuxֻʹÓÃÁ½ÖÖ²»Í¬µÄ״̬£ººËÐÄ̬ºÍÓû§×´Ì¬¡£Á½ÖÖ״̬µÄ¹Ø¼ü²î±ðÔÚÓÚÓû§×´Ì¬½ûÖ¹·ÃÎÊÄÚ´æ¿Õ¼ä¡£´ÓÓû§×´Ì¬µ½ºËÐÄ̬µÄÇл»Í¨¹ýϵͳµ÷ÓõÄÌØ¶¨×ª»»ÊÖ¶ÎÍê³É£¬ÇÒϵͳµ÷ÓõÄÖ´ÐÐÒò¾ßÌåϵͳ¶ø²»Í¬¡£Í¼4¸ÅÊöÁ˲»Í¬µÄÖ´ÐÐÉÏÏÂÎÄ£¨ÏêϸÌÖÂÛ¼ûÏÂһƪ²©¿Í£©¡£´ËÍ⣬ÔÚ¶à´¦ÀíÆ÷ϵͳÖУ¬Ïß³ÌÆô¶¯Ê±¿ÉÒÔÖ¸¶¨CPU£¬²¢ÏÞÖÆÖ»ÄÜÔÚÌØ¶¨CPUÉÏÔËÐС£

ͼ4 ÔÚºËÐÄ̬ºÍÓû§Ì¬Ö´ÐУ¨CPU´ó¶àʱ¼äÔÚÖ´ÐÐÓû§¿Õ¼äÖдúÂ룬µ±Ó¦ÓóÌÐòÖ´ÐÐϵͳµ÷ÓÃʱÇл»µ½ºËÐÄ̬£¬´Ëʱ£¬Äں˿ÉÒÔ·ÃÎÊÐéÄâµØÖ·¿Õ¼äÓû§²¿·Ö¡£ÏµÍ³µ÷ÓýáÊøºóCPU»Øµ½Óû§×´Ì¬¡£Ó²¼þÖжÏÒ²¿ÉÒÔʹCPUÇл»µ½ºËÐÄ̬£¬ÕâÖÖÇé¿öÏÂÄں˲»ÄÜ·ÃÎÊÓû§¿Õ¼ä£©
´ó¶àÇé¿öÏ£¬µ¥¸öÐéÄâµØÖ·¿Õ¼ä¾Í±ÈϵͳÖпÉÓõÄÎïÀíÄÚ´æ´ó¡£´ËÍ⣬ÿ¸ö½ø³ÌÒ²¶¼ÓÐ×ÔÉíµÄÐéÄâµØÖ·¿Õ¼ä£¬Òò´Ë£¬Äں˺ÍCPU±ØÐ뿼ÂÇÈçºÎ½«Êµ¼Ê¿ÉÓõÄÎïÀíÄÚ´æÓ³Éäµ½ÐéÄâµØÖ·¿Õ¼äµÄÇøÓò¡£LinuxÄÚºËÖÐÓÃÒ³±íÀ´ÎªÎïÀíµØÖ··ÖÅäÐéÄâµØÖ·¡£ÐéÄâµØÖ·¹ØÏµµ½½ø³ÌµÄÓû§¿Õ¼äºÍÄں˿ռ䣬¶øÎïÀíµØÖ·ÔòÓÃÀ´Ñ°Ö·Êµ¼Ê¿ÉÓõÄÄÚ´æ¡£ÔÀíÈçͼ5Ëùʾ¡£Á½¸ö½ø³ÌµÄÐéÄâµØÖ·¿Õ¼ä¶¼±»»®·ÖΪºÜ¶àµÈ³¤µÄ²¿·Ö£¨Ò³£©£¬ÎïÀíÄÚ´æÍ¬Ñù½øÐл®·Ö¡£

ͼ5 ÐéÄâµØÖ·ºÍÎïÀíµØÖ·
ÎïÀíÄÚ´æÒ³¾³£³ÆÎªÒ³Ö¡£¬Ò³ÔòÖ¸ÐéÄâµØÖ·¿Õ¼äÖеĻ®·Öµ¥Î»¡£ÐéÄâµØÖ·¿Õ¼äºÍÎïÀíÄÚ´æÖ®¼äµÄÓ³ÉäҲʹµÃ½ø³ÌÖ®¼äµÄ¸ôÀëÓÐÒ»µãµãËɶ¯£¨Äں˸ºÔð½«ÐéÄâµØÖ·¿Õ¼äÓ³Éäµ½ÎïÀíµØÖ·¿Õ¼ä£¬¾ö¶¨ÄÄЩÄÚ´æÇøÓòÔÚ½ø³ÌÖ®¼ä¹²ÏíÄÄЩ²»¹²Ïí£©¡£Í¼5±íÃ÷²¢·ÇÐéÄâµØÖ·¿Õ¼äµÄËùÓÐÒ³¶¼Ó³É䵽ij¸öÒ³Ö¡£¨¿ÉÄÜÊÇÒòΪҳûÓÐʹÓ㬻òÕßÊý¾ÝÉв»ÐèҪʹÓöøÃ»ÓÐÔØÈ룩¡£
4¡¢Ò³±í
ÓÃÀ´½«ÐéÄâµØÖ·¿Õ¼äÓ³Éäµ½ÎïÀíµØÖ·¿Õ¼äµÄÊý¾Ý½á¹¹³ÆÎªÒ³±í£¬¶ÔÓÚÒ³±íµÄ¹ÜÀí²ÉÓö༶·ÖҳģÐÍ¡£Èçͼ6Ëùʾ£¬½«ÐéÄâµØÖ·»®·Ö³É4²¿·Ö£¬ÕâÑùÐèÒªÒ»¸öÈý¼¶Ò³±í¡££¨µ±Ç°LinuxÄں˲ÉÓÃÁËËļ¶Ò³±í£©´Ë´¦ÒÔÈý¼¶Ò³±íΪÀý£¬ÐéÄâµØÖ·µÄµÚÒ»²¿·Ö³ÆÎªÈ«¾ÖҳĿ¼£¨Page
Global Directory, PGD£©£¬ÓÃÓÚË÷Òý½ø³ÌÖеÄÒ»¸öÊý×飨ÿ¸ö½ø³ÌÓÐÇÒ½öÓÐÒ»¸ö£©£»ÐéÄâµØÖ·µÄµÚ¶þ¸ö²¿·Ö³ÆÎªPMD£¨Page
Middle Directory£©£¬²¢Í¨¹ýPGDÖеÄÊý×éÏîÕÒµ½¶ÔÓ¦µÄPMDÖ®ºó£¬Ê¹ÓÃPMDÀ´Ë÷ÒýPMD£»ÐéÄâµØÖ·µÄµÚÈý²¿·Ö³ÆÎªPTE£¨Page
Table Entry£©£¬ÓÃ×÷Ò³±íµÄË÷Òý£¬Ò³±íµÄÊý×éÏîÖ¸ÏòÒ³Ö¡£¬ÐéÄâÄÚ´æÒ³ºÍÒ³Ö¡Ö®¼äµÄÓ³ÉäÓÉ´ËÍê³É£»ÐéÄâÄÚ´æµÄ×îºóÒ»²¿·Ö³ÆÎªÆ«ÒÆÁ¿£¬ËüÖ¸¶¨ÁËÒ³ÄÚ²¿µÄÒ»¸ö×Ö½ÚµÄλÖá£Ã¿¸öµØÖ·¶¼Ö¸ÏòµØÖ·¿Õ¼äÖÐΨһ¶¨ÒåµÄij¸ö×Ö½Ú¡£

ͼ6 ·ÖÅäÐéÄâµØÖ·
Ò³±í¶ÔÐéÄâµØÖ·¿Õ¼äÖв»ÐèÒªµÄÇøÓò£¬²»±Ø´´½¨ÖмäҳĿ¼»òÒ³±í£¬½ÚÊ¡ÁË´óÁ¿µÄÄÚ´æ¡£µ«ÊÇÿ´Î·ÃÎÊÄÚ´æÊ±£¬±ØÐëÖð¼¶·ÃÎʶà¸öÊý×é²ÅÄܽ«ÐéÄâµØÖ·×ª»¯ÎªÎïÀíµØÖ·¡£
CPUÊÔͼʹÓÃMMU£¨Memory Management Unit£©ÓÅ»¯ÄÚ´æ·ÃÎʲÙ×÷£»Í¬Ê±¶ÔÓÚµØÖ·×ª»»ÖгöÏÖ×î¸ßƵµÄÄÇЩµØÖ·£¬±£´æµ½µØÖ·×ª»»ºó±¸»º³åÆ÷£¨Translation
Lookaside Buffer£©µÄCPU¸ßËÙ»º´æÖС£ÔÚÐí¶àÌåϵ½á¹¹ÖиßËÙ»º´æµÄÔËתÊÇ͸Ã÷µÄ£¬µ«Ä³Ð©Ìåϵ½á¹¹ÔòÐèÒªÄÚºËרÃÅ´¦Àí¡£
ÓëCPU½»»¥£ºIA-32Ìåϵ½á¹¹ÔÚ½«ÐéÄâµØÖ·Ó³Éäµ½ÎïÀíµØÖ·Ê±£¬Ö»ÓÃÁËÁ½¼¶Ò³±í£¬64λÌåϵ½á¹¹ÖÐÐèÒªÈý¼¶»òËļ¶Ò³±í£¬ÄÚºËÓëÌåϵ½á¹¹Î޹صIJ¿·Ö×ÜÊǼٶ¨Ê¹ÓÃËļ¶Ò³±í¡£¶ÔÓÚÖ»Ö§³Ö¶þ¼¶»òÈý¼¶Ò³±íµÄCPUÀ´Ëµ£¬ÄÚºËÖÐÌåϵ½á¹¹Ïà¹Ø´úÂë±ØÐëͨ¹ý¿ÕÒ³±í¶ÔȱÉÙµÄÒ³±í½øÐзÂÕæ¡£
ÄÚ´æÓ³É䣺ÄÚ´æÓ³ÉäÊÇÒ»ÖÖÖØÒªµÄ³éÏóÊֶΡ£Ó³Éä·½·¨¿ÉÒÔ½«ÈÎÒâÀ´Ô´µÄÊý¾Ý´«Êäµ½ÐéÄâµØÖ·¿Õ¼äÖУ¬×÷ΪӳÉäÄ¿±êµÄµØÖ·¿Õ¼äÇøÓò£¬¿ÉÒÔÏñÆÕͨÄÚ´æÄÇÒ²ÓÃͨ³£µÄ·½·¨·ÃÎÊ¡£ÄÚºËÔÚʱÏÞÉ豸Çý¶¯³ÌÐòʱ£¬Ö±½ÓʹÓÃÁËÄÚ´æÓ³É䣬ÍâÉèµÄÊäÈë/Êä³ö¿ÉÒÔÓ³Éäµ½ÐéÄâµØÖ·¿Õ¼äµÄÇøÓòÖУ¬¶ÔÏà¹ØÄÚ´æÇøÓòµÄ¶Áд»áÓÉÏµÍ³ÖØ¶¨Ïòµ½É豸£¬¼ò»¯ÁËÇý¶¯³ÌÐòµÄʵÏÖ¡£
5¡¢ÎïÀíÄÚ´æµÄ·ÖÅä
Äں˷ÖÅäÄÚ´æÊ±£¬»á¼Ç¼ҳ֡ÒÑ·ÖÅä»ò¿ÕÏÐ״̬£¬ÒÔÃâÁ½¸ö½ø³ÌʹÓÃͬÑùµÄÄÚ´æÇøÓò¡£ÄÚºËÖ»·ÖÅäÍêÕûµÄÒ³Ö¡£¬½«ÄÚ´æ»®·ÖΪ¸üСµÄ²¿·Ö¹¤×÷ÔòίÍиøÓû§¿Õ¼äÖеıê×¼¿â¡£
Äں˲ÉÓûï°éϵͳ½øÐпìËÙ¼ì²âÄÚ´æÖеÄÁ¬ÐøÇøÓò¡£ÏµÍ³ÖеÄÄÚ´æ¿é×ÜÊÇÁ½Á½·Ö×飬ÿ×éÖÐÁ½¸öÄÚ´æ¿é³ÆÎª»ï°é¡£ÈôÁ½¸ö»ï°é¶¼¿ÕÏУ¬Ôò½«ÆäºÏ²¢ÎªÒ»¸ö¸ü´óÄÚ´æ¿é£¬×÷ΪÏÂÒ»²ã´ÎÉϵÄij¸öÄÚ´æ¿éµÄ»ï°é¡£Í¼7ʦ·¶ÁË»ï°éϵͳ£¬³õʼ´óСΪ8Ò³¡£´ÓÉϵ½Ï£¬Èç¹ûϵͳÐèÒª8¸öÒ³Ö¡£¬Ôò½«16¸öÒ³Ö¡×é³ÉµÄ¿é·ÖΪÁ½¸ö»ï°é£¬ÍùÏÂÀàËÆ...¡£

ͼ7 »ï°éϵͳ
Äں˱¾Éí¾³£ÐèÒª±ÈÍêÕûҳ֡СµÃ¶àµÄÄÚ´æ¿é£¬ÓÉÓÚÄÚºËÎÞ·¨Ê¹Óñê×¼¿âº¯Êý£¬Òò´ËÔÚ»ï°éϵͳµÄ»ù´¡ÉÏ£¬ÉèÖÃÁËÄÚ´æ¹ÜÀí²ã£¬½«»ï°éϵͳÌṩµÄÒ³»®·ÖΪ¸üСµÄ²¿·Ö£¬´ËÍ⻹ΪƵ·±Ê¹ÓõÄС¶ÔÏóÉèÖÃÁËslab»º´æ¡£slab»º´æ×Ô¶¯Î¬»¤Óë»ï°éϵͳµÄ½»»¥£¬ÔÚ»º´æÓþ¡Ê±»áÇëÇóÐŵÄÒ³Ö¡¡£Í¼8×ÛÊöÁË»ï°éϵͳ¡¢slab·ÖÅäÆ÷ÒÔ¼°ÄÚºËÆäËû·½ÃæÖ®¼äµÄ¹ØÁª¡£

ͼ8 Ò³Ö¡µÄ·ÖÅäÓÉ»ï°éϵͳ½øÐУ¬¶øslab·ÖÅäÆ÷Ôò¸ºÔð·ÖÅäСÄÚ´æÒÔ¼°Ìṩһ°ãÐÔµÄÄں˻º´æ
Ò³Ãæ½»»»Í¨¹ýÀûÓôÅÅ̿ռä×÷ΪÀ©Õ¹Äڴ棬Ôö´óÁË¿ÉÓÃÄÚ´æ¡£ÄÚºËÐèÒª¸ü¶àÄÚ´æÊ±£¬²»¾³£Ê¹ÓõÄÒ³¿ÉÓÃдÈëÓ²ÅÌ£¬ÔÙÐèÒª·ÃÎʵÄʱºòͨ¹ýȱҳÒì³£»úÖÆ£¬½«ÏàÓ¦µÄÒ³Çл»»ØÄÚ´æ¡£
Ò³Ãæ»ØÊÕÓÃÓÚ½«ÄÚ´æÓ³Éä±»Ð޸ĵÄÄÚÈÝÓëµ×²ãµÄ¿éÉ豸ͬ²½¡£ÓÐʱ¼ò³ÆÊý¾Ý»ØÐ´¡£
6¡¢¼ÆÊ±
È«¾Ö±äÁ¿jiffies_64ºÍjiffies£¨·Ö±ðÊÇ64λºÍ32λ£©ÎªÄں˵Äʱ¼ä×ø±ê£¬»á°´ºã¶¨µÄʱ¼ä¼ä¸ôµÝÔö¡££¨¶ÔÆäµÄ¸üвÙ×÷¿ÉʹÓõײãÌåϵ½á¹¹ÌṩµÄ¸÷ÖÖ¶¨Ê±Æ÷»úÖÆÖ´ÐУ©
»ùÓÚjiffiesµÄ¼ÆÊ±Ïà¶ÔÁ£¶È½Ï´Ö£¬ÔڵײãÓ²¼þÄÜÁ¦ÔÊÐíµÄǰÌáÏ£¬Äں˿ÉʹÓø߷ֱæÂʵĶ¨Ê±Æ÷Ìṩ¶îÍâµÄ¼ÆÊ±ÊֶΣ¬Äܹ»ÒÔÄÉÃë¼¶µÄ¾«È·¶ÈºÍ·Ö±æÂʼÆÁ¿Ê±¼ä¡£
¼ÆÊ±µÄÖÜÆÚ¿ÉÒÔ¶¯Ì¬¸Ä±ä£¬¶¯Ì¬¸Ä±ä¼ÆÊ±ÖÜÆÚ¶ÔÓÚ¹©µçÊÜÏÞµÄϵͳ£¨±ÈÈç±Ê¼Ç±¾µçÄÔºÍǶÈëʽϵͳ£©ÊǺÜÓÐÓõġ£
7¡¢ÏµÍ³µ÷ÓÃ
ϵͳµ÷ÓÃÊÇÓû§½ø³ÌÓëÄں˽»»¥µÄ¾µä·½·¨¡£POSIX±ê×¼¶¨ÒåÁËÐí¶àϵͳµ÷Óã¬ÒÔ¼°ÕâЩϵͳµ÷ÓÃÔÚËùÓÐ×ñ´ÓPOSIXµÄϵͳ°üÀ¨LinuxÉϵÄÓïÒå¡£´«Í³µÄϵͳµ÷Ó𴲻ͬÀà±ð·Ö×飬Ϊ£º
½ø³Ì¹ÜÀí£º´´½¨Ð½ø³Ì£¬²éѯÐÅÏ¢£¬µ÷ÊÔ¡£
Ðźţº·¢ËÍÐźţ¬¶¨Ê±Æ÷ÒÔ¼°Ïà¹Ø´¦Àí»úÖÆ¡£
Îļþ£º´´½¨¡¢´ò¿ªºÍ¹Ø±ÕÎļþ£¬´ÓÎļþ¶ÁÈ¡ºÍÏòÎļþдÈ룬²éѯÐÅÏ¢ºÍ״̬¡£
Ŀ¼ºÍÎļþϵͳ£º´´½¨¡¢É¾³ýºÍÖØÃüÃûĿ¼£¬²éѯÐÅÏ¢£¬Á´½Ó£¬±ä¸üĿ¼¡£
±£»¤»úÖÆ£º¶ÁÈ¡ºÍ±ä¸üUID/GID£¬ÃüÃû¿Õ¼äµÄ´¦Àí¡£
¶¨Ê±Æ÷º¯Êý£º¶¨Ê±Æ÷º¯ÊýºÍͳ¼ÆÐÅÏ¢¡£
Óû§½ø³ÌÒª´ÓÓû§×´Ì¬Çл»µ½ºËÐÄ̬£¬²¢½«ÏµÍ³¹Ø¼üÈÎÎñίÅɸøÄÚºËÖ´ÐУ¬ÏµÍ³µ÷ÓÃÊDZØÓÉ֮·¡££¨²»Í¬µÄÊDz»Í¬µÄÓ²¼þƽ̨ÌṩµÄÇл»»úÖÆ²»¾¡Ïàͬ£©
8¡¢É豸Çý¶¯³ÌÐò¡¢¿éÉ豸ºÍ×Ö·ûÉ豸
É豸Çý¶¯³ÌÐòÓÃÓÚÓëϵͳÁ´½ÓµÄÊäÈë/Êä³ö×°ÖÃͨÐÅ£¬ÈçÓ²ÅÌ¡¢ÈíÇý¡¢¸÷ÖÖ½è¿Ú¡¢Éù¿¨µÈ¡£
ÍâÉè¿ÉÒÔ·ÖΪ¿éÉ豸ºÍ×Ö·ûÉ豸¡£
¿éÉ豸£ºÓ¦ÓóÌÐò¿ÉÒÔËæ»ú·ÃÎÊÉ豸Êý¾Ý£¬³ÌÐò¿É×ÔÐÐÈ·¶¨¶ÁÈ¡Êý¾ÝµÄλÖá£Êý¾ÝµÄ¶ÁдֻÄÜÒÔ¿éµÄ±¶Êý£¨Í¨³£512B£©½øÐУ¬²»Ö§³Ö»ùÓÚ×Ö·ûµÄѰַ¡££¨Ó¦ÓãºÓ²ÅÌ£©
×Ö·ûÉ豸£ºÌṩÁ¬ÐøµÄÊý¾ÝÁ÷£¬Ó¦ÓóÌÐò¿ÉÒÔ˳Ðò¶ÁÈ¡£¬Í¨³£²»Ö§³ÖËæ»ú´æÈ¡¡£Ïà·´£¬´ËÀàÉ豸֧³Ö°´×Ö½Ú/×Ö·ûÀ´¶ÁдÊý¾Ý¡££¨Ó¦Ó㺵÷ÖÆ½âµ÷Æ÷£©
ÓÉÓÚÄÚºËΪÌá¸ßϵͳÐÔÄÜ£¬¹ã·ºÊ¹ÓÃÁË»º´æ»úÖÆ£¬¿éÉ豸Çý¶¯³ÌÐò±È×Ö·ûÉ豸¸´ÔÓ¡£
9¡¢ÍøÂç
ÓÉÓÚÔÚÍøÂçͨÐÅÆÚ¼ä£¬Êý¾Ý´ò°üµ½Á˸÷ÖÖÐÒé²ãÖС£½ÓÊÕµ½Êý¾Ýʱ£¬Äں˱ØÐëÕë¶Ô¸÷ÐÒé²ãµÄ´¦Àí£¬¶ÔÊý¾Ý½øÐвð°üÓë·ÖÎö£¬È»ºó½«ÓÐЧÊý¾Ý´«µÝ¸øÓ¦ÓóÌÐò£»·¢ËÍÊý¾Ýʱ£¬Äں˱ØÐëÊ×Ïȸù¾Ý¸÷ÐÒé²ãµÄÒªÇó´ò°üÊý¾Ý£¬²ÅÄÜ·¢ËÍ¡£LinuxʹÓÃÁËÔ´ÓÚBSDµÄÌ×½Ó×Ö³éÏó£¬ÒÔÖ§³Öͨ¹ýÎļþ½Ó¿Ú´¦ÀíÍøÂçÁ¬½Ó¡£Ì×½Ó×Ö¿ÉÒÔ¿´×÷ΪӦÓóÌÐò¡¢Îļþ½Ó¿Ú¡¢Äں˵ÄÍøÂçʵÏÖÖ®¼äµÄ´úÀí¡£
10¡¢Îļþϵͳ
LinuxϵͳÓÉ´óÁ¿Îļþ×é³É£¬ÆäÊý¾Ý´æ´¢ÔÚÓ²ÅÌ»òÆäËû¿éÉ豸¡£´æ´¢Ê¹ÓÃÁ˲ã´ÎʽÎļþϵͳ¡£LinuxÖ§³ÖÐí¶à²»Í¬µÄÎļþϵͳ£º±ê×¼µÄExt2¡¢Ext3ºÍExt4Îļþϵͳ¡¢ReiserFS¡¢XFS¡¢VFAT£¨Îª¼æÈÝDOS£©µÈµÈ¡£²»Í¬µÄÎļþϵͳ»ùÓÚ²»Í¬µÄ¸ÅÄî³éÏó¡£´ËÍâÄں˱ØÐëÌṩһ¸öVFS£¨Virtual
Filesystem»òVirtual Filesystem Switch£©£¬½«¸÷ÖֵײãÎļþϵͳµÄ¾ßÌåÌØÐÔÓëÓ¦Óòã¸ôÀë¡£Èçͼ9Ëùʾ£¬VFS¼ÈÊÇÏòϵĽӿڣ¨ËùÓÐÎļþϵͳ¶¼±ØÐëʵÏָýӿڣ©£¬Í¬Ê±Ò²ÊÇÏòÉϵĽӿڣ¨Óû§½ø³Ìͨ¹ýϵͳµ÷ÓÃ×îÖÕÄܹ»·ÃÎÊÎļþϵͳ¹¦ÄÜ£©¡£

ͼ9 ÐéÄâÎļþϵͳ²ã¡¢ÎļþϵͳʵÏֺͿéÉ豸²ãÖ®¼äµÄ»¥²Ù×÷
11¡¢Ä£¿éºÍÈȲå°Î
Ä£¿éÓÃÓÚÔÚÔËÐÐʱ¶¯Ì¬ÏòÄÚºËÌí¼Ó¹¦ÄÜ£¨ÈçÉ豸Çý¶¯³ÌÐò¡¢Îļþϵͳ¡¢ÍøÂçÐÒéµÈ£©£¬Ïû³ýÁ˺êÄÚºËÓë΢ÄÚºËÏà±ÈÒ»¸öÖØÒªµÄ²»ÀûÖ®´¦¡£Ä£¿éÒ²¿ÉÒÔÔÚÔËÐÐʱ´ÓÄÚºËдÔÚ£¬·½±ãÁË¿ª·¢ÐÂÄÚºË×é¼þ¡£
Ä£¿é±¾ÖÊÉÏÒ²ÊÇÆÕͨ³ÌÐò£¬Ëü±ØÐëÌṩijЩ´úÂë¶ÎÔÚÄ£¿é³õʼ»¯ºÍÖÕֹʱִÐУ¬ÒÔ±ãÏòÄÚºË×¢²áºÍ×¢ÏúÄ£¿é¡£Ä£¿é´úÂë¿ÉÒÔÏñ±àÒëµ½ÄÚºËÖеĴúÂëÒ»Ñù£¬·ÃÎÊÄÚºËËùÓк¯ÊýºÍÊý¾Ý¡£
¶ÔÖ§³ÖÈȲå°Î¶øÑÔ£¬Ä£¿é±¾ÖÊÉÏÊDZØÐëµÄ¡£Ä³Ð©×ÜÏߣ¨±ÈÈçUSB£©ÔÊÐíÔÚϵͳÔËÐÐʱÁ¬½ÓÉ豸£¬ÎÞÐèÖØÆô£¬ÏµÍ³¼ì²âµ½É豸ʱ£¬Í¨¹ý¼ÓÔØ¶ÔÓ¦µÄÄ£¿é£¬½«Çý¶¯Ìí¼Óµ½ÄÚºËÖС££¨Ä³Ð©Ä£¿é¿ª²»¿ªÔ´ÓÐÕùÂÛ£©
12¡¢»º´æ
ÄÚºËʹÓûº´æÀ´¸Ä½øÐÔÄÜ¡£´ÓµÍËٵĿéÉ豸¶ÁÈ¡µÄÊý¾Ý»áÔÝʱ±£³ÖÔÚÄÚ´æÖУ¬Ó¦ÓóÌÐòÏ´ηÃÎÊÊý¾Ýʱ£¬¿ÉÒÔÈÆ¹ýµÍËٵĿéÉ豸¡£ÓÉÓÚÄÚºËͨ¹ý»ùÓÚÒ³µÄÄÚ´æÓ³ÉäÀ´ÊµÏÖ¶Ô¿éÉ豸µÄ·ÃÎÊ£¬Òò´Ë»º´æÒ²°´Ò³×éÖ¯£¬³ÆÎªÒ³»º´æ¡£¿é»º´æÓÃÓÚ»º´æÃ»ÓÐ×éÖ¯³ÉÒ³µÄÊý¾Ý£¬Èç½ñÒѱ»Ò³»º´æÈ¡´ú¡£
13¡¢Á´±í´¦Àí
C³ÌÐòÖÐÖØ¸´³öÏÖµÄÒ»ÏîÈÎÎñÊǶÔË«ÏòÁ´±íµÄ´¦Àí£¬ÄÚºËͬÑùÐèÒª´¦ÀíÕâÑùµÄÁ´±í¡£ÄÚºËÌṩÁËÒ»¸ö±ê×¼Á´±í£¬¿ÉÓÃÓÚ½«ÈκÎÀàÐ͵ÄÊý¾Ý½á¹¹±Ë´ËÁ¬½ÓÆðÀ´£¨·ÇÀàÐͰ²È«£©¡£¼ÓÈëÁ´±íµÄÊý¾Ý½á¹¹±ØÐë°üº¬Ò»¸öÀàÐÍΪlist_headµÄ³ÉÔ±£¬ÆäÖаüº¬ÁËÕýÏòºÍ·´ÏòÖ¸Õë¡£Á´±íµÄÆðµãÊÇlist_headµÄʵÀý£¬Í¨³£ÓÃLIST_HEAD£¨list_name£©ºêÀ´ÉùÃ÷³õʼ»¯¡£Í¼10ΪÄں˽¨Á¢µÄ±ê׼˫Á´±íʾÒâͼ¡£¶ÔÁ´±í½øÐвÙ×÷ʱ£¬Äں˶¨ÒåÁËһЩAPI¡£

ͼ10 ±ê׼˫Á´±í
list_add(new,head)£ºÔÚ½ô½ÓheadÖ®ºó²åÈënewÔªËØ¡£
list_add_tail(new,head)£ºÔÚhead֮ǰ£¨¼´Á´±íĩ⣩²åÈënewÔªËØ¡£
list_del(entry)£º´ÓÁ´±íÖÐɾ³ýÒ»Ïî¡£
list_empty(head)£º¼ì²âÁ´±íÊÇ·ñΪ¿Õ¡£
list_splice(list,head)£ºÔÚheadºó²åÈëlistÁ´±í£¬ºÏ²¢Á½¸öÁ´±í¡£
list_entry(ptr,type,member)£º²éÕÒÁ´±íÔªËØ¡££¨ptrΪָÏòÊý¾Ý½á¹¹list_headµÄÖ¸Õ룬typeÊǸÃÊý¾Ý½á¹¹µÄÀàÐÍ£¬memberÊÇÊý¾Ý½á¹¹ÖбíʾÁ´±íÔªËØµÄ³ÉÔ±Ãû£©
list_for_each(pos,head)£º±éÀúÁ´±íËùÓÐÔªËØ¡£
14¡¢¶ÔÏó¹ÜÀíºÍÒýÓüÆÊý
ÄÚºËÖÐÐí¶àµØ·½ÐèÒª¸ú×ټǼCÓïÑÔÖнṹµÄʵÀý£¬Õâ»áµ¼Ö´úÂë¸´ÖÆ¡£Òò´Ë£¬ÔÚÄÚºË2.5¿ª·¢ÆÚ¼ä£¬²ÉÓÃÒ»°ãÐԵķ½·¨À´¹ÜÀíÄں˶ÔÏó£¬Ëü²»Ö¹ÊÇΪÁË·ÀÖ¹´úÂë¸´ÖÆ£¬Í¬Ê±Ò²ÎªÄں˲»Í¬²¿·Ö¹ÜÀíµÄ¶ÔÏóÌṩÁËÒ»ÖµÄÊÓͼ£¬ÔÚÐí¶à²¿·Ö¿ÉÒÔÓÐЧµØÊ¹ÓÃÏà¹ØÐÅÏ¢¡£Ò»°ãÐÔµÄÄں˶ÔÏó»úÖÆ¿ÉÓÃÓÚÖ´ÐУºÒýÓüÆÊý£»¹ÜÀí¶ÔÏóÁ´±í£»¼¯ºÏ¼ÓËø£»½«¶ÔÏóÊôÐÔµ¼³öµ½Óû§¿Õ¼ä£¨Í¨¹ýsysfsÎļþϵͳ£©¡£
£¨1£©Ò»°ãÐÔµÄÄں˶ÔÏó
Ò»°ãÐÔµÄÄں˶ÔÏó³éÏó³ÉÁËÒ»¸ö½á¹¹Ìåkobject£¬ÓÃ×÷Äں˶ÔÏóµÄ»ù´¡¡£
struct kobject{
struct kref kref; //ÓÃÓÚ¼ò»¯ÒýÓüÆÊýµÄ¹ÜÀí
struct list_head entry; //±ê×¼Á´±íÔªËØ
struct kobject * parent; //Ò»¸öÖ¸Ïò¸¸¶ÔÏóµÄÖ¸Õë
struct kset * kset; //½«¶ÔÏóÓëÆäËû¶ÔÏó·ÅÖõ½Ò»¸ö¼¯ºÏʱÐèÒª
struct kobj_type *ktype; //ÌṩÁ˰üº¬kobjectÊý¾Ý½á¹¹¸ü¶àÏêϸÐÅÏ¢
struct sysfs_dirent * sd;
} |
kobjectÓëÃæÏò¶ÔÏóÓïÑÔ£¨C++/Java£©ÖеĶÔÏó¸ÅÄîµÄÐÔÖÊÏàËÆ¡£kobject³éÏóÌṩÁËÔÚÄÚºËʹÓÃÃæÏò¶ÔÏó¼¼ÊõµÄ¿ÉÄÜÐÔ¡£
£¨2£©¶ÔÏ󼯺Ï
ºÜ¶àÇé¿öÏ£¬ÐèÒª½«²»Í¬µÄÄں˶ÔÏó¹éÀൽ¼¯ºÏÖУ¨±ÈÈçËùÓÐ×Ö·ûÉ豸¼¯ºÏ£¬ËùÓлùÓÚPCIµÄÉ豸¼¯ºÏµÈ£©¡£
1 struct kset{
2 ¡¡¡¡¡¡¡¡struct kobj_type ¡¡¡¡¡¡¡¡* ktype; //Ö¸ÏòksetÖи÷Äں˶ÔÏóµÄ¹«ÓÃkobj_type½á¹¹£¬ÌṩÁËÓësysfsÎļþϵͳµÄ½Ó¿Ú
3 ¡¡¡¡¡¡¡¡struct list_head ¡¡¡¡ ¡¡¡¡list;//µ±Ç°¼¯ºÏµÄÄں˶ÔÏóÁ´±í
4 ...
5 ¡¡¡¡¡¡¡¡struct kobject ¡¡¡¡¡¡¡¡¡¡¡¡kobj;
6 ¡¡¡¡¡¡¡¡struct kset_uevent_ops * uevent_ops; //ÌṩÁËÈô¸Éº¯ÊýÖ¸Õ룬½«¼¯ºÏ״̬´«µÝ¸øÓû§²ã
7 } |
ksetÊÇÄں˶ÔÏóÓ¦ÓõĵÚÒ»¸öÀý×Ó£¬Ëü¶ÔkobjectµÄ¹ÜÀíÊÇÔÚksetÖÐǶÈëÁËÒ»¸ökobjectµÄʵÀýkobj£¬ËüÓ뼯ºÏÖаüº¬µÄ¸÷¸ökobjectÎ޹أ¬Ö»ÊÇÓÃÀ´¹ÜÀíkset¶ÔÏó±¾Éí¡£
£¨3£©ÒýÓüÆÊý
ÒýÓüÆÊýÓÃÓÚ¼ì²âÄÚºËÖÐÓжàÉٵط½Ê¹ÓÃÁËij¸ö¶ÔÏó¡£Ã¿µ±Äں˵ÄÒ»¸ö²¿·ÖÐèҪij¸ö¶ÔÏóËù°üº¬µÄÐÅϢʱ£¬¸Ã¶ÔÏóÒýÓüÆÊý¼Ó1£¬Èç¹û²»ÔÙÐèÒª£¬ÔòÒýÓüÆÊý¼õ1¡£µ±¼ÆÊýΪ0ʱ£¬ÄÚºËÖªµÀ²»ÔÙÐèÒª¸Ã¶ÔÏ󣬱ã´ÓÄÚ´æÖн«ÆäÊÍ·Å¡££¨¶ÔÒýÓüÆÊýµÄ²Ù×÷ΪÔ×Ó²Ù×÷£©
15¡¢Êý¾ÝÀàÐÍ
£¨1£©ÀàÐͶ¨Òå
ÄÚºËʹÓÃtypedef¶¨Òå¸÷ÖÖÊý¾ÝÀàÐÍ£¬±ÜÃâÒÀÀµÓÚÌåϵ½á¹¹Ïà¹ØµÄÌØÐÔ¡££¨±ÈÈçsector_tÓÃÓÚÖ¸¶¨¿éÉ豸ÉÈÇø±àºÅ£¬pid_t±íʾ½ø³ÌID£¬_s8(8λÓзûºÅÊý)£¬_u8(8λÎÞ·ûºÅÊý)µÈ£©
£¨2£©×Ö½ÚÐò
ÏÖ´ú¼ÆËã»ú²ÉÓôó¶ËÐò£¨big endian£©»òС¶ËÐò£¨little endian£©¸ñʽ¡£´ó¶ËÐòÖУ¬¸ßλÔÚµÍ×Ö½Ú£»Ð¡¶ËÐòÖеÍλÔÚµÍ×Ö½Ú¡£ÄÚºËÌṩÁ˸÷ÖÖº¯ÊýºÍºê£¬¿ÉÒÔÔÚCPUʹÓõĸñʽÓëÌØ¶¨±íʾ·¨Ö®¼äת»»¡£
£¨3£©per_cpu±äÁ¿
per_cpu±äÁ¿ÊÇͨ¹ýDEFINE_PER_CPU(name,type)ÉùÃ÷£¬ÔÚÓÐÈô¸ÉCPUµÄSMPϵͳÉÏ£¬»áΪÿ¸öCPU·Ö±ð´´½¨±äÁ¿µÄÒ»¸öʵÀý¡£ÓÃÓÚij¸öÌØ¶¨CPUµÄʵÀý¿ÉÒÔͨ¹ýget_cpu(name,cpu)»ñµÃ£¬ÆäÖÐsmp_processor_id()¿ÉÒÔ·µ»Øµ±Ç°»î¶¯´¦ÀíÆ÷ID¡£²ÉÓÃper_cpu±äÁ¿ºÃ´¦
£ºËùÐèÊý¾ÝºÜ¿ÉÄÜ´æÔÚÓÚ´¦ÀíÆ÷»º´æÖУ¬Òò´Ë¿ÉÒÔ¿ìËÙ·ÃÎÊ£»ÈƹýÁ˶ദÀíÆ÷ϵͳÖÐʹÓÿÉÄܱ»ËùÓÐCPUͬʱ·ÃÎʵıäÁ¿µÄͨÐÅÎÊÌâ¡£
£¨4£©·ÃÎÊÓû§¿Õ¼ä
Ô´´úÂëÖжദָÕë±ê¼ÇΪ_user£¬±íʾ¶ÔÓû§¿Õ¼ä³ÌÐòÉè¼ÆÎ´Öª£¬ÔÚûÓнøÒ»²½Ô¤·À´ëʩʱ£¬²»ÄÜÇáÒ×·ÃÎÊÕâЩָÕëÖ¸ÏòµÄÇøÓò¡£ÒòΪÄÚ´æÊÇͨ¹ýÒ³±íÓ³Éäµ½ÐéÄâµØÖ·¿Õ¼äµÄÓû§¿Õ¼ä²¿·ÖµÄ£¬²»ÊÇÓÉÎïÀíÄÚ´æÖ±½ÓÓ³ÉäµÄ£¬ÄÚºËÐèҪȷ±£Ö¸ÕëËùÖ¸µÄҳ֡ȷʵ´æÔÚÓÚÎïÀíÄÚ´æÖС£
ËÄ¡¢ÄÚºËÌØ±ðÖ®´¦
µ÷ÊÔÄÚºËͨ³£±Èµ÷ÊÔÓû§²ã³ÌÐòÀ§ÄÑ¡£
ÄÚºËÌṩÁËÐí¶à¸¨Öúº¯Êý£¬ÀàËÆÓÚÓû§¿Õ¼äµÄCÓïÑԿ⣬µ«ÄÚºËÁìÓòÖеĶ«Î÷×ÜÊÇÆÓËØµÃ¶à¡£
Óû§²ã³ÌÐò´íÎó¿ÉÄܻᵼÖÂsegmentation fault»òcore dump£¬µ«Äں˴íÎó»áµ¼ÖÂÕû¸öϵͳ¹ÊÕÏ¡£
±ØÐ뿼Âǵ½ÄÚºËÔËÐеÄÐí¶àÌåϵ½á¹¹Éϸù±¾²»Ö§³Ö·Ç¶ÔÆëµÄÄÚ´æ·ÃÎÊ¡£
ËùÓÐÄں˴úÂë¶¼±ØÐëÊDz¢·¢°²È«µÄ¡£¶ÔÓÚ¶à´¦ÀíÆ÷¼ÆËã»úµÄÖ§³Ö£¬LinuxÄں˴úÂë±ØÐëÊǿɳåÈëºÍḬ̈߳²È«µÄ¡£
Äں˴úÂë±ØÐëÔÚС¶ËÐòºÍ´ó¶ËÐò¼ÆËã»úÉ϶¼Äܹ»¹¤×÷¡£
´ó¶àÊýµÄÌåϵ½á¹¹¸ù±¾²»ÔÊÐíÔÚÄÚºËÖÐÖ´Ðи¡µã¼ÆË㣬Òò´Ë¼ÆËãÐèÒªÏë°ì·¨ÓÃÕûÐÍÀ´Ìæ´ú¡£
|