日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

程序的重定位问题(程序装入)

發布時間:2023/12/2 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 程序的重定位问题(程序装入) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在多道程序環境下,要使程序運行,必須先為程序創建進程。而創建進程的第一件事就是:將程序和數據裝入內存。如何將一個用戶源程序變成可在內存中執行的程序,通常都要進過幾個步驟:1.編譯:由compiler將源程序編譯成若干個目標模塊(Object Module);2.鏈接:由Linker將編譯后形成的一組目標模塊以及他們所需要的庫函數連接在一起,形成一個完整的裝入模塊(Load Module);3;裝入:由Loader將裝入模塊裝入內存。


程序的裝入方式一本可分為以下3種:


1.絕對裝入方式(Abosolute Loading Mode)

? ? ? ?在編譯時,如果程序知道將駐留在內存的什么位置,那么,編譯程序將產生絕對地址的目標代碼。絕對裝入方式按照裝入模塊中的地址,將程序和數據裝入內存。裝入模塊被裝入內存后,由于程序中的邏輯地址和實際內存地址完全相同,所以不需要對程序和數據的地址進行修改。


2.可重定位裝入方式(Relocation Loading Mode)

? ? ? ?絕對裝入方式能將目標模塊裝入到內存中事先指定的位置。在多道程序環境下,編譯程序不可能預知所編譯的模塊應該放在內存的何處,因此,絕對裝入方式只適用于單道程序環境。在多道程序環境下,所得到的目標模塊起始地址通常從0開始,程序中的其他地址都是相對于起始地址0計算的,此時應該采用可重定位裝入方式,根據內存當時的情況,將裝入模塊裝入到內存的合適位置。

? ? ? ?值得注意的是:在采用重定位裝入方式將程序裝入內存后,會使裝入模塊中的所有邏輯地址和內存的物理地址不同,解決方法是:在裝入的時候,將裝入模塊中指令和數據的邏輯地址修改為物理地址,這一過程就叫重定位。又因為地址變換是在裝入時一次性完成的,以后不會再改變,所以稱為靜態重定位


3.動態運行時裝入方式(Dynamic Run-time Loading)

? ? ? ? 靜態重定位方式可將裝入模塊裝入到內存中任何允許的位置,所以可以用于多道程序環境;但是這種裝入方式并不允許程序運行時在內存中移動位置因為程序一旦移動的話,就必須修改程序和數據的絕對地址。然而,實際情況是,程序在運行的過程中在內存的位置可能經常要改變,此時就應該采用動態重定位的方式。 ? ? ? ? 動態重定位的裝入程序在把模塊裝入內存后,并不會立即把模塊中的相對地址轉換為物理地址,而是把這種地址轉換推遲到程序真正要執行時才進行。因此,裝入內存后的所有地址仍然是相對地址,為了使地址轉換不影響指令的執行速度,這種方式需要一個重定位寄存器來存儲模塊在內存中的起始地址。

總結

以上是生活随笔為你收集整理的程序的重定位问题(程序装入)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。