2022年操作系统课程设计-模拟文件系统

上传人:M****1 文档编号:567300390 上传时间:2024-07-19 格式:PDF 页数:18 大小:307.63KB
返回 下载 相关 举报
2022年操作系统课程设计-模拟文件系统_第1页
第1页 / 共18页
2022年操作系统课程设计-模拟文件系统_第2页
第2页 / 共18页
2022年操作系统课程设计-模拟文件系统_第3页
第3页 / 共18页
2022年操作系统课程设计-模拟文件系统_第4页
第4页 / 共18页
2022年操作系统课程设计-模拟文件系统_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《2022年操作系统课程设计-模拟文件系统》由会员分享,可在线阅读,更多相关《2022年操作系统课程设计-模拟文件系统(18页珍藏版)》请在金锄头文库上搜索。

1、目录第 1 章 需求分析 . .1 第 2 章 概要设计 . .1 2.1 系统的主要功能 .1 2.2 系统模块功能结构 .1 2.3 运行环境要求 .2 2.4 数据结构设计 .2 第 3 章 详细设计 . .3 3.1 模块设计 .3 3.2 算法流程图 .3 第 4 章 系统源代码 . .4 第 5 章 系统测试及调试 . .4 5.1 运行结果及分析 .4 5.2 系统测试结论 .5 第 6 章 总结与体会 . .6 第 7 章 参考文献 . .6 附录. .7 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 18 页第 1

2、章 需求分析通过模拟文件系统的实现, 深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法 ,提高综合运用各专业课知识的能力;掌握操作系统结构、实现机理和各种典型算法, 系统地了解操作系统的设计和实现思路,并了解操作系统的发展动向和趋势。模拟二级文件管理系统的课程设计目的是通过研究Linux 的文件系统结构,模拟设计一个简单的二级文件系统,第一级为主目录文件,第二级为用户文件。第 2 章 概要设计2.1 系统的主要功能1) 系统运行时根据输入的用户数目创建主目录2) 能够实现以下命令:Login 用户登录Create

3、 建立文件Read 读取文件Write 写入文件Delete 删除文件Mkdir 建立目录Cd 切换目录Logout 退出登录2.2 系统模块功能结构精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 18 页2.3 运行环境要求操作系统 windows xp ,开发工具 vc+6.0 2.4 数据结构设计用户结构:账号与密码结构typedef struct users char name8; char pwd10; users; 本系统有 8个默认的用户名 ,前面是用户名 ,后面为密码 ,用户登陆时只要输入正确便可进入系统 ,否则提示失败

4、要求重新输入。users usrarray8 = usr1,usr1, usr2,usr2, usr3,usr3, usr4,usr4, usr5,usr5, usr6,usr6, usr7,usr7, usr8,usr8, ; (3)数据结构说明a)文件结构链表struct fnode char filenameFILENAME_LENGTH; int isdir; int isopen; char content255; fnode *parent; fnode *child; fnode *prev; fnode *next; ; b)函数介绍fnode *initfile(char f

5、ilename,int isdir);/ 初始化文件或目录void createroot();/建立系统根目录int run();系统运行int findpara(char *topara);对参数进行处理bool chklogin(char *users, char *pwd);检查账号与口令void help();命令列表int mkdir(); 建立目录int create();建立文件精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 18 页int read();读取文件int write(); 写入文件int del();删除文

6、件int cd();切换目录int dir();文件与目录列表第 3 章 详细设计3.1 模块设计此课程设计把文本作为研究对象来模拟操作系统的文件系统工作过程。所以用一个字符串数组来模拟磁盘空间,顾名思义,模拟磁盘提供字符的存储服务。所有用户构成一个数组, 每个数组元素是一个结构体, 每个结构体包括三部分,用户的用户名、用户密码和文件链表由于模拟文件系统的文件数量不多,故文件表采用线性链表来存储。线性表每个结点放置一个文件的FCB,其中存储一个文件的信息,文件名、长度、类型、创建时间等;磁盘空间分配表, 采用链表结构, 每个节点保存模拟磁盘的一个逻辑块的信息,包括块的最大长度,文件占用长度,占

7、用标志。如果占用标志为0,即该空间可分配给文件。初始化磁盘空间分配表链表,首先把整个模拟磁盘作来一块,并置占用位为 0。当有进程申请磁盘空间时,从头开始遍历,检查占用位,如果该块为可分配, 则检查块大小, 假设块长度大于或等于申请空间大小,则把块的前一部分等于申请大小分配给文件,并置标志位为占用。剩下的大小作来一个新块,作来一个新节点插入到原节点的后边,标志位为可用。 这样就实现了模拟磁盘的线性分配。3.2 算法流程图模拟二级文件系统主界面用户登录建立文件删除文件写入文件读取文件切换目录建立目录退出登录精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第

