Linux内存管理

Linux内存管理

ID:38165299

大小:529.61 KB

页数:12页

时间:2019-06-06

Linux内存管理_第1页
Linux内存管理_第2页
Linux内存管理_第3页
Linux内存管理_第4页
Linux内存管理_第5页
资源描述:

《Linux内存管理》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、内存管理,不用多说,言简意赅。在内核里分配内存还真不是件容易的事情,根本上是因为内核不能想用户空间那样奢侈的使用内存。     先来说说内存管理。内核把物理页作为内存管理的基本单位。尽管处理器的最小可寻址单位通常是字,但是,内存管理单元MMU通常以页为单位进行处理。因此,从虚拟内存的交代来看,页就是最小单位。内核用struct page(linux/mm.h)结构表示系统中的每个物理页:?1234567891011121314Structpage{        unsignedlongflags;                   

2、                                           atomic_tcount;                        unsignedintmapcount;                  unsignedlongprivate;                  structaddress_space*mapping;          pgoff_tindex;                          structlist_headlru;      union{      

3、 structpte_chain;       pte_addr_t;    }                 void*virtual;                  };     flag用来存放页的状态,每一位代表一种状态,所以至少可以同时表示出32中不同的状态,这些状态定义在linux/page-flags.h中。count记录了该页被引用了多少次。mapping指向与该页相关的address_space对象。virtual是页的虚拟地址,它就是页在虚拟内存中的地址。要理解的一点是page结构与物理页相关,而并非与虚拟页相

4、关。因此,该结构对页的描述是短暂的。内核仅仅用这个结构来描述当前时刻在相关的物理页中存放的东西。这种数据结构的目的在于描述物理内存本身,而不是描述包含在其中的数据。     在linux中,内核也不是对所有的也都一视同仁,内核而是把页分为不同的区,使用区来对具有相似特性的页进行分组。Linux必须处理如下两种硬件存在缺陷而引起的内存寻址问题:1.一些硬件只能用某些特定的内存地址来执行DMA2.一些体系结构其内存的物理寻址范围比虚拟寻址范围大的多。这样,就有一些内存不能永久地映射在内核空间上。为了解决这些制约条件,Linux使用了三种区:

5、1.ZONE_DMA:这个区包含的页用来执行DMA操作。2.ZONE_NOMAL:这个区包含的都是能正常映射的页。3.ZONE_HIGHEM:这个区包"高端内存",其中的页能不永久地映射到内核地址空间。     区的实际使用与体系结构是相关的。linux把系统的页划分区,形成不同的内存池,这样就可以根据用途进行分配了。需要说明的是,区的划分没有任何物理意义,只不过是内核为了管理页而采取的一种逻辑上的分组。尽管某些分配可能需要从特定的区中获得页,但这并不是说,某种用途的内存一定要从对应的区来获取,如果这种可供分配的资源不够用了,内核就会占

6、用其他可用去的内存。下表给出每个区及其在X86上所占的列表:         每个区都用定义在linux/mmzone.h中的structzone表示,如下:?1234567891011121314structzone{        spinlock_t             lock;        unsignedlong          free_pages;        unsignedlong          pages_min,pages_low,pages_high;        unsignedlong   

7、       protection[MAX_NR_ZONES];        spinlock_t             lru_lock;               structlist_head       active_list;        structlist_head       inactive_list;        unsignedlong          nr_scan_active;        unsignedlong          nr_scan_inactive;        unsign

8、edlong          nr_active;        unsignedlong          nr_inactive;        int                    all_

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。