3.2 虚拟内存管理

3.2.1 虚拟内存的基本概念


1、传统存储管理方式的特征

1)一次性: 作业必须一次性全部装入内存后,才开始运行

2)驻留性:作业被装入内存后,就一直驻留在内存中

2、局部性原理: 时间局部性和空间局部性

时间局部性:程序中的某条指令一旦执行,不久后该指令可能再次执行
空间局部性:程序访问了某个存储单元,不久后,其附近的存储单元也被访问。

3、虚拟存储器的定义和特征

1)多次性:无需一次将作业全部装入内存,允许被分次调入内存。
2)对换性: 无需在作业运行时一直常驻内存,允许在作业运行过程中,进行换进和换出。
3)虚拟性: 从逻辑上扩充内存容量。

4、虚拟内存技术的实现

虚拟内存技术的实现需要建立在 离散分配 的内存管理方式的基础之上。

虚拟内存技术的实现有以下三种方式:

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

3.2.2 请求分页管理方式

与基本分页管理相比,请求分页管理中,为了实现“请求调页”,操作系统需要知道每个页面是否已经调入内存;如果还没调入,那么也需要知道该页面在外存中存放的位置。

1、页表机制

请求分页系统建立在基本分页系统基础之上,为了支持虚拟存储器功能而增加了请求调页功能页面置换功能。请求分页是目前最常用的一种实现虚拟存储器的方法。
在这里插入图片描述

![](https://img-blog.csdnimg.cn/20201021193226693.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl8zODIyMDc5OQ==,size_16,color_FFFFFF,t_70#pic_center
2、缺页中断机构

在请求分页系统中,每当要访问的页面不在内存中时,便产生一个缺页中断,请求系统将所缺的页面调入内存。此时应将缺页的进程阻塞(I/O请求),若此时内存中有空闲块,则将该页调入该块, 若没有空闲块,则要淘汰某页。(若淘汰页面在内存期间被修改过,则要将其写回外存)

  • 在指令执行期间产生和处理中断信号,而非一条指令执行完后,属于内中断

在这里插入图片描述

3、地址变换机构

请求分页存储管理与基本分页存储管理的主要区别:

在程序执行过程中,当所访问的信息不在内存时,由操作系统负责将所需信息从外存调入内存 (操作系统要提供请求调页功能,将缺失页面从外存调入内存),然后继续执行程序。

若内存空间不够,由操作系统负责将内存中暂时用不到的信息换出到外存 (操作系统要提供页面置换的功能,将暂时用不到的页面换出外存)。
相对于分页系统主要增加了关于状态位P的操作。
在这里插入图片描述
在这里插入图片描述


3.2.3 页面调度算法(决定应该换入哪页、换出哪页)

1)最佳(OPT)置换算法

每次选择淘汰的页面将是以后永不使用,或者在最长时间内不再被访问的页面,这样可以保证最低的缺页率。
7在第18次访问才调入,故先替换7
在这里插入图片描述
缺页中断未必发生页面置换 只有物理块满了才发生页面置换 (比如前三次发生缺页中断,但未发生页面置换)

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

每次选择淘汰的页面最早进入内存的页面

在这里插入图片描述
Belady异常--------当为进程分配的物理块数增大时,缺页次数不减反增的异常现象。

只有FIFO算法会产生Belady异常

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

每次淘汰的页面是最近最久未使用的页面

4)时钟(CLOCK)置换算法

最佳置换算法性OPT能最好,但无法实现
先进先出置换算法实现简单,但算法性能差
最近最久未使用置换算法性能好,是最接近OPT算法性能的,但是实现起来需要专门的硬件支持,算法开销大


简单的时钟置换算法

在这里插入图片描述


改进后的时钟置换算法

优先级:

  • 最近未访问
  • 最近未访问,但修改过
  • 访问过,但未修改
  • 访问过,修改过
    在这里插入图片描述

在这里插入图片描述


一轮扫描的情况
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


二轮扫描的情况

第一轮结束后并没有找到(0,0)
在这里插入图片描述
第二轮,寻找第一个(0,1),并将扫描过的访问位置为0在这里插入图片描述
淘汰第一个(0,1)
在这里插入图片描述


