【我的筆記】內(nèi)存管理

1、

存儲器是硬件資源。包括內(nèi)存和外存。

程序、數(shù)據(jù)保存在外存中,斷電后不會丟失。內(nèi)存是CPU直接交互的,內(nèi)存塊。

處理器不會直接訪問外存,程序裝入內(nèi)存后才能執(zhí)行,數(shù)據(jù)讀入內(nèi)存后才能使用。

內(nèi)存由進程共享。

內(nèi)存是外存的緩存,cache 是內(nèi)存的緩存。

多層次存儲器是速度與成本折中的結(jié)果。

一個數(shù)據(jù)會同時出現(xiàn)在多個地方。

對磁盤中某整數(shù) A 進行修改,引起的數(shù)據(jù)傳遞過程:磁盤(外存)-->內(nèi)存-->cache-->寄存器


2、

內(nèi)存管理的任務是:(1)實現(xiàn)物理內(nèi)存的分配與回收

(2)運行程序、加載程序、實現(xiàn)地址映射

(3)為進程模擬出盡可能大的虛擬內(nèi)存空間

(4)提供虛擬內(nèi)存的隔離、保護、共享

內(nèi)存管理工作分為:物理內(nèi)存管理、邏輯內(nèi)存管理、虛擬內(nèi)存管理


3、地址空間

物理內(nèi)存單元只能用物理地址訪問。

有些設備中的寄存器、緩存等也必須用物理地址訪問。

不能訪問任何實體的物理地址稱為空洞。

有效物理地址的集合稱為物理地址空間。

內(nèi)存條中的有些內(nèi)存因無地址而不能使用。

物理地址用于標識物理內(nèi)存單元,地址與內(nèi)存單元的對應關系是固定不變的。

解決:進程使用的地址成為邏輯地址。一個進程所使用的所有邏輯地址的集合稱為邏輯地址空間。

邏輯地址是在編譯(匯編)、連接、加載過程中確定的。

符號地址:程序中使用的標號、變量名、函數(shù)名等,不是物理地址。 --> 命名空間

相對地址:相對于某位置的偏移量,如相對于開始或當前位置的偏移量,不是物理地址。


4、編譯、連接、加載

程序員用高級或匯編語言開發(fā)程序,源程序通常由多個模塊組成,處理器不認識高級語言、匯編語言。

(1)編譯:需要將源程序模塊 翻譯/編譯/匯編 成目標代碼

(2)連接:目標代碼中含有對其它模塊或庫中符號的引用,連接程序?qū)⒕幾g后的目標模塊連接在一起,并解析其中的跨模塊符號地址引用,形成可執(zhí)行模塊。

(3)加載:可執(zhí)行文件中的程序裝入內(nèi)存形成進程映像

Loader 的任務就是將可執(zhí)行模塊加載到內(nèi)存。

①名字空間:源程序中由符號名字(變量名、函數(shù)名、標號等)構(gòu)成的集合。

②邏輯空間:程序中相對地址的集合,也稱邏輯地址空間。(以0為基址順序排列)

③物理空間:內(nèi)存中一系列物理單元的集合,也稱為物理空間或絕對空間。


5、完成地址裝換的時機

(1)程序員完成地址轉(zhuǎn)換(絕對加載):編程時就用物理地址。物理地址又稱絕對地址。

(2)編譯程序完成地址轉(zhuǎn)換:程序使用符號地址,編譯后為絕對地址。

(3)加載程序完成地址轉(zhuǎn)換(靜態(tài)可重定位加載):編譯或匯編程序?qū)⒎柕刂忿D(zhuǎn)換成相對地址,加載程序在裝入程序時,臨時為其選擇一個內(nèi)存位置,如Base,而后將程序中所有相對地址都加上Base,一次性為程序定位,稱靜態(tài)重定位。程序模塊中應包含重定位信息。

(4)在執(zhí)行時完成地址轉(zhuǎn)換(動態(tài)可重定位加載):編譯或連接程序生成可重定位的目標模塊,其中的地址都是相對的。加載程序直接將可重定位模塊裝入內(nèi)存,不做地址轉(zhuǎn)換。處理器在執(zhí)行程序的過程中,逐步完成相對地址到物理地址的轉(zhuǎn)換。動態(tài)重定位,需要硬件支持。

(重定位寄存器,段描述符、段寄存器、頁目錄、頁表)

完成連接的時機:

(1)在程序設計時。所有的程序代碼都放在一個文件中。

(2)在編譯(匯編)時。將所有程序源代碼集中在一起編譯(匯編)。

(3)在加載前。由連接程序?qū)⒏髂繕四K整合在一起,形成完整的可重定位目標模塊。

(4)在加載時。加載程序讀入主模塊,而后根據(jù)其中的符號引用逐個讀入子模塊,重定位子模塊,并解析各符號引用。

(5)在執(zhí)行時(動態(tài)連接)。加載程序只裝入程序的主模塊,不解析其中的符號引用。當程序用到某符號時(如子程序調(diào)用),再加載對應的目標文件并解析符號引用。

可執(zhí)行程序中有指示信息,如子模塊對應的文件、符號在子模塊中的位置等。需要專門的動態(tài)連接程序。子模塊通常在共享庫(動態(tài)連接庫)中。

現(xiàn)在均是在執(zhí)行時完成:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容