1. 每個程序都有自己的頁面目錄,都是虛擬位址,便於mmu將虛擬位址轉換為實體地址;
2. task_struct->mm_struct->pgd
3. struct page用來表示乙個物理頁面,在核心中有乙個page的陣列,用來表示當前系統中所有的物理頁面
4. 頁面目錄 -> 頁面表 -> 物理頁面起始位址
1. 物理頁面管理結構:numa節點 -> 記憶體管理區(zone_struct) -> 物理頁面(page)
2. 記憶體管理區 :zone_dma/zone_normal/zone_highmem -> zone_struct
3. 虛擬頁面管理結構:以程序為基礎。 程序控制塊(task_struct) -> 程序使用者空間(mm_struct) -> 虛存空間(vm_area_struct)
4. 頁面交換技術:swap_info_struct表徵乙個頁面交換區;swap_entry_t
缺頁異常1. i386處理器在產生缺頁異常時,cpu將把失敗的線性位址放在控制暫存器cr2中。
2. 哪些上下文:程序上下文,中斷上下文?
3. 系統每次從中斷和異常處理返回時,都會檢查程序是否有未解決的訊號需要處理
4. 頁面表也是需要物理記憶體進行儲存
頁面交換操作1. 頁面換出:只有使用者空間對映的頁面才有可能會被換出到磁碟上
2. 頁面分配:
3.
記憶體操作1. 使用者態記憶體操作
2. 核心態記憶體操作:kmalloc/vmalloc/alloc_pages
tips1. 不管什麼程序,一旦進入系統空間,即核心空間,都有相同的頁面對映。
3. 中斷和自陷(trap指令)發生時,cpu會將下一條指令,也就是接下來本來應該執行的指令的位址壓入堆疊作為中斷服務的返回位址,當從中斷處理返回時,繼續往下執行(當cpu收到中斷訊號後,會先將當前的指令執行完畢之後,轉而去執行中斷處理程式);但對於異常來講,是因為cpu執行某一條指令導致發生異常,因此本條指令還未執行完畢轉而去執行異常處理程式,當處理完畢後,繼續會嘗試執行引發異常的指令。
4. dma的物理記憶體頁面必須是連續的
系統呼叫1. brk :使用者程序系那個核心申請空間,將使用者程序的動態分配區底部的邊界往上推,分配的是堆疊段。
linux核心記憶體管理
整個linux虛擬記憶體發布如下 3g以上是核心位址,0 3g是程序位址空間。在x86結構中,核心位址分為三種,這三種型別的區域如下 zone dma 記憶體開始的16mb zone normal 16mb 896mb zone highmem 896mb 結束 程序位址空間的3g,通過mmu,隨機...
Linux核心 記憶體管理
在棧上靜態分配 高階記憶體的對映 分配函式的選擇 1.32位體系結構支援4kb的頁,如果1gb的物理記憶體,物理記憶體被劃分為262144個頁 2.系統中每乙個物理頁都有乙個struct page結構體 linux核心主要使用四種區 zone highem叫做高階記憶體,其餘的叫做低端記憶體 記憶體...
Linux核心記憶體
核心空間占用4g虛擬記憶體的後1g 明確 不論在核心空間還是使用者空間,看到的位址都是虛擬位址,只是虛擬位址空間不一樣 但是cpu最終訪問的位址是虛擬位址對應的實體地址 虛擬位址轉換成對應的實體地址需要mmu 將來mmu利用頁表進行位址轉換 引申 uclinux支援不帶mmu的處理器 問 使用者空間...