1、操作系统原理课程设计院 系: 计算机学院三系 班 级: 计软 05 1 班 姓 名: 韩 宇 学 号: 3 5 号 指导教师: 李益民 2007 年 7 月 4 日文件管理系文件管理系 统统操作系统原理课程设计任务书一、题目:文件系统管理 二、设计要求(1)由鲁建成,韩宇,肖鹏完成设计与实现。(2)查阅相关资料,自学具体课题中涉及到的新知识。(3)采用结构化、模块化程序设计方法,功能要完善,具有一定的创新。(4)所设计的程序应有输入、输出。一. (5)按要求写出课程设计报告,并于设计结束后 1 周内提交。其主要内容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、需求分析、概要设计、
2、详细设计、软件的调试、总结、启谢、附录:带中文注释的程序清单、参考文献。报告一律用 A4 纸打印,中文字体为宋体,西文字体用 Time New Roma,一律用小四号字,行距采用“固定值”18 磅,首行缩进 2 字符。总体设计应配合软件总体模块结构图来说明软件应具有的功能。详细设计应用传统或 N-S 流程图和屏幕抓图说明,调试的叙述应配合出错场景的抓图来说明出现了哪些错误,如何解决的。三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在 200 行有效程序行左右,不得抄袭。四、课程设计工作计划2007 年 6 月 18 日,指导教师讲课,学生根据题目准备资料;2007 年
3、6 月 19 日,进行总体方案设计;2007 年 6 月 20 日2007 年 6 月 25 日,完成程序模块并通过独立编译;2007 年 6 月 26 日2007 年 6 月 27 日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;2007 年 6 月 27 日2007 年 6 月 29 日,验收、撰写报告;2007 年 6 月 29 日下午,验收或总结。指导教师签章: 教研室主任签章 操作系统原理课程设计指导教师评语与成绩指导教师评语:课程设计表现成绩: 课程设计验收成绩: 课程设计报告成绩: 课程设计 总成绩: 指导教师签章 2007 年 7 月 10 日目 录一 概述-5
4、二 需求分析-71) 问题获取2) 分析三 概要设计-8四 详细设计-91) 具体功能概述2) 程序流程图3) 程序代码五 程序的调试与运行结果说明-32六 用户使用说明-351) 引言2) 功能介绍七 启谢-36八 参考资料-36一 概述1. 课程设计的目的1理解重要数据结构的意义2掌握文件系统的工作原理3通过本次课程设计加深文件系统内部功能及内部实现的理解2. 课程设计的要求1需要的基本知识:文件:一组带标志的在逻辑上有完整意义的信息项的序列,这个标识为文件名。文件系统:操作系统中统一管理信息资源的一种软件,管理文件的存储、检索、更新。提供安全可靠的共享和保护手段,并且方便用户使用。2技能
5、:具有用 C 语言编程的能力,懂得文件系统调用处理的算法及一些操作系统文件系统的实现的基本思想。3尚未掌握的知识点:高速缓存管理和磁盘管理算法4参阅操作系统原理书籍中文件管理的相关知识。5老师提出的要求:在理解文件系统的层次结构,掌握高速缓存管理和磁盘管理的基本思想和算法的基础上,掌握文件系统的系统调用处理算法和运用,分析流行操作系统文件系统的实现的基本思想,尝试设计简单的文件系统3. 课程设计的主要设计思想在任一 OS 下,建立一个大文件,把它假想成一张盘,在其中实现一个简单的模拟 UNIX(LINUX )文件系统。本次文件系统具有以下的功能:1、初始化2、建立文件(需给出文件名,文件长度)
6、3、建立子目录4、打开文件(显示文件所占的盘块)5、删除文件6、删除目录7、显示目录(即显示目录下的信息,包括文件、子目录等)8、显示整个系统信息 【关键词】 文件管理 目录管理 操作系统 C 语言二 需求分析1) 问题获取我们以学生为调查对象。模拟询问了若干问题,这些问题的提出和解决有助项目的开发和方向定位。问题如下:1)有关用户操作方面的相关问题# 是否需要使用者的登录登出操作?# 允许用户执行哪些操作?# 各项操作的提示操作是设置在软件界面上还是在菜单里?# 允许用户对文件的操作有哪些?2)有关技术支持方面的相关问题# 用户使用的是那种操作系统?(WindowsXP / Linux/苹果
7、?)# 是否使用数据库的相关技术?# 是否向用户提供相关的技术文档?2) 分析经过相关的问题获取,我们分析了本项目的相关需求。本项目的名称:简易文件系统本系统的使用人员:所有使用计算机的人员本项目的开发工具:WinTc数据库设计:无界面设计:命令行提示方式的程序在用户操作方面,运行本系统前不需要用户的登录操作,运行后可以直接进入操作界面,用户可以直观的使用本程序。用户可以对文件做以下的操作:文件的建立,删除,查找,文件目录的相关管理,各项操作应可以直接操作,不会有任何的限制。用户大多使用的是 WindowsXP 操作系统,而且很多的用户安装了 WinTc 软件,这样我们以 WinTc 编写的程
8、序用户可以直接使用三 概要设计本程序的功能模块图如图所示:在此文件模拟系统上可以实现以下操作:# 创建目录:md + 空格 + 目录名,在指定路径下创建指定的目录,如果没有指定路径,则在当前目录下创建指定目录。对于重名的目录给与错误提示。# 创建文件: vi + 空格 + 文件名 + 文件长度, 创建一个指定名字的新文件,即在目录中增加一项,对于重名的文件给与错误提示。# 删除目录:del + 空格 + 目录名,删除指定的目录及此目录下的文件和子目录。# 删除文件:del + 空格 + 文件名,删除指定的文件。# 查看目录:cd + 空格 + 目录名,显示指定目录下的全部文件和一级子目录,如果
9、没有指定目录名,则显示当前目录下的相应内容。# 查看文件:cat + 空格 + 文件名,显示指定的文件,如没有此文件,则显示错误提示。# 键入 quit 退出文件系统。简易的文件系统创建目录 创建文件 删除文件查看文件 删除目录查看目录四 详细设计1)具体功能概述初始化,查看当前目录文件列表,查看文件,查看系统信息,创建目录、文件,删除目录、文件,进入当前目录的指定目录,返回上一级目录,显示帮助命令和退出文件模拟 12 项功能。2)程序流程图4.2.1 Format()1 超级块初始化图 3.2.1.1i=0k=physici; m=49-super_block.n; 是 super_bloc
10、k.n=50 否j #include #include int physic300; /* 文件地址缓冲区 */int style=1; /* 文件的类型 */char cur_dir10=“c“; /* 当前目录 */struct commandchar com10;cmd12;struct blockint n; /* 空闲的盘快的个数 */int free50; /* 存放空闲盘快的地址 */int a; /* 模拟盘快是否被占用 */memory200;struct block_superint n; /* 空闲的盘快的个数 */int free50; /* 存放进入栈中的空闲块 */
11、int stack50; /* 存放下一组空闲盘快的地址 */super_block;struct node /* i 结点信息 */int file_style; /* i 结点 文件类型 */int file_length; /* i 结点 文件长度 */int file_address100; /* i 结点 文件的物理地址 */ i_node64;struct dir /* 目录项信息 */char file_name10; /* 文件名 */int i_num; /* 文件的结点号 */char dir_name10; /* 文件所在的目录 */ c64;void format()
12、/* 格式化 */int i,j,k;super_block.n=50;for(i=0;i=0;i-)k=physici; /* 需要提供要回收的文件的地址 */m=49-super_block.n; /* 回收到栈中的哪个位置 */if(super_block.n=50) /* 注意 当 super_block.n=50 时 m=-1;的值 */ /* super_block.n=50 的时候栈满了,要将这个栈中的所有地址信息写进下一个地址中 */for(j=0;j=0;i-)printf(“%s/“,); scanf(“%s“,com); /* 输入命令并且查找命令的相关操作 */for(
13、i=0;i12;i+) if(strcmp(com,)=0)p=i;break;if(i=12) /* 如果没有这个语句以后输入的命令都和第一次输入的效果一样 */p=13; /* 随便的一个值 */switch(p)case 0: format(); /* 初始化 */break;case 1: display_curdir(); /* 查看当前目录下的文件列表 */break;case 2: scanf(“%s“,tmp); /* 查看文件 */open_file(tmp); break;case 3: display_sys(); /* 查看系统信息 */break;case 4:scanf(“%s“,tmp); /* 创建目录 */create_dir(tmp); break;case 5: scanf(“%s“,tmp); /* 创建文件 */scanf(“%d“,create_file(tmp,len); break;case 6: scanf(“%s“,tmp); /* 删除文件 */for(i=0;i64;i+) /* 判断文件是不是正规文件 */j=ci.i_num;if(strcmp(tmp,ci.file_name)=0 break;