带你玩转Linux内核物理页面page结构分析

1、思考问题?(答案:Linux操作系统原理)

  • 当内存不足时,我们如何进行分配?当操作系统运行时候太长,产生很多很多内存碎片,此时我们应该怎么办?如果我们想要分配几十个字节的小块内存,应该使用什么样的方法来解决此问题?我们如何提高系统分配物理内存的效率?

一、物理页面page结构

  • 32位的CPU寻址时按照数据位宽(字word),但是CPU在处理物理内存时即不是按照字进行来分配,因为现在的CPU都采用页分配机制直接来管理内存。所以在CPU里面有一个叫MMU的硬件单元。它会处理虚拟内存到物理内存的映射关系,就是页表的翻译工作。我们站在CPU的角度来分析,管理物理内存的最小单位为页,Linux内核使用一个struct page数据结构描述一个物理页面。struct page数据结构在内核源码分析当中我们可以得到答案。

  • 掌握Linux内核源码分析技术(优势):Linux内核开发工程师。page数据结构对应Linux内核源码如下:

struct page { // 专门用来描述一个物理页面

/* First double word block */

unsigned long flags; // flags此成员是页面的标志位集合,标志位pageflags结构体类型

union {

/*

mapping此成员,当这个页被用于文件缓存时,mapping指向和这个文件缓存相关联的address_space对象,

这个address_space对象是属于内存对象(比如索引节点)的页面集合。当这个页面用于匿名页面时,mapping指向一个

anon_vma数据结构,主要用于反向映射。

*/

struct address_space *mapping;

void *s_mem; /* slab first object */

};

/* Second double word */

struct {

union {

pgoff_t index; /* Our offset within mapping. */

void *freelist; /* sl[aou]b first free object */

bool pfmemalloc; /* If set by the page allocator,

* ALLOC_NO_WATERMARKS was set

* and the low watermark was not

* met implying that the system
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值