课件操作系统OperatingSystem.ppt

上传人:本田雅阁 文档编号:2612664 上传时间:2019-04-18 格式:PPT 页数:154 大小:1.44MB
返回 下载 相关 举报
课件操作系统OperatingSystem.ppt_第1页
第1页 / 共154页
课件操作系统OperatingSystem.ppt_第2页
第2页 / 共154页
课件操作系统OperatingSystem.ppt_第3页
第3页 / 共154页
亲,该文档总共154页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《课件操作系统OperatingSystem.ppt》由会员分享,可在线阅读,更多相关《课件操作系统OperatingSystem.ppt(154页珍藏版)》请在三一文库上搜索。

1、操作系统 Operating System 教学目的 共享同一fs_struct表的进程数目 int umask; 系统调用umask()为新创建的文件设置初始 文件许可权 struct dentry * root, * pwd; 当前工作目录和根目 录 & 一个结构类型为files_struct的表存有进程当前打开的 文件信息,该表的首地址存放在进程描述符的files域。 files_struct数据结构的部分域如表6-6所示。 类型 域 描述 int count 共享该表的进程数目 int max_fds 当前文件对象的最大数目 struct file * fd 指向文件对象指针数组的指

2、针 struct file * fd_array32 文件对象指针的初始化数组 &fd域存放文件对象指针数组的首地址,文件对象指针数组的 长度存放在max_fds域中。如果进程打开的文件数目多于32, 内核就分配一个新的、更大的文件对象指针数组,并将其地 址存放在fd域中,内核同时也更新max_fds域的值。 &文件对象指针数组中的索引就是文件描述符(file descriptor)。索引为0、1、2的元素是进程标准输入、输 出、标准错误文件的指针,如图6-14所示。Unix进程将文 件描述符作为主文件标识符。 &fd &0 &1 &2 &3 &4 &stdin &stdout &stderr

3、 &文件对象 &文件对象 &文件对象 &图6-14 fd数组 6.4.3 VFS系统调用的实现 &1.文件的打开与关闭 &用户进程在读/写一个文件之前必须先打开这个文件。所谓 打开文件实质上是在进程与文件之间建立连接,而打开文 件描述符唯一地标识着这个连接。 &应用程序对open ( )的调用将引起内核调用服务例程 sys_open ( )函数,该函数接收的参数为:要打开文件的 路径名和访问模式等。该系统调用成功后将返回一个文件 描述符,也就是文件对象指针数组的一个索引;系统调用 不成功时返回-1。 &用户程序通过close ( )系统调用关闭打开的文件,该函数 接收的参数为要关闭文件的文件描

4、述符。内核服务例程为 sys_close ( )函数。 files_struct fd_arrayfid inode_opdentry_op dentry d_inode files_op read inode U i_op files f_dentry f_op write task_struct fs file fs_struct root pwd dentry d_inode dentry d_inode d_op 当前目录的inode 用户进程根目录的inode 图6-15 Linux文件系统逻辑结构图 2.文件的读与写 &文件的读/写主要是通过系统调用read ( )和write (

5、 )完 成的,对于读/写文件的进程,目标文件是由一个打开文件 描述符代表的。 &为了提高效率,一般操作系统对文件的读/写都是带缓冲的 。所谓缓冲,是指系统为最近刚读/写过的文件内容在内核 中保留一份副本,以便当再次需要时就不必从设备上读入 ,而需要写的时候则可以先写到副本中,待系统较为空闲 时再从副本写回设备。 &在多进程的系统中,由于同一文件可能为多个进程所共享 ,缓冲的作用就更显著了。 & 如果将文件的内容以页面为单位缓冲,放在附属于该 文件的inode结构的缓冲队列中,那么只要相应地设置进 程的内存映射表,就可以很自然地将这些缓冲页面映射到 进程的用户空间中。 &建立了这样的映射以后,就

6、可以象访问内存一样地访问 这个文件。这样可以通过read ( )和write ( )系统调用 目标文件的inode结构访问这些缓冲页面;在通过内存映 射机制访问这个文件时,就可以经由页面映射表直接读写 这些缓冲着的页面。 &如图6-16所示。通常磁盘块的大小与内存缓冲区的大小 相当,即一个磁盘块中的数据能存储在内存里的一个缓冲 区中。 每个缓冲页面4个记录块 buffer_head 系统空间映射 用户空间映射 pages filedentryinode i_pages pagepage virtualvirtual 文件缓冲页面队列 设备缓冲区队列 data data data data 页面

