页式存储组织的基本原理是将各进程的虚拟空间划分为若干个长度相等的页,把内存空间以与页相等的大小划分为大小相等的片或页面,采用请求调页或预调页技术实现内外存的统一管理。
页式存储组织的主要优点是利用率高,产生的内存碎片小,内存空间分配及管理简单。主要缺点是要有相应的硬件支持,增加了系统开销;请求调页的算法若选择不当,则有可能产生“抖动”现象。
一个作业是由若干个具有逻辑意义的段(如主程序、子程序、数据段等)组成。在分段系统中,允许程序(作业)占据内存中若干分离的分区。分段系统中的虚地址是一个有序对(段号、段内位移)。系统为每一个作业建立一个段表,其内容包括段号与内存起始地址的对应关系、段长和状态等。状态指出这个段是否已调入内存,若已调入内存,则指出这个段的起始地址位置,状态同时也指出这个段的访问权限。如果该段尚未调入内存,则产生缺段中断,以便装入所需要的段。
段式存储组织的主要优点有:便于多道程序共享内存,便于对存储器的保护,各段程序修改互不影响。其缺点是内存利用率低,内存碎片浪费大。
段页式存储组织是分段式和分页式结合的存储组织方法,这样可充分利用分段管理和分页管理的优点。在段页式管理的存储器中,程序按逻辑单位分成基本独立的段,再把每段分成固定大小的页。内存则等分成与上述页大小相等的页。程序对内存的调入或调出是按页进行的,但它又可按段实现共享和保护。
在多道程序环境中,每道程序都有一张段表和一个作为用户标志的基号。一个逻辑地址中,除了基号 x 、段号 s 和页号 p 外,还有一个页内地址 d 。每个逻辑地址变换成实地址的过程如下。
根据基号找到相应的基址寄存器,由该基址寄存器内容找到该程序对应的段表始地址,再由段号找到该段表中相应的行地址,该行地址中的内容为页表起始地址,再由页号找到物理页号的地址(已是内存中的某页),它与页内地址拼接后即得物理地址。可见段页式管理中需要多次查表才能最终获得物理地址。该过程可简单地用一个式子来示意,即:
((( x )+ s )+ p )×2 n + d
其中,( x )表示基寄存器中地址为 x 的单元的内容, n 为页内地址的位数。
段页式管理将段式存储管理和页式存储管理两种方式相结合,互相取长补短,充分发挥了它们的优点。使段页式虚拟存储器管理方案具有空间浪费小、存储共享容易、存储保护容易、能动态连接的特点。但由于管理软件的增加,复杂性和开销也随之增加,需要的硬件以及占用的内存也有所增加,使得执行速度大大下降。
由于实际主存是小于虚存的,因此可能会发生内存中已满,但需要使用的页不在主存中这一情况。这时就需要进行置换,即将一些主存中的页淘汰到外存,腾出空间给要使用的页,这个过程也称为Swapping。其工作原理与Cache调入相类似。
最优算法(OPT):淘汰不用的或最远的将来才用的页。这是一种理想算法,不可能实现,只是用来作为衡量算法效率的参照物。
随机算法(RAND):随机淘汰。这种算法开销小,但性能不稳定。
先进先出算法(FIFO):选择最早调入(也是驻留时间最长)的页。
最近最少使用算法(LRU):选择离当前时刻最近的一段时间内使用得最少的页。
存储管理策略的基础是局部性原理,即进程往往会不均匀地高度局部化地访问内存。局部性分为时间局部性和空间局部性。时间局部性是指最近访问存储位置,很可能在不久的将来还要访问;空间局部性是指存储访问有聚集的倾向,当访问了某个位置后,很可能也要访问其附近的位置。
根据局部性原理的特征性,Denning阐述了程序性能的工作集理论。工作集是进程频繁访问的页面的集合。工作集理论指出,为使进程有效地运行,它的页面工作集应驻留内存中。否则,由于进程频繁地从外存请求页面,而出现称为“抖动”(又称颠簸)的过度的页面调度活动。此时,处理页面调度的时间超过了程序的执行时间。显然,此时CPU的有效利用率会急速下降。
工作集的大小依赖于工作集窗口(进程在定长时间间隔中涉及的页面的集合)的大小,在进程执行时,工作集会发生变化。有时,当进程进入另一具完全不同的执行阶段时,工作集会出现显著的变化。不过在一个进程的执行过程中,工作集的大小处于稳定状态的时间基本上占绝大多数。
另一种控制颠簸的技术是控制缺页率。操作系统规定缺页率的上、下限,当一个进程的缺页率高于上限时,表明该进程需要更大的内存空间,则分配较多的内存页面给它。当进程的缺页率低于下限时,表明该进程占用的内存空间过大,可以适当地收回若干内存页面。
磁盘是最常见的一种外部存储器,它是由一至多个圆形磁盘组成的,其结构如图 2-9 所示。
图 2-9 磁盘主要术语示意图
(1)概念
磁道:磁道是一组记录密度不同的同心圆。在一个磁盘中,从外到内,磁盘记录密度不断增加。同时,值得注意的是,0 磁道是磁盘最外圈的磁道。
扇区:磁盘上的每个磁道被等分为若干个弧段,这些弧段便是磁盘的扇区。
柱面:一个磁盘中,多个记录面相同磁道组成柱面。如磁盘有 9 个记录面,则这 9 个记录面的 0 磁道可组成一个柱面。
注意:硬盘就是磁盘的一种。硬盘工作时,无论是否在进行数据的读取,其盘片都是不断旋转的状态。
(2)公式
● 平均数据传输速率=每道扇区数×扇区容量×盘片转数。
● 存取时间=寻道时间+等待时间,寻道时间是指磁头移动到磁道所需的时间,等待时间为等待读写的扇区转到磁头下方所用的时间。
(3)数据存取过程
根据硬盘存放数据的规则,在向磁盘记录一个文件时,应将文件尽可能记录在同一柱面上,当一个柱面记录不下时,再记录到相邻柱面上。因此,当一个文件超出一个磁道容量时,剩下的部分应存于其他盘面的同一编号的磁道上,即同一柱面的其他磁道上。
为存取磁盘上的一个物理记录,必须给出 3 个参数:柱面号、磁头号(盘面号)、扇区号。磁盘机根据柱面号控制移动臂做径向运动,带动读写头到达所需的柱面;从磁头号可确定哪一个磁头来读写数据,然后便等待访问的信息块旋转到读写头下时进行存取。磁盘机实现这些功能的操作是:查找(将读写头定位到指定柱面并选择指定磁头)、搜索(指定磁头寻找访问的记录块)、读、写和控制等。
平均存取时间(Average Access Time)是反映磁盘数据操作速度的指标,单位是毫秒(ms)。它包括 3 个时间段,分别是平均寻道时间(Seek Time)、平均定位时间(Setting Time)和转动延迟(Rotational Latency),其中后两个又统称为等待时间。
寻道时间也称为查找时间,为磁头移动到目标磁道所需的时间。对于固定磁头磁盘而言,无须移动磁头,只需选择目标磁道对应的磁头即可。等待时间为等待读写的扇区旋转到磁头下方所用的时间。一般选用磁道旋转一周所用时间的一半作为平均等待时间。寻道时间由磁盘机的性能决定,目前主流硬盘典型的平均寻道时间(Average Seek Time,AST)一般在 4ms左右,而转速则有 5400rpm、7200rpm、15000rpm等。在考试当中,这些参数通常由试题指定。
(4)磁盘调度算法
先来先服务(FCFS):该算法根据进程请求访问磁盘的先后次序进行调度。其优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。但此算法由于未对寻道进行优化,致使平均寻道时间可能较长。
最短寻道时间优先(SSTF):该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,但这种调度算法却不能保证平均寻道时间最短。
扫描算法(SCAN):SCAN算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。例如,当磁头正在自里向外移动时,SCAN算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。由于这种算法中磁头移动的规律颇似电梯的运行,故又称为电梯调度算法。
循环扫描(CSCAN)算法:该算法规定磁头单向移动。例如,只自里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描。