操作系统——内存管理中的分页存储管理方式

参考文献

汤小丹等,《操作系统》

名词解释

页面(页)

将用户程序的地址空间分为若干个固定大小的区域,即页面。

物理块(块)

将整个内存空间也划分为若干个固定大小的区域,这里的大小与页面的大小一致,称为物理块。

地址、数据结构

离散分配、页表

通过上述的空间划分结构,用户程序的任一页面都可通过离散分配的方式装入内存空间中的某一物理块。为了记录这一映射关系,设置了一个专门的数据结构——页表,如图1所示(因为页表按页号顺序排列,所以页号并没有真正存储在物理存储上,这里画出来是为了方便理解)。
操作系统——内存管理中的分页存储管理方式_第1张图片

程序地址结构

操作系统——内存管理中的分页存储管理方式_第2张图片
页号有20位,最多可表示2^20=1Mi个页面;
位移量10位,最多可表示的偏移量为2^10=1Ki;
通过页号和位移量可找到内存空间中对应的地址,具体地址变换过程将在下文详细解释。

地址变换机构

为了实现从逻辑地址到物理地址的转换,在分页管理系统中必须设置地址变换机构,如图3所示。
操作系统——内存管理中的分页存储管理方式_第3张图片
红线是在书上原图的基础上添加的,我认为这样添加更易懂一些(页号与页表长度比较),接下来介绍地址变换的步骤。

  1. 页号先与页表寄存器中的页表长度比较,若页号大于页表长度,则发生越界错误,产生中断信号;若未出现越界错误,则将页表始址与页号和页表项长度的乘积相加,即可得到所求页表项的地址。
    1.1 刚读到“将页表始址与页号和页表项长度的乘积相加”这句话的时候我也有一些迷惑。先解释一下页表,页表从上而下按页号顺序排列,这就决定了页号不需要在实际物理结构中存储。因此,页表实际上仅由一个个页表项组成。假设页表始址为00000000,页表项的长度为8,那么第一个页表项的地址即00000000,第二个页表项的地址即00000008,第三个页表项的地址即00000016,依此类推。
  2. 将得到的页表项中的块号与页内地址组合,形成真正的物理地址。

扩展

学会了原理后,来看看一些提高性能的方法。

两级、多级页表。

因为传统页表占用空间大且要求连续分配,很不方便,所以用离散分配的方式来代替传统的连续分配,但实际上并未解决页表占用空间大的问题,若要解决该问题,需采用虚拟存储器。

快表。

传统的地址变换机构需要访问两次内存(第一次从页表取出物理块号,第二次才真正获取到数据),所以可以通过增加一个快表(类似于Cache),访问速度快但成本较高。增加快表后的访问速度与快表的命中率强相关。

反置页表。

传统页表的按页号排序,页表项内容是物理块号;
反置页表按物理块号排序,页表项内容是页号和其所属进程的标识符。
这样做能够解决进程过多且地址空间较大时传统页表所占用的空间过多(很多个页表,每个页表又有很多页表项)的问题。

页面大小

若页面太大,会导致页内碎片过多;
若页面太小,会导致页面数量过多;

你可能感兴趣的:(理论基础,操作系统,分页系统,分页存储管理)