一文搞懂操作系统页面置换算法

目录

一.为什么要引入页面置换算法

二.页面置换算法

2.1最优页面置换算法

2.2FIFO页面置换算法

2.3LRU页面置换算法

 2.4时钟置换算法(CLOCK)(NRU)

2.5改进的时钟算法

 


一.为什么要引入页面置换算法

请求分页 存储管理与 基本分页 存储管理的主要区别:
在程序执行过程中,当所 访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存 ,然
后继续执行程序。
若内存空间不够,由操作系统负责 将内存中暂时用不到的信息换出到外存
操作系统确定所需页面的在辅助存储上的位置,但是却发现空闲帧列表上没有空闲帧,所有内存都在使用。

这时,操作系统有多个选项。它可以终止用户进程。然而,请求分页是操作系统试图改善计算机系统的使用率和吞吐量的技术。用户不应该意识到,他们的进程是运行在分页系统上;对用户而言,分页应是透明的。因此,这个选择并不是最佳的。

操作系统可以改为使用标准交换和换出进程,以释放其所有帧并降低多道程度。 然而,由于在内存和交换空间之间复制整个进程的开销,大多数操作系统不再使用标准交换。 大多数操作系统现在将交换页面与页面置换(page replacement)结合在一起。在内存中找到一些页面,但没有真正使用,将其中的页面拿出。

但是我们应该换出内存中的哪个页面呢?

所以我们由此就进入页面置换算法的学习了:


二.页面置换算法

2.1最优页面置换算法

又称为OPT或MIN。置换最长时间不会使用的页面。该算法对于给定数量的页面会产生最低的可能的缺页错误率,不会遭受Belady异常。但难以实现,因为操作系统无法提前预判页面访问序列。因此,最佳置换算法是无法实现的

例题:

假设系统为某进程分配了三个内存块,并考虑到有一下页面号引用串(会依次访问这些页面):
7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1

 

选择从 0,1,7 中淘汰一 页。按最佳置换的规则, 往后寻找,最后一个出现的页号就是要淘汰的页面。(也就是7)
整个过程 缺页中断 发生了 9 页面置换 发生了 6
注意:缺页时未必发生页面置换。若还有可用的空闲内存块,就不用进行页面置换。
缺页率 = 9/20 = 45%

2.2FIFO页面置换算法

每个页面记录了调到内存的时间。当必须置换页面时,将选择最旧的页面。可以创建一个FIFO队列(队列的最大长度取决于系统为进程分配了多少个内存块),来管理所有的内存页面。置换的是队列的首个页面。当调入页面到内存时,就将它加到队列的尾部。每次选择淘汰的页面最早进入内存的页面

例题:


3个帧(内存块)开始为空。首次的3个引用(7,0,1)会引起缺页错误,并被调到这些空帧。之后将调入这些空闲帧。下一个引用(2)置换7,这是因为页面7最先调入。由于0是下一个引用并且已在内存中,所以这个引用不会有缺页错误。对3的首次引用导致页面0被替代,因为它现在是队列的第一个。因为这个置换,下一个对0的引用将有缺页错误,然后页面1被页面0置换。

Belady 异常 —— 当为进程分配的物理块数增大时,缺页次数不减反增的异常现象。
只有 FIFO 算法会产生 Belady 异常。 另外, FIFO 算法虽然 实现简单 ,但是该算法与进程实际运行时的规律不适应,因为先进入的页面也有可能最经常被访问。因此, 算法性能差.

2.3LRU页面置换算法

最近最久未使用置换算法( LRU least recently used ):每次 淘汰的页面 最近最久未使用的页面
实现方法:赋予每个页面对应的页表项中,用 访问字段记录该页面自上次被访问以来所经历的时间 t
当需要淘汰一个页面时,选择现有页面中 t 值最大的,即最近最久未使用的页面

 例题:

例:假设系统为某进程分配了 四个 内存块,并考虑到有以下页面号引用串:
1, 8, 1, 7, 8, 2, 7, 2, 1, 8, 3, 8, 2, 1, 3, 1, 7, 1, 3, 7

 2.4时钟置换算法(CLOCK)(NRU)

