*flush_tlb_all和flush_cache_all刷出整個tlb/告訴快取。
*flush_tlb_mm和flush_cache_mm刷出所所有術語位址空間mm的tlb/快取記憶體項。
*flush_tlb_range和 flush_cache_ragee暑促胡位址範圍vma->vm_mm中虛擬位址start和end之間所有tlb/告訴快取項
*flush_tlb_page和flush_cache_page 刷出虛擬位址賊範圍內所有的tlb/快取記憶體項。
*update_mmu_cache在處理頁失效之後叼哦那個。
核心對資料和指令告訴快取不做區分。如果需要區分,特定於處理器的**可根據vm_area_struct->flags的vm_exec標誌是否設定,來確定告訴快取包含的指令還是資料。
flush_cache_和flush_tlb_函式經常成對出現。
操作的順序是:刷出快取記憶體、操作記憶體、刷出tlb。這個順序很重要,一下有兩個原因
*如果順序反過來,那麼在tlb刷出之後,正確資訊提供之前,多處理器系統中的另乙個cpu可能從程序的頁表取得錯誤的資訊。
*在刷出告訴快取時,某些體系結構需要依賴tlb中的「虛擬->物理」轉換規則。flush_tlb_mm必須在flush_cache_mm之後執行,以確保這一點。有些控制函式明確地應用於資料快取記憶體或指令快取記憶體
*如果快取記憶體包含幾個虛擬位址不同額項指向記憶體中的同一頁,可能會發生所謂的alias問題,flush_dcache_page有助於防止該問題。
*在核心向核心記憶體方位寫入資料,而該資料將在此後作為**執行,則此時需要呼叫flush_icache_range.該場景的乙個標準例項是向核心載入模組時。二進位制資料首先複製到物理記憶體中,然後執行。
*flush_icache_user_range是乙個特殊函式,用於ptrace機制。
在核心進入正常運作之後,記憶體管理分兩個層次處理。夥伴系統負責物理頁幀的管理,而slab分配器則處理小塊記憶體的分配,並提供了使用者層malloc函式組的核心等價物。
夥伴系統圍繞有多頁組成的連續記憶體塊的拆分和在合併展開。
slab分配器在夥伴系統之上實現。他不僅允許分配任意用途的小塊記憶體,還可用對經常使用的資料結構建立特定的快取。
記憶體管理的初始化很有挑戰性,因為該子系統自身使用的資料結構月需要記憶體,必須從某處進行分配。
快取記憶體儲存器 cache
早期計算機層次結構 cpu暫存器 dram主儲存器和磁碟儲存。由於cpu和主存之間差距逐漸增大,便出現了小的sram快取記憶體儲存器於cpu暫存器檔案和主存之間,稱為l1快取記憶體 一級快取 cpu和主存之間效能差距繼續增大,便在l1快取記憶體和主存間出現了更大的快取記憶體,稱為l2快取記憶體。如圖...
儲存器 cpu快取記憶體1
現代儲存器一共包括以下幾種 暫存器直接和cpu進行互動資料的儲存器 速度最快 與cpu1級快取記憶體互動 cpu 1級快取記憶體 直接嵌在cpu內部,每個cpu獨有的 cpu 2級快取記憶體 在cpu外部,也是每個cpu獨有 cpu 3快取記憶體 所有cpu共享的快取 記憶體與快取記憶體互動 通過c...
快取記憶體是啥和快取記憶體的至關重要性
這篇文章我盡量說明快取記憶體的是啥,和快取記憶體至關重要的作用。純愛好,發現錯誤趕快聯絡我 如果單單去觀察乙個helloword和程式是如何在計算機從執行的,就會發現系統花了大量的時間吧資訊從乙個地方載入到另乙個地方,helloword程式最初存放在硬碟上,然後當程式載入時被複製到主存,當cpu執行...