考研408--操作系统--day8--操作系统--虚拟内存&请求分页&页面置换/分配

(以下内容全部出自上述课程)

目录

  • 虚拟内存
    • [1. 传统缺点](#1. 传统缺点)
    • [2. 局部性原理](#2. 局部性原理)
    • [3. 定义和特征](#3. 定义和特征)
    • [4. 如何实现?](#4. 如何实现?)
    • [5. 小结](#5. 小结)
  • 请求分页管理方式
    • [1. 页表机制](#1. 页表机制)
    • [2. 缺页中断机构](#2. 缺页中断机构)
    • [3. 地址变换机构](#3. 地址变换机构)
    • [4. 地址转换](#4. 地址转换)
    • [5. 注意点](#5. 注意点)
    • [6. 小结](#6. 小结)
  • 页面置换算法
    • [1. 最佳置换算法(OPT)](#1. 最佳置换算法(OPT))
    • [2. 先进先出置换算法(FIFO)](#2. 先进先出置换算法(FIFO))
    • [3. 最近最久未使用置换算法(LRU)](#3. 最近最久未使用置换算法(LRU))
    • [4. 时钟置换算法(CLOCK)](#4. 时钟置换算法(CLOCK))
    • [5. 改进型的时钟置换算法](#5. 改进型的时钟置换算法)
    • [6. 小结](#6. 小结)
  • 页面分配策略
    • [1. 驻留集](#1. 驻留集)
    • [2. 页面分配、置换策略](#2. 页面分配、置换策略)
    • [3. 何时调入页面](#3. 何时调入页面)
    • [4. 从何处调入页面](#4. 从何处调入页面)
    • [5. 抖动现象](#5. 抖动现象)
    • [6. 工作集(了解)](#6. 工作集(了解))
    • [7. 小结](#7. 小结)
  • 内存映射文件
    • [1. 传统文件访问](#1. 传统文件访问)
    • [2. 内存映射文件](#2. 内存映射文件)
    • [3. 小结](#3. 小结)

虚拟内存


1. 传统缺点

  • 一次性:比如你只有8G的运行内存,但是你想玩一个64G的游戏,传统存储管理就必须把这64G全部调入内存之后才可以运行。传统来看根本没办法把64G放到8G中,所以用传统存储就出现了这样的局限性。
  • 驻留性:这64G被装入内存之后,就必须等你关闭游戏之后才能把这64G全部从内存中搞出去。
  • 问题来了 :玩这个游戏的时候,根本用不到全部的64G,你玩什么板块就只需要这个板块的内存,所以我们就可以通过虚拟存储技术 来实现,我们玩哪个板块就调进哪个板块的内存,从逻辑上扩大内存的大小(就是物理上还是8G,但是因为调入内存的大小不同,可以实现玩更大内存的游戏等)

2. 局部性原理

之前也提到过,就是什么时间调入什么板块的内存都是不确定的。

3. 定义和特征

有限空间-->不停调入需要用到的内存、踢掉不需要的内存-->实现8G运行64G的效果-->虚拟(就是假的)无限空间

打个比方:一家店你想买一个架子的苹果,你边往筐里放,店主边往架子上放苹果,你根本没注意到,就以为这个架子上有无数个苹果。

ps:很像Cache,毕竟都是有限空间不断调入调出。

  • 多次性:对标传统的一次性,通过改进可以多次调入需要的内存。
  • 对换性:对标传统的驻留性,可以多次换入换出正在运行的作业。
  • 虚拟性 :因为看起来像是无限的内存,但实际上(物理上)并没有改变什么,所以是虚拟的。

4. 如何实现?

虚拟内存技术是建立在传统分页、分段、段页存储的基础上进一步改进得到的。

从名字对比上也可以看出来,操作系统需要提供请求调页页面置换 的功能。

5. 小结

请求分页管理方式

可以和基本分页存储对比:基本分页存储管理

1. 页表机制

  • 基本页表:页号+内存块号
  • 请求页表 :页号+内存块号+状态位+访问字段+修改位+外存地址

2. 缺页中断机构

与传统相比,就是多了一个快表(相当于工具),请求页表变得更复杂了而已。

  • 快表命中-->直接查到
  • 快表未命中-->查请求页表-->无就缺页中断
  • 想访问的页面不在内存:缺货
  • 缺页中断:缺货就不会再卖这个货了
  • 进程堵塞-->放入阻塞队列:暂时下架
  • 调页完成:补货
  • 唤醒-->放回就绪队列:重新上架

这个时候重新上架可能出现两种情况:

  • 内存有空闲块:自己的货架还有位置
  • 内存没有空闲块:没位置还想上架这个,就只能把别的货撤掉咯

3. 地址变换机构

新增步骤:请求调页-->页面置换-->修改新增表项

4. 地址转换

  • 快表:存入的页面必须在内存中,有改变就删除,必须保持正确率。
  • 请求页表:在页表中的必是在内存中的,没有的就现调入。

5. 注意点


6. 小结

页面置换算法

这部分很像Cache,可以参考:Cache替换算法

1. 最佳置换算法(OPT)

需要替换页面的时候-->向后查找-->查找到最后出现的页号-->替换最后出现的页号的页面

  • 缺页中断:见红色数字,最开始没存入页表的就算缺页中断
  • 页面置换:除了最开始装入页表的,其余发生缺页中断都需要页面置换
  • 页面置换次数=缺页中断次数-内存块数

    因为实际上根本不可能预知需要什么页号,所以纯理想状态,无法实现。

2. 先进先出置换算法(FIFO)

需要替换页面-->查找最先进入内存的页面-->替换最先进入的

当我们换成四个内存块的时候,可以看出缺页中断的次数变得更高了,这就是Belady异常。

因为局部原理性,刚踢出去的页面也可能马上用到,所以这个算法最差了。

3. 最近最久未使用置换算法(LRU)

需要替换页面-->算上当前需要的页面往前数三格(刚好四个内存块,没被数到的就是最久没用的)-->换掉最久没用的页面

4. 时钟置换算法(CLOCK)

最久未用算法的变种。
规则 :扫描一次-->访问位置为0
目的 :找到访问位为0的,然后踢出去

5. 改进型的时钟置换算法

  • 规则:扫描一次-->访问位置为0
  • 目的 :优先(0,0),其次(0,1)

6. 小结

页面分配策略

1. 驻留集

就是分配给的内存块数(的总数)

2. 页面分配、置换策略

  • 固定分配:由名字可见,怎样都不变
  • 可变分配:灵活,运行期间可以看情况增减
  • 局部置换:只能用分配给自己的
  • 全局置换:就是大家谁有多余的,互相借一借
  • 注意:固定分配只能用自己得到的,所以没有固定全局置换 之说



3. 何时调入页面

4. 从何处调入页面

优先对换区

其次文件区

5. 抖动现象

6. 工作集(了解)

7. 小结

内存映射文件


1. 传统文件访问

传统:如果要修改文件,需要先找到文件的位置,然后还需要调用函数。

2. 内存映射文件

映射:将在内存中的文件映射到虚拟地址(只是映射,还没存入,所以会有缺页中断)

3. 小结

相关推荐
砖厂小工1 小时前
用 GLM + OpenClaw 打造你的 AI PR Review Agent — 让龙虾帮你审代码
android·github
张拭心2 小时前
春节后,有些公司明确要求 AI 经验了
android·前端·人工智能
张拭心2 小时前
Android 17 来了!新特性介绍与适配建议
android·前端
SimonKing3 小时前
OpenCode AI辅助编程,不一样的编程思路,不写一行代码
java·后端·程序员
FastBean4 小时前
Jackson View Extension Spring Boot Starter
java·后端
Kapaseker4 小时前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
黄林晴5 小时前
Android17 为什么重写 MessageQueue
android
Seven975 小时前
剑指offer-79、最⻓不含重复字符的⼦字符串
java
皮皮林55114 小时前
Java性能调优黑科技!1行代码实现毫秒级耗时追踪,效率飙升300%!
java
冰_河14 小时前
QPS从300到3100:我靠一行代码让接口性能暴涨10倍,系统性能原地起飞!!
java·后端·性能优化