1、11.5 文件共享11.5.1 文件的访问权限设置文件访问权限的目的是为了在多个用户间提供有效的文件共享机制;(1) 文件访问类型: 读 read:可读出文件内容; 写 write(修改 update 或添加 append):可把数据写入文件; 执行 execute:可由系统读出文件内容,作为代码执行; 删除 delete:可删除文件; 修改访问权限 change protection:修改文件属主或访问权限(2) 用户范围类型: 指定用户 用户组 任意用户(3) 访问类型和用户范围的组合: 访问矩阵:矩阵的一维是每个目录和文件,另一维是用户范围,每个元素是允许的访问方式 访问策略(polic
2、y):每种文件访问方式,所允许或禁止的用户范围。可以将文件访问方式推广到其他操作如用户管理,备份,网络访问等。11.5.2 文件的并发访问文件并发访问控制的目的是提供多个进程并发访问同一文件的机制。(1) 方法: 访问文件之前,必须先打开文件:如果文件的目录内容不在内存,则将其从外存读入,否则,仍使用已在内存的目录内容。这样,多个进程访问同一个文件都使用内存中同一个目录内容,保证了文件系统的一致性。 文件锁定(file lock):可以协调对文件指定区域的互斥访问 Solaris 2.3 中 lockf 的锁定方式: F_UNLOCK:取消锁定; F_LOCK:锁定;如果已被锁定,则阻塞; F
3、_TLOCK:锁定;如果已被锁定,则失败返回 F_TEST:锁定测试; 利用进程间通信,协调对文件的访问;11.6 外存存储空间管理11.6.1 文件存储空间分配(file allocation)1. 新创建文件的存储空间(文件长度)分配方法 预分配(preallocation):创建时(这时已知文件长度) 一次分配指定的存储空间,如文件复制时的目标文件。 动态分配(dynamic allocation):需要存储空间时才分配(创建时无法确定文件长度),如写入数据到文件。2. 文件存储单位:簇(cluster)文件的存储空间通常由多个分立的簇组成,而每个簇包含若干个连续的外存存储单位(如扇区
4、sector) ,如何确定每个簇的大小簇又称为部分(portion)(1) 簇的大小 两个极端:大到能容纳整个文件,小到一个外存存储块 簇较大:提高 I/O 访问性能,减小管理开销 簇较小:簇内的碎片浪费较小,特别是大量小文件时有利。(2) 主要方法:两种 簇大小可变,其上限较大:I/O 访问性能较好,文件存储空间的管理困难(类似于动态分区存储管理) 簇大小固定,较小:文件存储空间使用灵活,但 I/O 访问性能下降,文件管理所需空间开销较大3. 文件存储分配数据结构采用怎样的数据结构来记录一个文件的各个部分的位置。通常称为文件分配表(file allocation table, FAT) 连续
5、分配(contiguous) :只需记录第一个簇的位置,适用于预分配方法。可以通过紧缩(compact)将外存空闲空间合并成连续的区域。 链式分配(chained):在每个簇中有指向下一个簇的指针。可以通过合并(consolidation)将一个文件的各个簇连续存放,以提高 I/O 访问性能。 索引分配(indexed):文件的第一个簇中记录了该文件的其他簇的位置。可以每处存放一个簇或连续多个簇(只需在索引中记录连续簇的数目) 。11.6.2 外存空闲空间管理(free space management)方法外存空闲空间管理的数据结构通常称为磁盘分配表(disk allocation tabl
6、e),分配的基本单位是簇。文件系统可靠性包括检错和差错恢复。空闲空间的管理方法:三种,均适用于上述几种文件存储分配数据结构;(1) 位示图(bitmap):每一位表示一个簇,取值 0 和 1 分别表示空闲和占用。(2) 空闲空间链接(chained free space):每个空闲簇中有指向下一个空闲簇的指针,所有空闲簇构成一个链表。不需要磁盘分配表,节省空间。每次申请空闲簇只需取出链表开头的空闲簇即可。(3) 空闲空间索引(indexed free space):在一个空闲簇中记录其他几个空闲簇的位置。注:可以上述方法结合,应用于不同的场合。如:位示图应用于索引结点表格,链接和索引结合应用于
7、文件区的空闲空间。11.6.3 文件卷(1) 磁盘分区(partition):通常把一个物理磁盘的存储空间划分为几个相互独立的部分,称为“分区” 。一个分区的参数包括:磁盘参数(如每道扇区数和磁头数) ,分区的起始和结束柱面等。(2) 文件卷(volume):或称为“逻辑驱动器(logical drive)”。在同一个文件卷中使用同一份管理数据进行文件分配和外存空闲空间管理,而在不同的文件卷中使用相互独立的管理数据。 一个文件不能分散存放在多个文件卷中,其最大长度不超过所在文件卷的容量。 通常一个文件卷只能存放在一个物理外设上(并不绝对) ,如一个磁盘分区或一盘磁带。(3) 格式化(forma
8、t) :在一个文件卷上建立文件系统,即:建立并初始化用于进行文件分配和外存空闲空间管理的管理数据。通常,进行格式化操作使得一个文件卷上原有的文件都被删除。11.7 文件系统举例11.7.1 MS DOS 的文件系统(1) 概述 多级目录,无文件别名,无用户访问权限控制(2) 磁盘文件卷结构 FAT 1 FAT 2 RotDirectory Dat(File & irectory)BotRecord Volume Structre in MS OSSector #0 N1 2N图 1 MS DOS 的磁盘文件卷结构 文件卷(volume)信息:记录在引导记录的扇区中。包括:簇大小,根目录项数目,
9、FAT 表大小,磁盘参数(每道扇区数,磁头数) ,文件卷中的扇区总数,簇编号长度等 逻辑扇区号:三元组(柱面号,磁头号,扇区号)一个文件卷中从 0 开始对每个扇区编号,优点:屏蔽了物理磁盘参数的不同 允许同时访问的文件卷数目上限可以由 config.sys 文件中的 LASTDRIVE= 语句指定 簇(cluster):由若干个扇区组成。在一个文件卷中从 0 开始对每个簇编号。 对簇大小的讨论 文件卷容量越大,若簇的总数保持不变即簇编号所需位数保持不变,则簇越大。缺点:簇内碎片浪费越多 文件卷容量越大,若簇大小不变,则簇总数越多,相应簇编号所需位数越多,可以是 12, 16, 32 二进制位即
10、 FAT12, FAT16, FAT32。 FAT 表:两个镜像,互为备份。文件卷中的每个簇均对应一个 FAT 表项,文件分配采用链式分配方法。每个 FAT 表项所占位数是簇编号的位数,其值是(以FAT12 为例): 0:表示该簇空闲 FF7h:物理坏扇区 FF8hFFFh:表示该簇是文件的最后一个簇 其他值:表示该簇被文件占用,而且表项中的值是文件下一个簇的编号。 FAT 表大小占文件卷容量的比例:簇编号位数/ ( 8*512*每个簇的扇区数) 目录:是目录项的顺序文件,不对目录项排序。若目录中包含的文件数目较多,则搜索效率低。每个目录项大小为 32 字节,其内容包括:文件名(8+3 个字符
11、) ,属性(包括文件、子目录和文件卷标识) ,最后一次修改时间和日期,文件长度,第一个簇的编号。在目录项中,若第一个字节为 E5h,则表示空目录项;若为 05h,则表示文件名的第一个字符为 E5h。 文件名不区分大小写11.7.2 Windows NT 的文件系统1. 概述(1) NTFS 为多级目录结构,支持文件别名(符号链接方式) ;(2) NTFS 文件由多个文件属性构成,每个属性由属性名和属性流(stream, 简单字节队列)组成;用户可自定义属性;(3) NTFS 支持用户权限管理:有 5 种权限划分:读、写、运行、删除和修改权限;支持按用户、用户组分配权限;(4) NTFS 文件支
12、持数据压缩功能;(5) NTFS 卷结构支持容错功能;2. NTFS 结构NTFS 的结构以卷为单位,卷与磁盘分区相关;卷由一组文件和未分配空间组成;NTFS 以簇为基本硬盘分配单位,簇的大小为物理扇区的整数倍,通常为 2K 倍。NTFS 卷上的所有数据(包括用于引导、定位、空间分配等文件系统管理数据)都以文件的形式保存;NTFS 结构由一组元文件构成:(1) 主文件表($MFT ):文件记录数组,每个记录为 1KB;每个文件对应一个或多个文件记录;(2) 主文件表副本($MFTMirr ):是主文件表中前几项的副本,用于在主文件表不能读取时的元文件定位;(3) 卷结构日志($LogFile)
13、:记录所有影响 NTFS 卷结构的操作,用于系统失败后的卷恢复;(4) 空间分配位图($Bitmap ):标识卷中每个簇的分配状态,即:空闲和已被分配;(5) 引导文件($Boot):引导程序代码;(6) 坏簇文件($BadClus):记录卷中据有损坏位置;(7) 卷文件($Volume ):卷名、文件系统版本、卷状态(卷是否被损坏) ;(8) 属性定义表($AttrDef):卷中支持的属性类型列表;11.7.3 UNIX 的文件系统1. 概述 多级文件目录,可以建立文件别名(索引结点方式和符号链接方式) ,有用户访问权限控制(文件的读 R、写 W 和执行 X,相应于目录的检索文件、增删文件和
14、进入目录) 注意:如果对文件具有写权限,而对文件所在目录没有写权限,仍然可以改变该文件的长度(如添加数据) ,因为除文件名外的其他文件目录内容都存放在索引结点而不是在目录文件。 文件类型:常规文件(ordinary file),目录文件(directory),特殊文件(special file)如外设,先进先出文件(FIFO)如命名管道3. 磁盘文件卷结构 inodeTable Dat(File & irectory)BotRecordVolume Structre in UNIXSector #01SuperBlock图 2 磁盘文件卷结构 超级块:描述文件系统的状态,包括磁盘空闲块栈,空闲
15、 i 结点栈 i 结点(inode list):存放文件说明信息,每项 64 字节 目录文件:每个目录项 16 字节。文件名区分大小写。 文件分配:直接索引,一级、二级、三级间接索引6. 打开文件管理 进程打开文件表,系统打开文件表 内存 i 结点表:空闲的内存 i 结点组织成链表;占用的内存 i 结点哈希表(对冲突采用链表方式解决) 内存 i 结点的分配 内存 i 结点的释放 内存 i 结点的锁定 进程所进入的目录:包括各个打开文件的目录路径,以及进程的当前目录 进入一个目录,如果该目录文件的内存 i 结点已经存在,则只需把内存 i 结点的引用计数加 1,否则读入该目录文件的磁盘 i 结点并
16、建立内存 i 结点。 系统起动之后,进入根目录并建立相应内存 i 结点,直到系统关闭 退出目录:如关闭文件或修改当前目录 目录路径查找:把目录路径分解为各级目录名,然后逐级进入目录并查找。如:目录路径为/usr/include/sys,则各级目录名为 usr, include, sys。查找过程举例: 已经进入上级目录 usr,根据其内存 i 结点查找其目录文件,找到 include 目录项 根据 include 目录项,建立其内存 i 结点,则进入 include 目录 如果查找成功完成,则会进入目录路径中所包含的各级目录,如:打开文件为 /usr/include/sys/types.h,则
17、进入的各级目录依次为 /usr, /usr/include, /usr/include/sys安装和拆卸文件卷:mount 和 umount12 外部设备管理12.1 引言12.1.1 外部设备类型和特征1. 按交互对象分类 人机交互设备:视频显示设备、键盘、鼠标、打印机 与计算机或其他电子设备交互的设备:磁盘、磁带、传感器、控制器 计算机间的通信设备:网卡、调制解调器按交互方向分类 输入(可读):键盘、扫描仪 输出(可写):显示设备、打印机 输入输出(可读写):磁盘、网卡2. 外设特性 使用特征:存储、输入/输出、终端 数据传输率(如 KB/sec):低速 (如键盘)、中速( 如打印机 )、
18、高速(如网卡、磁盘) 信息组织特征:单个字符或数据块,字符设备(如打印机) 或块设备(如磁盘)12.1.2 I/O 控制技术1. 程序控制 I/O(programmed I/O)I/O 操作由程序发起,并等待操作完成。数据的每次读写通过 CPU。缺点:在外设进行数据处理时,CPU 只能等待。2. 中断驱动方式(interrupt-driven I/O)I/O 操作由程序发起,在操作完成时(如数据可读或已经写入)由外设向 CPU 发出中断,通知该程序。数据的每次读写通过 CPU。优点:在外设进行数据处理时,CPU 不必等待,可以继续执行该程序或其他程序。缺点:CPU 每次处理的数据量少(通常不超
19、过几个字节),只适于数据传输率较低的设备。3. 直接存储访问方式(DMA, Direct Memory Access)由程序设置 DMA 控制器中的若干寄存器值(如内存始址,传送字节数) ,然后发起 I/O 操作,而后者完成内存与外设的成批数据交换,在操作完成时由 DMA 控制器向 CPU 发出中断。优点:CPU 只需干预 I/O 操作的开始和结束,而其中的一批数据读写无需 CPU 控制,适于高速设备。DatCounDatRegiserAdresRegitrControlLgicDMA RequestDMA cknowldgIteruptReadWritAdres LinesDat Lines
20、图 3 DMA 方式下的 I/O 控制器结构System Bus I/OControlerI/OControlerProcesorDMAControler Memory图 4 I/O 控制的 DMA 方式4. 通道控制方式(channel control)通道控制器(Channel Processor)有自己的专用存储器,可以执行由通道指令组成的通道程序,因此可以进行较为复杂的 I/O 控制。通道程序通常由操作系统所构造,放在内存里。优点:执行一个通道程序可以完成几批 I/O 操作。 选择通道(selector channel):可以连接多个外设,而一次只能访问其中一个外设 多路通道(mult
21、iplexor channel):可以并发访问多个外设。分为字节多路(byte)和数组多路(block)通道。System BusProcesorI/O Bus I/OControlerI/OControlerI/OControler I/OControlerMemoryChanelProcsor图 5 I/O 控制的通道控制方式12.1.3 外设管理的目的和功能1. 外设管理目的 提高效率:提高 I/O 访问效率,匹配 CPU 和多种不同处理速度的外设 方便使用:方便用户使用,对不同类型的设备统一使用方法,协调对设备的并发使用 方便控制:方便 OS 内部对设备的控制:增加和删除设备,适应新的
22、设备类型2. 外设管理功能 提供设备使用的用户接口:命令接口和编程接口。设备的符号标识 设备分配和释放:使用设备前,需要分配设备和相应的通道、控制器。 设备的访问和控制:包括并发访问和差错处理。 I/O 缓冲和调度:目标是提高 I/O 访问效率12.1.4 外设管理结构(1) 逻辑 I/O:逻辑设备( 也称为虚拟设备) 实体,不涉及实际的设备控制; 针对用户接口,提供抽象的命令,如:Open, Close, Read, Write 。 针对通信设备,则是通信体系结构如网络协议栈; 针对文件存储设备,是文件系统的逻辑结构控制;(2) 设备 I/O:针对设备控制, (如对设备驱动程序的操作) ;可认为是逻辑设备与物理设备间的过渡协调机构。 用户命令到设备操作序列的转换 I/O 缓冲:提高 I/O 效率。(3) 调度和控制:物理设备控制实体;直接面对硬件设备的控制细节。这部分通常体现为设备驱动程序。 并发 I/O 访问调度 设备控制和状态维护 中断处理 User ProcesLogical I/ODevice I/OScheduling & Control(Device Driver)Hardware Comunications Architecture图 6 外设管理结构