7、映射表 图6-16 文件页面缓冲队列与设备缓冲区队列的关系图 & inode数据结构中有一个page结构的指针i_pages,在page 结构中有一个指针virtual指向其所代表的页面,但是page结 构本身则不在这个页面中。同样地,在缓冲区头部( buffer_head)数据结构中有一个指针b_data指向缓冲区,而 buffer_head结构本身则不在缓冲区中。所以在设备层中只要 保持一些buffer_head结构,让它们的b_data指针分别指向 缓冲页面中的相应位置就可以了。 以一个缓冲页面为例,在文件层它通过一个page数据结 构挂入所属inode结构的缓冲页面队列;同时又通过各个

8、进程 的页面映射表映射到这些进程的内存空间;在设备层通过若干 (通常是4个)buffer_head结构挂入其所在设备的缓冲区队 列。可见,以页面为单位为文件内容建立缓冲是最佳选择。 &read ( )和write ( )的服务例程分别是sys_read ( )和sys_write ( )函数。它们都需要三个参数 :一个文件描述符fd;一个包含要传送数据的内 存缓冲区地址buf;一个指定应该传送多少字节数 的count。read ( )把数据从文件传送到缓冲区, 而write ( )执行相反的操作。 &两个系统调用都返回所成功传送的字节数,或者 发一个错误信号并返回-1。读或写操作总是发生 在由

9、当前文件指针所指定的文件偏移量处(文件 对象的f_pos域)。两个系统调用都通过把所传送 的字节数加到文件指针来更新文件指针。 6.5 Ext2文件系统 &Linux最初采用的是Minix的文件系统,Minix只是一种试 验性(用于教学)的操作系统,其文件系统的大小仅限于 64M字节,文件名长度限于14个字符。后来Linux引入了 扩展文件系统(Ext FS)。扩展文件系统包含了几个重要 的扩展,但提供的性能不令人满意。 &在1994年Linux又引入了第二扩展文件系统(Second Extended File System, Ext2)。Ext2在增加了几个新 的特点后,运行起来相当高效和强

10、健,已成为广泛使用的 Linux文件系统。 &下面我们主要阐述Ext2文件系统的“磁盘数据结构”和“内 存数据结构”。最后介绍一下Ext2的方法和磁盘空间管理 。 6.5.1 磁盘数据结构 &在许多文件系统中常把整个设备划分成若干“柱面组”, 将反映着盘面存储空间的组织与管理的信息分散后就近存 储于各个柱面组中。以便提高效率。 &柱面组划分的要求: (1)关于这些柱面组本身的结构信息,如此就要用一些磁盘块 来保存所有的柱面组的描述,即所谓“组描述结构”( group descriptor)。 (2)有些信息是对于整个设备的而不只是针对一个柱面组的, 所以不能把它拆散,而只能重复地存储于每个柱面

11、组中。 从另一个角度来讲,将某些重要的信息重复存储于每个柱 面组为这些信息提供了备份,从而增加了可靠性。 &Ext2文件系统采用了“盘块组”结构,而不是“柱面组” 。并且将超级块和所有的块组描述结构重复存储于每个块 组。 &此外,Ext2通过“位图”来管理每个块组中的磁盘块和索 引节点,所以在每个块组中有两个位图,一个用于磁盘块 ,一个用于索引节点。 1个块n个块 1个块1个块n个块n个块 超级块 组描 述符 盘块 位图 索引节 点位图 索引 节点区 数据区 引导块块组0块组n 图6-17 Ext2文件系统格式示意图 &超级块和组描述符被复制到每个块组中。只有块组0中所包 含的超级块和组描述符

12、才由内核使用。当系统对文件系统 的状态执行一致性检查时,就引用存放在块组0中的超级块 和组描述符,然后把它们复制到其它所有的块组中。 &块组的多少取决于分区的大小和块的大小。其主要限制在 于盘块位图必须存放在一个单独的块中(盘块位图的每1位 对应着块组中的一个盘块,1表示已分配,0表示空闲)。 &每组中至多可以有8b块,b是以字节为单位的块大小。因 此,块组的总数大约是s/(8b),s是总块数。例如,一 下8GB的Ext2分区,盘块的大小为4KB。每个4KB的盘块位图 描述32K个磁盘块,即128MB。因此,最多需要64个块组。 可见,盘块的大小越小,块组数越多。 1.超级块 &Ext2在磁盘

