文档详情

操作系统(课程设计)实验报告.doc

发布:2018-08-23约6.89千字共17页下载文档
文本预览下载声明
操作系统 课程设计报告 学 院: 班 级: 学生姓名: 学 号: 指导老师: 提交日期: 一、实验目的 本设计的目的是实现操作系统和相关系统软件的设计,其中涉及进程编程、I/O操作、存储管理、文件系统等操作系统概念。 二、实验要求 在任一OS下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的模拟Linux文件系统。具体见附表 三、实验环境 Windows 、VC 三、实验思想 1、整体思路 实验可分为三个大模块:文件组织结构、目录结构、磁盘空间管理。编写时,先定义重要的数据结构,整理好各个模块的思路,列出程序清单。接着编写一些对系统进行基本操作的函数,然后利用这些函数实现各种功能。 2、盘块大概分布 (分了128块,每块64字节) 盘块 0 1 2 3 4 5 6 ….. 127 用途 FAT表 FAT表 根目录 目录 数据 数据 数据 ...... 数据 盘块与盘块之间的链接,是利用FAT表项,(使用数组结构),并用它记录了所有盘块的使用信息。 优点:可以利用FAT信息,迅速查找、打开各个目录,进行创建、修改文件。 3、目录组成 为了简单,构思目录时,每个目录只有8字节,每盘存放最多8个目录。其中,目录名、文件名最多只能为3字节,如果是文件的话,类型名也最多为2字节。区分目录名和文件名的方法是:设计一个属性项(1个字节),为8时表示纯目录,为4时表示文件目录。具体分布如下图: 用途 目录名或文件名 文件类型 属性 文件起始盘块 文件长度 大小 3(字节) 2 1 1 1 优点:属性可以区分纯目录、文件目录;文件起始盘块可以记录文件的存放位置;文件长度,,在读文件时控制指针,是否到了文件末尾。 缺点:为了简单,对文件名、目录名、类型名都作了限制。最大分别为:3,3,2字节。 说明:调试时,目录名、文件名、类型名一定不能超过限制,否则出现非预期的结果 4、FAT 、磁盘管理 实验中,将磁盘分为128块,每块大小64字节。为了方便对空间管理,利用教材提到的方法,把每块的块号(指针)提取出来,形成FAT表: 盘块 0 1 2 3 4 5 6 7 。。。 下一盘块 -1 -1 4 9 0 7 8 -1 若某文件的一个盘块号为i ,则这个文件的下一个盘块为表中的第i项,其中0表示此盘块空闲,-1表示结束。 另一个重要的表是已打开文件表,用来记录打开或建立的内容,表如下: 文件路径名 文件属性 起始盘 文件长度 读指针 写指针 块号 块内地址 块号 块内地址 5、重要数据结构 用户结构: typedef struct //用户定义 { Int uid; char name[20]; char password[20]; }user; 目录结构: typedef struct //定义目录结构 { char name[3];//文件或目录名 为了简单只是取3字节 char type[2];//文件类型名 char attribute; //属性 char address; //文件或目录的起始盘块号 char length; //文件长度 ,为了简单实验是用盘块为单位 }content; //定义为目录结构 打开文件的数据结构: typedef struct { int dnum;//磁盘块的块号 int bnum;//块内的第几个字节 }pointer;//读写指针结构 #define n 5 //定义打开文件的最大个数; 打开文件表项结构 : typedef struct { char name[20];//模拟绝对路径 char attribute;//文件属性 1个字节 int number;//文件的起始盘的块号 int length ;//文件长度,字节为单位 int flag;//操作类型 “0”以读方式打开 “1 pointer read,write;//读写指针 }OFILE;//已经打开文件表项的定义 struct { OFILE file[n];//已经打开文件表 int length;//表中文件的数量; }openfile;//表的定义 这里定义了一个本次实验中最为重要的结构:打开文件项结构,它记录了所有打开文件的信息,各种操作,如newfile、read_file、wirte_file 等都
显示全部
相似文档