1、Windows操作系统-文件系统文件系统概述文件概念与实现目录概念与实现文件与目录的访问权限Windows文件系统概述文件系统的基本概念 信息是计算机系统中的重要资源。信息是计算机系统中的重要资源。文件系统是操作系统中的一个重要组成部文件系统是操作系统中的一个重要组成部分,负责信息的组织、存储和访问。分,负责信息的组织、存储和访问。文件系统的功能就是提供高效、快速和方文件系统的功能就是提供高效、快速和方便的信息存储和访问功能。便的信息存储和访问功能。文件系统的目的文件系统的目的方便的文件访问和控制:以符号名称作为文件标识,便于用户使用;并发文件访问和控制:在多道程系统中支持对文件的并发访问和控
2、制;统一的用户接口:在不同设备上提供同样的接口,方便用户操作和编程;多种文件访问权限:在多用户系统中的不同用户对同一文件会有不同的访问权限;优化性能:存储效率、检索性能、读写性能;差错恢复:能够验证文件的正确性,并具有一定的差错恢复能力;文件管理的服务功能文件访问:文件的创建、打开和关闭,文件的读写;目录管理:用于文件访问和控制的信息,不包括文件内容文件结构管理:划分记录,顺序,索引访问控制:并发访问和用户权限限额(quota):限制每个用户能够建立的文件数目、占用外存空间大小等审计(auditing):记录对指定文件的使用信息(如访问时间和用户等),保存在日志中(文件系统向上层用户提供的服务
3、文件系统向上层用户提供的服务)文件系统的实现功能文件的分块存储:与外存的存储块相配合I/O缓冲和调度:性能优化文件定位:在外存上查找文件的各个存储块外存存储空间管理:如分配和释放。主要针对可改写的外存如磁盘。外存设备访问和控制:包括由设备驱动程序支持的各种基本文件系统如硬盘,软盘,CD ROM等(文件系统要实现的功能模块文件系统要实现的功能模块)文件体:文件本身的信息;文件体:文件本身的信息;文件属性:文件存储和管理信息,例如:文件属性:文件存储和管理信息,例如:文件名、文件内部标识、文件存储地址、文件名、文件内部标识、文件存储地址、访问权限、访问时间等;访问权限、访问时间等;文件是具有符号名
4、的数据项的集合。文件名是文件是具有符号名的数据项的集合。文件名是文件的标识符号。文件包括两部分:文件的标识符号。文件包括两部分:2.2.文件的操作文件的操作打开:为文件读写所进行的准备。给出文件路径,获得文件句柄(file handle),或文件描述符(file descriptor)。需将该文件的目录项读入到内存中。关闭:释放文件描述符,把该文件在内存缓冲区的内容更新到外存上。读、写和文件读写定位:系统为每个打开文件维护一个读写指针,它是相对于文件开头的偏移地址。读写指针指向每次文件读写的开始位置,在每次读写完成后,读写指针按照读写的数据量自动后移相应数值。指围绕文件内容读写进行的文件操作。
5、指围绕文件内容读写进行的文件操作。文件结构是指文件的组织形式。文件结构是指文件的组织形式。文件结构分为文件的逻辑结构文件结构分为文件的逻辑结构(File logical(File logical structure)structure)和文件的物理结构和文件的物理结构(File physical(File physical structure)structure)。逻辑结构是从用户的观点出发,所看到的是独立逻辑结构是从用户的观点出发,所看到的是独立于文件物理特性的文件组织形式,是用户可以直于文件物理特性的文件组织形式,是用户可以直接处理的数据及其结构。接处理的数据及其结构。物理结构是文件在外存
6、上具体的存储结构。物理结构是文件在外存上具体的存储结构。文件逻辑结构的设计要求:文件逻辑结构的设计要求:访问性能:便于检索;便于修改访问性能:便于检索;便于修改 存储性能:向物理存储转换方便,节省空间存储性能:向物理存储转换方便,节省空间 文件的逻辑结构较一般可分为记录式文件和流文件的逻辑结构较一般可分为记录式文件和流式文件两种。前者是指用户把每个文件分为若式文件两种。前者是指用户把每个文件分为若干记录单位,存取文件以记录为单位来进行的,干记录单位,存取文件以记录为单位来进行的,而后者则是指文件由字符流组成,文件内部的而后者则是指文件由字符流组成,文件内部的信息不再划分单位。信息不再划分单位。
7、文件的逻辑结构是指从用户观点出发讨论文件内部的文件的逻辑结构是指从用户观点出发讨论文件内部的逻辑结构或用户访问模式;它可以独立于在外存上的逻辑结构或用户访问模式;它可以独立于在外存上的物理存储。物理存储。研究如何在外部存储介质上为创建文件而分配空间,为删除文件而回收空研究如何在外部存储介质上为创建文件而分配空间,为删除文件而回收空间,以及对空闲空间进行管理。间,以及对空闲空间进行管理。空间分配策略:空间分配策略:1.1.连续空间分配连续空间分配2.2.链接空间分配链接空间分配3.3.索引空间分配索引空间分配空间分配策略:空间分配策略:连续空间分配连续空间分配磁盘空间磁盘空间目录文件名起始地址大
8、小Hello.c22z1.cc95a.out2130163115空间分配策略:空间分配策略:链接空间分配链接空间分配磁盘空间磁盘空间目录文件名起始地址结束地址Hello.c24Hello.c:2-5-10-25-19-401631155-1 1025419空间分配策略:空间分配策略:索引空间分配索引空间分配0磁盘空间磁盘空间目录文件名索引地址Hello.c202,7,13,16,27,-1磁盘块20的内容:163115空闲空间管理空闲空间管理00101100001111110000001111111000空闲块位示图空闲块位示图空闲块链表空闲块链表0163115簇的大小两个极端:大到能容纳整个
9、文件,小到一个外存存储块;簇较大:提高I/O访问性能,减小管理开销;但簇内碎片浪费问题较严重;簇较小:簇内的碎片浪费较小,特别是大量小文件时有利;但存在簇编号空间不够的问题(如FAT12、16、32);文件的存储空间通常由多个分立的簇组成,而每个簇文件的存储空间通常由多个分立的簇组成,而每个簇包含若干个连续的扇区包含若干个连续的扇区(sector)(sector)。簇的分配方法:两种簇大小可变:I/O访问性能较好,文件存储空间的管理困难(类似于动态分区存储管理)簇大小固定:文件存储空间使用灵活,但I/O访问性能下降,文件管理所需空间开销较大 文件卷容量与簇大小的关系文件卷容量与簇大小的关系文件
10、卷容量越大,若簇的总数保持不变即簇编号文件卷容量越大,若簇的总数保持不变即簇编号所需位数保持不变,则簇越大。缺点:簇内碎片所需位数保持不变,则簇越大。缺点:簇内碎片浪费越多浪费越多文件卷容量越大,若簇大小不变,则簇总数越多,文件卷容量越大,若簇大小不变,则簇总数越多,相应簇编号所需位数越多。如簇编号长度为相应簇编号所需位数越多。如簇编号长度为1212、1616、3232二进制位,即构成二进制位,即构成FAT12FAT12、FAT16FAT16、FAT32FAT32。目录概念与实现目录内容目录结构目录管理目录是由文件说明索引组成的用于文件检索的特殊文目录是由文件说明索引组成的用于文件检索的特殊文
11、件。文件目录的内容主要是文件访问的控制信息(不件。文件目录的内容主要是文件访问的控制信息(不包括文件内容)。包括文件内容)。1.1.目录内容目录内容文件名:字符串,通常在不同系统中允许不同的最大长度。可以修改。有些系统允许同一个文件有多个别名(alias);文件类型:可有多种不同的划分方法,如:有无结构(记录文件,流式文件)内容(二进制,文本)用途(源代码,目标代码,可执行文件,数据)属性attribute(如系统,隐含等)文件组织(如顺序,索引等)目录的内容是文件属性信息目录的内容是文件属性信息(properties)(properties),其中的,其中的一部分是用户可获取的。一部分是用户
12、可获取的。1.1.基本信息基本信息2.地址信息存放位置:包括哪个设备或文件卷volume,以及各个存储块位置;文件长度(当前和上限):以字节、字或存储块为单位。可以通过写入或创建、打开、关闭等操作而变化。4.使用信息创建时间最后一次读访问的时间和用户最后一次写访问的时间和用户 文件所有者(属主):通常是创建文件的用户,文件所有者(属主):通常是创建文件的用户,或者改变已有文件的属主;或者改变已有文件的属主;访问权限(控制各用户可使用的访问方式):如访问权限(控制各用户可使用的访问方式):如读、写、执行、删除等;读、写、执行、删除等;单级目录:整个目录组织是一个线性结构,系统中的所有文件都建立在
13、一张目录表中。它主要用于单用户操作系统。它具有如下的特点:结构简单;文件多时,目录检索时间长;有命名冲突:如重名(多个文件有相同的文件名)或别名(一个文件有多个不同的文件名)目录结构讨论目录的组织结构,设计目标是检索效率。目录结构讨论目录的组织结构,设计目标是检索效率。根目录ZImagebashmore2.2.目录结构目录结构 二级目录:在根目录下,每个用户对应一个目录二级目录:在根目录下,每个用户对应一个目录(第二级目录);在用户目录下是该用户的文件,(第二级目录);在用户目录下是该用户的文件,而不再有下级目录。适用于多用户系统,各用户而不再有下级目录。适用于多用户系统,各用户可有自己的专用
14、目录。可有自己的专用目录。根目录ZImagebashrootZhaoQianmorereadmez1.cz2.cc多级层次目录:或称为树状目录。在文件数目较多时,便于系统和用户将文件分散管理。适用于较大的文件系统管理。目录级别太多时,会增加路径检索时间。目录名:可以修改。目录树:中间结点是目录,叶子结点是目录或文件。目录的上下级关系:当前目录(current directory,working directory)、父目录(parent directory)、子目录(subdirectory)、根目录(root directory)等;路径(path):每个目录或文件,可以由根目录开始依次经由
15、的各级目录名,加上最终的目录名或文件名来表示;2.2.目录结构目录结构根目录L2.ccusrroot.Zncomz3.ccz1.cz2.ccLuoProject1readmeconfZImage多级目录组织进行文件访问和控制时,由操作系统自动更新目录内容目录创建mkdir,删除rmdir,修改目录名rename。改变当前目录chdir;目录管理是指目录访问和目录属性控制。目录管理是指目录访问和目录属性控制。3.3.目录管理目录管理文件与目录访问权限文件访问类型:读read:可读出文件内容;写write(修改update或添加append):可把数据写入文件;执行execute:可由系统读出文件
16、内容,作为代码执行;删除delete:可删除文件;修改访问权限change protection:修改文件属主或访问权限设置文件访问权限的目的是为了在多个用户间提供有设置文件访问权限的目的是为了在多个用户间提供有效的文件共享机制;效的文件共享机制;用户范围类型:指定用户用户组任意用户访问类型和用户范围的组合:访问矩阵:矩阵的一维是每个目录和文件,另一维是用户范围,每个元素是允许的访问方式访问策略(policy):每种文件访问方式,所允许或禁止的用户范围。可以将文件访问方式推广到其他操作如用户管理,备份,网络访问等。文件与目录的访问权限Windows文件系统概述Windows直接支持的文件系统包
17、括:CDFS,UDFFAT12/FAT16/FAT32NTFSWindows文件系统概述:CDFSCDFS(CDROM File System,只读光盘文件系统)是1988年为只读光盘所制定的文件系统标准。CDFS比较简单,但是有一定的限制:文件和目录名的长度必须少于32个字符。目录树的深度不能超过8层。现已过时,已被UDF标准所代替。FSD:WinRootSystem32DriversCdfs.sysUDF(Universal Disk Format,通用磁盘格式)是于1995年由OSTA(Optical Storage Technology Association,光学存储技术协会)为光磁
18、盘存储媒介如DVD-ROM等所制定的,用来代替CDFS,比CDFS更加灵活。UDF具有如下特点:文件名区分大小写文件名可以有255字符长最长路径为1023个字符FSD:WinRootSystem32DriversUdfs.sysFAT(File Allocation Table,文件分配表)文件系统属遗留文件系统。为了向后兼容,也为了方便用户升级,Windows 2000/XP/2003仍然提供对FAT的支持 每一种FAT文件系统都用一个数字来标识磁盘上簇号的位数。例如,FAT12的簇标识为12位(二进制数),这限制了它的单个分区最多只能存储2 12(=4096)个簇,而FAT 12在Wind
19、ows 2000/XP中的簇大小在512B与8KB之间,这意味着FAT12卷的大小至多只有32M。FSD:WinntSystem32DriversFastfat.sysNTFS是Windows 2000/XP的本机文件系统NTFS的簇标识为64位文件与目录的安全性文件与目录的压缩文件与目录的加密文件与目录的可恢复性FSD:WinRootSystem32Driversntfs.sysFAT文件系统 每一种FAT文件系统都用一个数字来标识磁盘上簇号的位数:FAT12/FAT16FAT32系统系统文件分配表中每个文件分配表中每个簇的字节数簇的字节数簇界限簇界限FAT121.5小于小于4087簇簇 F
20、AT162界于界于4087和和65526簇之间簇之间(包括边界包括边界)FAT324界于界于65526和和268,435,456簇之间簇之间(包括边界包括边界)多级目录,无用户访问权限控制多级目录,无用户访问权限控制磁盘文件卷结构磁盘文件卷结构FAT文件系统文件分配表1引导区文件分配表2根目录其 他 目 录 和 文 件字节偏移量字节偏移量(16进制进制)域长域长样值样值(16进制进制)含义含义00 3字节字节 EB 3C 90 转移指令转移指令 03 8字节字节 MSDOS5.0 文本格式的文本格式的OEM名名 0B 25字节字节 BIOS参数块参数块(BIOS Parameter Block
21、,BPB)24 26字节字节 扩展扩展BIOS参数块参数块(Extended BIOS Parameter Block,EBPB)3E 448字节字节 引导代码引导代码 1FE 2字节字节 55 AA 扇区结束标记扇区结束标记 引导扇区引导扇区引导扇区的BIOS参数块包含了卷的信息,包括:簇大小,根目录项数目,FAT表大小,磁盘参数(每道扇区数,磁头数),文件卷中的扇区总数,簇编号长度等逻辑扇区号:三元组(柱面号,磁头号,扇区号)一个文件卷中从0开始对每个扇区编号,优点:屏蔽了物理磁盘参数的不同允许同时访问的文件卷数目上限可以由config.sys文件中的LASTDRIVE=语句指定簇(clu
22、ster):由若干个扇区组成。在一个文件卷中从0开始对每个簇编号。字节偏移量字节偏移量(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位位(65
23、535)的话的话 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,该域,该域包含的是卷中的扇区总数包含的是卷中的扇区总数 BIOSBIOS参数块参数块(BPB)(BPB)字节偏移量字节偏移量(16进制进制)域长
24、域长样值样值(16进制进制)含义含义24 1字节字节 80 物理磁盘号:软盘从物理磁盘号:软盘从0 x00开始编开始编号,硬盘从号,硬盘从0 x80开始编号开始编号25 1字节字节 00 当前磁头:当前磁头:FAT文件系统不使用。文件系统不使用。26 1字节字节 29 签名:必须是签名:必须是0 x28或或0 x29,以,以便被便被WindowsNT所识别。所识别。27 4字节字节 CE 13 46 30 卷序列号:当格式化卷时创建的一卷序列号:当格式化卷时创建的一个唯一的数字。个唯一的数字。2B 11字节字节 NO NAME 卷标:该域用于存放卷标,但是卷卷标:该域用于存放卷标,但是卷标目前
25、是在根目录中作为一个特别标目前是在根目录中作为一个特别文件而存放的。文件而存放的。36 8 字节字节FAT16 系统系统ID:根据磁盘的格式,该域:根据磁盘的格式,该域的取值为的取值为FAT12或或FAT16。扩展扩展BIOSBIOS参数块参数块(EBPB)(EBPB)每个FAT表项所占位数是簇编号的位数,其值是(以FAT12为例):0:表示该簇空闲FF7h:物理坏扇区FF8hFFFh:表示该簇是文件的最后一个簇其他值:表示该簇被文件占用,而且表项中的值是文件下一个簇的编号。FATFAT表:两个镜像,互为备份。文件卷中的每个簇均表:两个镜像,互为备份。文件卷中的每个簇均对应一个对应一个FATF
26、AT表项,文件分配采用链式分配方法。表项,文件分配采用链式分配方法。文件A起始地址0000记录00000001记录00010002文件B起始地址0004文件C起始地址0007记录00020003记录0003FFFF记录00040005记录00050006记录00060008记录0007FFFF记录0008FFFF记录00090000文件目录.目录:是目录项的顺序文件(即大小相同的记录序列),不对目录项排序。若目录中包含的文件数目较多,则搜索效率低。每个目录项大小为32字节,其内容包括:文件名(8+3个字符),属性(包括文件、子目录和文件卷标识),最后一次修改时间和日期,文件长度,第一个簇的编号
27、。在目录项中,若第一个字节为 E5h,则表示空目录项;若为 05h,则表示文件名的第一个字符为 E5h。文件名不区分大小写823h800h.FAT850h823h.800hFF8h850h.DirEntryFile1.目录项目录项偏移偏移域长域长含义含义00h8文件名文件名08h3文件扩展名文件扩展名0Bh1文件属性字节文件属性字节0Ch10保留保留16h2最后一次修改的时间最后一次修改的时间18h2最后一次修改的日期最后一次修改的日期1Ah2起始簇号起始簇号1Ch4文件大小文件大小Bit7-6543210保留保留归档归档目录目录卷标卷标系统系统隐藏隐藏只读只读文件属性字节文件属性字节主要应用
28、于主要应用于Windows 9xWindows 9x系统系统FAT32FAT32的根目录区(的根目录区(ROOTROOT区)不再是固定区域、固定大小,而是可以看作数据区)不再是固定区域、固定大小,而是可以看作数据区的一部分区的一部分,采用与子目录文件相同的管理方式。根目录下的文件数目不再受采用与子目录文件相同的管理方式。根目录下的文件数目不再受最多最多256256的限制。的限制。目录项仍占目录项仍占3232字节,可以是文件目录项、子目录项、卷标项字节,可以是文件目录项、子目录项、卷标项(仅根目录有仅根目录有)、已删除目录项、长文件名目录项等。已删除目录项、长文件名目录项等。支持长文件名格式支持
29、长文件名格式支持支持UnicodeUnicode无法支持高级容错特性,不具有内部安全特性,因而仍然无法达到高性能文无法支持高级容错特性,不具有内部安全特性,因而仍然无法达到高性能文件系统的要求件系统的要求字节偏移量字节偏移量(16进制进制)域长域长含义含义0B 2字节字节 每扇区字节数每扇区字节数0D 1字节字节 每簇扇区数每簇扇区数0E 2字节字节 保留扇区数保留扇区数10 1字节字节 文件分配表数文件分配表数11 2字节字节 根目录项数根目录项数13 2字节字节 小扇区数小扇区数/00 00 15 1字节字节 介质类型:介质类型:F8表明为硬盘,表明为硬盘,F0表明为软盘表明为软盘16 2
30、字节字节 每个文件分配表的扇区数每个文件分配表的扇区数 00 00 18 2字节字节 每磁道扇区数每磁道扇区数1A 2字节字节 磁头数磁头数1C 4字节字节 隐藏扇区数隐藏扇区数20 4字节字节 大扇区数大扇区数/总扇区数总扇区数 标准标准BPB BPB 字节偏移量字节偏移量(16进制进制)域长域长含义含义24 4字节字节 每个每个FAT的的FAT32扇区数扇区数282字节字节 指定当前激活的指定当前激活的FAT2A 2字节字节 版本号版本号 2C 4字节字节 根目录起始簇号根目录起始簇号 30 2字节字节 指向文件系统信息扇区指向文件系统信息扇区 32 2字节字节指向引导扇区副本扇区指向引导
31、扇区副本扇区34 12字节字节保留保留40 1字节字节物理磁盘号物理磁盘号41 1字节字节保留保留42 1字节字节签名:必须是签名:必须是0 x28或或0 x2943 4字节字节卷序列号卷序列号 47 11字节字节卷标卷标52 8字节字节文件系统文件系统ID:FAT32 扩展扩展BPB BPB 长文件名长文件名长文件名目录项长文件名目录项偏移偏移长度长度含义含义00h1Bits0-5givetheLFNpartnumber,bit6issetifthisisthelastentryforthefile.01h101st5lettersofLFNentry.0Bh10Fh0Ch1Reserved
32、setto0.0Dh1Checksum.0Eh12Next6lettersofLFNentry.1Ah201Ch4Last2lettersofLFNentry.长文件名长文件名文件名为文件名为The quick brown.foxThe quick brown.fox,采用,采用UnicodeUnicode编码编码,则则FAT32FAT32的目录项为:的目录项为:NTFS文件系统NTFS为改进的多级目录结构,支持文件别名;NTFS文件由多个文件属性构成,每个属性由属性名和属性流(stream,简单字节队列)组成;用户可自定义属性;NTFS支持用户权限管理:有5种权限划分:读、写、运行、删除和修
33、改权限;支持按用户、用户组分配权限;NTFS文件支持数据压缩功能;NTFS卷结构支持容错功能;NTFS磁盘结构NTFS具有众多优点,这主要是因为它在磁盘上独特的实现方法。如何划分磁盘,如何组织文件与目录,如何存储文件属性与数据,如何压缩文件数据等。NTFS磁盘结构:卷卷是建立在磁盘分区上。一个磁盘可以有多个卷,一个卷也可以有多个磁盘组成(已格式化过的)卷上的数据可分为:元数据和用户数据NTFS磁盘结构:簇簇作为磁盘空间分配和回收的基本单位簇的大小是用户在使用Format命令或其他的格式化程序格式化卷时确定的。簇因子随卷的大小而不同,但都是物理扇区的整数倍,通常是2的幂,NTFS使用LCN(Lo
34、gical Cluster Number,逻辑簇号)和VCN(Virtual Cluster Number,虚拟簇号)来进行簇的定位。LCN是对整个卷中所有的簇从头到尾所进行的简单编号。VCN是对属于特定文件的簇从头到尾进行编号,以便于引用文件中的数据。NTFS磁盘结构:主控文件表MFT(Master File Table,主控文件表)是NTFS卷结构的核心,是NTFS中最重要的系统文件,包含了卷中所有文件的信息。MFT是以文件记录数组来实现的,每个文件记录的大小都固定为1KB。卷上的每个文件(包括MFT本身)都有一行MFT记录。MFT开始的16个元数据文件是保留的。在NTFS中只有这16个元
35、数据文件占有固定的位置。每个这样的元数据文件都有一个以$开头的文件名称,不过该符号是隐藏的。16个元数据文件之后则是普通的用户文件和目录。NTFS磁盘结构:主控文件表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:其他用户文件和目录NTF
36、S磁盘结构:主控文件表文件存储区文件存储区MFT分配空间MFT元数据文件MFT前16个元数据文件备份NTFS磁盘结构:文件引用号每个文件都有一个64位(bit)的、称为文件引用号(File Reference Number)的唯一标识。文件引用号由两部分组成:一是文件号。文件号为48位(bit),对应于该文件在MFT中的位置。二是文件顺序号。文件顺序号随着每次文件记录的重用而增加,这是为了让NTFS进行内部一致性检查。NTFS磁盘结构:文件记录NTFS文件是属性/属性值的集合。文件数据就是未命名属性的值,其他文件属性包括文件名、文件拥有者、文件时间标记等。每个属性由单个的流(stream)组成
37、,即简单的字符序列。NTFS提供对属性流的各种操作:创建、删除、读取(字节范围)以及写入(字节范围)。读写操作一般是针对文件的未命名属性的,对于已命名的属性则可以通过已命名的数据流句法来进行操作。NTFSNTFS文件是属性的集合,通常所说的文件内容是指未命名数据属性流;文件是属性的集合,通常所说的文件内容是指未命名数据属性流;例:我们定义两个数据属性:例:我们定义两个数据属性:ntfile(ntfile(数据数据)和和ntfile:data(ntfile:data(自定义数据自定义数据)。在向。在向FATFAT复制时,自定义属性会丢失。复制时,自定义属性会丢失。echo test.data n
38、tfileecho test.data ntfileecho test.user defined data ntfile:dataecho test.user defined data ntfile:datamore ntfilemore ntfilemore ntfile:datamore ntfile:datacopy ntfile e:ntfile(E:copy ntfile e:ntfile(E:为为NTFSNTFS文件系统文件系统)copy ntfile c:ntfile(C:copy ntfile c:ntfile(C:为为FATFAT文件系统文件系统)more e:ntfilem
39、ore e:ntfilemore e:ntfile:datamore e:ntfile:datamore c:ntfilemore c:ntfilemore c:ntfile:datamore NtReadFile=将已打开文件的句柄转换成文件对象指针=检查访问权限=创建IRP读请求=通过IoCallDriver将IRP交给合适的FSD=如可在高速缓存,则应检查PrivateCacheMap=如有效则表示该文件已有私有高速缓存映射结构;=如无效则表示尚没有私有高速缓存映射结构,需要调用CcInitializeCacheMap来初始化=通过CcCopyRead从高速缓存中读取数据。如果数据还不在
40、高速缓存中,CcCopyRead会引起缺页中断,并间接调用MmAccessFault。文件系统操作与FSD:高速缓存迟后写高速缓存超前读高速缓存迟后写:高速缓存管理器的迟后写线程定期地对高速缓存中已被修改的页面进行写操作。这是通过调用内存管理器的MmFlushSection函数来完成的。具体地说,MmFlushSection通过IoAsynchronousPageWrite将数据送交FSD。高速缓存超前读:高速缓存管理器的超前读线程负责提前读数据。超前读线程通过分析已作的读操作,来决定提前读多少。提前读线程是通过缺页中断来完成的。文件系统操作与FSD:内存脏页写内存缺页处理内存脏页写:内存脏页
41、写线程定期地清洗缓冲区。该线程通过IoAsynchronousPageWrite来创建IRP写请求,这些IRP被标识为不能通过高速缓存,因此它们被FSD直接送交到磁盘存储驱动程序。内存缺页处理:以上在进行显式I/O操作与高速缓存提前读时,都会用到内存缺页处理。另外,只要应用程序访问内存映射文件且所需页面不在内存时,也会产生内存缺页处理。内存缺页处理MmAccessFault通过IoPageRead向文件所在文件系统发送IRP请求包来完成。NTFS FSD虚拟内存管理器高速缓存管理器日志文件服务器卷管理器NTFS FSD磁盘驱动物物 理理 磁磁 盘盘I I/O O管管理理器器核核心心态态NTFS
42、 FSD应用程序通过NTFS FSD创建和存取文件:首先进行有关使用权限的检查,只有合法用户的请求,才会被执行。然后I/O管理器将文件句柄转换为文件对象指针。最后通过文件对象指针来获得磁盘上的文件。NTFS FSD进 程文 件 对 象数 据 属 性命 名 流文 件 控 制 块(F C B)控控 制制 表表文 件 对 象.主 控 文 件 表对对 象象 管管 理理 器器数数 据据 结结 构构用用 于于 管管 理理 磁磁 盘盘 的的N N T T F F S S 数数 据据 结结 构构磁磁 盘盘 上上 的的N N T T F F S S 数数 据据 库库.NTFS FSD通过文件对象指针来获得磁盘上
43、的文件:通过文件对象指针获得文件属性的SCB(System Control Block,流控制块),每个SCB表示了文件的单个属性,并包含如何获得该属性的信息。同一个文件的所有SCB都指向一个共同的数据结构FCB(File Control Block,文件控制块),FCB包含一个指向MFT(Master File Table,主文件表)中的该文件记录的指针,通过该指针获得文件访问权。通过针对软盘进行文件通过针对软盘进行文件I/OI/O实验,了解与掌握实验,了解与掌握FATFAT文件系统文件系统基本要求基本要求主要实现三个函数:主要实现三个函数:函数函数physicalDiskphysicalD
44、isk判定逻辑驱动器判定逻辑驱动器A A中磁盘的基本信息中磁盘的基本信息函数函数sectorReadsectorRead根据给定的物理扇区号读取磁盘的扇区根据给定的物理扇区号读取磁盘的扇区函数函数sectorDump sectorDump 查看磁盘的内容并把磁盘上得到的信息输出到标准输出查看磁盘的内容并把磁盘上得到的信息输出到标准输出流中。流中。编写程序调用编写程序调用physicalDiskphysicalDisk、sectorRead sectorRead 和和sectorDumpsectorDump三个函数,验证其正三个函数,验证其正确性。确性。编程思路:编程思路:打开驱动器和读取驱动器
45、信息只需要调用打开驱动器和读取驱动器信息只需要调用CreateFileCreateFile和和DeviceIoControlDeviceIoControl两个两个函数即可。函数即可。读取扇区时,要注意每个扇区的长度,并根据每个扇区的长度逻辑扇区号来读取扇区时,要注意每个扇区的长度,并根据每个扇区的长度逻辑扇区号来移动文件指针。将扇区内容输出到屏幕时,应该将每字节按照两位移动文件指针。将扇区内容输出到屏幕时,应该将每字节按照两位1616进进制数输出,排列整齐。制数输出,排列整齐。DISK_GEOMETRYDISK_GEOMETRY是一个重要的结构,反映了磁盘的几何布局是一个重要的结构,反映了磁盘
46、的几何布局 附加要求附加要求在完成基本要求的基础上,实现一个简单的文件管理器在完成基本要求的基础上,实现一个简单的文件管理器,具有如下功具有如下功能:能:列目录列目录改变文件名改变文件名删除文件删除文件复制文件复制文件 文件列表:顺序检查文件名,第一个字母非空格也非文件列表:顺序检查文件名,第一个字母非空格也非0 xe50 xe5(表示删除),即(表示删除),即输出其主文件名,扩展名,文件长度等信息。输出其主文件名,扩展名,文件长度等信息。文件重命名:首先检查新文件名是否已经存在,否则搜索旧文件名,找到之文件重命名:首先检查新文件名是否已经存在,否则搜索旧文件名,找到之后修改之。后修改之。文件复制:首先检查新文件名是否已经存在,否则将旧文件的文件列表项复文件复制:首先检查新文件名是否已经存在,否则将旧文件的文件列表项复制到空白项,更改文件名和首文件簇。然后将旧文件的文件簇序列的内制到空白项,更改文件名和首文件簇。然后将旧文件的文件簇序列的内容依次复制到新文件的文件簇,同时更新容依次复制到新文件的文件簇,同时更新FATFAT。文件删除:先将根目录文件表项清空,然后将文件删除:先将根目录文件表项清空,然后将FATFAT中的文件簇链清空。中的文件簇链清空。感谢下感谢下载载