第八章 外存(接上一節)

2021-09-01 12:31:12 字數 1645 閱讀 8380

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...