linux 0 11 記憶體位址空間概念

2021-09-30 03:28:23 字數 1478 閱讀 3902

linux 0.11 核心中,在進行位址對映操作時,我們需要首先分清3 種位址以及它們之間的變換概念:

a. 程式(程序)的虛擬和邏輯位址;b. cpu 的線性位址;c. 實際物理記憶體位址。

虛擬位址(virtual address)是指由程式產生的由段選擇符和段內偏移位址兩個部分組成的位址。

因為這兩部分組成的位址並沒有直接用來訪問物理記憶體,而是需要通過分段位址變換機制處理或對映後才

0 640k 1m

核心模組 高速緩衝區

虛擬盤主記憶體區

視訊記憶體和bios rom

對應到物理記憶體位址上,因此這種位址被稱為虛擬位址。虛擬位址空間由gdt 對映的全域性位址空間和由ldt

對映的區域性位址空間組成。選擇符的索引部分由13 個位元位表示,加上區分gdt 和ldt 的1 個位元位,

因此intel 80x86 cpu 共可以索引16384 個選擇符。若每個段的長度都取最大值4g,則最大虛擬位址空間

範圍是16384 * 4g = 64t。

邏輯位址(logical address)是指由程式產生的與段相關的偏移位址部分。在intel 保護模式下即

是指程式執行**段限長內的偏移位址(假定**段、資料段完全一樣)。應用程式設計師僅需與邏輯位址打

交道,而分段和分頁機制對他來說是完全透明的,僅由系統程式設計人員涉及。

線性位址(linear address)是邏輯位址到物理位址變換之間的中間層,是處理器可定址的記憶體空間

(稱為線性位址空間)中的位址。程式**會產生邏輯位址,或者說是段中的偏移位址,加上相應段的基

位址就生成了乙個線性位址。如果啟用了分頁機制,那麼線性位址可以再經變換以產生乙個實體地址。若

沒有啟用分頁機制,那麼線性位址直接就是實體地址。intel 80386 的線性位址空間容量為4g。

實體地址(physical address)是指出現在cpu 外部位址匯流排上的定址物理記憶體的位址訊號,是位址

變換的最終結果位址。如果啟用了分頁機制,那麼線性位址會使用頁目錄和頁表中的項變換成實體地址。

如果沒有啟用分頁機制,那麼線性位址就直接成為實體地址了。

虛擬記憶體(virtual memory)是指計算機呈現出要比實際擁有的記憶體大得多的記憶體量。因此它允許程

序員編制並執行比實際系統擁有的記憶體大得多的程式。這使得許多大型專案也能夠在具有有限記憶體資源的

系統上實現。乙個很恰當的比喻是:你不需要很長的軌道就可以讓一列火車從上海開到北京。你只需要足

夠長的鐵軌(比如說3 公里)就可以完成這個任務。採取的方法是把後面的鐵軌立刻鋪到火車的前面,只

要你的操作足夠快並能滿足要求,列車就能象在一條完整的軌道上執行。這也就是虛擬記憶體管理需要完成

的任務。在linux 0.11 核心中,給每個程式(程序)都劃分了總容量為64mb 的虛擬記憶體空間。因此程式

的邏輯位址範圍是0x0000000 到0x4000000。

有時我們也把邏輯位址稱為虛擬位址。因為與虛擬記憶體空間的概念類似,邏輯位址也是與實際物理內

存容量無關的。

linux0 11 記憶體結構

linux0.11,記憶體最多支援16m,其中0 1m是核心區,核心模組大約為520k,即end位址,即實際核心使用是從0 到end,之後到640k是高速緩衝區,從640k開始的區域,分別是視訊記憶體,bios區域,高速緩衝區,高速緩衝區之後是是主記憶體區域。在記憶體核心區域當中,從0開始,首先存放...

linux0 11之記憶體管理

其實我覺得作業系統的記憶體管理很神秘,且不說在寫應用程式時呼叫的malloc,在寫linux驅動時get free page,get free pages,kmalloc,就相當頭疼。看完linux0.11之後小有感觸,就此記下。先說核心使用的get free page吧,其實get free pa...

記憶體位址和記憶體空間

在操作暫存器時,遇到概念上的理解問題。混淆了記憶體位址與記憶體空間 首先,讀懂指令 ldr r0,0x11000c40 0x11000c40是暫存器gpx2con的位址,將這個位址寫入r0暫存器的空間 ldr r1,r0 將r0空間的位址所指向的4位元組資料,讀入r1的記憶體空間,即r1儲存了0x1...