計算機作業系統之儲存器管理1

2021-09-14 03:11:12 字數 2335 閱讀 5443

程式的裝入和鏈結

對於通用的計算機而言,儲存層次至少應具有三層:最高層為cpu暫存器,中間為主存,最底層是輔存。在較高檔計算機中,可以根據具體的功能細分為暫存器(cpu)、快取記憶體(屬於主存的一部分)、主存、磁碟快取(同樣是主存的一部分)、磁碟、可移動儲存介質。在儲存層次中,越靠近cpu,儲存介質的訪問速度越快,**越高,相對所配置的儲存容量也越小。其中,cpu暫存器、主存(快取記憶體、主儲存器、磁碟快取)都屬於作業系統管理的範疇,掉電後它們中儲存的資訊將不再存在。

在該層次下,暫存器和主存被稱作可執行儲存器,因為對於儲存在其中的資訊與存放在磁碟中的資訊,計算機所採用的訪問機制是不同的,所耗費的時間也不同。程序可以在很少的時鐘週期內使用一條load或store指令對可執行儲存器進行訪問,但對輔存的訪問需要通過i/o裝置實現,因此,諸如中斷、裝置驅動程式、物理裝置的執行所耗費的時間遠遠高於訪問可執行儲存器的時間。

對於不同層次的儲存介質,由os經行統一管理。os的儲存管理負責對可執行儲存器的分配、**,以及提供在儲存器層次間的資料移動。

1.主存即記憶體,用於儲存程序執行時的程式和資料。通常,處理機都是從主存中取到指令和資料的,並分別放入指令暫存器和資料暫存器;或者將暫存器中的內容存入主存。cpu與外圍裝置的資訊交換一般也依賴與主存的位址空間。由於主存訪問的速度遠低於cpu執行指令的速度,為了緩和這一矛盾,引入了暫存器和快取記憶體。

2.暫存器具有與處理機相同的速度,因此對暫存器的訪問速度最快,完全可以跟cpu協調工作。但**昂貴,儲存量低。

1.快取記憶體介於暫存器和主存之間,主要用於備份主存中常用的部分,以減少處理機對主存的訪問次數。其容量遠大於暫存器,比記憶體往往小三個數量級左右。

通常,程序的程式和資料存放在主存中,每當要訪問時,才被臨時複製到快取記憶體中。這樣,當cpu訪問一組特定的資訊時,首先檢查其是否存在快取記憶體中,如果已存在則直接取出,避免了訪問記憶體。

2.為了緩和i/o的時間遠遠高於對記憶體的訪問時間的矛盾,設定了磁碟快取。主要用於存放使用頻繁的一部分磁碟資料。與快取記憶體不同的是,磁碟快取在主存中並沒有劃分一塊專屬的區域,其本身屬於主儲存器的一部分,並不是實際存在的儲存器。磁碟快取利用主存的部分儲存空間暫時存放磁碟中的部分資料,因此輔存的資料必須要提前寫入主存才能使用。

使用者程式要在系統中執行,必須先將它裝入記憶體,通常有以下步驟:

(1)編譯,由編譯程式對源程式進行編譯,形成若干個目標模組;

(2)鏈結,由鏈結程式將編譯後的形成的一組目標模組以及他們所需要的庫函式鏈結在一起,形成乙個完整的裝入模組。

(3)裝入,由裝如程式將裝入模組放進記憶體。

即將裝入模組放進記憶體。

(1)絕對裝入方式

在許久之前,作業系統只能執行單道程式,即記憶體中某時間只可能有乙個程序在執行。在這種情況下是有能力預知程式將駐留在記憶體的什麼位置。此時可以採用絕對裝入的方式。絕對裝入程式根據裝入模組的位址(可以程式設計師直接指定,也可以編譯或彙編時生辰)裝載程式。此時程序的邏輯位址與記憶體中的實體地址完全相同,不需要對程式和資料的位址進行修改。

(2)可重定位裝入方式

在多道程式環境下,編譯程式不可能預知編譯後的目標模組應放在記憶體中的何處。因此對於使用者程式編譯後形成的多個目標模組,他們的位址都是從0開始的,那麼程式中的其他位址也是基於此起始位址計算的。此時應當採用可重定位的裝入,它根據記憶體的使用情況將程式裝到合適的位置。

這樣的話,程式的起始位址在物理記憶體中不在是邏輯位址的起始位址(0)了,相應的程式中的其他位址也應當重新計算,我們把這個過程成為重定位。

如果位址變換在程序裝入時一次完成,以後不再改變,稱之為靜態重定位。

(3)動態執行時的裝入方式

實際情況是,程序在執行時,其記憶體中的位址往往需要經常改變,例如,在具有對換功能的os中,每次程序被換出再換入時位址都是不一樣的,難道每次都在裝入的時候計算一次麼?不。動態執行裝入程式把裝入模組放入記憶體後,並不立即計算其各個位址,而是直至程式執行時才去計算。因此,剛剛裝入的程序其位址依然是邏輯位址。

為了使位址轉換不影響指令的執行速度,這種方式需要一種重定位暫存器的支援。關於重定位暫存器,請看 計算機作業系統之儲存器管理2。

即將目標模組和庫函式鏈結為完整的裝入模組。

(1)靜態鏈結

在程式裝入之前就完成鏈結的方式。需要注意一下幾點:

1.對相對位址的修改。目標模組和庫函式鏈結為完整的裝入模組形成乙個整體。好比a,b,c三個模組鏈結為abc,那麼b的起始位址變為了a的結束位址+1,c也類似。

2.變換外部呼叫符號。例如把call b 更改為 jsp 「add」。

(2)裝入時動態鏈結

採用的是邊裝入邊鏈結的方式。在裝入目標模組時,如果發生乙個外部呼叫,會引發裝入程式去尋找相應的外部目標模組,並將其也裝入記憶體。

(3)執行時動態鏈結

在程式執行的時候,如果發現某個模組沒有被裝進記憶體,立即由os去找到該模組,並將其裝入記憶體,並鏈結到呼叫者模組。

計算機作業系統 儲存器管理

1.1 單一連續分配 1.2 固定分割槽分配 1.2.1 分割槽大小相等 1.2.2 分割槽大小不相等 1.3 動態分割槽分配 1.3.1 資料結構 1.3.2 動態分配分割槽演算法 1.3.2.1 基於順序搜尋的動態分割槽分配演算法 1.3.2.1.1 首次適應演算法 first fit 1.3....

計算機作業系統之儲存管理

儲存管理 就是對記憶體的管理。記憶體管理提高儲存器的利用率以及從邏輯上擴充儲存器。儲存管理功能 記憶體的 與分配,位址變換 程式中的邏輯位址與記憶體中的實體地址之間的轉換 記憶體擴充 借助虛擬技術或覆蓋技術從邏輯上擴充記憶體容量 記憶體保護 保證進入記憶體的各道作業都在自己的儲存空間執行,互不干擾 ...

計算機作業系統 儲存器管理(4)

基本分頁儲存管理方式 離散分配方式 將乙個程序直接分散地裝入到許多不相鄰接的分割槽中,無需再 緊湊 記憶體。如果離散分配的基本單位是頁,則稱為分頁儲存管理方式 如果離散分配的基本單位是段,則稱為分段儲存管理方式。頁內碎片 在為程序分配記憶體時,以塊為單位將程序中的若干個項分別裝入到多個可以不相鄰接的...