前面讲的各种存储器管理方式,有一个共同的特点,即它们都要求将一个作业全部装入内存后才能运行,所以可能会出现:
出现这些情况的一种原因是由于内存容量不够大,而另一种是从逻辑上扩充内存容量,这即是虚拟存储器所解决的问题。
P.Denning 提出:局部性原理(principle of locality),指程序在执行过程中的一个较短时期,所执行的指令地址和指令的操作数地址,分别局限于一定区域。所以程序没必要全部装入内存,只需要将少量页面或段先装入内存即可运行。如果程序要访问的页(段)尚未调入内存,便发出缺页(段)请求。将相应的页或段调入到内存,然后继续执行程序。另一方面,操作系统将内存中暂时不使用的页或段调出保存在外存上,从而腾出空间存放将要装入的程序以及将要调入的页或段。
所以,虚拟存储器的定义:具有请求调入功能和置换功能,能从逻辑上对内存容量加以扩充的一种存储器系统。
请求分页系统:
在分页系统的基础上增加请求调页功能和置换功能所形成的页式虚拟存储器系统。
硬件支持:请求分页的页表机制、缺页中断机构、地址变换机构。
请求分段系统:
在进程开始运行之前,不是装入全部页面,而是装入几个或零个页面,之后根据进程运行的需要,动态装入其它页面;当内存空间已满,而又需要装入新的页面时,则根据某种算法淘汰某个页面,以便装入新的页面。
例子
页表的部分列,其中第1、2、3列分别是页号、块号、状态位,页长4k:
缺页中断和一般中断都是中断,相同点是:
而不同点:
基于以上特征,请求分页系统中的硬件机构应能保存多次中断时的状态,并保证最后能返回中断前产生缺页中断的指令处,继续执行。
调入策略确定在外存中页面的调入时机。在页式虚拟管理中有两种常用策略。
将请求分页系统中的外存分为用于存放文件的文件区和用于存放对换页面的对换区。通常,对换区采用连续分配方式,而文件区采用离散分配方式。所以,发生缺页请求后,系统从何处调入页面,分为:
最小物理块:能保证进程正常运行所需的最小物理块数。
物理块的分配策略:
物理块采用固定分配策略的分配算法:
平均分配:所有可供分配的物理块平均分配给各进程,对大进程不利,而小进程可能全部调入内存。
按比例分配:根据进程的大小按比例分配物理块。
其中 Si 为 i 进程的页数,S 为各进程总的页数,m 为内存页面数
考虑优先权分配:为紧急作业分配较多的物理块。
功能:需要调入页面时,选择内存中哪个物理页面被置换。称为replacement policy。
目标:把未来不再使用的或短期内较少使用的页面调出,通常只能在局部性原理指导下依据过去的统计数据进行预测;
选择“未来不再使用的”或“在离当前最远位置上出现的”页面被置换。这是一种理想情况,实际执行中是无法预知的,因而不能实现。它可用作其他算法性能评价的依据。
置换原理:选择建立最早的页面被置换。可以通过链表来表示各页的建立时间先后。
特点:性能较差。较早调入的页往往是经常被访问的页,这些页在FIFO算法下被反复调入和调出。并且有 Belady 现象。
Belady 现象即如果对一个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多,缺页率反而提高的异常现象。
Belady 现象的描述:一个进程P要访问M个页,OS分配N个内存页面给进程P;对一个访问序列S,发生缺页次数为PE(S,N)。当N增大时,PE(S, N)时而增大,时而减小。
Belady 现象的原因:FIFO算法的置换特征与进程访问内存的动态特征是矛盾的,即被置换的页面并不是进程不会访问的。
有一虚拟存储系统,采用先进先出的页面淘汰算法。在内存中为每个进程分配 3 块。进程执行时使用页号的顺序为 4 3 2 1 4 3 5 4 3 2 1 5:
该进程运行时总共出现几次缺页。
若每个进程在内存有4块,又将产生几次缺页。
答:
置换原理:选择最后一次访问时间距离当前时间最长的一页并淘汰之。即淘汰没有使用的时间最长的页。
特点:
实现原理:
也称最近未使用算法(NRU, Not Recently Used),它是 LRU 和 FIFO 的折衷。每页有一个使用标志位(use),若该页被访问则置use=1。置换时采用一个指针,从当前指针位置开始按地址先后检查各页,若页的use=0,则该页被置换。若页的use=1,则修改use,置为0,最后指针停留在被置换页的下一个页。
图例:
改进的轮转算法:选中某页淘汰时,若该页被修改过,需要先写入外存,再调入所需页。若未被修改,则可直接调入。改进的Clock算法淘汰页时,选择最近未使用且未修改的页淘汰,该算法需要使用页表中的访问位和修改位。由访问位 A 和修改位 M 组合为:
算法原理:选择到当前时间为止被访问次数最少的页面被置换;每页设置访问计数器,每当页面被访问时,该页面的访问计数器加1;发生缺页中断时,淘汰计数值最小的页面,并将所有计数清零。
题1:某程序在内存中分配三个块,访问页的走向为4,3,2,1,4,3,5,4,3,2,1,5,按FIFO、LRU、OPT算法分别计算缺页次数。假设开始时所有页均不在内存。
在虚拟存储器系统中,页面在内存与外存之间频繁调度,以至于调度页面所需时间比进程实际运行的时间还多,此时系统效率急剧下降,甚至导致系统崩溃。这种现象称为颠簸或抖动。
原因:
权限位(读,写,执行)
修改位(是否修改过,能否移动)
访问位(记录被访问的次数)
外存地址
检查内存中是否有足够的空闲空间
设备控制器是一个可编址设备,分为字符设备控制器和块设备控制器,是CPU与设备间的接口,控制一个或多个 I/O 设备,实现计算机和I/O设备的数据交换。
控制器由以下三部分组成:
组成如图:
优点:
缺点:
每台设备每输入/出一个字(节)的数据都有一次中断。如果设备较多时,中断次数会很多,使CPU的计算时间大大减少。
不适合块设备。中断次数多,效率极低。
为减少中断对CPU造成的影响,可采用DMA方式和通道方式。
控制器功能更强,除有中断功能外,还有一个 DMA 控制器(DMAC)。在DMAC的控制下,设备同主存之间可成批交换数据,不用 CPU 干预。
其中 DMAC 由三部分组成:
中断方式和 DMA 方式
中断方式是在数据缓冲寄存器满后,发中断请求,CPU进行中断处理。
而 DMA 方式则是在所要求传送的数据块全部传送结束时要求CPU进行中断处理;这样大大减少了CPU进行中断处理的次数。
中断方式的数据传送是由 CPU 控制完成的;DMA 方式则是在 DMAC 的控制下完成的。
在 CPU 和 I/O 设备之间增加了设备控制器后,CPU和外部设备已能在一定程度上并行工作,但每传一个信息单位(一个字节或一个字符块),就要插入一次中断处理,每次中断处理CPU少则要执行几十条指令,多则要执行上千条指令,当一个系统配置的设备较多时,I/O操作较为频繁的情况计算机系统的效率,解决的方法就是通道技术。
现代大、中型计算机系统中设置了专门处理I/O操作的处理机,并把这种处理机称为通道。通道在CPU的控制下独立地执行通道程序,对外部设备的I/O操作进行控制,以实现内存与外设之间成批的数据交换。
通道在完成CPU交给的任务后,向CPU发出中断信号,请求CPU的处理。这样就使得CPU基本上摆脱了I/O操作的处理工作,提高了CPU与设备之间的并行程序,从而提高了整个计算机系统的效率。通道程序是由通道指令组成,一个通道可以分时的方式执行几道程序。每道程序控制一台外部设备,因此每道通道程序称为子通道。
字节多路通道(Byte Multiplexor Channel):字节多路通道是以字节为基本传输单位,当一子通道控制的某台外设交换了一个字节后,就转向下一个子通道,以控制下一台设备传送一个字节。这就实现了子通道的循环轮转,以达到多路控制的目的。字节多路通道主要用来控制低速、并且以字节为基本传送单位的设备。如打印机。
数组选择通道(Block Selector Channel):一次执行一个通道程序,控制一台设备连续地传送一批数据,当一个程序执行完后,才转向下一个程序。
优点:传输速度高
缺点:一次只能控制一台设备进行I/O操作。它主要用来控制高速外设。如磁盘。
数组多路通道(Block Multiplexor Channel):是上述两种通道的折衷,可以分时的方式执行多道程序,每道程序可传送一组数据。主要用于中速设备的控制。如磁带机。
通道有自己的指令系统,用这些指令编写的程序叫通道程序,通道只能执行通道程序,不可能执行用户进程。通道程序保存在内存中。
某进程在运行过程中,若提出了I/O请求,则通过系统调用进入OS;
系统首先为I/O操作分配通道和外设;
各种设备(包括CPU)的速度差异大。CPU的运行速度是以微秒甚至以纳秒计,而设备的运行速度则是以毫秒甚至以秒计。系统的负荷也不均匀。有时CPU进行大量的计算工作,没有I/O操作;有时又会进行大量的I/O操作,这两个极端都会造成系统中的一些设备过于繁忙,一部分设备过于空闲,严重地影响CPU与外设的并行工作。
为此提出用缓冲技术来匹配CPU与设备的速度的差异和负荷的不均匀,从而提高处理机与外设的并行程度。引入缓冲可缓和CPU与外设的速度差异。凡是数据到达和离去速度不匹配的地方均可采用缓冲技术。
DCT 是设备管理的重要数据结构,在这个结构中较全面地反映了每台设备的特性、连接和使用的状态等信息。当一台设备进入系统时必须创立相应的DCT。每个设备有一张DCT。
内容:
设备标识符:系统有许多设备,为区别起见为每台设备取个名,这个名叫设备标识符。
设备属性:反映设备的相应特性和类型。
设备状态:指设备当时所处的状态。
设备队列指针:等待使用该设备的进程组成等待队列,这里存放等待队列的队首指针。
与设备连接的控制器表指针(可有多个)
重复执行次数或时间:数据出错重发次数/时间
控制器标识符:controllerid |
---|
控制器状态:忙/闲 |
与控制器连接的通道表指针 |
控制器队列的队首指针 |
控制器队列的队尾指针 |
每个控制器有一张COCT。
通道标识符:channelid |
---|
通道状态:忙/闲 |
与通道连接的控制器表首址 |
通道队列的队首指针 |
通道队列的队尾指针 |
每个通道有一张CHCT。
整个系统有一张SDT。
在作业级进行的,当一个作业运行之前由系统一次分配满足需要的全部设备,这些设备一直为该作业占用,直到作业撤消。设备的利用效率较低,不会出现死锁。
在进程运行的过程中进行的,当进程需要使用设备时,通过系统调用命令向系统提出设备请求,系统按一定的分配策略给进程分配所需设备,一旦使用完毕立即释放。有利于提高设备的使用效率,会出现死锁,应力求避免。
根据设备的特性设备分成三种:独占设备、共享设备和虚拟设备。
针对这三种设备采用三种分配技术:
独享分配:独占设备有行打印机、键盘、显示器。磁带机可作为独占设备,也可作为共享设备。独占设备采用独享分配策略,即当进程申请独占设备时,系统把设备分配给这个进程,直到进程释放设备后,系统才能再将该设备分配给其他进程使用。
共享分配:共享设备包括磁盘,磁带和磁鼓。对这类设备的分配是采用动态分配的方式进行的,当一个进程要请求某个设备时,系统按照某种算法立即分配相应的设备给请求者,请求者使用完后立即释放。
Simultaneous Peripheral Operations On-Line(外部设备同时联机操作)即将一台物理 I/O 设备虚拟为多台逻辑 I/O 设备,这样也就允许多个用户共享一台物理 I/O设备。
在单道批处理时期,利用专门的外围控制机,将低速 I/O 设备上的数据传送到高速磁盘上,等处理机需要输入数据时,可以提高CPU利用率。多道出现后可以利用一道程序来模拟脱机I/O中的外围机,这样可实现在主机控制下的脱机I/O功能。这种在联机情况下实现的同时外围操作称为SPOOLing,也称为假脱机操作。