使TLB的所有项失效 --- __flush_tlb_all()

# define __flush_tlb_all()              
    
do   {                                
        
if (cpu_has_pge)                
            __flush_tlb_global();       
        
else                            
            __flush_tlb();              
    }
  while  ( 0 )

刷新控制寄存器%%cr3为0, TLB中的所有项将自动失效
#define  __flush_tlb()                           
    
do   {                                    
        unsigned 
int tmpreg;                    
        __asm__ __volatile__(                   
            
"movl %%cr3, %0;               "   
            
"movl %0, %%cr3;  # flush TLB  "   
            : 
"=r" (tmpreg)                     
            :: 
"memory");                       
    }
  while  ( 0 )

插入C代码中的一个汇编语言代码片段可以分成四部分,以":"号加以分隔,其一般形式为:
    指令部分 : 输出部分 : 输入部分 : 损坏部分
  • 在损坏部分常常以"memory"为约束条件,表示操作完成以后内存中的内容已经改变,如果原来某个寄存器的内容来自内存,则现在可能已经不一致了(寄存器中是最新值;内存中是原有值)
  • 表示约束条件的字母很多,主要有:
" m " " v "  和 " o "             表示内存单元
" r "                        表示任何寄存器
" q "                        表示寄存器eax, ebx, ecx, edx之一
" i " " h "                    表示直接操作数
" E " " F "                    表示浮点数
" g "                      表示 " 任意 "
" a " 、  " b " 、  " c " 、  " d "     分别表示要求使用寄存器eax, ebx, ecx或edx
" S " 、  " D "                 分别表示要求使用寄存器esi或edi
" I "                         表示常数( 0 ~ 31
                






 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值