什么是脏页表

在操作系统中,脏页表是指那些其对应的物理页面自上次写入以来已经被修改过的页表条目集合。当一个页面被标记为“脏”,意味着该页面的内容已经发生了变化,并且这些更改尚未同步到持久存储设备上。

具体来说,在虚拟内存管理系统里,每当有数据从用户态程序写入到某一页时,硬件机制会自动设置相应的页表项中的脏位(Dirty Bit),以此来指示此页面已被更新1

如何处理脏页表

为了有效地管理脏页表并保持系统的高效运行,操作系统通常采用以下几种方式:

定期刷新

定期扫描所有的页表查找带有脏标志的页面,并将它们回写至磁盘或其他永久性存储介质。这种方法可以防止突然断电等情况造成未保存的数据丢失风险。

延迟写策略

延迟实际向磁盘写出脏页的时间直到确实必要为止。这可以通过多种算法实现,比如LRU(Least Recently Used),即最近最少使用的页面优先被淘汰;或者通过工作集模型预测哪些页面可能会再次访问从而推迟其刷出时间。

同步操作触发

某些情况下,如进程结束、文件关闭等事件发生时,系统会强制执行一次完整的脏页清理过程,确保所有已改动但还未存盘的信息都被安全地记录下来。

//C语言伪代码展示如何判断和处理脏页 if (page_table_entry.dirty_bit == true) { // 将页面内容复制到磁盘 write_to_disk(page); // 清除脏位 page_table_entry.dirty_bit = false; }

—— END ——

 思维导图

参考来源

1操作系统-2-操作系统原理 - 存储层次结构与存储管理(寄存器、Cache、MMU、内存、外存、页表)

页表是一种特殊的数据结构,放在系统空间的页表区,存放逻辑页与物理页帧的对应关系。 每一个进程都拥有一个自己的页表,PCB表中有指针指向页表。

​编辑CSDN

2操作系统关键词——Cache、页表

需要注意的是,如果某个页面不在内存中,那么用于保存该页面的磁盘地址不是页表的一部分(也就缺页了)。 缺页异常处理的细节

​编辑CSDN

3Dirty PageTable

问题疑惑 还是对于 kaslr 是否开启的情况,当 kaslr 开启时没啥问题。当 kaslr 关闭时,必须在 leak base 时加上最后的 printf 语句才可能正常执行,否则在遍历页表时会出现页表项解析错误等问题,反正归功于玄学就对了。当然这里也说明了方案1中关闭 kaslr 出错的原因不是 shellcode 的问题,而是没有正确的泄漏 physical kernel base

​编辑CSDN

4armv8/armv9页表属性(page descriptor)的详细介绍

对于 EL0/EL1 虚拟地址空间,Page Descriptor属性字段中的 nG 位将转换标记为Gloabl(G) 或non-Gloabl(nG)。例如,内核映射是Gloabl(G)翻译,应用程序映射是non-Gloabl翻译。Gloabl翻译适用于当前正在运的任何应用程序。非全局翻译仅适用于特定应用程序

​编辑CSDN

相关提问

  • 如果某个页面不在内存中,那么用于保存该页面的磁盘地址是如何管理和定位的?

  • 在多级页表结构下,脏位是在哪一层维护以及怎样影响性能优化?

  • 对于不同类型的处理器架构,例如ARMv8-A, x86_64, 脏页表的具体实现有何差异?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值