9、内存管理技术解析:分段、分页与缓存

内存管理技术解析:分段、分页与缓存

1. 分段内存分配

分段内存分配的概念源于程序员将程序按模块结构化的常见做法。在这种分配方式中,每个作业被划分为多个不同大小的段,每个段对应一个包含相关功能代码的模块,例如子程序就是这样的逻辑组之一。

与分页方案不同,分页将作业划分为多个相同大小的页面,每个页面通常包含来自多个程序模块的片段,而分段内存分配旨在减少页面错误,比如因段的循环被分割到两个或更多页面而导致的错误。此外,分段内存分配中主内存不再划分为页框,因为每个段的大小不同,从很小到很大不等,所以内存是动态分配的。

当程序编译或汇编时,会根据程序的结构模块设置段。每个段都有编号,并且为每个作业生成一个段映射表(SMT),其中包含段编号、长度、访问权限、状态以及加载到内存时的内存位置。

为了跟踪内存中的段,内存管理器需要使用三个表:
- 作业表:列出正在处理的每个作业(整个系统一个)。
- 段映射表:列出每个段的详细信息(每个作业一个)。
- 内存映射表:监控主内存的分配情况(整个系统一个)。

要访问段内的特定位置,类似于分页内存管理的操作,需要段号和段内偏移量。由于段的大小不同,必须验证偏移量是否在段的范围内。

分段内存分配的地址是由段号和偏移量组成的二维地址方案。不过,动态分区的分配方案会导致外部碎片问题,因此有时需要对可用内存进行重新紧凑化。

分页和分段有许多相似之处,但主要区别在于概念上:页面是用户程序不可见的物理单位,大小固定;而段是用户程序可见的逻辑单位,大小可变。

2. 分段/按需分页内存分配

分段/按需分页内存分配方案

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值