linux 內(nèi)存地址空間
1、linux 內(nèi)存地址空間 Linux 內(nèi)存管理全貌
2、內(nèi)存地址——用戶態(tài)&內(nèi)核態(tài)
用戶態(tài):Ring3 運(yùn)行于用戶態(tài)的代碼則要受到處理器的諸多
內(nèi)核態(tài):Ring0 在處理器的存儲(chǔ)保護(hù)中,核心態(tài)
用戶態(tài)切換到內(nèi)核態(tài)的 3 種方式:系統(tǒng)調(diào)用、異常、外設(shè)中斷
區(qū)別:每個(gè)進(jìn)程都有完全屬于自己的,獨(dú)立的,不被干擾的內(nèi)存空間;用戶態(tài)的程序就不能隨意操作內(nèi)核地址空間,具有一定的安全保護(hù)作用;內(nèi)核態(tài)線程共享內(nèi)核地址空間;
3、內(nèi)存地址——MMU 地址轉(zhuǎn)換
MMU 是一種硬件電路,它包含兩個(gè)部件,一個(gè)是分段部件,一個(gè)是分頁部件
分段機(jī)制把一個(gè)邏輯地址轉(zhuǎn)換為線性地址
分頁機(jī)制把一個(gè)線性地址轉(zhuǎn)換為物理地址
4、內(nèi)存地址——分段機(jī)制
1) 段選擇符
為了方便快速檢索段選擇符,處理器提供了 6 個(gè)分段寄存器來緩存段選擇符,它們是:cs,ss,ds,es,fs 和 gs
段的基地址(Base Address):在線性地址空間中段的起始地址
段的界限(Limit):在虛擬地址空間中,段內(nèi)可以使用的最大偏移量
2) 分段實(shí)現(xiàn)
邏輯地址的段寄存器中的值提供段描述符,然后從段描述符中得到段基址和段界限,然后加上邏輯地址的偏移量,就得到了線性地址
5、內(nèi)存地址——分頁機(jī)制(32 位)
分頁機(jī)制是在分段機(jī)制之后進(jìn)行的,它進(jìn)一步將線性地址轉(zhuǎn)換為物理地址
10 位頁目錄,10 位頁表項(xiàng), 12 位頁偏移地址
單頁的大小為 4KB
6、用戶態(tài)地址空間
TEXT:代碼段可執(zhí)行代碼、字符串字面值、只讀變量
DATA:數(shù)據(jù)段,映射程序中已經(jīng)初始化的全局變量
BSS 段:存放程序中未初始化的全局變量
HEAP:運(yùn)行時(shí)的堆,在程序運(yùn)行中使用 malloc 申請(qǐng)的內(nèi)存區(qū)域
MMAP:共享庫(kù)及匿名文件的映射區(qū)域
STACK:用戶進(jìn)程棧
7、內(nèi)核態(tài)地址空間
直接映射區(qū):線性空間中從 3G 開始最大 896M 的區(qū)間,為直接內(nèi)存映射區(qū)
動(dòng)態(tài)內(nèi)存映射區(qū):該區(qū)域由內(nèi)核函數(shù) vmalloc 來分配
永久內(nèi)存映射區(qū):該區(qū)域可訪問高端內(nèi)存
固定映射區(qū):該區(qū)域和 4G 的頂端只有 4k 的隔離帶,其每個(gè)地址項(xiàng)都服務(wù)于特定的用途,如:ACPI_BASE 等
8、進(jìn)程內(nèi)存空間
用戶進(jìn)程通常情況只能訪問用戶空間的虛擬地址,不能訪問內(nèi)核空間虛擬地址
內(nèi)核空間是由內(nèi)核負(fù)責(zé)映射,不會(huì)跟著進(jìn)程變化;內(nèi)核空間地址有自己對(duì)應(yīng)的頁表,用戶進(jìn)程各自有不同額頁表
責(zé)編AJX
-
Linux
+關(guān)注
關(guān)注
87文章
11324瀏覽量
209938 -
內(nèi)存
+關(guān)注
關(guān)注
8文章
3040瀏覽量
74167 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6858瀏覽量
123485
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論