linux2.6.28内核对页面置换算法的改进--理论

简介:
最新的2.6.28放出来了,以前很欣赏windows的内存管理,看来linux也不甘示弱,追上来了,我觉得新内核的页面置换算法非常好。新内核采用 了双指针时钟置换算法,这样的话每次就不用扫描整个页面链表了,以往都是在回收内存的时候,先扫描inactive链表,然后将可能的active链表上 的追加到inactive链表,最后回收inactive链表,这个思想是好的,一直也很稳定,但是遇到大内存就不那么好了,每次扫描的页面太多,基本就是在扫描过程中,改变页面所处的链表,活动的放到active,不活动的清除访问标志递减引用计数,不活动的引用计数为0的进行回收,这种算法看来十分笨 拙,因此新内核借鉴了Solaris的方式,采用了双指针时钟,本质上就是将inactive链表维持在一个可微调的可控范围内,每次回收的时候,就先回 收inactive链表的,当然如果有访问标志就重新放入active链表,inactive链表不断得到补充,以使得它里面页面的数量维持在上面提到的一个范围,总结起来就是扫描inactive,有访问位的置回active链表,没有的直接回收,然后从active链表补充页面到inactive链 表,这样的话每次操作的页面数量就不会随着内存的增加而无限制的增长,从而提高了效率。 
另外一个改进就是新内核认为,文件缓存的页面和匿名页面的地位不再相同,为何呢?因为匿名页面更加容易被更改,匿名页面存在的目的就是进程在运行过程中读写的,而磁盘缓存页面存在的目的是加速磁盘访问,它们一般被更改的几率并不大,因此会优先回收磁盘缓存,因为对于很多没有被修改的页面来说,直接丢弃就可 以了,不需要进行磁盘io,对于匿名页面很多都被写过,换出它们需要进行磁盘io,而磁盘io是一个很耗时的行为。对于cpu消耗型的程序,这是一种福 音,因为它们需要的匿名页面很大的几率都在内存,被回收的都是磁盘缓存页面,但是对于io消耗型的程序,这也许不是什么好消息,因为这个实现使得磁盘io 操作增加了。但是我很有信心,因为linux的可微调性,用户一定可以自行配置页面置换的行为的。 
第三个改进就是增加了不可回收链表,以往的内核在回收内存的时候会扫描所有的页面,如果有lock标志的,跳过它,但是还是要一个一个检查,新内核将不可回收的页面移出回收者扫描的视线,这样在扫描的时候就减少了扫描的数量。 

总结起来就是:新内核不再仅仅使用inactive和active两个链表,而是增加了磁盘缓存页面的lru链表以和匿名页面区分,增加了不可换出页面的链表以使之移出扫描者的视线。



 本文转自 dog250 51CTO博客,原文链接:http://blog.51cto.com/dog250/1274026

