3.索引分配
系統執行時只涉及部分檔案,fat表無需全部調入記憶體
每個檔案單獨建索引表(物理盤塊索引),記錄所有分配給它的盤塊號;
建立檔案時,便分配一定的外存空間用於存放檔案盤塊索引表資訊;
(1)單級索引分配
分配乙個盤塊儲存該檔案占用的盤塊號
索引形式適合大檔案
中、小型檔案,只需若干鏈結即可。若用索引分配方式,用乙個盤塊存放少量索引資訊反而不適用。
②多級索引
若檔案較大,存放索引表也需要多個盤塊(索引盤塊)。
索引盤塊亦需要按順序管理起來
若索引盤塊數量較少用指標鏈結的方式即可;
若索引盤塊較多,需對索引盤塊也採用索引方式管理,形成多級索引
fbc中存放檔名和主索引號,主索引中再存放一級索引
③混合組織索引(增量式索引組織方式)
乙個索引結點定義為13個位址項:iaddr(0)~iaddr(12),總的來說分為兩種:直接位址、間接位址
iaddr(0)~iaddr(9)存放直接位址,即存檔案資料的盤塊號(僅需訪問磁碟一次)
iaddr(10)存放單級索引的索引盤塊號(需兩次訪問磁碟)
剩餘的用於檔案較大時存放多級索引資料。
iaddr(11)存放二級索引的主索引盤塊號(需三次訪問磁碟)
iaddr(12)存放**索引的主索引盤塊號(需四次訪問磁碟)
4、儲存空間的管理
為實現儲存空間分配,系統需要:
記住空閒儲存空間使用情況;為空間設定相應的資料結構;
提供對儲存空間分配、**的操作手段。
典型的管理方法:
(1)空閒表和空閒鍊錶法
①空閒表法
常用於連續分配管理方式
資料結構
系統為外存上的所有空閒區建立一張空閒表
每個空閒區對應乙個空閒表項
(表項包括序號、空閒區的第乙個盤塊號、空閒盤塊數等。)
將所有空閒區按其起始盤塊號遞增的次序排列
②空閒鍊錶法
將所有空閒盤區拉成一條空閒鏈。
資料結構:鏈
根據構成鏈所用基本元素的不同,可把鍊錶分成兩種形式:
ⅰ空閒盤塊鏈
優點:分配和**乙個盤塊的過程非常簡單,鍊錶長,大量分配時需要操作的指標多
ⅱ空閒盤區鏈
鍊錶長度不定,分配時操作的指標數量相對較少,但分配**操作相對複雜。
(2)位示圖法
總塊數:mn
盤塊號計算公式:
j從1開始:盤塊號 = 列總數(i-1)+ j
j從0開始:盤塊號 = 列總數*(i-1)+ j+1
根據盤塊算行列計算公式:
i從1開始:i=(盤塊號-1)/列數+1;j=(盤塊號-1)%列數+1
i從0開始:i=(盤塊號-1)/列數;j=(盤塊號-1)%列數
優點:從位示圖中很容易找到乙個或一組相鄰接的空閒盤塊。
但限於容量問題,常用於微型機和小型機中
(3)成組鏈結法
大型檔案系統,空閒表或空閒鍊錶太長不方便管理操作。
unix系統中採用成組鏈結法,這是將兩種方法結合而形成的一種空閒盤塊管理方法。
中心思想:
所有盤塊按規定大小劃分為組;
組間建立鏈結;
組內的盤塊借助乙個系統棧可快速處理,且支援離散分配**
過程:???
第八章 指標 第八章 指標
1 什麼是位址 include using namespace std int main 11 在堆中建立對像 我們既然可以在堆中儲存變數,那麼也就可以儲存對像,我們可以將對像儲存堆中,然後通過指標來訪問它 include using namespace std class human 14 在建構...
第八章 8 1 2節練習
決定開博寫文的時候,我已經看到第8章了。這裡,從第8章開始。當然之前的章節,會在後面補上。分界線 題目 練習8.1 編寫函式,接受乙個istream 引數,返回值型別也是istream 此函式須從給定流中讀取資料,直至遇到檔案結束標識時停止。將讀取的資料列印在標準輸出上。完成這些後,在返回留之前。對...
第八章 8 3 1節練習
題目 練習8.9 使用你為8.1.2節第乙個練習所寫的函式列印乙個istringstream物件的內容。個人解答 參考書上給出的範例,這個程式應該很容易寫出來 istream func istream in for auto i in buf cout endl in.clear return in...