什么是邏輯地址邏輯地址的概述
邏輯地址是指由程序產(chǎn)生的與段相關(guān)的偏移地址部分。那么你對(duì)邏輯地址了解多少呢?以下是由學(xué)習(xí)啦小編整理關(guān)于什么是邏輯地址的內(nèi)容,希望大家喜歡!
邏輯地址的概述
在有地址變換功能的計(jì)算機(jī)中,訪(fǎng)內(nèi)指令給出的地址 (操作數(shù)) 叫邏輯地址,也叫相對(duì)地址。要經(jīng)過(guò)尋址方式的計(jì)算或變換才得到內(nèi)存儲(chǔ)器中的實(shí)際有效地址,即物理地址。
各種計(jì)算機(jī)的尋址方式 (地址變換功能)都有所不同,在用匯編語(yǔ)言編寫(xiě)程序時(shí),要先熟悉這個(gè)機(jī)器的指令系統(tǒng)。參見(jiàn) “物理地址”及“尋址方式”。
"邏輯地址" 在工具書(shū)中的解釋
1、在有地址變換功能的計(jì)算機(jī)中,訪(fǎng)問(wèn)指令給出的地址 (操作數(shù)) 叫邏輯地址,也叫相對(duì)地址。要經(jīng)過(guò)尋址方式的計(jì)算或變換才得到內(nèi)存儲(chǔ)器中的物理地址。
2、把用戶(hù)程序中使用的地址稱(chēng)為相對(duì)地址即邏輯地址。
3、邏輯地址由兩個(gè)16位的地址分量構(gòu)成,一個(gè)為段基值,另一個(gè)為偏移量。兩個(gè)分量均為無(wú)符號(hào)數(shù)編碼。
"邏輯地址" 在學(xué)術(shù)文獻(xiàn)中的解釋
1、這樣該存儲(chǔ)單元的地址就可以用段基址(段地址)和段內(nèi)偏移量(偏移地址)來(lái)表示,段基址確定它所在的段居于整個(gè)存儲(chǔ)空間的位置,偏移量確定它在段內(nèi)的位置,這種地址表示方式稱(chēng)為邏輯地址,通常表示為段地址:偏移地址的形式。
2、所謂邏輯地址是指按數(shù)據(jù)的邏輯塊號(hào)給出的磁盤(pán)的位置(l塊=512字l字=64位)而物理地址則是由磁盤(pán)的柱面、頭、段等物理位置所確定的地址。
邏輯地址的產(chǎn)生背景
追根求源,Intel的8位機(jī)8080CPU,數(shù)據(jù)總線(xiàn)(DB)為8位,地址總線(xiàn)(AB)為16位。那么這個(gè)16位地址信息也是要通過(guò)8位數(shù)據(jù)總線(xiàn)來(lái)傳送,也是要在數(shù)據(jù)通道中的暫存器,以及在CPU中的寄存器和內(nèi)存中存放的,但由于AB正好是DB的整數(shù)倍,故不會(huì)產(chǎn)生矛盾!
但當(dāng)上升到16位機(jī)后,Intel8086/8088CPU的設(shè)計(jì)由于當(dāng)年IC集成技術(shù)和外封裝及引腳技術(shù)的限制,不能超過(guò)40個(gè)引腳。但又感覺(jué)到8位機(jī)原來(lái)的地址尋址能力2^16=64KB太少了,但直接增加到16的整數(shù)倍即令A(yù)B=32位又是達(dá)不到的。故而只能把AB暫時(shí)增加4條成為20條。則2^20=1MB的尋址能力已經(jīng)增加了16倍。但此舉卻造成了AB的20位和DB的16位之間的矛盾,20位地址信息既無(wú)法在DB上傳送,又無(wú)法在16位的CPU寄存器和內(nèi)存單元中存放。于是應(yīng)運(yùn)而生就產(chǎn)生了CPU段結(jié)構(gòu)的原理。
邏輯地址和線(xiàn)性地址
一個(gè)邏輯地址由兩部份組成,段標(biāo)識(shí)符和段內(nèi)偏移量。段標(biāo)識(shí)符是由一個(gè)16位長(zhǎng)的字段組成,稱(chēng)為段選擇符。其中前13位是一個(gè)索引號(hào)。后面3位包含一些硬件細(xì)節(jié),如圖:
索引號(hào),可以理解為數(shù)組的下標(biāo)——而它將會(huì)對(duì)應(yīng)一個(gè)數(shù)組,它又是什么的索引呢?這就是“段描述符(segment descriptor)”,段描述符具體地址描述了一個(gè)段(對(duì)于“段”這個(gè)字眼的理解:我們可以理解為把虛擬內(nèi)存分為一個(gè)一個(gè)的段。比如一個(gè)存儲(chǔ)器有1024個(gè)字節(jié),可以把它分成4段,每段有256個(gè)字節(jié))。這樣,很多個(gè)段描述符,就組了一個(gè)數(shù)組,叫“段描述符表”,這樣,可以通過(guò)段標(biāo)識(shí)符的前13位,直接在段描述符表中找到一個(gè)具體的段描述符,這個(gè)描述符就描述了一個(gè)段,我剛才對(duì)段的抽像不太準(zhǔn)確,因?yàn)榭纯疵枋龇锩婢烤褂惺裁礀|東——也就是它究竟是如何描述的,就理解段究竟有什么東東了,每一個(gè)段描述符由8個(gè)字節(jié)組成,如下圖:
這些東東很復(fù)雜,雖然可以利用一個(gè)數(shù)據(jù)結(jié)構(gòu)來(lái)定義它,不過(guò),我這里只關(guān)心一樣,就是Base字段,它描述了一個(gè)段的開(kāi)始位置的線(xiàn)性地址。
Intel設(shè)計(jì)的本意是,一些全局的段描述符,就放在“全局段描述符表(GDT)”中,一些局部的,例如每個(gè)進(jìn)程自己的,就放在所謂的“局部段描述符表(LDT)”中。那究竟什么時(shí)候該用GDT,什么時(shí)候該用LDT呢?這是由段選擇符中的T1字段表示的,=0,表示用GDT,=1表示用LDT。
GDT在內(nèi)存中的地址和大小存放在CPU的gdtr控制寄存器中,而LDT則在ldtr寄存器中。
好多概念,像繞口令一樣。這張圖看起來(lái)要直觀些:
首先,給定一個(gè)完整的邏輯地址[段選擇符:段內(nèi)偏移地址],
1、看段選擇符的T1=0還是1,知道當(dāng)前要轉(zhuǎn)換是GDT中的段,還是LDT中的段,再根據(jù)相應(yīng)寄存器,得到其地址和大小。我們就有了一個(gè)數(shù)組了。
2、拿出段選擇符中前13位,可以在這個(gè)數(shù)組中,查找到對(duì)應(yīng)的段描述符,這樣,它了Base,即基地址就知道了。
3、把Base + offset,就是要轉(zhuǎn)換的線(xiàn)性地址了。
看過(guò)“邏輯地址的概述”的人還看了: