微机原理课程设计-多级文件管理系统.doc

上传人:爱问知识人 文档编号:5022425 上传时间:2020-01-29 格式:DOC 页数:23 大小:370.50KB
返回 下载 相关 举报
微机原理课程设计-多级文件管理系统.doc_第1页
第1页 / 共23页
微机原理课程设计-多级文件管理系统.doc_第2页
第2页 / 共23页
微机原理课程设计-多级文件管理系统.doc_第3页
第3页 / 共23页
微机原理课程设计-多级文件管理系统.doc_第4页
第4页 / 共23页
微机原理课程设计-多级文件管理系统.doc_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《微机原理课程设计-多级文件管理系统.doc》由会员分享,可在线阅读,更多相关《微机原理课程设计-多级文件管理系统.doc(23页珍藏版)》请在三一文库上搜索。

1、山东理工大学计算机学院课 程 设 计(操作系统)班 级计科0805姓 名学 号指导教师二一一 年 六 月二十四日课程设计任务书及成绩评定课题名称多级目录文件管理系统、题目的目的和要求: 巩固和加深对操作系统(OS)原理的理解,初步掌握操作系统组成模块和应用接口的使用方法,提高进行工程设计和系统分析的能力;通过选做上面的课题,实现OS最基本模块的管理功能,重点放在数据结构设计、文档规范化和程序设计风格。、设计进度及完成情况日 期内 容6.13-6.15选取参考书,查阅有关文献资料,完成课程设计说明书内容1部分。 完成课程设计说明书内容2-4部分6.166.20创建相关数据结构,录入源程序6.21

