版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/winter_wu_1998/article/details/84952897
- 虚拟存储器(VM)
- 主存也可以成为磁盘的cache,这项技术叫做虚拟存储器
- 每个程序有自己独立的内存空间
- 主存只要存放程序中活跃的那一部分即可,这也是局部性原理
- VM和cache的原理是一样的,不过VM中块被叫做页
- 采用全相联的方式组织
- 降低了缺失率
- 可以使用复杂的替换机制优化
- 由于使用了页表,不需要进行查找
- 和直接映射组织法很像,主要区别是多了一个额外的页表,同时可以在任意位置替换,而不是一一对应
- 构造动机
- 允许在多个程序之间同时安全地共享存储器
- 消除有限的主存容量对程序设计的限制
- 虚拟地址
- 虚拟地址可以比物理地址长
- 虚拟地址由处理器产生,再由页表转换成物理地址(即主存中的地址)
- 连续的虚拟地址可以被映射到不连续的物理地址
- 这种重定位允许我们将程序加载到主存的任意位置
- 多个虚拟地址可以映射到同一个物理地址
- 这使得不同的程序可以共享一部分代码
- 虚拟地址分割为虚拟页号和页内偏移
- 物理页和虚拟页一样大
- 虚拟页号转换为物理页号,偏移不变
-
页表
-
存放在主存中
-
以虚拟页号为索引,存放物理页号
-
每个程序都有私有的页表
- 每个程序都有一个页表寄存器指向相对的页表开头
- 只保存寄存器,并不保存整个页表
-
更新页表由操作系统负责
-
页表不需要tag,因为包含了每个可能的虚拟页的映射
-
减少页表大小
- 使用多级页表,未被使用的虚拟内存段在第二级即以上不分配页表项
- 将未使用的页表放入磁盘中
-
-
缺页
- 操作系统在创建一个进程(程序)的时候会在磁盘上单独分配一部分空间来储存物理页
- 这个区域被称作交换区
- 同时会创建一个数据结构(新页表)来储蓄物理页到磁盘页的映射,这个结构可能是页表的一部分,也可能单独存放在主存上
- 缺页后被换出的物理页被写入交换区
- 由于写的时间很长,因此最好采用回写法
- 由于对于磁盘访问时间传输数据的时间要少很多,因此把整个页通过写回法放入磁盘中更好
- 操作系统在创建一个进程(程序)的时候会在磁盘上单独分配一部分空间来储存物理页
-
快表(TLB)
- 由于页表储存在主存中,每次访问虚拟地址需要访问两次主存
- 第一次获得物理地址
- 第二次获得数据
- 对于页项的使用也具有局部性
- 通过一个特殊的cache(TLB)存储最近使用过的页表项
- 全相联组织
- 由于页表储存在主存中,每次访问虚拟地址需要访问两次主存
-
结合主存的cache和页表的cache(TLB)
- cache采用物理地址
- 先要访问TLB再访问cache,如下1图
- cache采用虚拟地址
- 直接通过虚拟地址访问cache,当cache缺失时转成物理地址,如下2图
- 问题是可能不同程序将不同的虚拟地址映射到同一个物理地址,于是同一个物理地址中的数据可能存在于cache中不同的位置,两个程序不知道相互间的数据变化
- 如果页表发生缺页,那么cache不可能命中.如下3图
- cache采用物理地址
- 虚拟存储器中的保护
- 用户进程不能更改自己的页表,操作系统负责修改页表。
- 页表放在保护地址空间
- 当从进程A切换到进程B时,不仅需要切换页表寄存器指向,还要清空TLB中属于A的表项
- 或者可以通过增加一个进程标识符来避免清空