什麼是邏輯地址邏輯地址的概述
邏輯地址是指由程式產生的與段相關的偏移地址部分。那麼你對邏輯地址瞭解多少呢?以下是由小編整理關於什麼是邏輯地址的內容,希望大家喜歡!
邏輯地址的概述
在有地址變換功能的計算機中,訪內指令給出的地址 ***運算元*** 叫邏輯地址,也叫相對地址。要經過定址方式的計算或變換才得到記憶體儲器中的實際有效地址,即實體地址。
各種計算機的定址方式 ***地址變換功能***都有所不同,在用匯編語言編寫程式時,要先熟悉這個機器的指令系統。參見 “實體地址”及“定址方式”。
"邏輯地址" 在工具書中的解釋
1、在有地址變換功能的計算機中,訪問指令給出的地址 ***運算元*** 叫邏輯地址,也叫相對地址。要經過定址方式的計算或變換才得到記憶體儲器中的實體地址。
2、把使用者程式中使用的地址稱為相對地址即邏輯地址。
3、邏輯地址由兩個16位的地址分量構成,一個為段基值,另一個為偏移量。兩個分量均為無符號數編碼。
"邏輯地址" 在學術文獻中的解釋
1、這樣該儲存單元的地址就可以用段基址***段地址***和段內偏移量***偏移地址***來表示,段基址確定它所在的段居於整個儲存空間的位置,偏移量確定它在段內的位置,這種地址表示方式稱為邏輯地址,通常表示為段地址:偏移地址的形式。
2、所謂邏輯地址是指按資料的邏輯塊號給出的磁碟的位置***l塊=512字l字=64位***而實體地址則是由磁碟的柱面、頭、段等物理位置所確定的地址。
邏輯地址的產生背景
追根求源,Intel的8位機8080CPU,資料匯流排***DB***為8位,地址匯流排***AB***為16位。那麼這個16位地址資訊也是要通過8位資料匯流排來傳送,也是要在資料通道中的暫存器,以及在CPU中的暫存器和記憶體中存放的,但由於AB正好是DB的整數倍,故不會產生矛盾!
但當上升到16位機後,Intel8086/8088CPU的設計由於當年IC整合技術和外封裝及引腳技術的限制,不能超過40個引腳。但又感覺到8位機原來的地址定址能力2^16=64KB太少了,但直接增加到16的整數倍即令AB=32位又是達不到的。故而只能把AB暫時增加4條成為20條。則2^20=1MB的定址能力已經增加了16倍。但此舉卻造成了AB的20位和DB的16位之間的矛盾,20位地址資訊既無法在DB上傳送,又無法在16位的CPU暫存器和記憶體單元中存放。於是應運而生就產生了CPU段結構的原理。
邏輯地址和線性地址
一個邏輯地址由兩部份組成,段識別符號和段內偏移量。段識別符號是由一個16位長的欄位組成,稱為段選擇符。其中前13位是一個索引號。後面3位包含一些硬體細節,如圖:
索引號,可以理解為陣列的下標——而它將會對應一個數組,它又是什麼的索引呢?這就是“段描述符***segment descriptor***”,段描述符具體地址描述了一個段***對於“段”這個字眼的理解:我們可以理解為把虛擬記憶體分為一個一個的段。比如一個儲存器有1024個位元組,可以把它分成4段,每段有256個位元組***。這樣,很多個段描述符,就組了一個數組,叫“段描述符表”,這樣,可以通過段識別符號的前13位,直接在段描述符表中找到一個具體的段描述符,這個描述符就描述了一個段,我剛才對段的抽像不太準確,因為看看描述符裡面究竟有什麼東東——也就是它究竟是如何描述的,就理解段究竟有什麼東東了,每一個段描述符由8個位元組組成,如下圖:
這些東東很複雜,雖然可以利用一個數據結構來定義它,不過,我這裡只關心一樣,就是Base欄位,它描述了一個段的開始位置的線性地址。
Intel設計的本意是,一些全域性的段描述符,就放在“全域性段描述符表***GDT***”中,一些區域性的,例如每個程序自己的,就放在所謂的“區域性段描述符表***LDT***”中。那究竟什麼時候該用GDT,什麼時候該用LDT呢?這是由段選擇符中的T1欄位表示的,=0,表示用GDT,=1表示用LDT。
GDT在記憶體中的地址和大小存放在CPU的gdtr控制暫存器中,而LDT則在ldtr暫存器中。
好多概念,像繞口令一樣。這張圖看起來要直觀些:
首先,給定一個完整的邏輯地址[段選擇符:段內偏移地址],
1、看段選擇符的T1=0還是1,知道當前要轉換是GDT中的段,還是LDT中的段,再根據相應暫存器,得到其地址和大小。我們就有了一個數組了。
2、拿出段選擇符中前13位,可以在這個陣列中,查詢到對應的段描述符,這樣,它了Base,即基地址就知道了。
3、把Base + offset,就是要轉換的線性地址了。
邏輯地址的概述