Windows文件管理 Instructor: Hengming Zou, Ph.D. In Pursuit of Absolute Simplicity 求于至简,归于永恒 内容提要  第1讲 文件概念与实现  第2讲 目录与文件系统 第1讲 文件概念与实现  文件  文件实现 文件  1.1 文件概念  1.2 文件命名 

Download Report

Transcript Windows文件管理 Instructor: Hengming Zou, Ph.D. In Pursuit of Absolute Simplicity 求于至简,归于永恒 内容提要  第1讲 文件概念与实现  第2讲 目录与文件系统 第1讲 文件概念与实现  文件  文件实现 文件  1.1 文件概念  1.2 文件命名 

Windows文件管理
Instructor: Hengming Zou, Ph.D.
In Pursuit of Absolute Simplicity 求于至简,归于永恒
内容提要
 第1讲 文件概念与实现
 第2讲 目录与文件系统
2
第1讲 文件概念与实现
 文件
 文件实现
3
文件
 1.1 文件概念
 1.2 文件命名
 1.3 文件属性
 1.4 文件分类
 1.5 文件存取
 1.6 文件结构
4
1.1 文件概念
 一个抽象机制:一组带标识的在逻辑上有完整意义的信息项
的序列,这个标识为文件名
 两种观点看待文件
–用户观点
–操作系统观点
5
1.2 文件命名
 给出文件命名规则:
 长度,数字和特殊字符,大小写区分,支持文件扩展名(一
个或多个)
 例子:.bak .c .f77 .gif
.hlp .html .mpg .o
.ps .tex .txt .zip
6
1.3 文件属性
 包括两部分内容
– 文件数据
– 文件属性
 常用的数种文件属性
7
1.4 文件分类
 按文件性质和用途分类
 按信息保存期限分类
 按文件的保护方式分类
 按文件的逻辑结构分类
 按文件的物理结构分类
8
UNIX系统文件分类
 普通文件(regular)
 目录文件(directory)
 特殊文件(special file)
9
1.5 文件存取
 顺序存取
 随机访问(直接访问)
 索引访问(按键访问)
存储介质
磁带
物理结构
连续结构
存取方式
顺序存取
磁盘
连续
链接
索引
顺序
顺序
顺序
随机
随机
10
文件创建
 create(文件名,访问权限,(,最大长度))
 ① 检查参数的合法性
– 文件名是否符合命名规则:是→②,否则→错误返回
 ② 检查同一目录下有无重名文件:无→③,有→错误返回
 ③ 在目录中有无空闲位置:有→②,否则→不成功返回
– 有的系统可能要为此文件申请数据块空间
 ④ 填写目录项内容:
– 文件名,用户名等,存取权限,长度置零,(,首址)
 ⑤ 返回
11
文件打开
 使用文件的第一步,任何一个文件使用前都要先打开,即把
FCB送到内存
– fd=open(文件路径名,打开方式)
12
文件打开的步骤
 ① 根据文件路径名查目录,找到FCB主部;
 ② 根据打开方式、共享说明和用户身份检查访问合法性
 ③ 根据文件号查系统打开文件表,看文件是否已被打开
– 是→共享计数加1
– 否则→将外存中的FCB主部等信息填入系统打开文件表空表项,
共享计数置为1
 ④ 在用户打开文件表中取一空表项,填写打开方式等,并指
向系统打开文件表对应表项
–返回信息:fd文件描述符,是非负整数,用于以后读写文件
13
文件读
 read(文件名,(文件内位置),要读的长度,内存地址)
– 隐含参数:进程主
 ① 检查长度是否为正整数
– 是→②,否则→⑩
 ② 根据文件名查找目录,确定该文件在目录中的位置
 ③ 根据隐含参数中的进程主和目录中该文件的存储权限数据,
检查是否有权读?
– 是→④,否则→⑩
14
文件读
 ④ 由文件内位置与要读的长度计算最末位置,将其与目录中
的文件长度比较,超过否?
– 是→⑩,否则→⑤
– 也可将参数中的长度修正为目录中的文件长度
 ⑤ 根据参数中的位置、长度和目录中的映射信息,确定块号、
块数、块内位移与长度。(多次读盘)
 ⑥ 根据下一块号读块至内存缓冲区
 ⑦ 根据块内位移长度取出要读的内容,送至参数中的内存目
的地址
15
文件读
 ⑧ 根据块内长度或起始块号+块数,确定还读下一块吗?同
时确定下一块块号
– 是→⑤,否则→⑨
 ⑨ 正常返回
 ⑩ 错误返回,返回相应错误号
16
文件读写定位
 ① 由fd查用户打开文件表,找到对应的入口;
 ② 将用户打开文件表中文件读写指针位置设为新指针的位置,
供后继读写命令存取该指针处文件内容
17
其它文件操作
 文件关闭
 文件写
 文件删除
 文件截断
18
1.7 文件结构
 分为逻辑结构和物理结构
 逻辑结构是从用户角度看文件,研究文件的组织形式
 物理结构是从系统的角度来看文件,从文件在物理介质上的
存放方式来研究文件
19
2. 文件实现
 主要考虑如何在外部存储介质上为创建文件而分配空间,为
删除文件而回收空间,以及对空闲空间进行管理
主要考虑:
 空间分配策略
 空闲空间管理
