1. 程式人生 > >通俗的作業系統儲存器瞭解一下!

通俗的作業系統儲存器瞭解一下!

儲存器管理

對於儲存器的管理直接影響到儲存器的利用率,對系統的效能也有重大的影響。這裡筆者所談到的儲存器主要管理的物件主要是是記憶體。計算機執行每條指令基本上都要涉及對儲存器的訪問,因此必須讓儲存器的成本低,速度快(快到能跟上CUP的速度),此外還要擁有比較大的容量,但是就目前而言,做不到。所以引出了具有多層結構的儲存器系統。

一、儲存器多層結構

首先我們來看一下儲存器的層次示意圖:(圖片來自網路《作業系統》第四版第四章)

1、可執行儲存器

在該多層結構中,主儲存器和暫存器又被稱為可執行儲存器

主儲存器:又被稱為記憶體或者主存,用於儲存程式執行時的程式和資料,

暫存器:具有和處理機相同的速度

,執行程式時,處理機往往是從主儲存器中取得指令和資料,然後將指令放入指令暫存器,將資料放入資料暫存器。

2、快取結構

快取結構顧名思義就是做到一個數據緩衝的左右,用來解決速度匹配的問題

快取記憶體:它的速度介於暫存器和主儲存器之間,它的作用就是備份主存中較常用的資料,減少處理機訪問主存的次數。

磁碟快取:由於磁碟的I/O速度遠遠低於主存的訪問速度,所以需要設定磁碟快取,主要用來存放頻繁使用的磁碟資料和資訊。

3、程式的裝入和連線

使用者程式要在系統中執行,必須先將它裝入記憶體,過程包括:

(1)編譯:由編譯程式對使用者源程式進行編譯

(2)連線:由連線程式將編譯後形成的一組目標模組以及它們所需要的庫函式連線起來

(3)裝入:由裝入程式將裝入模組裝入記憶體。

(具體的裝入過程有很多概念,例如絕對裝入方式,可重定位裝入方式,動態執行時的裝入方式等等,這裡筆者沒有提到,有興趣的朋友可以去了解一下~)

二、儲存管理方式

1、連續分配

1.1單一連續分配

這種儲存器的管理方式是把記憶體分為兩部分,分別是系統區使用者區系統區僅提供給OS使用使用者區僅裝有一個使用者程式。這樣做的好處是,在單使用者的環境下,機器由一個使用者獨佔,不會存在其他使用者干擾,即使有破壞行為,也會自己的程式干擾了作業系統,可以恢復,後果不嚴重。但是適用範圍太過單一,只能在單道程式環境下。

1.2固定分割槽分配

出現多道程式以後,為了能在記憶體中裝入多道程式,開始把整個使用者空間劃分為若干個固定大小的區域,每個分割槽中只裝入一道作業。

這種分配方式需要我們考慮到兩個方面,一個是劃分分割槽的方法,一個是記憶體的分配方法

分割槽的方法有兩種:

一種是分割槽的大小相等,這樣做的缺點是缺乏靈活性(因為不同程式需要的記憶體區域大小是不同的),程式太小會形空間浪費,太大一個分割槽不足以裝入程式,程式將無法執行。

另一種是分割槽大小不等,這樣做靈活性更高,但是也無法完全避免上一條中的問題。

記憶體分配的方法,通常是將分割槽按其大小進行排隊。當有程式需要寫入時,首先檢索,找出一個能滿足要求的的,尚未分配的分割槽,如果找不到,則拒絕給該使用者程式分配記憶體。

1.3動態分割槽分配

這種方式可以這樣理解,相當於就是在固定分割槽的基礎上的優化,感覺就是,來一個程式,我就根據一個分割槽分配演算法算出一塊記憶體空間,將這個空間標記位這個程式的,當程式執行完畢了,我在將這塊記憶體回收回來。實現這個功能需要用到三個“法寶”,涉及分配的資料結構,分割槽分配演算法,分割槽的分配和回收操作。

  • 資料結構:這裡用到一個雙向連結串列,動態表示記憶體區域
  • 動態分割槽分配演算法:請往下看。
  • 分割槽的分配和回收操作:這裡筆者也沒有提到(感興趣的朋友自行了解一下吧)

這裡筆者想要著重整理一下動態分割槽分配演算法中基於順序搜尋的動態分割槽分配演算法

(1)首次適應演算法(first fit,FF)

這個演算法要求如下,將空閒的分割槽按地址遞增的次序連線,當分配記憶體時,首先從連結串列鏈首位置順序查詢,找到一塊大小滿足程式要求的區域,然後根據作業大小,在該區域中劃分出一塊記憶體空間。

該演算法優先利用低址部分的記憶體空間,而保留高址部分的大空閒空間。這樣分配會留下許多小的空閒分割槽,稱為碎片。而且每次增加都從低址區域查詢,增加了開銷。

(2)迴圈首次適應演算法(nextfit,NF)

這個相對一第一種,其實就是改變了一點,也就是每次查詢都不從頭開始查詢,而是從上一次找到的空閒分割槽的下一個空閒分割槽開始查詢。

(3)最佳適應演算法(best fit,BF)

這個演算法總是能把滿足要求、有是最小的空閒分割槽分配給作業,避免“大材小用”。為了加速查詢,該演算法要求將所有的空閒分割槽按容量以小到大的順序形成一最大空閒區。

(4)最壞適應演算法(worst fit,WF)

這個演算法總是挑選一個最大的空閒區,從中分隔一部分儲存空間給作業使用。

這樣做的好處是可使剩下的空閒區不至於太小,產生碎片的可能性最小。

下一篇我們會來聊一聊離散儲存管理方式的三種情況。