二、檔案控制塊和檔案目錄
2.1 檔案屬性
- 檔案控制塊(
File Control Block:FCB
)
為管理檔案而設定的資料結構,儲存管理檔案所需的所有有關資訊(檔案屬性或中繼資料)
- 常用屬性
檔案名,檔案号,檔案大小,檔案位址,建立時間,最後修改時間,最後通路時間,保護,密碼,建立者,目前擁有者,檔案類型,共享計數,各種标志(隻讀、隐藏、系統、歸檔、ASCII/二進制、順序/随機通路、臨時檔案、鎖)
基本檔案操作

6
2.2 檔案目錄、目錄項與目錄檔案
- 檔案目錄
* 統一管理每個檔案的中繼資料,以支援檔案名到檔案實體位址的轉換
-
- 将所有檔案的管理資訊組織在一起,即構成檔案目錄
-
目錄檔案
将檔案目錄以檔案的形式存放在磁盤上
- 目錄項
* 構成檔案目錄的基本單元
-
- 目錄項可以是
,目錄是檔案控制塊的有序集合FCB
- 目錄項可以是
2.3 檔案目錄結構的演化

**說明:**最初是以一級目錄結構,最後慢慢演化成了樹形目錄結構。
2.4 與目錄相關的概念
-
路徑名
絕對路徑名:從根目錄開始
相對路徑:從目前目錄開始
- 目前目錄/工作目錄
-
目錄操作
建立目錄、删除目錄等等
2.4 目錄檔案之間的關聯
三、檔案的實體結構
檔案在存儲媒體上的存放方式
主要解決兩個問題:
- 假設一個檔案被劃分成
塊,這N塊在磁盤上是怎麼存放的?N
- 其位址(塊号或簇号)在
中是怎樣記錄的?FCB
3.1 連續(順序)結構
- 檔案的資訊存放在若幹連續的實體塊中
-
作業系統之檔案管理(中)二、檔案控制塊和檔案目錄三、檔案的實體結構四、檔案系統的實作五、檔案系統執行個體(UNIX)六、UNIX檔案系統一、檔案系統執行個體(FAT) - 在上圖
中,存放者多個連續的檔案,在a
中有些磁盤空間被還回來了。如果有些塊太小,可能就不能再利用了。在b
中我們隻需要給出檔案塊的首位址和塊數即可。FCB
-
優點
簡單
支援順序存取和随機存取
所需的磁盤尋道次數和尋道時間最少
可以同時讀入多個塊,檢索一個塊也很容易
- 缺點
* 檔案不能動态增長,因為可能後面的磁盤空間已經被占據了。如果要增長則需要給出預留白間,但是這樣就導緻了浪費或重新配置設定和移動的開銷。
-
- 不利于檔案插入和删除
- 産生外部碎片:可以使用緊縮技術進行整理
3.2 連結結構
- 一個檔案的資訊存放在若幹不連續的實體塊中,各塊之間通過指針連接配接,前一個實體塊指向下一個實體塊
-
作業系統之檔案管理(中)二、檔案控制塊和檔案目錄三、檔案的實體結構四、檔案系統的實作五、檔案系統執行個體(UNIX)六、UNIX檔案系統一、檔案系統執行個體(FAT) - **說明:**在
中我們隻需要給出第一塊的塊号即可。FCB
* 提高了磁盤空間的使用率,不存在外部碎片問題
-
- 有利于檔案插入和删除
- 有利于檔案動态擴充
* 存取速度慢,不适于随機存取
-
- 可靠性問題,如指針出錯
- 更多的尋道次數和尋道時間
- 連結指針占用一定的空間
于是我們可以對此種結構進行某種改造:檔案配置設定表
FAT
3.3 檔案配置設定表(FAT)

11
**說明:**是把所有實體塊的表指針都幾種存放在一張表中,而不是用一個實體塊的一部分來存放指針。從圖中可以看到檔案A的塊号是4,而其下一個實體塊的表項為7,最後到值為-1則表示結束。那某檔案的起始塊号從哪裡得到?其實起始塊号就記錄在了FCB中。這種結構一般用在Windows中。在UNIX中一般采用索引結構。
3.4 索引結構
- 一個檔案的資訊存放在若幹個不連續實體塊中
- 系統為每個檔案建立一個專用資料結構:索引表,并将這些實體塊的塊号存放在該索引中。
- 索引表就是磁盤塊位址數組,其中地
個條目指向檔案的第i
塊。i
- 那索引表應該存放在何處?
這裡必須知道每個檔案的索引表長度是不一樣的,于是不能存放在FCB中,因為FCB是固定大小的。于是我們在FCB中隻記錄索引表的位址。

