存儲管理
存儲管理
在操作系統中,負責管理存儲器層次結構的程序稱為存儲管理器。
4.1 基本的存儲管理
4.1.1 單道程序存儲管理
對於A圖,操作系統位於主存最底部的RAM,即隨機存取存儲器中,用戶程序位於主存的上部。
對於B圖,操作系統位於主存最高端的只讀存儲器裏(ROM),(其實本身屬於一種映像區域,映像了主板上的基本的輸入輸出系統)。
對於C圖,設備的驅動程序位於內存最高端的ROM中,操作系統的其余部分位於低端的RAM中,中間是用戶的應用程序。如MS-DOS系統。
對於IBM操作系統,系統位於ROM中的部分即為BIOS。
4.1.2 固定分區的多道程序系統
對於常見的系統,我們希望能夠支持更多的程序,當某個程序處於等待I/O的時候,可以讓CPU為別的程序服務,來提高系統整體的性能。
因此可以用劃分分區的方法來同時加載多個程序,可以把主存分為幾個大小不同的分區,根據程序的不同,來把他們加載到不同的分區中。而同時,程序也可按照單個輸入隊列的方式進行輸入,也可以按照多個輸入隊列的方式進行輸入。
對於左圖,由於作業的大小類似的時候,而且眾多的作業大小都類似,而此時分區的大小固定,我們該選擇合適大小的分區來運行這個作業,這樣的話,類似的作業就被分到了一起,而那些與作業的大小不一致的分區,就必然會出現空閑狀態,那些分到一起的進程卻不得不等待,等待要分到內存空間。忙得忙,閑的閑。
對於右圖,所有的作業都被放入一個隊列,每次當有分區被釋放的時候,就從等待隊列中尋找,最適合這個分區大小的進程,這樣做是為了避免把大的分區分給那小的作業,免得資源被浪費,但這樣卻常常把小的作業推到了後面;但對於操作系統,我們做普通的要求就是簡單的操作能被最快的反饋給我們,即小的作業能夠被最快的處理,因此,為了總能夠滿足用戶的這個要求,一般要專門保證總有一個小的分區,專門來處理那些小的事件、作業,免得被大的作業搶去分區。
或者通過加權來判斷作業被推後的次數,到了一定的程度,就不再跳過而是立即執行。
4.1.3 重定位和存儲保護
多道程序導致了分區的產生,而分區也導致了新的問題,即程序的重新定位和保護。
原因: 當程序裝入內存時, 操作系統要為該程序分配一個合適的內存空間,由於程序的邏輯地址與分配到內存物理地址不一致, 而CPU執行指令時,是按物理地址進行的,所以要進行地址轉換。
如果多個作業都是為某一個程序服務,當主程序調用這些作業的時候,就需要定位到這些作業,保證程序的運行(主函數和分別編譯好的子函數)。這時,鏈接的時候,鏈接器按照我們的分區機制來定位程序。
定位的常見方法:
靜態重定位
當用戶程序被裝入內存時,一次性實現邏輯地址到物理地址的轉換,以後不再轉換(一般在裝入內存時由軟件完成)。
動態重定位
在程序運行過程中要訪問數據時再進行地址變換(即在逐條指令執行時完成地址映射。一般為了提高效率,此工作由硬件地址映射機制來完成。硬件支持,軟硬件結合完成)。硬件上需要一對寄存器的支持。
存儲保護
保護系統程序區不被用戶侵犯(有意或無意的)
不允許用戶程序讀寫不屬於自己地址空間的數據(系統區地址空間,其他用戶程序的地址空間)
保護過程——防止地址越界
每個進程都有自己獨立的進程空間,如果一個進程在運行時所產生的地址在其地址空間之外,則發生地址越界。即當程序要訪問某個內存單元時,由硬件檢查是否允許,如果允許則執行,否則產生地址越界中斷,由操作系統進行相應處理。
一般由硬件提供一對寄存器:
基址寄存器:存放起始地址
限長寄存器:存放長度
(上界寄存器/下界寄存器)
保護過程----防止操作越權
對於允許多個進程共享的存儲區域,每個進程都有自己的訪問權限。如果一個進程對共享區域的訪問違反了權限規定,則發生操作越權。即讀寫保護。
存儲管理