13、上的超级块存放在一个ext2_super_block数据 结构中,它的部分域列于表6-7中。 &s_inodes_count域存放Ext2文件系统中全部索引节点数, s_blocks_count域存放Ext2文件系统中的块数。 s_log_block_size域以2的幂次方表示块的大小,用1024字 节作为单位,0表示1024字节的块,1表示2048字节的块, 等等。 s_blocks_per_group域存放每个块组中的块数 s_inodes_per_group域存放每个块组中的索引节点数。 表6-7 Ext2超级块的部分域 类型 域 描述 _u32 s_log_block_size 块的大

14、小 _u32 s_blocks_per_group 每组中的块数 _u32 s_free_blocks_count 空闲块计数器 _u32 s_inodes_count 索引节点的总数 _u32 s_inodes_per_group 每组中的索引节点数 _u32 s_free_inodes_count 空闲索引节点计数器 _u32 s_blocks_count 以块为单位的文件系统的大小 _u32 s_creator_os 创建文件系统的操作系统 _u16 s_inode_size 磁盘上索引节点结构的大小 _u8 16 s_uuid 128位文件系统标识符 char 16 s_volume_

15、name 卷名 char 64 s_last_mounted 最后一个安装点的路径名 2.组描述符和位图 &每个块组有自己的组描述符,其数据结构 ext2_group_desc的部分域如下: 类型 域 描述 _u32 bg_block_bitmap 块位图所在的块号 _u32 bg_inode_bitmap 索引节点位图所在的块号 _u32 bg_inode_table 索引节点表的第一个块的块号 _u16 bg_free_blocks_count 组中空闲块的个数 _u16 bg_free_inodes_count 组中索引节点的个数 _u16 bg_used_dirs_count 组中目录

16、的个数 表6-8 Ext2组描述符的部分域 3.索引节点 表 &索引节点表存放在一些连续磁盘块中,其中每一 块包含索引节点的预定义号。索引节点表第一个 块的块号存放在组描述符的bg_inode_table域中 。所有索引节点的大小相同,即128字节。一个 1024字节的块可以包含8个索引节点。每个Ext2索 引节点是一个ext2_inode结构,其部分域在表6-9 中给出。 &分配新节点和数据块时要用到的域: bg_free_blocks_count、 bg_free_inodes_count和 bg_used_dirs_count域。 表6-9 一个Ext2磁盘索引节点的部分域 类型 域 描

17、述 _u16 i_uid 拥有者的标识符 _u16 i_mode 文件类型和访问权限 _u32 i_size 以字节为单位的文件长度 _u32 i_ctime 索引节点最后改变的时间 _u32 i_atime 最后一次文件访问的时间 _u32 i_mtime 文件内容最后改变的时间 _u16 i_links_count 硬连接计数器 _u16 i_gid 组描述符 _u32 i_blocks 文件的数据块数 _u32 i_blockEXT2_N_BLOCKS 指向数据块的指针(索引表) _u32 i_file_acl 文件访问控制表 _u32 i_dir_acl 目录访问控制表 union o

18、sd1 特定的操作系统信息 &位图是位的序列,0表示相应的索引节点或数据 块是空闲的,1表示已被占用。因为每个位图必 须被存放在一个单独的块中,而块的大小可以是 1024、2048或4096,因此,一个单独的位图能描 述8192、16384或32768个块的状态。 &磁盘索引节点结构中的i_size域存放以字节为 单位的文件的有效长度,而i_blocks域存放已分 配给文件的数据块数(以512字节为单位)。 i_block域是一个一维数组,其中包含 EXT2_N_BLOCKS(通常是15)个指针元素,其指 针用来标识分配给文件的数据块。 6.5.2 内存数据结构 &为了提高系统运行效率,在安装

