ÉèΪÊ×Ò³ ¼ÓÈëÊÕ²Ø

TOP

LinuxÄںˡª¡ªÄÚ´æ¹ÜÀí
2014-11-23 21:36:12 À´Ô´: ×÷Õß: ¡¾´ó ÖРС¡¿ ä¯ÀÀ:7´Î
Tags£ºLinux ÄÚºË ÄÚ´æ ¹ÜÀí

Äں˰ÑÎïÀíÒ³×÷ΪÄÚ´æ¹ÜÀíµÄ»ù±¾µ¥Î»£»ÄÚ´æ¹ÜÀíµ¥Ôª£¨MMU£¬¹ÜÀíÄÚ´æ²¢°ÑÐéÄâµØÖ·×ª»»ÎªÎïÀíµØÖ·£©Í¨³£ÒÔҳΪµ¥Î»½øÐд¦Àí¡£MMUÒÔÒ³´óСΪµ¥Î»À´¹ÜÀíϵͳÖеÄÒ³±í¡£´ÓÐéÄâÄÚ´æµÄ½Ç¶È¿´£¬Ò³¾ÍÊÇ×îСµ¥Î»¡£


32λϵͳ£ºÒ³´óС4KB


64λϵͳ£ºÒ³´óС8KB


ÔÚÖ§³Ö4KBÒ³´óС²¢ÓÐ1GBÎïÀíÄÚ´æµÄ»úÆ÷ÉÏ£¬ÎïÀíÄÚ´æ»á±»»®·ÖΪ262144¸öÒ³¡£ÄÚºËÓà struct page ½á¹¹±íʾϵͳÖеÄÿ¸öÎïÀíÒ³¡£


struct page {


page_flags_t flags; /* ±íʾҳµÄ״̬£¬Ã¿Ò»Î»±íʾһÖÖ״̬*/


atomic_t _count; /* ´æ·ÅÒ³µÄÒýÓüÆÊý£¬0´ú±íûÓб»ÒýÓà */


atomic_t _mapcount;


unsigned long private;


strcut address_space *mapping;


pgoff_t index;


struct list_head lru;


void *virtual; /* Ò³ÔÚÐéÄâÄÚ´æÖеĵØÖ·£¬¶¯Ì¬Ó³ÉäÎïÀíÒ³ */


}


ÏÂÃæ£¬ÎÒÃÇÀ´½âÊÍÏÂÆäÖеÄÖØÒª×ֶΡ£


flags£ºÕâ¸ö×Ö¶ÎÓÃÓÚ´æ·ÅÒ³µÄ״̬¡£ÕâЩ״̬°üÀ¨Ò³ÊDz»ÊÇÔàµÄ£¬ÊDz»ÊDZ»Ëø¶¨ÔÚÄÚ´æÖеȡ£ flag µÄÿһλµ¥¶À±íʾһÖÖ״̬£¬ËùÒÔ£¬ËüÖÁÉÙ¿ÉÒÔͬʱ±íʾ³ö32ÖÖ²»Í¬µÄ״̬¡£


_count£ºÕâ¸ö×ֶδæ·ÅÒ³µÄʹÓüÆÊý£¬Ò²¾ÍÊÇÕâ¸öÒ³±»ÒýÓÃÁ˶àÉٴΡ£ºÜÆæ¹Ö£¬¼¼ÊõÖµ±äΪ -1 ʱ£¬¾Í˵Ã÷µ±Ç°Äں˲¢Ã»ÓÐÒýÓÃÕâÒ»Ò³£¬ÓÚÊÇ£¬ÔÚеķÖÅäÖоͿÉÒÔʹÓÃËü£¬×¢Ò⣬Õâ¸ö×Ö¶ÎʹÓõÄÊÇ -1 ´ú±íδʹÓ㬶ø²»ÊÇ 0 ¡£


virtual£ºÕâ¸ö×Ö¶ÎÊÇÒ³µÄÐéÄâµØÖ·¡£


mapping£ºÕâ¸öÓòÖ¸ÏòºÍÕâ¸öÒ³¹ØÁªµÄaddress_space ¶ÔÏó¡£


