invlpg 指令简单介绍

invlpg 指令简单介绍


                  

void
tlb_invalidate(pde_t *pgdir, void *va)
{
	// Flush the entry only if we're modifying the current address space.
	// For now, there is only one address space, so always invalidate.
	invlpg(va);
}
遇到这样一段code...然后invlpg是个什么东东

这是个C的嵌入汇编



内嵌汇编语法例如以下:

__asm__(
汇编语句模板:
输出部分:
输入部分:
破坏描写叙述部分);
即格式为 asm ( "statements" : output_regs : input_regs : clobbered_regs);


共四个部分:汇编语句模板,输出部分,输入部分,破坏描写叙述部分,各部分使用“:”格开,汇编语句模板不可缺少,其它三部分可选,假设使用了后面的部分,而前面部分为空,
也须要用“:”格开,对应部分内容为空。



这段嵌入式汇编是没有输出的.把addr读入到寄存器中去(这里r指定随意经常使用寄存器),%0则指向addr所在的寄存器



处理器使用TLBTranslation Lookaside Buffer)来缓存线性地址到物理地址的映射关系。

实际的地址转换过程中,处理器首先依据线性地址查找TLB,假设未发现该线性地址到物理地址的映射关系(TLB miss)。将依据页表中的映射关系填充TLBTLB fill),然后再进行地址转换。




tlb_invalidate(pde_t *pgdir, void *va)
这里函数的目的就是取消va相应物理页之间的关联。相当于刷新TLB。每次我们调整虚拟页和物理页之间的映射关系的时候,我们都要刷新TLB。调用这个函数或invlpg汇编指令

程序的凝视也讲了

// Flush the entry only if we're modifying the current address space.
// For now, there is only one address space, so always invalidate.








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值