線性地址物理地址
器語(yǔ)言指令中出現(xiàn)的內(nèi)存地址,都是邏輯地址,需要轉(zhuǎn)換成線性地址,再經(jīng)過(guò)MMU(CPU中的內(nèi)存管理單元)轉(zhuǎn)換成物理地址才能夠被訪問(wèn)到。那么線性地址物理地址是什么呢?今天學(xué)習(xí)啦小編整理了線性地址物理地址的相關(guān)資料,希望對(duì)大家有幫助。
線性地址物理地址
邏輯地址(Logical Address) 是指由程式產(chǎn)生的和段相關(guān)的偏移地址部分。例如,你在進(jìn)行C語(yǔ)言指針編程中,能讀取指針變量本身值(&操作),實(shí)際上這個(gè)值就是邏輯地址,他是相對(duì)于你當(dāng)前進(jìn)程數(shù)據(jù)段的地址,不和絕對(duì)物理地址相干。只有在Intel實(shí)模式下,邏輯地址才和物理地址相等(因?yàn)閷?shí)模式?jīng)]有分段或分頁(yè)機(jī)制,Cpu不進(jìn)行自動(dòng)地址轉(zhuǎn)換);邏輯也就是在Intel保護(hù)模式下程式執(zhí)行代碼段限長(zhǎng)內(nèi)的偏移地址(假定代碼段、數(shù)據(jù)段如果完全相同)。應(yīng)用程式員僅需和邏輯地址打交道,而分段和分頁(yè)機(jī)制對(duì)你來(lái)說(shuō)是完全透明的,僅由系統(tǒng)編程人員涉及。應(yīng)用程式員雖然自己能直接操作內(nèi)存,那也只能在操作系統(tǒng)給你分配的內(nèi)存段操作。
線性地址(Linear Address) 是邏輯地址到物理地址變換之間的中間層。程式代碼會(huì)產(chǎn)生邏輯地址,或說(shuō)是段中的偏移地址,加上相應(yīng)段的基地址就生成了一個(gè)線性地址。如果啟用了分頁(yè)機(jī)制,那么線性地址能再經(jīng)變換以產(chǎn)生一個(gè)物理地址。若沒(méi)有啟用分頁(yè)機(jī)制,那么線性地址直接就是物理地址。Intel 80386的線性地址空間容量為4G(2的32次方即32根地址總線尋址)。
物理地址(Physical Address) 是指出目前CPU外部地址總線上的尋址物理內(nèi)存的地址信號(hào),是地址變換的最終結(jié)果地址。如果啟用了分頁(yè)機(jī)制,那么線性地址會(huì)使用頁(yè)目錄和頁(yè)表中的項(xiàng)變換成物理地址。如果沒(méi)有啟用分頁(yè)機(jī)制,那么線性地址就直接成為物理地址了。
虛擬內(nèi)存(Virtual Memory)是指計(jì)算機(jī)呈現(xiàn)出要比實(shí)際擁有的內(nèi)存大得多的內(nèi)存量。因此他允許程式員編制并運(yùn)行比實(shí)際系統(tǒng)擁有的內(nèi)存大得多的程式。這使得許多大型項(xiàng)目也能夠在具有有限內(nèi)存資源的系統(tǒng)上實(shí)現(xiàn)。一個(gè)非常恰當(dāng)?shù)谋扔魇牵耗悴槐胤浅iL(zhǎng)的軌道就能讓一列火車從上海開(kāi)到北京。你只需要足夠長(zhǎng)的鐵軌(比如說(shuō)3公里)就能完成這個(gè)任務(wù)。采取的方法是把后面的鐵軌即時(shí)鋪到火車的前面,只要你的操作足夠快并能滿足需求,列車就能象在一條完整的軌道上運(yùn)行。這也就是虛擬內(nèi)存管理需要完成的任務(wù)。在Linux0.11內(nèi)核中,給每個(gè)程式(進(jìn)程)都劃分了總?cè)萘繛?4MB的虛擬內(nèi)存空間。因此程式的邏輯地址范圍是0x0000000到0x4000000。有時(shí)我們也把邏輯地址稱為虛擬地址。因?yàn)楹吞摂M內(nèi)存空間的概念類似,邏輯地址也是和實(shí)際物理內(nèi)存容量無(wú)關(guān)的。邏輯地址和物理地址的“差距”是0xC0000000,是由于虛擬地址->線性地址->物理地址映射正好差這個(gè)值。這個(gè)值是由操作系統(tǒng)指定的。機(jī)理 邏輯地址(或稱為虛擬地址)到線性地址是由CPU的段機(jī)制自動(dòng)轉(zhuǎn)換的。如果沒(méi)有開(kāi)啟分頁(yè)管理,則線性地址就是物理地址。如果開(kāi)啟了分頁(yè)管理,那么系統(tǒng)程式需要參和線性地址到物理地址的轉(zhuǎn)換過(guò)程。具體是通過(guò)設(shè)置頁(yè)目錄表和頁(yè)表項(xiàng)進(jìn)行的。
線性地址邏輯地址和物理地址的區(qū)別:
線性地址是邏輯地址到物理地址變換之間的中間層,是處理器可尋址的內(nèi)存空間(稱為線性地址空間)中的地址。程序代碼會(huì)產(chǎn)生邏輯地址,或者說(shuō)是段中的偏移地址,加上相應(yīng)段的基地址就生成了一個(gè)線性地址。
如果啟用了分頁(yè)機(jī)制,那么線性地址可以再經(jīng)變換以產(chǎn)生一個(gè)物理地址。若沒(méi)有啟用分頁(yè)機(jī)制,那么線性地址直接就是物理地址。不過(guò),在開(kāi)啟分頁(yè)功能之后,一個(gè)線性地址可能沒(méi)有相對(duì)映的物理地址,因?yàn)樗鶎?duì)應(yīng)的內(nèi)存可能被交換到硬盤(pán)中。32位線性地址可用于定位4GB存儲(chǔ)單元。
所謂物理地址,就是指系統(tǒng)內(nèi)存的真正地址。對(duì)于32 位的操作系統(tǒng),它的范圍為0x00000000~0xFFFFFFFF,共有4GB。只有當(dāng)CPU工作于分頁(yè)模式時(shí),此種類型的地址才會(huì)變得非常“有趣”。本質(zhì)上,一個(gè)物理地址是CPU插腳上可測(cè)量的電壓。操作系統(tǒng)通過(guò)設(shè)立頁(yè)表將線性地址映射為物理地址。Windows 2K/XP所用頁(yè)表布局的某些屬性對(duì)于調(diào)試軟件開(kāi)發(fā)人員非常有用。
分頁(yè)機(jī)制把線性地址空間和物理地址空間分別劃分為大小相同的塊。這樣的塊稱為頁(yè)。通過(guò)在線性地址空間的頁(yè)與物理地址空間的頁(yè)之間建立映射,分頁(yè)機(jī)制可以實(shí)現(xiàn)線性地址到物理地址的轉(zhuǎn)換。線性地址空間的頁(yè)與物理地址空間的頁(yè)之間的映射可根據(jù)需要來(lái)確定。
線性地址空間的任何一頁(yè),可以映射為物理地址空間中的任何一頁(yè)。
邏輯地址(Logical Address) 是指由程式產(chǎn)生的和段相關(guān)的偏移地址部分。例如,你在進(jìn)行C語(yǔ)言指針編程中,能讀取指針變量本身值(&操作),實(shí)際上這個(gè)值就是邏輯地址,他是相對(duì)于你當(dāng)前進(jìn)程數(shù)據(jù)段的地址,不和絕對(duì)物理地址相干。只有在Intel實(shí)模式下,邏輯地址才和物理地址相等(因?yàn)閷?shí)模式?jīng)]有分段或分頁(yè)機(jī)制,Cpu不進(jìn)行自動(dòng)地址轉(zhuǎn)換);邏輯也就是在Intel保護(hù)模式下程式執(zhí)行代碼段限長(zhǎng)內(nèi)的偏移地址(假定代碼段、數(shù)據(jù)段如果完全相同)。應(yīng)用程式員僅需和邏輯地址打交道,而分段和分頁(yè)機(jī)制對(duì)你來(lái)說(shuō)是完全透明的,僅由系統(tǒng)編程人員涉及。應(yīng)用程式員雖然自己能直接操作內(nèi)存,那也只能在操作系統(tǒng)給你分配的內(nèi)存段操作。
線性地址(Linear Address) 是邏輯地址到物理地址變換之間的中間層。程式代碼會(huì)產(chǎn)生邏輯地址,或說(shuō)是段中的偏移地址,加上相應(yīng)段的基地址就生成了一個(gè)線性地址。如果啟用了分頁(yè)機(jī)制,那么線性地址能再經(jīng)變換以產(chǎn)生一個(gè)物理地址。若沒(méi)有啟用分頁(yè)機(jī)制,那么線性地址直接就是物理地址。Intel 80x86的線性地址空間容量為4G(2的32次方即32根地址總線尋址)。
看過(guò)“ 線性地址物理地址 ”的人還看了:
5.物理首地址是什么