湖南工业大学课程设计资料袋学院(系、部)学年第学期课程名称计算机操作系统指导教师职称学生姓名专业班级学号题目文件系统演示成绩起止日期年月日~年月日目录清单课程设计任务书—学年第学期学院(系、部)专业班级课程名称:计算机操作系统学生姓名:设计题目:文件系统演示指导教师:完成期限:自年月日至年月日共周内容及任务一、设计内容设计一个简单的多用户文件系统。
即①在系统中用一个文件来模拟一个磁盘;②此系统至少有:Create、delete、open、close、read、write等和部分文件属性的功能。
③实现这个文件系统。
④能实际演示这个文件系统。
基本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。
二、设计任务课程设计说明书(纸质+电子版),内容包括:设计内容、系统分析(包括可行性分析、需求分析等)及功能分析;系统设计(要求画出系统整体功能框图、流程图、并给出相应地关键的代码且对所使用的主要数据结构进行说明等。
)、设计总结(评价/遇到的问题/体会/建议等)、使用说明等。
三、设计要求1. 按功能要求开发系统,能正确运行。
程序代码书写规范,有充足的注释。
2. 课程设计所使用的编程语言任选,但建议使用C或C++;3. 绿色软件:程序运行不需安装,避免写系统和注册表;进度安排起止日期工作内容完成选题、课题分析、课题设计、编写程序程序调试、完善代码优化测试系统、程序答辩撰写并提交课程设计说明书 (含电子文档)、源程序等。
主要参考资料[1] 胡志刚,谭长庚等. 《计算机操作系统》.中南大学出版社. 2005[2] 罗宇,邹鹏,邓胜兰.操作系统[M].北京:电子工业出版社,2012.[3] 面向对象程序设计与C++语言.朱战立,宋新爱.电子工业出版社,2010.7[4] C++面向对象程序设计.谭浩强.清华大学出版社,2006.1[5] 任爱华,李鹏,刘方毅.操作系统实验指导, 清华大学出版社,2004.[6] 徐虹.操作系统实验指导-基于LINUX内核, 清华大学出版社, 2004.指导教师(签字):年月日系(教研室)主任(签字):年月日计算机操作系统课程设计设计说明书文件系统演示起止日期:年月日至年月日学生姓名班级学号成绩指导教师(签字)计算机与通信学院年月日目录1 课程设计简介 (1)1.1 课程设计的目的 (1)1.2 课程设计内容 (1)2 数据结构的设计 (1)2.1全局变量设计 (1)2.2结构体设计 (1)2.3函数设计 (3)3 功能模块(或算法)描述 (3)4 程序运行结果 (6)5心得体会 (8)参考文献 (9)附源代码 (10)1 课程设计简介1.1 课程设计的目的课程设计目的使学生熟悉文件管理系统的设计方法;加深对所学各种文件操作的了解及其操作方法的特点。
通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。
同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。
1.2 课程设计内容设计一个简单的多用户文件系统。
即:①在系统中用一个文件来模拟一个磁盘;②此系统至少有:Create、delete、open、close、read、write等和部分文件属性的功能。
③实现这个文件系统。
④能实际演示这个文件系统。
基本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。
2 数据结构的设计2.1全局变量设计#define MaxDisk 512*1024 //一个扇区512字节,假设有1024个扇区int Max_User=10; //支持的最大用户数int Max_Open=5; //文件的最大打开数int Max_End=0; //存放最大的末点UFD_ptr pufd=NULL; //UFD的头结点MFD_ptr pmfd=NULL; //MFD的头结点AFD_ptr pafd=NULL; //AFD的头结点char User_name[30]; //存放当前用户的用户名char flag='n';char Disk_Size[MaxDisk]; //模拟磁盘Disk_Node Disk_Head; //磁盘空间控制结点2.2结构体设计typedef struct UFD{string File_name; //文件名int Start; //文件在磁盘存储空间的起始地址int Protect; //文件的属性int File_length; //文件的长度int Max_File_length; //文件的最大长度struct UFD *next;}UFD,*UFD_ptr;typedef struct MFD{string User_name; //用户名string User_passwd; //用户密码UFD *Ufd_next; //UFD指针int End; //用户空间分配的末尾struct MFD *next; //MFD指针}MFD,*MFD_ptr;typedef struct AFD{string File_name;int File_length;int Start; //文件在磁盘存储空间的起始位置int Protect; //文件权限int Pointer; //根据这个指针的值去完成用户的要求,读写指针int Max_File_length; //文件的最大长度struct AFD *next; //AFD指针}AFD,*AFD_ptr;typedef struct Disk_Table{int Max_length; //最大长度int Start; //开始位置}Disk_Node;2.3函数设计void Init_Disk();磁盘初始化函数bool Init_MFD();MFD链表初始化函数void Print_UFD();UFD文件打印输出函数bool Init_UFD(char *name);UFD链表初始化函数bool User_Check();用户检索函数void Init_AFD();AFD链表初始化函数bool Create_MFD();MFD文件创建函数bool Create_UFD();UFD文件创建函数bool Delete_UFD();UFD文件删除函数bool Open();UFD文件打开函数void Close();UFD文件关闭函数bool Read_File();UFD文件读取函数bool Write_File();UFD文件写入函数void Destroy_Space();系统释放资源函数void Save_MFD();MFD文件保存函数void Save_UFD(char *name);UFD文件保存函数void Quit_System();系统退出函数void Print_Help();用户帮助菜单函数void System_Init();系统初始化函数void File_System();系统操作函数3 功能模块(或算法)描述3.1图3.1文件系统总体数据结构图3.2文件系统算法的流程图如图3.2所示。
开始输入用户名在MFD中查找该用户报告无此用户文件显示该用户目录表UFD中所有的文件初始化运行文件表AFD输入操作命令是什么命令?建立文件处理程序删除文件处理程序打开文件处理程序关闭文件处理程序读取文件处理程序写入文件处理程序显示文件处理程序修改文件处理程序保存当前文件目录打印当前文件目录结束create delete open read write renameclose ls图3.2文件系统算法流程图3.3 login 登录用户输入用户名和密码,在MFD文件中查找是否有此用户,核对密码。
正确则登录成功,当前目录设定到当前用户文件夹下。
如果用户密码输错3次,系统结束。
3.4 create 创建文件查找当前用户目录下是否有同名文件,是则退出,否则让用户输入新建文件的相关属性;并为之模拟分配磁盘空间。
3.5 delete 删除文件查找文件是否已经打开,打开则退出,因为打开代表该资源正被占用,无法释放或者删除;没有打开则检查该文件是否存在,显然,你是不可以删除一个不存在的文件的,存在便将该文件删除,并回收相应的资源。
3.6 ls 查看文件的属性将用户目录下的所有文件相关信息显示出来;其中包括文件名、、最大文件长度、文件权限、起始位置、文件长度信息。
3.7 open 打开用户文件首先判断用户欲打开的文件是否已经打开,已经打开自然不需要打开了。
再是判断用户欲打开的文件是否属于该用户的文件;排除以上两点后,将用户指定的文件打开来。
3.8 close 关闭用户文件首先判断用户欲打开的文件是否已经打开,如果文件是关闭的,自然就不需要再进行关闭操作了,直接返回退出函数的调用即可;再就是判断用户欲关闭的文件是否属于该用户的文件,排除以上两点后,将用户指定的文件关闭掉。
3.9 read 读取文件内容首先判断欲读取的文件是否已经打开,按照常理来讲,要想先读文件,自然得先打开文件,好比office里的word一样。
紧接着根据用户的要求完成文件内容的读取操作,显然读取操作得要求文件至少有读取的权限,关于这点,我们程序是通过open命令功能来判断的。
3.10 write写入文件内容同样,用户要求写入文件的话,首先该文件要先打开,并且具有可写入信息的权限;而且文件的属主自然是该用户,用户可以根据自己的需要写入指定长度内容的数据,在我们的程序中,一个字符代表一个字节。
3.11 logout 登出用户可以达到间接切换用户的功效,既然是登出用户,上一次登录用户的操作变化自然是需要保存的,并且所占用的资源也需要释放掉。
用户登出后实则再次转入到用户的登录界面。
图3.3 登录模块流程图图3.4 读取模块流程图图3.5 写入模块流程图注释:在读取和写入数据时,其实还要有文件是否打开判断的,这里没画出来而已。
4 程序运行结果4.1 显示帮助信息并登录4.2 显示UFD的相关信息4.3 创建用户文件文件保护类型说明:0代表不可操作,1代表可读,2代表可读可写4.4 删除用户文件对比4.3,显然可以知道,程序的确将HQ3文件给删除了。
4.5 打开文件操作根据上下两图的对比,HQ1的确是打开了,以致于再次打开失败。
4.6 关闭文件操作由上图可知,HQ1文件的确是被关闭了,以致于再次关闭失败。
4.7 写入文件内容和我们之前说的一样,要对一个文件进行写入操作,你自然要先打开这个文件,用户可以根据自己写入数据大小的需要对该文件写入指定大小的内容。
但这也是不能超过文件的分配容量的,否则数据溢出了。