private£ºÕâ¸ö¸ù¾ÝÃû×־ͿÉÒÔ¿´µÃ³ö£¬ËüÖ¸Ïò˽ÓÐÊý¾Ý¡£


ÄÚºËͨ¹ýÕâÑùµÄÊý¾Ý½á¹¹¹ÜÀíϵͳÖÐËùÓеÄÒ³£¬ÒòΪÄÚºËÐèÒªÖªµÀÒ»¸öÒ³ÊÇ·ñ¿ÕÏУ¬Ë­ÓÐÓµÓÐÕâ¸öÒ³¡£ÓµÓÐÕß¿ÉÄÜÊÇ£ºÓû§¿Õ¼ä½ø³Ì¡¢¶¯Ì¬·ÖÅäµÄÄÚºËÊý¾Ý¡¢¾²Ì¬Äں˴úÂë¡¢Ò³¸ßËÙ»º´æµÈµÈ¡£ÏµÍ³ÖÐÿһ¸öÎïÀíÒ³¶¼Òª·ÖÅäÕâÑùÒ»¸ö½á¹¹Ì壬½øÐÐÄÚ´æ¹ÜÀí¡£


ÓÉÓÚÓ²¼þµÄÏÞÖÆ£¬Äں˲¢²»ÄܶÔËùÓеÄÒ³Ò»ÊÓͬÈÊ¡£Linux±ØÐë´¦ÀíÈçÏÂÁ½ÖÖÓÉÓÚÓ²¼þ´æÔÚȱÏݶøÒýÆðµÄÄÚ´æÑ°Ö·ÎÊÌ⣺


1£©Ò»Ð©Ó²¼þÖ»ÄÜÓÃÄ³Ð©ÌØ¶¨µÄÄÚ´æµØÖ·À´Ö´ÐÐDMA£¨Ö±½ÓÄÚ´æ·ÃÎÊ£©¡£


2£©Ò»Ð©Ìåϵ½á¹¹ÆäÄÚ´æµÄÎïÀíѰַ·¶Î§±ÈÐéÄâѰַ·¶Î§´óµÃ¶à¡£ÕâÑù£¬¾ÍÓÐһЩÄÚ´æ²»ÄÜÓÀ¾ÃµØÓ³Éäµ½Äں˿ռäÉÏ¡£


ÓÉÓÚ´æÔÚÕâÖÖÏÞÖÆ£¬Äں˰ѾßÓÐÏàËÆÌØÐÔµÄÒ³»®·ÖΪ²»Í¬µÄÇø£¨ZONE£©£º


1£©ZONE_DMA¡ª¡ªÕâ¸öÇø°üº¬µÄÒ³ÄÜÓÃÀ´Ö´ÐÐDMA²Ù×÷¡£


2£©ZONE_NORMAL¡ª¡ªÕâ¸öÇø°üº¬µÄ¶¼ÊÇÄÜÕý³£µØÓ³ÉäÍøÒ³¡£


3£©ZONE_DMA32¡ª¡ªÍ¬ÉÏ£¬²»¹ýÖ»Äܱ»32λÉ豸·ÃÎÊ


4£©ZONE_HIGHMEM¡ª¡ªÕâ¸öÇø°üº¬¡°¸ß¶ËÄڴ桱£¬ÆäÖеÄÒ³²¢Äܲ»ÓÀ¾ÃµØÓ³Éäµ½Äں˵ØÖ·¿Õ¼ä¡£


Linux°ÑϵͳµÄÒ³»®·ÖÎªÇø£¬Ðγɲ»Í¬µÄÄÚ´æ³Ø£¬ÕâÑù¾Í¿ÉÒÔ¸ù¾ÝÓÃ;½øÐзÖÅä¡£×¢Òâ£¬ÇøµÄ»®·ÖûÓÐÈκÎÎïÀíÒâÒ壬ÕâÖ»ÊÇÄÚºËΪÁ˹ÜÀíÒ³¶ø²ÉÈ¡µÄÒ»ÖÖÂß¼­ÉϵķÖ×é¡£ÓÃÓÚDMAµÄÄÚ´æ±ØÐë´ÓZONE_DMAÖнøÐзÖÅ䣬µ«ÊÇÒ»°ãÓÃ;µÄÄÚ´æÈ´¼ÈÄÜ´ÓZONE_DMA·ÖÅ䣬ҲÄÜ´ÓZONE_NORMAL·ÖÅä¡£


