分页存储的概念

  分页的思想:将内存空间划分称若干个大小相同的空间,称之为。相应的也将进程的逻辑地址空间以块为单位划分,称之为。(块还可被叫作页框,页帧)。
从形式上看,是固定分区大小的分区方式,不会产生外部碎片,但是将划分进程的逻辑地址空间时,进程的最后一页通常是不满一页的(除不尽,向上取整)。因此产生不可利用的碎片,称为内部碎片

页表

  为了找到进程的每个页面所对应的物理块,系统为每个进程建立一张页表。页表里面记录着每个页号对应的块号,一对页号和块号,称为页表项。在配置完页表后,进程执行时,通过查找该表,即可找到每页在内存的物理块号。可见,页表作用是实现从页号到物理块号的地址映射。

逻辑地址

  逻辑地址以32位结构为例,前一部分为12-31位为页号,后一部分11-0为页内偏移量。由此结构可得出,最多可有2^20个页号。后一部分12位的偏移量,代表着页面大小,大小为2ⁿ位, 此结构中n=12,页面大小就为2^12位==4kb

地址变换

  地址变换的任务就是将逻辑地址转换为内存中的物理地址,前面罗列了那么多概念就是为了这一步的转换。简单的流程是:由逻辑地址的页号--->在页表中找到对应的块号--->根据得到的块号等条件,得出物理地址。在此过程中为了快速找到页表,通常设置一个页表寄存器,存放页表的起始地址,和页表的长度(存放了多少对页号和块号)。

详细变换过程如下:

  1.将逻辑地址中的页号和页表寄存器中页表长度比较,若页号大于页表长度则发生越界中断。(页号=逻辑地址/页面大小。偏移量=逻辑地址%页面大小)
  2.由寄存器中的页表起始地址找出页表。
  3.在页表中找到页号对应的块号。
  4.由得到的块号,进一步得出物理地址。物理地址=块号*页面大小+页内偏移量

由此可发现页式管理只需给定一个整数就能确定对应的物理地址,因为页面大小的固定的,因此页式管理中地址空间是一维的
页表项大小如何确定?

  页表项大小不是随意规定的,而是有所约束的。以32位逻辑地址空间,一页4kb为例,地址空间里一共有2^32B/4kb=1M页,那么页号不能小于㏒₂1M=20位。那么每个页表项的大小至少要大于20/8=3B。