前言

image-20260506142153421

虚拟内存基本概念

image-20260506142225413

传统存储方式的缺点

①一次性:作业必须一次性全部转入内存后才能运行。

  • 作业很大塞不进内存
  • 大作业塞进去,小作业塞不进去,无法并发。

② 驻留性:作业被转入内存,就会一直驻留在内存中,(无论部分数据是否用得到),直到作业运行结束。

image-20260506142604457

局部性原理

时间局部性,空间局部性。

虚拟内存

基于局部性原理。

在用户看来,似乎容量比实际容量大得多。

特征:

  • 多次性:无需在作业运行时一次性装入内存。
  • 对换性:作业运行时无需常驻内存。
  • 虚拟性:逻辑上扩充了内存容量。

如何实现虚拟内存

虚拟内存需要建立在离散分配(而不是连续分配)的内存管理方式上。

  • 请求分页存储管理
  • 请求分段存储管理
  • 请求段页式存储管理

额外的功能:

  • 请求调页/段:当访问信息不在内存时,os负责将信息从外存调入内存。
  • 页面/段置换:内存空间不够时,os将内存中暂时用不到的信息调出到外存。

回顾

image-20260506143650084

请求分页管理方式

需要额外实现的功能:请求调页,页面置换。

image-20260506144006442

页表的变化

页表新增的几个部分:状态位,访问字段,修改位,外存地址。

image-20260506144342716

缺页中断机构

新增。

image-20260506145233301

image-20260506145106145

地址变换机构

image-20260506145334626

image-20260506145506237

image-20260506145848878

回顾

image-20260506145956751

页面置换算法

页面置换算法,决定应该换出哪一个页面。

追求更少的缺页率,减少io开销。

image-20260506150320558

最佳置换算法OPT(optimal)

选择最长时间用不到的页面,换出。

缺页中断并不一定发生页面置换,比如还有可用内存块的时候。

但是实际上os并不能直到之后要访问的是哪一个页面,所以OPT是无法实现的。

image-20260506150925543

先进先出置换算法(FIFO)

每次淘汰的是最早进入内存的页面。

(这个排队的队列存在最大长度,取决于系统为进程分配了多少个内存块。)

会产生belady异常,FIFO算法性能差。

image-20260506151551037

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

记录自上次被访问,到现在经历的时间t。

性能好。但是需要硬件支持,开销大。

image-20260506151855671

时钟置换算法(CLOCK)

性能和开销平衡的算法。又叫最近未用算法(NRU)

  • 简单时钟算法
  • 改进时钟算法

新增一个访问位(表示最近是否被访问过)

选择淘汰界面最多会经历两轮扫描。(when第一列访问位全1,需进行第二轮,且先全置0

image-20260507125850339

改进时钟算法

只有淘汰的页面被修改过,才需要io操作写回外存。

所以优先淘汰没有修改过的页面,可以减少io操作。

新增一个修改位。

image-20260507130820053

回顾

image-20260507130918641

页面分配策略

image-20260507131010876

驻留集:

请求分页存储管理中,给进程分配的物理块的集合。

image-20260507131205387

固定分配:os为每个进程分配一定数目的物理块,在进程运行期间不再改变。

可变分配:先为进程分配一定数目的物理块,在进程运行期间,根据情况适当加减。

局部置换:发生缺页时只能选择自己的物理块进行置换。

全局置换:可以将os空闲的物理块分配给缺页进程。也可以将别的进程持有的物理块置换到外存,再分配给缺页进程。【这会造成别的进程物理块减少,缺页率增加】

搭配得到三种分配置换策略:

image-20260507131829264

①固定分配+局部置换:不容易确定应该为每个进程分配多少个物理块。

②可变分配+全局置换: 会出现 – 只要进程发生缺页,就会获得新的物理块。

③可变分配+局部置换: 综合。

when调入页面

1.预调页策略:主要用于进程的首次调入。根据局部性原理,一次性调入多个相邻的页面而不是单一个。

2.请求调页策略:运行时发现缺页,才调入。

where调入页面

1.系统有足够的对换区空间

image-20260507133527725

2.系统没有足够的对换区空间

image-20260507133456406

3.unix方式

image-20260507133438229

抖动/颠簸

刚换出的页面又得换回来了,或刚换入的页面又得换出外存了。

产生原因是:分配给进程的物理块数不够。(驻留集大小<工作集大小)

工作集

在某段时间间隔里,进程实际访问页面 的集合。

工作集大小可能小于窗口尺寸。

image-20260507134736615

回顾

image-20260507135108912

内存映射文件

传统访问方式

image-20260507140538164

内存映射文件

image-20260507140932946

内存映射文件还可以实现文件共享

image-20260507141102693

回顾

image-20260507141136221