12
**說明:**檔案B的索引塊号是24,索引表是存放在一個實體塊中的。索引塊中就記錄了配置設定給這個檔案的實體塊号,可以看到這裡我們是可以随機存取的。
保持了連結結構的優點,又解決了其缺點
* 既能順序存取,又能随機存取
- 滿足了檔案動态增長、插入删除的要求
- 能充分利用磁盤空間
* 較多的尋道次數和尋道時間
-
- 索引表本身帶來了系統開銷,如:記憶體、磁盤空間、存取時間
- 組織方式
- 問題:索引表很大,需要多個實體塊存放時怎麼辦?
* 1、連結方式
一個盤塊存一個索引表,多個索引表連結起來
2、多級索引方式
将檔案的索引表位址放在另一個索引表中
3、綜合模式
直接索引方式與間接索引方式結合
多級索引與綜合模式

13
**說明:**圖上部分是多級索引模式,此模式中頂級索引表中都記錄的是次級索引表位址。而在圖下部分則是綜合模式,頂級索引表中一部分記錄的是直接的實體塊,而另一部分是記錄的次級索表塊位址,即一部分是直接尋址,一部分是間接尋址。
3.5 UNIX的三級索引結構
在
UNIX
檔案系統中采用的是多級索引結構(綜合模式)
- 每個檔案的主索引表有
個索引項(15
中),每項兩個位元組FCB
- 前
項直接存放檔案的實體塊号(直接尋址)12
- 如果檔案大于12塊,則利用第13項指向一個實體塊,在該塊中存放的是一級索引表。假設扇區大小為512位元組,實體塊等于扇區塊大小,一級索引表可以存放256個實體塊号
對于更大的檔案還可以利用第14項和第15項作為二級和三級索引表
問題:采用這種結構,一個檔案最大可以達到多少個實體塊

14
四、檔案系統的實作
4.1 概述
- 實作檔案系統需要考慮磁盤上和記憶體中的内容布局
-
磁盤上
如何啟動作業系統?
磁盤是怎樣管理的?怎樣擷取磁盤的有關資訊?
目錄檔案在磁盤上怎麼存放?普通檔案在磁盤上怎麼存放?
-
記憶體中
當程序使用檔案時,作業系統是如何支援的?
檔案系統的記憶體資料結構
4.2 相關術語
-
磁盤分區
把一個實體磁盤的存儲空間劃分為幾個互相獨立的部分,稱為分區
- 檔案卷
- 磁盤上的邏輯分區,由一個或多個實體塊組成。
* 一個檔案卷可以是整個磁盤或部分磁盤或跨盤(`RAID`)
同一個檔案卷使用同一份管理資料進行檔案配置設定和磁盤空閑空間管理,不同的檔案卷中的管理資料是互相獨立的。
一個檔案卷上包括檔案系統資訊、一組檔案(使用者檔案、目錄檔案)、未配置設定空間
塊或簇:一個或多個(2的幂次方)連續的扇區,可尋址資料庫
格式化
在一個檔案卷上建立檔案系統,即建立并初始化用于檔案配置設定和磁盤空閑空間管理的管理資料
4.3 磁盤上的内容

15
引導區
包括了從該卷引導作業系統所需的資訊,每個卷(分區)都有一個,通常稱為扇區
卷資訊
包括該卷的塊數、塊大小、空閑塊數量和指針、空閑FCB數量和指針等等
4.4 磁盤上檔案系統的布局

16
4.5 記憶體中所需的資料結構(以UNIX為例)

17
五、檔案系統執行個體(UNIX)
5.1 檔案目錄檢索
通路一個檔案–>兩步驟
-
目錄檢索
使用者給出檔案名–>按檔案名查找到目錄項/
根據路徑名檢索:FCB
-
- 全路徑名:從根目錄開始
-
檔案尋址
根據目錄想/
中檔案實體位址等資訊,計算出檔案中任意記錄或字元在存儲媒體上的位址FCB
5.2 目錄檔案實作時的改進
- 問題:如何加快目錄檢索?
- 一種解決方案目錄項分解法:即把
分成兩部分FCB
-
- 符号目錄項:檔案名,檔案号
- 基本目錄項:除檔案名外的所有字段
- 
18
**說明:**每個方格表示目錄檔案(由目錄項組成),每個橢圓表示普通檔案。如何我們采用目錄項分解法,于是符号目錄項中的内容就特别簡單,此時目錄項就變成了符号目錄項;基本目錄項儲存在了磁盤的專用區域。
好處
假設一個FCB占48個位元組,實體塊大小512位元組。符号目錄項占8位元組(檔案名6位元組,檔案号2位元組),基本目錄項占48-5 = 42位元組。
這裡給出一個目錄檔案有128個目錄項,在分解前則需要13個實體塊,分解後符号目錄項占2塊,基本目錄項占11塊。總塊數是不變的,但是查找一個檔案的平均通路磁盤的次數分解前為(1+13)/2=7次,分解後為(1+2)/2 + 1 = 2.5次。于是就提高了檔案檢索的速度。
六、UNIX檔案系統
-
= 目錄項 +FCB
節點i
- 目錄項:檔案名 +
節點号i
- 目錄檔案由目錄項構成
-
節點:描述檔案的相關資訊i
- 每個檔案由一個目錄項、一個
節點和若幹磁盤塊構成i
- 
19
**說明:**上圖是UNIX系統的檔案布局。下面看如何查找一個檔案
<div class="image-package">

