什麼是邏輯地址和實體地址

  有網友問到小編:?怎麼轉換?針對此問題,小編為大家分享了具體的操作方法,希望對你有幫助!

  什麼是邏輯地址

  是指由程式產生的和段相關的偏移地址部分。例如,你在進行C語言指標程式設計中,能讀取指標變數本身值&操作,實際上這個值就是邏輯地址,他是相對於你當前程序資料段的地址,不和絕對實體地址相干。只有在Intel真實模式下,邏輯地址才和實體地址相等因為真實模式沒有分段或分頁機制,Cpu不進行自動地址轉換;邏輯也就是在Intel保護模式下程式執行程式碼段限長內的偏移地址假定程式碼段、資料段如果完全相同。應用程式員僅需和邏輯地址打交道,而分段和分頁機制對你來說是完全透明的,僅由系統程式設計人員涉及。應用程式員雖然自己能直接操作記憶體,那也只能在作業系統給你分配的記憶體段操作。

  什麼是實體地址

  用於記憶體晶片級的單元定址,與處理器和CPU連線的地址匯流排相對應。 ——這個概念應該是這幾個概念中最好理解的一個,但是值得一提的是,雖然可以直接把實體地址理解成插在機器上那根記憶體本身,把記憶體看成一個從0位元組一直到最大空量逐位元組的編號的大陣列,然後把這個陣列叫做實體地址,但是事實上,這只是一個硬體提供給軟體的抽像,記憶體的定址方式並不是這樣。所以,說它是“與地址匯流排相對應”,是更貼切一些,不過拋開對實體記憶體定址方式的考慮,直接把實體地址與物理的記憶體一一對應,也是可以接受的。也許錯誤的理解更利於形而上的抽像。 虛擬記憶體virtual memory 這是對整個記憶體不要與機器上插那條對上號的抽像描述。它是相對於實體記憶體來講的,可以直接理解成“不直實的”,“假的”記憶體,例如,一個0x08000000記憶體地址,它並不對就實體地址上那個大陣列中0x08000000 - 1那個地址元素;之所以是這樣,是因為現代作業系統都提供了一種記憶體管理的抽像,即虛擬記憶體virtual memory。程序使用虛擬記憶體中的地址,由作業系統協助相關硬體,把它“轉換”成真正的實體地址。這個“轉換”,是所有問題討論的關鍵。有了這樣的抽像,一個程式,就可以使用比真實實體地址大得多的地址空間。拆東牆,補西牆,銀行也是這樣子做的,甚至多個程序可以使用相同的地址。不奇怪,因為轉換後的實體地址並非相同的。 ——可以把連線後的程式反編譯看一下,發現聯結器已經為程式分配了一個地址,例如,要呼叫某個函式A,程式碼不是call A,而是call 0x0811111111 ,也就是說,函式A的地址已經被定下來了。沒有這樣的“轉換”,沒有虛擬地址的概念,這樣做是根本行不通的。打住了,這個問題再說下去,就收不住了。邏輯地址logical address Intel為了相容,將遠古時代的段式記憶體管理方式保留了下來。邏輯地址指的是機器語言指令中,用來指定一個運算元或者是一條指令的地址。以上例,我們說的聯結器為A分配的0x08111111這個地址就是邏輯地址。 ——不過不好意思,這樣說,好像又違背了Intel中段式管理中,對邏輯地址要求,“一個邏輯地址,是由一個段識別符號加上一個指定段內相對地址的偏移量,表示為 [段識別符號:段內偏移量],也就是說,上例中那個0x08111111,應該表示為[A的程式碼段識別符號: 0x08111111],這樣,才完整一些” 線性地址linear address或也叫虛擬地址virtual address 跟邏輯地址類似,它也是一個不真實的地址,如果邏輯地址是對應的硬體平臺段式管理轉換前地址的話,那麼線性地址則對應了硬體頁式記憶體的轉換前地址。

  邏輯地址和實體地址拓展知識

  儲存器中每一個單元的地址可以用兩種方法表示:

  1.邏輯地址:其表達形式為“段地址:段內偏移地址”。

  2.實體地址:CPU與儲存器進行資料交換時在地址總線上

  提供的20位地址資訊稱為實體地址。

  實體地址=段地址×10H+段內偏移量

  CPU一次處理的資料是16位,地址匯流排實際上代表CPU的定址能力,地址線為20條那麼CPU實際的定址能力就是2的20次方就是1M。實際的實體地址是這樣形成的:

  段地址*10H+偏移地址,偏移地址用IP指向,IP是16位的。

  例如段地址是1234H,偏移地址是4321H

  那麼實際的實體地址怎麼算呢:1234H*10H+4321H=12340H+4321H=16661H

  實際上可以這麼來理解,就是段地址左移一位後加上偏移地址就得出實際的實體地址。

  這裡邏輯地址和實體地址的關係又可以用一個比喻來說明:

  比如你的學號是0102,這是你的真實地址亦即實體地址,那麼又假如01表示你的班級名稱,02表示你相對整個班級的位置,這就是邏輯地址,道理是一樣的,只不過在實際由邏輯地址合成物理地址的時候需要將實體地址左移一位,再加上偏移地址。

  邏輯地址到實體地址的轉換方法

  以一個例子的形式講解邏輯地址到實體地址的轉換:

  某虛擬儲存器的使用者程式設計空間共32個頁面,每頁為1KB,記憶體為16KB。假定某時刻一使用者頁表中已調入記憶體的頁面的頁號和物理塊號的對照表如下:

  則邏輯地址0A5CH所對應的實體地址是什麼?要求:寫出主要計算過程。

  解題過程:

  首先要知道頁式儲存管理的邏輯地址分為兩部分:頁號和頁內地址。實體地址分為兩部分:

  關係為:邏輯地址= 頁號+頁內地址d

  實體地址= 塊號*塊長度 等於頁面長度 L +頁內地址;

  頁號: p = lnt 邏輯地址 A / 頁面長度 L ; d = 邏輯地址 A % 頁面長度 L 取餘

  分析題:已知:使用者程式設計空間共32個頁面,2ˆ5 = 32 得知頁號部分佔5位,由“每頁為1KB”,1K=2^10,可知內頁地址佔10位。

  由“記憶體為16KB”,2^4=16得知塊號佔4位。

  邏輯地址0A5CH所對應的二進位制表示形式是:0000101001011100,後十位1001011100是頁內地址,

  00010本題特例,因為頁面長度為1KB為為頁號,頁號化為十進位制是2,在對照表中找到2對應的物理塊號是11,11轉換二進位制是1011,11* 2^10 + d即可求出實體地址為10111001011100,化成十六進位制為2 E5C;

  即則邏輯地址0A5CH所對應的實體地址是2E5C;