为了提高内存的利用率,解决内存供不应求的问题,更加合理的使用内存,引出了虚拟内存的概念。系统将内存暂时不需要的部分写入到硬盘,实现了对于扩展内存容量,所以叫虚拟内存,使得应用程序可以使用比实际物理内存更大的内存空间。前面我们了解了在进程运行过程中,当内存中存在空闲页的时候,系统如何实现这个虚拟内存管理的软硬件实现方式。如果内存中没有空闲页,那么就需要页面的调出,算法的好坏直接影响到系统的性能,本章的主要内容就是基于页面置换算法,其主要内容包括
- 置换算法的功能和目标
- 有哪些页面置换算法,各个算法的优缺点
- linux采用什么样的内存置换算法
1. 页面置换算法
当出现缺页异常,需调入新页面而内存已满时,置换算法选择被置换的物理页面,其主要的目的是以尽可能减少页面的调入调出次数,把未来不再访问或短期内不访问的页面调出,以提高系统的性能。
1.1 局部页面置换算法
局部页面置换的选择范围仅限于当前进程占用的物理页面内,其主要由最优算法、先进先出算法、最近最久未使用算法,其基本的原理和特性如下图
1.2 全局页面置换算法
在局部算法里面并没有考虑各个进程之间的访存差异,全局置换算法为进程分配可变数目的物理页面。常驻集是指进程在运行时,当前时刻实际驻留在内存当中的页面集合。而工作集是进行再运行过程所固有的特征。置换算法的工作就是在进程的工作集的前提下,确定常驻集的大小以及相应页面。
对于全局置换算法,其又可以分为工作集置换算法和缺页率置换算法,其原理如下图
1.3 页面锁定
采用虚拟存储技术后,会产生缺页机制,缺页机制又会带来系统的开销,那么就会使得进程运行的时间变得越来越不确定,那么操作系统就导入了页面锁定技术,给每一个页增加一个页面锁定位。通过设置相应的锁定位,不让操作系统将操作系统使用的页面置换出内存,避免产生由交换过程带来的不确定性延迟,如以下的
- 1.操作系统核心代码
- 2.关键数据结构
- 3.I/O缓冲区
2. linux的页面置换算法
对于虚拟页式存储系统的工作的最佳状态,发生缺页的时候,系统中有大量的空闲页表,使得系统中保存一定数目的空闲页框。对于该问题,linux设计了一个分页的守护进程,多数的时候休眠,可定期唤醒以检查内存状态,其需要定时做以下操作
- 如果空闲页框过少,分页守护进程通过预定的页面置换算法选择页面换出内存
- 如果页面装入内存后被修改,则将他们写回磁盘,分页守护进程可保证所有的空闲页是干净的
对于本章的页面置换的算法,linux采用的是守护进程和缓冲技术来解决该问题,在后期的swap技术进项详细分析,本文只是大致了解了对于页面置换算法的一些基本的算法和特性,对于应该换出哪个页,何时进行页换入和换出,怎么进行页换入和换出机制,需要在swap章节进行详细分析。
Java 面试宝典是大明哥全力打造的 Java 精品面试题,它是一份靠谱、强大、详细、经典的 Java 后端面试宝典。它不仅仅只是一道道面试题,而是一套完整的 Java 知识体系,一套你 Java 知识点的扫盲贴。
它的内容包括:
- 大厂真题:Java 面试宝典里面的题目都是最近几年的高频的大厂面试真题。
- 原创内容:Java 面试宝典内容全部都是大明哥原创,内容全面且通俗易懂,回答部分可以直接作为面试回答内容。
- 持续更新:一次购买,永久有效。大明哥会持续更新 3+ 年,累计更新 1000+,宝典会不断迭代更新,保证最新、最全面。
- 覆盖全面:本宝典累计更新 1000+,从 Java 入门到 Java 架构的高频面试题,实现 360° 全覆盖。
- 不止面试:内容包含面试题解析、内容详解、知识扩展,它不仅仅只是一份面试题,更是一套完整的 Java 知识体系。
- 宝典详情:https://www.yuque.com/chenssy/sike-java/xvlo920axlp7sf4k
- 宝典总览:https://www.yuque.com/chenssy/sike-java/yogsehzntzgp4ly1
- 宝典进展:https://www.yuque.com/chenssy/sike-java/en9ned7loo47z5aw
目前 Java 面试宝典累计更新 400+ 道,总字数 42w+。大明哥还在持续更新中,下图是大明哥在 2024-12 月份的更新情况:
想了解详情的小伙伴,扫描下面二维码加大明哥微信【daming091】咨询
同时,大明哥也整理一套目前市面最常见的热点面试题。微信搜[大明哥聊 Java]或扫描下方二维码关注大明哥的原创公众号[大明哥聊 Java] ,回复【面试题】 即可免费领取。