2、6.22调试程序并记录调试中的问题,完成课程设计说明书第5部分。6.23系统测试,演示设计成果,考核成绩。6.24整理课程设计说明书,上午11时,由学习委员交课程设计说明书(计算机科学系9#213或直接交给指导教师)、主要参考文献及资料1 汤子赢等.计算机操作系统(第二版).西安电子科技大学出版社,2006.82 冯耀霖等.操作系统,西安电子科技大学出版社.19923 张尧学等.计算机操作系统教程(第2版).清华大学出版社,2001.44 谭耀铭.操作系统.中国人民大学出版社,2003.45 Abraham Silberschatz,Peter Galvin & Greg Gagne,Appl

3、ied Operating System Concepts,Higher Education Press,2002、成绩评定:设计成绩: (教师填写)指导老师: (签字)二一一 年 六 月二十四日目 录第一章 概述1第二章 系统分析2第三章 系统设计3第四章 程序设计流程图或N-S图5第五章 调试过程中的问题及系统测试情况18第六章 结束语21第一章 概述本课程设计意义 课程设计是实践性教学中的一个重要环节,它以某一课程为基础,可以涉及和课程相关的各个方面,是一门独立于课程之外的特殊课程。课程设计是让同学们对所学的课程更全面的学习和应用,理解和掌握课程的相关知识。计算机操作系统一门重要的专业课

4、,是开发操作系统和软件系统的理论和应用基础。操作系统的课程设计非常又必要,可以使学生通过编程实验,更加深入得理解和掌握操作系统的基本理论和功能技术,将相对抽象的理论应用于实践,提高分析问题和解决问题的能力,提高编写和开发系统程序的能力。第二章 系统分析1 在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。2 文件物理结构可采用显式链接或其他方法。3 磁盘空闲空间的管理可选择位示图或其他方法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到FAT中。4 文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还

5、可以通过目录项实现对文件的读和写的保护。目录组织方式可以不使用索引结点的方式,但使用索引结点,则难度系数为1.2。5 设计一个较实用的用户界面,方便用户使用。要求提供以下相关文件操作:(1)具有login (用户登录)(2)系统初始化(建文件卷、提供登录模块)(3)文件的创建: create(4)文件的打开:open(5)文件的读:read(6)文件的写:write(7)文件关闭:close(8)删除文件:delete (9)创建目录(建立子目录):mkdir(10)改变当前目录:cd(11)列出文件目录:dir(12)退出:logout第三章 系统设计数据结构1数据块在内存中的物理结构 ty

6、pedef struct fbunsigned FileBlockId;/文件块编号unsigned BLOCK_SIZE; /文件块的容量char *FileBlockAddr; /文件块地址struct fb *next; /下一个文件块的地址 FileBlock;2文件索引结构 typedef struct unsigned Index;/文件元素索引编号char FileNameNAME_LEN; /文件元素名char ParentNameNAME_LEN; /父节点名unsigned FileBlockId;/文件元素所在物理块编号unsigned FileLevel; /文件元素所

7、在层次,层文件元素名为一个文件元素逻辑位置unsigned effect; /是否有效,0-无效,1-有效 FileIndexElement;3文件系统中文件元素的结构(含文件夹和文件) typedef struct fsestruct fse *parent; /指向自己的父亲节点unsigned FileLevel; /文件元素所在层次,层文件元素名为一个文件元素的逻辑位置char FileNameNAME_LEN; /文件元素名unsigned FileBlockId;/文件元素所在物理块编号unsigned FileElemLen;/文件元素的长度FileType Type;/文件元素

8、类型FileAccess Access;/文件元素可供操作的权限User Creator;/文件创建者char CreateTime18;/创建时间,日期格式:MM/DD/YY HH:MI:SSchar LastModTime18;/最后一次修改时间char *FileData;/一个文件的数据开始地址,文件夹时该值为NULLFileStatus fileStu;/如果是一个文件表示文件当前的状态 FSElement;4文件系统结构 typedef struct char *FSStart;/文件系统的起始地址unsigned SuperBlockSize; /文件系统的容量BitMap bm

9、;/文件系统中的位示图unsigned BLOCK_COUNT;/文件系统中文件块的数量FileBlock *head;/文件系统中文件块首地址FileIndex FI;/文件系统中的文件索引 SuperBlock;5文件系统的当前运行状态 typedef structUser CurrentUser;/当前用户unsigned FileLevel;/用户所在文件系统层FSElement *CurrParent;/当前层的父节点char *CurrentPath;/当前路径 CurrentStatus;6用户结构 typedef struct char *UserName;/用户名称UserT

10、ype ut;/用户类型 User;第四章 程序设计流程图4.1整体思路概述首先系统要完成初始化的任务,建立一个系统,并等待用户登录使用文件系统,用户登录系统时,系统对用户的用户名和密码进行验证(允许用户用限次的尝试,多最多尝试五次),如果用户登录成功,则系统进入命令提示符状态,等用户输入指令后,系统得用一个解释程序按照指定方式处理用户请求,用户退出后,系统转入登录模块,等待下一位用户的登录。4.1.1login (用户登录)内置9个用户名和密码,用来验证登录用户的身份,用户登录成功后会初始化当前用户等一系列的系统当前信息,默认用户的类型为普通用户,如果用户未能通过身份验证,提示用户登录失败,

11、退出整个系统。用户登录流程图4.1.2系统初始化系统的初始化要完成文件系统的建立,包括以下几部分:请求内存、设置位示图、初始化文件索引、初始化文本块链表、初始化系统的当前状态、创建一个根目录做为系统的根。4.1.3文件的创建: create只支持在当前目录创建文件,根据位示图找到一个未使用的文件块用来存放用户的文件信息,根据系统当前状态来构建一个文件系统元素放入到找到的文件块中,新创建的文件状态为关闭,同时更新位示图和文件索引。文件创建流程图void Create(char *filename)if (strcmp(filename, ) = 0)printf(对不起,文件名不能为空。n);e

12、lseCreateFileElement(protect, filename, file, NULL, CS.CurrParent);printf(%slocalhost %s$, CS.CurrentUser.UserName, CS.CurrentPath);4.1.4文件的打开:open只支持在当前目录进行操作,通过用户给定的文件名在文件索引中搜索到文件的物理文件块ID,找到该文件元素后,将文件当前状态置为打开。打开文件流程图void Open(char *path)char display100;for (unsigned i = 0; i FileName) & FS.FI.FISt

13、arti.FileLevel = CS.FileLevel & FS.FI.FIStarti.effect = 1 & strcmp(FS.FI.FIStarti.FileName, path) = 0)FSElement *fselem = (FSElement *)FindBlankFileBlock(FS.FI.FIStarti.FileBlockId);fselem-fileStu = opened;strcpy(display, 文件已打开完毕。n);break;if (strcmp(display, ) = 0)strcpy(display, 当前目录下没有您要打开的文件。n);p

