A. 存儲器的邏輯地址由哪幾部分組成存儲器的物理地址是怎樣形成的
邏輯地址是指程序員編制的程序地址,由它構成邏輯地址空間。程序主存儲器中的實際地址稱為物理地址.
所以這里邏輯地址的組成得看你的存儲器是段表的還是頁表的,物理地址一般通過一個關系來對應邏輯地址.
當然樓上的回答也有正確的地方那就是在一般的定址中,指令的地址可以是這樣計算的,但是他的回答太不全面了.
B. 什麼是邏輯地址和物理地址
有網友問到我:什麼是邏輯地址和物理地址?怎麼轉換?針對此問題,我為大家分享了具體的操作 方法 ,希望對你有幫助!
什麼是邏輯地址是指由程式產生的和段相關的偏移地址部分。例如,你在進行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。假定某時刻一用戶頁表中已調入內存的頁面的頁號和物理塊號的對照表如下:
則邏輯地址0A5C(H)所對應的物理地址是什麼?要求:寫出主要計算過程。
解題過程:
首先要知道頁式存儲管理的邏輯地址分為兩部分:頁號和頁內地址。物理地址分為兩部分:
關系為:邏輯地址=頁號+頁內地址d
物理地址=塊號*塊長度( 等於頁面長度 L )+頁內地址;
頁號: p = lnt( 邏輯地址 A / 頁面長度 L ); d = 邏輯地址 A % 頁面長度 L (取余)
分析題:已知:用戶編程空間共32個頁面,2ˆ5=32得知頁號部分佔5位,由“每頁為1KB”,1K=2^10,可知內頁地址佔10位。
由“內存為16KB”,2^4=16得知塊號佔4位。
邏輯地址0A5C(H)所對應的二進製表示形式是:0000101001011100,後十位1001011100是頁內地址,
00010(本題特例,因為頁面長度為1KB)為為頁號,頁號化為十進制是2,在對照表中找到2對應的物理塊號是11,11轉換二進制是1011,11* 2^10 + d即可求出物理地址為10111001011100,化成十六進制為2 E5C;
即則邏輯地址0A5C(H)所對應的物理地址是2E5C;
猜你喜歡:
1. IP地址和物理地址有什麼區別
2. 物理地址和邏輯地址的區別
3. 虛擬地址與物理地址的概念
4. 物理地址什麼意思
5. 邏輯地址如何轉換成物理地址
6. 物理地址有什麼用
7. 物理地址作用是什麼
C. 什麼叫物理地址,是磁頭的一種古老的定址方式
物理地址即磁碟的柱面地址、磁頭地址、扇區地址,通過這三個地址來確定數據存儲的位置。
CHS(Cylinder/Head/Sector)定址模式也稱為3D模式,是硬碟最早採用的定址模式,它是在硬碟容量較小的前提下產生的。
硬碟的C/H/S 3D參數既可以計算出硬碟的容量,也可以確定數據所在的具體位置。這是因為扇區的三維物理地址與硬碟上的物理扇區一一對應,即三維物理地址可完全確定硬碟上的物理扇區。三維物理地址通常以C/H/S的次序來書寫,如C/H/S為0/1/1,則第一個數字0指0柱面,第二個數字1指1磁頭(盤面),第三個數字1指1扇區,表示該數據位於硬碟1盤面上的0磁軌1扇區。現在定位已完成,硬碟內部的參數和主板BIOS之間進行協議,正確發出定址信號,從而正確定位數據位置。
D. 什麼是邏輯地址它有哪兩部分組成8086cpu的物理地址是如何形成的
1、所謂邏輯地址是指按數據的邏輯塊號給出的磁碟的位置(l塊=512字l字=64位)而物理地址則是由磁碟的柱面、頭、段等物理位置所確定的地址。
2、這樣該存儲單元的地址就可以用段基址(段地址)和段內偏移量(偏移地址)來表示,段基址確定它所在的段居於整個存儲空間的位置,偏移量確定它在段內的位置,這種地址表示方式稱為邏輯地址,通常表示為段地址:偏移地址的形式。
您也可以試試搭載了第六代智能英特爾酷睿處理器的產品,創新性的使用模式,如實感技術,姿勢控制,語音識別,2D/3D影像,突破傳統PC使用體驗,無論辦公學習、暢玩游戲或者觀看超高清影像播放,均得心應手,引領產品創新。
E. 舉例說明8086中20位物理地址生成過程
現代內存容量太大比如256M,而計算機的數據線往往只有16位、32位或者64位(目前應用很少),他們所能他尋找到的地址空間最大不過是2^16(64K)、2^32(4M)或者2^64(16T),所以內存通常使用段頁式存儲。也就是將內存空間分成若干段,或者若干頁,每段大小是數據線所能訪問到的最大空間。在內存中的實際地址就是所謂的「物理地址」,而邏輯地址就是邏輯段管理內存而形成的。
比如在8086系統中,8086對外連接使用一個20位的線性地址唯一確定一個存儲單元,也就是說:對於每個存儲器單元都有的一個唯一的20位地址,我們稱為該單元的物理地址或絕對地址。
8086在內部結構中和程序設計時採用邏輯段管理內存,就形成了邏輯地址。它的表達形式為「段基地址 : 偏移地址」。
邏輯地址=段基地址 : 偏移地址
段基地址(Segment)——邏輯段在主存中的起始位置,簡稱段地址。由於8086規定段開始於模16地址,所以省略低4位0不顯式表達,段基地址就可以用16位數據表示。
偏移地址(Offset)——主存單元距離段起始位置的偏移量(Displacement)。由於限定每段不超過64KB,所以偏移地址也可以用16位數據表示。
這樣同一個存儲單元就即有物理地址,又有邏輯地址。但是請注意,物理地址是外部連接使用的、唯一的;而邏輯地址是內部和編程使用的、並不唯一。
物理地址和邏輯地址可以互相轉換。
將邏輯地址中的段地址左移4位,加上偏移地址就得到20位物理地址。這里左移的4位是二進制位;如果用十六進製表達地址就是左移一位(不知道為什麼,復習數制內容吧!還不知道為什麼,看疑難解答吧!)。左移4位還可以表達為乘以16,即:段地址×16+偏移地址。
同一個物理地址可以對應多個邏輯地址形式。所以物理地址轉換為邏輯地址,需要明確段基地址或偏移地址,然後同上原則確定另一個地址。
邏輯地址 1460H : 0100H 1380H : 0F00H
物理地址 14700H
於是,對於主存14700H單元,我們可以描述為在1460H(或1380H)段的100H(或F00H)單元,或者說主存1460H : 0100H(或1380H : 0F00H)單元。
F. 8086/8088存儲器的物理地址是如何形成的
物理地址=基址X16+偏移地址。這裡面的16是十進制數,化成16進制數正好是10H。式中的物理地址、基址、偏移地址都是16進製表示~
G. 2.6 什麼是邏輯地址什麼是物理地址如何由邏輯地址計算物理地址
【解】:物理地址:完成存儲器單元或I/O埠定址的實際地址成為物理地址,CPU型號不同其物理地址也不同。物理地址是指CPU和存儲器進行數據交換時實際所使用的地址,而邏輯地址是程序使用的地址。物理地址由兩部分組成:段基址(段起始地址高16位)和偏移地址。前者由段寄存器給出,後者是指存儲單元所在的位置離段起始地址的偏移距離。當CPU定址某個存儲單元時,先將段寄存器的內容左移4位,然後加上指令中提供的16位偏移地址而形成20位物理地址。在取指令時,CPU自動選擇代碼段寄存器CS,左移4位後,加上指令提供的16位偏移地址,計算出要取指令的物理地址。堆棧操作時,CPU自動選擇堆棧段寄存器SS,將其內容左移4位後,加上指令提供的16位偏移地址,計算出棧頂單元的物理地址。每當存取操作數時,CPU會自動選擇數據段寄存器(或附加段寄存器ES),將段基值左移4位後加上16位偏移地址,得到操作數在內存的物理地址。