您的位置:首页 > 其它

进程虚拟内存

2016-07-28 22:06 232 查看
虚拟和物理地址之间的联系(通过页表),以及进程的一个内存区域与其虚拟内存也地址之间的关联。物理内存页和该也所属进程(或更精确地说,所有使用该页进程的对应也表项)之间的联系。子啊换出页时,刚好需哟啊该关联,以便跟新所有涉及的进程。

(1)在映射一页时,他惯量到一个进程,但不一定处于使用中

(2)对页的引用次数表项也使用的活跃程度。为确定该数目,内核首先逆序建立也和所有使用者之间的关联,解下来必须借助于一些技巧来计算出也使用的活跃程度。

第一个任务需要建立页和所有映射了该页的位置之间的关联。为此,内核使用一些附加的数据结构和函数。,采用一种逆向映射方法。

所有映射操作都只设计虚拟内存页,因此不需要建立反向映射。

4.8.1 数据结构

mm.h

struct page {}

显然这没有多少帮助,因为逆向映射的目的在于:给定page实例,找到所有映射了改物理内存也的位置。因此,还有两个其他的数据接哦古需哟啊发挥作用

(1)优先查找书中嵌入了术语非匿名映射的每个区域

(2)指向内存中同意也的匿名区域的链表

用于建立者两个数据接结构的成员及在vm_area_struct中,级shared联合以及 anon_vma_node和anon_vma.为让读者重新整理一下记忆。

4.8.2 建立逆向映射

在创建逆向映射时,有必要区分两个备选项:匿名也和基于文件映射的也。

1.匿名页

将匿名页插入到逆向映射数据接哦古中有两种方法。对新的匿名也必须调用page_add_new_anon_rmap.已经有引用计数的也,则使用page_add_anon_rmap.这两个函数之间唯一的差别是,前者级那个映射技术器page->_mapcount设置为0,后者将技术器加1.

2. 基于文件映射的也

3. void page_add_file_rmap(struct page *page)

{

if (atmic_inc_and_test(&page->_mapcount))

__inc_zone_page_state(page, NR_FILE_MAPPED);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: