页式存储管理
页式存储管理基本原理
- 不连续的存储分配:页式存储管理允许程序的存储空间不必是连续的,这样可以将进程分散存放在各个内存块中,避免了外部碎片问题,从而提高了内存的利用率。
-
地址结构:系统将逻辑地址空间划分为若干个大小相等的页,每个页被编号。同样,内存被划分为大小相同的块,并为每个块编号。逻辑地址由页号(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{页内地址} \]
地址转换过程
- 逻辑地址分解:逻辑地址由两部分组成:页号和页内地址。通过页号在页表中查找对应的物理块号,再通过页内地址找到具体的物理地址。
- 页表查询:当页号在页表中存在时,可以得到相应的物理块号。如果页表中没有该页号,发生地址错的程序性中断。
- 物理地址计算:通过页表获取块号后,结合页内地址进行物理地址的计算。