19、Ext2文件系统的同时,内 核把存放在Ext2分区的磁盘数据结构中的大部分信息拷贝 到内存RAM中,如下表。其中频繁更新的数据需要缓存。内 核通过让缓冲区引用计数器的值一直大于0来达到此目的。 表6-10 Ext2数据结构的VFS映像 类型 磁盘数据结构 内存数据结构 缓存模式 超级块 ext2_super_block ext2_sb_info 总是缓存 组描述符 ext2_group_desc ext2_group_desc 总是缓存 索引节点位图 块中的位数组 缓冲中的位数组 固定限制 块位图 块中的位数组 缓冲中的位数组 固定限制 索引节点 ext2_inode ext2_inode_i

20、nfo 动态 数据块 未指定 缓冲 动态 空闲索引节点 ext2_inode 无 从不缓存 空闲块 未指定 无 从不缓存 &缓存模式为“从不缓存”的数据是指不需要保存在缓 冲区高速缓存中的数据,如磁盘上的空闲索引节点数 据以及空闲块数据不需要保存在内存。 &“固定限制”的缓存模式是指被保存在缓冲区高速缓 存中的数据量是有限度的,当超过这个限度时,老的 数据被刷新到磁盘上。 &在“动态”的缓存模式中,只要相应的对象(索引节 点或数据块)正在被使用,其数据就被保存在缓冲区 高速缓存中,当相应的文件被关闭或块被删除时, shrink_mmap( )函数从高速缓存中删除相关的数据并 把数据写回磁盘。

21、1.ext2_sb_info和ext2_inode_info结 构 &安装Ext2文件系统时,内核给Ext2磁盘超级块分 配一个缓冲区并从磁盘读取超级块的内容。只有 当Ext2文件系统被卸载时才释放这个缓冲区,若 缓冲区标记为“脏”则写回。 &同时,内核用类型为ext2_sb_info的结构把Ext2 的超级块装入VFS超级块的u域。内核据此就能找 出与这个文件系统相关的内容。当属于Ext2文件 的索引节点对象被初始化时,内核用 ext2_inode_info类型的结构把索引节点装入VFS 索引节点对象的u域。 & ext2_sb_info结 构: &在磁盘超级块结构中而不在一般的VFS超级块

22、对象中的大部分 域 &索引节点位图高速缓存,用s_inode_bitmap和 s_inode_bitmap_number数组跟踪。 &块位图高速缓存,用s_block_bitmap和 s_block_bitmap_number数组跟踪。 &一个s_sbh指针,指向磁盘超级块缓冲区的缓冲区首部 &一个s_es指针,指向磁盘超级块缓冲区 &s_desc_per_block,组描述符的个数,被压缩在一个块中 &一个s_group_desc指针,指向缓冲区首部的一个数组,缓冲区 中包含组描述符 &其它数据,如安装状态、安装选项等 &ext2_inode_info结构: F磁盘索引节点结构中的大部分域

23、F索引节点所在块组的i_block_group块组索引 F为数据块进行预分配时使用的i_alloc_block和 i_alloc_count域 F一个指定是否同步地更新磁盘索引节点的标志 i_osync域 2.位图高速缓存 &随着磁盘容量的增加,索引节点位图和数据块位图增长迅 速,已不能把所有的位图都保存在内存RAM中了。例如,一 个8GB的磁盘,磁盘块的大小为1KB。则每个位图只能描述 8192个磁盘块。磁盘的块组数为8GB/8MB=1024个。则内存 中要存放2048个位图(索引节点、数据块)将需要2MB的 RAM。 &内核限制Ext2文件系统位图,使用两个高速缓存区。一个 存放大部分最近

24、访问的索引节点位图,另一个存放大部分 最近访问的块位图。每个高速缓存都是用有 EXT2_MAX_GROUP_LOADED (通常为8)个元素的两个数组来 实现的。一个数组包含当前在高速缓存中的块组位图(或 索引节点位图)的索引,另一个数组包含引用这些位图的 缓冲区首部指针。 (a)位图已经在高速缓存中 3 1 4 8 5 6 2 93 1 4 8 5 6 2 9 (b)位图被加到高速缓存 3 1 4 8 59 3 1 4 8 5 (c)位图被加到高速缓存,但是位图被丢弃 3 1 4 8 5 6 2 79 3 1 4 8 5 6 2 图6-18 在高速缓存中增加一个位图 引用块组9的三种可能:(

25、a)块组9的位图已在高速缓存中;(b)块组 9的位图不在高速缓存中,但高速缓存中有空闲位置;(c)块组9 的位图不在高速缓存中,高速缓存中也没有空闲位置。 &内核在ext2_sb_info内存数据结构中存放块组位图高速缓 存的数组和索引节点位图高速缓存的数组。 &一个被安装的Ext2文件系统的内存数据结构及高速缓冲如 图6-19所示。在该图中,只显示了磁盘上的三个块组,其 描述符存放在三个磁盘块中,在内存有三个缓冲区与之对 应。内存数据结构ext2_sb_info的s_group_desc域指向由 这三个缓冲区首部组成的一个数组。该图仅仅显示了索引2 的块位图和索引4的索引节点位图,内核最多可

