内存管理方式:页存储、段存储、段页存储
1.1 分页存储管理
1.1.1 基本思想
将程序的逻辑地址空间划分为固定大小的页(page),而物理内存划分为同样大小的页框(page frame)或物理块,每个物理块的大小一般取2的整数幂。程序加载时,可将任意一页放入内存中任意一个页框,这些页框不必连续,从而实现了离散分配。该方法需要CPU的硬件支持,来实现逻辑地址和物理地址之间的映射。在页式存储管理方式中地址结构由两部构成,前一部分是页号,后一部分为页内地址w(位移量)。
逻辑地址到物理地址变化原理:CPU中的内存管理单元(MMU)按逻辑页号通过查进程页表得到物理页框号,将物理页框号与页内地址相加形成物理地址(见图4-4)。
1.1.2 页式管理方式的优点
1)没有外碎片,每个内碎片不超过页大比前面所讨论的几种管理方式的最大进步是。提高内存的利用率。
2)一个程序不必连续存放。
3)便于改变程序占用空间的大小(主要指随着程序运行,动态生成的数据增多,所要求的地址空间相应增长)。
1.1.3 缺点
- 无论数据有多少,都只能按照页面大小分配,容易产生内部碎片(一个页可能填充不满,造成浪费。
- 不能体现程序逻辑
- 分页方式的缺点是页长与程序的逻辑大小不相关
- 不利于编程时的独立性,并给换入换出处理、存储保护和存储共享等操作造成麻烦。
1.2 分段存储
4.2.1 思想
将用户程序地址空间分成若干个大小不等的段,每段可以定义一组相对完整的逻辑信息。存储分配时,以段为单位,段与段在内存中可以不相邻接,也实现了离散分配。通常,程序员把子程序、操作数和常数等不同类型的数据划分到不同的段中(写c程序时会用到),并且每个程序可以有多个相同类型的段。段表本身也是一个段,可以存在辅存中,但一般是驻留在主存中。
段表本身也是一个段,可以存在辅存中,但一般是驻留在主存中。
在段式虚拟存储系统中,虚拟地址由段号和段内地址组成,虚拟地址到实存地址的变换通过段表来实现。
在为某个段分配物理内存时,可以采用首先适配法、下次适配法、最佳适配法等方法。在回收某个段所占用的空间时,要注意将收回的空间与其相邻的空间合并。
在段式虚拟存储系统中,虚拟地址由段号和段内地址组成,虚拟地址到实存地址的变换通过段表来实现。
1.2.2 地址映射
在段式 管理系统中,整个进程的地址空间是二维的,即其逻辑地址由段号和段内地址两部分组成。为了完成进程逻辑地址到物理地址的映射,处理器会查找内存中的段表,由段号得到段的首地址,加上段内地址,得到实际的物理地址。这个过程也是由处理器的硬件直接完成的,操作系统只需在进程切换时,将进程段表的首地址装入处理器的特定寄存器当中。这个寄存器一般被称作段表地址寄存器。
1.2.3 分段存储方式的优缺点
分页对程序员而言是不可见的,而分段通常对程序员而言是可见的,因而分段为组织程序和数据提供了方便。与页式虚拟存储器相比,段式虚拟存储器有许多优点:
(1)段的逻辑独立性使其易于编译、管理、修改和保护,也便于多道程序共享。
(2)段长可以根据需要动态改变,允许自由调度,以便有效利用主存空间。
(3)方便编程,分段共享,分段保护,动态链接,动态增长
因为段的长度不固定,段式虚拟存储器也有一些缺点:
(1)主存空间分配比较麻烦。
(2)容易在段间留下许多碎片(外部碎片),造成存储空间利用率降低。
(3) 由于段长不一定是2的整数次幂,因而不能简单地像分页方式那样用虚拟地址和实存地址的最低若干二进制位作为段内地址,并与段号进行直接拼接,必须用加法操作通过段起址与段内地址的求和运算得到物理地址。因此,段式存储管理比页式存储管理方式需要更多的硬件支持。
1.3 分页和分段的主要区别
a)、页是信息的物理单位,分页是为实现离散分配方式,以消减内存的外零头,提高内存的利用率;段则是信息的逻辑单位,它含有一组其意义相对完整的信息,分段的目的是为了能更好地满足用户的需要。
b)、页的大小固定且由系统决定,由系统把逻辑地址划分为页号和页内地址两部分,是由机器硬件实现的,因而在系统中只能有一种大小的页面;而段的长度却不固定,决定于用户所编写的程序,通常由编译程序在对源程序进行编译时,根据信息的性质来划分。
c)、分页的作业地址空间是一维的,即单一的线性地址空间,程序员只需利用一个记忆符,即可表示一个地址;而分段的作业地址空间则是二维的,程序员在标识一个地址时,即需给出段名,又需给出段内地址。
d)、分页信息很难保护和共享、分段存储按逻辑存储所以容易实现对段的保存和共享。
1.4 段页存储
程序员按照分段系统的地址结构将地址分为段号与段内位移量,地址变换结构将段内位移量分解为页号和页内位移量。
为实现段页式存储管理,系统应为每个进程设置一个段表,包括每段的段号,该段的页表始址和页表长度。每个段有自己的页表,记录段中的每一页的页号和存放在主存中的物理块
它首先将程序按其逻辑结构划分为若干个大小不等的逻辑段,然后再将每个逻辑段划分为若干个大小相等的逻辑页。主存空间也划分为若干个同样大小的物理页。辅存和主存之间的信息调度以页为基本传送单位,每个程序段对应一个段表,每页对应一个页表。
段页式系统中,作业的地址结构包含三部分的内容:段号,页号,页内位移量
CPU访问时,段表指示每段对应的页表地址,每一段的页表确定页所在的主存空间的位置,最后与页表内地址拼接,确定CPU要访问单元的物理地址。
段页存储管理方式综合了段式管理和页式管理的优点,但需要经过两级查表才能完成地址转换,消耗时间多。
1.4.1 地址变换的过程:
1) 进行地址变换时,首先利用段号S,将它与段表长TL进行比较。若S<TL,表示未越界。
2) 于是利用段表始址和段号来求出该段所对应的段表项在段表中的位置,从中得到该段的页表始址
3) 利用逻辑地址中的段内页号P来获得对应页的页表项位置,从中读出该页所在的物理块号b
4) 再利用块号b和页内地址来构成物理地址。
1.4.2 段页式存储管理的优缺点
优点:
- (1) 它提供了大量的虚拟存储空间。
- (2) 能有效地利用主存,为组织多道程序运行提供了方便。
缺点:
- (1) 增加了硬件成本、系统的复杂性和管理上的开销。
- (2) 存在着系统发生抖动的危险。
- (3) 存在着内碎片。
- (4) 还有各种表格要占用主存空间。
段页式存储管理技术对当前的大、中型计算机系统来说,算是最通用、最灵活的一种方案。