段式管理存储如何重定义
A. 分区存储管理中常用哪些分配策略
1、固定分区存储管理
其基本思想是将内存划分成若干固定大小的分区,每个分区中最多只能装入一个作业。当作业申请内存时,系统按一定的算法为其选择一个适当的分区,并装入内存运行。由于分区大小是事先固定的,因而可容纳作业的大小受到限制,而且当用户作业的地址空间小于分区的存储空间时,造成存储空间浪费。
一、空间的分配与回收
系统设置一张“分区分配表”来描述各分区的使用情况,登记的内容应包括:分区号、起始地址、长度和占用标志。其中占用标志为“0”时,表示目前该分区空闲;否则登记占用作业名(或作业号)。有了“分区分配表”,空间分配与回收工作是比较简单的。
二、地址转换和存储保护
固定分区管理可以采用静态重定位方式进行地址映射。
为了实现存储保护,处理器设置了一对“下限寄存器”和“上限寄存器”。当一个已经被装入主存储器的作业能够得到处理器运行时,进程调度应记录当前运行作业所在的分区号,且把该分区的下限地址和上限地址分别送入下限寄存器和上限寄存器中。处理器执行该作业的指令时必须核对其要访问的绝对地址是否越界。
三、多作业队列的固定分区管理
为避免小作业被分配到大的分区中造成空间的浪费,可采用多作业队列的方法。即系统按分区数设置多个作业队列,将作业按其大小排到不同的队列中,一个队列对应某一个分区,以提高内存利用率。
2、可变分区存储管理
可变分区存储管理不是预先将内存划分分区,而是在作业装入内存时建立分区,使分区的大小正好与作业要求的存储空间相等。这种处理方式使内存分配有较大的灵活性,也提高了内存利用率。但是随着对内存不断地分配、释放操作会引起存储碎片的产生。
一、空间的分配与回收
采用可变分区存储管理,系统中的分区个数与分区的大小都在不断地变化,系统利用“空闲区表”来管理内存中的空闲分区,其中登记空闲区的起始地址、长度和状态。当有作业要进入内存时,在“空闲区表”中查找状态为“未分配”且长度大于或等于作业的空闲分区分配给作业,并做适当调整;当一个作业运行完成时,应将该作业占用的空间作为空闲区归还给系统。
可以采用首先适应算法、最佳(优)适应算法和最坏适应算法三种分配策略之一进行内存分配。
二、地址转换和存储保护
可变分区存储管理一般采用动态重定位的方式,为实现地址重定位和存储保护,系统设置相应的硬件:基址/限长寄存器(或上界/下界寄存器)、加法器、比较线路等。
基址寄存器用来存放程序在内存的起始地址,限长寄存器用来存放程序的长度。处理机在执行时,用程序中的相对地址加上基址寄存器中的基地址,形成一个绝对地址,并将相对地址与限长寄存器进行计算比较,检查是否发生地址越界。
三、存储碎片与程序的移动
所谓碎片是指内存中出现的一些零散的小空闲区域。由于碎片都很小,无法再利用。如果内存中碎片很多,将会造成严重的存储资源浪费。解决碎片的方法是移动所有的占用区域,使所有的空闲区合并成一片连续区域,这一技术称为移动技术(紧凑技术)。移动技术除了可解决碎片问题还使内存中的作业进行扩充。显然,移动带来系统开销加大,并且当一个作业如果正与外设进行I/O时,该作业是无法移动的。
3、页式存储管理
基本原理
1.等分内存
页式存储管理将内存空间划分成等长的若干区域,每个区域的大小一般取2的整数幂,称为一个物理页面有时称为块。内存的所有物理页面从0开始编号,称作物理页号。
2.逻辑地址
系统将程序的逻辑空间按照同样大小也划分成若干页面,称为逻辑页面也称为页。程序的各个逻辑页面从0开始依次编号,称作逻辑页号或相对页号。每个页面内从0开始编址,称为页内地址。程序中的逻辑地址由两部分组成:
逻辑地址
页号p
页内地址 d
3.内存分配
系统可用一张“位示图”来登记内存中各块的分配情况,存储分配时以页面(块)为单位,并按程序的页数多少进行分配。相邻的页面在内存中不一定相邻,即分配给程序的内存块之间不一定连续。
对程序地址空间的分页是系统自动进行的,即对用户是透明的。由于页面尺寸为2的整数次幂,故相对地址中的高位部分即为页号,低位部分为页内地址。
3.5.2实现原理
1.页表
系统为每个进程建立一张页表,用于记录进程逻辑页面与内存物理页面之间的对应关系。地址空间有多少页,该页表里就登记多少行,且按逻辑页的顺序排列,形如:
逻辑页号
主存块号
0
B0
1
B1
2
B2
3
B3
2.地址映射过程
页式存储管理采用动态重定位,即在程序的执行过程中完成地址转换。处理器每执行一条指令,就将指令中的逻辑地址(p,d)取来从中得到逻辑页号(p),硬件机构按此页号查页表,得到内存的块号B’,便形成绝对地址(B’,d),处理器即按此地址访问主存。
3.页面的共享与保护
当多个不同进程中需要有相同页面信息时,可以在主存中只保留一个副本,只要让这些进程各自的有关项中指向内存同一块号即可。同时在页表中设置相应的“存取权限”,对不同进程的访问权限进行各种必要的限制。
4、段式存储管理
基本原理
1.逻辑地址空间
程序按逻辑上有完整意义的段来划分,称为逻辑段。例如主程序、子程序、数据等都可各成一段。将一个程序的所有逻辑段从0开始编号,称为段号。每一个逻辑段都是从0开始编址,称为段内地址。
2.逻辑地址
程序中的逻辑地址由段号和段内地址(s,d)两部分组成。
3.内存分配
系统不进行预先划分,而是以段为单位进行内存分配,为每一个逻辑段分配一个连续的内存区(物理段)。逻辑上连续的段在内存不一定连续存放。
3.6.2实现方法
1.段表
系统为每个进程建立一张段表,用于记录进程的逻辑段与内存物理段之间的对应关系,至少应包括逻辑段号、物理段首地址和该段长度三项内容。
2.建立空闲区表
系统中设立一张内存空闲区表,记录内存中空闲区域情况,用于段的分配和回收内存。
3.地址映射过程
段式存储管理采用动态重定位,处理器每执行一条指令,就将指令中的逻辑地址(s,d)取来从中得到逻辑段号(s),硬件机构按此段号查段表,得到该段在内存的首地址S’, 该段在内存的首地址S’加上段内地址d,便形成绝对地址(S’+d),处理器即按此地址访问主存。
5、段页式存储管理
页式存储管理的特征是等分内存,解决了碎片问题;段式存储管理的特征是逻辑分段,便于实现共享。为了保持页式和段式上的优点,结合两种存储管理方案,形成了段页式存储管理。
段页式存储管理的基本思想是:把内存划分为大小相等的页面;将程序按其逻辑关系划分为若干段;再按照页面的大小,把每一段划分成若干页面。程序的逻辑地址由三部分组成,形式如下:
逻辑地址
段号s
页号p
页内地址d
内存是以页为基本单位分配给每个程序的,在逻辑上相邻的页面内存不一定相邻。
系统为每个进程建立一张段表,为进程的每一段各建立一张页表。地址转换过程,要经过查段表、页表后才能得到最终的物理地址。
B. 简述段式存储管理技术和页式存储管理技术的不同之处
存储管理的基本原理
内存管理方法
内存管理主要包括内存分配和回收、地址变换、内存扩充、内存共享和保护等功能。
下面主要介绍连续分配存储管理、覆盖与交换技术以及页式与段式存储管理等基本概念和原理。
1.连续分配存储管理方式
连续分配是指为一个用户程序分配连续的内存空间。连续分配有单一连续存储管理和分区式储管理两种方式。
(1)单一连续存储管理
在这种管理方式 中,内存被分为两个区域:系统区和用户区。应用程序装入到用户区,可使用用户区全部空间。其特点是,最简单,适用于单用户、单任务的操作系统。CP/M和 DOS 2.0以下就是采用此种方式。这种方式的最
C. 基本分段存储管理方式的分段存储管理方式的引入
引入分段存储管理方式,主要是为了满足用户和程序员的下述一系列需要:
1) 方便编程
通常,用户把自己的作业按照逻辑关系划分为若干个段,每个段都是从0开始编址,并有自己的名字和长度。因此,希望要访问的逻辑地址是由段名(段号)和段内偏移量(段内地址)决定的。例如,下述的两条指令便是使用段名和段内地址:
LOAD 1,[A] |〈D〉;
STORE 1,[B] |〈C〉;
其中,前一条指令的含义是将分段A中D单元内的值读入寄存器1;后一条指令的含义是将寄存器1的内容存入B分段的C单元中。
2) 信息共享
在实现对程序和数据的共享时,是以信息的逻辑单位为基础的。比如,共享某个例程和函数。分页系统中的“页”只是存放信息的物理单位(块),并无完整的意义,不便于实现共享;然而段却是信息的逻辑单位。由此可知,为了实现段的共享,希望存储管理能与用户程序分段的组织方式相适应。
3) 信息保护
信息保护同样是对信息的逻辑单位进行保护,因此,分段管理方式能更有效和方便地实现信息保护功能。
4) 动态增长
在实际应用中,往往有些段,特别是数据段,在使用过程中会不断地增长,而事先又无法确切地知道数据段会增长到多大。前述的其它几种存储管理方式,都难以应付这种动态增长的情况,而分段存储管理方式却能较好地解决这一问题。
5) 动态链接
动态链接是指在作业运行之前,并不把几个目标程序段链接起来。要运行时,先将主程序所对应的目标程序装入内存并启动运行,当运行过程中又需要调用某段时,才将该段(目标程序)调入内存并进行链接。可见,动态链接也要求以段作为管理的单位。