20
2.1 空间分配策略
(1)连续空间分配(顺序)
文件的信息存放在若干连续的物理块中
优点: 简单
支持顺序存取和随机存取
顺序存取速度快
所需的磁盘寻道次数和寻道时间最少
21
文件目录
count
0
1
2
3
4
5
6
7
8
9
10 11
f
tr
12 13 14 15
mail
16 17 18 19
20 21 22 23
文件名
count
tr
mail
list
f
始址
块数
0
14
19
28
6
2
3
6
4
2
24 25 26 27
list
28 29 30 31
22
 缺点:
–文件不能动态增长
预留空间:浪费
重新分配和移动
–不利于文件插入和删除
–外部碎片问题-存储压缩技术
23
(2)链接结构
– 一个文件的信息存放在若干不连续的物理块中,各块之间通
过指针连接,前一个物理块指向下一个物理块
–
优点:提高了磁盘空间利用率,不存在外部碎片问题
• 有利于文件插入和删除
• 有利于文件动态扩充
24
文件目录
0
1 10 2
3
4
5
7
8
9 16 10 25 11
12
6
13
14
15
16 1 17
18
19
20
21
22
23
24
25 -1 26
27
28
29
31
30
文件名
始址
jeep
25
9
末址
25
 缺点:存取速度慢,不适于随机存取
可靠性问题,如指针出错
更多的寻道次数和寻道时间
链接指针占用一定的空间
 链接结构的一个变形:
文件分配表FAT
26
(3)索引结构
一个文件的信息存放在若干不连续物理块中,系统为每个文
件建立一个专用数据结构--索引表,并将这些块的块号存放
在一个索引表中
一个索引表就是磁盘块地址数组,其中第i个条目指向文件的第
i块
27
文件目录
0
1
2
3
4
5
6
7
8
9
10 11
文件名
索引表地址
Jeep
19
12 13 14 15
16 17 18 19
20 21 22 23
24 25 26 27
28 29 30 31
19
9
16
1
10
25
-1
-1
-1
28
优点:
保持了链接结构的优点,又解决了其缺点:
 即能顺序存取,又能随机存取
 满足了文件动态增长、插入删除的要求
 能充分利用外存空间
29
 缺点:较多的寻道次数和寻道时间
索引表本身带来了系统开销
如:内外存空间,存取时间
30
 索引表组织
–链接模式
–多级索引
–综合模式
31
 UNIX文件系统采用的是多级索引结构(综合模式)
 UNIX中采用了三级索引结构后,文件最大可达16兆个物理块
32
33
2.2 空闲空间管理
(1)空闲块表
将所有空闲块记录在一个表中,即空闲块表,有两项
(2)空闲块链表
把所有空闲块链成一个链
扩展:成组链接法
34
第一组各块块号
与总块数
文件存储设备
最后组
最后组
的块号
与总块
数
第三组
50块
倒数第二组各块
块号与总块数
第二组
第一组
50块
49块
第二组各块块号
与总块数
文件资源表
35
分配和回收的算法
1.分配一个空闲块
查L单元内容(空闲块数):
当空闲块数>1
i : =L+空闲块数;
从i单元得到一空闲块号;
把该块分配给申请者;
空闲块数减1。
当空闲块数=1
取出L+1单元内容(一组的第一块块号或0);
其值=0 无空闲块,申请者等待
不等于零 把该块内容复制到专用块;
该块分配给申请者;
把专用块内容读到主存L开始的区域。
36
分配和回收的算法(续)
2.归还一块
查L单元的空闲块数;
当空闲块数<100
空闲块数加1;
j : =L+空闲块数;
归还块号填入j单元。
当空闲块数=100 把主存中登记的信息写入归还块中;
把归还块号填入L+1单元;
将L单元置成1。
37
(3)位图法
 用一串二进制位反映磁盘空间中分配使用情况, 每个物理块
对应一位, 分配物理块为1,否则为0
 申请物理块时,可以在位示图中查找为0的位,返回对应物
理块号;
 归还时;将对应位转置0
 描述能力强,适合各种物理结构
38
 计算公式:
已知字号i,位号j
块号=i×字长+j
已知块号:
字号=[ 块号/字长]
位号=块号 mod 字长
39
 已知块号,则磁盘地址:
柱面号=[块号/(磁头数×扇区数)]
磁头号=[(块号mod (磁头数×扇区数))/扇 区数]
扇区号=(块号mod (磁头数×扇区数))mod 扇区数
 已知磁盘地址:
块号=柱面号×(磁头数×扇区数)+磁头号×扇区数
+扇区号
40
小测验
 文件属性包含哪两个部分的内容?
A. 文件数据
B. 文件本身的说明信息
C. 文件类型
D. 文件长度
 下列哪一类不属于按文件的物理结构分类?
A. 顺序(连续)文件 B. 链接文件
C. 索引文件
D. 记录文件
 磁带所采取的存取方式是
A. 顺序
B. 随机
 Unix 采用的是
A. 一级索引结构 B. 二级索引结构 C.多级索引结构
41
习题

从用户观点和操作系统观点看文件各有什么特点?

按物理结构文件可以如何分类,按文件的逻辑结构如何分
类?

请列举常用的空间分配策略及其优缺点。
42
第2讲 目录与文件系统

目录的概念与实现

文件系统
43
1. 目录概念与实现
 目录
– 目录概念
– 目录功能
– 目录结构
– 目录操作
 目录实现
44
1.1目录概念
 文件控制块FCB
 文件控制块是文件存在的标志
 文件控制块的主要内容
 文件目录
 目录项
 目录文件
45
 文件控制块(FCB):文件控制块是操作系统为管理文件而
设置的数据结构,存放了为管理文件所需的所有有关信息
(文件属性)
文件控制块是文件存在的标志
46
 文件目录:把所有的FCB组织在一起,就构成了文件目录,
