当前位置:嗨网首页>书籍在线阅读

32-该页在物理内存中吗

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

9.9.5 该页在物理内存中吗

出于调试的需要,Linux提供了mincore()函数,可以用来确定一个给定范围内的内存是在物理内存中还是被交换到了硬盘中:

472.png 调用mincore(),会生成一个向量,表明调用时刻映射中哪个页面是在物理内存中。函数通过vec来返回向量,这个向量描述从start(必需页对齐)开始,长为length(不需要页对齐)字节的内存中的页面的情况。vec的每个字节对应指定区域内的一个页面,第一个字节对应着第一个页面,然后依次对应。因此,vec必须足够大,才能装入(length-1+page size)/page size个字节。如果某个页面在物理内存中,对应字节的最低位是1,否则是0。其他的位目前还没有定义,留待日后使用。

成功时,函数返回0。失败时,返回-1,并设置errno为如下值之一:

EAGAIN

内核目前没有足够的可用资源来满足请求。

EFAULT

参数vec指向一个非法地址。

EINVAL

参数start不是页对齐。

ENOMEM

[address,address+1) 中的内存不在某个基于文件的映射中。

目前,这个系统调用只能用在以MAP_SHARED创建的基于文件的映射上。这在很大程度上限制了这个函数的使用。