文章插图
如果散列表中的槽数与机器中物理页面数一样多,那么散列表的冲突链的长度将会是 1 个表项的长度,这将会大大提高映射速度 。一旦页框被找到,新的(虚拟页号,物理页框号)就会被装在到 TLB 中 。
页面置换算法当发生缺页异常时,操作系统会选择一个页面进行换出从而为新进来的页面腾出空间 。如果要换出的页面在内存中已经被修改,那么必须将其写到磁盘中以使磁盘副本保持最新状态 。如果页面没有被修改过,并且磁盘中的副本也已经是最新的,那么就不需要进行重写 。那么就直接使用调入的页面覆盖需要移除的页面就可以了 。
当发生缺页中断时,虽然可以随机的选择一个页面进行置换,但是如果每次都选择一个不常用的页面会提升系统的性能 。如果一个经常使用的页面被换出,那么这个页面在短时间内又可能被重复使用,那么就可能会造成额外的性能开销 。在关于页面的主题上有很多页面置换算法(page replacement algorithms),这些已经从理论上和实践上得到了证明 。
需要指出的是,页面置换问题在计算机的其他领域中也会出现 。例如,多数计算机把最近使用过的 32 字节或者 64 字节的存储块保存在一个或多个高速缓存中 。当缓存满的时候,一些块就被选择和移除 。这些块的移除除了花费时间较短外,这个问题同页面置换问题完全一样 。之所以花费时间较短,是因为丢掉的高速缓存可以从内存中获取,而内存没有寻找磁道的时间也不存在旋转延迟 。
第二个例子是 Web 服务器 。服务器会在内存中缓存一些经常使用到的 Web 页面 。然而,当缓存满了并且已经引用了新的页面,那么必须决定退出哪个 Web 页面 。在高速缓存中的 Web 页面不会被修改 。因此磁盘中的 Web 页面经常是最新的,同样的考虑也适用在虚拟内存中 。在虚拟系统中,内存中的页面可能会修改也可能不会修改 。
下面我们就来探讨一下有哪些页面置换算法 。
最优页面置换算法最优的页面置换算法很容易描述但在实际情况下很难实现 。它的工作流程如下:在缺页中断发生时,这些页面之一将在下一条指令(包含该指令的页面)上被引用 。其他页面则可能要到 10、100 或者 1000 条指令后才会被访问 。每个页面都可以用在该页首次被访问前所要执行的指令数作为标记 。
最优化的页面算法表明应该标记最大的页面 。如果一个页面在 800 万条指令内不会被使用,另外一个页面在 600 万条指令内不会被使用,则置换前一个页面,从而把需要调入这个页面而发生的缺页中断推迟 。计算机也像人类一样,会把不愿意做的事情尽可能的往后拖 。
这个算法最大的问题时无法实现 。当缺页中断发生时,操作系统无法知道各个页面的下一次将在什么时候被访问 。这种算法在实际过程中根本不会使用 。
最近未使用页面置换算法为了能够让操作系统收集页面使用信息,大部分使用虚拟地址的计算机都有两个状态位,R 和 M,来和每个页面进行关联 。每当引用页面(读入或写入)时都设置 R,写入(即修改)页面时设置 M,这些位包含在每个页表项中,就像下面所示

文章插图
因为每次访问时都会更新这些位,因此由硬件来设置它们非常重要 。一旦某个位被设置为 1,就会一直保持 1 直到操作系统下次来修改此位 。
如果硬件没有这些位,那么可以使用操作系统的缺页中断和时钟中断机制来进行模拟 。当启动一个进程时,将其所有的页面都标记为不在内存;一旦访问任何一个页面就会引发一次缺页中断,此时操作系统就可以设置 R 位(在它的内部表中),修改页表项使其指向正确的页面,并设置为 READ ONLY 模式,然后重新启动引起缺页中断的指令 。如果页面随后被修改,就会发生另一个缺页异常 。从而允许操作系统设置 M 位并把页面的模式设置为 READ/WRITE 。
可以用 R 位和 M 位来构造一个简单的页面置换算法:当启动一个进程时,操作系统将其所有页面的两个位都设置为 0 。R 位定期的被清零(在每个时钟中断) 。用来将最近未引用的页面和已引用的页面分开 。
当出现缺页中断后,操作系统会检查所有的页面,并根据它们的 R 位和 M 位将当前值分为四类:
- 第 0 类:没有引用 R,没有修改 M
- 第 1 类:没有引用 R,已修改 M
- 第 2 类:引用 R ,没有修改 M
- 第 3 类:已被访问 R,已被修改 M
推荐阅读
- 图解Java内存区域
- 分享几款Linux 下C/C++程序内存泄漏检查工具
- 建议收藏 全网最全的SQL语句
- 安卓平板|vivo发布OriginOS HD大屏操作系统:手机、平板、PC无缝协同
- 白茶萎凋,白茶萎凋适度特征
- centos操作系统上实现网卡端口绑定
- 微信太“吃”内存了!教你怎样快速清理微信垃圾,释放手机内存?
- 在常用Linux操作系统中安装VMware Tools
- 聊聊 Linux 的内存统计
- 一加|12GB内存!一加首款天玑8100新机现身GeekBench:或为一加Ace