D. 段式和页式存储管理的地址结构很类似,但是它们之间有实质上的不同,表现为 ( )
正确答案是BD,各页可以分散存放在主存,每段必须占用连续的主存空间,选项A不正确:分页和分段者是操作系统确定和进行的,选项C也不正确;页式和段式都是采用动态重定位方式,选项E也不正确。
E. 段式存储管理的段式存储管理的优缺点
在段式存储管理中,每个段地址的说明为两个量:一个段名和一个位移。在段内,是连续完整存放的。而在段与段之间是不一定连续编址的。段名和位移构成了一种二维编址。 段式管理是不连续分配内存技术中的一种。其最大特点在于他按照用户观点,即按程序段、数据段等有明确逻辑含义的“段”,分配内存空间。克服了页式的、硬性的、非逻辑划分给保护和共享与支态伸缩带来的不自然性。 段的最大好处是可以充分实现共享和保护,便于动态申请内存,管理和使用统一化,便于动态链接;其缺点是有碎片问题。

F. 段式存储管理的段式管理原理
为了进行段式管理,每道程序在系统中都有一个段(映象)表来存放该道程序各段装入主存的状况信息。段表中的每一项(对应表中的每一行)描述该道程序一个段的基本状况,由若干个字段提供。段名字段用于存放段的名称,段名一般是有其逻辑意义的,也可以转换成用段号指明。由于段号从0开始顺序编号,正好与段表中的行号对应,如2段必是段表中的第3行,这样,段表中就可不设段号(名)字段。装入位字段用来指示该段是否已经调入主存,“1”表示已装入,“0”表示未装入。在程序的执行过程中,各段的装入位随该段是否活跃而动态变化。当装入位为“1”时,地址字段用于表示该段装入主存中起始(绝对)地址,当装入位为“0”时,则无效(有时机器用它表示该段在辅存中的起始地址)。段长字段指明该段的大小,一般以字数或字节数为单位,取决于所用的编址方式。段长字段是用来判断所访问的地址是否越出段界的界限保护检查用的。访问方式字段用来标记该段允许的访问方式,如只读、可写、只能执行等,以提供段的访问方式保护。除此之外,段表中还可以根据需要设置其它的字段。段表本身也是一个段,一般常驻在主存中,也可以存在辅存中,需要时再调入主存。假设系统在主存中最多可同时有N道程序,可设N个段表基址寄存器。对应于每道程序,由基号(程序号)指明使用哪个段表基址寄存器。段表基址寄存器中的段表基址字段指向该道程序的段表在主存中的起始地址。段表长度字段指明该道程序所用段表的行数,即程序的段数。