即文件控制块的有序集合
 目录项:构成文件目录的项目(目录项就是FCB)
 目录文件:为了实现对文件目录的管理,通常将文件目录以
文件的形式保存在外存,这个文件就叫目录文件
47
 文件控制块的内容:
文件名,文件号,用户名,文件地址,文件长度,文件类型,
文件属性,共享计数,文件的建立日期,保存期限,最后修
改日期,最后访问日期,口令,文件逻辑结构,文件物理结
构
48
 文件目录:把所有的FCB组织在一起,就构成了文件目录,
即文件控制块的有序集合
 目录项:构成文件目录的项目(目录项就是FCB)
 目录文件:为了实现对文件目录的管理,通常将文件目录以
文件的形式保存在外存,这个文件就叫目录文件
49
1.2 目录功能
 实现“按名操作”
 提高检索速度
 允许文件同名
 允许文件共享
50
1.3 目录结构
(1)一级目录结构
为所有文件建立一个目录文件(组成一线性表)
优点:简单,易实现
缺点:
– 限制了用户对文件的命名
– 文件平均检索时间长
– 限制了对文件的共享
51
单级目录
根目录
ZImage
bash
more
52
(2)二级目录结构
–
为改变一级目录文件目录命名冲突,并提高对目录文件检索
速度而改进
–
目录分为两级:
1.
2.
一级称为主文件目录
二级称为用户文件目录(又称用户子目录)
53
优点:解决了文件重名问题和文件共享问题
用户名|文件名
查找时间降低
缺点:增加了系统开销
54
UFD(user1)
PCB1
普通文件
ABC
PCB2
LMN
MFD
用户名
子目录指针
User1
User2
UFD(user2)
PCB1
XYZ
PCB2
ABC
55
root
db
c
db
dbb
a
b
dba
dbba
…
a
b
…
a
x
y
56
(3)多级目录结构(树型目录)
优点:
层次结构清晰,便于管理和保护;有利于文件分类;解决重
名问题;提高文件检索速度;能进行存取权限的控制
缺点:
查找一个文件按路径名逐层检查,由于每个文件都放在外存,
多次访盘影响速度
57
58
(4)无环结构目录
 是多级层次目录的推广
 为了允许文件或者目录可以被不同的目录共享
 不同的主目录可以共享一个文件或者分目录
 优点:比树结构灵活,可以实现共享
 缺点:实现复杂
59
根目录
root
bash
.Zncom
usr
conf
L2.cc
Luo
Project1
Z1.c
Z2.cc
readme
Z3.cc
60
(5)图状结构目录
 在无环结构目录基础上形成的一种目录
 无环目录要求目录结构中没有环
 图状结构中存在环
61
根目录
root
bash
usr
conf
L2.cc
.Zncom
Luo
Project1
Z1.c
Z2.cc
readme
Z3.cc
62
1.4 目录操作
 目录创建
 目录删除
 文件检索
 目录打开
 目录关闭
63
1.5 目录实现
 线性表算法
 哈希表算法
 其它算法
如B+树
NTFS文件系统就采用了B+树
64
2. 文件系统
2.1 文件系统模型
2.2 文件系统可恢复性
2.3 文件系统安全性
65
2.1 文件系统模型
 文件系统的层次模型
 SUN虚拟文件系统模型
 Windows文件系统模型
 常用文件系统
66
文件系统的层次模型
文件系统接口
逻辑文件
文件组织模块层
基本文件系统层
基本I/O控制层
物理磁盘
67
SUN虚拟文件系统模型
 SUN公司提出的虚拟文件系统(VFS),通过VFS可以支持
多种文件系统,如EXT2,FAT,NTFS等等
 VFS有两个接口:一个是与用户的接口,一个是与特定文件
系统的接口
68
Linux的VFS
索引节点
高速缓存
VFS
目录高速缓存
EXT2
FAT
Minix
缓冲区缓存
磁盘驱动
69
Windows文件系统模型
I/O API
过滤驱动程序
文件系统驱动程序
过滤驱动程序
管
理
器
过滤驱动程序
NT
I/O
中间驱动程序
管
理
器
设备驱动程序
HAL
物理设备
70
2.2 文件系统可恢复性
(1) 谨慎写(careful write)
对写操作进行逐个排序的写方式
更新磁盘的请求→按一定顺序完成几项子操作→更新磁盘
FAT文件系统:通写(write-through)
磁盘修改立即写到磁盘
速度性能差
71
(2)延迟写(lazy-write)
利用回写(write back)高速缓存的方法得到高速
可恢复性差
(3)可恢复(transaction log)
采用事务日志来实现文件系统的写入
既考虑安全性,又考虑速度性能
例:NTFS
72
2.3 文件系统安全性
(1)安全性
确保未经授权的用户不能存取某些文件。涉及到技术、管理、
法律、道德和政治等问题
73
 安全性的两个重要方面
–数据丢失
• 灾难
• 硬件或软件故障
• 人的失误
–入侵者:积极的 或 消极的
• 非技术人员的偶然窥视
• 入侵者的窥视
• 明确的偷窃企图
• 商业或军事间谍活动
74
(2)著名的安全缺陷
UNIX lpr
mkdir abc
TENEX
OS/360
Logic bomb:逻辑炸弹
Morris:蠕虫
75
(3)一般性的安全攻击
 请求内存页、磁盘空间和磁带并读取其内容
 尝试非法的系统调用(非法参数 、不合适的参数)
 在登录过程中键入DEL,BREAK
 写一段程序欺骗用户……
 病毒