14、rintf(%sn, display);printf(%slocalhost %s$, CS.CurrentUser.UserName, CS.CurrentPath);4.1.5文件的读:read只支持在当前目录进行操作,前提是用户已执行文件打开的命令,否则会提示用户先打开文件。通过类似的查找方式,找到文件的数据部分,将数据显示到界面。读文件流程图void Read(char *path)char displayBLOCK_SIZE;for (unsigned i = 0; i FileName) & FS.FI.FIStarti.FileLevel = CS.FileLevel & FS.

15、FI.FIStarti.effect = 1 &strcmp(FS.FI.FIStarti.FileName, path) = 0)FSElement *fselem = (FSElement *)FindBlankFileBlock(FS.FI.FIStarti.FileBlockId);if (fselem-fileStu = closed)strcpy(display, 文件尚未打开,请先打开文件。n);elseif (!fselem-FileData | !strcmp(fselem-FileData, )strcpy(display, 文件无内容。n);elsestrcpy(disp

16、lay, fselem-FileData);fselem-fileStu = reading;break;if (strcmp(display, ) = 0)strcpy(display, 当前目录下没有您要打开的文件。n);printf(%sn, display);printf(%slocalhost %s$, CS.CurrentUser.UserName, CS.CurrentPath);4.1.6文件的写:write只支持在当前目录进行操作,前提是用户已执行文件打开的命令,否则会提示用户先打开文件。命令成功后,会等待用户的输入,用户输入完毕,使用CTRL+D,结束输入,系统会读入用户的

17、输入内容,保存到相应的文件块(注意,如果用户的输入太多,会出现越界或截取用户输入一部分的现象)。void Write(char *path)char displayBLOCK_SIZE;memset(display, 0, BLOCK_SIZE);for (unsigned i = 0; i FileName) & FS.FI.FIStarti.FileLevel = CS.FileLevel & FS.FI.FIStarti.effect = 1 & strcmp(FS.FI.FIStarti.FileName, path) = 0)FSElement *fselem = (FSElemen

18、t *)FindBlankFileBlock(FS.FI.FIStarti.FileBlockId);if (fselem-fileStu = closed)strcpy(display, 文件尚未打开,请先打开文件。n);elseprintf(n注意:文件最大不可以超过 %d 字节!按CTRL+D结束编辑。n, BLOCK_SIZE - sizeof(FSElement);char c;int i = 0;while (c = getchar() != 0x04)displayi+ = c;getchar();/处理回车displayi = 0;strcpy(fselem-FileData,

19、 display);unsigned len=strlen(display)FileData, display, len);fselem-fileStu = writing;strcpy(display, 文件写入成功。n);break;printf(%sn, display);printf(%slocalhost %s$, CS.CurrentUser.UserName, CS.CurrentPath);4.1.7文件关闭:close只支持在当前目录进行操作,通过用户给定的文件名在文件索引中搜索到文件的物理文件块ID,找到该文件元素后,将文件当前状态置为关闭。void Close(char

20、*path)char display100;for (unsigned i = 0; i FileName) & FS.FI.FIStarti.FileLevel = CS.FileLevel & FS.FI.FIStarti.effect = 1 & strcmp(FS.FI.FIStarti.FileName, path) = 0)FSElement *fselem = (FSElement *)FindBlankFileBlock(FS.FI.FIStarti.FileBlockId);fselem-fileStu = opened;strcpy(display, 文件已关闭。n);br