G. 什么是段式存储管理
段式管理,是指把一个程序分成若干个段进行存储,每个段都是一个逻辑实体,程序员需要知道并使用它。它的产生是与程序的模块化直接有关的。
段式管理是通过段表进行的,它包括段号或段名、段起点、装入位、段的长度等。
此外还需要主存占用区域表、主存可用区域表。
H. 页式存储管理和段式存储管理的区别
段式与页式存储管理的比较如下表所示。
段式
页式
分段由用户设计划分,每段对应一个相应的的程序模块,有完整的逻辑意义。
分页用户看不见,由操作系统为内存管理划分。
段面是信息的逻辑单位
页面是信息的物理单位
便于段的共享,执行时按需动态链接装入。
页一般不能共享
段长不等,可动态增长,有利于新数据增长。
页面大小相同,位置不能动态增长。
二维地址空间:段名、段中地址;段号、段内单元号
一维地址空间
管理形式上象页式,但概念不同
往往需要多次缺页中断才能把所需信息完整地调入内存
实现页(段)的共享是指某些作业的逻辑页号(段号)对应同一物理页号(内存中该段的起始地址)。页(段)的保护往往需要对共享的页面(段)加上某种访问权限的限制,如不能修改等;或设置地址越界检查,对于页内地址(段内地址)大于页长(段长)的存取,产生保护中断。
I. 在基本段式存储管理系统中,逻辑地址由什么构成
存储管理的基本原理内存管理方法
内存管理主要包括内存分配和回收、地址变换、内存扩充、内存共享和保护等功能。
下面主要介绍连续分配存储管理、覆盖与交换技术以及页式与段式存储管理等基本概念和原理。
1. 连续分配存储管理方式
连续分配是指为一个用户程序分配连续的内存空间。连续分配有单一连续存储管理和分区式储管理两种方式。
(1)单一连续存储管理
在这种管理方式中,内存被分为两个区域:系统区和用户区。应用程序装入到用户区,可使用用户区全部空间。其特点是,最简单,适用于单用户、单任务的操作系统。CP/M和dos 2.0以下就是采用此种方式。这种方式的最大优点就是易于管理。但也存在着一些问题和不足之处,例如对要求内存空间少的程序,造成内存浪费;程序全部装入,使得很少使用的程序部分也占用—定数量的内存。
(2)分区式存储管理
为了支持多道程序系统和分时系统,支持多个程序并发执行,引入了分区式存储管理。分区式存储管理是把内存分为一些大小相等或不等的分区,操作系统占用其中一个分区,其余的分区由应用程序使用,每个应用程序占用一个或几个分区。分区式存储管理虽然可以支持并发,但难以进行内存分区的共享。
分区式存储管理引人了两个新的问题:内碎片和外碎片。前者是占用分区内未被利用的空间,后者是占用分区之间难以利用的空闲分区(通常是小空闲分区)。为实现分区式存储管理,操作系统应维护的数据结构为分区表或分区链表。表中各表项一般包括每个分区的起始地址、大小及状态(是否已分配)。
分区式存储管理常采用的一项技术就是内存紧缩(compaction):将各个占用分区向内存一端移动,然后将各个空闲分区合并成为一个空闲分区。这种技术在提供了某种程度上的灵活性的同时,也存在着一些弊端,例如:对占用分区进行内存数据搬移占用cpu~t寸间;如果对占用分区中的程序进行“浮动”,则其重定位需要硬件支持。
1)固定分区(nxedpartitioning)。
固定式分区的特点是把内存划分为若干个固定大小的连续分区。分区大小可以相等:这种作法只适合于多个相同程序的并发执行(处理多个类型相同的对象)。分区大小也可以不等:有多个小分区、适量的中等分区以及少量的大分区。根据程序的大小,分配当前空闲的、适当大小的分区。这种技术的优点在于,易于实现,开销小。缺点主要有两个:内碎片造成浪费;分区总数固定,限制了并发执行的程序数目。
2)动态分区(dynamic partitioning)。
动态分区的特点是动态创建分区:在装入程序时按其初始要求分配,或在其执行过程中通过系统调用进行分配或改变分区大小。与固定分区相比较其优点是:没有内碎片。但它却引入了另一种碎片——外碎片。动态分区的分区分配就是寻找某个空闲分区,其大小需大于或等于程序的要求。若是大于要求,则将该分区分割成两个分区,其中一个分区为要求的大小并标记为“占用”,而另一个分区为余下部分并标记为“空闲”。分区分配的先后次序通常是从内存低端到高端。动态分区的分区释放过程中有一个要注意的问题是,将相邻的空闲分区合并成一个大的空闲分区。
下面列出了几种常用的分区分配算法:
首先适配法(nrst-fit):按分区在内存的先后次序从头查找,找到符合要求的第一个分区进行分配。该算法的分配和释放的时间性能较好,较大的空闲分区可以被保留在内存高端。但随着低端分区不断划分会产生较多小分区,每次分配时查找时间开销便会增大。
下次适配法(next-fit):按分区在内存的先后次序,从上次分配的分区起查找(到最后{区时再从头开始},找到符合要求的第一个分区进行分配。该算法的分配和释放的时间性能较好,使空闲分区分布得更均匀,但较大空闲分区不易保留。
最佳适配法(best-fit):按分区在内存的先后次序从头查找,找到其大小与要求相差最小的空闲分区进行分配。从个别来看,外碎片较小;但从整体来看,会形成较多外碎片优点是较大的空闲分区可以被保留。
最坏适配法(worst- fit):按分区在内存的先后次序从头查找,找到最大的空闲分区进行分配。基本不留下小空闲分区,不易形成外碎片。但由于较大的空闲分区不被保留,当对内存需求较大的进程需要运行时,其要求不易被满足。
2.覆盖和交换技术
引入覆盖(overlay)技术的目标是在较小的可用内存中运行较大的程序。这种技术常用于多道程序系统之中,与分区式存储管理配合使用。覆盖技术的原理很简单,一个程序的几个代码段或数据段,按照时间先后来占用公共的内存空间。将程序必要部分(常用功能)的代码和数据常驻内存;可选部分(不常用功能)平时存放在外存(覆盖文件)中,在需要时才装入内存。不存在调用关系的模块不必同时装入到内存,从而可以相互覆盖。覆盖技术的缺点是编程时必须划分程序模块和确定程序模块之间的覆盖关系,增加编程复杂度;从外存装入覆盖文件,以时间延长换取空间节省。覆盖的实现方式有两种:以函数库方式实现或操作系统支持。
交换(swapping)技术在多个程序并发执行时,可以将暂时不能执行的程序送到外存中,从而获得空闲内存空间来装入新程序,或读人保存在外存中而处于就绪状态的程序。交换单位为整个进程的地址空间。交换技术常用于多道程序系统或小型分时系统中,与分区式存储管理配合使用又称作“对换”或“滚进/滚出”(roll-in/roll-out)。其优点之一是增加并发运行的程序数目,并给用户提供适当的响应时间;与覆盖技术相比交换技术另一个显着的优点是不影响程序结构。交换技术本身也存在着不足,例如:对换人和换出的控制增加处理器开销;程序整个地址空间都进行对换,没有考虑执行过程中地址访问的统计特性。
3.页式和段式存储管理
在前面的几种存储管理方法中,为进程分配的空间是连续的,使用的地址都是物理地址。如果允许将一个进程分散到许多不连续的空间,就可以避免内存紧缩,减少碎片。基于这一思想,通过引入进程的逻辑地址,把进程地址空间与实际存储空间分离,增加存储管理的灵活性。地址空间和存储空间两个基本概念的定义如下:
地址空间:将源程序经过编译后得到的目标程序,存在于它所限定的地址范围内,这个范围称为地址空间。地址空间是逻辑地址的集合。
存储空间:指主存中一系列存储信息的物理单元的集合,这些单元的编号称为物理地址存储空间是物理地址的集合。
根据分配时所采用的基本单位不同,可将离散分配的管理方式分为以下三种
段式存储管理和段页式存储管理。其中段页式存储管理是前两种结合的产物。
(1)页式存储管理
1)基本原理。将程序的逻辑地址空间划分为固定大小的页(page),而物理内存划分为同样大小的页框(pageframe)。程序加载时,可将任意一页放人内存中任意一个页框,这些页框不必连续,从而实现了离散分配。该方法需要cpu的硬件支持,来实现逻辑地址和物理地址之间的映射。在页式存储管理方式中地址结构由两部构成,前一部分是页号,后一部分为页内地址,如图4-2所示。
这种管理方式的优点是,没有外碎片,每个内碎片不超过页大比前面所讨论的几种管理方式的最大进步是,一个程序不必连续存放。这样就便于改变程序占用空间的大小(主要指随着程序运行,动态生成的数据增多,所要求的地址空间相应增长)。缺点是仍旧要求程序全部装入内存,没有足够的内存,程序就不能执行。
2)页式管理的数据结构。在页式系统中进程建立时,操作系统为进程中所有的页分配页框。当进程撤销时收回所有分配给它的页框。在程序的运行期间,如果允许进程动态地申请空间,操作系统还要为进程申请的空间分配物理页框。操作系统为了完成这些功能,必须记录系统内存中
实际的页框使用情况。操作系统还要在进程切换时,正确地切换两个不同的进程地址空间到物理内存空间的映射。这就要求操作系统要记录每个进程页表的相关信息。为了完成上述的功能,—个页式系统中,一般要采用如下的数据结构。
进程页表:完成逻辑页号(本进程的地址空间)到物理页面号(实际内存空间)的映射。
每个进程有一个页表,描述该进程占用的物理页面及逻辑排列顺序。
物理页面表:整个系统有一个物理页面表,描述物理内存空间的分配使用状况,其数据结构可采用位示图和空闲页链表。
请求表:整个系统有一个请求表,描述系统内各个进程页表的位置和大小,用于地址转换也可以结合到各进程的pcb(进程控制块)里。
3)页式管理地址变换
在页式系统中,指令所给出的地址分为两部分:逻辑页号和页内地址。cpu中的内存管理单元(mmu)按逻辑页号通过查进程页表得到物理页框号,将物理页框号与页内地址相加形成物理地址(见图4-3)。上述过程通常由处理器的硬件直接完成,不需要软件参与。通常,操作系统只需在进程切换时,把进程页表的首地址装入处理器特定的寄存器中即可。一般来说,页表存储在主存之中。这样处理器每访问一个在内存中的操作数,就要访问两次内存。第一次用来查找页表将操作数的逻辑地址变换为物理地址;第二次完成真正的读写操作。这样做时间上耗费严重。为缩短查找时间,可以将页表从内存装入cpu内部的关联存储器(例如,快表)中,实现按内容查找。此时的地址变换过程是:在cpu给出有效地址后,由地址变换机构自动将页号送人快表,并将此页号与快表中的所有页号进行比较,而且这种比较是同时进行的。若其中有与此相匹配的页号,表示要访问的页的页表项在快表中。于是可直接读出该页所对应的物理页号,这样就无需访问内存中的页表。由于关联存储器的访问速度比内存的访问速度快得多。
(2)段式存储管理
1)基本原理。
在段式存储管理中,将程序的地址空间划分为若干个段(segment),这样每个进程有一个二维的地址空间。在前面所介绍的动态分区分配方式中,系统为整个进程分配一个连续的内存空间。而在段式存储管理系统中,则为每个段分配一个连续的分区,而进程中的各个段可以不连续地存放在内存的不同分区中。程序加载时,操作系统为所有段分配其所需内存,这些段不必连续,物理内存的管理采用动态分区的管理方法。在为某个段分配物理内存时,可以采用首先适配法、下次适配法、最佳适配法等方法。在回收某个段所占用的空间时,要注意将收回的空间与其相邻的空间合并。段式存储管理也需要硬件支持,实现逻辑地址到物理地址的映射。程序通过分段划分为多个模块,如代码段、数据段、共享段。这样做的优点是:可以分别编写和编译源程序的一个文件,并且可以针对不同类型的段采取不同的保护,也可以按段为单位来进行共享。总的来说,段式存储管理的优点是:没有内碎片,外碎片可以通过内存紧缩来消除;便于实现内存共享。缺点与页式存储管理的缺点相同,进程必须全部装入内存。
2)段式管理的数据结构。
为了实现段式管理,操作系统需要如下的数据结构来实现进程的地址空间到物理内存空间的映射,并跟踪物理内存的使用情况,以便在装入新的段的时候,合理地分配内存空间。
·进程段表:描述组成进程地址空间的各段,可以是指向系统段表中表项的索引。每段有段基址(baseaddress)。
·系统段表:系统所有占用段。
·空闲段表:内存中所有空闲段,可以结合到系统段表中。
3)段式管理的地址变换。
在段式管理系统中,整个进程的地址空间是二维的,即其逻辑地址由段号和段内地址两部分组成。为了完成进程逻辑地址到物理地址的映射,处理器会查找内存中的段表,由段号得到段的首地址,加上段内地址,得到实际的物理地址(见图4—4)。这个过程也是由处理器的硬件直接完成的,操作系统只需在进程切换时,将进程段表的首地址装入处理器的特定寄存器当中。这个寄存器一般被称作段表地址寄存器。
4.页式和段式系统的区别
页式和段式系统有许多相似之处。比如,两者都采用离散分配方式,且都通过地址映射机构来实现地址变换。但概念上两者也有很多区别,主要表现在:
·页是信息的物理单位,分页是为了实现离散分配方式,以减少内存的外零头,提高内存的利用率。或者说,分页仅仅是由于系统管理的需要,而不是用户的需要。段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了更好地满足用户的需要。
·页的大小固定且由系统决定,把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的。段的长度不固定,且决定于用户所编写的程序,通常由编译系统在对源程序进行编译时根据信息的性质来划分。
·页式系统地址空间是一维的,即单一的线性地址空间,程序员只需利用一个标识符,即可表示一个地址。分段的作业地址空间是二维的,程序员在标识一个地址时,既需给出段名,又需给出段内地址。
原理作业10. 页式存储管理和段式存储管理的工作原理特点、特点
及优劣。
答:页式管理的基本思想是:为了更好地利用分区存储管理中
所产生的"零头"问题,允许把一个作业存放在不连续的内存块中,
又可以连续运行,它允许只调入用户作业中常用部分,不常用部分
不长期驻留内存,有效提高了内存的利用率。
页式存储管理的工作原理:
A、划分实页:将物理内存划分成位置固定、大小相同的"块"(实页
面)。
B、划分虚页:将用户逻辑地址空间也分成同样大小的页面,成为虚
拟空间的虚页面。
C、建立页表:有时称为页面表或页面映射表(pmt)。每个作业一
张,按虚页号进行登记,其基本的内容有特征位(表示该页是否
在内存、实页号以及对应外存的地址。
D、地址变换:将虚页面的逻辑地址转化为实页面的物理地址,在程
序执行时改变为物理地址,属于作业的动态重定位,一般由地址
转换机构(硬件)完成。
特点:
允许一个作业存放在不连续的内存块中而又能保证作业连续得以运行
,既不需要移动内存中的信息,又可较好地解决零头。
优点:
a、不要求作业存放在连续的内存块中,有效地解决零头。
b、允许用户作业不是一次集中装入内存而是根据需要调入,作业中
不常用部分不长期驻留内存,而本次运行的不用部分根本就不装
入内存。
c、提供了虚存,使用户作业地址空间不再受内存可用空间大小的限
制。
J. 何为段页式管理
把程序按内容或过程(函数)关系分成段,每段有自己的名字。一个用户作业或进程所包含的段对应一个二维线形虚拟空间,也就是一个二维虚拟存储器。段式管理程序以段为单位分配内存,然后通过地址影射机构把段式虚拟地址转换为实际内存物理地址。
程序通过分段(segmentation)划分为多个模块,如代码段、数据段、共享段。其优点是:
¨ 可以分别编写和编译
¨ 可以针对不同类型的段采取不同的保护
¨ 可以按段为单位来进行共享,包括通过动态链接进行代码共享
6.5.2 段式管理的实现原理
1 段式虚存空间
段式管理把一个进程的虚地址空间设计成二维结构,即段号s与段内相对地址w。段具有以下特征:
段号与段号之间无顺序关系
段的长度是不固定的
每个段定义一组逻辑上完整的程序或数据
每个段是一个首地址为零的,连续的一维线性空间
根据需要,段长可动态增长
对段式虚地址空间的访问包括两个部分:段名和段内地址。
2 段式管理的内存分配与释放
段式管理中以段为单位分配内存,每段分配一个连续的内存区。由于各段长度不等。所以这些存储区的大小不一。而且,同一进程所包含的各段之间不要求连续。
段式管理的内存分配与释放在作业或进程的执行过程中动态进行。
进程对内存区的申请和释放可分为两种情况:
1、当进程要求调入某一段时,内存中有足够的空闲区满足该段的内存要求:采用和动态分区式管理相同的空闲区管理方法。
2、内存中没有足够的空闲区满足该段的内存要求:根据给定的置换算法淘汰内存中在今后一段时间内不再被CPU访问的段。
一次调入时所需淘汰的段数与段的大小有关,如果一个作业或进程的段数较多,且段长之间的差别较大,则有可能出现调入某个大段时,需淘汰好几个小段的情况。
任何一个段的段长都不允许超过内存可用区长度,否则将会造成内存分配出错。
除了初始分配之外,段的动态分配是在CPU所要访问的指令和数据不在内存时产生缺段中断的情况下发生的。因此,段的淘汰或置换算法实际上是缺段中断处理过程的一部分。
3 段式管理的地址变换
(1)段表(Segment mapping table)
段式管理程序在进行初始内存分配之前,首先根据用户要求的内存大小为一个作业或进程建立一个段表,以实现动态地址变换和缺段中断处理及存储保护等。段式管理通过段表来进行内存管理的。
段号:与用户指定的段名一一对应
始址:表示该段在内存或外存的物理地址
长度:表示该段在内存或外存的实际长度
存取方式:用来对该段进行存取保护的。只有处理机状态字中的存取控制位与段表中存取方式一致时才能访问该段。
内外栏:指出该段现在存储于外存还是内存中。
访问位:根据淘汰算法的需要而设
图 段表
(2)动态地址变换
一般我们在内存中给出一块固定的区域放置段表。当某进程开始执行时,管理程序首先把该进程的段表始址放入段表地址寄存器。通过访问段表寄存器、管理程序得到该进程的段表始址从而可开始访问段表。然后,由虚地址中的段号s为索引,查段表。
若该段在内存,则判断其存取控制方式是否有错。如果存取控制方式正确,则从段表相应表目中查出该段在内存的起始地址,并将其和段内相对地址w相加,从而得到实际内存地址。
如果该段不在内存,则产生缺段中断将CPU控制权交给内存分配程序。内存分配程序首先检查空闲区链,以找到足够长度的空闲区来装入所需要的段。如果内存中的可用空闲区总数小于所要求的段长时,则检查段表中访问位,以淘汰那些访问概率低的段并将需要段调入。
段式管理时的地址变换过程必须经过二次以上的内存访问。即首先访问段表以计算得到待访问指令或数据的物理地址,然后才是对物理地址进行取数据或存数据操作。为了提高访问速度,页式地址变换时使用的高速联想寄存器的方法也可以用在段式地址变换中。即高速联想寄存器中存放那些经常访问的段号所对应的段表项,且高速联想寄存器中的段表和内存的段表可同时查找。如果在联想寄存器中找到了所需要的段,则可以大大加快地址变换速度。
图 段式地址变换
4 段的的共享与保护
(1) 段的共享
共享:内存中只保留一个副本,供多个用户使用。
如果用户进程或作业需要共享内存中的某段程序或数据,只要用户使用相同的段名,就可在新的段表中填入已存在在内存之中的段的起始地址,并置以适当的读写控制权,就可做到共享一个逻辑上完整的内存段信息。
另外,在多道环境下,由于进程的并发执行,一段程序为多个进程共享时,有可能出现多次同时重复执行该段程序的情况(即某个进程在未执行完该段程序之前,其它并发进程又已开始执行该段程序)。这就要求它在执行过程中,该段程序的指令和数据不能被修改。还有,与一个进程中的其它程序段一样,共享段有时也要被换出内存。这时,就要在段表中设立相应的共享位来判别该段是否正被某个进程调用。显然一个正在被某个进程使用或即将被某个进程使用的共享段是不应该调出内存的。
图 段式系统中共享内存副本
(2) 段的保护
地址越界保护法:利用段表中的段长项与虚拟地址中的段内相对地址比较进行。若段内相对地址大于段长,系统就会产生保护中断。
存取方式控制保护法:前面已作过介绍
段模式提供的二维地址最符合用户观点和程序逻辑。段式的最大好处是可以充分的实现共享和保护。
段式管理的优点是便于动态申请内存,管理和使用统一化,便于共享,便于动态连接;其缺点是有碎片问题。
页式管理和段式管理的比较
6.5.3 段式管理的优缺点
分段是支持用户内存观点的一种内存管理模式。
一个逻辑地址空间是一个段的集合,每个段有一个名字和一个长度。地址既说明段名,也说明段内位移。因此用户将每个地址说明分为两个量,一个是段名,一个是位移(与这个模式相反的是页模式,用户仅说明一个单独的地址。由硬件将该地址划分为一个页号和一个位移。这种划分是程序员看不见的。)段模式以段为单位划分和连续完整存放。段间是不一定连续编址的,即为二维编址。
段式作为不连续技术的一个最大特点是在于它是如何不连续的:进程逻辑空间(二维的)最接近用户观点,就像高级程序语言(更一般的说,软件系统接口)向自然语言靠拢一样。这样克服了页式的非逻辑划分,给保护和共享与动态伸缩所带来的不自然性(即不能按语义单位)。
1. 分页是出于系统管理的需要,分段是出于用户应用的需要。因此,一条指令或一个操作数可能会跨越两个页的分界处,而不会跨越两个段的分界处。
2. 页大小是系统固定的,而段大小则通常不固定。
3. 逻辑地址表示:分页是一维的,各个模块在链接时必须组织成同一个地址空间;而分段是二维的,各个模块在链接时可以每个段组织成一个地址空间。
图 页式管理与段式管理的比较
因为段页式管理是段式管理的页式管理方案结合而成的,所以具有他们二者的优点。但是由于管理软件的增加,复杂性和开销也随之增加。
