操作系统课程设计样板格式.doc_第1页
操作系统课程设计样板格式.doc_第2页
操作系统课程设计样板格式.doc_第3页
操作系统课程设计样板格式.doc_第4页
操作系统课程设计样板格式.doc_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

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

文档简介

操作系统课程设计报告题目:支持多用户的文件系统的设计与实现专业年级 计算机科学与技术2010级 学 号 姓 名 指导教师 宋浩远 电 气 信 息 工 程 系 年 月中 国 马 鞍 山29河海大学文天学院电气信息工程系综合性、设计性实验成绩单开设时间:2012-2013年第一学期专业班级学号姓名实 验 题 目自 我 评 价评价指标:l 题目内容独立完成情况 优 良 中 可 差 l 对算法原理的理解程度 优 良 中 可 差 l 程序设计水平 优 良 中 可 差 l 程序运行情况 优 良 中 可 差 l 实验报告结构清晰 优 良 中 可 差 l 实验总结和分析详尽 优 良 中 可 差 成绩学生签名教 师 评 语评价指标:l 题目内容独立完成情况 优 良 中 可 差 l 对算法原理的理解程度 优 良 中 可 差 l 程序设计水平 优 良 中 可 差 l 程序运行情况 优 良 中 可 差 l 实验报告结构清晰 优 良 中 可 差 l 实验总结和分析详尽 优 良 中 可 差 成绩教师签名目录一、课程设计题目1二、课程设计目标和要求11加深理解、进而掌握操作系统的设计原理12理解并掌握操作系统的设计与实现技术13锻炼理解问题、分析问题、解决问题的能力14锻炼培养团队合作精神、组织协调能15进一步锻炼编程实践能力16要求课程设计实验人数为1人1三、需求分析1四、开发环境1五、总体设计21数据结构设计22模块设计23用户接口设计2六、详细设计31接口描述32功能描述33所用数据结构说明3七、程序清单4八、测试报告171测试环境172测试的功能173针对每个功能的测试情况,包括:测试用例、预期与最终结果及其分析18九、测试总结281设计过程中遇到或存在的主要问题及解决方案282改进建议293体会与收获29十、参考文献29一、 课程设计题目支持多用户的文件管理系统的设计与实现二、 课程设计目标和要求1 加深理解、进而掌握操作系统的设计原理2 理解并掌握操作系统的设计与实现技术3 锻炼理解问题、分析问题、解决问题的能力4 锻炼培养团队合作精神、组织协调能5 进一步锻炼编程实践能力6 要求课程设计实验人数为1人三、 需求分析要求完成以下功能:用户管理:用户登录、注销目录管理:创建、删除、改变、重命名文件操作:创建、删除、打开、关闭、读、写、重命名权限管理:设置/修改用户对文件的存取权限磁盘管理:磁盘空间的分配、回收,空闲空间的管理接口:命令、系统调用用图形化方式展示多进程并发执行过程四、 开发环境windows xp&Microsoft Virtual C+ 6.0五、 总体设计1 数据结构设计活动文件表结构struct TableCString text;CString filename;CString pathname;CString type;int size;int num;int address;int right;文件结构struct sysfileCString text;CString pathname;CString filename;CString type;int size;int right;int address;2 模块设计目录系统模块:实现目录的创建、删除、重命名,改变工作目录。文件系统模块:实现建立文件,打开文件,关闭文件,读文件,写文件,撤销文件操作。磁盘管理模块:文件的存储设备划分成若干个大小相等的物理块,并以块为单位进行存储空间的分配和信息交换。3 用户接口设计单用户控制文件管理系统。六、 详细设计1 接口描述文件系统模块与目录系统模块之间以字符串传送文件名,建立(删除)文件在目录中相应的进行建立(删除);文件系统模块与目录系统模块之间以整数类型变量传输文件所占有的文件块以及文件的起始块号。2 功能描述目录系统模块:实现目录的创建、删除、重命名,改变工作目录。文件系统模块:实现建立文件,打开文件,关闭文件,读文件,写文件,撤销文件操作。磁盘管理模块:文件的存储设备划分成若干个大小相等的物理块,并以块为单位进行存储空间的分配和信息交换。3 所用数据结构说明活动文件表结构struct TableCString text;/活动文件表中文件内容CString filename;/活动文件表中文件的文件名CString pathname;/活动文件表中文件的路径名CString type;/活动文件表中文件类型int size;/活动文件表中文件大小int num; /活动文件表中共享计数器int address; /活动文件表中文件的存储地址int right; /活动文件表中文件的访问权利;文件结构struct sysfileCString text;/文件内容CString pathname; /文件的路径名CString filename; /文件的文件名CString type; /文件类型int size; /文件大小int right; /文件的访问权利int address; /文件的存储地址;七、 程序清单void CMyDlg:OnSelchangeList1() / TODO: Add your control notification handler code hereint nIndex=m_list.GetCurSel();if(nIndex!=LB_ERR)pDir=(Dir *)m_list.GetItemDataPtr(nIndex);void CMyDlg:OnButton1() / TODO: Add your control notification handler code hereUpdateData();if(m_edit1.IsEmpty()MessageBox(新建目录名不能为空!);return;m_edit1.TrimLeft();m_edit1.TrimRight();if(!pDir)MessageBox(请选取当前目录!);return;m_edit1=pDir-pathname+m_edit1+/;if(m_list.FindString(-1,m_edit1)!=LB_ERR)MessageBox(已有同名目录存在!);return;pDir-num+;Dir dir;int nIndex=m_list.AddString(m_edit1);dir.pathname=m_edit1;dir.num=0;dir.size=1;m_list.SetItemDataPtr(nIndex,new Dir(dir);void CMyDlg:OnButton2() / TODO: Add your control notification handler code hereUpdateData();if(m_edit1.IsEmpty()MessageBox(目录重命名不能为空!);return;m_edit1.TrimLeft();m_edit1.TrimRight(); CString s=pDir-pathname,s_rename,s1,temp; /s_rename=root/b/;s1=s.Left(s.ReverseFind(/);s_rename=s1.Left(s1.ReverseFind(/)+1)+m_edit1+/;int nIndex=m_list.FindString(-1,s);if(m_list.FindString(-1,s_rename)!=LB_ERR)MessageBox(已有同名目录存在!);return;while(nIndex!=LB_ERR)/先删除原有项temp=s_rename+pDir-pathname.Right(pDir-pathname.GetLength()-s.GetLength();delete (Dir *) m_list.GetItemDataPtr(nIndex);m_list.DeleteString(nIndex);/建立新项;Dir dir; nIndex=m_list.AddString(temp); dir.pathname=temp; dir.num=0; dir.size=1; m_list.SetItemDataPtr(nIndex,new Dir(dir);nIndex=m_list.FindString(-1,s);pDir=(Dir *)m_list.GetItemDataPtr(nIndex);void CMyDlg:OnButton3() / TODO: Add your control notification handler code hereCString s=pDir-pathname;int nIndex=m_list.FindString(-1,s); if(nIndex=0)MessageBox(不能删除根目录!);return;/删除选中目录及其子目录while(nIndex!=LB_ERR) delete (Dir *) m_list.GetItemDataPtr(nIndex);m_list.DeleteString(nIndex);nIndex=m_list.FindString(-1,s);void CMyDlg:OnButton4() / TODO: Add your control notification handler code hereCCreate create;/=new CCreate; create.DoModal();if(create.m_filename.IsEmpty()MessageBox(新建文件名不能为空!);return;create.m_filename.TrimLeft();create.m_filename.TrimRight();if(create.m_filetype.IsEmpty()MessageBox(新建文件类型不能为空!);return;create.m_filetype.TrimLeft();create.m_filetype.TrimRight();if(pDir=NULL)MessageBox(请选取当前目录!);return; CString temp=pDir-pathname+create.m_filename;int k=0,m=0;while(knum+; int nIndex=m_list.AddString(file.pathname+.+file.type);m_list.SetItemDataPtr(nIndex,new File(file);void CMyDlg:OnOpen() / TODO: Add your control notification handler code hereCopenfile open;open.DoModal();int m=0,n=0,k=0,t=0,p=0,q=0;for(n=0;n100&p=0;n+)if(tablen.filename=open.m_openfile)tablen.num+;m_opensize=tablek.size;m_opentype=tablek.type;m_num=tablen.num;p+;UpdateData(FALSE);if(n=100)while(k100&m=0)if(tablek.num=0)tablek.filename=open.m_openfile;for(t=0;t100;t+)if(ffilet.filename=open.m_openfile)tablek.pathname=ffilet.pathname;tablek.size=ffilet.size;tablek.type=ffilet.type;tablek.address=ffilet.address;m_opensize=tablek.size;m_opentype=tablek.type;m_num=1;q=1;UpdateData(FALSE);if(q=0)MessageBox(该文件不存在!);m_opensize=0;m_opentype= ;m_num=0;UpdateData(FALSE);tablek.num=1;m=1;k=k+1;void CMyDlg:OnRead() / TODO: Add your control notification handler code hereCReadFile read;read.DoModal();int n,m=0;for(n=0;n100;n+)if(tablen.filename=read.m_readfile)m_filename=tablen.filename;m_type=tablen.type;m_filesize=tablen.size;m_text=tablen.text;m_address=tablen.address;m=1;/还应该读取文件地址以及ffile中的text信息if(m=0)m_filename= ;m_type= ;m_filesize=0;m_text= ;m_address=0;MessageBox(该文件不存在!);UpdateData(FALSE);void CMyDlg:OnClose() / TODO: Add your control notification handler code hereCCloseFile close;close.DoModal();int m=0,n=0,k=0;for(n=0;npathname;int nIndex=m_list.FindString(-1,s);if(nIndex=0)MessageBox(不能删除根目录!);return;/删除选中文件 delete (Dir *) m_list.GetItemDataPtr(nIndex);m_list.DeleteString(nIndex);int m=0;for(m=0;m100;m+)if(ffilem.filename=Delete.m_filename)relloc_block(&freelist,ffilem.address,ffilem.size);ffilem.pathname=wb; ffilem.filename=wb; ffilem.type=wb; ffilem.size=0; ffilem.address=0; ffilem.right=0;if(tablem.filename=Delete.m_filename)tablem.text=wb; tablem.filename=wb; tablem.type=wb; tablem.size=0; tablem.num=0; tablem.address=0; tablem.right=0;void CMyDlg:OnWrite() / TODO: Add your control notification handler code hereCWriteFile write;write.DoModal();/此部分首先收回以前分配的空间,再从磁盘空间中寻找空闲块int cycle=0,m=0,n=0;int p=0,q=0;CString text; while(cycle30) MessageBox(操作失败!);/tablecycle.address=p;/tablecycle.size=q;/tablecycle.text=text;else if(write.m_file.GetLength()/10+1)tablecycle.size)relloc_block(&freelist,tablecycle.address,tablecycle.size);/p=tablecycle.address;/q=tablecycle.size;/text=tablecycle.text;tablecycle.address=malloc_block(&freelist,write.m_file.GetLength()/10+1,1);tablecycle.size=write.m_file.GetLength()/10+1;tablecycle.text=write.m_file;elsetablecycle.text=write.m_file;m=1;cycle+;cycle=cycle-1;while(n100)if(ffilen.filename=write.m_filename)ffilen.address=tablecycle.address;ffilen.size=tablecycle.size;ffilen.text=write.m_file;/sMessageBox(aaa);n+;void CMyDlg:OnButton10() / TODO: Add your control notification handler code hereint m;for(m=0;mstart_num=0; newptr-total=BLOCK_NUM-1; newptr-next=NULL; elseMessageBox(Malloc error);return newptr;int CMyDlg:malloc_block(FREE_BLOCKPTR *headptr, int sum,int kind)if(*headptr=NULL) MessageBox(磁盘已分配完。); return -1;else int sbn; int i; FREE_BLOCKPTR cur,pre,temp; if(* headptr)-total=sum) sbn=(*headptr)-start_num; temp=* headptr; * headptr=(*headptr)-next; free(temp); /MessageBox(分配头结点,正好n); for(i=sbn;itotalsum) sbn=(*headptr)-start_num; (*headptr)-start_num =(*headptr)-start_num+sum; (*headptr)-total=(*headptr)-total-sum; /MessageBox(分配头结点,大于n); for(i=sbn;inext; while(cur!=NULL&cur-totalnext; if(cur=NULL) MessageBox(磁盘不够,无法分配n); return -1; else if(cur-totalsum) sbn=cur-start_num; cur-start_num=cur-start_num+sum; cur-total=cur-total-sum; /MessageBox(分配结点,大于n); for(i=sbn;istart_num; temp=cur; pre-next=cur-next; free(temp); /MessageBox(分配结点,正好n); for(i=sbn;itotal=sum;newptr-start_num=start;newptr-next=*headptr;*headptr=newptr;else FREE_BLOCKPTR cur,pre,temp; if(start+sum)=(*headptr)-start_num) (*headptr)-start_num=start; (*headptr)-total=(*headptr)-total+sum; else if(start+sum)start_num)newptr=(FREE_BLOCKPTR)malloc(sizeof(FREE_BLOCK);if(newptr!=NULL) newptr-total=sum; newptr-start_num=start; newptr-next=*headptr; *headptr=newptr;else MessageBox(Melloc Error);else pre=*headptr; temp=pre; cur=pre-next; while(cur!=NULL&(pre-start_num+pre-total)=start&(start+sum)start_num) temp=pre;/ pre=cur;/ cur=cur-next;/ if(temp-start_num+temp-total)=start) temp-total=temp-total +sum; if(start+sum=pre-start_num) temp-total=pre-total+temp-total; temp-next=pre-next; free(pre); else if(start+sum=pre-start_num) pre-start_num=start; pre-total=sum+pre-total; elseif(start+sumstart_num) newptr=(FREE_BLOCKPTR)malloc(sizeof(FREE_BLOCK); newptr-total=sum; newptr-start_num=start; newptr-next=pre; temp-next=newptr;elseif(start=pre-start_num+pre-total) pre-total=pre-total+sum; else if(startpre-start_num+pre-total) newptr=(FREE_BLOCKPTR)malloc(sizeof(FREE_BLOCK); newptr-total=sum; newptr-start_num=start; newptr-next=NULL; pre-next=newptr; for(int i=start;istart+sum;i+)flagi=0;/ 0表示空,1表示文件,2表示目录,3表示用户void CMyDlg:OnButton11() / TODO: Add your control notification handler code hereCGraph ShowDlg;ShowDlg.DoModal();八、 测试报告1 测试环境Microsoft Virtual C+ 6.02 测试的功能目录的创建、删除、重命名,改变工作目录。建立文件,打开文件,关闭文件,读文件,写文件,撤销文件操作。文件的存储设备划分成若干个大小相等的物理块,并以块为单位进行存储空间的分配和信息交换。测试各个模块的互联,参数的正常传输。3 针对每个功能的测试情况,包括:测试用例、预期与最终结果及其分析(1).打开文件系统面板(2).在根目录下添加a目录,在输入框中输入a并点击“创建目录”按钮(3).在a目录下创建b目录,点击“root/a/”然后按照(2)步骤创建b目录即可(4).这时删除a目录,结果应该为a目录下的所有目录将同时被删除经过测试后发现符合预期结果。此时单独对目录模块的测试已经完成,完成了其应有的功能。(5).创建a目录,同时点击文件系统中“初始化”按钮将文件系统初始化。在a目录下点击“创建文件”按钮将弹出如下对话框应该注意的是“预分配大小”的计算方法是m_text.GetLength()/10+1即取字符串的长度除以10的整数部分加1,此处于分配的大小为2,图中的“aaaaaaaaaaaaaaaa”并不是指文件内容。按以上的填写内容,点击“完成”按钮显示以下内容(6).由于预分配大小为2,故将会占用2个磁盘块,点击“显示磁盘空间”按钮经过测试后发现符合预期结果。(7).然后进行打开文件操作,点击“打开文件”按钮按以上内容填写后,点击“确定”按钮,将返回主窗口后打开文件栏会出现因为打开文件后发现其不在活动文件表中,将其共享计数器进行加1操作。若再打开文件“a.txt”则共享计数器会再加1。(8).点击“读文件”按钮,将会出现输入后按“完成”按钮,主面板上出现此处的文件内容是被初始化后的内容统一为“wb”。在中也可以清楚地看出来文件的各个信息与显示信息符合。(9).点击“写文件”按钮,弹出对话框按图中填写完后点击“完成”按钮。然后再读取文件a.txt会发现文件大小将变为3 (m_text.GetLength()/10+1),文件内容也将改变为“operation system wu bo”磁盘空间也将发生变化,前3个磁盘块将被占用(10).点击目录列表中的文件a.txt条目然后点击“删除文件”按钮输入后点击“完成”按钮,目录中的a.txt项目将被删除。若此时再进行“打开文件”a.txt操作将会显示该文件不存在同时打开文件项都将被还原若此时再进行“读文件”a.txt操作也将显示该文件不存在同时读文件项都将被还原显示磁盘空间(11).对系统进行总体功能测试:同时创建2个文件a.txt和b.doc,给a.

温馨提示

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

评论

0/150

提交评论