物理地址邏輯地址虛擬地址的概念

物理地址邏輯地址虛擬地址的概念

ID:13891679

大小:177.00 KB

頁數(shù):8頁

時間:2018-07-24

物理地址邏輯地址虛擬地址的概念_第1頁
物理地址邏輯地址虛擬地址的概念_第2頁
物理地址邏輯地址虛擬地址的概念_第3頁
物理地址邏輯地址虛擬地址的概念_第4頁
物理地址邏輯地址虛擬地址的概念_第5頁
資源描述:

《物理地址邏輯地址虛擬地址的概念》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。

1、一、概念物理地址(physicaladdress)用于內(nèi)存芯片級的單元尋址,與處理器和CPU連接的地址總線相對應(yīng)?!@個概念應(yīng)該是這幾個概念中最好理解的一個,但是值得一提的是,雖然可以直接把物理地址理解成插在機器上那根內(nèi)存本身,把內(nèi)存看成一個從0字節(jié)一直到最大空量逐字節(jié)的編號的大數(shù)組,然后把這個數(shù)組叫做物理地址,但是事實上,這只是一個硬件提供給軟件的抽像,內(nèi)存的尋址方式并不是這樣。所以,說它是“與地址總線相對應(yīng)”,是更貼切一些,不過拋開對物理內(nèi)存尋址方式的考慮,直接把物理地址與物理的內(nèi)存一一對應(yīng),也是可以接受的

2、。也許錯誤的理解更利于形而上的抽像。虛擬內(nèi)存(virtualmemory)這是對整個內(nèi)存(不要與機器上插那條對上號)的抽像描述。它是相對于物理內(nèi)存來講的,可以直接理解成“不直實的”,“假的”內(nèi)存,例如,一個0x08000000內(nèi)存地址,它并不對就物理地址上那個大數(shù)組中0x08000000-1那個地址元素;之所以是這樣,是因為現(xiàn)代操作系統(tǒng)都提供了一種內(nèi)存管理的抽像,即虛擬內(nèi)存(virtualmemory)。進程使用虛擬內(nèi)存中的地址,由操作系統(tǒng)協(xié)助相關(guān)硬件,把它“轉(zhuǎn)換”成真正的物理地址。這個“轉(zhuǎn)換”,是所有問題討論的

3、關(guān)鍵。有了這樣的抽像,一個程序,就可以使用比真實物理地址大得多的地址空間。(拆東墻,補西墻,銀行也是這樣子做的),甚至多個進程可以使用相同的地址。不奇怪,因為轉(zhuǎn)換后的物理地址并非相同的。——可以把連接后的程序反編譯看一下,發(fā)現(xiàn)連接器已經(jīng)為程序分配了一個地址,例如,要調(diào)用某個函數(shù)A,代碼不是callA,而是call0x0811111111,也就是說,函數(shù)A的地址已經(jīng)被定下來了。沒有這樣的“轉(zhuǎn)換”,沒有虛擬地址的概念,這樣做是根本行不通的。打住了,這個問題再說下去,就收不住了。邏輯地址(logicaladdress)

4、Intel為了兼容,將遠古時代的段式內(nèi)存管理方式保留了下來。邏輯地址指的是機器語言指令中,用來指定一個操作數(shù)或者是一條指令的地址。以上例,我們說的連接器為A分配的0x08111111這個地址就是邏輯地址?!贿^不好意思,這樣說,好像又違背了Intel中段式管理中,對邏輯地址要求,“一個邏輯地址,是由一個段標識符加上一個指定段內(nèi)相對地址的偏移量,表示為[段標識符:段內(nèi)偏移量],也就是說,上例中那個0x08111111,應(yīng)該表示為[A的代碼段標識符:0x08111111],這樣,才完整一些”線性地址(lineara

5、ddress)或也叫虛擬地址(virtualaddress)跟邏輯地址類似,它也是一個不真實的地址,如果邏輯地址是對應(yīng)的硬件平臺段式管理轉(zhuǎn)換前地址的話,那么線性地址則對應(yīng)了硬件頁式內(nèi)存的轉(zhuǎn)換前地址。-------------------------------------------------------------CPU將一個虛擬內(nèi)存空間中的地址轉(zhuǎn)換為物理地址,需要進行兩步:首先將給定一個邏輯地址(其實是段內(nèi)偏移量,這個一定要理解?。。。?,CPU要利用其段式內(nèi)存管理單元,先將為個邏輯地址轉(zhuǎn)換成一個線程地址,再

6、利用其頁式內(nèi)存管理單元,轉(zhuǎn)換為最終物理地址。這樣做兩次轉(zhuǎn)換,的確是非常麻煩而且沒有必要的,因為直接可以把線性地址抽像給進程。之所以這樣冗余,Intel完全是為了兼容而已。2、CPU段式內(nèi)存管理,邏輯地址如何轉(zhuǎn)換為線性地址一個邏輯地址由兩部份組成,段標識符:段內(nèi)偏移量。段標識符是由一個16位長的字段組成,稱為段選擇符。其中前13位是一個索引號。后面3位包含一些硬件細節(jié),如圖:最后兩位涉及權(quán)限檢查,本貼中不包含。索引號,或者直接理解成數(shù)組下標——那它總要對應(yīng)一個數(shù)組吧,它又是什么東東的索引呢?這個東東就是“段描述符(

7、segmentdescriptor)”,呵呵,段描述符具體地址描述了一個段(對于“段”這個字眼的理解,我是把它想像成,拿了一把刀,把虛擬內(nèi)存,砍成若干的截——段)。這樣,很多個段描述符,就組了一個數(shù)組,叫“段描述符表”,這樣,可以通過段標識符的前13位,直接在段描述符表中找到一個具體的段描述符,這個描述符就描述了一個段,我剛才對段的抽像不太準確,因為看看描述符里面究竟有什么東東——也就是它究竟是如何描述的,就理解段究竟有什么東東了,每一個段描述符由8個字節(jié)組成,如下圖:這些東東很復(fù)雜,雖然可以利用一個數(shù)據(jù)結(jié)構(gòu)來定

8、義它,不過,我這里只關(guān)心一樣,就是Base字段,它描述了一個段的開始位置的線性地址。Intel設(shè)計的本意是,一些全局的段描述符,就放在“全局段描述符表(GDT)”中,一些局部的,例如每個進程自己的,就放在所謂的“局部段描述符表(LDT)”中。那究竟什么時候該用GDT,什么時候該用LDT呢?這是由段選擇符中的T1字段表示的,=0,表示用GDT,=1表示用LDT。GDT在內(nèi)存

當前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負責整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細閱讀文檔內(nèi)容,確認文檔內(nèi)容符合您的需求后進行下載,若出現(xiàn)內(nèi)容與標題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。