虚拟存储器之地址翻译
来源:互联网 发布:linux 浏览网页 编辑:程序博客网 时间:2024/06/04 19:22
从形式上来说,地址翻译是一个N元素的虚拟地址空间(VAS)中的元素和一个M元素的物理地址空间(PAS),下图展示了MMU如何利用页表来实现这样的映射,CPU中的一个控制寄存器,页表基址寄存器指向当前页表,n位的虚拟地址包含两部分;一个p位的虚拟页面偏移和一个(n-p)位的虚拟页号.MMU利用虚拟地址(VPN)来选择适当的PTE,将页表条目中物理页号和虚拟地址中VPO串联起来,就得到了相应的物理地址,注意,因为物理页面和虚拟页面都是p字节的, 所以物理页面偏移和(VPO)是一样的.
当页面命中时.CPU硬件的执行步骤:
第一步:处理器生成了一个虚拟地址,并把它传给MMU.
第二步:MMU生成PET地址,并从高速缓存/主存中得到它.
第三步:高速缓存/主存向MMU返回PTE.
第四步:MMU构造物理地址,并把它传送高速缓存/主存.
第五步:高速缓存/主存返回所请求的数据字给处理器.
页面命中完全是由硬件来处理的,与之不同的是,处理缺页要求硬件和操作系统内核协同来完成,
第一到第三如上;
第四:PTE中的有效位为0,所以MMU触发了一次异常,传递cpu中的控制到操作系统内核中的缺页异常处理程序.
第五步:缺页处理程序确定出物理存储器中的牺牲页,如果这个页面已经被修改了,则把它换出到磁盘.
第六步:缺页处理程序页面调入新的页面,并更新存储器中的PTE.
第七步:缺页处理程序返回到原来的进程,再次执行导致缺页的指令,CPU将引起缺页的虚拟地址重新发送给MMU,因为虚拟页面现在缓存在物理存储器中,所以会命中.
上面我们提到如果缺页,缺页异常处理程序将确定一个牺牲页,那么这个牺牲页是怎样确定的呢?
当MMU 翻译每一个虚拟地址时,他还会更新另外两个内核缺页处理程序会用到的位,每次访问一个页时,MMU都会设置A位,称为引用位,内核可以用这个引用位来实现它的页替换算法,每次对一个页进行写了之后,MMU都会设置D位,又称脏位,脏位告诉内核在拷贝替换页之前是否必须写回牺牲页,内核可以通过调用一条特殊的内核模式指令来清除引用位或脏位.
- 虚拟存储器之地址翻译
- 虚拟存储器(一)——虚拟存储器及地址翻译
- 虚拟存储器之存储器映射
- 操作系统之虚拟存储器
- 内存之虚拟存储器
- 操作系统之虚拟存储器
- 虚拟存储器(2)——端到端地址翻译与多级页表
- 虚拟存储器--虚拟地址与物理地址
- 虚拟存储器--虚拟地址与物理地址
- 虚拟存储器--虚拟地址与物理地址
- 虚拟存储器--虚拟地址与物理地址
- 虚拟存储器--虚拟地址与物理地址
- 虚拟存储器--挖掘之七
- 虚拟存储器(1)——虚存概念及页、页表和地址翻译基础
- 内存管理单元MMU, 虚拟存储器,虚拟地址 --> 物理地址
- 逻辑地址、线性地址、物理地址以及虚拟存储器
- 地址翻译:从虚拟地址到物理地址
- 存储器2虚拟存储器
- KMP算法
- 优化延迟
- Android初始化本地数据库
- 开启reuse_port让Tengine性能提升3倍
- 虚拟内存之TLB加速地址翻译
- 虚拟存储器之地址翻译
- 秒杀系统架构分析与实战
- TCP的三次握手和四次撒手
- java 多线程实现生产者消费者模型
- STM32_SPI_笔记
- iOS学习 UITableViewCell 三种定制方法
- 虚拟存储器作为存储管理工具
- Nginx + CGI/FastCGI + C/Cpp
- FTP服务器的安装,配置,虚拟用户的创建