26、以在位图高 速缓存中保存2EXT2_MAX_GROUP_LOADED个位图。 图6-19 Ext2的内存数据结构及高速缓冲区 Ext2分区 索引节 点 位 图 块 位图 组 描述符 组 描述符 组 描述符 超级 块 缓冲区缓冲区缓冲区缓冲区缓冲区缓冲区 VFSs super_block ext2_sb_info b.h.b.h.b.h.b.h.b.h. s_inode_bitmap4 s_group_desc s_block_bitmap2 s_es s_sbh b_data b.h. 6.5.3 Ext2的方法 &Ext2超级块方法的地址存放在ext2_sops指针数组中。除了 VFS方法中

27、的clear_inode和umount_begin外,其它VFS超级 块操作在Ext2中都有专门的实现。 &Ext2文件系统对索引节点的操作取决于索引节点所指的文 件类型。对正规文件的索引节点的操作地址存放在 ext2_file_inode_operations中,对目录文件的索引节点 的操作地址存放在ext2_dir_inode_operations中。 &系统调用ioctl(fd, cmd, arg ),通过一个参数cmd来间接 地给出具体操作命令,可以认为是对常规系统调用界面的 扩充。其中fd为目标文件的打开文件号,cmd为具体操作命 令代码,arg可以用作对具体操作命令的参数。 VFS

28、的文件操作(通用函数) Ext2的方法 read generic_file_read( ) write ext2_file_write( ) ioctl ext2_ioctl( ) lseek(改变文件读写位置) ext2_file_lseek( ) mmap generic_file_mmap( ) open ext2_open_file( ) release ext2_release_file( ) fsync ext2_sync_file( ) 无 表6-11 Ext2的文件操作 6.5.4 磁盘空间管 理 & 在管理磁盘空间时要考虑两个问题。第一个问题是必须尽力避免文件存储在不 相邻盘

29、块上。文件离散存放会增加对文件的连续读操作的平均时间,因为在读 操作期间,磁头必须频繁地重新定位。第二个问题是内核应该能从文件的偏移 量快速地导出Ext2分区上相应的逻辑块号,尽可能地限制对磁盘上存放的索引 表的访问次数,因为对该表访问次数的增加会极大地增加文件的平均访问时间 。 & 磁盘上每个非空的普通文件都由一组数据块组成。这些数据块或者由文件内的 相对位置来标识,或者由所在磁盘分区上的盘块号来标识。从文件内的偏移量 f导出相应数据块所在的物理盘块号需要两个步骤:首先从文件内的偏移量f导 出文件的逻辑块号,即在偏移量f处的字符所在的逻辑块索引。接着利用磁盘 上存放的索引表把文件的逻辑块号转

30、化为相应的物理块号。 & Linux(或Unix)文件不包含任何控制字符,因此导出文件的第f个字符所在的 文件逻辑块号是相当容易的,只要用f除以文件块的大小并取整数即可。例如 ,文件块的大小为4KB,如果文件的偏移量f小于4096字节,那么这个f处的字 符就在文件的第一个数据块中,即在逻辑块号为0的数据块中。如果偏移量f等 于或大于4096字节而小于8192字节,那么这个f处的字符就在逻辑块号为1的数 据块中。 直接寻址 1225 (b/4)2+ (b/4)+12 b/4+12(b/4)3+(b/4)2+ (b/4)+11 i_block 01234567891011121314 图6-20