三轮扫描的情况

第一轮结束后并没有找到(0,0)
在这里插入图片描述
第二轮,寻找第一个(0,1),并将扫描过的访问位置为0,并没有找到

在这里插入图片描述
第三轮,寻找第一个(0,0)页面,不修改任何信息
在这里插入图片描述


四轮扫描的情况

第一轮结束后并没有找到(0,0)
在这里插入图片描述
第二轮,寻找第一个(0,1),并将扫描过的访问位置为0,并没有找到
在这里插入图片描述
第三轮,寻找第一个(0,0)页面,不修改任何信息,并没有找到

在这里插入图片描述
第四轮,寻找第一个(0,1)页面
在这里插入图片描述


改进型的时钟置换算法 最多需要进行四轮扫描


3.2.4 页面分配策略

1)页面分配、置换策略

在这里插入图片描述
固定分配全局置换
为每个进程分配一定数量的物理块,整个进程运行期间都不变,若发生缺页,则只能 从该进程在内存中的页面中选出一页换出。

可变分配局部置换最易于实现的物理块分配和置换策略
缺页时,系统从空闲物理块队列中取出一个物理块分配给该进程可以动态增加进程的物理块。

可变分配局部置换
当某个进程发生缺页时,==只允许从该进程在内存中的页面选一页换出。==因此不会影响其他进程。若进程在运行中频繁缺页,系统再为进程分配若干物理块


2)调入页面的时机

预调页策略: 根据局部性原理(主要指空间局部性,即:如果当前访问了某个内存单元,在之后很有可能会接着访问与其相邻的那些内存单元。),一次调入若干个相邻的页面可能比一次调入一个页面更高效。但如果提前调入的页面中大多数都没被访问过,则又是低效的。因此可以预测不久之后可能访问到的页面,将它们预先调入内存,但目前预测 成功率只有50% 左右故这种策略主要用于进程的首次调入(运行前调入),由程序员指出应该先调入哪些部分。

请求调页策略: 进程在运行期间发现缺页时才将所缺页面调入内存(运行时调入)。由这种策略调入的页面一定会被访问到,但由于每次只能调入一页,而每次调页都要磁盘I/0操作,因此I/0开销较大。


3)从何处调入页面
在这里插入图片描述
对换区通常是采用连续分配方式,而文件区采用离散分配方式,故对换区的磁盘I/O速度比文件区的更快。
1.系统拥有足够的对换区空间: 页面的调入、调出都是在内存与对换区之间进行,

2.系统缺少足够的对换区空间: 凡是不会被修改的数据都直接从文件区调入,由于这些页面不会被修改,因此换出时不必写回磁盘,下次需要时再从文件区调入即可。对于可能被修改的部分,换出时需写回磁盘对换区,下次需要时再从对换区调入。

3.UNIX方式:运行之前进程有关的数据全部放在文件区, 故未使用过的页面,都可从文件区调入。若被使用过的页面需要换出,则写回对换区,下次需要时从对换区调入。


3.2.5 抖动

刚刚换出的页面马上又要换入内存,刚刚换入的页面马上又要换出外存,这种频繁的页面调度行为称为抖动,或颠簸。产生抖动的主要原因是进程频繁访问的页面数目高于可用的物理块数(分配给进程的物理块不够)


3.2.6 工作集

驻留集: 指请求分页存储管理中给进程分配的内存块(页)的集合。
工作集: 指在某段时间间隔里,进程实际访问页面的集合。

工作集是指在某段时间间隔内,进程要访问的页面的集合。

在这里插入图片描述
驻留集大小不能小于工作集大小,否则进程运行过程中将频繁缺页。


在这里插入图片描述

例题
在这里插入图片描述
物理地址: 页框号+页内偏移
逻辑地址: 逻辑号(页号)+页内偏移

驻留集大小为2意味着只能有两个页存在于内存之中 页表中页号0、2在内存中,页号1不在,故需要页面置换算法淘汰 页面,注意是淘汰页号,不是页框号。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_38220799/article/details/109205161
3.2
今日推荐