基本概念
1. 存储器的结构
存储器顾名思义,就是用来保存数据的东西。随着科技的进步,存储器正朝着高速度、大容量、小体积方向发展。一般情况下,存储器的结构有如下两类:
- 寄存器-主存-外存
- 寄存器-缓存-主存-外存
对于存储器有几个名词这里需要解释下:
(1)虚拟地址。数据的存放地址是由符号决定的,故又称为符号名地址,或者称为名地址,而把源程序的地址空间叫做符号名地址空间或者名空间。它从0号单元开始编址,并顺序分配所有的符号名所对应的地址单元,所以它不是主存中的真实地址,故称为相对地址、程序地址、逻辑地址或虚拟地址。
(2)地址空间。程序中由符号名组成的空间称为地址空间。源程序经过汇编或编译后再经过链接编辑程序加工形成程序的装配模块,即转换为相对地址编址的模块,它是以0 为基址顺序进行编址的。相对地址也称为逻辑地址或虚拟地址,把程序中由相对地址组成的空间叫做逻辑空间。相对地址空间通过地址重定位机构转换到绝对地址空间,绝对地址空间也叫物理地址空间。
(3)存储空间。简单来说,逻辑地址空间(简称地址空间)是逻辑地址的集合,物理地址空间(简称存储空间)是物理地址的集合。
2. 地址重定位
地址重定位是指程序的逻辑地址被转换成主存的物理地址的过程。在可执行文件装入时需要解决可执行文件中地址(指令和数据)和主存地址的对应关系。由操作系统中的装入程序Loader和地址重定位机构来完成。地址重定位分为静态地址重定位和动态地址重定位。
(1)静态地址重定位。它是指当用户程序被装入主存时已经实现了逻辑地址到物理地址的变换,在程序执行期间不再发生变化。其优点是∶无需硬件地址转换机构的支持,只要求程序本身是可重定位的,它只对那些要修改的地址部分具有某种标识,由专门设计的程序来完成。
(2)动态地址重定位。它是指在程序运行期间完成逻辑地址到物理地址的变换。其实现依赖于硬件地址变化机构,如基地址寄存器(BR)。其优点是∶程序在执行期间可以被换入和换出主存,可以解决主存紧张的问题;可以在主存中移动,把主存中的碎片集中起来,以便充分利用空间;不必给程序分配连续的主存空间,以便较好地利用较小的主存块,实现共享。
存储管理方案
存储管理的主要目的是解决多个用户使用主存的问题,其存储管理方案主要包括分区存储管理、分页存储管理、分段存储管理、段页式存储管理及虚拟存储管理。
1. 固定分区
固定分区是一种静态分区方式,在系统生成时已将主存分成若干个分区,每个分区的大小可以不等,但分区大小固定不变,每个分区装一个且只能装一个作业。操作系统通过主存分配情况表管理主存。
固定分区的缺点是已分配区中存在未用空间,原因是程序或作业的大小不可能刚好等于分区的大小,故造成了空间的浪费。通常将已分配分区内的未用空间叫做零头或内碎片。
2. 可变分区
可变分区是一种动态分区方式,存储空间的划分是在作业装入时进行的,故分区的个数是可以变的,分区的大小刚好等于作业的大小。
引入可变分区方法,使主存分配有较大的灵活性,也提高了主存的利用率。但是可变分区会引起碎片的产生。解决碎片的方法是拼接(或称紧凑),即向一个方向(如向低地址端)移动已分配的作业,使那些零散的小空闲区在另一方向连成一片。分区的拼接技术一方面要求能够对作业进行重定位,另一方面系统在拼接时要耗费较多的时间。
系统利用空闲分区表来管理主存中的空闲分区,请求和释放分区可以采用最佳适应算法、最差适应算法、首次适应算法和循环首次适应算法4种分配策略进行主存分配。
(1)最佳适应算法。假设系统中有X,X,X,…,X,…,X,个空闲区(自由区),每当用户申请一个空间时,将从这 n 个空闲区中找到一个最接近用户需求的分区。这种算法能保留较大的空白区。但缺点是空闲区不可能刚好等于用户要求的区,所以必然要将一个分区一分为二。随着系统不断地分配和释放空间,可能会使产生的小分区小到无法再继续分配,这样的无用小分区称为外碎片。
(2)最差适应算法。接到主存申请时,系统总是将用户作业装入最大的空闲区。这种算法将一个最大的分区一分为二,所以剩下的空闲区通常也较大,不容易产生外碎片。
(3)首次适应算法。每当用户作业申请一个空间时,系统总是从主存的低地址开始选择一个能装入作业的空白区。当用户释放空间时,该算法更易实现相邻的空白区合并。
(4)循环首次适应算法。与首次适应算法的不同之处是,每次分配都是从刚分配的空闲区开始寻找一个能满足用户要求的空闲区。
3. 可重定位分区
可重定位分区是解决碎片问题的简单而又行之有效的方法。其基本思想是移动所有已分配好的分区,使之成为连续区域。由于移动分区是要付出代价的,所以通常是在用户请求空间得不到满足时进行。移动已分配的分区会导致地址发生变化,所以会产生地址重定位的问题。
分区保护的目的是防止未经核准的用户访问分区,常用以下两种保护方式。
(1)上界/下界寄存器。采用上界/下界寄存器保护法时,上界寄存器中存放的是作业的装入地址,下界寄存器中存放的是作业的结束地址,形成的物理地址必须满足
上界寄存器≤物理地址≤下界寄存器
。
(2)基址寄存器和限长寄存器。基址寄存器用来存放用户程序在主存的起始地址,限长寄存器用来存放用户程序的长度,形成的物理地址必须满足
基址寄存器≤物理地址<基址寄存器+限长寄存器。
分页存储管理
1. 纯分页存储管理
1) 分页原理
系统将进程的地址空间划分成若干个大小相等的区域,称为页。同样地,将主存空间划分成与页相同大小的若干物理块,称为块或页框。在为进程分配主存时,将进程中若干页分别装入多个不相邻接的块中。
2) 地址结构
分页系统的地址结构如图4-2所示,它由两部分组成∶前一部分为页号P;后一部分为偏移量W,即页内地址。图中的地址长度为32位,其中0~11位为页内地址(每页的大小为4KB),12~31位为页号,所以允许地址空间的大小最多为1MB个页。
3) 页表
在将进程的每一页离散地分配到主存的多个物理块中后,系统应能保证在主存中找到每个页面所对应的物理块。为此,系统为每个进程建立了一张页面映射表,简称页表。每个页在页表中占一个表项,记录该页在主存中对应的物理块号。进程在执行时,通过查找页表就可以找到每页所对应的物理块号。可见,页表的作用是实现从页号到物理块号的地址映射。
地址变换机构的基本任务是利用页表把用户程序中的逻辑地址变换成主存中的物理地址,实际上就是将用户程序中的页号变换成主存中的物理块号。为实现地址变换功能,在系统中设置页表寄存器,用来存放页表的地址和页表的长度。
2. 快表
在地址映射过程中,共需两次访问主存。第一次访问页表,得到数据的物理地址;第二次才是存取数据。为了提高访问主存的速度,可以采取两种方法∶一种是在地址映射机制中增加一组高速寄存器保存页表,这需要大量的硬件开销,经济上不可行;另一种方法是在地址映射机制中增加一个小容量的联想寄存器(相联存储器),它由一组高速寄存器组成,称为快表。快表用来存放当前访问最频繁的少数活动页的页号及相关信息。
在快表中,除了逻辑页号、物理页号对应外,还增加了几位∶特征位表示该行是否为空;访问位表示该页是否被访问过,这是为了淘汰那些用得很少甚至不用的页面而设置的。
快表只存放当前进程最活跃的少数几页。当某一用户程序需要存取数据时,根据该数据所在逻辑页号在快表中找出对应的物理页号,然后与页内地址拼接成物理地址∶如果在快表中没有相应的逻辑页号,则地址映射仍然通过主存中的页表进行,得到物理地址后需将该物理块号填到快表的空闲单元中。若无空闲单元,则根据淘汰算法淘汰某一行,再填入新得到的页号。实际上查找快表和查找主存页表是并行进行的,一旦在快表中找到相符的逻辑页号就停止查找主存页表。
分段存储管理
1.基本原理
在分段存储管理方式中,作业的地址空间按程序自身的逻辑关系划分为若干个程序段,每个段是一组完整的逻辑信息。每个段都有自己的段名,且有一个段号。段号从0开始,每一段也从0开始编址,段内地址是连续的,各段长度是不等的。
分段系统的逻辑地址由段号(名)和段内地址两部分组成。在该地址结构中,允许一个作业最多有64K段,每个段的最大长度为64KB。
在分段式存储管理系统中,为每个段分配一个连续的分区,而进程中的各个段可以离散地分配到主存中不同的分区中。在系统中为每个进程建立一张段映射表,简称为“段表”。段表实现了从逻辑段到物理主存区的映射。
2. 分段系统的地址变换
为了实现从逻辑地址到物理地址的变换功能,系统中设置了段表寄存器,用于存放段表基址和段表长度。在进行地址变换时,系统对逻辑地址中的段号与段表长度进行比较。段是信息的逻辑单位,因此分段系统的一个突出优点是易于实现段的共享,即允许若干个进程共享一个或多个段,而且对段的保护也十分简单。在分页系统中,虽然也能实现程序和数据的共享,但远不如分段系统来得方便。
段页式存储管理
段页式存储管理结合了段式存储管理和页式存储管理的优点,克服了两者的缺点。其基本原理是∶ 先将整个主存划分成大小相同的存储块,将用户程序按程序的逻辑关系分为若干个段,并为每个段赋予一个段名,再将每个段划分成若干个页,以页架为单位离散分配。
在段页式系统中,其地址结构由段号、段内页号及页内地址三部分组成,如图4-4所示。因此,系统中需同时配置段表和页表。由于允许将一个段中的页进行离散分配,因而使段表的内容略有变化∶它不再是段的主存基址和段长,而是页表始址和页表长度。
在段页式系统中,为了便于实现地址变换,需要配置一个段表寄存器,存放段表基址和段表长度。
在进行地址变换时,首先利用段号s,将它与段表长度TL进行比较。若s<TL,表示未越界,于是利用段表基址和段号来求出该段对应的段表项在段表中的位置,从中得到该段的页表基址,并利用逻辑地址中的段内页号p来获得对应页的页表项位置,从中读出该页所在的物理块号b,再利用物理块号b和页内地址构成物理地址。
虚拟存储管理
1. 虚拟存储器的引入
1) 局部性原理
局部性表现为时间局部性和空间局部性两类。
(1)时间局部性。它是指最近被执行的指令可能再次被执行,最近被访问的存储空间很可能在不久的将来还要被访问。产生时间局部性的原因是在程序中存在着大量的循环操作。
(2)空间局部性。它是指程序在一段时间内访问的地址可能集中在一定的范围内,其原因是程序的顺序执行。
2) 虚拟存储器的定义
根据局部性原理,一个作业在运行之前,没有必要把作业全部装入主存,而仅将当前要运行的那部分页面或段先装入主存启动运行,其余部分暂时留在磁盘上。
程序在运行时如果它所要访问的页(段)已调入主存,便可继续执行下去;但如果程序所要访问的页(段)尚未调入主存(称为缺页或缺段),程序应利用操作系统所提供的请求调页(段)功能,将它们调入主存,以使进程能继续执行下去。
如果此时主存已满,无法再装入新的页(段),则还要再利用页(段)的置换功能,将主存中暂时不用的页(段)调出至磁盘上,腾出足够的主存空间后,再将所要访问的页(段)调入主存,使程序继续执行下去。这样,便可使一个大的用户程序在较小的主存空间中运行,也可使主存中同时装入更多的进程并发执行。从用户角度看,该系统所具有的主存容量比实际主存容量大得多,人们把这样的存储器称为虚拟存储器。
3) 虚拟存储器的功能
虚拟存储器具有请求调入功能和置换功能,能仅把作业的一部分装入主存便可运行作业,能从逻辑上对主存容量进行扩充。其逻辑容量由主存和外存容量之和以及CPU可寻址的范围来决定,其运行速度接近于主存速度。所以说,虚拟存储技术是一种性能非常优越的存储器管理技术,被广泛地应用于大、中、小型机和微型机中。
4) 虚拟存储器的实现
(1)请求分页系统。在分页系统的基础上,增加了请求调页功能和页面置换功能所形成的页式虚拟存储系统。请求分页系统中的每个页表项包括页号、物理块号、状态位P、访问字段A、修改位M和外存地址。
(2)请求分段系统。在分段系统的基础上,增加了请求调段和分段置换功能所形成的段式虚拟存储系统。它允许只装入若干段(而非全部段)的用户程序和数据,就可以启动运行,以后再通过调段功能和置换功能将不运行的段调出,同时调入将要运行的段,置换时以段为单位。
(3)请求段页式系统。在段页式系统的基础上,增加了请求调页和页面置换功能形成的段页式虚拟存储系统。
5) 虚拟存储器的特征
虚拟存储器的特征包括离散性、多次性、对换性和虚拟性。
2. 请求分页管理的实现
请求分页系统是在纯分页系统的基础上,增加了请求调页功能、页面置换功能所形成的页式虚拟存储系统,是目前常用的一种虚拟存储方式。
请求分页的页表机制是在纯分页的页表机制上形成的,由于只将应用程序的一部分调入主存,还有一部分仍在磁盘上,故需在页表中再增加若干项,如状态位、访问字段和辅存地址等供程序(数据)在换进、换出时参考。
请求分页系统中的地址变换机构,是在分页系统的地址变换机构的基础上增加了某些功能,如产生和处理缺页中断,从主存中换出一页实现虚拟存储。
在请求分页系统中,每当所要访问的页面不在主存时,便要产生一个缺页中断,请求OS 将所缺的页调入主存,这是由缺页中断机构完成的。缺页中断与一般中断的主要区别如下。
(1)缺页中断在指令执行期间产生和处理中断信号,而一般中断是在一条指令执行完,下一条指令开始执行前检查和处理中断信号。
(2)发生缺页中断时,返回到被中断指令的开始重新执行该指令,而一般中断返回到下一条指令执行。
(3)一条指令在执行期间,可能会产生多次缺页中断。
3. 页面置换算法
请求分页系统的核心问题是选择合适的页面置换算法。常用的页面置换算法如下。
(1)最佳(Optimal)置换算法。它是一种理想化的算法,性能最好,但在实际中难以实现,通常用来评价其他算法。
(2) 先进先出(FIFO)置换算法。该算法总是淘汰最先进入主存的页面,即选择在主存中驻留时间最久的页面予以淘汰。这是一种最直观,也是性能最差的算法,它有Belady异常现象,即如果对一个进程未分配它所要求的全部页面,有时就会出现分配的页面数增多但缺页率反而提高的异常现象。
(3)最近最久未使用置换算法。该算法是选择最近最久未使用的页面予以淘汰,在实现时需要硬件的支持(寄存器或栈)。
(4)最近未用置换算法。将最近一段时间未引用过的页面换出,是一种LRU的近似算法。
4. 工作集
工作集是指在某段时间间隔里进程实际要访问的页面集合。工作集理论认为,虽然程序只需要少量的几页就可以运行,但为了使程序能够有效地运行,较少地产生缺页,就必须使程序的工作集驻留在主存中。
未完待续。。。
更多知识传送:
计算机操作系统–基础知识
计算机操作系统–进程管理
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
以上内容整理参考《软件设计师教程(第5版)》和《软件设计师考试同步辅导(第四版)》(忘记是哪个老师的了,侵删)。本文章内容旨在帮助更多想要进军软考,给自己镀金的小伙伴。有兴趣的小伙伴可以共勉。