Linux系統的記憶體管理技巧總結

2021-12-22 10:01:58 字數 1123 閱讀 2595

1mem_map[paging_pages]陣列為什麼不直接從主儲存區開始記錄,而從1m開始記錄,然後又把1m到主儲存區之間的內容置為100

3哪些地方需要執行重新整理頁變換緩衝(invalidate()函式實現):

3.1free_page_tables()

3.2copy_page_tables()

3.3un_wp_page()

3.4try_to_share()

改變頁目錄項活頁表項

4寫時複製的相關函式

4.1copy_page_tables():負責把原始和新的頁目錄項和頁表項都設定為唯讀

4.2do_wp_page():頁寫保護處理函式

4.3un_wp_page():判斷頁面是否被共享,若沒有共享,則把頁面設定為可寫,然後退出,若共享,則需要重新申請一新頁面並複製被寫頁面的內容,以供寫程序單獨使用共享被取消

5copy_space(addr)不理解

6在free_page_table()函式中,若addr(實體地址)所在的頁面由n個(n>=2)線性位址共享(copy_page_table函式可以讓乙個物理頁面被多個線性位址共享),那麼在釋放addr所在頁面時,執行mem_map[addr]--(mm/語句後,並不能讓mem_map[addr]的值變為0,而是變為n-1,這並不代表該物理頁面已被釋放,是不是應該改為mem_map[addr]=0(mm/呢?還是我那裡想錯了。

7取線性位址addr所對應頁目錄項的實體地址

dir=(unsignedlong*)((addr>>20)&0xffc)

說明:首先,addr>>22得出對應頁目錄項在頁目錄表中的項號,即表內偏移,因為頁目錄表的起始位址為實體地址0,而每項大小為4byte,所以,實際實體地址為addr>>20,又因為只右移了20位,最後兩位是頁表項的內容,所以和0xffc相與把最後兩位遮蔽掉,得出最終結果

8取線性位址addr所對應頁表項的實體地址

table=((unsignedlong*)(((address>>0)&oxffc)(0xfffff000&*((unsignedlong*)((address>>20&0xffc)))))

即,偏移+基址,參考7

其中有些問題還沒有解決,若發現文中有錯,或提出相關建議,傳送到

(核心源**版本為0.11)

linux記憶體管理精華

核心初始化 核心建立好核心頁目錄頁表資料庫,假設物理記憶體大小為 則建立了這樣的虛位址和實體地址的線性對應關係 核心建立乙個陣列,陣列和物理頁面系列完全是線性對應,用來管理該物理頁面狀態,每個物理頁面的虛位址儲存在中 核心建立好乙個將沒有使用的物理頁面對應的放入其中,已經使用的就不用放入了 核心模組...

windows系統記憶體優化技巧

我們大家都知道記憶體優化的好處是 在將占用物理記憶體的程式移動到虛擬記憶體後,再啟動新程式,程式 系統執行的速度會變得更快,提公升系統工作效率.如何進行記憶體優化的管理,提高記憶體的使用效率,盡可能地提高執行速度,是我們所關心的問題.下面介紹在windows作業系統中,提高記憶體的使用效率和記憶體優...

Linux系統中系統路徑的理解

1 linux檔案系統是從 開始的 在linux作業系統的檔案管理中,命令列模式 在控制台或終端下 的檔案或目錄管理,要涉及路徑這一概念,這是linux命令列操作的最基礎的基礎。如果我們了解了路徑的概念,就可以隨心所欲的進入任何目錄,進行我們想的工作。linux檔案系統,是乙個呈樹形結構,是從 做為...