操作系統3-內存管理(存儲器管理概述)
作者:互联网
操作系統3-內存管理(存儲器管理概述)
1. 存儲器管理概述
1.1 存儲器的層次
寄存器 -> 內存:包括內存、高速緩存、硬盤緩存 -> 外部存儲器
從左至右存儲速度遞減,存儲容量遞增。
高速緩存雖然與內存同為內存,但是其採取了靜態RAM(SRAM),而內存採用了動態RAM(DRAM)。SRAM的存儲速度接近於CPU的運行速度,但是成本遠高於內存,因此容量比內存小。
寄存器則是CPU內部用來存儲數據的一塊區域。
1.2 用戶程序的處理過程
系統對用戶程序的處理分為以下幾個階段:
(1) 編譯。由編譯程序將用戶程序編譯成若干個目標模塊。
(2) 鏈接。由鏈接程序將編譯後的目標代碼及它們需要的庫函數鏈接成一個裝入模塊。
(3) 裝入。由裝入程序將裝入模塊裝入內存。
1.3 存儲管理的幾個基本概念
邏輯空間和物理空間
邏輯空間是用戶的編程空間,也是程序空間。若是用機器語言編程,邏輯空間可以自己確定,若是用高級語言,則邏輯空間由編譯程序確定。編程空間通常從0開始編址。邏輯地址也叫虛地址、編程地址、CPU地址、相對地址等。
物理空間是由物理存儲單元確定的,即內存空間。是由存儲器總線掃描出來的空間。一個操作數加載內存的地址稱為物理地址。
重定位和地址變換
為確定程序在內存中的物理位置而進行地址變換叫做重定位。地址變換即將程序中的邏輯地址,包括指令本身的地址和指令中的操作數地址逐個變換成物理地址。
重定位有以下兩種情況:其一,當程序裝入內存運行時,必須根據所分得空間的位置將程序的邏輯地址變換為響應的物理地址,以便將該程序定位在所分得的物理空間內;其二,程序在執行過程中,由於種種原因,在內存中挪動了位置,需要將程序的邏輯地址進行變換,以便該程序重新定位在新的位置上。
如果地址變換在程序執行之前由編譯裝配程序完成,稱為靜態重定位。如果地址變換在程序執行過程中發生,稱為動態重定位。
目標程序裝入內存的方式
程序只有裝入內存才能運行。裝入方式有絕對裝入方式、可重定位裝入方式和動態運行時裝入方式。
絕對裝入方式。在編譯時,如果知道程序將駐留在內存中什麼地址,那麼編譯程序將產生絕對地址的目標代碼。裝入程序根據裝入模塊中的地址,將數據和地址裝入內存,無須對程序和數據的地址進行修改。
可重定位裝入方式。在程序執行之前,由操作系統的重定位裝入程序完成。一般是編譯程序不能預知所編譯的模塊在內存中的什麼位置。重定位程序根據內存起始地址,直接修改所涉及的邏輯地址,將內存的起始地址加上邏輯地址得到正確的內存地址。
如程序中的某一條指令要取邏輯地址為3500的一個數,若程序裝入的起始地址為10000,則裝入程序將該地址修改為13500,這樣程序才能取到正確的數字。
動態運行時裝入方式。在程序運行時完成。這種轉換通常採用一個重定位寄存器完成。每次進行存儲訪問時,將取出的邏輯地址加上重定位寄存器的內容,形成正確的內存地址。這種方法通常用於多道程序環境中,因為有多道程序運行時,進程經常需要換進換出內存,每次進入內存其在內存的物理地址都是不一樣的。因此需要根據重定位寄存器來得到正確的內存地址。
目標程序鏈接
實現鏈接的方法有靜態鏈接、裝入時動態鏈接和運行時動態鏈接等。
- 靜態鏈接。即將若干個模塊鏈接在一起,形成一個完整的裝入模塊。需要完成的工作是對相對地址進行修改,同時變換外部調用符號。
- 裝入時動態鏈接。這種方式中裝入程序邊將程序裝入內存邊鏈接,當在程序中發現外部調用模塊時,就去尋找相應的外部目標模塊,再裝入內存。
- 運行時動態鏈接。在這種鏈接方式中,可將某些目標模塊的鏈接推遲到執行時才進行。在執行過程中,若發現某一個調用模塊沒有裝入內存,由操作系統去找該模塊,由它裝入內存,並鏈接到調用模塊上。
标签:系統,存儲器,模塊,程序,內存,裝入,地址,鏈接 来源: https://www.cnblogs.com/lunar-ubuntu/p/12251789.html