8、 4 页,共 18 页第 4 章 系统源代码见附录第 5 章 系统测试及调试5.1 运行结果及分析精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 18 页5.2 系统测试结论从运行结果截图中可以看到,程序分别执行了它所包含的7 个功能,并且每个功能都能正确的执行。假设程序执行开始,三次都未输入正确的帐号和密码,精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 18 页程序会退出不再执行。第 6 章 总结与体会虽然我们做过很多次课程设计了,但是感觉自己还有好多需要学习的地方,接到题目

9、要求时, 设计大体的框架, 考虑好所使用的数据结构, 然后用高级编程语言分模块的把架子的思路编写出来,调试,运行,再看看是不是符合题目的要求,上网找些资料,看看想想是不是要提高要求,才可以满足实际的需要,最后把收集的劳动成果组合起来, 一个小程序终于成型了, 虽然每次的过程差不多都一样,但是每次都会有不同的体会。通过本次的课程设计, 使我能够正确运用操作系统课程中所学的基本理论和知识,加深了对文件系统基本概念的理解,以及磁盘文件系统的文件操作。在设计过程中,查询了不少相关资料,不断的发现问题、提出问题、解决问题。在对自己所编写的源程序段的纠错的过程中,使我更好的理解了操作系统中文件系统的理论知

10、识, 同时在编程时用到了模块化的设计思想,这种编程方法可以使我们的编程变的更简单, 可以使我们的查错与纠错变的更方便。总的来说通过这次的设计的学习使我学到了很多在平时的学习中学不到的很多东西,通过这次课程设计,使我对操作系统和编程产生兴趣,我想我会在这条路上继续前进下去。我相信,只要不断的严格要求自己, 注意培养自己的思维能力, 就一定会有更大更辉煌的发展和提高。第 7 章 参考文献操作系统原理实验教程 ,清华大学出版社胡峰松主编操作系统实验教程 ,清华大学出版社张丽芬等 编著电脑操作系统实验教程 ,清华大学出版社颜彬等编著精选学习资料 - - - - - - - - - 名师归纳总结 - -

11、 - - - - -第 7 页,共 18 页附录系统的主要源代码#include stdio.h #include iostream.h #include string.h #include iomanip.h #define FILENAME_LENGTH 10 / 文件名称长度#define COMMAND_LENGTH 10 /命令行长度#define PARA_LENGTH 30 /参数长度/账号结构typedef struct users char name8; char pwd10; users; /文件结构struct fnode char filenameFILENAME_LE

12、NGTH; int isdir; int isopen; char content255; fnode *parent; fnode *child; fnode *prev; fnode *next; ; /账号users usrarray8 = usr1,usr1, usr2,usr2, usr3,usr3, usr4,usr4, usr5,usr5, usr6,usr6, usr7,usr7, usr8,usr8, ; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 8 页,共 18 页fnode *initfile(char filename

13、,int isdir); void createroot(); int run(); int findpara(char *topara); bool chklogin(char *users, char *pwd); void help(); int mkdir(); int create(); int read(); int write(); int del(); int cd(); int dir(); fnode *root,*recent,*temp,*ttemp; char paraPARA_LENGTH,commandCOMMAND_LENGTH,tempparaPARA_LEN

14、GTH,recentparaPARA_LENGTH; /创建文件与目录结点fnode* initfile(char filename,int isdir) fnode *node=new fnode; strcpy(node-filename,filename); node-isdir=isdir; node-isopen=0; node-parent=NULL; node-child=NULL; node-prev=NULL; node-next=NULL; return node; /创建文件存储结点void createroot () recent=root=initfile(/,1);

15、 root-parent=NULL; root-child=NULL; root-prev=root-next=NULL; strcpy(para,/); int mkdir() temp=initfile( ,1); cintemp-filename; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 18 页if(recent-child=NULL) temp-parent=recent; temp-child=NULL; recent-child=temp; temp-prev=temp-next=NULL; else ttemp=

16、recent-child; while(ttemp-next) ttemp=ttemp-next; if(strcmp(ttemp-filename,temp-filename)=0&ttemp-isdir=1) printf( 对不起 ,目录已存在 !); return 1; ttemp-next=temp; temp-parent=NULL; temp-child=NULL; temp-prev=ttemp; temp-next=NULL; return 1; int create() temp=initfile( ,0); cintemp-filename; cintemp-conten

17、t; if(recent-child=NULL) temp-parent=recent; temp-child=NULL; recent-child=temp; temp-prev=temp-next=NULL; cout文件建立成功 !child; while(ttemp-next) ttemp=ttemp-next; if(strcmp(ttemp-filename,temp-filename)=0&ttemp-isdir=0) printf( 对不起 ,文件已存在 !); return 1; ttemp-next=temp; temp-parent=NULL; temp-child=NU

