Linux內核內存

1.linux內核內存相關內容

明確:用戶空間佔用4G虛擬內存的前3G
虛擬地址範圍:0x00000000 ~ 0xBFFFFFFF
內核空間佔用4G虛擬內存的後1G
虛擬地址範圍:0xC0000000 ~ 0xFFFFFFFF

明確:
不論在內核空間還是用戶空間,看到的地址都是虛擬地址,只是虛擬地址空間不一樣;
但是CPU最終訪問的地址是虛擬地址對應的物理地址;虛擬地址轉換成對應的物理地址需要MMU;
將來MMU利用頁表進行地址轉換;

引申:uclinux支持不帶MMU的處理器;

問:用戶空間的虛擬內存和物理內存的映射關係?
問:內核空間的虛擬內存和物理內存的映射關係?



答:
4.概念:
IO空間:
內存空間:
對於X86架構,有兩類總線:
一類總線的位寬爲16位,地址空間的大小爲64K,如果外設連接到這類總線,
CPU訪問外設只能通過in,out兩條指令;對於這個地址空間又稱IO空間;

另一類總線的位寬爲32位,地址空間的大小爲4G(物理地址),如果外設連接到這類總線,
CPU訪問外設通過地址指針的形式,對於這個地址空間又稱內存空間,例如:
*(volatile unsigned long *)0xE0200080 = 0x11000;
對於ARM架構:
無IO空間,有內存空間

切記:將來CPU(ARM)訪問某個外設,必須要弄清楚這個外設的地址,
將來軟件上以地址指針的形式訪問這個外設即可;
這個地址可以通過芯片手冊和原理圖來獲取

5.用戶虛擬內存和物理內存的映射:
採用動態內存映射,需要訪問了,動態建立用戶虛擬地址和物理地址的映射關係,
訪問完畢,要解除用戶虛擬地址和物理地址的映射關係;
這種動態內存映射造成內存的訪問效率不高;
用戶最大能夠訪問3G物理內存;

6.內核虛擬內存和物理內存的映射:
採用靜態內存映射,在內核啓動的時候,就已經將內核1G的虛擬內存和物理內存做一一的映射關係,
這種映射對內存的訪問效率較高,一一映射:
內核虛擬地址 物理內存物理地址
0xC0000000 0x0
0xC0000001 0x1
0xC0000002 0x2
0xC0000003 0x3
... ...
如果採用以上一一映射,最終導致內核只能訪問1G的物理內存;


2.內核1G虛擬內存的劃分

劃分的本質目的:最終的目的是既可以保證內存的訪問效率,有可以讓內核訪問所有的物理內存;

X86平臺,內核1G虛擬內存的劃分:
直接內存映射區:
特點:
1.直接內存映射區對應的內核虛擬內存,在內核啓動的時候,就已經跟物理內存進行一一映射;這塊內存的訪問效率要高;
2.如果物理內存大於1G,此時直接內存映射區的大小爲896M,如果物理內存小於1G(512M),那麼直接內存映射區的大小就是物理內存的大小;
3.直接內存映射區又稱低端內存;

動態內存映射區:
特點:
1.如果要訪問某塊物理內存或者某個物理地址,
可以將這個物理內存或者物理地址動態映射到動態內存映射區的虛擬內存上或者虛擬地址上;
這種內存的訪問效率要低,如果不再使用,記得要解除地址映射;
2.默認大小爲120M

永久內存映射區:
固定內存映射區:
特點:
1.永久是固定,固定就是永久
2.如果頻繁訪問某個物理內存或者物理地址,
可以將這個物理地址或者物理內存映射到永久內存映射區或者固定內存映射區,
無需頻繁建立映射和解除映射,加快內存的訪問效率;

注意:前者在映射的時候會導致休眠,不能用於中斷上下文
後者可以用於中斷上下文中;

3.各自大小爲4M

注意:動態 + 永久 + 固定 = 高端內存

 ARM架構
S5PV210處理器,內核1G虛擬內存的劃分:
1.啓動開發板
2.查看內核打印信息,找到如下信息:
Virtual kernel memory layout:
起始地址 結束地址 大小
異常向量表
vector : 0xffff0000 - 0xffff1000 ( 4 kB)

固定內存映射區
fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB)

DMA內存映射區:
DMA : 0xff000000 - 0xffe00000 ( 14 MB)

動態內存映射區:
vmalloc : 0xf4800000 - 0xfc000000 ( 120 MB)

直接內存映射區
lowmem : 0xc0000000 - 0xf4000000 ( 832 MB)

modules : 0xbf000000 - 0xc0000000 ( 16 MB)
.init : 0xc0008000 - 0xc0037000 ( 188 kB)
.text : 0xc0037000 - 0xc0838000 (8196 kB)
.data : 0xc0838000 - 0xc088c900 ( 339 kB)   















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章