76
(4)安全性的设计原则
 系统设计必须公开
 缺省属性应该不可访问
 检查当前权限
 给每个进程赋予一个最小的可能权限
 保护机制应简单一致,嵌入到系统底层
 采取的方案必须可接受
77
观察与体验5-1:
查看SAM键和SECURITY键
 目的:通过注册表查看SAM键和
SECURITY键
 操作步骤:运行regedit打开注册表
通过\编辑\查找找到SAM键和
SECURITY键的值
 注意:SAM键和SECURITY键是受安全设置保护的,请通过
系统帐号访问
78
SAM键图示:
79
SECURITY键图示:
80
小测验
 目录的功能包括
A. 实现“按名操作” B. 提高检索速度
C. 允许文件同名
D. 允许文件共享
 下列哪几种文件系统典型的写入方式?
A. 谨慎写
B. 延迟写
C. 中断写
 在文件系统的层次模型中,文件组织模块层在基本文件系统层的下面(对
/错)
81
习题

请列出目录的基本功能。

文件目录有几种实现方式?它们各自的优缺点是什么?

文件系统有几种写入设计方式?它们各自有什么特点?

请描述文件系统的层次模型。
82
第3讲 Windows文件系统概述
 概述
 FSD( File System Driver 文件系统驱动程序)
 FSD与文件系统操作
 FAT文件系统
83
1. 概述
 Windows Server 2003目前支持的文件系统
– CDFS与UDF
– FAT12,FAT16与FAT32
– NTFS
84
Windows文件系统概述:CDFS
 CDFS ( CDROM File System , 只 读 光 盘 文 件 系 统 ) 是
1988年为只读光盘所制定的文件系统标准。CDFS比较简单,
但是有一定的限制:
– 文件和目录名的长度必须少于32个字符。
– 目录树的深度不能超过8层。
– 现已过时,已被UDF标准所代替。
– FSD: \[WinRoot]\System32\Drivers\Cdfs.sys
85
Windows文件系统概述:UDF
 UDF(Universal Disk Format,通用磁盘格式)是于1995年由OSTA
(Optical Storage Technology Association,光学存储技术协会)为
光磁盘存储媒介如DVD-ROM等所制定的,用来代替CDFS,比CDFS更
加灵活。UDF具有如下特点:
– 文件名区分大小写
– 文件名可以有255字符长
– 最长路径为1023个字符
– FSD:\[WinRoot]\System32\Drivers\Udfs.sys
86
Windows文件系统概述:FAT
 FAT(File Allocation Table,文件分配表)文件系统属遗留文件系统。
为了向后兼容,也为了方便用户升级,Windows 2000/XP/2003仍然提
供对FAT的支持
– 每一种FAT文件系统都用一个数字来标识磁盘上簇号的位数。
•
例如,FAT12的簇标识为12位(二进制数),这限制了它的单个分区最多只能存储2 12
(=4096)个簇,而FAT 12在Windows 2000/XP中的簇大小在512B与8KB之间,这意味着
FAT12卷的大小至多只有32M。
– FSD:\Winnt\System32\Drivers\Fastfat.sys
87
Windows文件系统概述:NTFS
 NTFS是Windows 2000/XP的本机文件系统
– NTFS的簇标识为64位
– 文件与目录的安全性
– 文件与目录的压缩
– 文件与目录的加密
– 文件与目录的可恢复性
– FSD:\[WinRoot]\System32\Drivers\ntfs.sys
88
2. FSD
 分为本地FSD和远程FSD
 本地FSD:允许用户访问本地计算机的数据
 远程FSD:允许用户通过网络访问远程计算机上的数据
89
本地FSD
应用程序接口
用户态
I/O管理器
文件系统驱动程序
核心态
存储设备驱动
物理磁盘
物理设备
90
远程FSD
客户端
应用程序
服务器端
用户态
核心态
用户态
远程FSD(服务器)
核心态
I/O管理器
远程FSD(重定向器)
本地FSD
物理磁盘
存储设备驱动
物理设备
91
3. FSD与文件系统操作
3.1 FSD的作用
3.2 显式文件I/O
3.3 高速缓存迟后写
3.4 高速缓存超前读
3.5 内存脏页写
3.6 内存缺页处理
92
3.1 FSD的作用
 Windows文件系统的有关操作都通过FSD来完成
– 显示文件I/O
– 高速缓存超前读
– 内存脏页写
– 内存缺页处理
93
FSD的作用
缺页中断
NtReadFile()
NtCreateSection()
NtWriteFile()
IRP
缺页事件处理机
脏页写
虚拟
内存
管理
器
IoPageReadFile()
IoAsynchronousP
ageWrite()
提前读
CcCopyRead()
非
缓
存
页
面
I/o
MmFlushSection()
MmCreateSection()
延迟写
文件系统
驱动程序
CcCopyWrite()
缓存
管理
器
存储设备
驱动程序
FastIoRead()
FastIoWrite()
94
3.2 显式文件I/O
CreateFile(ReadFile,WriteFile)(Win32API)
=> NtCreateFile
=>通过ObOpenObjectByName解析名称字符串
=>通过IopParseDevice创建IRP(I/O request packet,I/O请求包)
=>通过IoCallDriver将IRP交给合适的FSD以创建文件
95
显式文件I/O
ReadFile
=>NtReadFile
=>将已打开文件的句柄转换成文件对象指针
=>检查访问权限
=>创建IRP读请求
=>通过IoCallDriver将IRP交给合适的FSD
=>如可在高速缓存,则应检查PrivateCacheMap
=>如有效则表示该文件已有私有高速缓存映射结构;
=>如无效则表示尚没有私有高速缓存映射结构,需要调用CcInitializeCacheMap来初始化
=>通过CcCopyRead从高速缓存中读取数据。如果数据还不在高速缓
存中,CcCopyRead会引起缺页中断,并间接调用
MmAccessFault
96
3.3 高速缓存延迟后写
 高速缓存管理器的迟后写线程定期地对高速缓存中已被修改