最佳置换算法性能最好,但无法实现;先进先出置换算法实现简单,但算法性能差;最近最久未使用置换算法性能好,是最接近OPT 算法性能的,但是实现起来需要专门的硬件支持,算法开销大。
时钟置换算法 是一种性能和开销较均衡的算法,又称 CLOCK 算法 ,或 最近未用算法 NRU Not
Recently Used
简单的 CLOCK 算法 实现方法:为每个页面设置一个 访问位 ,再将内存中的页面都通过链接指针 链接成 一个循环队列 。当某页被访问时,其访问位置为 1 。当需要淘汰一个页面时,只需检查页的访问位。 如果是0 ,就选择该页换出;如果是 1 ,则将它置为 0 ,暂不换出,继续检查下一个页面,若第一轮扫描中所有页面都是1 ,则将这些页面的访问位依次置为 0 后,再进行第二轮扫描(第二轮扫描中一定会有访问位为0 的页面,因此 简单的 CLOCK 算法 选择一个淘汰页面 最多会经过两轮描
例:假设系统为某进程分配了 五个 内存块,并考虑到有以下页面号引用串:
1, 3, 4, 2, 5, 6, 3, 4, 7
当访问完五个内存块后,循环队列如下图:

 可以看到访问位都为1。

当要引用页面号为6时,发现五个内存块都满了,这时将五个内存块的访问位都设置为0.

 然后将页面号为6所需的内容放到1号页占据的内存块:

 然后访问3,将3的访问位设置为1。

 然后访问4,将4的访问位设置为1.

 然后访问7,首先看内存块没有7,然后开始选择替换的页面,指针经过的内存块把访问位设置为0。

找到第一个访问位为0的内存块,替换出去。

 基于此就完成了所有任务。

2.5改进的时钟算法

简单的时钟置换算法 仅考虑到一个页面最近是否被访问过。事实上,如果被淘汰的页面没有被修改过,就不需要执行I/O 操作写回外存。 只有被淘汰的页面被修改过时,才需要写回外存
因此,除了考虑一个页面最近有没有被访问过之外,操作系统还应考虑页面有没有被修改过。 在其他条件都相同时,应优先淘汰没有修改过的页面 ,避免 I/O 操作。这就是改进型的时钟置换算法的思想。
修改位 =0 ,表示页面没有被修改过; 修改位 =1 ,表示页面被修改过。
为方便讨论,用 (访问位,修改位) 的形式表示各页面状态。如(1, 1 )表示一个页面近期被访问过, 且被修改过。
算法规则 :将所有可能被置换的页面排成一个循环队列
第一轮:从当前位置开始扫描到第一个( 0, 0 )的帧用于替换。本轮扫描不修改任何标志位
第二轮:若第一轮扫描失败,则重新扫描,查找第一个( 0, 1 )的帧用于替换。本轮将所有扫描过的帧访问位设为0
第三轮:若第二轮扫描失败,则重新扫描,查找第一个( 0, 0 )的帧用于替换。本轮扫描不修改任何标志位
第四轮:若第三轮扫描失败,则重新扫描,查找第一个( 0, 1 )的帧用于替换。
由于第二轮已将所有帧的访问位设为 0 ,因此经过第三轮、第四轮扫描一 定会有一个帧被选中,因此 改进型 CLOCK 置换算法 选择一个淘汰页面 最多会进行四轮扫描
例题1:有下列队列,现在要选择一个页面置换出去。请写出过程。

 过程:第一轮扫描,找(0,0)不改变访问位,所以找到了(0,0)然后置换

 

例题2:有下列队列,现在要选择一个页面置换出去。请写出过程。

 过程:

第一轮找(0,0)

 没有满足情况的。

第二轮扫描,尝试找到(0,1),然后修改扫描过的访问位为0

 

例题3:有下列队列,现在要选择一个页面置换出去。请写出过程。

过程:第一轮找(0,0)不修改访问位,没有发现

第二轮找(0,1)并修改扫描过的访问位为0,没有找到

 

 第三轮找(0,0)不修改访问位,成功找到。

 

### 推荐算法概述 推荐系统旨在预测用户的兴趣并向用户提供个性化的建议。这类系统广泛应用于电子商务、社交媒体以及娱乐行业等领域,帮助用户发现感兴趣的商品或内容。为了构建有效的推荐引擎,通常采用三种主要类型的推荐技术:基于内容的过滤(Content-based Filtering),协同过滤(Collaborative Filtering),混合模型(Hybrid Models)[^4]。 #### 协同过滤原理 在众多推荐算法中,协同过滤是最常用的一种方法之一。其核心思想在于利用大量其他用户的行为数据来进行个性化推荐。具体来说,如果两个用户在过去表现出相似的兴趣偏好,则认为他们在未来也会有类似的喜好;同样地,对于同一类商品而言,被一群具有相同品味的人所喜爱意味着这些产品之间存在关联性[^4]。 ##### 用户-项目矩阵(U-V矩阵) 以视频平台为例,可以建立一个二维表格形式的关系结构——用户-视频矩阵(User-to-Item Matrix),其中每一行代表一位特定观众的历史观看记录,而每列则对应不同影片的信息。当面对稀疏的数据集时,可以通过填充缺失值或者仅保留评分较高的条目等方式简化处理过程。 ##### 计算相似度 针对上述提到的两种情况(即寻找相似用户和查找相近物品),需要定义合适的距离度量方式来量化彼此间的差异程度。常见的衡量标准包括余弦相似度(Cosine Similarity)、皮尔逊相关系数(Pearson Correlation Coefficient)等。例如,在计算两部电影之间的相似度时,可以选择后者作为评价指标: \[ \text{similarity}(A, B)=\frac{\sum_{i=1}^{n}\left(r_{Ai}-\bar{r}_{A}\right)\left(r_{Bi}-\bar{r}_{B}\right)}{\sqrt{\sum_{i=1}^{n}\left(r_{Ai}-\bar{r}_{A}\right)^{2}} \cdot \sqrt{\sum_{i=1}^{n}\left(r_{Bi}-\bar{r}_{B}\right)^{2}}} \] 这里 \( r_{Xj} \) 表示第 j 位用户给定 X 物品打下的分数,\( \overline {r_X } \) 则表示所有涉及此项目的平均得分。 ```python import numpy as np from scipy.spatial.distance import pdist, squareform def pearson_corr_matrix(data): """Calculate the Pearson correlation coefficient matrix.""" corr = 1 - squareform(pdist(data.T, metric='correlation')) return corr ``` #### 实现步骤 尽管具体的实施方案可能因应用场景的不同有所变化,但总体上遵循以下几个原则: - **数据预处理**:清洗并整理原始日志文件中的交互事件; - **特征提取**:根据业务需求选取恰当维度描述实体属性; - **模型训练**:运用机器学习框架完成参数估计工作; - **效果评估**:借助离线测试集验证性能表现,并持续迭代优化方案。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值