31、文件索引节点中的索引表的数据结构 据 & 直接寻址1225(b/4)2+ & (b/4)+12b/4+12(b/4)3+(b/4)2+ & (b/4)+11i_block01234567891011121314图4-20 文件索引节点中的 索引表的数据结构 & 据 & Ext2文件系统在磁盘索引节点的i_block域提供了一种方法,用这种方法可以 在磁盘上建立每个文件逻辑块号与相应物理块号之间的映射(索引表)。 i_block域是一个有EXT2_N_BLOCKS个元素的数组,用来存放磁盘块号。 EXT2_N_BLOCKS的默认值为15,如图4-20所示,数组的15个元素有4种类 型: & 最初

32、的12个元素产生的物理块号与文件最初的12个逻辑块号对应,是直接索 引。 & 索引12中的元素包含一次间接索引块,这个物理块是一个包括物理块号的一 级数组。这个数组对应的文件逻辑块号从12到(b/4)+11,这里b是文件系 统的块包含字节个数(每个逻辑块号占4个字节)。 & 索引13中的元素包含二次间接索引块,这个物理块包含物理块号的一个二级 数组,其对应的逻辑块号从b/4+12到 (b/4)2+(b/4)+11 & 索引14中的元素利用了三级间接索引,其对应的逻辑块号从 (b/4)2+(b/4)+12到(b/4)3+(b/4)2+(b/4)+11。 & 这个索引表与UNIX系统V一样,都是四

33、级索引:直接、一次间接、二次间接 和三次间接。只是它的直接索引项包含12个。 6.6 Windows文件系统 & Windows 2000直接支持的文件系统有CDFS、UDF、FAT12、FAT16、 FAT32、NTFS。CDFS(CDROM File System)是于1988年为只读光盘而 制定的文件系统标准,比较简单,现已被UDF标准代替,但为了向后兼容, Windows 2000仍支持CDFS。UDF(Universal Disk Format)是于1995 年为光盘存储媒介(如DVD-ROM等)而制定的,用以代替CDFS。文件分配 表(FAT,File Allocation Tab

34、le)文件系统是遗留文件系统,为了向后兼容 ,Windows 2000仍支持FAT。FAT是以簇作为磁盘空间分配和回收的基本 单位的,Windows 2000的簇大小在512B和8KB之间。通常用一个数字来标 识盘簇号的位数。FAT12的簇标识是12位二进制数,即每个磁盘分区最多存 储212(4096)个簇。FAT16的簇标识是16位二进制数。FAT32的簇标识是 32位二进制数,而Windows 2000限制它的文件卷大小为32GB。FAT文件 卷的结构如图21所示。 & 伴随Windows NT的推出,微软NT设计小组创建出了一种具有较好容错性和 安全性的全新的文件系统NTFS (New

35、Technology File System)。伴随 着操作系统的不断发展,NTFS也得到了不断地发展。现在,NTFS已经成为第 一个为高端服务器以及Intel工作站家族提供健全的文件服务的文件系统。 NTFS是以卷为基础的,而卷是建立在磁盘分区上。当以NTFS格式来格式化磁 盘分区时就创建了NTFS文件卷。 & NTFS为了满足用户对磁盘数据存储的可靠性需求,采用了基于原子事务( Atomic transaction)概念的文件系统可恢复性。原子事务的基本原则就是 对文件的操作要么全做要么全不做。加密文件系统(Encrypted File System, EFS)提供的文件加密技术可将加密的

36、NTFS文件存储到磁盘上。 引导块 文件分配表 根目录 其它目录和文 件 图4-21 FAT文件卷的结构 6.6.1 NTFS磁盘结构 &NTFS文件系统与其它的文件系统如FAT一样,也 是以簇为单位对磁盘空间进行划分和管理的。这 里的簇在有的操作系统里被称为物理磁盘块。通 过簇来间接管理磁盘,不需要知道磁盘扇区的大 小,这样就使NTFS保持了与磁盘物理扇区大小的 独立性,从而能够为不同大小的磁盘选择合适的 簇。NTFS系统里的文件总是占用若干个整簇。簇 的大小是物理扇区的整数倍,通常为2的整次幂。 对于大于2GB的磁盘,默认的簇大小是4KB。 &NTFS使用逻辑簇号(Logical Clus

37、ter Number, LCN)和虚拟簇号(Virtual Cluster Number, VCN)来对簇进行定位。LCN是对整个文件卷中 所有的物理簇从头到尾进行的编号。VCN则是对 属于特定文件的逻辑簇从头到尾进行的编号。在 实际操作中,文件的VCN需要映射到磁盘分区的 LCN。文件可以离散存储。 1.主控文件 表 &FAT文件系统是通过文件访问表来管理磁盘文件的。而NTFS文件系统 是通过主控文件表(Master File Table, MFT)来管理文件卷上的所 有文件的。与FAT不同的是,NTFS把所有的数据,甚至所有的元数据 (metadata)都存储在文件中。主控文件表本身也是一

