我们把之前博客所介绍的各种存储器管理方式统称为传统存储器管理方式,它们全都具有如下两个共同的特征:
常规存储管理方式导致的问题:
解决方案:
指程序在执行时呈现出局部性规律,即在一较短时间内,程序的执行仅限于某个部分,相应地,它所访问的存储空间也局限于某个区域。
局部性又表现为时间局部性(由于大量的循环操作,某指令或数据被访问后,则不久可能会被再次访问)和空间局部性(如顺序执行,指程序在一段时间内访问的地址,可能集中在一定的范围之内)。
虚拟存储器是指仅把作业的一部分装入内存便可运行作业的存储管理系统,它具有请求页(段)调入功能和页(段)置换功能,能从逻辑上对内存容量进行扩充,其逻辑容量由外存容量和内存容量之和决定,其运行速度接近于内存,成本接近于外存。
注:虚拟性以多次性和对换性为基础,而多次性和对换性又是离散分配为基础。
虚拟存储器的实现都建立在离散分配内存的管理方式。所以,目前,所有的虚拟存储器都是采用下面两种方法之一实现的。
实现原理:地址空间的划分同基本分页(段)式;装入页(段)时,可装入作业的一部分(运行所需)页(段)即可运行。
同时也存在基于段页式系统的虚拟存储器
请求分页系统是在基本分页基础上的,增加了请求调页功能和页面置换功能,相应的每次调入和换出的基本单位都是长度固定的页面。
为了实现请求分页,系统必须提供一定的硬件支持。计算机系统除了要求一定容量的内存和外存外,还需要有请求页表机制、缺页中断机构以及地址变换机构。
a.请求页表机制
在请求分页系统中需要的主要数据结构是请求页表,即在页表的基础上进行了扩充,如下图:
b.缺页中断机制
在请求分页系统中,当访问的页不在内存,便产生一缺页中断,请求OS将所缺页调入内存空闲块,若无空闲块,则需置换某一页,同时修改相应页表表目。
缺页中断与一般中断的区别:
c.地址变换机构
请求分页系统中的地址变换机构是在分页系统地址变换机构的基础上,再增加了某些功能所形成的,如产生和处理缺页中断,以及从内存中换出一页的功能等等.过程如下图:
d.地址变化例题
问:某虚拟存储器的用户空间共有32个页面,每页1KB,主存16KB。假定某时刻系统为用户的第0、1、2、3页分别分配的物理块号为5、10、4、7,试将虚拟地址0A5C变换为物理地址。
解:虚拟地址为:页号(25=32)5位 页内位移(210=1024)10位
物理地址为:物理块号(24=16)4位 块内位移(110=1024)10位
虚拟地址OA5C对应的二进制为: 00010 1001011100即虚拟地址OA5C的页号为2,页内位移为1001011100,
由题意知对应的物理地址为:0100 1001011100即125C
为进程分配内存时,涉及到三个问题:
a.最小物理块数的确定
最小物理块数是指能够保证进程正常运行所需的最小物理块数,进程应获得最小物理快数,与计算机的硬件结构有关,取决于指令的格式,功能和寻址方式。
b.内存分配策略
在请求分页系统中,可采用两种内存分配策略,即固定和可变分配策略。在进行置换使,也可以采取两种策略,即全局置换和局部置换。于是可以组合出一下三种适用的策略:
固定分配:分配给进程的物理块数是固定的,不可变的
可变分配:分配给进程的物理快数不是是固定的,随着进程的运行时变化的
全局置换:是指在发生缺页时,在OS所保留的所有空闲物理块中选择一个,换入
局部置换:是指发送缺页时,只能从分配给该进程的n个物理块中,选择一个换出
c.物理块分配算法
在采用固定分配策略时,如何将系统中可供分配的所有物理块分配给各个进程,可采用下述几种算法:
使进程能够正常运行,必须事先将要执行的那部分程序和数据所在的页面调入内存。此时会出现三个问题:
a.何时调入页面
为确定系统将进程运行时所缺页表调入内存的时机,可以采用下面两种方法:
b. 从何处调入页面
当发生缺页请求时,系统从何处将缺页调入内存,可分为下面三种情况
c. 页面调入过程
每当程序所要访问的页面未在内存时(存在位为“0”),便向CPU发出一缺页中断,中断处理程序首先保留CPU环境,分析中断原因后转入缺页中断处理程序。 此时该程序通过查找找到该页面的物理块,然后将其换入到内存中。
d.缺页率
假设一个进程的逻辑空间为n页,系统为其分配的内存物理块数为m(m≤n)。如果在进程的运行过程中,访问页面成功(即所访问页面在内存中)的次数为S,访问页面失败(即所访问页面不在内存中,需要从外存调入)的次数为F,则该进程总的页面访问次数为A = S + F,那么该进程在其运行过程中的缺页率即为
f = F A f= \frac{F}{A} f=AF
请求分段存储管理方式和请求分页管理方式,在实现原理和所需要的硬件支持都是十分相似的。只不过,是以分段为单位进行换入和换出的。
与请求分页系统相似,在请求分段系统中所需的硬件支持有段表机制、缺段中断机构,以及地址变换机构。
a. 请求段表机制
在请求分段系统中需要的主要数据结构是请求段表,即在段表的基础上进行了扩充,如下图:
b.段缺中断机制
和与缺页中断机构类似,请求分段系统中采用的是请求调段策略。每当发现运行进程所要访问的段尚未调入内存时,便由缺段中断机构产生一缺段中断信号,进入OS后,由缺段中断处理程序将所需的段调入内存。
缺段中断的处理过程
c.地址变换机制
请求分段系统中的地址变换机构是在分段系统地址变换机构的基础上形成的。因为被访问的段并非全在内存,所以在地址变换时,若发现所要访问的段不在内存,必须先将所缺的段调入内存,并修改段表,然后才能再利用段表进行地址变换。为此,在地址变换机构中又增加了某些功能,如缺段中断的请求及处理等。下图示出了请求分段系统的地址变换过程。
a.共享段表
为了实现分段共享,可在系统中设置一个共享段表,所有共享段都在共享段表中占有一个表项,共享段表内容如下:
b.共享段的分配与回收
共享段的分配:为共享段分配内存时,对第一个请求使用该共享段的进程,由系统为之分配一个物理区,再把共享段表中增加一表项,修改添加相应的数据。对于后面申请使用该共享段的进程,只需要在该进程段表中增加一项,并添加修改相应的数据。
共享段的回收:当共享此段的某进程不在需要该段时,将该段释放,包括撤销该进程段表中对应的表项。同时修改共享段表的数据,当没有一个进程调用该段时,则操作系统对该段进行回收。
在分段系统中,由于每个分段在逻辑上是相对独立的,因而比较容易实现信息保护。目前,常采用以下几种措施来确保信息的安全。
《操作系统第四版》