存儲空間劃分
❶ 文件存儲空間管理
上篇文章介紹了文件的物理結構並介紹了文件分配的三種方式——連續分配、鏈接分配和索引分配。
本文介紹操作系統對文件存儲空間的管理。
本文內容
存儲空間的劃分: 將物理磁碟劃分為一個個文件卷(邏輯卷、邏輯盤) 。
在存儲空間初始化時,需要將各個文件卷劃分為目錄區、文件區。
有些系統支持超大型文件,可支持由多個物理磁碟組成一個文件卷。
空閑表法:即用一張表記錄磁碟中空閑的盤塊。空閑表的表項由 空閑盤的起始塊號 和 空閑盤塊數 組成。如下圖所示
如何分配磁碟塊:與內存管理中的動態分區分配類似,為一個文件分配連續的存儲空間。同樣可以採用 首次適應演算法、最佳適應演算法、最壞適應演算法,臨近適應演算法 來決定要為文件分配哪些區間。
空閑表法適用於連續分配方式。
例如,如果新創建的文件請求3個塊,按照首次適用演算法,從10號塊開始有5個連續的塊可以滿足需求,所以把10、11、12三個塊分配給文件,分配後的空閑盤塊表如下
這里以回收區前後都是空閑區為例,磁碟是第一幅圖的狀態,如果回收21、22號磁碟塊,那麼回收後的空閑盤塊表如下圖所示。
空閑鏈表法分為兩種: 空閑盤塊鏈和空閑盤區鏈
下圖分別表示空閑盤塊鏈和空閑盤區鏈。
操作系統保存著 鏈頭、鏈尾指針。
如何分配:如過某文件申請K個盤塊,則從鏈頭開始依次摘下K個盤塊分配,並修改空閑鏈的鏈頭指針。
如何回收:回收的盤塊依次掛到鏈尾,並修改空閑鏈的鏈尾指針。
下圖表示分配了3個盤塊
從上面可以看出,空閑盤塊法適用於 離散分配 的物理結構。為文件分配多個盤塊時可能要重復多次操作。
操作系統保存著 鏈頭、鏈尾指針 。
如何分配:若某文件申請K個盤塊,由於空閑盤區鏈將連續的盤塊組成一個盤區,所以若某個盤區大小滿足可以實現一次分配,同樣可以採用首次適用、最佳適用等演算法,從鏈頭開始檢索,按照一定的規則找到一個大小符合要求的空閑盤區分配給文件。若沒有合適的連續空閑塊,也可以將不同的盤區的盤同時分配給一個文件,同樣分配後也需要修改相應的指針鏈和盤區大小等數據。
如何回收:若回收區和某個空閑盤區相鄰,則需要將回收區合並到空閑盤區中。若回收區沒有和任何空閑區相鄰,將回收區作為一個單獨的一個空閑盤區掛到鏈尾。同樣也需要修改鏈表指針和盤區大小等信息。
下圖表示按照首次適用演算法分配3個盤區
從上面可以看出,空閑盤區鏈對 離散分配、連續分配 都適用。為一個文件分配多個盤塊時 效率更高 。
位示圖:磁碟內存被劃分為一個個磁碟塊,可以用二進制位對應一個盤塊。「0」代表盤塊空閑,「1」代表盤塊已分配。位示圖一般用連續的「字」來表示,下圖中一個字的字長是16位,字中的每一位對應一個盤塊。因此可以用(字型大小,位號)對應一個盤塊號。
如何分配:若文件需要K個塊,①順序掃描位示圖,找到K個相鄰或不相鄰的「0」;②根據字型大小、位號算出對應的盤塊號,將相應的盤塊分配給文件;③將相應的位設置為「1」。
如何回收:①根據回收的盤塊號計算出對應的字型大小、位號;②將相應的二進制位設置為「0」。
從上面可以看出:位示圖法對 連續分配和離散分配 都適用。
空閑表法、空閑鏈表法不適用大型文件系統,因為空閑表或空閑聯保可能過大。UNIX系統中採用了 成組鏈接法 對磁碟空閑塊進行管理。這是將上述兩種方法相結合的而形成的一種空閑管理方法。
文件卷的目錄區中專門用一個磁碟塊作為 超級塊 ,當系統啟動時需要將 超級塊讀入內存 。並且要保證與外存中的「超過塊」的數據一致。
內存的分配過程:分配過程是從棧頂取出一空閑盤塊號,將與之對應的盤塊分配給用戶,然後將棧頂指針下移一格,若該盤塊號已是棧底(即第一個盤塊),這是當前棧中最後一個可分配的盤塊號。由於在該盤塊號所對應的盤塊中記有下一組可用的盤塊號,因此,不能直接將它分配掉,需要將它記錄的下一組信息保存下來,所以比須調用磁碟讀過程,將棧底盤塊號所對應盤塊的內容讀入棧中,作為新的盤塊號棧的內容,並把原棧底對應的盤塊分配出去(其中的有用數據已讀入棧中)。然後,再分配一相應的緩沖區(作為該盤塊的緩沖區)。最後,把棧中的空閑盤塊數減1 並返回。
下面舉例說明
如果此時新建一個文件需要一個磁碟塊,那麼此時第一組有100個空閑塊,所以是足夠分配的,將棧頂的盤塊號即201號盤塊對應的盤塊分配出去,如下圖
如果此時又創建一個新的文件,需要99個磁碟塊,就需要將剩下的99個盤塊全部分配出去,但是此時300號盤塊記錄了下一組信息,如果分配出去,信息就是丟失,所以需要將300號盤塊從外存(磁碟)讀入內存,將300號盤塊記錄的信息,寫入空閑盤塊號棧,然後才能將這99塊空閑塊分配出去。具體過程如下圖所示
內存的回收過程:在系統回收空閑盤塊時,須調用盤塊回收過程進行回收。它是將回收盤塊的盤塊號記入空閑盤塊號棧的頂部,並執行空閑盤塊數加 1 操作。當棧中空閑盤塊號數目已達 100 時,表示棧已滿,便將現有棧中的100 個盤塊號記入新回收的盤塊中,再將其盤塊號作為新棧底。
以分配的第一個圖為例,201盤塊被分配出去了,如果此刻有個文件被刪除了,其佔用的盤塊是199號,系統需要回收這個盤塊,發現此時空閑盤塊號棧中記錄空閑塊數為99,直接將盤塊號記錄棧頂,將空閑盤塊數加1即可。
如果此時又有一個文件被刪除了,其佔用的盤塊是190,此時空閑盤塊號數已經達到100了,就需要將現在空閑盤塊棧中信息記入新回收的塊中。
❷ 安卓系統的存儲空間是怎麼劃分的
ROM分為三個分區:
1、系統分區----用於存放Android系統 (Android4.x版系統至少500MB以上)、還原備份(300MB左右)、刷機Recovery資源(約20MB~50MB)、系統級APP(安 裝在此空間的APP需要Root許可權才可卸載)以及交換空間、硬體底層空間等等,加在一起約1.5GB~2GB。這部分空間就好似PC上安裝在C盤中的 Windows系統和硬體驅動程序,以及用於存放一鍵恢復鏡像的隱藏分區。
2、程序分區----用於存放隨機預裝的第三方 APP(用戶可卸載),你自己下載的所有APP主程序都會安裝到這個空間內,手機廠商通常會為此分區預留1GB~3GB的存儲空間。當該空間被占滿後,你 再安裝APP時會出現無空間安裝的報錯提示。我們可以將其理解為PC C盤里的「Program Files」文件夾,只是你所安裝的所有程序默認只能安裝於此且無法修改路徑。「系統分區+程序分區」的總和就是電腦C盤的全部空間。
3、存儲分區----這才是當手機連接PC後所識別 出來的「移動硬碟」,小米3的12.38GB和聯想K900的7.88GB就是存儲分區做斗。這部分空間可以由用戶自由支配,可存放大型游戲的數據包、手戚音樂、 圖片、視頻,可像U盤一樣隨意折騰。換做PC領域,畢胡陵存儲分區就好似D盤、E盤、F盤等非系統分區。
系統分區和程序分區,雖然無法被用戶直接利用,但卻承擔著非常重要的角色。