20
**說明:**要查找的檔案為/usr/ast/mbox,根目錄檔案中一個點表示本目錄的目錄項,兩個點表示父目錄的目錄項,每個目錄項都包含檔案名和i節點号。從i節點中可以知道這個檔案的第一塊存放在128這個位置,于是我們讀取usr中的内容,從這個目錄中去找ast這個檔案,以此類推。
一、檔案系統執行個體(FAT)
1.1 Windows的FAT16檔案系統
- 簇(塊)大小:
或1、2、4、8、16、32
扇區64
- 檔案系統的資料記錄在“引導扇區”中
- 檔案配置設定表
FAT
的作用
描述簇的配置設定狀态、标注下一簇的簇号等
- FAT表項:2位元組(16位)
目錄項:32位元組
根目錄大小固定

1
1.2 FAT檔案系統:主引導記錄(Main Boot Record,MBR)
主引導記錄
一般放在零号扇區中

2
1.3 FAT檔案系統:分區引導扇區(Dos Boot Record,DBR)

3
**說明:**這裡是以
FAT32
為例。
1.4 引導扇區(BIOS參數塊)
**說明:**這裡我們看
BIOS
參數塊,也是以
FAT32
1.5 引導扇區(擴充BIOS參數塊EBPB)
1.6 檔案配置設定表FAT
- 可以把檔案配置設定表看成是一個整數數組,每個整數代表磁盤分區的一個簇号
-
狀态
未使用、壞簇、系統保留、被檔案占用(下一簇簇号)、最後一簇(
0xFFFF
- 簇号從 開始編号,簇 和簇
是保留的。1
-
作業系統之檔案管理(中)二、檔案控制塊和檔案目錄三、檔案的實體結構四、檔案系統的實作五、檔案系統執行個體(UNIX)六、UNIX檔案系統一、檔案系統執行個體(FAT)
1.7 FAT16目錄項
**說明:**在前面講過,UNIX系統中i節點加上目錄項就是FCB,而在FAT檔案系統中FCB就等于目錄項。32個位元組沒有用完,沒用完的保留。
1.8 FAT32檔案系統
-
中,根目錄區(FAT32
區)不是固定區域、固定大小,而是資料區的一部分,采用與子目錄檔案相同的管理方式BOOT
- 目錄項仍占
位元組,但分為各種類型(包括:32
目錄項、“.”
目錄項、短檔案名目錄項、長檔案名目錄項、卷标項(根目錄)、已删除目錄項(第一位元組為“..”
)等)0xE5
- 支援長檔案名格式
- 支援
Unicode
- 不支援進階容錯特性,不具有内部安全特性
-
作業系統之檔案管理(中)二、檔案控制塊和檔案目錄三、檔案的實體結構四、檔案系統的實作五、檔案系統執行個體(UNIX)六、UNIX檔案系統一、檔案系統執行個體(FAT)
1.9 FAT32目錄項
**說明:**這是一個基本的目錄項。
1.10 一般長檔案名的實作方式
**說明:**左邊的實作是目錄項的長度不固定。第一個字段給出目錄項的長度,然後把固定長度的屬性記錄在其後,再才是檔案名,因為檔案名的長度是不一樣的,留出足夠的空間給檔案名。缺點就是一個檔案删除時,就留出了一塊空間,而這個空間可能不能放下其他檔案,這樣就會産生碎片。右邊的實作是由于檔案名的長度不固定,是以我們希望每個目錄項的大小是固定的,其中包含了一個指向檔案名起始位址的指針,然後是檔案的相關屬性,所有的檔案名都存放在另一個區域(堆)。
1.11 FAT32中長檔案名目錄項格式

**說明:**其中有三處地方分别記錄了檔案名。前5個字元(采用的是Unicode編碼,則兩個位元組代表一個字元)儲存檔案名的前5個字元,于是一共可以儲存13個字元。如果一個長檔案名目錄項不夠,則需要用第二個。在第一個字段中第6位來記錄是否是最後一個目錄項。下面看一個例子,檔案名為The quick brown.fox,采用Unicode編碼。
**說明:**其實這樣一個檔案占用了三個目錄項。第一個目錄項就是短檔案名目錄項,後面的兩個目錄項主要儲存檔案名。再看一個更長的檔案名檔案例子:
**說明:**這裡的檔案名更長,需要占用五個目錄項。