38、个文件,其 中包含了文件卷中所有文件的信息。MFT是NTFS文件卷的核心,是 NTFS中最重要的系统文件。把元数据(包括用于文件定位和恢复的数 据结构、引导程序数据以及记录整个卷的分配状态的位图等)存储在 文件中,便于NTFS系统通过文件来定位和管理其中的数据,通过文件 安全描述符来保护文件。如果磁盘的一个部分发生损坏,NTFS可以重 新定位元数据,从而防止磁盘访问失效。 &MFT是一个结构类型的数组。文件卷上的每个文件(包括MFT本身) 的属性信息在MFT中都占有一个表项。每个表项的大小固定为1KB。 在MFT中,开始的16个表项是保留的,用于存储元数据文件的属性信 息。这些元数据文件都有一

39、个以“$”开头的文件名称,不过该符号是隐 藏的。16个表项之后的表项用于存储普通用户文件和目录的属性信息 。 &MFT的部分结构如表6-12所示 表6-12 MFT的元数据文 件 0 $Mft MFT本身 1 $MftMirr MFT的镜像文件(提高可靠性) 2 $LogFile 日志文件:记录所有影响NTFS卷结构的操作 3 $Volume 卷文件:包含卷名、被格式化的卷的NTFS版本等 4 $AttrDef 属性定义表:存放卷支持的所有文件属性 5 $ 根目录:保存根目录下所有文件和目录的索引 6 $Bitmap 位图文件:存放卷的分配状态,一位代表一簇, 7 $Boot 引导文件:存放引

40、导程序代码 8 $BadClus 坏簇文件:记录卷中所有的损坏的簇号 9 $Secure 安全文件:存储了整个卷的安全性描述符数据库 10 $UpCase 大写文件:包含一个大小写字符转换表 11 $Extended metadata directory 扩展元数据目录 12 预留 13 预留 14 预留 15 预留 15 其他用户文件和目录 已分配 或空闲 &MFT的前16个元数据文件很重要,为了防止数据的丢失, NTFS系统在该卷文件存储区的正中央对它们进行了备份, 见图4-22。文件存储区文件存储区MFT元数据文件存储区 MFT前16个元数据文件备份图6-22 MFT空间分配 &NTFS

41、把磁盘分区划分成元数据文件存储区和普通文件存 储区,其中元数据文件存储区占大约12%的空间,以满足 其不断增长的文件数量和保持元数据文件的连续性。余下 的88%的空间被用来存储普通文件数据。MFT空间的使用 机制:当文件数据耗尽了文件存储区时,Windows操作系 统就会简单地减少MFT元数据文件存储区,以增加文件存 储区。当文件存储区有剩余空间时,这些空间又会重新被 划分给MFT。 &NTFS通过MFT访问卷的过程:当NTFS访问卷时,它会查 看引导文件($Boot),找到MFT的物理磁盘地址。然后 它就从文件的数据属性中获得VCN到LCN的映射信息,并 存储在内存中。这个映射信息确定了MF

42、T数据在磁盘上的 位置。接着,NTFS再从MFT中读出几个元数据文件的属 性信息,并打开这些文件。在NTFS打开了剩余的元数据文 件后,用户就可以开始访问该卷了。 文件存储区文件存储区 MFT元数据文件存储区MFT前16个元数据文件备份 图6-22 MFT空间分配 2.文件引用 号 &NTFS文件卷上的每个文件都有一个唯 一的64位的文件引用号(File Reference Number)。文件引用号 由文件号和文件顺序号组成。文件号为 48位二进制数,对应于该文件在MFT 中的位置号。16位的文件顺序号随着 每次该文件属性的重用而增加,以便于 NTFS系统进行内部一致性检查。 3.文件的属性

