qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

          輕松學(xué)——操作系統(tǒng)之存儲

            存儲我們要講兩點(diǎn)內(nèi)容:

            實存管理:

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

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

            單一連續(xù)分配:

            我們可以看得出來,把整個內(nèi)存區(qū)畫為一個區(qū)。它同一時間在內(nèi)存當(dāng)中只能裝入一個程序,只能用于單用戶、單任務(wù)的執(zhí)行操作。

            固定分區(qū)分配:

             這個跟單一連續(xù)有相似之處,就是內(nèi)存分配的還是比較固定了;但是這個分配還有自己的特點(diǎn),就是把內(nèi)存分為幾個塊,比如是:10K、22K、32K;那么 就會有可能能運(yùn)行三個程序,當(dāng)三個程序占用內(nèi)存在這三個區(qū)域內(nèi)的時候,我們就能運(yùn)行。把這個分區(qū)給定死了,所以一旦有比這些區(qū)域要大的程序要運(yùn)行,那么就 完蛋了,雖然總內(nèi)存夠用,但是也不能運(yùn)行,因為分區(qū)分的太死了。

            可變分區(qū):

            打個比方:有三個過程,一開始和單一連續(xù)分配是一樣的,然后當(dāng)有程序要運(yùn)行的時候,就給該程序分配匹配的空間,當(dāng)用完之后,釋放出來之后,又能拼湊成一個空白的區(qū)域,回到最初的狀態(tài),特別靈活。

            我們繼續(xù)對可變分區(qū)分配方式進(jìn)行探討:

            最佳適應(yīng)法:選 擇等于或最接近需求的內(nèi)存自由區(qū)進(jìn)行分配。這種方法可以減少碎片,但同時也可能帶來更多小得無法再用的碎片。但是這個還算有弊端的,這個我們應(yīng)該怎么理解 呢?比如我們有一個6K的空間,然后分配一個5K的空間給一個程序運(yùn)行,那么剩余的1K一般來說就沒法利用了,因為一般很少有1K的程序要運(yùn)行,所以這個 1K就成了碎片了,那么循環(huán)下來的話,就有很多碎片產(chǎn)生了。但是相對來說,這個分配方法還算是挺好的。

            首次適應(yīng)法:首次就是尋找第一個可用的,可用就是尋找大于等于作業(yè)需求的內(nèi)存的自由區(qū)分配給作業(yè)。這個的好處就是縮短查找時間。

            最差適應(yīng)法:選擇整個主存中最大的內(nèi)存自由區(qū)。比如我有一個5K的程序要運(yùn)行,然后內(nèi)存中最大的自由區(qū)是64K,那么一樣把64K分配給5K的程序運(yùn)行,然后剩下的59K自由區(qū)還能繼續(xù)利用起來。

            循環(huán)首次適應(yīng)算法:不在每次都是從頭開始分配,而是連續(xù)向下匹配。我們畫個圖來理解:

            比如我們的內(nèi)存是這么個分配,那么我們現(xiàn)在有個作業(yè)需要12K內(nèi)存占用,我們就從5K、10K、15K連續(xù)查找合適 的,當(dāng)找到15K的時候,我們就分配給12K,那么當(dāng)我們剩余的3K的時候,剛好有一個程序是3K的需要分配內(nèi)容來運(yùn)行,要是我們按照首次適應(yīng)法來進(jìn)行分 配,因為首次適應(yīng)法是每次都是從頭開始的,所以我們就找到5K的區(qū)域,就把5K分配了;但是要是我們按照循環(huán)首次適應(yīng)的話,我們是連續(xù)分配的,這樣我們就 能剛好把剩余的3K分配給這個程序了;這就是首次和循環(huán)首次的區(qū)別;我這么講應(yīng)該沒有問題了吧。

            虛存管理:

            頁式存儲存儲管理:

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

            這個就是我們的地址轉(zhuǎn)換器,我們想看這個是怎么個工作的,那么我們來看個例子,我們分析例子來進(jìn)行理解:

            我們設(shè)定頁面大小為4K,圖中的邏輯地址用十進(jìn)制表示:我們來求a:

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

            其實只要我們懂得了這個過程,那么剩下的就是進(jìn)制的轉(zhuǎn)換了,不難。

            段式存儲組織

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

            我們有頁式存儲的基礎(chǔ),這個就不在胯下,只是段的大小有點(diǎn)大。

            我們再看看地址轉(zhuǎn)換:

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

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

          posted on 2012-04-18 09:44 順其自然EVO 閱讀(167) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
          博客園   IT新聞   Chat2DB   C++博客   博問  
           
          <2012年4月>
          25262728293031
          1234567
          891011121314
          15161718192021
          22232425262728
          293012345

          導(dǎo)航

          統(tǒng)計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 行唐县| 萨嘎县| 江安县| 大洼县| 海南省| 江油市| 龙泉市| 新野县| 即墨市| 保靖县| 西乌| 米林县| 当阳市| 中宁县| 磐安县| 安达市| 长泰县| 宁津县| 许昌市| 砚山县| 上林县| 镇赉县| 康保县| 海门市| 巴林右旗| 英山县| 黑龙江省| 格尔木市| 丹东市| 大厂| 鄄城县| 运城市| 淮阳县| 三台县| 米泉市| 鸡东县| 延津县| 宁强县| 湟源县| 高阳县| 苏尼特右旗|