導航:首頁 > 物理學科 > 線性地址怎麼轉換物理地址

線性地址怎麼轉換物理地址

發布時間:2022-08-04 06:57:03

❶ 通過虛擬地址計算物理地址 求過程

你打的太多了,有點亂,只說下地址轉換問題:
1.虛擬地址:虛擬地址是以"段寄存器:偏移地址"形式存在的,例如--0542:24521360
2.線性地址:它是由分段部件把虛擬地址轉化而來的.
3.物理地址:即真實存在的地址,由處理器的地址引腳尋找到的地址.
虛擬地址---->線性地址:
段寄存器是一個16位的寄存器,其中第0和1位控制著將要訪問段的特權級,第2位說明是在gdt還是ldt尋找地址.高13位作為一個索引值,總共8192個索引.假設段寄存器-0000
0000
0000
1011(000b),那麼我們可以知道rpl=3(特權級為3);ti=0,從gdt中選擇段描述符;index=1,即將要索引的段描述符在gdt中的順序號為1,由於一個段描述符佔8個位元組,所以其索引到的地址為"gdt的高32位+1*8".這也就是為什麼gdt48位,留最低的16位作為限長的原因(8192*8=64k).
找到了段描述符,然後就是從段描述符中找出該段的位置了.段描述符是個8位元組的內存空間,由於結構復雜,無法構圖,省略段描述符的結構.我們只要知道在裡面規定了該段的基址,限長,還有屬性等等.找出基址後,再加上虛擬地址的偏址,就形成了32位的線性地址.由於偏址是32位的,所以該段獨享4g的虛擬地址空間.
線性地址----->物理地址
該部分是由分頁部件通過3級查找完成的.此時,我們把線性地址分為3段:0-11位(c)位元組索引,12-21位(b)頁表索引,22-31位(a)頁目錄索引.我們把頁表描述符和頁描述符通稱為頁表項,頁表項佔4個位元組,總共佔4kb大小.先以cr3為基址,以(a*4)為索引值,定址頁目錄描述符.然後再以頁目錄地址的高20位地址為基址,以(b*4)為索引值,定址頁描述符.再以頁描述符的高20位地址為基址,以c為偏移地址,相加得到物理地址.
從上可以看到頁的大小是4kb,即一項任務cpu只調用該任務所佔內存空間的4kb大小.有利於減少內存佔用.
以上大體就是這樣的,其中分頁部件的轉換相當復雜,不是三言兩語就能說明白的.還有pentium之後,分頁部件又採用了4mb的頁面,線性地址採用2級定址.才開啟pae功能後,又形成了4級定址.然後再結合後面的內存保護,i/o保護,任務保護及特權級的變換,形成了保護模式的大部分內容.
太復雜了,我也不是十分會.寫的有些亂,但願你能明白些.

❷ 邏輯地址如何轉換成物理地址的

首先我們知道,邏輯地址=段地址:偏移地址

然後進行運算:段地址×16+偏移地址=物理地址(可以理解為段地址末尾補一個零)

舉例:邏輯地址是1000H:1000H

那麼物理地址為1000H×16+1000H=11000H

拓展知識:

邏輯地址和物理地址的區別是:

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

物理地址(PhysicalAddress)是指出現在CPU外部地址匯流排上的定址物理內存的地址信號,是地址變換的最終結果地址。如果啟用了分頁機制,那麼線性地址會使用頁目錄和頁表中的項變換成物理地址。如果沒有啟用分頁機制,那麼線性地址就直接成為物理地址了。

❸ 線性地址轉換為物理地址是硬體實現還是軟體實現具體過程如何

ARP協議是「Address Resolution Protocol」(地址解析協議)的縮寫。在區域網中,網路中實際傳輸的是「幀」,幀裡面是有目標主機的MAC地址的。在乙太網中,一個主機要和另一個主機進行直接通信,必須要知道目標主機的MAC地址。但這個目標MAC地址是如何獲得的呢?它就是通過地址解析協議獲得的。所謂「地址解析」就是主機在發送幀前將目標IP地址轉換成目標MAC地址的過程。

❹ 簡述計算機物理地址和邏輯地址的含義及其轉換關系

邏輯地址: 機器語言指令,用於指定一個操作數或一條指令的地址
表示為[段標識符:段內偏移量]
偏移量:段開始的地方到實際地址之間的距離
線性地址:也稱虛擬地址,32位,0x00000000—0xffffffff

物理地址:用於內存晶元級的單元定址,與處理器和cpu連接的地址匯流排相對應(與實物內存相聯系)
邏輯地址轉換物理地址:
內存控制單元(MMU)通過分段單元把邏輯地址轉換成線性地址;接著分頁單元把線性地址轉換成物理地址。

❺ 什麼是線性地址和物理地址的區別是什麼呢

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。

❻ 操作系統中地址轉換可分為哪3中方式,比較這3中方式有什麼不同