21、eak;if (strcmp(display, ) = 0)strcpy(display, 当前目录下没有您要关闭的文件。n);printf(%sn, display);printf(%slocalhost %s$, CS.CurrentUser.UserName, CS.CurrentPath);4.1.8删除文件:delete删除文件并不真正清理文件的物理存储内容,只是将文件的有效状态更改为无效。删除文件流程图void Delete(char *path)char display100 = ;for (unsigned i = 0; i FileName) & FS.FI.FIStarti

22、.FileLevel = CS.FileLevel & FS.FI.FIStarti.effect = 1 &strcmp(FS.FI.FIStarti.FileName, path) = 0)FS.FI.FIStarti.effect = 0;/删除标记strcpy(display, 文件已删除。n);break;if (strcmp(display, ) = 0)strcpy(display, 当前目录下没有您要删除的文件。n);printf(%sn, display);printf(%slocalhost %s$, CS.CurrentUser.UserName, CS.CurrentP

23、ath);4.1.9创建目录(建立子目录):mkdir只支持在当前目录创建文件,与创建文件有点类似,只是文件夹在文件元素结构中的数据部分为空。同样会更新位示图和文件索引。创建目录流程图void Mkdir(char *filename)if (strcmp(filename, ) = 0)printf(对不起,文件夹名不能为空。n);elseCreateFileElement(protect, filename, dir, NULL, CS.CurrParent);printf(%slocalhost %s$, CS.CurrentUser.UserName, CS.CurrentPath);

24、4.1.10改变当前目录:cd只支持进入下一层的一个文件夹和回到父目录,实现方式为通过系统的当前状态,获取一个指向目标文件夹的指针做为当前的父节点,改变当前的路径为目标路径,改变用户当前所在层。改变当前目录流程图void Cd(char *path)int splitDisplayCou = 0;/分割符出现的次数if(strcmp(path, .) = 0) /返回上一级目录,即父目录if (CS.FileLevel 0)CS.FileLevel-;CS.CurrParent = CS.CurrParent-parent;for (unsigned i = strlen(CS.Current

25、Path) - 1; i 0; i-)if (CS.CurrentPathi = /)splitDisplayCou+;if (splitDisplayCou = 2)/已过滤掉最后一个目录名break;char temppath1000 ;strcpy(temppath, CS.CurrentPath);memset(CS.CurrentPath, 0, 1000);strncpy(CS.CurrentPath, temppath, i+1);elsechar display100 = ;for (unsigned i = 0; i FileName) & FS.FI.FIStarti.Fi

26、leLevel = CS.FileLevel & FS.FI.FIStarti.effect = 1 & strcmp(FS.FI.FIStarti.FileName, path) = 0)strcpy(display, 文件存在。n);CS.CurrParent = (FSElement *)FindBlankFileBlock(FS.FI.FIStarti.FileBlockId);CS.FileLevel+;strcat(CS.CurrentPath, path);strcat(CS.CurrentPath, /);break;if (strcmp(display, ) = 0)/文件夹

27、不存在,什么都不做printf(当前目录下没有您要进入的文件夹。n);printf(%slocalhost %s$, CS.CurrentUser.UserName, CS.CurrentPath);4.1.11列出文件目录:dir只支持在当前目录进行操作,根据文件元素的名称文件元素所在层父节点可以唯一的标识一个文件元素的关系在文件索引中搜索出当前层的所有文件元素。void Dir(char *path)char display1000;memset(display, 0, 1000);/查找显示内容for (unsigned i = 0; i FileName) & FS.FI.FIStar

