當前位置:首頁 » 編程軟體 » 編譯程序產生的邏輯地址地址

編譯程序產生的邏輯地址地址

發布時間: 2022-12-16 05:06:56

⑴ 高級語言源程序編譯後產生的地址是邏輯地址還是物理地址

由於操作系統技術的發展,可重用二進製程序技術使用了內存重定位技術,所以從匯編的角度來看即不是邏輯地址也不是物理地址。而且這個概念有些不同,編譯後產生的地址是相對地址,是相對於可執行頭部位置的地址。而邏輯地址是指在指令系統內部使用的用來訪問內存的一個邏輯表示,通常表現為相對於某個段基地址的偏移量。
當可執行程序被載入內存之後,才會有邏輯地址存在,此時可執行程序被如何載入於何處,地址為多少,由操作系統決定,此時cpu訪問程序用的是邏輯地址。一個程序一旦被編譯確定之後基本上變數初始化的順序固定,資源分配位置也固定,設置有編譯器使用預分配機制,然後採用相對地址引用。
注意:某些工具書也稱二進制可執行文件內所有的相對地址范圍是邏輯地址空間,相對地址就是邏輯地址。因為兩者的訪問方式相似,邏輯地址變換依賴cpu或者附加變換機構(硬體),而二進製程序地址空間變換需要操作系統插手管理。
反匯編分析中常常將二進制內部地址稱為邏輯地址,因為反匯編器不能還原原來匯編代碼的地址跳轉空間特性,因此得到一個相對於二進制數據起點位置的相對地址,而和內存和物理存儲都沒有關系。

⑵ 操作系統中 區分編譯後的形成邏輯地址和鏈接後的形成的最終邏輯地址 什麼意思啊

編譯後產生若干個目標模塊,編譯後的邏輯地址指的是每個模塊都從0號單元開始編址,而鏈接將這些模塊鏈接在一起,形成一個完整的裝入模塊,此時的邏輯地址會重新編址,也就是說鏈接後的邏輯地址是將整個模塊從0號單元開始編址。

⑶ 在編譯時為內存分配了邏輯地址,之後連接生成了可執行文件,邏輯地址在運行時會發生變化嗎

應該不會沖突,每個程序在內存中佔用的空間都是獨立的,邏輯地址只是在它自己的空間里的相對地址,正常情況下不會有交集。

⑷ 什麼是邏輯地址和物理地址

有網友問到我:什麼是邏輯地址和物理地址?怎麼轉換?針對此問題,我為大家分享了具體的操作 方法 ,希望對你有幫助!

什麼是邏輯地址

是指由程式產生的和段相關的偏移地址部分。例如,你在進行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. 物理地址作用是什麼

熱點內容
資料庫維度 發布:2025-07-10 13:54:31 瀏覽:797
c語言位域的賦值 發布:2025-07-10 13:54:30 瀏覽:580
查成績密碼忘了怎麼辦 發布:2025-07-10 13:52:21 瀏覽:818
java死 發布:2025-07-10 13:51:30 瀏覽:995
車輛設施配置有哪些 發布:2025-07-10 13:42:28 瀏覽:819
java的成員 發布:2025-07-10 13:38:59 瀏覽:717
荒島餘生ftp 發布:2025-07-10 13:36:46 瀏覽:919
賽車配置有哪些車型 發布:2025-07-10 13:35:15 瀏覽:511
如何在低配置電腦上下和平精英 發布:2025-07-10 13:29:35 瀏覽:597
lms均衡演算法 發布:2025-07-10 13:09:27 瀏覽:340