的页面进行写操作。这是通过调用内存管理器的
MmFlushSection函数来完成的。具体地说,
MmFlushSection通过IoAsynchronousPageWrite将数据
送交FSD
97
3.4 高速缓存超前读
 高速缓存管理器的超前读线程负责提前读数据.超前读线
程通过分析已作的读操作,来决定提前读多少。提前读线
程是通过缺页中断来完成的
98
3.5 内存脏页写
 内存脏页写线程定期地清洗缓冲区。该线程通过
IoAsynchronousPageWrite来创建IRP写请求,这些IRP被
标识为不能通过高速缓存,因此它们被FSD直接送交到磁盘
存储驱动程序
99
3.6 内存缺页处理
 以上在进行显式I/O操作与高速缓存提前读时,都会用到内存缺页处理。
另外,只要应用程序访问内存映射文件且所需页面不在内存时,也会产生
内存缺页处理。内存缺页处理MmAccessFault通过IoPageRead向文件
所在文件系统发送IRP请求包来完成
100
4. FAT文件系统
4.1 简介
4.2 卷的结构
4.3 引导扇区
4.4 文件分配表
4.5 FAT根目录
4.6 FAT32
101
4.1 FAT文件系统简介
 File Allocation Table(文件分配表)
 以FAT格式化的卷以簇为单位进行分配,默认大小由卷大小
决定
 每一种FAT文件系统都用一个数字来标识磁盘上簇号的位数:
– FAT12/FAT16
– FAT32
102
FAT不同版本间的区别
系统
文件分配表中每个
簇的字节数
簇界限
FAT12
1.5
小于4087簇
FAT16
2
界于4087和65526簇之间(包括边界)
FAT32
4
界于65526和268,435,456簇之间(包括边界)
103
4.2 FAT卷的结构
引导区 文件分配表1 文件分配表2 根目录
其他目录和文件
104
4.3 引导扇区
 引导扇区(Boot Sector)包含用于描述卷的各种信息,利
用这些信息才能访问文件系统
 X86上,主引导记录(Master Boot Record)使用系统分区
