离散分配方式
分页式存储
将程序与内存均划分为同样大小的块,以页为单位将程序调入内存。
分页储存管理方式
分页存储管理是解决存储碎片的一种方法。
动态重定位是解决存储碎片问题的一种途径,但要移动大量信息从而浪费处理机时间,代价比较高,这是因为这种分配要求把作业必须安置在一连续存储区内的缘故,而分页存储管理正是要避开这种连续性要求。
页面与页表
页面
相对物理块来说,页是逻辑地址空间(虚拟内存空间)的划分,是逻辑地址空间顺序等分而成的一段逻辑空间,并依次连续编号。页的大小一般为 512B~8KB。
例如:一个 32 位的操作系统,页的大小设为212 = 4KB,那么就有页号从 0 编到220的那么多页逻辑空间。
物理块
物理块则是相对于虚拟内存对物理内存按顺序等大小的划分。物理块的大小需要与页的大小一致。
例如:231=2Gb 的物理内存,按照 4Kb/页的大小划分,可以划分成物理块号从 0 到 219的那么多块的物理内存空间。
逻辑地址结构
页式存储管理中,逻辑地址可以解读成页号+地址偏移量(页内地址)。如下图所示:
这是一个 32 位的逻辑地址,页大小设为 212=4Kb。高 20 位则是页号,低 12 位则是页内地址。逻辑地址为 A,页面大小为 L,则页号 P 和页内地址 d 计算公式如下:
页表
页表是记录逻辑空间(虚拟内存)中每一页在内存中对应的物理块号。但并非每一页逻辑空间都会实际对应着一个物理块,只有实际驻留在物理内存空间中的页才会对应着物理块。
页表是需要一直驻留在物理内存中的(多级页表除外),另外页表的起址和长度存放在 PCB(Process Control Block)进程控制结构体中,物理块号也叫作页帧号。
逻辑地址到物理地址的变换过程
进程访问某个逻辑地址时,分页地址机构自动将逻辑地址分为页号和页内地址
页号大于页表长度,越界错误
页表项的地址 p = 页表起始地址 F + 页号 P * 表项大小 S,从而得到对应的物理块号 B
页和物理块的大小是一致的,所以 页内地址=块内地址
然后 物理地址 = 物理块号 B * 页大小 L + 页内地址
根据物理地址读取数据
例:某系统采用分页式存储管理,页大小为 2KB。已知进程 A 的逻辑地址空间为 4 个页,内存分配如下页表所示,求逻辑地址 4832 的物理地址。(所有数据都是十进制)
解:
2KB=2048B
页号 P=逻辑地址/页大小=4832/2048=2
页内地址 F=逻辑地址%页大小=4832%2048=736
根据页表查得 2 号页对应着 25 号物理块
物理地址 A=物理块号*页大小 + 页内地址=25*2048+736=51936