程式裝入和鏈結
程式在經過編譯成目標模組(.obj)檔案,鏈結程式鏈結之後,需要將對應的模組裝入記憶體,有三種方式:
(1)絕對裝入
,絕對裝入程式按照裝入模組中的位址,將程式和資料裝入記憶體。由於程式中的邏輯位址與實際位址完全相同,不需要對程式和資料的位址進行修改。
——只適用於單道程式環境(也就是說,基本上接觸不到了)
(2)可重定位裝入
,在多道程式環境中,多個目標模組的起始位址通常都是從0開始的,裝入時對目標程式中的指令和資料的修改過程稱為
重定位。位址變換通常是在裝入時一次完成的,又稱為靜態重定位。最大特點是乙個作業裝入記憶體時必須分配其要求的全部記憶體空間,如果沒有足夠記憶體,就無法裝入。作業一旦進入記憶體,整個執行期間不能在記憶體中移動,也不能再申請記憶體空間(c語言的
malloc
和c++
的new
怎麼辦。。。
)(3)
動態執行時裝入
,即動態重定位,需要乙個重定位暫存器的支援。最大特點就是可以將程式分配到不連續的儲存區中。執行之前裝入部分**即可執行,執行期間可以根據需要動態申請記憶體,可以用使用者提供乙個比儲存空間大的多的位址空間。
邏輯位址與實體地址的關係:
編譯後,每個目標模組都是從0號單元開始編址,稱為該目標模組的
相對位址(或邏輯位址)。當鏈結程式將各個模組鏈結成乙個完整的可執行目標程式時,鏈結程式依次按各個模組的相對位址構成統一的從0號單元開始編址的邏輯位址空間
。當裝入程式將可執行**裝入記憶體時,必須通過位址轉換將邏輯位址轉換成實體地址,這個過程稱為位址重定位。
記憶體管理的概念
程序和記憶體空間 程序 一旦程式正在執行,它就叫程序,程序擁有它自己的記憶體,檔案控制代碼及其他系統資源.windows工作列顯示的是主視窗而不是程序,單個程序可能有幾個主視窗,每個視窗都由它自己的執行緒支援.每個程序都具有它自己 私有 的4gb虛擬位址空間,它包括 程式的exe映像,所載入的任何非...
記憶體的管理的概念
1 作業系統要怎麼記錄哪些記憶體區域已經被分配出去了,哪些又還空閒呢?2 當程序執行結束之後,如何將程序占用的空間 呢?3 很多位置都可以放,那應該放 呢?提供虛擬化技術,從邏輯上對記憶體空間進行擴充套件,通過只有4g或8g記憶體的系統可以執行幾十或上百g的程式。1 作業系統負責實現邏輯位址到實體地...
Linux記憶體管理之基本概念介紹(一)
linux記憶體管理之基本概念介紹 一 linux記憶體管理之物理記憶體管理 二 linux記憶體管理之記憶體管理單元 mmu 三 linux記憶體管理之分配掩碼 四 linux記憶體管理之夥伴系統 五 linux記憶體管理之slab機制 六 linux記憶體管理之紅黑樹 七 linux記憶體管理之...