ÄÚºËÌṩÁËÒ»ÖÖÇëÇóÄÚ´æµÄµ×²ã»úÖÆ£¬²¢ÌṩÁ˶ÔËü½øÐзÃÎʵö½Ó¿Ú¡£ËùÓÐÕâЩ½Ó¿Ú¶¼ÒÔҳΪµ¥Î»·ÖÅäÄڴ棬¶¨ÒåÓÚ¡£×îºËÐĵĺ¯ÊýÊÇ£º


structpage *alloc_pages( unsigned int gfp_mask, unsigned int order );


¸Ãº¯Êý·ÖÅä 2order ¸öÁ¬ÐøµÄÎïÀíÒ³£¬²¢·µ»ØÒ»¸öÖ¸ÏòµÚÒ»Ò³µÄ page ½á¹¹ÌåÖ¸Õ룬Èç¹û³ö´í¾Í·µ»ØNULL¡£


void*page_address( struct page *page );


°Ñ¸ø¶¨µÄҳת»»³ÉËüµÄÂß¼­µØÖ·¡£Èç¹ûÎÞÐëÓõ½ struct page£¬¿ÉÒÔµ÷Óãº


unsignedlong __get_free_pages( unsigned int gfp_mask, unsigned int order );


Õâ¸öº¯ÊýÓëalloc_pages ×÷ÓÃÏàͬ£¬²»¹ýËüÖ±½Ó·µ»ØËùÇëÇóµÄµÚÒ»¸öÒ³µÄÂß¼­µØÖ·¡£ÒòΪҳÊÇÁ¬ÐøµÄ£¬Òò´ËÆäËûÒ³Ò²»á½ôËæÆäºó¡£


Èç¹ûÖ»ÐèÒªÒ»Ò³£¬¿ÉÒÔÓÃÒÔÏÂÁ½¸öº¯Êý£º


structpage *alloc_page( unsigned int gfp_mask );


unsignedlong _get_free_page( unsigned int gfp_mask );


Èç¹ûÐèÒªÈ÷µ»ØÒ³µÄÄÚÈÝȫΪ0£¬¿ÉÒÔʹÓÃÏÂÃæÕâ¸öº¯Êý


unsignedlong get_zeroed_page(unsigned int gfp_mask );


µ±²»ÔÙÐèҪҳʱ¿ÉÒÔʹÓÃÒÔϺ¯ÊýÀ´ÊÍ·ÅËü¡£


void__free_pages( struct page *page, unsigned int order );


voidfree_pages( unsigned long addr, unsigned int order );


voidfree_page( unsigned long addr );


ÊÍ·ÅҳʱҪ½÷É÷£¬Ö»ÄÜÊÍ·ÅÊôÓÚÄãµÄÒ³¡£´«µÝÁË´íÎóµÄ struct page »òµØÖ·£¬ÓÃÁË´íÎóµÄ order Öµ¶¼¿ÉÄܵ¼ÖÂϵͳ±ÀÀ£¡£Çë¼Çס£¬ÄÚºËÊÇÍêÈ«ÒÀÀµ×Ô¼ºµÄ¡£


¡¾´ó ÖРС¡¿¡¾´òÓ¡¡¿ ¡¾·±Ìå¡¿¡¾Í¶¸å¡¿¡¾Êղء¿ ¡¾ÍƼö¡¿¡¾¾Ù±¨¡¿¡¾ÆÀÂÛ¡¿ ¡¾¹Ø±Õ¡¿ ¡¾·µ»Ø¶¥²¿¡¿
·ÖÏíµ½: 
ÉÏһƪ£ºAngularJS ¨C ʵÏÖ»ùÓÚ½ÇÉ«·ÃÎÊ¿.. ÏÂһƪ£ºLinuxÄںˡª¡ªÖжϻúÖÆ

ÆÀÂÛ

ÕÊ¡¡¡¡ºÅ: ÃÜÂë: (ÐÂÓû§×¢²á)
Ñé Ö¤ Âë:
±í¡¡¡¡Çé:
ÄÚ¡¡¡¡ÈÝ: