歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> 十一步讓你理解Linux的內存映射

十一步讓你理解Linux的內存映射

日期:2017/2/28 16:20:07   编辑:Linux教程

零:32位操作系統只有4G的虛擬地址空間,Linux將最上的1G用於內核虛擬地址。

一:Linux將物理內存完全一一映射到內核空間,這樣很方便管理內存,任何頁面的虛擬地址減去一個0xc0000000的偏移就可以得到物理地址。

二:內核還需要動態管理一些內存用於vmalloc或者設備臨時映射等,因此不能將1G的虛擬空間完全一一映射物理內存,因此權衡了一個896M的大小,0xc0000000到0xc0000000+896M的虛擬地址空間一一映射物理內存,從0xc0000000+896M到0xffffffff的地址空間作為動態映射的需要。

三:因此早期的Linux內核為了簡單起見認為只有一種方式管理物理內存,那就是一一映射,因此大於896M的物理內存將不可用。然而...

四:雖然內核無法直接一一映射896M以上的物理內存,然而內核可以動態映射它們到vmalloc空間,另外也可以將這些大於896M的內存頁面分配給用戶態,然後將之映射到用戶進程地址空間的0xc0000000以下。

五:增加了high-memory的概念,使得Linux可以使用896之上的物理內存。所有大於896M的物理內存成為高端內存。

六:增加了high-memory支持的內核可以使用4G的物理內存

七:大於4G的物理內存還是無法使用,因為cpu的地址總線只有32位,地址總線直接作用於物理內存。

八:intel的機器增加了PAE,地址總線可以增加到36位,可以尋址64G。

九:然而必須編譯帶有HIGHMEM64G的內核。

十:直接換64位機器和操作系統吧。

Copyright © Linux教程網 All Rights Reserved