虚拟存储器之地址翻译

本文详细阐述了MMU如何利用页表实现虚拟地址与物理地址之间的映射过程,包括CPU生成虚拟地址、MMU查找页表条目、构造物理地址以及页面命中或缺页处理的硬件执行步骤。页面命中由硬件直接处理,而缺页则需硬件与操作系统内核协同解决。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从形式上来说,地址翻译是一个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位,又称脏位,脏位告诉内核在拷贝替换页之前是否必须写回牺牲页,内核可以通过调用一条特殊的内核模式指令来清除引用位或脏位.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值