µ±Ç°Î»ÖãºLinux½Ì³Ì - Linux×ÊѶ - ¶ÁºËÈÕ¼Ç ( Æß )

¶ÁºËÈÕ¼Ç ( Æß )

×÷Õß: sunmoon ¡¡¡¡¡¡¡¡ÄÚ´æ¹ÜÀíÊÇÒ»¸ö²Ù×÷ϵͳ±Ø²»¿ÉÉÙ.²¢ÇÒ.·Ç³£ÖØÒªµÄÒ»»·.LinuxµÄ³É¹¦.ºÍËüÓÅÐãµÄÄÚ´æ¹ÜÀíÁªÏµ ¡¡¡¡·Ç³£ÃÜÇÐ.ÒòΪһ¸öϵͳµÄ¸ßЧÐÔÓûÎȶ¨ÐÔÍùÍù¾ö¶¨ÓÚËüµÄÄÚ´æ¹ÜÀí»úÖÆ.ÎÒÏîºÜ¶àÈ˳ԹýdosÏ ¡¡¡¡640k µÄ¿à°É. ¡¡¡¡¡¡¡¡Ç°ÃæÎÒÃǽéÉÜÁË386±£»¤Ä£Ê½.´Ó½ñÌìÆðÎÒÃǽ«ÔÚ´Ë»ù´¡ÉÏ,·ÖÎölinuxµÄÐéÄâ´æ´¢¹ÜÀí,¶Ôÿ¸ö³ÌÐò ¡¡¡¡Ô±À´Ëµ.ËûÃǶ¼Ï£ÍûÓÐÎÞÇî´óµÄ¿ìËÙµÄÄÚ´æ,È»¶ø,Ïֽ׶ÎÊDz»¿ÉÄܵÄ,¿öÇÒ,ÎÞÇî´óÓë¿ìËÙ±¾Éí¾Í¿É ¡¡¡¡ÄÜì¶Ü ¡¡¡¡¡¡¡¡ÎªÁ˽â¾öÎÞÇî´ó.linux ÒýÈëÁËÐéÄâ´æ´¢ÏµÍ³,ΪÁ˽â¾ö¿ìËÙ,linux ÒýÈëÁËcache ,½»»»»úÖƵȵÈ, ¡¡¡¡ÒÔʹµÄ´æ´¢ÏµÍ³,ÔÚÈÝÁ¿ÉϽӽüÓ²ÅÌ,ËÙ¶ÈÉϽӽücache.(µ±È»,ÎÒÈÏΪÕâÊǴ洢ϵͳµÄʵ¼ÊÄ¿µÄ). ¡¡¡¡¡¡¡¡Linux µÄÄÚ´æ¹ÜÀí²ÉÈ¡µÄÊÇ·ÖÒ³»úÖÆ.ËüµÄÉè¼ÆÄ¿µÄÊÇ·Öʱ¶àÈÎÎñ.linux ¿Éͬʱ´¦Àí256¸öÈÎÎñ ¡¡¡¡(ÕâÓ¦¸ÃÓëij¸ö±äÁ¿À´¶¨Òå,һʱÏë²»ÆðÀ´).ͬʱËü²ÉÓÃÁËÁ½¼¶±¥ºÍ»úÖÆÀ´·Ö±ðÄں˽ø³ÌÓëÓû§½ø³Ì. ¡¡¡¡¡¡¡¡ÔÚ386 ±£»¤Ä£Ê½µÄ0-4G µÄÏßÐÔÐéÄâµØÖ·ÖÐ,3-4G ÊÇÁô¸øÄں˽ø³ÌµÄ.¶ø0-3G·Ö¸øÓû§½ø³Ì.ÄÚºËÔÚ ¡¡¡¡Äں˿ռäµÄÑ°Ö·²»Í¬ÓÚÓû§½ø³ÌÔÚÓû§¿Õ¼äµÄÑ°Ö·.ÒòΪÄÚºËÊÇÔÚÆô¶¯Ê±×°ÈëÄÚ´æµÄ.˵ÒÔËü¿ÉÒÔ ¡¡¡¡Ö±½Ó°ÉµØÖ·Ó³Éäµ½3G ÒÔÉÏ.Óû§ÈôÏë·ÃÎÊÄں˾Ͳ»Ðíͨ¹ýswapper_pg_div ÖеÄÖ¸ÕëÀ´µÃµ½Ò³±í. ¡¡¡¡¡¡¡¡Ïà·´,Óû§½ø³Ì,ÔÚÓû§¿Õ¼äµÄÑ°Ö·ÊÇͨ¹ýËùÓû§Ò³Ä¿Â¼ÖеÄÖ¸ÕëµÃµ½Óû§µÄÒ³±í.²¢Í¨¹ýÒ³±íµÄÖ¸ ¡¡¡¡ÕëÖ±½ÓÖ¸ÏòÏàÓ¦µÄÎïÀíÄÚ´æ. ¡¡¡¡¡¡¡¡LinuxÐéÄâÄÚ´æµÄʵÏÖ,ÐèÒª¼¸ÖÖ²»Í¬µÄ»úÖÆÀ´ÊµÏÖ: ¡¡¡¡¡¡¡¡µØÖ·Ó³Éä»úÖÆ ¡¡¡¡¡¡¡¡ÄÚ´æµÄ·ÖÅäÓë»ØÊÕ ¡¡¡¡¡¡¡¡ÇëÒ³»úÖÆ ¡¡¡¡¡¡¡¡½»»»»úÖÆ ¡¡¡¡¡¡¡¡ÄÚ´æ¹²Ïí»úÖÆ ¡¡¡¡¡¡¡¡ÔÚ¾ßÌåµÄ¶ÁÔ´Âë֮ǰ.ÎÒÃÇÏȸù¾ÝÎÒÃÇÒÔǰѧ¹ýµÄ²Ù×÷ϵͳ֪ʶ.ºÍCÓïÑÔµÈ֪ʶ.À´¿¼ÂÇÒ»ÏÂ,Õ⼸ ¡¡¡¡¸ö»úÖÆÈçºÎʵÏÖ.ÏÖ×Ô¼ºÉè¼ÆÒ»ÏÂ.ÔÚ¿´±ðÈËÊÇÔõÑùʵÏÖµÄ.ÕÒµ½×Ô¼ºÏë²»µ½.»òÕ߶ÔЧÂÊ¿Õ¼äÓÐËð ¡¡¡¡µÄµØ·½.ÕâÑù²ÅÓнø²½.ÎÒ²»Ö¹Ò»´ÎµÄ˵.²Ù×÷ϵͳµÄijһ²¿·Ö,¾ÍÆðʵÏÖÀ´Ëµ,·Ç³£¼òµ¥.ËüµÄÄѵ㠡¡¡¡ÊÇÈçºÎ½«´óÁ¿µÄ¹¦Äܼ¯³É³öÒ»¸ökernerl. ¡¡¡¡¡¡¡¡µØÖ·Ó³Éä»úÖÆ,˵°×ÁË,¾ÍÊÇÔÚÐéÄâÄÚ´æÓëÎïÀíÄÚ´æÉϵÄÒ»¸öÇÅÁº.ËüÒª×öµÄÊÂÇé¿ÉÄܾÍÊÇͨ¹ý¼¸¸ö ¡¡¡¡²»Í¬µÄ±í.°ÑÐéÄâµØַת»»³ÉÎïÀíµØÖ·,°ÑÎïÀíµØַת»¯ÐéÄâµØÖ·. ¡¡¡¡¡¡¡¡ÎÒÃÇÒÔǰ˵¹ý.ÒòΪÓÐϵͳÓëÓû§Ö®·Ö,Ëü±ØÐëÒ²ÒªÓв»Í¬µÄÊý¾Ý½á¹¹.ΪÁ˽â¾öËٶȵÈÎÊÌâ.Ëü»á ¡¡¡¡ÓÐÒ»¸öÓ²¼þµÄ»º³åÇø ¡¡¡¡¡¡¡¡¶ÔÓÚËüµÄÊý¾Ý½á¹¹.ÎÒÃÇ¿ÉÒÔÏÈÏëÒ»ÏÂ.ÈçÐéÄâµØÖ·µÄÐÅÏ¢,ÐéÄâµØÖ·ÔÚÄǸöÇøÓòµÈµÈ ¡¡¡¡¡¡¡¡ÖÁÓÚÇëÒ³»úÖÆ,¸üºÃÀí½â.ÒòΪlinuxÊÇҳʽ´æ´¢µÄ.Òò´Ë±ØÈ»»á´æÔÚ¿Õ°×Ò³ºÍʹÓÃÒ³.¼ÈÈ»ÊÇÒ³.¾Í ¡¡¡¡±ØÈ»»á´æÔÚÒ³Òç³ö.Ò³ÎÞЧ(ÊDz»ÊÇÔÚwin98 Ͼ­³£³öÏÖÀàËÆ´íÎó,µ±È»linuxµÄÄÚ´æ¹ÜÀí²»¿ÉÄÜºÍ ¡¡¡¡windowsÒ»Ñù,¿É»ù±¾µÀÀíÏàͬ).Òò´Ë.ÔÚÿһ¸öÒ³³ö´í.»òÕ߸ÃÒ³´æ²»Ï¶àÓàµÄÊý¾Ýʱ.¾ÍÒªÒªÇóÄÚ ¡¡¡¡ºË·ÖÅäеÄÒ³Ãæ ¡¡¡¡¡¡¡¡Í¬Ê±.µ±Ê±ÓÃfork() ²úÉúÒ»¸öеĽø³Ìʱ.Ò²ÐèÒª·ÖÅäеÄÒ¶Ãæ.ÕâÒ»²¿·Ö´ó¸Å½²µÄ¾ÍÊǽø³ÌÈçºÎ ¡¡¡¡ÏòÄÚºÍÃèÊö×Ô¼ºÐèÒªÔõôÑùµÄºÍ¶àÉÙÒ³ ¡¡¡¡¡¡¡¡ÔÚÎÒÃÇѧϰ<<Êý¾Ý½á¹¹>>ÊÇÎÒÃÇѧÁË,ºÜ¶àÄÚ´æ·ÖÅ䷽ʽ,ÈçÊ×´ÎÄâºÍ.×î¼ÑÄâºÍ,×î²îÄâºÍµÈµÈ.µ« ¡¡¡¡ÊÇÎÒÃÇ¿ÉÒÔÏëÏó.linux ´ó¸Å²»»áÓÃËûÃÇ.ÄǾÍÒ»¶¨ÊÇ»ï°éϵͳÁË.Òò´ËÎÒÃÇ¿ÉÒÔ¶ÔÓÚ»ï°éϵͳµÄ·Ö ¡¡¡¡Åä,»ØÊյĻù±¾Ëã·¨.»ØÏëÒ»ÏÂ.ÕâÑùÔÚ¶ÁÕßÒ»²¿·ÖÔ´Âëʱ,»ØÓÐÒâÏó²»µ½µÄÊÕ»ñ. ¡¡¡¡¡¡¡¡ÖÁÓÚ½»»»»úÖÆ.ÎÒÃÇÒ²¿ÉÒÔÏÖÏëÒ»Ïë.ÄÚ´æÖÐ×ÜÓëºÜ¶àʹÓÃÕßµÄÒ³.Èç¹ûÕâЩҲÒѾ­°ÑËùÓеÄÒ³¶¼Óà ¡¡¡¡ÍêÁË.ÔÙ·ÖÅäʱ±ØÐë°ÑÆäÖеÄijЩҳÊÍ·Å.ÊÍ·ÅÄÇЩҳ,ÐèÒª¿¼ÂÇ.Èç×î½ü²»ÓÃÒ³.½üÆÚÉÙÓÃÒ³,µÈµÈ ¡¡¡¡¶¼¿ÉÒÔÔÚ¿¼ÂÇÖ®ÖÐ. ¡¡¡¡¡¡¡¡Õâ¸öËã·¨,´ó¸Å¾ÍÊǼÆËãÄÚ´æÖÐʹÓõÄÒ³,ʲôʱºò¿ÉÒÔ»»´¦.˵°×Á˾ÍÊÇΪËùÓеÄʹÓÃÒ³¼ÆËãÒ» ¡¡¡¡¸ö¡±È¨¡±,¶øÕâ¸ö¡±È¨¡±¾Í¾ö¶¨ÁËËûʲôʱºò±»ÊÍ·ÅÒÔ»»ÈçËüµÄÄÚÈÝ.ÐèÒªÏëµÄÊǶÔÓÚ¾­³£Ê¹ÓõÄÒ³.¿É ¡¡¡¡ÒÔ°ÑËü·ÅÈëcahe.(¾¡¹ÜÕâÒ»²¿·Ö¶Ô³ÌÐòÔ±ÊÇ͸Ã÷µÄ,µ«ÎÒÃÇÓ¦¸ÃÀí½âËûµÄÔ­Àí). ¡¡¡¡¡¡¡¡×îºóµÄÒ»²¿·Ö¹²ÏíÄÚ´æ,ÎÒÏëºÍÎÒÃųõѧlinux±à³Ìʱ,½ø³ÌͨѶÀïÃæµÄ¹²ÏíÄÚ´æûÓÐÇø±ð.´ó¸ÅÒ² ¡¡¡¡¾ÍÊÇÔÚËüµÄÊý¾Ý½á¹¹ÖмÓÈë¿ÉÒÔÔÊÐí²»Í¬½ø³Ì·ÃÎʵÄtag ¾ÍÐÐÁË. ¡¡¡¡¡¡¡¡ÒÔÉÏ,Ö»ÊÇÎÒÃǶÔlinuxµÄÄÚ´æ¹ÜÀí»úÖƵIJ²â,ÐèÒªÎÒÃÇ×öµÄ¹¤×÷¾ÍÊǾßÌåµÄ¶ÁÔ´Âë.¸üÕý²»ÕýÈ· ¡¡¡¡µÄ²ÂÏë.ͬʱѧϰ±ðÈ˵Äʵ¼Ê˼·. ¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡µØÖ·µÄÓ³Éä»úÖÆ ¡¡¡¡¡¡¡¡µØÖ·µÄÓ³Éä»úÖÆ,Ö÷ÒªÍê³ÉÖ÷´æ.¸¨´æ.ºÍÐé´æÖ®¼äµÄ¹ØÁª.°üÀ¨´ÅÅÌÎļþµ½Ðé´æµÄÓ³ÉäºÍÐé´æÓëÄÚ ¡¡¡¡´æµÄÓ³Éä¹Øϵ.ΪÁËÐéÄâ´æ´¢ºÍ½ø³Ìµ÷¶ÈÏàÒ»ÖÂ.linux ²ÉÓÿÉһϵÁеÄÊý¾Ý½á¹¹,ºÍÒ»¸öÓ²¼þ»º´æ ¡¡¡¡(TLB)À´ÊµÏÖµØÖ·Ó³Éä»úÖÆ. ¡¡¡¡¡¡¡¡mm_strut ÓÃÀ´ÃèÊö½ø³ÌµÄ»º´æ. ¡¡¡¡¡¡¡¡strUCt mm_struct ¡¡¡¡¡¡¡¡{ ¡¡¡¡¡¡¡¡struct vm_area_struct * mmap; /* list of VMAs */ ¡¡¡¡¡¡¡¡struct vm_area_struct * mmap_avl; /* tree of VMAs */ ¡¡¡¡¡¡¡¡struct vm_area_struct * mmap_cache; /* last find_vma result */ ¡¡¡¡¡¡¡¡pgd_t * pgd; ¡¡¡¡¡¡¡¡atomic_t count; ¡¡¡¡¡¡¡¡int map_count; /* number of VMAs */ ¡¡¡¡¡¡¡¡struct semaphore mmap_sem; ¡¡¡¡¡¡¡¡spinlock_t page_table_lock; ¡¡¡¡¡¡¡¡unsigned long context; ¡¡¡¡¡¡¡¡unsigned long start_code, end_code, start_data, end_data; ¡¡¡¡¡¡¡¡unsigned long start_brk, brk, start_stack; ¡¡¡¡¡¡¡¡unsigned long arg_start, arg_end, env_start, env_end; ¡¡¡¡¡¡¡¡unsigned long rss, total_vm, locked_vm; ¡¡¡¡¡¡¡¡unsigned long def_flags; ¡¡¡¡¡¡¡¡unsigned long cpu_vm_mask; ¡¡¡¡¡¡¡¡unsigned long swap_cnt; /* number of pages to swap on next pass */ ¡¡¡¡¡¡¡¡unsigned long swap_address; ¡¡¡¡¡¡¡¡/* ¡¡¡¡¡¡¡¡* This is an architecture-specific pointer: the portable ¡¡¡¡¡¡¡¡* part of Linux does not know about any segments. ¡¡¡¡¡¡¡¡*/ ¡¡¡¡¡¡¡¡void * segments; ¡¡¡¡¡¡¡¡}; ¡¡¡¡¡¡¡¡ËûÃèÊöÁËÒ»¸ö½ø³ÌµÄҳĿ¼,Óйؽø³ÌµÄÉÏÏÂÎÄÐÅÏ¢.ÒÔ¼°Êý¾Ý.´úÂë.¶ÑÕ»µÄÆôʾ½áÊøµØÖ·.»¹ÓÐÐé ¡¡¡¡Äâ´æ´¢È¡µÃÊýÄ¿.ÒÔ¼°µ÷¶È´æ´¢ÓõÄÁ´±íÖ¸Õë.ËûµÄ²Î²î±È½Ï¸ß ¡¡¡¡¡¡¡¡½Ï¸ß²ã´ÎµÄvm_area-struct ÊÇÃèÊö½ø³ÌµÄÐéÄâµØÖ·ÇøÓò.ËûÐγÉÒ»¸öËãÏàÁ´±í.°´ÐéµØַϽµÅÅÁÐ ¡¡¡¡.ÕâÑùµ±ÄÚºËÐèÒªÔÚÒ»¸ö¸ø¶¨½ø³ÌÒ³ÉÏÖ´Ðиø¶¨²Ù×÷ʱ.¿Í´ÓË«ÏòÁбíÖÐÕÒµ½¸ÃÏî.ÔÚÊÀÏëÓйØÒ³µÄ ¡¡¡¡´¦Àí.Èç.Ò³´íÎó.Ò³»»³öµÈµÈ ¡¡¡¡¡¡¡¡ËûµÄ¾ßÌå½á¹¹ÈçÏÂ: ¡¡¡¡¡¡¡¡struct vm_area_struct { ¡¡¡¡¡¡¡¡struct mm_struct * vm_mm; /* VM area parameters */ ¡¡¡¡¡¡¡¡unsigned long vm_start; ¡¡¡¡¡¡¡¡unsigned long vm_end; ¡¡¡¡¡¡¡¡¡¡ ¡¡¡¡¡¡¡¡/* linked list of VM areas per task, sorted by address */ ¡¡¡¡¡¡¡¡struct vm_area_struct *vm_next; ¡¡¡¡¡¡¡¡¡¡ ¡¡¡¡¡¡¡¡pgprot_t vm_page_prot; ¡¡¡¡¡¡¡¡unsigned short vm_flags; ¡¡¡¡¡¡¡¡¡¡ ¡¡¡¡¡¡¡¡/* AVL tree of VM areas per task, sorted by address */ ¡¡¡¡¡¡¡¡short vm_avl_height; ¡¡¡¡¡¡¡¡struct vm_area_struct * vm_avl_left; ¡¡¡¡¡¡¡¡struct vm_area_struct * vm_avl_right; ¡¡¡¡¡¡¡¡¡¡ ¡¡¡¡¡¡¡¡/* For areas with inode, the list inode->i_mmap, for shm areas, ¡¡¡¡¡¡¡¡* the list of attaches, otherwise unused. ¡¡¡¡¡¡¡¡*/ ¡¡¡¡¡¡¡¡struct vm_area_struct *vm_next_share; ¡¡¡¡¡¡¡¡struct vm_area_struct **vm_pprev_share; ¡¡¡¡¡¡¡¡¡¡ ¡¡¡¡¡¡¡¡struct vm_operations_struct * vm_ops; ¡¡¡¡¡¡¡¡unsigned long vm_offset; ¡¡¡¡¡¡¡¡struct file * vm_file; ¡¡¡¡¡¡¡¡unsigned long vm_pte; /* shared mem */ ¡¡¡¡¡¡¡¡}; ¡¡¡¡¡¡¡¡¶øpage ½á¹¹ ÔòÊǶÔÎïÀíÒ³½øÐÐÃèÊöµÄÒ»¸öÊý¾Ý½á¹¹,Ëû²»ÊÇÒ»¸öÕæÕýµÄÎïÀíÒ³.¶øÖ»²»¹ýÊÇÃèÊö ¡¡¡¡ÁËÒ»¸öÎïÀíÒ³µÄÄÚÈݺͿò¼Ü.×÷ÁËÂß¼­Ò³µÄÒ»¸ö±êÖ¾;.ËûµÄ±êÖ¾Óò¶¨ÒåÁËÕâ¸öÒ³ÔÚ½øÐеIJÙ×÷.Á´ ¡¡¡¡ÓòÔò¶¨ÒåÁËÒ»¸öË«ÏîÁ´±í.ʱµÄÒ³¿ò.¿ÉÒÔºÜÈÝÒ׵IJéÕÒµ½.Ϊʵ¼ÊÎïÀíÄÚ´æµÄʹÓÃÖ±µ½·½±ã ¡¡¡¡¡¡¡¡ËûµÄ¾ßÌå½á¹¹ÈçÏ ¡¡¡¡¡¡¡¡typedef struct page { ¡¡¡¡¡¡¡¡/* these must be first (free area handling) */ ¡¡¡¡¡¡¡¡struct page *next; ¡¡¡¡¡¡¡¡struct page *prev; ¡¡¡¡¡¡¡¡struct inode *inode; ¡¡¡¡¡¡¡¡unsigned long offset; ¡¡¡¡¡¡¡¡struct page *next_hash; ¡¡¡¡¡¡¡¡atomic_t count; ¡¡¡¡¡¡¡¡unsigned long flags; /* atomic flags, some possibly updated asynchronously */ ¡¡¡¡¡¡¡¡wait_queue_head_t wait; ¡¡¡¡¡¡¡¡struct page **pprev_hash; ¡¡¡¡¡¡¡¡struct buffer_head * buffers; ¡¡¡¡¡¡¡¡int owner; /* temporary debugging check */ ¡¡¡¡¡¡¡¡} mem_map_t; ¡¡¡¡¡¡¡¡ËùÓеÄpage ½á¹¹½«¶¼±»×ªÈëÒ»¸ö½Ð×ömem_map µÄÊý×éÖÐ. ¡¡¡¡¡¡¡¡µ±Ò»¸ö½ø³ÌÔËÐÐʱ,ËûµÄ´úÂë¶ÎºÍÊý¾Ý¶Î½«¶¼»á±»µ÷ÈëÄÚ´æ.Èç¹ûËüʹÓÃÁ˹²Ïí¿â.¹²Ïí¿ÍµÄÄÚÈÝÒ² ¡¡¡¡½«±´µñÈçÄÚ´æ.½ø³ÌÔËÐÐʱ.ϵͳÊ×ÏÈ·ÖÅäÒ»¸övm_area_struct ¸ø½ø³Ì.²¢½«Õâ¸÷½ø³ÌÁ¬½áµ½ÐéÄâ ¡¡¡¡ÄÚ´æµÄÁ¬±êÖÐÈ¥.ÕâÊǸù¾Ý½ø³ÌµÄ¿ÉÖ´ÐÐÓ°ÏñÖеÄÐÅÏ¢.°ÉÊý¾Ý¶ÎºÍ¿ÍÖ´ÐдúÂë·ÇÅäÄÚ´æ.зÖÅäµÄ ¡¡¡¡ÄÚ´æ±ØÐëºÍ½ø³ÌÒÑÓеÄÄÚ´æÁ¬½áÆðÀ´²ÅÄÜÓ¦ÓÃ.ÕâÑù¾Û»á³öÏÖÒ³¹ÊÕÏ.ϵͳÀûÓÃÁËÇëÒ³»úÖÆÀ´±ÜÃâ ¡¡¡¡¶ÔÎïÀíÄÚ´æµÄ¹ý·ÖʹÓÃ.µ«½ø³Ì·ÃÎʵÄÐé´æ²»ÔÚµ±Ç°µÄÎïÀíÄÚ´æʱ,Õâʱϵͳ»á½«ÐèÒªµÄÒ³µ÷ÈëÄÚ ¡¡¡¡´æ.ͬʱÐ޸Ľø³ÌµÄÒ³±í.ÓÃÀ´±êÖ¾ÐéÄâÒ³ÊÇ·ñÔÚÎïÀíÄÚ´æÖÐ. ¡¡¡¡¡¡¡¡Òò´Ë,ϵͳÓÃÁ˽ϸ´ÔÓµÄÊý¾Ý½á¹¹À´¸ú×Ù½ø³ÌµÄÐéÄâµØÖ·.ÔÚtask_struct Öаüº¬Ò»¸öÖ¸Ïò ¡¡¡¡mm_struct ½á¹¹µÄÖ¸Õë.½ø³ÌµÄmm_struct ÖÐÔò°üº¬Á˽ø³Ì¿ÉÖ´ÐÐÓ°ÏñµÄҳĿ¼ָÕëpgd.»¹°üº¬ÁË ¡¡¡¡Ö¸Ïòvm_area_struct µÄ¼¸¸öÖ¸Õë,ÿ¸övm_area_struct °üº¬Ò»¸ö½ø³ÌµÄÐéÄâµØÖ·ÇøÓò. ¡¡¡¡¡¡¡¡Ò»¸ö½ø³ÌÓжà¸övm_area_stuct ½á¹¹.linux Òª¾­³£¶Ô½ø³Ì·ÖÅä..»òµ÷Õûvm_area_struct .ÕâÑù¶Ô ¡¡¡¡vm_area_stuct µÄ²éÕÒЧÂÊ.¶ÔϵͳºÜÓÐÓ°Ïñ.ËùÒÔÔÚÕâÀォËùÓеÄvm_area_struct ÐγÉÁËÒ»¸ö²é ¡¡¡¡ÕÒЧÂʽϸߵÄƽºâ¶þ²æÊ÷½á¹¹. ¡¡¡¡¡¡¡¡ÎÒ¸öÈËÈÏΪ,ÔÚÕû¸ölinuxÄÚºËÖÐÕâ¸öµØ·½.Êý¾Ý½á¹¹ÊÇ×ÔÓµÄ.Èç¹û°ÑÕâÒ»²¿·Ö¿ÏÏÂÀ´ÒÔºó,Õû¸ö ¡¡¡¡Äں˱㿪ʼÇåÎúÁË


[1] [2] ÏÂÒ»Ò³ 

 

£¨³ö´¦£ºhttp://www.sheup.com£©


ÉÏÒ»Ò³ [1] [2]