核心初始化:
核心建立好核心頁目錄頁表資料庫,假設物理記憶體大小為 ,則建立了這樣的虛位址和實體地址的線性對應關係;
核心建立乙個陣列, 陣列和物理頁面系列完全是線性對應, 用來管理該物理頁面狀態,每個物理頁面的虛位址儲存在中;
核心建立好乙個將沒有使用的物理頁面對應的放入其中,已經使用的就不用放入了;
核心模組申請記憶體
記憶體管理模組從找到乙個 ,將作為返回值,該返回值就是對應物理頁面的虛位址;
將從中脫離;
模組使用該虛擬位址操作對應的物理記憶體;
核心模組使用 ,例如執行指令
獲得這個虛位址,利用建立好的頁目錄頁表資料庫,找到其對應的物理記憶體位址;
將的內容寫入對應的物理記憶體位址內;
核心模組釋放記憶體
依據找到對應的 ;
將該加入到中;
使用者程序申請記憶體
記憶體管理模組從使用者程序記憶體空間中找到一塊還沒使用的空間
隨後將其插入到鍊錶中;
使用者程序寫入例如執行指令
獲得這個虛位址,該虛位址應該已經由庫設定好了,一定在一下的某個區域,根據暫存器指向的查當前程序的頁目錄頁表資料庫,發現該對應的頁目錄表項為 ,故產生異常;
在異常處理中,發現該對應的已經存在,為對應的頁目錄表項分配乙個頁表;
隨後從找到乙個 ,將該對應的物理頁面物理首位址賦給對應的頁表表項,很明顯,此時的和不是線性對應關係了;
將從中脫離;
異常處理返回;
重新執行剛剛發生異常的指令
獲得這個虛位址,根據暫存器指向的利用建立好的頁目錄頁表資料庫,找到其對應的物理記憶體位址;
將的內容寫入對應的物理記憶體位址內;
使用者程序釋放記憶體
找到該所在的
找到對應的所有頁目錄頁表項,清空對應的所有頁表項;
釋放這些頁表項指向物理頁面所對應的 ,並將這些加入到佇列中;
有必要還會清空一些頁目錄表項,並釋放這些頁目錄表項指向的頁表;
從鏈中刪除該並釋放掉;
綜合說明:
可用物理記憶體就是中各對應的物理記憶體;
頁目錄頁表資料庫的主要目的是為訪問物理記憶體時轉換使用,分配以及釋放記憶體時不會用到,但是需要核心記憶體管理系統在合適時機為建立好該庫;
對於使用者程序在中獲得的物理頁面,有兩個頁表項對應,乙個就是核心頁目錄頁表資料庫的某個 ,乙個就是當前程序核心頁目錄頁表資料庫的某個 ,但是只有乙個和其對應。如果此時排程到其他程序,其他程序申請並訪問某個記憶體,則不會涉及到該物理頁面,因為其分配時首先要從中找乙個 ,而該物理頁面對應的已經從中脫離出來了,因此不存在該物理頁面被其他程序改寫操作的情況。核心中通過等方式獲取記憶體時,也不會涉及到該物理頁面,原理同前所述。
Linux系統的記憶體管理技巧總結
1mem map paging pages 陣列為什麼不直接從主儲存區開始記錄,而從1m開始記錄,然後又把1m到主儲存區之間的內容置為100 3哪些地方需要執行重新整理頁變換緩衝 invalidate 函式實現 3.1free page tables 3.2copy page tables 3.3u...
012核心的記憶體管理
記憶體的。10月的最後一天,核心也應該告一段落了,接下來的是 接下來要對這次的核心 檢視進行總結。這次檢視 是從10月20日開始的。直接跳過了boot和setup。從main函式開始。這次檢視的主線是0.12linux核心的記憶體管理,也就是核心是如何使用記憶體的。以下的順序就是按照記憶體的使用順序...
記憶體管理練習帶答案
1 採用 b 不會產生內部碎片。a.分頁儲存管理b.分段儲存管理 c.固定分割槽儲存管理d.段頁式儲存管理 2 首次適應演算法的空白區是 a a.按位址由小到大排列 b.按位址由大到小排列 c.按大小遞減順序連在一起 d.按大小遞增順序連在一起 3 在分割槽儲存管理中的拼接技術可以 a a.集中空閒...