28、ti.FileLevel = CS.FileLevel & FS.FI.FIStarti.effect = 1)strcat(display, FS.FI.FIStarti.FileName);strcat(display, tt);printf(%sn, display);printf(%slocalhost %s$, CS.CurrentUser.UserName, CS.CurrentPath);4.1.12退出:logout用户请求退出时,跳出命令处理,提示用户退出系统,转入到登录模块等待下一个用户的登录。4.2算法流程图第五章 调试过程中的问题及系统测试情况5.1登录内置设了user

29、1到user8八个普通用户和1个超级用户root,密码与用户名相同。登录时如果输入用户名和密码错误次数多于8次,则退出程序。输入密码时采用了一种不回显的方式,虽然屏幕上没有显示输入的密码,其实密码已经输入了系统,这样做可以提高系统的安全性。现在用超级用户root登录后出现如下界面:/表示根目录,$后面可以输入命令。图5.15.2新建目录和列出文件目录由于第一次启动系统,故根目录下没有任何东西,这点可以通过输入命令dir来验证,故为了演示,先建立一个目录hhh,在$后输入命令,mkdir hhh,按回车,然后再用命令dir查看根目录下信息,此时有一个文件hhh,如下:图5.25.3改变当前目录系

30、统启动后,默认路径为根目录/,此时若要进入刚才新建的目录hhh,只需输入命令cd hhh,结果如下:路径已由原来的/变成了/hhh/图5.35.4文件的创建在目录hhh下新建一个名为h的文件,在$后输入命令create h,再用命令dir列出文件:图5.45.5文件的打开用命令open h打开文件h:图5.55.6文件的写先输入命令write h,再输入文字:Idle brain is the devils workshop.图5.65.7文件的读执行命令read h可以读取文件h的内容:图5.75.8文件的关闭执行命令close h关闭文件h:图5.85.9文件的删除执行命令delete h

31、删除文件h:图5.95.10返回根目录执行命令cd .,路径由/hhh变成了/图5.105.11退出执行命令logout,退出系统,可以以其他用户名进行登录第六章 结束语在设计的过程中遇到问题,可以说得是困难重重,同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固,通过这次课程设计之后,一定把以前所学过的知识重新温故。这次课程设计终于顺利完成了,在设计中遇到了很多编程问题,最后在通过运用丰富的网络资源,终于游逆而解。如果时间再多点,我相信可以把课程设计做得更好,本来是打算引入索引结点,已经花了两天的时间搞清了索引结点的思路,也把基本的算法写了出来,可是时间

32、不允许我继续做下去,因为时间太少了,只有一个星期的时间可以做操作系统的课程设计,再加上两科考试和做其他事情,为了能在老师规定的时间都可能无法完成,最后没有办法,只能放弃引入索引结点。 在设计得过程中确实遇到了很多很多的问题,有些真的很难解决,但是不能被面前的困难吓倒,要敢于去坚持,去拼搏,编写程序有时候通宵达旦是很正常的,要勇于付出,而且我还发现,很多情况下能否成功完成某项任务并不依赖于会多少,而是要看是否具有快速学习以及触类旁通的能力,很短的时间内学会综合运用多方面的知识来解决问题。总之通过本次设计我又巩固了操作系统和C语言中的很多知识,而且发现了自身在编程技巧和思维上的不足,我会加倍努力得学习。参考文献:1 汤子赢等.计算机操作系统(第二版).西安电子科技大学出版社,2006.82 冯耀霖等.操作系统,西安电子科技大学出版社.19923 张尧学等.计算机操作系统教程(第2版).清华大学出版社,2001.44 谭耀铭.操作系统.中国人民大学出版社,2003.45 Abraham Silberschatz,Peter Galvin & Greg Gagne,Applied Operating System Concepts,Higher Education Press,200221

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 研究报告 > 商业贸易


经营许可证编号:宁ICP备18001539号-1