UNIX
(1)UNIX磁盘文件卷结构
? 超级块, 用于 存放文件 卷的资源管理 信息,包括整个
文件 卷的盘 块数、磁盘索引结点的 盘 块数、磁盘空闲
盘 块号栈和空闲 盘 块号栈指针、空闲 盘 块号栈锁、空
闲索引结点栈和空闲索引结点栈指针、空闲索引结点
栈锁等。
? i节点 ( inode list):存放文件说明信息,每项 64字节
? 目录文件,每个目录项 16字节。文件名区分大小写。
i n o d e
T a b l e
Da t a
( F i l e & Di r e c t o r y )
Bo o t
Re c o r d
V o l um e S t r uc t ur e i n U NI X
Se c t o r # 0 1
Super
Bl o c k
( 2) UNIX目录
? UNIX为了加快目录的寻找速度,UNIX将文件控制
块 FCB中文件名和文件说明分开。文件说明为索引节
点,各文件索引节点集中存放在索引节点区,索引
节点按索引节点号排序。而文件名与索引节点号构
成目录,UNIX S V 操作系统的文件名 14个字节,索
引节点 2个字节,共 16个字节构成目录项。同一级目
录构成目录文件,在文件区存放。
Linux目录文件中的目录项会变长,以保证系统
支持文件名长度可变,最长达 255个字符。目录项的
前三项是定长的,包含以下信息,(1)索引节点号
(4B); (2)目录项长度 (2B); (3)文件名长度 (2B)。
目录项最后是文件名,目录项不能跨越二个块 。
UNIX目录 -1
? 每个文件有一个存放在磁盘索引节点区的索引节点,
称为磁盘索引节点,它包括以下内容,(1)文件主标
识符和同组用户标识符; (2)文件类型,是普通文件、
目录文件、符号连接文件或特别文件(又分块设备
文件或字符设备文件); (3)文件主,同组用户和其
它人对文件存取权限(读 R、写 W、执行 X);(4)
文件的物理地址,用于 5.2.4 UNIX直接、间接混合
寻址的 13个地址项 di_addr[13];( 5)文件长度(字
节数) di_size;( 6)文件链接数 di_nlink;( 7)
文件最近存取和修改时间等。
UNIX采用文件名和文件说明分离的目录结构如下图
所示:
(3)UNIX树型带勾连的目录结构
根目录索引节点
根 目录文件
索引节点 索引节点
索引节点
目录文件 目录文件
返 8ls
I=1
bin dev unix usr mnt etc tmp dey
4 7 6 9 8 7
I=4 I=6
ls
10
dir disk ast erik jim bal
10 19 26 30 51 45
I=10
I=26
Books mbox ……
92 60 …..
I=60
mbox
(4) UNIX直接间接混合寻址方式
由于 80%以上文件是小文件,为了解决能高速存取小文件
和管理大文件的矛盾,UNIX将直接寻址、一级索引、二级索
引和三级索引结合起来,形成了混合寻址方式,如下图所示。
在 UNIX S V的索引结点中设有 13个地址项 di_addr[13]
( Linux的 ext2设有 15个地址项)它们把所存的地址项分成
两类,其中最后三个地址项分别是一级索引、二级索引和三
级索引的指针,而前面 10个( ext2为 12个)为直接寻址的地
址项,即存放文件逻辑块第 0- 9块的盘块号。如每个盘块大
小为 4KB时,当文件不大于 40KB时,便可直接从索引结点中
读出该文件全部盘块号,这样读小文件时速度快;如文件大
于 40KB时,系统再逐步增加一级索引、二级索引和三级索
引,这样最大管理的文件为 40KB+ 4MB+ 4GB+ 4TB,达到管
理大文件的目标。
UNIX直接间接混合寻址方式 -1
二次间接块
一次间接块
三次间接块
.
.
.
.
。。
.
.
.
.
.
.
.
.
di_addr[0]
di_addr[1]
di_addr[2]
.
.
.
di_addr[9]
di_addr[10]
一次间接
di_addr[11]
二次间接
di_addr[12]
三次间接
1034#
数据 块
0#
1#
2#
9#
10#
( 5) 成组链接法
UNIX S V操作系统采用成组链接法管理磁盘空闲块,该方
法是空闲表法和空闲块链接法的结合,具备分配回收方便,
不需专用块来存放分配表等优点。
? 成组链接法将磁盘空闲块分成若干组,如将每 100个盘块作
为一组,该组空闲块总数和各空闲块块号存入下一组的第一
个空闲块中。最后不满 100块的那组空闲块总数和各空闲块
块号记入磁盘区专用管理块的空闲块管理的数据结构:
s_nfree和 s_free[100]中,如下图所示。
成组链接法 -1
39
50
49
.
12
100
150
149
.
.
.
51
100
.
.
.
.
.
.
.
.
100
0
499
.
.
.
351
盘专用管理块
449块
350块
351块251块51块12块
149块49块
150块50块
s_nfree
0
1
s_free[100]
38
99
(6) 文件系统 安装 -- UNIX可装卸文件系统
? 文件存储器硬盘各盘区和软盘都有一个象倒置的树一样的多
级目录的文件系统,MS-DOS系统用, 盘符, 来识别它们,而
UNIX系统,只有一个安装 UNIX操作系统的根设备的文件系统
常驻系统,而硬盘其它盘区和软盘上的文件系统直至被安装
前,UNIX系统不知道它存在。系统要使用其它的文件系统,
必须先用 mount命令将其安装到系统。被安装的倒树形目录
结构的根被安装到根设备树形目录的某一节点上,通常这个
节点所对应的文件是专为安装新文件系统而创建的空文件,
如 UNIX根目录下的 mnt子目录节点,与根设备的文件系统的
树形目录结构融为一体,构成一个倒置树的多级目录结构。
? 新文件系统通过安装表与根设备文件系统某节点联系起来,
在安装时也将新文件系统盘的管理块( superblock)信息拷
贝到系统缓冲区。新文件系统必须在安装后才能进行读写,
而使用完毕后必须使用 umount拆卸文件系统命令拆卸安装上
去的文件系统,在拆卸时系统将内存系统缓冲中目录管理信
息拷贝到将拆卸文件系统的盘中,以保证盘中信息的完整性。
文件系统 安装 -- UNIX可装卸文件系统 -1
安装表结构:
struct mount
{int m_flags ;
dev_t m_dev ;
struct inode *m_inodp ;
struct buf *m_bufp ;
struct inode *m_mount ;
}
安装表作用图见下:
0# 1#superblcck I=1
i-inade
Filsys
子文件卷
inade
I=1
2 3 4
5 6
m-indp
m-bufp
m-mount
根设备
内存
软盘
安装表 缓冲池的缓冲区
文件系统 安装 -- UNIX可装卸文件系统 -2
? 在 UNIX系统 (linux)上读写软盘上信息操作如下:
?插入软盘。
?使用安装命令安装软盘文件系统,
格式,#mount –t type device mount-point
例,#mount –t msdos /dev/fd0 /mnt
?在 /mnt目录下读写 MS-DOS格式软盘上文件。
?使用拆卸的命令卸下软盘文件系统,格式,#umount device
例,#umount /dev/fd0
or #umount /mnt
?取出软盘。
在 UNIX系统中一般将硬盘划分为几个区,即为几个文件系统,
把系统文件和用户程序分开,以保护数据正确和便于维护。
系统启动时,在安装根文件系统后,会根据 /etc/fstab逐个
安装各区文件系统,在关机前,会逐个拆卸各区文件系统,
最常用的其它文件系统为 /u,用于存储用户程序。 (练习 5)
MS-DOS
(1) MS-DOS层次模块结构
MS-DOS采用层次模块结构,它有三个层次模块和一个引导程
序组成。这三个模块是命令处理程序( COMMAND.COM)、文件
系统 (MS-DOS.SYS)和输入输出系统。其中基本输入输出系统
又由驻在 ROM中的基本输入输出系统 BIOS和系统盘上的 BIOS接
口模块( IO.SYS)两部分组成。引导程序在盘引导区中。三
个模块的层次关系如图所示。
用户程序 键盘命令
命令处理程序
文件系统
输入输出系统
INT10-INT1A INT21
(2) MS DOS的文件系统
返回
磁盘文件卷结构
F A T 1 F A T 2 Roo t
Di r ec t or y
Dat a
( F i l e & Di r ec t or y )
Boo t
Rec or d
V ol um e S t ru ct ur e i n M S DO S
Se ct or # 0 N1 2N
(3) Tree-Structured Directories
(4) Windows98 VFAT目录结构
Windows98长文件名的目录项由几个 MS- DOS的 32B目录组
成。它用一个表项存放短文件名和这个文件或子目录的其它
信息(包括 MS- DOS FCB原有的簇号、文件大小,最后修改
时间和最后修改日期,还有 Windows98增加的创建时间、创建
日期和最后存取日期),短文件名的属性是 0× 20。另外用连
续若干个表项存放长文件名,每个表项存放 13个字符(使用
Unicode编码,不论西文和汉字,每个字符一律占用 2个字节。
对西文第一个字节存 ASCII码,第二个字节存 0× 00。)长文
件名的表项首字节的二进制数低 5位值,分别为 00001B,
00010B, 00011B, ……,表示它们的次序,左起第 2位
为 1(也就是在低 5位基础上加 40H)表示该表项是最后一项。
最后项存放 13个字符位置多余时,先用 2个字节 0表示结束,
再用 FFH填充。长文件名的属性是 OFH。长文件名项的第 13、
27,28字节为 0× 00,第 14字节为短文件名检验和。长文件名
The quick brown.fox(短文件名为 THEQUI~1.FOX)目录项格
式如下:
Windows98 VFAT目录结构 -1
42 w
77 00
n
6E 00 2E 00
f
66 00
o
6F 00
属性
0F 00
检验和
07
X
78 00
00 00 FF FF FF FF FF FF FF FF
00 00
FF FF FF FF
01 T
54 00
h
68 00
e
65 00
20 00
q
71 00
属性
0F
00 检验和
07
U
75 00
i
69 00
c
63 00
k
6B 00 00
b
62 00
00 00 r
72 00
O
6F 00
短 文 件 名
T H E Q U I ~ 1
扩展名
F O X
属性
20
NT Sec 创建
时间
创建
日期
最后存
取日期
第一簇
高 16 位
最后修
改时间
最后修
改日期
第一簇号
低 16 位
文 件 大 小
Windows98 VFAT目录结构 -2
用 Debug工具查根目录区找出其目录项显示如下:
2171:29A0 42 77 00 6E 00 2E 00 66-00 6F 00 0F 00 07 78 00
Bw.n...f.o....x.
2171:29B0 00 00 FF FF FF FF FF FF-FF FF 00 00 FF FF FF
FF,...............
2171:29C0 01 54 00 68 00 65 00 20-00 71 00 0F 00 07 75
00,T.h.e.,q....u.
2171:29D0 69 00 63 00 6B 00 20 00-62 00 00 00 72 00 6F 00
i.c.k.,b...r.o.
2171:29E0 54 48 45 51 55 49 7E 31-46 4F 58 20 00 3C C1 7B
THEQUI~1FOX,<.{
2171:29F0 6E 26 7B 27 00 00 23 51-63 26 F4 09 00 6A 02 00
n&{'..#Qc&...j..
(5) MS-DOS / Windows98 FAT表结构
MS-DOS文件系统的文件物理结构采用 FAT表结构。该结构为了
克服链接文件随机读取任一逻辑块需要化费多次盘 I/O操作的
不足,将各盘块中的链接指针集中存放在盘的开始部分,构
成一张表,称为 FAT表。 FAT表每一项存放链接指针(下一个
簇号),每个 FAT表项占 12位或 16位,称为 FAT12或 FAT16。对
于软盘因为容量小,簇数也少,采用 12位 FAT表,对于硬盘则
采用 16位 FAT表。 FAT表文件系统原为小硬盘的目录结构而设
计,由于簇的数目最多只能用 16位表示,即最多只能有 64K个
簇,要用 FAT表管理大的磁盘分区,只能采取增大每簇所包含
的扇区数,一般根据磁盘的类型和容量大小来决定簇的大小,
如下表所示。当然每簇包含扇区数增加,带来内另头的浪费,
这对小文件特别严重。 Windows98为了减少内另头的浪费,可
采取每簇的数目用 32位表示,减少每簇包含扇区数,这称为
FAT32。 FAT16, FAT32文件系统簇和扇区关系也见下表所示。
MS-DOS / Windows98 FAT表结构 -1
FAT16 FAT32
分区大小 每簇的扇区数 簇大小 每簇的扇区数 簇大小
0 - 31MB 1 512B 不支持 不支持
32MB - 63MB 2 1KB 不支持 不支持
64MB - 127MB 4 2KB 不支持 不支持
128MB - 255MB 8 4KB 不支持 不支持
256MB - 511MB 16 8KB 不支持 不支持
512MB - 1023MB 32 16KB 8 4KB
1024MB - 2047MB 64 32KB 8 4KB
2GB - 8 GB 不支持 不支持 8 4KB
8 GB - 16GB 不支持 不支持 16 8KB
16GB - 32GB 不支持 不支持 32 16KB
32GB - 64GB 不支持 不支持 64 32KB
MS-DOS / Windows98 FAT表结构 -2
由于开销太大,对于 512MB 以上的卷不推荐使用 FAT 表文件系统,在大
于 4GB 的卷上不能使用 FAT 文件系统,不管簇的大小是多少。 FAT 表中每项的
数字含义如表所示。
FAT12 FAT16 含 义
000H 0000H 本簇未占用
003 H-FEFH 0003H-FFEFH 本簇已占用,此数为下簇的簇号
FF8H-FFFH FFF8H-FFFFH 本簇已占用,且是文件最后一簇
FF7H FFF7H 磁盘上本簇的位置已损坏,不可用
FF0H-FF6H FFF0H-FFF6H 保留
对于 12 位 FAT 表,每个表项用 3 位 16 进制数表示。相邻的二个表项合
用 3 个字节,第 1, 3 字节分别属于前后二个表项,中间的字节分成 2 位 16
进制数,低位是前一表项的最高位,高位则是后一表项的最低位。例如用
debug 列出装 MS-DOS 操作系统文件的软盘 FAT 表第一行数据如下:
FO FF FF 03 40 00 05 6 0 00 07 80 00 09 A0 00 0B
FAT 表前二项用来标记盘的类型,3.5 吋软盘为 FFO FFF,查根目录可知软盘
中第一个文件为 I O,SYS,它的起始簇为 002 。它的后继簇分别为 003, 004,
005, 006, 007, 008, 009, 00A,??。
MS-DOS / Windows98 FAT表结构 -3
(6) MS-DOS/Windows98文件系统磁盘的结构
MS-DOS 软盘和硬盘各区文件系统的盘区分配如下:
BOOT 区 FAT1 FAT2 根目录区 文件区
512B
BOOT 区为分区引导区,512B,分区引导区由三部分组成:
,字节 0 - 0 × 0A 是跳转指令和 OEM 名字。
,字节 0 × 0B - 0 × 3D 是 BIOS 参数块和扩展 BIOS 参数块,参数块主要参数意
义如下表。
,其余部分是自举代码和扇区未尾标志 55 AA 。
下面是一计算机分区引导区的 O × OB - O × 3D BIOS 参数块:
00 02 40 01 00,<.MSWIN4.1..@,.
2171:0110 02 00 02 00 00 F8 00 01 - 3F 00 FF 00 3F 00 00 00,.......?,..?...
2171:0120 86 FA 3F 00 80 00 29 57-8A A1 26 20 20 20 20 20,.?..,)W..&
2171:0130 20 20 20 20 20 20 46 41-54 31 36 20 20 20 FAT16 3.
MS-DOS/Windows98文件系统磁盘的结构 -1
字节偏移 数值 意 义
0 × 0B-0 × 0C × 0200 硬件每扇区字节数,这值为 512B
0 × 0D × 40 一个簇的扇区数目,这为 64 个扇区
0 × 0 E -0 × 0F × 000 1 保留扇区,分区引导扇区头到第一个文件分配表
头的扇区数
0 × 10 × 02 文件分配表个数,典型值为 2
0 × 11-0 × 12 × 0200 根条目数,根目录中最大文件数典型值是 512,如
使用长文件,这数目会小些
0 × 16-0 × 17 × 0100 每个文件分配表所用扇区数,这为 256 个
0 × 18-0 × 19 × 003F 磁盘低级格式化后每磁道扇区数,这为 63 个
0 × 1A-0 × 1B × 00FF 磁盘低级格式化后逻辑磁头数,这为 255 个
0 × 24 0 × 80 物理磁盘号,0 × 00 对应 A 盘,硬盘为 0 × 80
0 × 36-0 × 3D FAT16 系统 ID,根据磁盘格式此域为 FAT12 或 FAT16
MS-DOS/Windows98文件系统磁盘的结构 -2
FAT1和 FAT2都为文件分配表,二表相同,FAT2作备份用。对
软盘 FAT表每表项为 12位,表示簇号。对硬盘各区,FAT表项
可为 12位,16位和 32位。根目录区是存放根目录,它有固定
长度,由引导区 BIOS参数块 0× 11H-0× 12H字节决定。
? 从表中典型数据可以看出装 FAT16的 C盘引导区为 1个扇区,
每个 FAT表扇区数为 256个,FAT表 2个,共存 256× 2= 512个
扇区。由于每条根目录为 32B,则可知根目录区大小为
32× 512= 16KB;文件区的起始簇号为 0002,起始扇区为 545
( 221H)。对于 FAT16硬盘 C盘的 BOOT区是 1头 0柱 1扇区,
512B大小。
Windows98可采用 FAT32格式,FAT32其引导区记录被扩展
为包括重要数据结构的备份,根目录成为一个普通的簇链,
可以放在文件区任何地方。 FAT32引导区中的 BIOS参数块扩
充为 0× 0B-0× 59字节。 FAT32中 BIOS参数块中 0× 0B-0× 23
参数同 FAT16 格式表,其余 0× 24- 0× 59主要参数如下表所
示:
MS-DOS/Windows98文件系统磁盘的结构 -3
字节偏移 数值 意义
0 × 24 - 0 × 27 0 F9D 每份 FAT 有几个扇区
0 × 2 C - 0 × 2 F 00000002 根目录簇号
0 × 32 - 0 × 33 0006 引导扇区数目
0 × 40 80 磁盘编号,第一个硬盘为 80 h
0 × 42 29 扩展引导扇区特征码
0 × 52 - 0 × 59 …… 文件系统类型( FAT16, FAT32 )
安装 FAT32 的计算机引导区的 BIOS 参数块如下显示,
0 0 0 2 0 8 2 0 0 0, X, M S W I N 4, 1,,,,
2171:0110 02 00 00 00 00 F8 00 00 - 3F 00 FF 00 3F 00 00 00,.......?...?..,
2171:0120 00 82 3E 00 9D 0F 00 00 - 00 00 00 00 0 2 0 0 0 0 0 0,, >,,,,,,,,,,,,,
2171:0130 01 00 06 00 0 0 00 00 00 - 00 00 00 00 00 00 00 00,..............,
2171:0140 80 00 29 DA 1A 11 29 57 - 49 4E 44 4F 57 53 20 20,.)...)WINDOWS
2171:0150 20 20 46 41 54 33 32 20 - 20 20 -- -- -- -- -- -- F A T 3 2, 3,,,,
MS-DOS/Windows98文件系统磁盘的结构 -4
从显示可以看出参数块 OE地址存放保留扇区数现为
0020,即为 32个扇区,而 FA16时为 1个扇区,说明
FAT32引导区记录被扩展为包括重要数据结构的备
份。从表中典型数据可以看出装 FAT32的 C盘引导
区为 32个扇区,FAT表 2个,共存 3997× 2= 7994个
扇区,根目录的起始簇号为 0002,起始扇区为
8026( 1F7AH)。
MS-DOS/Windows98文件系统磁盘的结构 -5
? 整个硬盘还有一个主引导区,它是 0头 0柱 1扇
区,它也是 512B大小。
? 主引导区由二部分组成,第一部分主引导记录,
占据扇区的前 446个,磁盘标识符( FD 4E F2
14)位于这记录的未尾。第二部分是分区表,
分区表中每个条目有 16字节长,分区表最多有
4个条目,第一个分区条目从扇区的偏移量位
置是 0× 01BE。分区表中主要参数意义见表。
MS-DOS/Windows98文件系统磁盘的结构 -6
字节偏移 域长 例 意 义
00 1B 0 × 80 引导指示符。 80 -系统分区,00 -不用来引导。
01 1B 0 × 01 起始磁头号
02 6 位 0 × 01 起始扇区号。只用到 0-5 位,6-7 位作起始柱面域
高 2 位
03 10 位 0 × 00 起始柱面号。它是 10 位值,最大值为 1024,这个
域包括柱面低 8 位。
04 1B 0 × 06 系统 ID 这个域定义卷类型 (详见后说明)
05 1B 0 × 0F 终止磁头号。
06 6 位 0 × 3F 终止扇区号,同起始扇区号。
07 10 位 0 × 196 终止柱面号,同起始柱面号
08 4B 3F 00 00 00 相对扇区 (本分区已用扇区数)
12 4B 51 42 06 00 本分区总扇区数
表 5-5 主引导块分区表的域意义
MS-DOS/Windows98文件系统磁盘的结构 -7
下面是一计算机硬盘主引导区的分区表:
2171:03B0 80
01,.
2171:03C0 01 00 06 FE 7F 04 3F 00-00 00 86 FA 3F 00 00
00,.....?.....?...
2171:03D0 41 05 05 FE BF 0B C5 FA-3F 00 47 78 40 00 00 00
A.......?.Gx@...
2171:03E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00
00,...............
2171:03F0 00 00 00 00 00 00 00 00-00 00 00 00 00
00,.............
分区表中系统 ID域描述用来格式化主分区和逻辑分区的文件系统,
WindowsNT使用这个域来决定在启动时加载那些文件系统的设备
驱动程序,如果定义了扩展分区的话,这个域也可用来标识扩展
分区。系统 ID域值的意义见表。
MS-DOS/Windows98文件系统磁盘的结构 -8
数值 意 义 适用 OS
DOS 98 NT
0 × 01 FAT12 主分区或逻辑分区,卷中扇区数< 32680 √ √
0 × 04 FAT16 主分区或逻辑分区,卷中扇区数 32680 - 65535 √ √ √
0 × 05 扩展 DOS 分区 √ √ √
0 × 06 BIGDOS FAT 主分区或逻辑分区 √ √
0 × 07 NTFS 主分区或逻辑分区 √
0 × 0B FAT32 主分区,使用 INT 13 (中断 13 )扩展 √
0 × 0C FAT32 扩展分区,使用 INT 13 扩展 √
0 × 0E FAT16 扩展分区,使用 INT 13 扩展 √
0 × 0F FAT16 主分区,使用 INT 13 扩展 √
0 × 10 OS/2 HPFT √
0 × DB 并行 DOS
表 5-6 分区表的系统 ID 域意义
(1)UNIX磁盘文件卷结构
? 超级块, 用于 存放文件 卷的资源管理 信息,包括整个
文件 卷的盘 块数、磁盘索引结点的 盘 块数、磁盘空闲
盘 块号栈和空闲 盘 块号栈指针、空闲 盘 块号栈锁、空
闲索引结点栈和空闲索引结点栈指针、空闲索引结点
栈锁等。
? i节点 ( inode list):存放文件说明信息,每项 64字节
? 目录文件,每个目录项 16字节。文件名区分大小写。
i n o d e
T a b l e
Da t a
( F i l e & Di r e c t o r y )
Bo o t
Re c o r d
V o l um e S t r uc t ur e i n U NI X
Se c t o r # 0 1
Super
Bl o c k
( 2) UNIX目录
? UNIX为了加快目录的寻找速度,UNIX将文件控制
块 FCB中文件名和文件说明分开。文件说明为索引节
点,各文件索引节点集中存放在索引节点区,索引
节点按索引节点号排序。而文件名与索引节点号构
成目录,UNIX S V 操作系统的文件名 14个字节,索
引节点 2个字节,共 16个字节构成目录项。同一级目
录构成目录文件,在文件区存放。
Linux目录文件中的目录项会变长,以保证系统
支持文件名长度可变,最长达 255个字符。目录项的
前三项是定长的,包含以下信息,(1)索引节点号
(4B); (2)目录项长度 (2B); (3)文件名长度 (2B)。
目录项最后是文件名,目录项不能跨越二个块 。
UNIX目录 -1
? 每个文件有一个存放在磁盘索引节点区的索引节点,
称为磁盘索引节点,它包括以下内容,(1)文件主标
识符和同组用户标识符; (2)文件类型,是普通文件、
目录文件、符号连接文件或特别文件(又分块设备
文件或字符设备文件); (3)文件主,同组用户和其
它人对文件存取权限(读 R、写 W、执行 X);(4)
文件的物理地址,用于 5.2.4 UNIX直接、间接混合
寻址的 13个地址项 di_addr[13];( 5)文件长度(字
节数) di_size;( 6)文件链接数 di_nlink;( 7)
文件最近存取和修改时间等。
UNIX采用文件名和文件说明分离的目录结构如下图
所示:
(3)UNIX树型带勾连的目录结构
根目录索引节点
根 目录文件
索引节点 索引节点
索引节点
目录文件 目录文件
返 8ls
I=1
bin dev unix usr mnt etc tmp dey
4 7 6 9 8 7
I=4 I=6
ls
10
dir disk ast erik jim bal
10 19 26 30 51 45
I=10
I=26
Books mbox ……
92 60 …..
I=60
mbox
(4) UNIX直接间接混合寻址方式
由于 80%以上文件是小文件,为了解决能高速存取小文件
和管理大文件的矛盾,UNIX将直接寻址、一级索引、二级索
引和三级索引结合起来,形成了混合寻址方式,如下图所示。
在 UNIX S V的索引结点中设有 13个地址项 di_addr[13]
( Linux的 ext2设有 15个地址项)它们把所存的地址项分成
两类,其中最后三个地址项分别是一级索引、二级索引和三
级索引的指针,而前面 10个( ext2为 12个)为直接寻址的地
址项,即存放文件逻辑块第 0- 9块的盘块号。如每个盘块大
小为 4KB时,当文件不大于 40KB时,便可直接从索引结点中
读出该文件全部盘块号,这样读小文件时速度快;如文件大
于 40KB时,系统再逐步增加一级索引、二级索引和三级索
引,这样最大管理的文件为 40KB+ 4MB+ 4GB+ 4TB,达到管
理大文件的目标。
UNIX直接间接混合寻址方式 -1
二次间接块
一次间接块
三次间接块
.
.
.
.
。。
.
.
.
.
.
.
.
.
di_addr[0]
di_addr[1]
di_addr[2]
.
.
.
di_addr[9]
di_addr[10]
一次间接
di_addr[11]
二次间接
di_addr[12]
三次间接
1034#
数据 块
0#
1#
2#
9#
10#
( 5) 成组链接法
UNIX S V操作系统采用成组链接法管理磁盘空闲块,该方
法是空闲表法和空闲块链接法的结合,具备分配回收方便,
不需专用块来存放分配表等优点。
? 成组链接法将磁盘空闲块分成若干组,如将每 100个盘块作
为一组,该组空闲块总数和各空闲块块号存入下一组的第一
个空闲块中。最后不满 100块的那组空闲块总数和各空闲块
块号记入磁盘区专用管理块的空闲块管理的数据结构:
s_nfree和 s_free[100]中,如下图所示。
成组链接法 -1
39
50
49
.
12
100
150
149
.
.
.
51
100
.
.
.
.
.
.
.
.
100
0
499
.
.
.
351
盘专用管理块
449块
350块
351块251块51块12块
149块49块
150块50块
s_nfree
0
1
s_free[100]
38
99
(6) 文件系统 安装 -- UNIX可装卸文件系统
? 文件存储器硬盘各盘区和软盘都有一个象倒置的树一样的多
级目录的文件系统,MS-DOS系统用, 盘符, 来识别它们,而
UNIX系统,只有一个安装 UNIX操作系统的根设备的文件系统
常驻系统,而硬盘其它盘区和软盘上的文件系统直至被安装
前,UNIX系统不知道它存在。系统要使用其它的文件系统,
必须先用 mount命令将其安装到系统。被安装的倒树形目录
结构的根被安装到根设备树形目录的某一节点上,通常这个
节点所对应的文件是专为安装新文件系统而创建的空文件,
如 UNIX根目录下的 mnt子目录节点,与根设备的文件系统的
树形目录结构融为一体,构成一个倒置树的多级目录结构。
? 新文件系统通过安装表与根设备文件系统某节点联系起来,
在安装时也将新文件系统盘的管理块( superblock)信息拷
贝到系统缓冲区。新文件系统必须在安装后才能进行读写,
而使用完毕后必须使用 umount拆卸文件系统命令拆卸安装上
去的文件系统,在拆卸时系统将内存系统缓冲中目录管理信
息拷贝到将拆卸文件系统的盘中,以保证盘中信息的完整性。
文件系统 安装 -- UNIX可装卸文件系统 -1
安装表结构:
struct mount
{int m_flags ;
dev_t m_dev ;
struct inode *m_inodp ;
struct buf *m_bufp ;
struct inode *m_mount ;
}
安装表作用图见下:
0# 1#superblcck I=1
i-inade
Filsys
子文件卷
inade
I=1
2 3 4
5 6
m-indp
m-bufp
m-mount
根设备
内存
软盘
安装表 缓冲池的缓冲区
文件系统 安装 -- UNIX可装卸文件系统 -2
? 在 UNIX系统 (linux)上读写软盘上信息操作如下:
?插入软盘。
?使用安装命令安装软盘文件系统,
格式,#mount –t type device mount-point
例,#mount –t msdos /dev/fd0 /mnt
?在 /mnt目录下读写 MS-DOS格式软盘上文件。
?使用拆卸的命令卸下软盘文件系统,格式,#umount device
例,#umount /dev/fd0
or #umount /mnt
?取出软盘。
在 UNIX系统中一般将硬盘划分为几个区,即为几个文件系统,
把系统文件和用户程序分开,以保护数据正确和便于维护。
系统启动时,在安装根文件系统后,会根据 /etc/fstab逐个
安装各区文件系统,在关机前,会逐个拆卸各区文件系统,
最常用的其它文件系统为 /u,用于存储用户程序。 (练习 5)
MS-DOS
(1) MS-DOS层次模块结构
MS-DOS采用层次模块结构,它有三个层次模块和一个引导程
序组成。这三个模块是命令处理程序( COMMAND.COM)、文件
系统 (MS-DOS.SYS)和输入输出系统。其中基本输入输出系统
又由驻在 ROM中的基本输入输出系统 BIOS和系统盘上的 BIOS接
口模块( IO.SYS)两部分组成。引导程序在盘引导区中。三
个模块的层次关系如图所示。
用户程序 键盘命令
命令处理程序
文件系统
输入输出系统
INT10-INT1A INT21
(2) MS DOS的文件系统
返回
磁盘文件卷结构
F A T 1 F A T 2 Roo t
Di r ec t or y
Dat a
( F i l e & Di r ec t or y )
Boo t
Rec or d
V ol um e S t ru ct ur e i n M S DO S
Se ct or # 0 N1 2N
(3) Tree-Structured Directories
(4) Windows98 VFAT目录结构
Windows98长文件名的目录项由几个 MS- DOS的 32B目录组
成。它用一个表项存放短文件名和这个文件或子目录的其它
信息(包括 MS- DOS FCB原有的簇号、文件大小,最后修改
时间和最后修改日期,还有 Windows98增加的创建时间、创建
日期和最后存取日期),短文件名的属性是 0× 20。另外用连
续若干个表项存放长文件名,每个表项存放 13个字符(使用
Unicode编码,不论西文和汉字,每个字符一律占用 2个字节。
对西文第一个字节存 ASCII码,第二个字节存 0× 00。)长文
件名的表项首字节的二进制数低 5位值,分别为 00001B,
00010B, 00011B, ……,表示它们的次序,左起第 2位
为 1(也就是在低 5位基础上加 40H)表示该表项是最后一项。
最后项存放 13个字符位置多余时,先用 2个字节 0表示结束,
再用 FFH填充。长文件名的属性是 OFH。长文件名项的第 13、
27,28字节为 0× 00,第 14字节为短文件名检验和。长文件名
The quick brown.fox(短文件名为 THEQUI~1.FOX)目录项格
式如下:
Windows98 VFAT目录结构 -1
42 w
77 00
n
6E 00 2E 00
f
66 00
o
6F 00
属性
0F 00
检验和
07
X
78 00
00 00 FF FF FF FF FF FF FF FF
00 00
FF FF FF FF
01 T
54 00
h
68 00
e
65 00
20 00
q
71 00
属性
0F
00 检验和
07
U
75 00
i
69 00
c
63 00
k
6B 00 00
b
62 00
00 00 r
72 00
O
6F 00
短 文 件 名
T H E Q U I ~ 1
扩展名
F O X
属性
20
NT Sec 创建
时间
创建
日期
最后存
取日期
第一簇
高 16 位
最后修
改时间
最后修
改日期
第一簇号
低 16 位
文 件 大 小
Windows98 VFAT目录结构 -2
用 Debug工具查根目录区找出其目录项显示如下:
2171:29A0 42 77 00 6E 00 2E 00 66-00 6F 00 0F 00 07 78 00
Bw.n...f.o....x.
2171:29B0 00 00 FF FF FF FF FF FF-FF FF 00 00 FF FF FF
FF,...............
2171:29C0 01 54 00 68 00 65 00 20-00 71 00 0F 00 07 75
00,T.h.e.,q....u.
2171:29D0 69 00 63 00 6B 00 20 00-62 00 00 00 72 00 6F 00
i.c.k.,b...r.o.
2171:29E0 54 48 45 51 55 49 7E 31-46 4F 58 20 00 3C C1 7B
THEQUI~1FOX,<.{
2171:29F0 6E 26 7B 27 00 00 23 51-63 26 F4 09 00 6A 02 00
n&{'..#Qc&...j..
(5) MS-DOS / Windows98 FAT表结构
MS-DOS文件系统的文件物理结构采用 FAT表结构。该结构为了
克服链接文件随机读取任一逻辑块需要化费多次盘 I/O操作的
不足,将各盘块中的链接指针集中存放在盘的开始部分,构
成一张表,称为 FAT表。 FAT表每一项存放链接指针(下一个
簇号),每个 FAT表项占 12位或 16位,称为 FAT12或 FAT16。对
于软盘因为容量小,簇数也少,采用 12位 FAT表,对于硬盘则
采用 16位 FAT表。 FAT表文件系统原为小硬盘的目录结构而设
计,由于簇的数目最多只能用 16位表示,即最多只能有 64K个
簇,要用 FAT表管理大的磁盘分区,只能采取增大每簇所包含
的扇区数,一般根据磁盘的类型和容量大小来决定簇的大小,
如下表所示。当然每簇包含扇区数增加,带来内另头的浪费,
这对小文件特别严重。 Windows98为了减少内另头的浪费,可
采取每簇的数目用 32位表示,减少每簇包含扇区数,这称为
FAT32。 FAT16, FAT32文件系统簇和扇区关系也见下表所示。
MS-DOS / Windows98 FAT表结构 -1
FAT16 FAT32
分区大小 每簇的扇区数 簇大小 每簇的扇区数 簇大小
0 - 31MB 1 512B 不支持 不支持
32MB - 63MB 2 1KB 不支持 不支持
64MB - 127MB 4 2KB 不支持 不支持
128MB - 255MB 8 4KB 不支持 不支持
256MB - 511MB 16 8KB 不支持 不支持
512MB - 1023MB 32 16KB 8 4KB
1024MB - 2047MB 64 32KB 8 4KB
2GB - 8 GB 不支持 不支持 8 4KB
8 GB - 16GB 不支持 不支持 16 8KB
16GB - 32GB 不支持 不支持 32 16KB
32GB - 64GB 不支持 不支持 64 32KB
MS-DOS / Windows98 FAT表结构 -2
由于开销太大,对于 512MB 以上的卷不推荐使用 FAT 表文件系统,在大
于 4GB 的卷上不能使用 FAT 文件系统,不管簇的大小是多少。 FAT 表中每项的
数字含义如表所示。
FAT12 FAT16 含 义
000H 0000H 本簇未占用
003 H-FEFH 0003H-FFEFH 本簇已占用,此数为下簇的簇号
FF8H-FFFH FFF8H-FFFFH 本簇已占用,且是文件最后一簇
FF7H FFF7H 磁盘上本簇的位置已损坏,不可用
FF0H-FF6H FFF0H-FFF6H 保留
对于 12 位 FAT 表,每个表项用 3 位 16 进制数表示。相邻的二个表项合
用 3 个字节,第 1, 3 字节分别属于前后二个表项,中间的字节分成 2 位 16
进制数,低位是前一表项的最高位,高位则是后一表项的最低位。例如用
debug 列出装 MS-DOS 操作系统文件的软盘 FAT 表第一行数据如下:
FO FF FF 03 40 00 05 6 0 00 07 80 00 09 A0 00 0B
FAT 表前二项用来标记盘的类型,3.5 吋软盘为 FFO FFF,查根目录可知软盘
中第一个文件为 I O,SYS,它的起始簇为 002 。它的后继簇分别为 003, 004,
005, 006, 007, 008, 009, 00A,??。
MS-DOS / Windows98 FAT表结构 -3
(6) MS-DOS/Windows98文件系统磁盘的结构
MS-DOS 软盘和硬盘各区文件系统的盘区分配如下:
BOOT 区 FAT1 FAT2 根目录区 文件区
512B
BOOT 区为分区引导区,512B,分区引导区由三部分组成:
,字节 0 - 0 × 0A 是跳转指令和 OEM 名字。
,字节 0 × 0B - 0 × 3D 是 BIOS 参数块和扩展 BIOS 参数块,参数块主要参数意
义如下表。
,其余部分是自举代码和扇区未尾标志 55 AA 。
下面是一计算机分区引导区的 O × OB - O × 3D BIOS 参数块:
00 02 40 01 00,<.MSWIN4.1..@,.
2171:0110 02 00 02 00 00 F8 00 01 - 3F 00 FF 00 3F 00 00 00,.......?,..?...
2171:0120 86 FA 3F 00 80 00 29 57-8A A1 26 20 20 20 20 20,.?..,)W..&
2171:0130 20 20 20 20 20 20 46 41-54 31 36 20 20 20 FAT16 3.
MS-DOS/Windows98文件系统磁盘的结构 -1
字节偏移 数值 意 义
0 × 0B-0 × 0C × 0200 硬件每扇区字节数,这值为 512B
0 × 0D × 40 一个簇的扇区数目,这为 64 个扇区
0 × 0 E -0 × 0F × 000 1 保留扇区,分区引导扇区头到第一个文件分配表
头的扇区数
0 × 10 × 02 文件分配表个数,典型值为 2
0 × 11-0 × 12 × 0200 根条目数,根目录中最大文件数典型值是 512,如
使用长文件,这数目会小些
0 × 16-0 × 17 × 0100 每个文件分配表所用扇区数,这为 256 个
0 × 18-0 × 19 × 003F 磁盘低级格式化后每磁道扇区数,这为 63 个
0 × 1A-0 × 1B × 00FF 磁盘低级格式化后逻辑磁头数,这为 255 个
0 × 24 0 × 80 物理磁盘号,0 × 00 对应 A 盘,硬盘为 0 × 80
0 × 36-0 × 3D FAT16 系统 ID,根据磁盘格式此域为 FAT12 或 FAT16
MS-DOS/Windows98文件系统磁盘的结构 -2
FAT1和 FAT2都为文件分配表,二表相同,FAT2作备份用。对
软盘 FAT表每表项为 12位,表示簇号。对硬盘各区,FAT表项
可为 12位,16位和 32位。根目录区是存放根目录,它有固定
长度,由引导区 BIOS参数块 0× 11H-0× 12H字节决定。
? 从表中典型数据可以看出装 FAT16的 C盘引导区为 1个扇区,
每个 FAT表扇区数为 256个,FAT表 2个,共存 256× 2= 512个
扇区。由于每条根目录为 32B,则可知根目录区大小为
32× 512= 16KB;文件区的起始簇号为 0002,起始扇区为 545
( 221H)。对于 FAT16硬盘 C盘的 BOOT区是 1头 0柱 1扇区,
512B大小。
Windows98可采用 FAT32格式,FAT32其引导区记录被扩展
为包括重要数据结构的备份,根目录成为一个普通的簇链,
可以放在文件区任何地方。 FAT32引导区中的 BIOS参数块扩
充为 0× 0B-0× 59字节。 FAT32中 BIOS参数块中 0× 0B-0× 23
参数同 FAT16 格式表,其余 0× 24- 0× 59主要参数如下表所
示:
MS-DOS/Windows98文件系统磁盘的结构 -3
字节偏移 数值 意义
0 × 24 - 0 × 27 0 F9D 每份 FAT 有几个扇区
0 × 2 C - 0 × 2 F 00000002 根目录簇号
0 × 32 - 0 × 33 0006 引导扇区数目
0 × 40 80 磁盘编号,第一个硬盘为 80 h
0 × 42 29 扩展引导扇区特征码
0 × 52 - 0 × 59 …… 文件系统类型( FAT16, FAT32 )
安装 FAT32 的计算机引导区的 BIOS 参数块如下显示,
0 0 0 2 0 8 2 0 0 0, X, M S W I N 4, 1,,,,
2171:0110 02 00 00 00 00 F8 00 00 - 3F 00 FF 00 3F 00 00 00,.......?...?..,
2171:0120 00 82 3E 00 9D 0F 00 00 - 00 00 00 00 0 2 0 0 0 0 0 0,, >,,,,,,,,,,,,,
2171:0130 01 00 06 00 0 0 00 00 00 - 00 00 00 00 00 00 00 00,..............,
2171:0140 80 00 29 DA 1A 11 29 57 - 49 4E 44 4F 57 53 20 20,.)...)WINDOWS
2171:0150 20 20 46 41 54 33 32 20 - 20 20 -- -- -- -- -- -- F A T 3 2, 3,,,,
MS-DOS/Windows98文件系统磁盘的结构 -4
从显示可以看出参数块 OE地址存放保留扇区数现为
0020,即为 32个扇区,而 FA16时为 1个扇区,说明
FAT32引导区记录被扩展为包括重要数据结构的备
份。从表中典型数据可以看出装 FAT32的 C盘引导
区为 32个扇区,FAT表 2个,共存 3997× 2= 7994个
扇区,根目录的起始簇号为 0002,起始扇区为
8026( 1F7AH)。
MS-DOS/Windows98文件系统磁盘的结构 -5
? 整个硬盘还有一个主引导区,它是 0头 0柱 1扇
区,它也是 512B大小。
? 主引导区由二部分组成,第一部分主引导记录,
占据扇区的前 446个,磁盘标识符( FD 4E F2
14)位于这记录的未尾。第二部分是分区表,
分区表中每个条目有 16字节长,分区表最多有
4个条目,第一个分区条目从扇区的偏移量位
置是 0× 01BE。分区表中主要参数意义见表。
MS-DOS/Windows98文件系统磁盘的结构 -6
字节偏移 域长 例 意 义
00 1B 0 × 80 引导指示符。 80 -系统分区,00 -不用来引导。
01 1B 0 × 01 起始磁头号
02 6 位 0 × 01 起始扇区号。只用到 0-5 位,6-7 位作起始柱面域
高 2 位
03 10 位 0 × 00 起始柱面号。它是 10 位值,最大值为 1024,这个
域包括柱面低 8 位。
04 1B 0 × 06 系统 ID 这个域定义卷类型 (详见后说明)
05 1B 0 × 0F 终止磁头号。
06 6 位 0 × 3F 终止扇区号,同起始扇区号。
07 10 位 0 × 196 终止柱面号,同起始柱面号
08 4B 3F 00 00 00 相对扇区 (本分区已用扇区数)
12 4B 51 42 06 00 本分区总扇区数
表 5-5 主引导块分区表的域意义
MS-DOS/Windows98文件系统磁盘的结构 -7
下面是一计算机硬盘主引导区的分区表:
2171:03B0 80
01,.
2171:03C0 01 00 06 FE 7F 04 3F 00-00 00 86 FA 3F 00 00
00,.....?.....?...
2171:03D0 41 05 05 FE BF 0B C5 FA-3F 00 47 78 40 00 00 00
A.......?.Gx@...
2171:03E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00
00,...............
2171:03F0 00 00 00 00 00 00 00 00-00 00 00 00 00
00,.............
分区表中系统 ID域描述用来格式化主分区和逻辑分区的文件系统,
WindowsNT使用这个域来决定在启动时加载那些文件系统的设备
驱动程序,如果定义了扩展分区的话,这个域也可用来标识扩展
分区。系统 ID域值的意义见表。
MS-DOS/Windows98文件系统磁盘的结构 -8
数值 意 义 适用 OS
DOS 98 NT
0 × 01 FAT12 主分区或逻辑分区,卷中扇区数< 32680 √ √
0 × 04 FAT16 主分区或逻辑分区,卷中扇区数 32680 - 65535 √ √ √
0 × 05 扩展 DOS 分区 √ √ √
0 × 06 BIGDOS FAT 主分区或逻辑分区 √ √
0 × 07 NTFS 主分区或逻辑分区 √
0 × 0B FAT32 主分区,使用 INT 13 (中断 13 )扩展 √
0 × 0C FAT32 扩展分区,使用 INT 13 扩展 √
0 × 0E FAT16 扩展分区,使用 INT 13 扩展 √
0 × 0F FAT16 主分区,使用 INT 13 扩展 √
0 × 10 OS/2 HPFT √
0 × DB 并行 DOS
表 5-6 分区表的系统 ID 域意义