微机原理课程设计多级文件管理系统_第1页
微机原理课程设计多级文件管理系统_第2页
微机原理课程设计多级文件管理系统_第3页
微机原理课程设计多级文件管理系统_第4页
微机原理课程设计多级文件管理系统_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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,

3、applied 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数据块在内存中的物理结

6、构 typedef 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; /文件系统的容量bitma

9、p bm;/文件系统中的位示图unsigned block_count;/文件系统中文件块的数量fileblock *head;/文件系统中文件块首地址fileindex fi;/文件系统中的文件索引 superblock;5文件系统的当前运行状态 typedef structuser currentuser;/当前用户unsigned filelevel;/用户所在文件系统层fselement *currparent;/当前层的父节点char *currentpath;/当前路径 currentstatus;6用户结构 typedef struct char *username;/用户名称u

10、sertype 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(

12、"对不起,文件名不能为空。n");elsecreatefileelement(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 (

13、unsigned i = 0; i < fs.fi.ficount; i+)if (!strcmp(fs.fi.fistarti.parentname, cs.currparent->filename) && fs.fi.fistarti.filelevel = cs.filelevel && fs.fi.fistarti.effect = 1 && strcmp(fs.fi.fistarti.filename, path) = 0)fselement *fselem = (fselement *)findblankfileblock

14、(fs.fi.fistarti.fileblockid);fselem->filestu = opened;strcpy(display, "文件已打开完毕。n");break;if (strcmp(display, "") = 0)strcpy(display, "当前目录下没有您要打开的文件。n");printf("%sn", display);printf("%slocalhost %s$", cs.currentuser.username, cs.currentpath);4.1.

15、5文件的读:read只支持在当前目录进行操作,前提是用户已执行文件打开的命令,否则会提示用户先打开文件。通过类似的查找方式,找到文件的数据部分,将数据显示到界面。读文件流程图void read(char *path)char displayblock_size;for (unsigned i = 0; i < fs.fi.ficount; i+)if (!strcmp(fs.fi.fistarti.parentname, cs.currparent->filename) && fs.fi.fistarti.filelevel = cs.filelevel &

16、& fs.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,

17、 "")strcpy(display, "文件无内容。n");elsestrcpy(display, fselem->filedata);fselem->filestu = reading;break;if (strcmp(display, "") = 0)strcpy(display, "当前目录下没有您要打开的文件。n");printf("%sn", display);printf("%slocalhost %s$", cs.currentuser.usern

18、ame, cs.currentpath);4.1.6文件的写:write只支持在当前目录进行操作,前提是用户已执行文件打开的命令,否则会提示用户先打开文件。命令成功后,会等待用户的输入,用户输入完毕,使用ctrl+d,结束输入,系统会读入用户的输入内容,保存到相应的文件块(注意,如果用户的输入太多,会出现越界或截取用户输入一部分的现象)。void write(char *path)char displayblock_size;memset(display, '0', block_size);for (unsigned i = 0; i < fs.fi.ficount; i

19、+)if (!strcmp(fs.fi.fistarti.parentname, cs.currparent->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);if (fselem

20、->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, display);unsigned l

21、en=strlen(display)<block_size - sizeof(fselement) ? strlen(display) : block_size - sizeof(fselement);strncpy(fselem->filedata, display, len);fselem->filestu = writing;strcpy(display, "文件写入成功。n");break;printf("%sn", display);printf("%slocalhost %s$", cs.currentu

22、ser.username, cs.currentpath);4.1.7文件关闭:close只支持在当前目录进行操作,通过用户给定的文件名在文件索引中搜索到文件的物理文件块id,找到该文件元素后,将文件当前状态置为关闭。void close(char *path)char display100;for (unsigned i = 0; i < fs.fi.ficount; i+)if (!strcmp(fs.fi.fistarti.parentname, cs.currparent->filename) && fs.fi.fistarti.filelevel = cs

23、.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(dis

24、play, "当前目录下没有您要关闭的文件。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 < fs.fi.ficount;

25、 i+)if (!strcmp(fs.fi.fistarti.parentname, cs.currparent->filename) && fs.fi.fistarti.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(disp

26、lay, "") = 0)strcpy(display, "当前目录下没有您要删除的文件。n");printf("%sn", display);printf("%slocalhost %s$", cs.currentuser.username, cs.currentpath);4.1.9创建目录(建立子目录):mkdir只支持在当前目录创建文件,与创建文件有点类似,只是文件夹在文件元素结构中的数据部分为空。同样会更新位示图和文件索引。创建目录流程图void mkdir(char *filename)if (strc

27、mp(filename, "") = 0)printf("对不起,文件夹名不能为空。n");elsecreatefileelement(protect, filename, dir, null, cs.currparent);printf("%slocalhost %s$", cs.currentuser.username, cs.currentpath);4.1.10改变当前目录:cd只支持进入下一层的一个文件夹和回到父目录,实现方式为通过系统的当前状态,获取一个指向目标文件夹的指针做为当前的父节点,改变当前的路径为目标路径,改变用

28、户当前所在层。改变当前目录流程图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.currentpath) - 1; i > 0; i-)if (cs.currentpathi = '/')splitdispla

29、ycou+;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 < fs.fi.ficount; i+)if(!strcmp(fs.fi.fistarti.parentname, c

30、s.currparent->filename) && fs.fi.fistarti.filelevel = 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

31、(cs.currentpath, path);strcat(cs.currentpath, "/");break;if (strcmp(display, "") = 0)/文件夹不存在,什么都不做printf("当前目录下没有您要进入的文件夹。n");printf("%slocalhost %s$", cs.currentuser.username, cs.currentpath);4.1.11列出文件目录:dir只支持在当前目录进行操作,根据文件元素的名称文件元素所在层父节点可以唯一的标识一个文件元素的关系在文件

32、索引中搜索出当前层的所有文件元素。void dir(char *path)char display1000;memset(display, '0', 1000);/查找显示内容for (unsigned i = 0; i < fs.fi.ficount; i+)if (!strcmp(fs.fi.fistarti.parentname, cs.currparent->filename) && fs.fi.fistarti.filelevel = cs.filelevel && fs.fi.fistarti.effect = 1)str

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

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论