Segmentation
1. Segmentation: Generalized Base/Bounds

我们可以看一下(Figure 16.1),尽管每个CPU都有一对硬件寄存器(base register和bounds register),但是还是不可避免的会产生内存浪费(阴影部分表示未被使用)。为了解决这个问题,就引入了segmentation:既然每一个MMU(内存管理单元)有一对base register和bounds register,为什么不设置成每个地址空间逻辑分段都有一对base register和bounds register呢?看一下下图(Figure 16.2):
64KB的内存地址中有3个segments(Stack、Code、Heap and 16KB reserved fir the OS)。Figure 16.3展示了Figure 16.2每个分段:
2. Which Segment Are We Referring To?
引入了segmentation后,硬件使用分段寄存器将虚拟地址转换成实际物理地址。但是硬件怎么知道一个分段的偏移量?或者哪个分段是地址需要的?
一个直接的方法就是把虚拟地址的高几位地址作为分段基准。如下所示:
上图是对应于上述3个分段,所以选取了14位虚拟地址的首2位作为分段基准。例如,如果该两位是00,那么就表示Code分段,01表示Heap分段。
举个例子:虚拟地址为4200
我们可以看到高2位01表示选取heap分段,后12位为000 0110 1000(0x0

本文介绍了操作系统中的分段机制,包括分段的基本概念、如何确定引用的分段、堆栈处理、共享支持、粒度大小的影响以及操作系统对此的支持。通过一系列的问题解答,深入解析了分段地址转换和内存管理,探讨了如何配置模拟器来模拟不同场景下的分段行为。
最低0.47元/天 解锁文章
90

被折叠的 条评论
为什么被折叠?



