📜  分页分段和分段分页

📅  最后修改于: 2021-09-28 11:03:12             🧑  作者: Mango

先决条件: Paging , Segmentation , Different b/w Paging and Segmentation

单级寻呼的主要限制
单级分页的一大挑战是,如果逻辑地址空间很大,那么页表可能会占用主存中的大量空间。例如,假设逻辑地址为 32 位,每页为 4 KB,则页数为 2^20 页。没有附加位的页表的大小为 20 位 * 2 20或 2.5 MB。由于每个进程都有自己的页表,使用单级分页时会消耗大量内存。对于具有 64 位逻辑地址的系统,即使是单个进程的页表也无法放入主内存中。对于具有大逻辑地址空间的进程,它的许多页表条目是无效的,因为许多逻辑地址空间未被使用。

含有无效条目的页表

分段分页
该问题的解决方案是使用分段和分页来减小页表的大小。传统上,一个程序被分为四个段,即代码段、数据段、堆栈段和堆段。

流程段

可以通过为每个段创建一个页表来减小页表的大小。要完成此硬件支持是必需的。 CPU 提供的地址现在将被划分为段号、页号。和抵消。

内存管理单元 (MMU) 将使用包含页表地址(基址)和限制的段表。页表将指向主存中段的页框。

分段分页

分段分页的优点

  1. 页表大小减少,因为页仅用于段数据,因此减少了内存需求。
  2. 为程序员提供视图以及分页的优点。
  3. 与分段相比,减少了外部碎片。
  4. 由于不需要换出整个段,因此换出到虚拟内存变得更加容易。

分段分页的缺点

  1. 内部碎片仍然存在于页面中。
  2. 需要额外的硬件
  3. 翻译变得更加连续,增加了内存访问时间。
  4. 由于当今系统中不同大小的页表和不同大小的段表,会出现外部碎片。

分页分割

  1. 在分段分页中,并非每个进程都具有相同数量的段,并且段表的大小可能很大,这会由于段表大小的变化而导致外部碎片。为了解决这个问题,我们使用分页分段,它需要对段表进行分页。 CPU 生成的逻辑地址现在将由页号 #1、段号、页号 #2 和偏移量组成。
  2. 即使使用分段分页,页表也可能有很多无效页面。不用多级分页和分段分页,直接应用多级分页代替分段分页可以解决页表较大的问题。

分页分割

分页分割的优点

  1. 无外部碎片
  2. 减少内存要求,因为没有。页数限制为段大小。
  3. 页表大小更小,就像分段分页一样,
  4. 与分段分页类似,不需要换出整个分段。

分页分割的缺点

  1. 内部碎片化仍然是一个问题。
  2. 硬件比分段分页复杂。
  3. 第一阶段的额外分页会增加内存访问的延迟。