地址转换
虚拟地址转物理地址,CPU根据PID查到当前运行的进程的PCB,将PCB中有关页表的信息(页表始址等)载入页表寄存器。
拓展:
struct PCB{
//进程描述信息
Int PID;
//进程控制和管理信息
//资源分配清单
//cpu相关信息和上下文
指针 页表始址;
}
查页表
根据页表寄存器得到页表(页表在操作系统内核区),页表项结构:页号、块号、有效位(状态位)、脏位(修改位)、替换控制位(访问字段)、外存地址
拓展:
Struct 页表项{ //页表项本质是结构体
Int 页号;
Int 块号;
Int 状态位; //有效位
Int 修改位; //脏位
Int 访问字段; //替换控制
指针 在外存地址;
}
Struct 页表项 页表[10]; //页表本质是数组
1.没有引入快表:骚图pro 图1 数据7 查到对应表项后,发现有效位为0,因此引发缺页异常(指令引起),于是调页(将数据从外存送入内存),并修改慢表的页表表项,有效位0变1,外存地址设置为调入的物理块的物理地址。cpu再一次运行引发缺页异常的指令。必定在慢表命中
2.引入快表:骚图pro 图2快表缺失,查慢表(同上)缺失,引发缺页异常(指令引起),于是调页(将数据从外存送入内存),并修改慢表的页表表项,有效位0变1,外存地址设置为调入的物理块的物理地址,同时,修改快表相关表项。cpu再一次运行引发缺页异常的指令。必定在快表命中。
缺页异常的子功能:页面置换
假设上述过程2,调页时发现内存已经满了,于是利用页面置换算法,从内存置换出一个页(写回外存),并且修改其对应表项
①块号修改为NULL或者不变。
①有效位置0。
③外存地址修改为其对应的外存地址。
而换入的7号页,对应表项的
①块号修改为置换进去的内存的块号(原先8号的块号)。
②有效位置1 。
注:对于快表,只需要知道其也被修改了,但是具体修改细节可以不用掌握,重点掌握慢表的修改细节。
页表变化总结
页表字段 | 换入 | 换出 |
页号 | 不变 | 不变 |
页框号(块号) | 更新为新的物理页框号 | 清空或保留不变(页面在外存中,不需要物理页框号) |
有效位 | 设为 1,表示页面在内存中 | 设为 0,表示页面在外存中 |
脏位 | 设为 0,表示页面未修改 | 如果页面被修改,设为 1;否则保持为 0 |
访问位 | 重置为 0,表示尚未访问 | 保持当前状态,可能清除或重置 |
外存地址 | 不变 | 更新为页面在外存中的具体位置 |