虚拟内存¶
进程创建加载的时候,会被分配一段暂时不存在的内存,等到进程真正运行的时候,需要某些数据并且数据不在物理内存中,会触发缺页中断,进行数据拷贝。
系统通过部分装入、请求调入和置换功能实现虚拟的更大的内存。
页表:记录虚拟页的状态,在物理内存中的地址,是否映射,是否缓存。
流程¶
- CPU想访问某个虚拟内存地址,找到进程对应的页表中的条目,判断有效位, 如果有效位为1,说明在页表条目中的物理内存地址不为空,根据物理内存地址,访问物理内存中的内容,返回
- CPU想访问某个虚拟内存地址,找到进程对应的页表中的条目,判断有效位,如果有效位为0,但页表条目中还有地址,这个地址是磁盘空间的地址,这时触发缺页异常,系统把物理内存中的一些数据拷贝到磁盘上,腾出所需的空间,并且更新页表。此时重新执行访问之前虚拟内存的指令,就会发现变成了情况1.
分段分页¶
- 分页和分段是实现离散分配存储方式,它们都需要地址转换机制实现地址变换,且访问指令(或数据)需要两次内存访问
但两者概念上存在明显的区别,主要表现为:
- 页是信息的物理单位,分页仅是系统管理内存的方便而进行的,不是用户的需要;段是信息的逻辑单位,分段是出于用户的需要;
- 页的大小固定的,具体由系统决定;段的大小不固定,由用户程序本身决定;
- 分页的逻辑地址空间是一维的连续空间;分段的逻辑地址空间是二维的,段之间的逻辑地址是不连续的。
缺页中断¶
当软件试图访问已映射在虚拟地址空间中,但是目前并未被加载在物理内存中的一个分页时,由中央处理器的内存管理单元所发出的中断。
- 保存CPU现场
- 缺页中断的虚拟地址,操作系统检查这个地址是否有效
- 检查是否有空闲页框。如果没有空闲页框,执行页面置换算法寻找一个页面来淘汰
- 操作系统查找所需页面在磁盘上的地址,通过磁盘操作将其装入
- CPU调度引发缺页中断的进程
- 恢复CPU