不知你這地址指的是IP地址還是存儲器的地址
如果指的是網路的,那就是這樣分:
NAT網路地址轉換的3種實現方式:
1、靜態NAT(一對一)
2、動態NAT(多對多)
3、埠多路復用PAT(多對一)
如是是操作系統的存儲器管理,則是
(1)保護方式的地址轉換:處理器內部的分段單元將邏輯地址轉換為線性地址,再由分頁單元將線性地址轉換為物理地址,物理地址通過地址匯流排輸出選擇存儲器晶元中的具體存儲單元。
(2)實地址方式的地址轉換:實地址方式採用實地址存儲模型,注意其的主存空間只有1MB=220位元組),僅使用地址匯流排的低20位,其物理地址范圍為00000H~FFFFFH。
實地址存儲模型也進行分段管理,但有兩個限制:
•每個段最大為64KB •段只能開始於低4位地址全為0的物理地址處
實地址方式的段寄存器直接保存20位段基地址的高16位,段內的偏移地址也用16位表示。
這樣將邏輯地址轉換為物理地址的方法是:
將段寄存器中的數值左移二進制4位(十六進制一位),加上偏移地址就得到20位物理地址。

❼ 32位線性地址到物理地址的轉換

線性地址高10位保存的是地址在頁目錄表中的索引,一個索引佔四個位元組,所以乘以四。

❽ 什麼是線性地址,邏輯地址,虛擬地址,物理地址

邏輯地址(Logical Address) 是指由程式產生的和段相關的偏移地址部分。例如,你在進行C語言指針編程中,能讀取指針變數本身值(&操作),實際上這個值就是邏輯地址,他是相對於你當前進程數據段的地址,不和絕對物理地址相干。只有在Intel實模式下,邏輯地址才和物理地址相等(因為實模式沒有分段或分頁機制,Cpu不進行自動地址轉換);邏輯也就是在Intel保護模式下程式執行代碼段限長內的偏移地址(假定代碼段、數據段如果完全相同)。應用程式員僅需和邏輯地址打交道,而分段和分頁機制對你來說是完全透明的,僅由系統編程人員涉及。應用程式員雖然自己能直接操作內存,那也只能在操作系統給你分配的內存段操作。
線性地址(Linear Address) 是邏輯地址到物理地址變換之間的中間層。程式代碼會產生邏輯地址,或說是段中的偏移地址,加上相應段的基地址就生成了一個線性地址。如果啟用了分頁機制,那麼線性地址能再經變換以產生一個物理地址。若沒有啟用分頁機制,那麼線性地址直接就是物理地址。Intel 80386的線性地址空間容量為4G(2的32次方即32根地址匯流排定址)。
物理地址(Physical Address) 是指出目前CPU外部地址匯流排上的定址物理內存的地址信號,是地址變換的最終結果地址。如果啟用了分頁機制,那麼線性地址會使用頁目錄和頁表中的項變換成物理地址。如果沒有啟用分頁機制,那麼線性地址就直接成為物理地址了。
虛擬內存(Virtual Memory)是指計算機呈現出要比實際擁有的內存大得多的內存量。因此他允許程式員編制並運行比實際系統擁有的內存大得多的程式。這使得許多大型項目也能夠在具有有限內存資源的系統上實現。一個非常恰當的比喻是:你不必非常長的軌道就能讓一列火車從上海開到北京。你只需要足夠長的鐵軌(比如說3公里)就能完成這個任務。採取的方法是把後面的鐵軌即時鋪到火車的前面,只要你的操作足夠快並能滿足需求,列車就能象在一條完整的軌道上運行。這也就是虛擬內存管理需要完成的任務。在Linux0.11內核中,給每個程式(進程)都劃分了總容量為64MB的虛擬內存空間。因此程式的邏輯地址范圍是0x0000000到0x4000000。有時我們也把邏輯地址稱為 虛擬地址。因為和虛擬內存空間的概念類似,邏輯地址也是和實際物理內存容量無關的。邏輯地址和物理地址的「差距」是0xC0000000,是由於虛擬地址->線性地址->物理地址映射正好差這個值。這個值是由操作系統指定的。機理 邏輯地址(或稱為虛擬地址)到線性地址是由CPU的段機制自動轉換的。如果沒有開啟分頁管理,則線性地址就是物理地址。如果開啟了分頁管理,那麼系統程式需要參和線性地址到物理地址的轉換過程。具體是通過設置頁目錄表和頁表項進行的。

❾ 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位的偏移地址,在這個頁中就可以找到對應的地址了——而這就是物理地址!

❿ 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)的硬體電路把線性地址轉換成一個物理地址

閱讀全文

與線性地址怎麼轉換物理地址相關的資料

熱點內容
word中化學式的數字怎麼打出來 瀏覽:745
乙酸乙酯化學式怎麼算 瀏覽:1410
沈陽初中的數學是什麼版本的 瀏覽:1361
華為手機家人共享如何查看地理位置 瀏覽:1052
一氧化碳還原氧化鋁化學方程式怎麼配平 瀏覽:892
數學c什麼意思是什麼意思是什麼 瀏覽:1419
中考初中地理如何補 瀏覽:1310
360瀏覽器歷史在哪裡下載迅雷下載 瀏覽:710
數學奧數卡怎麼辦 瀏覽:1399
如何回答地理是什麼 瀏覽:1033
win7如何刪除電腦文件瀏覽歷史 瀏覽:1062
大學物理實驗干什麼用的到 瀏覽:1492
二年級上冊數學框框怎麼填 瀏覽:1711
西安瑞禧生物科技有限公司怎麼樣 瀏覽:996
武大的分析化學怎麼樣 瀏覽:1254
ige電化學發光偏高怎麼辦 瀏覽:1343
學而思初中英語和語文怎麼樣 瀏覽:1663
下列哪個水飛薊素化學結構 瀏覽:1429
化學理學哪些專業好 瀏覽:1492
數學中的棱的意思是什麼 瀏覽:1069