輕鬆學—操作系統之存儲

存儲我們要講兩點內容:

實存管理:

存儲我們只需要瞭解三種分配方法即可:單一連續分配、固定分區分配、可變分區分配;其實我們經常講對於一些不好區分的概念,我們畫個表,把他們放在一起來進行對比,那麼通過對比來理解,那真的是太爽了;所以呢,我們也畫個表,把這幾個概念放在一起來進行區分和理解,看圖:

這樣一對比,我們就能看的出來,只有可變分區分配的空間是可變的;然後另外兩個分配是靜態的。其實顧名思義也就差不多能理解的差不多,沒有難度的,我們再深入一點來了解:看幾個圖:

單一連續分配:

我們可以看得出來,把整個內存區畫爲一個區。它同一時間在內存當中只能裝入一個程序,只能用於單用戶、單任務的執行操作。

固定分區分配:


這個跟單一連續有相似之處,就是內存分配的還是比較固定了;但是這個分配還有自己的特點,就是把內存分爲幾個塊,比如是:10K、22K、32K;那麼就會有可能能運行三個程序,當三個程序佔用內存在這三個區域內的時候,我們就能運行。把這個分區給定死了,所以一旦有比這些區域要大的程序要運行,那麼就完蛋了,雖然總內存夠用,但是也不能運行,因爲分區分的太死了。

可變分區:


打個比方:有三個過程,一開始和單一連續分配是一樣的,然後當有程序要運行的時候,就給該程序分配匹配的空間,當用完之後,釋放出來之後,又能拼湊成一個空白的區域,回到最初的狀態,特別靈活。

我們繼續對可變分區分配方式進行探討:

最佳適應法:選擇等於或最接近需求的內存自由區進行分配。這種方法可以減少碎片,但同時也可能帶來更多小得無法再用的碎片。但是這個還算有弊端的,這個我們應該怎麼理解呢?比如我們有一個6K的空間,然後分配一個5K的空間給一個程序運行,那麼剩餘的1K一般來說就沒法利用了,因爲一般很少有1K的程序要運行,所以這個1K就成了碎片了,那麼循環下來的話,就有很多碎片產生了。但是相對來說,這個分配方法還算是挺好的。

首次適應法:首次就是尋找第一個可用的,可用就是尋找大於等於作業需求的內存的自由區分配給作業。這個的好處就是縮短查找時間。

最差適應法:選擇整個主存中最大的內存自由區。比如我有一個5K的程序要運行,然後內存中最大的自由區是64K,那麼一樣把64K分配給5K的程序運行,然後剩下的59K自由區還能繼續利用起來。

循環首次適應算法:不在每次都是從頭開始分配,而是連續向下匹配。我們畫個圖來理解:


比如我們的內存是這麼個分配,那麼我們現在有個作業需要12K內存佔用,我們就從5K、10K、15K連續查找合適的,當找到15K的時候,我們就分配給12K,那麼當我們剩餘的3K的時候,剛好有一個程序是3K的需要分配內容來運行,要是我們按照首次適應法來進行分配,因爲首次適應法是每次都是從頭開始的,所以我們就找到5K的區域,就把5K分配了;但是要是我們按照循環首次適應的話,我們是連續分配的,這樣我們就能剛好把剩餘的3K分配給這個程序了;這就是首次和循環首次的區別;我這麼講應該沒有問題了吧。

虛存管理:

頁式存儲存儲管理:

通過用戶程序和內存的分塊,用戶程序分爲n個頁面,頁表起記錄的作用。接下來我們看地址轉換圖:


這個就是我們的地址轉換器,我們想看這個是怎麼個工作的,那麼我們來看個例子,我們分析例子來進行理解:


我們設定頁面大小爲4K,圖中的邏輯地址用十進制表示:我們來求a:

我們的過程應該是這樣的,我們的邏輯地址是8644(十進制的),那麼轉換成二進制的爲:10 0001 1100 0100;我們得知頁面爲4K=2的12次方,所以頁內地址就爲12位,所以a的後半部分爲10 0001 1100 0100的後12位,爲0001 1100 0100,那麼剩下的最高兩位爲頁號:10,轉換成十進制爲2,然後找出物理塊號爲8,8轉換成二進制位1000,所以物理快號頁內偏移拼合得1000 0001 1100 0100,化爲十進制得33220。

其實只要我們懂得了這個過程,那麼剩下的就是進制的轉換了,不難。

段式存儲組織

從用戶出發,將一個程序分成幾個塊:

我們有頁式存儲的基礎,這個就不在胯下,只是段的大小有點大。

我們再看看地址轉換:


這個算法跟咱們的頁式存儲是一樣的。大家動手試試。

存儲講起來挺有意思,我理解也許會有偏差,希望大家多多指正,不勝感激~


發佈了62 篇原創文章 · 獲贊 50 · 訪問量 96萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章