相关文章
|
4月前
|
机器学习/深度学习 算法 数据挖掘
提高时钟置换算法的性能
【10月更文挑战第25天】通过上述一种或多种方法的综合应用,可以在不同程度上提高时钟置换算法的性能,使其更好地适应各种复杂的系统环境和应用场景,提高虚拟内存管理的效率和系统的整体性能。
138 62
|
4月前
|
算法
时钟置换算法
【10月更文挑战第25天】时钟置换算法是一种简单而有效的页面置换算法,它通过使用位标志和环形链表的结构,在一定程度上平衡了算法的复杂性和性能表现。虽然它存在一些局限性,但通过改进和与其他算法的结合,可以在不同的系统环境中发挥重要作用,提高虚拟内存管理的效率和系统的整体性能。
221 51
|
4月前
|
算法
虚拟内存的页面置换算法有哪些?
【10月更文挑战第25天】不同的页面置换算法各有优缺点,在实际应用中,操作系统会根据不同的应用场景和系统需求选择合适的页面置换算法,或者对算法进行适当的改进和优化,以平衡系统的性能、开销和资源利用率等因素。
91 5
|
4月前
|
算法 Linux 定位技术
Linux内核中的进程调度算法解析####
【10月更文挑战第29天】 本文深入剖析了Linux操作系统的心脏——内核中至关重要的组成部分之一,即进程调度机制。不同于传统的摘要概述,我们将通过一段引人入胜的故事线来揭开进程调度算法的神秘面纱,展现其背后的精妙设计与复杂逻辑,让读者仿佛跟随一位虚拟的“进程侦探”,一步步探索Linux如何高效、公平地管理众多进程,确保系统资源的最优分配与利用。 ####
101 4
|
4月前
|
人工智能 算法 大数据
Linux内核中的调度算法演变:从O(1)到CFS的优化之旅###
本文深入探讨了Linux操作系统内核中进程调度算法的发展历程,聚焦于O(1)调度器向完全公平调度器(CFS)的转变。不同于传统摘要对研究背景、方法、结果和结论的概述,本文创新性地采用“技术演进时间线”的形式,简明扼要地勾勒出这一转变背后的关键技术里程碑,旨在为读者提供一个清晰的历史脉络,引领其深入了解Linux调度机制的革新之路。 ###
|
4月前
|
缓存 负载均衡 算法
Linux内核中的进程调度算法解析####
本文深入探讨了Linux操作系统核心组件之一——进程调度器,着重分析了其采用的CFS(完全公平调度器)算法。不同于传统摘要对研究背景、方法、结果和结论的概述,本文摘要将直接揭示CFS算法的核心优势及其在现代多核处理器环境下如何实现高效、公平的资源分配,同时简要提及该算法如何优化系统响应时间和吞吐量,为读者快速构建对Linux进程调度机制的认知框架。 ####
|
5月前
|
算法
有哪些页面置换算法?
页面置换算法(Page Replacement Algorithms)在计算机操作系统中用于管理虚拟内存。
84 0
|
11天前
|
机器学习/深度学习 算法 数据安全/隐私保护
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
本研究基于MATLAB 2022a,使用GRU网络对QAM调制信号进行检测。QAM是一种高效调制技术,广泛应用于现代通信系统。传统方法在复杂环境下性能下降,而GRU通过门控机制有效提取时间序列特征,实现16QAM、32QAM、64QAM、128QAM的准确检测。仿真结果显示,GRU在低SNR下表现优异,且训练速度快,参数少。核心程序包括模型预测、误检率和漏检率计算,并绘制准确率图。
83 65
基于GRU网络的MQAM调制信号检测算法matlab仿真,对比LSTM
|
2天前
|
机器学习/深度学习 数据采集 算法
基于PSO粒子群优化的CNN-LSTM-SAM网络时间序列回归预测算法matlab仿真
本项目展示了基于PSO优化的CNN-LSTM-SAM网络时间序列预测算法。使用Matlab2022a开发,完整代码含中文注释及操作视频。算法结合卷积层提取局部特征、LSTM处理长期依赖、自注意力机制捕捉全局特征,通过粒子群优化提升预测精度。适用于金融市场、气象预报等领域,提供高效准确的预测结果。
|
2天前
|
算法 数据安全/隐私保护
基于Big-Bang-Big-Crunch(BBBC)算法的目标函数最小值计算matlab仿真
该程序基于Big-Bang-Big-Crunch (BBBC)算法,在MATLAB2022A中实现目标函数最小值的计算与仿真。通过模拟宇宙大爆炸和大收缩过程,算法在解空间中搜索最优解。程序初始化随机解集,经过扩张和收缩阶段逐步逼近全局最优解,并记录每次迭代的最佳适应度。最终输出最佳解及其对应的目标函数最小值,并绘制收敛曲线展示优化过程。 核心代码实现了主循环、粒子位置更新、适应度评估及最优解更新等功能。程序运行后无水印,提供清晰的结果展示。