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