使TLB的所有項失效 — __flush_tlb_all()

來源:互聯網
上載者:User
# 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) 

                

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.