❶ 簡述計算機物理地址和邏輯地址的含義及其轉換關系
邏輯地址: 機器語言指令,用於指定一個操作數或一條指令的地址
表示為[段標識符:段內偏移量]
偏移量:段開始的地方到實際地址之間的距離
線性地址:也稱虛擬地址,32位,0x00000000—0xffffffff
物理地址:用於內存晶元級的單元定址,與處理器和cpu連接的地址匯流排相對應(與實物內存相聯系)
邏輯地址轉換物理地址:
內存控制單元(MMU)通過分段單元把邏輯地址轉換成線性地址;接著分頁單元把線性地址轉換成物理地址。
❷ 虛擬地址、邏輯地址、線性地址、物理地址
虛擬地址到物理地址的轉化是體系結構相關的,一般由分段和分頁兩種方式。以X86CPU為例,分段和分頁都是支持的。內存管理單元負責從虛擬地址到物理地址的轉化。邏輯地址是段標識+段內偏移的形式。MMU通過查詢段表,可以將邏輯地址轉化為線性地址。無分頁機制時,線性地址就是物理地址,有分頁時,MMU還需要查詢頁表來將線性地址轉化為物理地址:邏輯地址(段表)->線性地址(頁表)->物理地址。
映射是一種多對一的關系,即不同的邏輯地址可以映射到同一個線性地址上;不同的線性地址也可以映射到同一個物理地址上。而且,同一個線性地址在換頁之後,可能被裝載到另一個物理地址上,所以這種多對一的映射關系會隨時間發生變化。
❸ 線性地址轉換為物理地址是硬體實現還是軟體實現具體過程如何
ARP協議是「Address Resolution Protocol」(地址解析協議)的縮寫。在區域網中,網路中實際傳輸的是「幀」,幀裡面是有目標主機的MAC地址的。在乙太網中,一個主機要和另一個主機進行直接通信,必須要知道目標主機的MAC地址。但這個目標MAC地址是如何獲得的呢?它就是通過地址解析協議獲得的。所謂「地址解析」就是主機在發送幀前將目標IP地址轉換成目標MAC地址的過程。
❹ 邏輯地址如何轉換成物理地址的
首先我們知道,邏輯地址=段地址:偏移地址
然後進行運算:段地址×16+偏移地址=物理地址(可以理解為段地址末尾補一個零)
舉例:邏輯地址是1000H:1000H
那麼物理地址為1000H×16+1000H=11000H
拓展知識:
邏輯地址和物理地址的區別是:
邏輯地址(LogicalAddress)是指由程序產生的與段相關的偏移地址部分。例如,你在進行C語言指針編程中,可以讀取指針變數本身值(&操作),實際上這個值就是邏輯地址,它是相對於你當前進程數據段的地址,不和絕對物理地址相干。只有在Intel實模式下,邏輯地址才和物理地址相等(因為實模式沒有分段或分頁機制,Cpu不進行自動地址轉換);邏輯也就是在Intel保護模式下程序執行代碼段限長內的偏移地址(假定代碼段、數據段如果完全一樣)。應用程序員僅需與邏輯地址打交道,而分段和分頁機制對您來說是完全透明的,僅由系統編程人員涉及。應用程序員雖然自己可以直接操作內存,那也只能在操作系統給你分配的內存段操作。
物理地址(PhysicalAddress)是指出現在CPU外部地址匯流排上的定址物理內存的地址信號,是地址變換的最終結果地址。如果啟用了分頁機制,那麼線性地址會使用頁目錄和頁表中的項變換成物理地址。如果沒有啟用分頁機制,那麼線性地址就直接成為物理地址了。
❺ 80386微處理器邏輯地址到物理地址的轉換過程
邏輯地址(logical address)
包含在機器語言指令中用來指定一個操作數或一條指令的地址。這種定址方式在80x86著名的分段結構
中表現得尤為具體,它促使MSDOS
或windows程序員把程序分成若干段。每一個邏輯地址都由一個段
(segment)和偏移量(offset 或 displacement)組成,偏移量指明了從段開始的地方到實際地址之間的距
離。
線性地址(linear address)(也稱虛擬地址 virtual address)
是一個32位無符號整數,可以用來表示高達4GB的地址,也就是,高達4 294 967 296個存儲器單元。
線性地址通常用16進制數字表示,值的范圍從0x00000000 到 0xffffffff。
物理地址(physical address)
用於內存晶元級內存單元定址。它們與從微處理器的地址引腳發送到內存匯流排上的電信號相對應。物理
地址由32位或36位無符號整數表示。
內存控制單元(MMU)通過一種稱為分段單元(segmentation unit)的硬體電路把一個邏輯地址轉換成線性
地址;接著,第二個稱為分頁單元(paging unit)的硬體電路把線性地址轉換成一個物理地址
❻ 80386cpu如何從線性地址得到物理地址
理解最簡單的模型!任何復雜的設計方式、數據結構都是在這個基本的模型上改進的!
首先,80386可以工作在2種模式下,而這2種工作模式下的地址轉換方式是不一樣的。
地址的變換必須要有兩個基本的條件:一是地址線,二是地址變換涉及的一些寄存器。首先386有32條地址線,也就是說原則上可以有2^32=4G的定址空間;然後386還有如下寄存器組:
(1)EAX~EDX、ESP、EBP、ESI、EDI這樣一組32位的通用寄存器,
(2)有32位的EIP指令指針寄存器,
(3)有CS、SS、DS、ES、FS、GS這樣一組16位的段寄存器,並有各自相應的64位段描述符寄存器與之對應,但是段描述符寄存器是硬體自動設置的
(4)系統地址寄存器GDTR、IDTR,它們都是48位的
(5)CR0~CR3,控制寄存器;CR3有重要的作用
1、實模式
當CPU加電或是復位時,CPU就進入了實模式。
在實模式下,A20~A31總是低電平,所以此時386隻有2^20=1M的定址空間;16位的段寄存器左移4位以後,加上16位的偏移地址(高16位固定),這樣就剛好得到了20位的物理地址!
這里需要注意兩點:一是16位的段地址寄存器通過硬體機制傳「傳遞給」相應的32位的段基址,然後段基址硬性的將20~31置0,並將16位地址左移4位;二是作為偏移地址的32位寄存器只用了低16位,高16位全部置0,然後相加即可得到相應的物理地址;
2、保護模式
在保護模式下,地址變換無非也就是查表、線性相加等方式——歸根到底,地址的變換一定是通過硬體機制完成的。
首先,CPU內部會初始化一個很重要的48位系統地址寄存器GDTR/LDTR/IDTR,以全局描述符寄存器GDTR為例:
GDTR線性基地址段限屬性
根據這個線性的基地址,硬體可以找到描述符表的位置;然後段寄存器——現在被稱作段選擇符的高13位作為這個描述符表的偏移地址,找到裡面一個相應的描述符,並將這個描述符裝載入描述符寄存器中,這樣就得到了相應的段基址;
描述符寄存器中的32位的段基址和32位偏移地址相加,即可以得到一個32位的地址,這個地址稱之為線性地址。接下來有兩種情況:
(1)如果分頁機制被禁止,這個地址就是物理地址了!
(2)採用分頁機制。此時32位的線性地址分為3個部分,
(10位)頁目錄索引(10位)頁表索引(12位)偏移地址
首先高10位的頁目錄索引部分和CR3寄存器(它存放著頁目錄地址)結合,找到相應的頁表的地址;然後根據中間的10位的頁表索引,找到相應的頁的起始位置;然後,根據低12位的偏移地址,在這個頁中就可以找到對應的地址了——而這就是物理地址!
❼ 什麼是線性地址和物理地址的區別是什麼呢
386架構里,cpu可以處於實模式和保護模式。
實模式下,cpu指令訪問的地址就是物理地址,形式為:段寄存器:偏移
在保護模式下,cpu可以使用分段機制和分頁機制。
分段機制下使用的地址就是邏輯地址,形式為:段選擇子:偏移
分頁機制下使用的地址就是線性地址,形式為:0xXXXXXXXX
無論是邏輯地址還是線性地址,都要被cpu映射成物理地址。
保護模式下必須採用分段機制。在此基礎上可採用分頁機制。
邏輯地址被轉化為線性地址,如果採用分頁機制,則該線性地址通過分頁機制被映射成物理地址。如果不採用分頁機制,則該線性地址就是物理地址。
實模式下的物理地址只能訪問1M以下空間,而保護模式下的物理地址可以訪問所有32位空間。並且要注意,物理內存空間只是物理地址空間的一個部分而已。
另外還有一個」匯流排地址「的概念,是從匯流排設備的角度來說的。
在linux系統里,對cpu來說,物理內存的首地址是從線性地址的0xc0000000開始的。而對匯流排設備來說,物理內存的首地址可能是從匯流排地址0x00000000開始,也可能是從另外的匯流排地址開始,隨系統而異。這也是為什麼內核里經常有vir_to_phy
和vir_to_bus轉換的緣故。
還有~~~
關於物理地址,線性地址和虛擬地址的區別,我只能憑我的理解簡單說說,可能不準確。物理地址在什麼時候都存在,但是在採用分頁技術和虛擬內存技術後,你很難確定物理地址在那裡,所以建議在實模式下採用物理地址和線性地址形式,這時候物理地址和線性地址其實是一致的。最常用的,比方說,計算機啟動後的地址是0xfff0:0000,裝載BIOS,然後轉移到0x07C0:0000,所以總可以設置一個物理斷點0x7C00,開始調試你的bootloader。
❽ 邏輯地址怎麼轉化為物理地址
物理地址:載入到內存地址寄存器中的地址,內存單元的真正地址。在前端匯流排上傳輸的內存地址都是物理內存地址,編號從0開始一直到可用物理內存的最高端。
程序的邏輯地址空間變換成內存中的實際物理地址空間的過程,也就是說在裝入時對目標程序中指令和數據的修改過程。他是實現多道程序在內存中同時運行的基礎。重定位有兩種,分別是動態重定位與靜態重定位。
線性地址:
一個邏輯地址由兩部份組成,段標識符和段內偏移量。段標識符是由一個16位長的欄位組成,稱為段選擇符。其中前13位是一個索引號。這就是「段描述符(segment descriptor)」,段描述符具體地址描述了一個段(對於「段」這個字眼的理解:我們可以理解為把虛擬內存分為一個一個的段。
比如一個存儲器有1024個位元組,可以把它分成4段,每段有256個位元組)。這樣,很多個段描述符,就組了一個數組,叫「段描述符表」。
❾ 32位線性地址到物理地址的轉換
線性地址高10位保存的是地址在頁目錄表中的索引,一個索引佔四個位元組,所以乘以四。