ÔÚ32λµÄϵͳÉÏ£¬ÄÚºËÕ¼ÓдӵÚ3GB~µÚ4GBµÄÏßÐÔµØÖ·¿Õ¼ä£¬¹²1GB´óС£¬Äں˽«ÆäÖеÄǰ896MBÓëÎïÀíÄÚ´æµÄ0~896MB½øÐÐÖ±½ÓÓ³É䣬¼´ÏßÐÔÓ³É䣬½«Ê£ÓàµÄ128MÏßÐÔµØÖ·¿Õ¼ä×÷Ϊ·ÃÎʸßÓÚ896MµÄÄÚ´æµÄÒ»¸ö´°¿Ú¡£ÒýÈë¸ß¶ËÄÚ´æÓ³ÉäÕâÑùÒ»¸ö¸ÅÄîµÄÖ÷ÒªÔÒò¾ÍÊÇÎÒÃÇËù°²×°µÄÄÚ´æ´óÓÚ1Gʱ£¬Äں˵Ä1GÏßÐÔµØÖ·¿Õ¼äÎÞ·¨½¨Á¢Ò»¸öÍêÈ«µÄÖ±½ÓÓ³ÉäÀ´´¥¼°Õû¸öÎïÀíÄÚ´æ¿Õ¼ä£¬¶ø¶ÔÓÚ80x86¿ªÆôPAEµÄÇé¿öÏ£¬ÔÊÐíµÄ×î´óÎïÀíÄÚ´æ¿É´ïµ½64G£¬Òò´ËÄں˽«×Ô¼ºµÄ×îºó128MµÄÏßÐÔµØÖ·¿Õ¼äÌÚ³öÀ´£¬ÓÃÒÔÍê³É¶Ô¸ß¶ËÄÚ´æµÄÔÝʱÐÔÓ³Éä¡£¶øÔÚ64λµÄϵͳÉϾͲ»´æÔÚÕâÑùµÄÎÊÌâÁË£¬ÒòΪ¿ÉÓõÄÏßÐÔµØÖ·¿Õ¼äÔ¶´óÓڿɰ²×°µÄÄÚ´æ¡£ÏÂͼÃèÊöÁËÄÚºË1GBÏßÐÔµØÖ·¿Õ¼äÊÇÈçºÎ»®·ÖµÄ