18、LL; temp-prev=ttemp; temp-next=NULL; cout文件建立成功 !endl; return 1; int dir() int i=0,j=0; temp=new fnode; temp=recent; if(temp!=root) cout .child=NULL) coutTotal: directors i files j child; while(temp) if(temp-isdir) cout filenameendl;i+; else cout filenamenext; coutTotal: directors ifiles j filename;

19、 if(recent-child=NULL) cout文件不存在 !child-filename,filename)=0) coutchild-contentchild; while(temp-next) if(strcmp(temp-next-filename,filename)=0) coutnext-contentendl; return 1; cout文件不存在 !filename; if(recent-child=NULL) cout文件不存在 !child-filename,filename)=0) recent-child-isopen=1;/设置文件标记为打开cinrecent

20、-child-content; recent-child-isopen=0;/设置文件标记为关闭cout文件写入成功 !child; while(temp-next) if(strcmp(temp-next-filename,filename)=0) recent-child-isopen=1;/设置文件标记为打开cintemp-next-content; recent-child-isopen=0;/设置文件标记为关闭cout文件写入成功 !endl; return 1; cout文件不存在 !topara; if(strcmp(topara,.)=0) int i; while(recen

21、t-prev) recent=recent-prev; if(recent-parent) recent=recent-parent; i=strlen(para); while(parai!=/ & i0) i-; if(i!=0) parai=0; else parai+1=0; else findpara(topara); return 1; int findpara(char *topara) int i=0; int sign=1; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 18 页if(strcmp(topara,/

22、)=0) recent=root; strcpy(para,/); return 1; temp=recent; strcpy(temppara,para); if(topara0=/) recent=root-child; i+; strcpy(para,/); else if(recent!=NULL & recent!=root) strcat(para,/); if(recent & recent-child) if(recent-isdir) recent=recent-child; else printf( 路径错误! n); return 1; while(ichild) i+;

23、 if(recent-isdir) recent=recent-child; else printf( 路径错误 n); return 0; strcat(para,/); while(toparai!=/ & ifilename,recentpara)!=0 | (recent-isdir!=1) & recent-next!=NULL) recent=recent-next; if(strcmp(recent-filename,recentpara)=0) if(recent-isdir=0) strcpy(para,temppara); recent=temp; printf( 是文件不

24、是目录。 n); return 0; strcat(para,recent-filename); if(strcmp(recent-filename,recentpara)!=0 | recent=NULL) strcpy(para,temppara); recent=temp; printf( 输入路径错误 n); return 0; return 1; int del() char filenameFILENAME_LENGTH; cinfilename; temp=new fnode; if(recent-child) temp=recent-child; while(temp-next

25、 & (strcmp(temp-filename,filename)!=0 | temp-isdir!=0) temp=temp-next; if(strcmp(temp-filename,filename)!=0) cout不存在该文件! endl; return 0; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 15 页,共 18 页 else cout不存在该文件! parent=NULL) temp-prev-next=temp-next; if(temp-next) temp-next-prev=temp-prev; temp-pre

26、v=temp-next=NULL; else if(temp-next) temp-next-parent=temp-parent; temp-parent-child=temp-next; delete temp; cout文件已删除 !endl; bool chklogin(char *users, char *pwd) int i; for(i=0; i8; i+) if( (strcmp(users,usrarrayi.name)=0) & (strcmp(pwd,usrarrayi.pwd)=0) return true; return false; void help(void)

27、cout 命令一览endl; coutendl; coutcreate: 建立文件。endl; coutread: 读取文件。endl; coutwrite: 写入文件 ,支持多线程endl; coutdel : 删除文件。endl; coutmkdir: 建立目录。endl; coutcd: 切换目录。endl; coutlogout: 退出登录。endl; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 16 页,共 18 页 int run() coutlinux:para; cincommand; if(strcmp(command,mkd

28、ir)=0) mkdir(); else if(strcmp(command,dir)=0) dir(); else if(strcmp(command,cd)=0) cd(); else if(strcmp(command,create)=0) create(); else if(strcmp(command,read)=0) read(); else if(strcmp(command,write)=0) write(); else if(strcmp(command,del)=0) del(); else if(strcmp(command,help)=0) help(); else i

29、f(strcmp(command,logout)=0) return 0; int main() int i=0; bool in=false; char users8,pwd12; cout|-|endl; cout| 模拟 Linux 文件系统|endl; cout| 账号: usr1-usr8 密码: usr1-usr8 |endl; cout| 你只有三次时机来试验账号|endl; cout|_|endl; coutendl; while(i3) coutusers; coutpwd; if(chklogin(users,pwd) in=true;break; i+; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 17 页,共 18 页 help(); createroot(); while(in) if(!run() break; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 18 页,共 18 页

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号