操作系统专业课程设计模拟文件系统样本.doc
《操作系统专业课程设计模拟文件系统样本.doc》由会员分享,可在线阅读,更多相关《操作系统专业课程设计模拟文件系统样本.doc(19页珍藏版)》请在咨信网上搜索。
操作系统专业课程设计模拟文件系统 目录 第1章 需求分析……...….........……………………………………1 第2章 概要设计……...….........……………………………………1 系统的主要功能……...….........…………………………….1 ……...….........……………………..……1 ……...….........……………………………..…2 ……...….........…………………………..……2 第3章 详细设计……...….........……………………………………3 ……...….........…………………………………..…3 ……...….........…………………………..………3 第4章 系统源代码……...….........…………………………………4 第5章 系统测试及调试……...….........……………………………4 ……...….........……………………..………4 ……...….........…………………………..……5 第6章 总结与体会……...….........…………………………………6 第7章 参考文献……...….........……………………………………6 附录……...….........……………………………………………….….7 第1章 需求分析 通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力;掌握操作系统结构、实现机理和各种典型算法,系统地了解操作系统的设计和实现思路,并了解操作系统的发展动向和趋势。 模拟二级文件管理系统的课程设计目的是通过研究Linux的文件系统结构,模拟设计一个简单的二级文件系统,第一级为主目录文件,第二级为用户文件。 第2章 概要设计 系统的主要功能 1) 系统运行时根据输入的用户数目创建主目录 2) 能够实现下列命令: l Login 用户登录 Create 建立文件 l Read 读取文件 Write 写入文件 l Delete 删除文件 Mkdir 建立目录 Cd 切换目录 Logout 退出登录 操作系统windows xp ,开发工具vc++ 用户结构:账号与密码结构 typedef struct users { char name[8]; char pwd[10]; }users; 本系统有8个默认的用户名,前面是用户名,后面为密码,用户登陆时只要输入正确便可进入系统,否则提示失败要求重新输入。 users usrarray[8] = { "usr1","usr1", "usr2","usr2", "usr3","usr3", "usr4","usr4", "usr5","usr5", "usr6","usr6", "usr7","usr7", "usr8","usr8", }; (3)数据结构说明 a)文件结构链表 struct fnode { char filename[FILENAME_LENGTH]; int isdir; int isopen; char content[255]; fnode *parent; fnode *child; fnode *prev; fnode *next; }; b)函数介绍 fnode *initfile(char filename[],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();文件与目录列表 第3章 详细设计 此课程设计把文本作为研究对象来模拟操作系统的文件系统工作过程。所以用一个字符串数组来模拟磁盘空间,顾名思义,模拟磁盘提供字符的存储服务。 所有用户构成一个数组,每个数组元素是一个结构体,每个结构体包括三部分,用户的用户名、用户密码和文件链表(由于模拟文件系统的文件数量不多,故文件表采用线性链表来存储。线性表每个结点放置一个文件的FCB,其中存储一个文件的信息,文件名、长度、类型、创建时间等); 磁盘空间分配表,采用链表结构,每个节点保存模拟磁盘的一个逻辑块的信息,包括块的最大长度,文件占用长度,占用标志。如果占用标志为0,即该空间可分配给文件。初始化磁盘空间分配表链表,首先把整个模拟磁盘作来一块,并置占用位为0。当有进程申请磁盘空间时,从头开始遍历,检查占用位,如果该块为可分配,则检查块大小,若块长度大于或等于申请空间大小,则把块的前一部分(等于申请大小)分配给文件,并置标志位为占用。剩下的大小作来一个新块,作来一个新节点插入到原节点的后边,标志位为可用。这样就实现了模拟磁盘的线性分配。 模拟二级文件系统 主界面 用户登录 切换目录 退出登录 建立目录 删除文件 写入文件 读取文件 建立文件 第4章 系统源代码 见附录 第5章 系统测试及调试 从运行结果截图中可以看到,程序分别执行了它所包含的7个功能,并且每个功能都能正确的执行。若程序执行开始,三次都未输入正确的帐号和密码,程序会退出不再执行。 第6章 总结与体会 虽然我们做过很多次课程设计了,但是感觉自己还有好多需要学习的地方,接到题目要求时,设计大体的框架,考虑好所使用的数据结构,然后用高级编程语言分模块的把架子的思路编写出来,调试,运行,再看看是不是符合题目的要求,上网找些资料,看看想想是不是要提高要求,才可以满足实际的需要,最后把收集的劳动成果组合起来,一个小程序终于成型了,虽然每次的过程差不多都一样,但是每次都会有不同的体会。 通过本次的课程设计,使我能够正确运用操作系统课程中所学的基本理论和知识,加深了对文件系统基本概念的理解,以及磁盘文件系统的文件操作。在设计过程中,查询了不少相关资料,不断的发现问题、提出问题、解决问题。在对自己所编写的源程序段的纠错的过程中,使我更好的理解了操作系统中文件系统的理论知识,同时在编程时用到了模块化的设计思想,这种编程方法可以使我们的编程变的更简单,可以使我们的查错与纠错变的更方便。总的来说通过这次的设计的学习使我学到了很多在平时的学习中学不到的很多东西,通过这次课程设计,使我对操作系统和编程产生兴趣,我想我会在这条路上继续前进下去。我相信,只要不断的严格要求自己,注意培养自己的思维能力,就一定会有更大更辉煌的发展和提高。 第7章 参考文献 《操作系统原理实验教程》,清华大学出版社 胡峰松主编 《操作系统实验教程》,清华大学出版社 张丽芬等 编著 《计算机操作系统实验教程》,清华大学出版社 颜彬等编著 附录 系统的主要源代码 #include "" #include "" #include "" #include "" #define FILENAME_LENGTH 10 //文件名称长度 #define COMMAND_LENGTH 10 //命令行长度 #define PARA_LENGTH 30 //参数长度 //账号结构 typedef struct users { char name[8]; char pwd[10]; }users; //文件结构 struct fnode { char filename[FILENAME_LENGTH]; int isdir; int isopen; char content[255]; fnode *parent; fnode *child; fnode *prev; fnode *next; }; //账号 users usrarray[8] = { "usr1","usr1", "usr2","usr2", "usr3","usr3", "usr4","usr4", "usr5","usr5", "usr6","usr6", "usr7","usr7", "usr8","usr8", }; fnode *initfile(char filename[],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 para[PARA_LENGTH],command[COMMAND_LENGTH],temppara[PARA_LENGTH],recentpara[PARA_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); root->parent=NULL; root->child=NULL; root->prev=root->next=NULL; strcpy(para,"/"); } int mkdir() { temp=initfile(" ",1); cin>>temp->filename; if(recent->child==NULL) { temp->parent=recent; temp->child=NULL; recent->child=temp; temp->prev=temp->next=NULL; } else { ttemp=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); cin>>temp->filename; cin>>temp->content; if(recent->child==NULL) { temp->parent=recent; temp->child=NULL; recent->child=temp; temp->prev=temp->next=NULL; cout<<"文件建立成功!"<<endl; } else { ttemp=recent->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=NULL; 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<<"\ <DIR> "<<".."<<endl;i++;} if(temp->child==NULL) { cout<<"Total: "<<" directors" <<i<<" files"<< j <<endl; return 1; } temp=temp->child; while(temp) { if(temp->isdir) {cout<<"<DIR>\ "<<temp->filename<<endl;i++;} else {cout<<"<FILE> "<<temp->filename<<endl;j++;} temp=temp->next; } cout<<"Total: "<<" directors" <<i<<"files"<< j <<endl; } int read() { char filename[FILENAME_LENGTH]; cin>>filename; if(recent->child==NULL) { cout<<"文件不存在!"<<endl; return 1; } if(strcmp(recent->child->filename,filename)==0) { cout<<recent->child->content<<endl; return 1; } else { temp=recent->child; while(temp->next) { if(strcmp(temp->next->filename,filename)==0) {cout<<temp->next->content<<endl; return 1;} } cout<<"文件不存在!"<<endl; } } int write() { char filename[FILENAME_LENGTH]; cin>>filename; if(recent->child==NULL) { cout<<"文件不存在!"<<endl; return 1; } if(strcmp(recent->child->filename,filename)==0) { recent->child->isopen=1;//设置文件标记为打开 cin>>recent->child->content; recent->child->isopen=0;//设置文件标记为关闭 cout<<"文件写入成功!"<<endl; return 1; } else { temp=recent->child; while(temp->next) { if(strcmp(temp->next->filename,filename)==0) { recent->child->isopen=1;//设置文件标记为打开 cin>>temp->next->content; recent->child->isopen=0;//设置文件标记为关闭 cout<<"文件写入成功!"<<endl; return 1;} } cout<<"文件不存在!"<<endl; } } int cd() { char topara[PARA_LENGTH]; cin>>topara; if(strcmp(topara,"..")==0) { int i; while(recent->prev) recent=recent->prev; if(recent->parent) { recent=recent->parent; } i=strlen(para); while(para[i]!='/' && i>0) i--; if(i!=0) para[i]='\0'; else para[i+1]='\0'; } else { findpara(topara); } return 1; } int findpara(char *topara) { int i=0; int sign=1; if(strcmp(topara,"/")==0) { recent=root; strcpy(para,"/"); return 1; } temp=recent; strcpy(temppara,para); if(topara[0]=='/') { 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(i<=strlen(topara) && recent) { int j=0; if(topara[i]=='/' && recent->child) { i++; if(recent->isdir) recent=recent->child; else {printf("路径错误\n"); return 0; } strcat(para,"/"); } while(topara[i]!='/' && i<=strlen(topara)) { recentpara[j]=topara[i]; i++;j++; } recentpara[j]='\0'; while((strcmp(recent->filename,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("是文件不是目录。\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 filename[FILENAME_LENGTH]; cin>>filename; temp=new fnode; if(recent->child) { temp=recent->child; while(temp->next && (strcmp(temp->filename,filename)!=0 || temp->isdir!=0)) temp=temp->next; if(strcmp(temp->filename,filename)!=0) { cout<<"不存在该文件!"<<endl; return 0; } } else { cout<<"不存在该文件!"<<endl; return 0; } if(temp->parent==NULL) { temp->prev->next=temp->next; if(temp->next) temp->next->prev=temp->prev; temp->prev=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; i<8; i++) { if( (strcmp(users,usrarray[i].name)==0) && (strcmp(pwd,usrarray[i].pwd)==0)) return true; } return false; } void help(void) { cout<<" 命 令 一 览 "<<endl; cout<<endl; cout<<"create: 建立文件。 "<<endl; cout<<"read: 读取文件。 "<<endl; cout<<"write: 写入文件,支持多线程 "<<endl; cout<<"del : 删除文件。 "<<endl; cout<<"mkdir: 建立目录。 "<<endl; cout<<"cd: 切换目录。 "<<endl; cout<<"logout: 退出登录。 "<<endl; } int run() { cout<<"linux:"<<para<<">"; cin>>command; if(strcmp(command,"mkdir")==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 if(strcmp(command,"logout")==0) return 0; } int main() { int i=0; bool in=false; char users[8],pwd[12]; cout<<"|-----------------------------------------------------------------|"<<endl; cout<<"| 模拟Linux文件系统 |"<<endl; cout<<"| 账号:usr1-usr8 密码:usr1-usr8 |"<<endl; cout<<"| 你只有三次机会来试验账号 |"<<endl; cout<<"|_________________________________________|"<<endl; cout<<endl; while(i<3) { cout<<"Login:"; cin>>users; cout<<"Pass:"; cin>>pwd; if(chklogin(users,pwd)) {in=true;break;} i++; } help(); createroot(); while(in) { if(!run()) break; } }- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 专业课程 设计 模拟 文件系统 样本
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文