先决条件: Paging , Segmentation , Different b/w Paging and Segmentation
单级寻呼的主要限制
单级分页的一大挑战是,如果逻辑地址空间很大,那么页表可能会占用主存中的大量空间。例如,假设逻辑地址为 32 位,每页为 4 KB,则页数为 2^20 页。没有附加位的页表的大小为 20 位 * 2 20或 2.5 MB。由于每个进程都有自己的页表,使用单级分页时会消耗大量内存。对于具有 64 位逻辑地址的系统,即使是单个进程的页表也无法放入主内存中。对于具有大逻辑地址空间的进程,它的许多页表条目是无效的,因为许多逻辑地址空间未被使用。
![](https://mangodoc.oss-cn-beijing.aliyuncs.com/geek8geeks/Paged_Segmentation_and_Segmented_Paging_0.jpg)
含有无效条目的页表
分段分页
该问题的解决方案是使用分段和分页来减小页表的大小。传统上,一个程序被分为四个段,即代码段、数据段、堆栈段和堆段。
![](https://mangodoc.oss-cn-beijing.aliyuncs.com/geek8geeks/Paged_Segmentation_and_Segmented_Paging_1.jpg)
流程段
可以通过为每个段创建一个页表来减小页表的大小。要完成此硬件支持是必需的。 CPU 提供的地址现在将被划分为段号、页号。和抵消。
内存管理单元 (MMU) 将使用包含页表地址(基址)和限制的段表。页表将指向主存中段的页框。
![](https://mangodoc.oss-cn-beijing.aliyuncs.com/geek8geeks/Paged_Segmentation_and_Segmented_Paging_3.jpg)
分段分页
分段分页的优点
- 页表大小减少,因为页仅用于段数据,因此减少了内存需求。
- 为程序员提供视图以及分页的优点。
- 与分段相比,减少了外部碎片。
- 由于不需要换出整个段,因此换出到虚拟内存变得更加容易。
分段分页的缺点
- 内部碎片仍然存在于页面中。
- 需要额外的硬件
- 翻译变得更加连续,增加了内存访问时间。
- 由于当今系统中不同大小的页表和不同大小的段表,会出现外部碎片。
分页分割
- 在分段分页中,并非每个进程都具有相同数量的段,并且段表的大小可能很大,这会由于段表大小的变化而导致外部碎片。为了解决这个问题,我们使用分页分段,它需要对段表进行分页。 CPU 生成的逻辑地址现在将由页号 #1、段号、页号 #2 和偏移量组成。
- 即使使用分段分页,页表也可能有很多无效页面。不用多级分页和分段分页,直接应用多级分页代替分段分页可以解决页表较大的问题。
![](https://mangodoc.oss-cn-beijing.aliyuncs.com/geek8geeks/Paged_Segmentation_and_Segmented_Paging_4.jpg)
分页分割
分页分割的优点
- 无外部碎片
- 减少内存要求,因为没有。页数限制为段大小。
- 页表大小更小,就像分段分页一样,
- 与分段分页类似,不需要换出整个分段。
分页分割的缺点
- 内部碎片化仍然是一个问题。
- 硬件比分段分页复杂。
- 第一阶段的额外分页会增加内存访问的延迟。