跳转至

页式存储管理

页式存储管理基本原理

  • 不连续的存储分配:页式存储管理允许程序的存储空间不必是连续的,这样可以将进程分散存放在各个内存块中,避免了外部碎片问题,从而提高了内存的利用率。
  • 地址结构:系统将逻辑地址空间划分为若干个大小相等的页,每个页被编号。同样,内存被划分为大小相同的块,并为每个块编号。逻辑地址由页号(P)和页内偏移地址(W)两部分组成,具体计算方式为:

    \[ P = \text{INT}(A / L), \quad W = A \mod L \]

    其中,\(A\) 是逻辑地址,\(L\) 是页面大小,INT表示向下整除,MOD表示取余。

存储空间的分配与回收

  • 位示图管理:主存空间的分配通过位示图进行管理,记录哪些块已分配,哪些块空闲。空闲块通过查找位示图中的“0”位来找到,并为作业分配内存。当作业执行完毕后,归还内存块,并更新位示图。
  • 块号计算:当需要分配或回收内存块时,根据位示图中的位置,通过公式计算出块号:

    \[ \text{块号} = \text{字号} \times \text{字长} + \text{位号} \]

当作业结束时,归还块的操作使用相反的计算方式来更新位示图和空闲块数量。

页表与地址转换

  • 页表:为每个作业维护一张页表,记录每一页的逻辑页号与物理块号的映射。页表实现了从页号到物理块号的地址映射。作业中的每一页在页表中都有相应的条目。
  • 硬件支持的地址转换:作业执行时,硬件通过页表控制寄存器自动将逻辑地址转换为物理地址。逻辑地址分为页号页内地址两部分,通过页号索引页表,获取对应的物理块号,再加上页内地址计算出物理地址。计算公式为:

    \[ \text{物理地址} = \text{块号} \times \text{块长} + \text{页内地址} \]

地址转换过程

  • 逻辑地址分解:逻辑地址由两部分组成:页号和页内地址。通过页号在页表中查找对应的物理块号,再通过页内地址找到具体的物理地址。
  • 页表查询:当页号在页表中存在时,可以得到相应的物理块号。如果页表中没有该页号,发生地址错的程序性中断。
  • 物理地址计算:通过页表获取块号后,结合页内地址进行物理地址的计算。