上的引导扇区来装载操作系统的核心文件
105
分区引导扇区中的域
字节偏移量
(16进制)
域长
样值
(16进制)
含义
00
3字节
EB 3C 90
转移指令
03
8字节
MSDOS5.0
文本格式的OEM名
0B
25字节
BIOS参数块 (BIOS Parameter
Block, BPB)
24
26字节
扩展BIOS参数块(Extended
BIOS Parameter Block,
3E
448字节
引导代码
1FE
2字节
55 AA
扇区结束标记
106
引导扇区(续)
 引导扇区的BIOS参数块包含了卷的信息
– 逻辑扇区号
– 允许同时访问的文件卷数目上限可以由config.sys文件中的
LASTDRIVE= 语句指定
– 簇(cluster):由若干个扇区组成。在一个文件卷中从0开始对
每个簇编号
107
引导扇区-BIOS参数块
字节偏移量(16进
进制)
样值(16进制)
域长
含义
0B
2字节
00 02
每扇区字节数
0D
1字节
08
每簇扇区数
0E
2字节
01 00
保留扇区数:从分区引导扇区到第一个文件分配表开始的扇
区数
10
1字节
02
文件分配表数
11
2字节
00 02
根目录项数
13
2字节
00 00
小扇区数:卷上的扇区数,如果该数适合于16位(65535)的话
15
1字节
F8
介质类型:F8表明为硬盘,F0表明为软盘
16
2字节
C9 00
每个文件分配表的扇区数
18
2字节
3F 00
每磁道扇区数
1A
2字节
10 00
磁头数
1C
4字节
3F 00 00 00
隐藏扇区数
20
4字节
51 42 06 00
大扇区数:如果小扇区数域的取值为0,该域包含的是卷中的
扇区总数
108
引导扇区-扩展BIOS参数块(EBPB)
字节偏移量(16
进制)
域长
样值(16进制)
含义
24
1字节
80
物理磁盘号:软盘从0x00开始编号,
硬盘从0x80开始编号
25
1字节
00
当前磁头:FAT文件系统不使用
26
1字节
29
签名:必须是0x28或0x29,以便被
Windows NT所识别
27
4字节
CE 13 46 30
卷序列号:当格式化卷时创建的一个
唯一的数字
2B
11字节
NO NAME
卷标:该域用于存放卷标,但是卷标
目前是在根目录中作为一个特别文件
而存放的
36
8 字节
FAT16
系统ID:根据磁盘的格式,该域的取
值为FAT12或FAT16
109
4.4 文件分配表
 FAT表:两个镜像,互为
备份。文件卷中的每个簇
均对应一个FAT表项,文
件分配采用链式分配方法
 每个FAT表项所占位数是
簇编号的位数
文件目录
... ...
起始地址
文件A
0000
文件B 起始地址
0004
起始地址
文件C
0007
... ...
记录0000
0001
记录0001
0002
记录0002
0003
记录0003
FFFF
记录0004
0005
记录0005
0006
记录0006
0008
记录0007
FFFF
记录0008
FFFF
记录0009
0000
110
4.5 FAT根目录
 目录:是目录项的顺序文件(即大小相同的记录序列),不对目录项排序
– 若目录中包含的文件数目较多,则搜索效率低
– 每个目录项大小为32字节
– 在目录项中,若第一个字节为 E5h,则表示空目录项;若为 05h,
则表示文件名的第一个字符为 E5h。
– 文件名不区分大小写
FAT
800h
...
823h
Dir Entry
823h
...
850h
File1
850h
...
FF8h
...
800h
111
FAT根目录
 目录项
偏移
域长
含义
00h
8
文件名
08h
3
文件扩展名
0Bh
1
文件属性字节
0Ch
10
保留
16h
2
最后一次修改的时间
18h
2
最后一次修改的日期
1Ah
2
起始簇号
1Ch
4
文件大小
112
FAT根目录
 文件属性字节
Bit
7-6
保留
5
4
3
2
1
0
归档
目录
卷标
系统
隐藏
只读
113
4.6 FAT32
 主要应用于Windows 9x系统
– FAT32的根目录区(ROOT区)不再是固定区域、固定大小,
看作数据区的一部分, 采用与子目录文件相同的管理方式
– 目录项仍占32字节
– 支持长文件名格式
– 支持Unicode
– 无法支持高级容错特性,不具有内部安全特性
114
FAT32-标准BPB
字节偏移量(16
进制)
域长
含义
0B
2字节
每扇区字节数
0D
1字节
每簇扇区数
0E
2字节
保留扇区数
10
1字节
文件分配表数
11
2字节
根目录项数
13
2字节
小扇区数/00 00
15
1字节
介质类型:F8表明为硬盘,F0表明为软盘
16
2字节
每个文件分配表的扇区数/ 00 00
18
2字节
每磁道扇区数
1A
2字节
磁头数
1C
4字节
隐藏扇区数
20
4字节
大扇区数/总扇区数
115
FAT32-扩展BPB
字节偏移量(16
进制)
域长
含义
24
4字节
每个FAT的FAT32扇区数
28
2字节
指定当前激活的FAT
2A
2字节
版本号
2C
4字节
根目录起始簇号
30
2字节
指向文件系统信息扇区
32
2字节
指向引导扇区副本扇区
34
12字节
保留
40
1字节
物理磁盘号
41
1字节
保留
42
1字节
签名:必须是0x28或0x29
43
4字节
卷序列号
47
11字节
卷标
52
8字节
文件系统ID:FAT32
116
FAT32-长文件名目录项格式
偏移
长度
含义
00h
1
Bits 0-5 give the LFN part number, bit 6 is set if this is the
this is the last entry for the file
01h
10
1st 5 letters of LFN entry
0Bh
1
0Fh
0Ch
1
Reserved set to 0
0Dh
1
Checksum
0Eh
12
Next 6 letters of LFN entry
1Ah
2
0
1Ch
4
Last 2 letters of LFN entry
117
小测验
 Windows Server 2003 目前不支持哪种文件系统?
A. CDFS
B. UDF
C. Ext2
D. FAT12
 以FAT格式化的卷以簇为单位进行分配
(对/错)
 FAT文件分配表位于卷的中间(对/错)
118
习题

与FSD相关的文件操作有那些?

请解释本地FSD和远程FSD的基本过程。

简要介绍FAT文件系统的特点。

引导扇区和主引导记录分别有什么用途?
119
第4讲 NTFS文件系统
 概述
 NTFS文件系统驱动程序
 NTFS的磁盘结构
 NTFS的文件组织
 NTFS目录组织与索引
 NTFS数据压缩
 NTFS可恢复性
 NTFS安全性
120
1. 概述
 NTFS为改进的多级目录结构,支持文件别名
 NTFS文件由多个文件属性构成,每个属性由属性名和属性
流(stream, 简单字节队列)组成
 NTFS支持用户权限管理
 NTFS文件支持数据压缩功能
 NTFS卷结构支持容错功能
121
概述
 NTFS具有众多优点,这主要是因为它在磁盘上独特的实现
方法
– 如何划分磁盘
– 如何组织文件与目录
– 如何存储文件属性与数据
– 如何压缩文件数据等
122
2. NTFS文件驱动程序
 对NTFS的访问是通过I/O管理器来完成的
 此过程与高速缓存管理器,内存管理器,日志文件服务器,
卷管理器,磁盘驱动程序等协同完成I/O操作
123
核心态
I/O管理器
日志文件服务器
NTFS FSD
高速缓存管理器
卷管理器
虚拟内存管理器
磁盘驱动
物理磁盘
124
3. NTFS的磁盘结构
3.1 卷
3.2 簇
125
3.1 卷
 卷是建立在磁盘分区上
 一个磁盘可以有多个卷,一个卷也可以有多个磁盘组成
 (已格式化过的)卷上的数据可分为:元数据和用户数据
126
3.2 簇
 簇作为磁盘空间分配和回收的基本单位
–簇的大小是用户在使用Format命令或其他的格式化程序格式
化卷时确定的
–NTFS使用LCN(Logical Cluster Number,逻辑簇号)和VCN
(Virtual Cluster Number,虚拟簇号)来进行簇的定位
127
4. NTFS文件组织
4.1 文件名称
4.2 主控文件表
4.3 文件记录
4.4 常驻属性与非常驻属性
128
4.1 文件名称
 NTFS路径名中的每个文件名/目录名的长度可达255个字
节,可以包含Unicode字符、 多个空格及句点
 NTFS卷上的每个文件都有一个64位的,称为文件引用号
的唯一标识
 文件引用号的组成
– 文件号
– 文件顺序号
129
MS-DOS子系统,Win32子系统与POSIX子系统的名字空间
POSIX子系统
Win32子系统
text
text
MS—DOS Windows
子系统
130
4.2 主控文件表
 MFT(Master File Table,主控文件表)是NTFS卷结构的
核心,是NTFS中最重要的系统文件,包含了卷中所有文件
的信息
 MFT是以文件记录数组来实现的
 MFT开始的16个元数据文件是保留的
131
主控文件表的元数据文件记录
 0:$Mft:MFT本身
 1:$MftMirr:MFT镜像
 2:$LogFile:日志文件
 3:$Volume:卷文件
 4:$AttrDef:属性定义表
 5:$\:根目录
 6:$Bitmap:位图文件
 7:$Boot:引导文件
 8:$BadClus:坏簇文件
 9:$Secure:安全文件
 10:$UpCase:大写文件
 11:$Extended metadata directory:扩展元数据目录
 12,13,14,15:预留
 >15:其他用户文件和目录
132
主控文件表空间分配
MFT分配空间
文件存储区
MFT元数据文件
文件存储区
MFT前16个元数据文件备份
133
4.3 文件记录
 NTFS文件是属性/属性值的集合
 每个属性由单个的流(stream)组成
 NTFS提供对属性流的各种操作
 读写操作一般是针对文件的未命名属性的,对于已命名的属
性则可以通过已命名的数据流句法来进行操作
134
文件记录
 NTFS文件是属性的集合,通常所说的文件内容是指未命名数据属性流
 例:我们定义两个数据属性:ntfile(数据)和ntfile:data(自定义数据)。在向FAT
复制时,自定义属性会丢失
– echo test....data >ntfile
– echo test....user defined data >ntfile:data
– more <ntfile
– more <ntfile:data
– copy ntfile e:ntfile (E:为NTFS文件系统)
– copy ntfile c:ntfile (C:为FAT文件系统)
– more <e:ntfile
– more <e:ntfile:data
– more <c:ntfile
– more <c:ntfile:data
135
文件记录
 NTFS卷上文件的常用属性(并不是所有文件都有所有这些属性)
–
–
–
–
–
–
–
–
–
–
–
–
–
–
–
$VOLUME_INFORMATION
$VOLUME_NAME
$STANDARD_INFORMATION
$FILE_NAME
$SECURITY_DESCRIPTOR
$DATA
$INDEX_ROOT
$INDEX_ALLOCATION
$BITMAP
$ATTRIBUTE_LIST
$OBJECT_ID
$REPARSE_POINT
$EA
$EA_INFORMATION
$LOGGED_UTILITY_STREAM
136
观察与体验5-2:观察流
 目的:查看流的活动
 Echo和more命令可以和可替换的命名数据流工作,一个简
单的查看流的活动的方法是用echo创建一个命名流,然后用
more显示。下面的命令创建了一个名为text的文本文件
c:\>echo hello > test.txt
c:\>more test.txt
137
运行过程及结果如下图所示:
138
4.4 常驻属性与非常驻属性
 当属性值能直接存放在MFT中时,该属性就称为常驻属性(resident
attribute)。
 如果属性值能直接存放在MFT中,那么NTFS对它的访问时间就将大
大缩短
标准信息
文件名
文件索引
文件1
文件2
文件3
空
139
常驻属性与非常驻属性
 如果一个属性(如文件数据属性)太大而不能存放在只有1KB的MFT文
件记录中,那么NTFS将从MFT之外分配区域。这些区域通常称为一个
延展(run)或一个延伸(extent),它们可用来存储属性值,如文件数
据。如果以后属性值又增加,那么NTFS将会再分配一个延展,以便用
来存储额外的数据。值存储在延展中而不是在MFT文件记录中的属性称
为非常驻属性(nonresident attributes)
 在标准属性中,只有可以增长的属性才是非常驻的。对文件来说,可增
长的属性有数据、属性列表等。标准信息和文件名属性总是常驻的
140
常驻属性与非常驻属性
标准信息
VCN
文件名
0
1
2
数
LCN
1278
1279
标准信息
索引缓冲区
数据
3
4
5
据
数
1280
文件名
文件1 文件2
6
1281
1300
索引根
文件3
文件7
. . .
1301
索引分配
7
据
1302
1303
位图
文件4 文件5 文件6
141
NTFS目录组织与索引
 索引根属性将相应目录中的文件名和子目录名进行排序
 索引分配属性包含了索引缓冲区的VCN到LCN映射
 位图属性跟踪在索引缓冲区中哪些VCN是在使用而哪些是空闲的
标准信息
VCN
0
文件0
LCN
1355
文件名
“\”
1
2
文件1
文件3
1356
1357
索引根
文件4
3
文件9
4
文件14 其他文件
5
文件5
1358
1049
索引分配
6
文件7
1050
1051
位图
VCN到LCN转换
7
文件10
1588
8
文件11
1589
...
9
文件12
1590
142
6. NTFS数据压缩
 压缩稀疏文件:
– 稀疏文件是指相对于文件大小而言只有少量非零数据的文件
– NTFS只给那些包含非零数据的延展分配磁盘空间
– 当程序从压缩文件中读取数据时,NTFS通过检测该位置是否
有VCN到LCN的映射来决定该数据是不是零数据
标准信息
文件名
开始的
VCN
开始的
LCN
簇数
0
1200
16
32
1280
16
64
1356
16
80
967
16
143
NTFS数据压缩
 压缩非稀疏文件
– NTFS是以16个簇为压缩单元
来进行一般文件的压缩的
– 当NTFS向压缩文件写数据时, 标准信息
它确保每个延展都以一个虚
拟16簇边界开始。因此每个
延展中VCN都是以16的倍数
开始的,并且延展的长度不
大于16
文件名
开始的
VCN
开始的
LCN
0
1200
4
16
1280
8
32
1356
9
48
967
16
簇数
144
7. NTFS可恢复性
 通过日志记录来实现
 子操作在磁盘运行之前,记录在日志文件中
 系统恢复阶段,NTFS根据日志文件中的文件操作信息,对
部分完成的事务进行重做或者撤销,保证磁盘文件系统的一
致性
145
NTFS可恢复性
 日志文件服务:一组NTFS驱动程序内的核心态程序
 日志记录
– 更新记录
– 检查点记录
 恢复过程
– 维护两张表:事务表和脏页表
– 日志文件进行三次扫描
•
•
•
分析扫描
重做扫描
撤销扫描
 NTFS坏簇恢复支持
146
8. NTFS安全性
 NTFS文件加密系统结构
– 加密文件系统(EFS)可将加密的NTFS文件存储在磁盘上
– EFS使用基于RSA的公共密钥算法进行加密
 文件加密
 解密文件
 备份加密文件
147
EFS工作流程图
内核态
用户态
磁盘设备
EFS驱动程序
4 NTFS请求EFS驱动
加密文件内容
应用
程序
1 应用程序向一个
加密文件写数据
2 NTFS将数
据存入文
件系统高
速缓存
NTFS文件系统
驱动程序
卷
5 NTFS将已加密
的文件写入磁盘
3 高速缓存管
理器将数据
经NTFS延迟
写入磁盘
缓存管理器
148
实验5-1-快速文件系统
149
快速文件系统
– 编写一个程序测试大文件随机访问时无文件缓冲模式,文件缓冲模式
和异步模式这三种访问模式的效率
– 产生一个50M的大文件dummy,作为测试的数据文件
• 测试程序基本过程如下
– 每一个测试循环节非读即写,设读发生的概率为Q1
– 随机选取文件位置p,读/写n字节的内容(注意遇到文件结尾的处理)
– 若是读数据,调用函数f1对读入的数据作一系列操作或者调用f2做一些无关的操作,设f1
调用的概率为Q2。f1和f2可以用循环来模拟,循环的次数可以是一个随机值,要在一个
合理的范围之内
– 重复以上三步,模拟随即文件读写访问
150
快速文件系统(续)
 提示:
– 三种参数下程序略有不同,主要是使用异步模式时对读取的文件
内容操作之前要检查数据是否已真的读完
– 测试程序中各处随机数的大小要具有合理的值
– 计量:
• 读取数据的总量和写数据的总量
• 数据读/写总时间(注意异步模式下的计量方法)
• f1和f2各自的操作时间
• ……
• 当然也可以在内存里面做全部访问的日志,不过要注意的是这个内容可能非
常多
151
快速文件系统(续)
– 回答问题:
• 设定Q1,Q2作如下测试
– 定时测试:对每种模式,运行你的程序10分钟,分析或取得结果
– 定次数测试:对每种模式,设定循环的次数为104次,分析取得的结果
• 适当变换Q1,Q2的值,再测,看看它们对结果有什么影响
• 查阅文献了解Linux的文件缓冲机制,说明在常规的ext2文件系统以及某种日志文
件系统例如ext3/jfs/raiserFS中缓冲机制有什么不同
152
快速文件系统(续)
 提示
三种模式的框架可以参考《Windows内核实验教程》
p109-p129,在产生文件对象的时候使用不同的模式
相关知识可以查阅《 Windows操作系统原理》
153
实验5-2-文件系统目录
目标:了解基本的目录操作
154
文件系统和目录
要求:
 设计函数,使其实现基本的目录操作,并编程实现之。具
体要求如下:
1· 设计一个可以提供目录列表的函数,函数原型为:int
fdListDir();
2· 设计一个函数,使得该函数在当前目录下可以更改到上层
目录,或者更改到下层子目录。函数原型为:int
fdChangeDir(char *directory);
155
文件系统和目录(续)
3· 设计一个函数,它的功能是删除一个文件,函数原型为:Int
fdEraseFile(char *name);
4· 设计一个函数,使得该函数可以复制一个已存在的文件到一
个新的文件中。函数原型为:int fdCopyFile(char
*source,char *destination);
5· 设计并实现一个驱动程序来检测各个函数
156
文件系统和目录(续)
提示:
 目录列表函数只需提供基本功能即可,不必支持很多选项
 相关背景知识参看《操作系统教程》
 相关函数和参数含义参阅《Windows 内核实验教程》p129
-p136和MSDN
157
小测验
 NTFS恢复过程需要维护两张表,分别是
A. 事件表 B.事务表 C. 脏页表 D. 恢复表

在NTFS恢复过程中,日志文件需要做几次扫描?
A. 1
B. 2
C. 3
D. 4
 NTFS文件系统不支持文件别名(对/错)
 EFS使用基于RSA的公共密钥算法进行加密
(对/错)
 NTFS文件系统中采用了B+树(对/错)
158
习题

NTFS中的主控文件表有什么作用?

请解释常驻属性和非常驻属性。

Windows Server 2003中的EFS的基本流程是什么样的?

NTFS中如何实现可恢复性?
159
Thoughts Change Life
意念改变生活