《操作系统课程设计《磁盘文件操》》由会员分享,可在线阅读,更多相关《操作系统课程设计《磁盘文件操》(23页珍藏版)》请在金锄头文库上搜索。
1、课程设计课程设计 4 磁盘文件操作磁盘文件操作一、一、 课程设计目的课程设计目的深人了解磁盘文件系统的实现。二、二、 预备知识预备知识文件的操作。 文件的逻辑结构和物理结构。 磁盘空间的管理。 磁盘目录结构。三、三、 小组人员小组人员四、四、 课程设计内容课程设计内容设计一个简单的文件系统,用文件模拟磁盘。用数组模拟缓冲区,要求实现: 支持多级目录结构.支待文件的绝对读路径; 文件的逻辑结构采用流式结构,物理结构采用链接结构中的显示链接方式; 采用文件分配表; 实现的命令包括建立目录、 ,列目录、删除空目、建立文件、删除文件、显示 文件、打开文件、读文件、写文件(追加方式)、关闭文作、改变文件
2、属性。 最后编写主函数对所做工作进行测试。五、五、 提示与讲解提示与讲解为了正确地实现文件的存取。文件系统设汁了一组与存取文件有关的功能 模块。用户可以用“访管指令”调用这些功能模块.以实理文件的存取要求,把 文件系统设计的这一组功能模块称为“文件操作” 。文件操作不是独立的,和文 件系统的其他部分密切相关。若要实现文件操作就离不开文件的目录结构、文 件的组织结构和磁盘空间的管理。因此,这个实验虽然是文件操作的模拟实现, 但是还必须模拟一部分文件的组织结构、目录结构和磁盘空间管理的实现。(1)文件的组织钻构文件的逻辑结构有两种形式:流式文件和记录式文件。实脸中只支持流式 文件,采用称为显示链接
3、的物理文件结构,把磁盘中每一块的指针部分提出来 组织在一起,形成文件分配表(FAT) 。磁盘有多少块,文件分配表就有多少项。若某文件的一个磁盘块号为 i,则 这个文件的下 一个磁盘的块号应该记录在文件分配表第 i 项。例如,某系统文件分配表前几 项值如表 2-5-1 所示:某个文件的起始盘块号为 3,则该文件的磁盘块号依次为 3、4、9、12、13。表 2-5-1 某磁盘文件分配表部分内容 第几项0123456789101112131415内容-1-1-149078-11211-113-1002)磁盘空间的管理首先要模拟一个磁盘。因为是实验,不使用真正的磁盘,所以实验中用一 个文件模拟一 个小
4、磁盘。假设模拟磁盘有 128 个物理块,每个物理块大小为 64B。盘块的块 号从 0 编起, 依次为 0,1,2,3,127。将前面所讲的文件分配表放在磁盘的开始处。因为盘块有 128 块,所以文 件分配表有 128 项,每项占用一个字节。这样文件分配表占用了磁盘的 0 块和 1 块,这两块就不能作其他用处。若一个盘块是某个文件的最后一块。填写“-1”表示文件结束。文件的建立和删除操作需要对磁盘的空间进行分配和回收,所以要建立一 定的数据表格 来记录磁盘的使用情况。用文件分配表的第 i 项表示第 i 个盘块的使用情况。磁 盘的第 0 块 一定会被系统数据占用。所以任何一个文件的某个盘块块号都不
5、可能是“0” , 因而还可以用“0”表示磁盘盘块空闲,若这个盘块已经分配出去,即是某个文 件的一块,由上面已知知道文件分配表中对应记录的是文件下一块的块号或结 束标志都不是“0” 。这样非“0”值表示盘块已分。像前面图 2-5-1 那张文件分 配表中。块号为 5、14 和 15 的盘块是空闲的,其余是已分配的。在文件分配表 中可以用一个超过盘块号的正整数表示文件结束,在此实验中 采用 255 代替“-1“表示文件结束。 如果磁盘中某些部分损坏,只要不是系统 区(引导扇区、文件分配表或根目录等) 。不 分配那些坏的盘块、磁盘就可以继续使用。在 文件分配表对应坏盘块的项不能是“0” ,一般 也需要
6、特定的数值表示(这个数值应该是盘块 编号以外并且不是结束标志的数值,例如实验 中 128254 之间的数值) 。假设试验中模拟磁 盘的筑第 13 块和第 49 块已经损坏不能使用, 则在文件分配表的第 13 项和第 14 项写入“254”表示该盘块损坏不能使用。由于磁盘分配,有时不能预订文件大小,例 如建立文件时并不知道文件大小,因而磁盘的分 配有时是一块一块申请的。.磁盘空间回收时,整 个文件删除时回收很多块,但有时文件修改时可 能会删除某些内容,造成归还磁盘块,这时是一 块一块回收的。这里给出申请一块磁盘空间的流 程图,若分配多块时,循环多次即可。分配一个盘块时,不应该从文件分配表 第一项
7、查起,因为磁盘中最开始的 J 几块为系统数据区(引导扇区,文件分配NY开始找到文件分配表第 x 项,i=x第 i 项值是否为 0?分配第 i 块磁盘满,分配失败结束Y第 i 项是否为最后一项i=i+1图 2-5-1 分配一个磁盘块的流程图表、根目录等占用) 。所以应该从这之后的可分配数据区开始查询.。假定系统 区域占用了 x 个盘块,则分配一个磁盘盘块的流程如图 2-5-1 所示。回收一个 磁盘块的流程图很简单,例如回收磁盘块的块号为 x,只要找到文件分配表中 第 x 顶,将第 x 项的值改为 0 即可。(3)目录结构文件目录是用于检索文件的,是文件系统实现按名存取的主要手段。文件 目录由若干
8、目录项组成,每一个目录记录一个文件的有关招息。一般地说,目 录项应该包括如下内容:有关文件的控制信息。例如,用户名、文件名、文件类型、文件属性。 实验模拟个人计算机上的文件操作。这部分内容仅包括文件名、文件类型和属 性。有关文件结构的信息。例如,文件的逻辑结构、文件的物理结构、记录 个数、文件在存储介质的位里等。实验中,仅仅支持流式文件,不支持记录式 文件,所以这部分内容仅仅包括文件在存储介质的位置(分给文件第一个盘块 的块号。即起始盘块号)、文件的长度。有关文件管理的信息。例如,文件的建立日期、文件被修改的日期、文 件保留期限和记帐信息等。实验中为了简单起见,这部分内容都不采用。因此,实验中
9、文件的目录项包括:文件名、文件类型,文件属性、文件的 起始盘块号、文件的长度。每个目录项占用 8 个宁节。具体结构如下: 文件名:3 个字节(实验中合法文件名仅可以使用字母、数字和除“$“、“.“ 和“/“以外的字符,第一个字节的值为“$“时表示该目录为空目录项,文件们和类 型名之间用“.“分隔,用“/“作为路径名中目录间分隔符) ; 文件类型名:2 个字节;1文件属性:1 字节; 起始盘块号:1 个字节; 文件长度:1 个字节(为了实验的简单,文件长度单位为盘块) 。 有了文件目录后,当用户要求使用某个文件时,文件系统可以顺序查找目 录项,并比较文件名。就可以找到指定文件的目录项.根据目录项
10、中有关内容核 对使用权限,井读比文件供用户使用。因此文件目录的组织和管理要便于检索 和防止冲突。 在操作系统中目录有根目录和子目录。因此文件除了需要登记形成目录外, 还要登记子目录。实验中,根目录固定位置、固定大小(可以登记有限个文件 或子目录项) 、子目录像文件一样。可使用任何一个空闲磁盘块。为了实验简单, 实验中根目录占用了一个盘块.子目录的长度也是采用可以任意长的方法,而是 采用了定长的方法,每个子目录的长度也是一个盘块.只能放 8 个目录项。文件 和目录的登记项是混在一起的,登记项的结构应该和文件目录一样。每个目录 项占用 8 个字节,结构如下: 目录名:3 个字节(实验中合法文件名仅
11、可以使用字母、数字和除 “$“、“.“、“/“以外的字符。第一个字节的值为“$“时表示该目录为空目录) ; 未使用 2 字节(在实验中填写空格) ; 目录属性:1 个字节; 起始盘块号:1 个字节; 未使用 1 字节(在实验中填写“0” ) 。 在目录登记项中,系统为目录名后两个字节(对应文件类名位置)填写空格,目录起始盘块号后 1 个字节(对应文件长度位置填)填写 0。目录属性和 文件属性占用同一个字节,为了区别目录和文件,该字节每一位代表不同的含义 (为“1”表示“是” ,为“0”表示“否” ) 。如图 2-5-2 所示,第 0 位表示文件 为只读文件,第 1 位表示文件为系统文件,第 2
12、 位表示文件为一般可读、可写 的普通文件,第 3 位表示该登记项不是文件的登记顶,而是目录的登记项。其 余几位闲置未用。如该字节为表示该目录是一个目录的登记项,)00001000(8(82 该字节为表示该目录是一个只读系统文件的登记项。该字节为)00000011(3( 32 表示该目录是一个可读可写的普通文件。)00000100(4(2第 7 位第 6 位第 5 位第 4 位第 3 位第 2 位第 1 位第 0 位 未使用未使用未使用未使用目录属 性普通文 件系统文 件只读文 件常用的目录检索的方法是顺序检索,根据绝对路径名查找文件的方法一般 如下:先找到根目录的起始盘块,一般根目录位置是固定
13、的,实验中就是模拟磁 盘的第 2 块,将该盘块读出;取出路径名中根目录后的目录名或文件名与根目 录中目录项依次比较,比较完一块。再根据文件分配表找到下一块,再读入比 较。直到找到名字一致的目录项或根目录登记项均已查完为止;若没有找到, 则查找失败,结束;若查找的是文件,结束;若查找的是目录,从找到的目录 项中,取出目录的起始盘块号。读入此盘块,然后用上述相同的查找方法继续 查找找。直到找到该文件(或目录)或查找失败结束。 实验中,使用绝对路径查找文件(或目录)的流程如图 2-5-3 所示。图 2-5-2 属性字节各位作用示意图开始查找绝对路径名 namei=根目录的起始盘块号 last=0pn
14、a=从 name 中分离出“/”后下一个目录名(或文件名):若是文件,分离出类型名type读出磁盘第 i 块,存在 buffer2若 pna 为目录名或文件名最后一部分,last=1是绝对路径的最后一部分且是文件名? j=0j=0NY第 j 项是该盘块一项?Y文件名为 pna 且类型名为 type?Y查找成功j=j+1NN第 j 项是该盘块一项?NYlast=1?Y查找成功查找失败,该文件或目录不存在Y第 j 项是目录且名字等于 pna?Yj=j+1Ni=该目录起始盘块号N结束图 2-5-3 使用绝对路径查找文件(目录)的流程图查找文件除了使用绝对路径名外,还可以使用相对路径名。相对路径名是从
15、 当前目录出发到指定文件的路径。如果文件(或目录)在当前目录下,使用相对路径名查找速度比较快。和绝对路径的查找方法一样,只是查找的起点是当 前目录,不是根目录。实验中只使用了绝对路径名。 (4)文件操作确定文件组织结构、目录结构和磁盘空间管理的方法后。就可以模拟文件 操作的实现。实验中文件操作包括建立文件(create_file)、打开文件(open_file)、 关闭文件(close_file)、读文件(read_file)、写文件(write_file)、删除文件 (delete_file)、显示文件内容(typefile)和改变文件属性(change),目录命令包括建 立目录(md)、显
16、示目录内容(dir)和删除空目录(rd)。在实验中没有程序调用这些 指令,为了看到它们的摸拟情况,从键盘输入选择指令来模拟用户程序的调用。首先要建立一个“已打开文件表” ,该表用来记录打开或建立文件的相关内 容、结构如表 2 一 5 一 2 所示。读指针写指针文件路径 名文件属 性起始盘块 号文件长 度操作类 型块号块内地 址块号块内地 址 用数组模拟已打开文件表,数据结构定义如下: #define n 5 /试验中系统允许打开文件的最大数量 typedef struct int dnum; /磁盘盘块号 int bnum; /磁盘盘块内第几个字节 pointer; /已打开文件表中读、写指针的结构 typedef struct char name20; /文件绝对路径名 char attribute; /文件的属性,用 1 个字节表示,所以采用 char 类型 int