linux記憶體管理

2021-09-25 10:06:46 字數 644 閱讀 8212

參考:

dma區:即直接記憶體訪問分割槽,通常為物理記憶體的起始16m。主要是供一些外設使用,外設和記憶體直接訪問資料訪問,而無需系統cpu的參與。

normal記憶體區:從16m到896m記憶體區。

highmemory記憶體區:896m以後的記憶體區。

為什麼高階記憶體的邊界是896m?

這是因為,32位linux虛擬記憶體空間為0-4g,其中0-3g用於使用者態,3g-4g用於核心態。這意味著核心只有1g的虛擬位址空間,如果物理記憶體超過1g,核心就無法映**。linux採取的策略是,核心位址空間的前896m採用固定對映,對映方法是:虛擬位址-3g = 實體地址,只能對映到實體地址的前896m。也就是說核心虛擬位址空間的3g到3g+896m這部分,頁表的對映是固定的,系統初始化時就建立起來。而虛擬位址空間的最後128m,也就是3g+896m到4g部分採用動態對映,也就是說頁表對映的實體地址可變的。在系統執行過程中,通過更新頁表,就可以對映到不同的實體地址,當然也包括高階物理記憶體。

這主要解決了兩個問題:第一,這可以使核心位址空間對映到高階物理記憶體;第二,虛擬位址空間的3g+896m到4g部分,連續的虛擬位址空間可以對映到非連續的物理記憶體,只要通過更新頁表就可以做到,這和使用者態的虛擬記憶體對映採用了同樣這種方法。這在沒有大段連續的空閒實體地址時,是非常重要的。

Linux記憶體管理

本文首先介紹一下linux記憶體管理方式,著重說明一下使用者空間的記憶體管理,包括linux虛擬對映以及glibc中malloc的實現 然後簡要介紹單程序多執行緒的記憶體管理方式,主要涉及各執行緒堆疊空間的分配 linux 採用兩級保護機制,隔離核心空間和使用者程式空間,使使用者程式無法直接訪問核心...

Linux記憶體管理

本文首先介紹一下linux記憶體管理方式,著重說明一下使用者空間的記憶體管理,包括linux虛擬對映以及glibc中malloc的實現 然後簡要介紹單程序多執行緒的記憶體管理方式,主要涉及各執行緒堆疊空間的分配 linux採用兩級保護機制,隔離核心空間和使用者程式空間,使使用者程式無法直接訪問核心,...

Linux記憶體管理

首先我要說,我這是轉貼,轉的cu論壇上 nonameboy 的帖子,你可以連線過去看看。今天因為要解釋系統中可用記憶體的大小,用google看了半天,還有在cu上找了關天,竞然沒有發現有比較好的章,估計很多人都沒有注意到,懂了以後又沒有整理出來。在cu上看了很多文章說什麼memory leak和li...