分段分页以及段页结合

本文探讨了分段技术如何解决早期程序运行内存限制问题,包括地址空间不隔离、地址不确定性及内存效率低下的挑战。随后,介绍了分页技术,其通过固定大小的页和虚拟地址空间优化内存使用。文章还对比了分段与分页的优缺点,以及它们在提供大量虚拟存储和高效多道程序运行中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分页、分段的技术出现之前

在分段这个技术还没有出现之前,程序运行是需要从内存中分配出足够多的连续的内存,然后把整个程序装载进去

某个程序大小是10M,然后,就需要有连续的10M内存空间才能把这个程序装载到内存里面。如果无法找到连续的10M内存,就无法把这个程序装载进内存里面,程序也就无法得到运行

产生问题

①地址空间不隔离
②程序运行时候的地址不确定
③内存使用率低下


分段技术的出现与虚拟地址空间

分段:就是将一个程序分成代码段,数据段,堆栈段什么的,每个段各自管理不同的数据

在这里插入图片描述

虚拟地址空间
简单的说就是可以寻址的一片空间。如果这个空间是虚拟的,我们就叫做虚拟地址空间;如果这个空间是真实存在的,我们就叫做物理地址空间。虚拟地址空间是可以任意的大的,因为是虚拟的。而物理地址空间是真实存在的,所以是有限的

分段技术把虚拟地址空间映射到了物理地址空间,并且你写的程序操作的是虚拟地址

分段技术解决了体现出了隔离性,使得程序无需关注物理地址是多少,只要虚拟地址没有改变,那么,程序就不会操作地址不当两个问题

分页技术的出现解决了效率使用低下的问题

分页技术的大概原理

分页的基本方法是将地址空间等分成某一个固定大小的页;每一页大小由硬件来决定,或者是由操作系统来决定(如果硬件支持多种大小的页)。

页面大小的选择

页面大小是固定的,由你的机器和硬件所决定,不同的机器可能页面大小不同
页面大小一般是2的幂,通常是512B~8KB

页面尺寸小:内存碎片小,内存利用率高,但页面数目多,使页表过长,占大量内存,管理开销大

页面尺寸大:页表端,内存利用率低且内存碎片化大,管理开销小


分页、分段的区别

在这里插入图片描述

段页结合优点和缺点

优点

(1) 它提供了大量的虚拟存储空间。

(2) 能有效地利用主存,为组织多道程序运行提供了方便。

缺点:

(1) 增加了硬件成本、系统的复杂性和管理上的开消。

(2) 存在着系统发生抖动的危险。

(3) 存在着内碎片。

(4) 还有各种表格要占用主存空间。

### 分页式存储与分段式存储的区别 #### 分页式存储 分页式存储是一种基于固定大小单元的内存管理方式。在这种机制下,逻辑地址空间被划分为若干个大小相等的小单元,这些小单元被称为(Page),通常面的大小是 $2^n$ 字节,范围一般在 512B 到 4MB 之间[^3]。与此同时,物理内存也被划分为与面大小相同的小单元,称为框(Frame 或 Page Frame)。通过这种划分,作业的每一都可以映射到任意一个可用的框中,从而实现了离散分配。 然而,分页式存储的一个显著特点是它不考虑程序的实际结构,仅仅按照固定的大小进行分割。因此,虽然它可以有效减少外部碎片,但由于面可能未完全填满数据而导致内部碎片的存在[^2]。 #### 分段式存储 相比之下,分段式存储更注重于程序本身的逻辑结构。在这种模式下,程序员可以根据程序的功能模块将其划分为不同的(Segment),例如代码、数据堆栈等。每个都有自己的起始地址长度,并且不同之间的边界并不一定是对齐的。这意味着分段式存储允许更加灵活地表示应用程序的不同组成部分,使得编程更为直观方便[^3]。 但是,由于各的尺寸并非统一规定,当它们加载至内存时可能会留下一些难以利用的小间隙——即所谓的外部分碎片问题变得突出起来。此外,因为需要维护额外的信息来描述各个的位置关系及其属性,所以相比简单的分页方案来说开销更大一点[^1]。 --- ### 式存储的工作原理 为了综合两种方法的优点并克服各自的缺点,提出了组合式的存储管理模式—式存储(Segmentation with Paging)。在此模型之下: - 首先依据功能需求将整个进程分解成为多个独立意义完整的; - 接着对于每一个单独存在的再次运用类似于纯分页技术那样进一步细分成更多数量级较小规模而且规格一致的标准子项称之为“”。 具体而言就是说,在式系统里头既有代表高层抽象概念上的‘’又有体现底层硬件特性方面考量后的产物也就是那些定长单位组成的‘’共同协作完成最终目标达成过程中的各项任务处理工作流程安排部署情况说明如下图所示: ```plaintext +-------------------+ | Segment | +-------+-----------+ | Page Table | +------------+ / \ / \ v v Physical Memory Blocks (Frames) ``` 在这个架构里面,每当访问某个特定位置的数据资源的时候都需要经历两次转换操作才能定位确切的目标所在之处:第一次是从给定的线性偏移量计算得出所属的具体哪一个号以及相对应于此内的局部坐标值;第二次则是借助之前建立好的映射表查找对应的真实物理帧编号再加上剩余部分形成最后实际使用的绝对地址表达形式[^4]。 --- ### 总结对比表格 | **特征/类型** | **分页式存储** | **分段式存储** | **式存储** | |------------------|----------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------| | 地址空间划分 | 基于固定大小的 | 根据程序逻辑结构划分为 | 结合分页分段的特点 | | 外部碎片 | 几乎不存在 | 存在外部分碎片 | 较少存在外部碎片 | | 内部碎片 | 可能存在少量内部碎片 | 不适用 | 同样可能存在少量内部碎片 | | 编程灵活性 | 对程序员透明 | 提供更高的编程灵活性 | 继承了两者的优点 | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值