ÆäÖпÉÒÔÓÃÀ´Íê³ÉÉÏÊöÓ³ÉäÄ¿µÄµÄÇøÓòΪvmalloc area£¬Persistent kernel mappingsÇøÓòºÍ¹Ì¶¨Ó³ÉäÏßÐÔµØÖ·¿Õ¼äÖеÄFIX_KMAPÇøÓò£¬ÕâÈý¸öÇøÓò¶ÔÓ¦µÄÓ³Éä»úÖÆ·Ö±ðΪ·ÇÁ¬ÐøÄÚ´æ·ÖÅ䣬ÓÀ¾ÃÄÚºËÓ³ÉäºÍÁÙʱÄÚºËÓ³Éä¡£
Ïà¹ØÔĶÁ£º
ÓÀ¾ÃÄÚºËÓ³Éä
ÔÚÄں˳õʼ»¯Ò³±í¹ÜÀí»úÖÆÊ±£¬×¨ÃÅÓÃpkmap_page_tableÕâ¸ö±äÁ¿±£´æÁËPKMAP_BASE¶ÔÓ¦µÄÒ³±íÏîµÄµØÖ·£¬ÓÉpkmap_page_tableÀ´Î¬»¤ÓÀ¾ÃÄÚºËÓ³ÉäÇøµÄÒ³±íÏîµÄÓ³É䣬ҳ±íÏî×ÜÊýΪLAST_PKMAP¸ö£¬¾ßÌå¿ÉÒÔ¿´Ç°Ãæ¹ØÓÚÒ³±í»úÖÆ³õʼ»¯µÄ²©ÎÄ¡£ÕâÀïµÄÓÀ¾Ã²¢²»ÊÇÖ¸µ÷ÓÃkmap()½¨Á¢µÄÓ³Éä¹ØÏµ»áÒ»Ö±³ÖÐøÏÂÈ¥ÎÞ·¨½â³ý£¬¶øÊÇÖ¸ÔÚµ÷ÓÃkunmap()½â³ýÓ³ÉäÖ®¼äÕâÖÖÓ³Éä»áÒ»Ö±´æÔÚ£¬ÕâÊÇÏà¶ÔÓÚÁÙʱÄÚºËÓ³Éä»úÖÆ¶øÑԵġ£
ÄÚºËÓÃÒ»¸öpkmap_countÊý×éÀ´¼Ç¼pkmap_page_tableÖÐÿһ¸öÒ³±íÏîµÄʹÓÃ״̬£¬Æäʵ¾ÍÊÇΪÿ¸öÒ³±íÏî·ÖÅäÒ»¸ö¼ÆÊýÆ÷À´¼Ç¼ÏàÓ¦µÄÒ³±íÊÇ·ñÒѾ±»ÓÃÀ´Ó³Éä¡£¼ÆÊýÖµ·ÖΪÒÔÏÂÈýÖÖÇé¿ö£º
¼ÆÊýֵΪ0£º¶ÔÓ¦µÄÒ³±íÏîûÓÐÓ³Éä¸ß¶ËÄڴ棬¼´Îª¿ÕÏпÉÓõÄ
¼ÆÊýֵΪ1: ¶ÔÓ¦µÄÒ³±íÏîûÓÐÓ³Éä¸ß¶ËÄڴ棬µ«ÊDz»¿ÉÓã¬ÒòΪÉÏ´ÎÓ³Éäºó¶ÔÓ¦µÄTLBÏδ±»œ[Ë¢
¼ÆÊýֵΪn(n>1):¶ÔÓ¦µÄÒ³±íÏîÒѾӳÉäÁËÒ»¸ö¸ß¶ËÄÚ´æÒ³¿ò£¬²¢ÇÒÓÐn-1¸öÄں˳ɷÖÕýÔÚÀûÓÃÕâÖÖÓ³Éä¹ØÏµ
ÏÂÃæ½áºÏ´úÂë½øÐоßÌåµÄ·ÖÎö£¬ÏÈͨ¹ýalloc_page(__GFP_HIGHMEM)·ÖÅäµ½ÁËÒ»¸öÊôÓڸ߶ËÄÚ´æÇøÓòµÄpage½á¹¹£¬È»ºóµ÷ÓÃkmap(struct page*page)À´½¨Á¢ÓëÓÀ¾ÃÄÚºËÓ³ÉäÇøµÄÓ³Éä,ÐèҪעÒâÒ»µãµÄÊÇ£¬µ±ÓÀ¾ÃÄÚºËÓ³ÉäÇøÃ»ÓпÕÏеÄÒ³±íÏî¿É¹©Ó³Éäʱ£¬ÇëÇóÓ³ÉäµÄ½ø³Ì»á±»×èÈû£¬Òò´ËÓÀ¾ÃÄÚºËÓ³ÉäÇëÇó²»ÄÜ·¢ÉúÔÚÖжϺͿÉÑÓ³Ùº¯ÊýÖС£
Èç¹ûÒ³¿òÊÇÊôÓڸ߶ËÄÚ´æµÄ»°£¬Ôòµ÷ÓÃkmap_high()À´½¨Á¢Ó³Éä
Èç¹û¸ÃÒ³¿ò֮ǰû±»Ó³Éäµ½ÓÀ¾ÃÄÚºËÓ³ÉäÇø£¬ÔòҪͨ¹ýmap_new_virtual()º¯ÊýÔÚÓÀ¾ÃÄÚºËÓ³ÉäÇø¶ÔÓ¦µÄÒ³±íÖÐÕÒµ½Ò»¸ö¿ÕÏеıíÏîÀ´Ó³ÉäÕâ¸öÒ³¿ò£¬¼òµ¥µÄ˵¾ÍÊÇΪÕâ¸öÒ³¿ò·ÖÅäÒ»¸öÏßÐÔµØÖ·¡£