43、 & NTFS不同于其它文件系统。它不仅把通常的文件属性(如文件名、文件拥有 者、文件时间标记等)作为属性来处理,也把文件数据作为属性来处理。文件 数据就是未命名属性的值。常用的文件属性如下: & 标准信息:包括文件的基本属性信息,如访问权限、文件大小、文件的创建时 间、最近一次修改的时间、有多少目录指向本文件(即硬链接数)。 & 文件名:用Unicode字符表示的文件的名字。Unicode是一种16位的字符编 码方案,世界上每种主要语言中的每个字符都能够被唯一地表示,这有助于国 际化。 & 安全描述符:主要用于保护文件,防止未授权用户访问。 & 文件数据:文件的内容,即未命名属性值。目录没有

44、默认的数据属性,但有可 选择的命名数据属性。 & 索引根:对大目录文件所管理的文件和子目录进行索引。 & 索引分配:是对大目录文件存储在索引缓冲区中VCN到LCN的映射。 & 位图:跟踪索引缓冲区,以便确定哪些VCN正在使用,哪些VCN是空闲的。 & 属性列表:当一个文件需要使用多个主控文件表项时,就用属性列表表示。其 中包括文件属性的名称和类型以及属性所在MFT的文件引用号。 & 文件的每个属性都是由单个的字符流(stream)组成。确切地说,NTFS并不 对文件进行操作,而是对属性流进行操作。NTFS所提供的对属性字符流的操 作包括:创建、删除、读/写(字节范围)。读写操作一般是针对文件的

45、未命 名属性而言的,对于已命名的属性则可以通过已命名的字符流句法来进行操作 。 &当一个文件很小时,其所有属性和属性值可以存放在主控 文件表项中。当属性值能直接存放在主控文件表项中时, 该属性就称为常驻属性。如,标准信息和文件名属性就总 是常驻属性。NTFS对常驻MFT的属性的访问时间较短, NTFS只需访问磁盘一次,就可立即获得数据。 & 每个属性都有一个标准头,在标准头中包含该属性的信息 和NTFS用来管理属性的信息。属性的标准头总是常驻 MFT,并记录着属性值是否常驻。对于常驻属性,其标准 头中还包含着属性值的偏移量和属性值的长度。 &当小文件的所有属性能在MFT中常驻时,其文件数据存放

46、 在未命名属性中。如图6-23所示。文件索引文件1文件2文 件3文件名标准信息图6-24 小目录的主控文件表项 & 当小目录的所有属性能在MFT中常驻时,目录中的所有文 件和子目录的索引放在索引根属性中。如图6-24所示。 标准信息文件名文件数据 图6-23 小文件的主控文件表项 文件索引 文件1文件2文件3 文件名标准信息 图6-24 小目录的主控文件表项 &当文件或目录较大时,其所有属性就不能 都存放在只有1KB的MFT表项中,这样一来 ,文件或目录的属性就分为常驻的和非常驻 的。NTFS将从MFT之外为非常驻属性分配 存储空间,这些MFT之外的存储空间被称为 一个运行(run)或一个盘区

47、(extent), 用来存储属性值。值存储在运行中而不是在 MFT中的属性被称为非常驻属性。以后,属 性值增加时,NTFS还会再分配运行用来存 储增加的这部分属性值。一个运行可以包含 几个盘簇。 & 标准信息文件名数据图6-25 存储在两个运行中的非常驻属性数据数据其它 属性 & 图6-25显示了一个存储在两个运行中的非常驻属性,它的属性头包含了在磁 盘上定位该属性值的有关信息。 & 对于非常驻属性,NTFS通过VCN-LCN之间的映射关系来记录非常驻属性值的 存储情况。至于VCN-LCN映射关系则存储在MFT表项中与非常驻属性相关的 属性头中。如图6-26所示。当该文件含有超过2个运行时,则第三个运行从 VCN 8开始。 & 如果一个文件有太多的属性,致使一个主控文件表项不够用,那么就可以用第 二个主控文件表项。这样以来,就需要一个“属性列表”(attribute list)的 属性来管理这些主控文件表项。属性列表包括文件属性的名称和类型代码以及 属性所在MFT的文件引用号。例如,当太大或太零散的文件的VCN-LCN映射 关系太大而需

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1