内存管理的三个离散方式:页式(分页)、段式(分段)、段页式(页段联动)
页式
基本原理
将各进程的虚拟空间划分为若干长度相等的页。内存空间按页的大小划分为片/页面,建立页表(页式虚拟地址与内存地址的映射),并用相应的硬件地址准换机构来解决离散地址变换问题。
页式管理采用请求调页和预调页技术实现内外存存储器的统一管理。
实现
逻辑空间 分页,内存空间 分块,与页面大小相同。
分配内存时,以块为单位将进程中的若干个页分别装入到多个可以不相邻接的物理块中。
地址结构: 页号+位移量
位移量的位数决定页的大小。
通过页表映射找到页对应的内存块。
优点
没有外碎片,每个内碎片不超过页的大小
缺点
程序全部装入内存,要求有相应的硬件支持,如:地址变换机构缺页中断的产生和选择淘汰页面等,增加了机器成本和系统开销二
段式管理
基本原理
将程序按内容或过程函数关系分成段。每段有自己的名字。一个作业或进程所包含的段对应一个二维线性虚拟空间。段式管理以段为单位分配内存,通过地址映射机制,将段式虚拟地址转换成实际内存物理地址。
实现
段的长度由相应的逻辑信息组的长度决定,因而各段长度不等。
分页 vs.分段 :将程序分页时,页的大小是固定的,只根据页面大小大小死生生的将程序切割开;而分段时比较灵活,只有一段程序有了完整的意义才将这一段切割开。(例如将一个人每隔50厘米切割一段,即为分页;而将一个人分割为头部、身体、腿部(有完整逻辑意义)三段,即为分段)
地址结构 段号+位移量
若想求物理地址,需要根据段表映射段号求出基址。
求基址的过程与页式存储中求块号的过程原理相同,这里需要注意的是,物理地址是基址+段内地址,而不是基址&段内地址,由逻辑地址得到段号、段内地址,再根据段号和段表求出基址,再由基址+段内地址即可得物理地址。
优点
可以分别编写和编译,可以针对不同类型的段采取不同的保护,可以按段为单位进行共享,包括通过动态链接进行代码共享。
缺点
会产生碎片
段页式管理
基本原理
内存以段为单位划分,每个段又划分成若干个页。需要有一张段表管理内存分配与释放、缺段处理。同时每个段还需要一张页表把段中的虚页转换成内存中的实际页面。页表也需要有实现缺页中断处理和页面保护等功能的表项。
实现
** 地址结构:** 段号+段内页号+页内地址(位移量)
优点
段页式管理是段式管理和页式管理相结合而成,具有两者的优点
缺点
复杂性和开销增加,需要的硬件以及占用的内存也有所增加,使得执行速度下降。