1. 程式人生 > >軟考之路--你存在我深深的腦海裡

軟考之路--你存在我深深的腦海裡

        小時候,總是期待著過年,過年可以吃到好多好吃的,暴露了小編的本質,哈哈,最讓我期待的,就是壓歲錢了,七大姑八大姨這個給一個紅包,那個給一個紅包,爸爸又會以同樣的方式給她們的孩子,我們孩子從中得到的是純利潤,然後,恨不得連睡覺都緊緊握住自己的存錢筒,想著,要去買什麼好吃的呢,在小編的理解中,把壓歲錢存在一起,堆積起來的過程,就是儲存,在我們的計算機中,官方定義如下儲存就是根據不同的應用環境通過採取合理、安全、有效的方式將資料儲存到某些介質上並能保證有效的訪問,總的來講可以包含兩個方面的含義:一方面它是資料臨時或長期駐留的物理媒介;另一方面,它是保證資料完整安全存放的方式或行為。儲存就是把這兩個方面結合起來,向客戶提供一套資料存放解決方案。今天小編主要就這篇總結一下,作業系統中的儲存方面的知識,首先,看下面一張圖,小編會順著這張圖的脈絡,一一介紹儲存的相關知識點,有不同意見的小夥伴歡迎討論交流。

                            

       首先,我們來看一下實存管理的單一連續分配,固定分割槽分配和可變分割槽分配,我們來看一張圖,把這三個放在一起對比著來看:

                 

        把上面的內容進行對比,我們很容易可以看出來,只有可變分割槽分配的空間是可變的,然後單一連續分配和固定分割槽分配都是靜態的,根據三個分配的名字,我們也可以很好的對這三個概念進行理解,接著,我們來深入瞭解這三個分配,首先:

         單一連續分配

         

        我們可以看得出來,把整個記憶體區畫為一個區。它同一時間在記憶體當中只能裝入一個程式,只能用於單使用者、單

任務的執行操作。

       固定分割槽分配

       

      這個跟單一連續分配有異曲同工之妙,就是記憶體分配的比較固定,除此之外,固定分割槽分配還有自己的特點,就是把記憶體分為幾個塊,比如是:10K、12K、32K;那麼就會有可能執行三個程式,當三個程式佔用記憶體在這三個區域內的時候,我們就能執行。把這個分割槽給固定住了了,所以一旦有比這些區域要大的程式要執行,那麼就玩完了,雖然總記憶體夠用,但是也不能執行,因為分割槽分的太死了。

       可變分割槽分配

               

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

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

       最佳適應法

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

       首次適應法

       首次就是尋找第一個可用的,可用就是尋找大於等於作業需求的記憶體的自由區分配給作業。這個的好處就是縮短查詢時間。

       最差適應法

       選擇整個主存中最大的記憶體自由區。比如我有一個5K的程式要執行,然後記憶體中最大的自由區是64K,那麼一樣把64K分配給5K的程式執行,然後剩下的59K自由區還能繼續利用起來。

       迴圈首次適應演算法

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

        

       比如我們的記憶體是這樣進行分配,那麼我們現在有個作業需要12K記憶體佔用,我們就從5K、10K、15K連續查詢合適的,當找到15K的時候,我們就分配給12K,那麼當我們剩餘的3K的時候,剛好有一個程式是3K的需要分配內容來執行,要是我們按照首次適應法來進行分配,因為首次適應法是每次都是從頭開始的,所以我們就找到5K的區域,就把5K分配了;但是要是我們按照迴圈首次適應的話,我們是連續分配的,這樣我們就能剛好把剩餘的3K分配給這個程式。

        虛存管理

        接著,我們來講解一下虛存管理,虛存管理包括頁式儲存儲存和段式儲存管理,小編會從優缺點和地址轉換圖兩個方面進行總結,最後通過一個例題結合理論知識來回顧我們的知識點。

        頁式儲存管理 

         

        通過使用者程式和記憶體的分塊,使用者程式分為n個頁面,頁表起記錄的作用。接下來我們看地址轉換圖:

        

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

       

我們的解題過程應該是這樣的,我們的邏輯地址是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。其實只要我們懂得了這個過程,那麼剩下的就是進位制的轉換了。

        段式儲存組織

從使用者出發,將一個程式分成幾個塊:

       

從使用者出發,將一個程式分成幾個塊:我們有頁式儲存的基礎,這個就不在胯下,只是段的大小有點大。我們再看看地址轉換:

        

       段式儲存方式的演算法和也是儲存方式的演算法一致,在這裡就不贅述了。

       小編寄語:該博文,小編主要介紹了儲存的相關知識點,分別從實存管理和虛存管理兩個方面進行分析,實存管理的部分,從單一連續分配,固定分割槽分配和可變分割槽分配進行講解,虛存管理從頁式儲存管理和段式儲存管理進行講解,對儲存這方面的知識小編接觸的不多,理解比較淺顯,上述知識點的內容都是小編自己傻傻的理解,有不同理解的小夥伴歡迎討論交流,軟考之路,未完待續......