当前位置:文档之家› 模拟实现文件系统,操作系统课程设计要点

模拟实现文件系统,操作系统课程设计要点

某某大学课程设计报告课程名称:操作系统课程设计设计题目:模拟实现文件系统系别:计算机系专业:计算机科学与技术组别:学生姓名: 学号:起止日期:指导教师:目录目录 0第一章需求分析 (1)1.1 课程设计题目 (1)1.2 课程任务及要求 (1)1.3课程设计思想: (1)1.4软硬件运行环境及开发工具: (2)第二章概要设计 (3)2.1流程图 (3)2.2用到的原理 (3)第三章详细设计 (4)第四章调试与操作说明 (9)4.1用户登陆界面 (9)4.2创建文件界面 (9)4.3删除文件界面 (10)4.4退出界面 (10)第五章课程设计总结与体会 (10)第六章致谢 (11)第七章参考文献 (11)第一章需求分析1.1 课程设计题目课程设计题目:模拟实现文件系统1.2 课程任务及要求要求:实现文件的建立、打开、删除、关闭、复制、读、写、查询等功能给出实现方案(包括数据结构和模块说明等)画出程序的基本结构框图和流程图分析说明每一部分程序的设计思路实现源代码按期提交完整的程序代码和可执行程序根据要求完成课程设计报告总结1.3课程设计思想:模拟实现文件系统问题是一个经典的关于文件的处理问题,包括:实现文件的建立、打开、删除、关闭、复制、读、写、查询等功能。

设计思想如下:1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。

2.文件物理结构可采用显式链接或其他方法。

3.磁盘空闲空间的管理可选择位示图或其他方法。

如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到FAT中。

4.文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。

目录组织方式可以不使用索引结点的方式,但使用索引结点,则难度系数为1.2。

5.设计一个较实用的用户界面,方便用户使用。

要求提供以下相关文件操作:(1)具有login (用户登录)(2)系统初始化(建文件卷、提供登录模块)(3)文件的创建: create(4)文件的打开:open(5)文件的读:read(6)文件的写:write(7)文件关闭:close(8)删除文件:delete(9)列出文件目录:dir(10)退出:logout1.4软硬件运行环境及开发工具:a)程序设计语言:C++b)计算机及操作系统:PC机,WindowsXPc)开发平台:Microsoft Visual C++ 6.0d)运行平台:PC机,WindowsXP第二章概要设计2.1流程图模拟实现文件系统的主要流程图如下:2.2用到的原理1.本系统初始化了十个用户,每个用户初始化五个文件,最多可拥有十个文件,所以每个用户在此基础上可为自己再创建五个文件,也可以在删除文件后再创建。

2.系统使用create,open,read,write,close,delete,dir和exit来创建文件,打开文件,读文件,写文件,关闭文件,删除文件和显示文件。

3.程序采用二级文件目录(即设置主目录[MFD])和用户文件目录(UED)。

另外,为打开文件设置了运行文件目录(AFD)。

4.为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作第三章详细设计本次课程设计采用的是c++语言编写,部分主要程序代码如下:#include "stdio.h"#include <stdlib.h>#include <conio.h>#include <string.h>#define getpch(type) (type*)malloc(sizeof(type))#define NULL 0#define UserNumber 10#define UserFNumber 10#define UserOFNumber 5struct fname{char fname[1];int flag;}fnameA[26]={'a',0,'b',0,'c',0,'d',0,'e',0,'f',0,'g',0,'h',0,'i',0,'j',0,'k',0,'l',0,'m',0,'n',0,'o',0,'p',0,'q',0,'r',0,'s',0,'t',0,'u',0,'v',0,'w',0,'x',0,'y',0,'z',0};struct afd {char opname[10];/* 打开文件名*/int flag;char opfprotect[3];/* 打开保护码*/int rwpoint;/* 读写指针*/} AFD[UserOFNumber];/* 用户打开的文件*/typedef struct {char fname[10];/* 用户文件名*/int flag;/* 文件存在标志*/int fprotect[3];/* 文件保护码r\w\t */int flength;} ufd,UF[UserFNumber];/* 用户文件*/struct mdf {char uname[10];/* 用户名*/UF Udir;/* 用户文件目录*/} UFD[UserNumber];/* 用户*/void intFSystem(){int i,j,k,l;strcpy(UFD[0].uname,"a");strcpy(UFD[1].uname,"b");strcpy(UFD[2].uname,"c");strcpy(UFD[3].uname,"d");strcpy(UFD[4].uname,"e");strcpy(UFD[5].uname,"f");strcpy(UFD[6].uname,"g");strcpy(UFD[7].uname,"h");strcpy(UFD[8].uname,"i");strcpy(UFD[9].uname,"j");for(i=0;i<10;i++) {for(k=0;k<5;k++){do j=rand()%26; while(fnameA[j].flag);strcpy(UFD[i].Udir[k].fname,fnameA[j].fname);fnameA[j].flag=1;UFD[i].Udir[k].flength=rand()%2048+1;UFD[i].Udir[k].flag=1;UFD[i].Udir[k].fprotect[0]=rand()%2;UFD[i].Udir[k].fprotect[1]=rand()%2;UFD[i].Udir[k].fprotect[2]=rand()%2;}for(j=0;j<26;j++) fnameA[j].flag=0;}for(l=0;l<5;l++){strcpy(AFD[i].opname,"");AFD[l].flag=0;AFD[l].opfprotect[0]=0;AFD[l].opfprotect[1]=0;AFD[l].opfprotect[2]=0;AFD[l].rwpoint=0;}}void Create(int i){ int k;for(k=0;k<10;k++) {if(!UFD[i].Udir[k].flag) break; }if(k>=10) {printf("一个用户不能拥有超过10个文件\n\n");return;}printf("请输入你想创建的文件名:");scanf("%s",UFD[i].Udir[k].fname);printf("请输入文件长度:");scanf("%d",&UFD[i].Udir[k].flength);printf("只读?(1 yes,0 no):");scanf("%d",&UFD[i].Udir[k].fprotect[0]);printf("可写?(1 yes,0 no):");scanf("%d",&UFD[i].Udir[k].fprotect[1]);printf("可执行?(1 yes,0 no):");scanf("%d",&UFD[i].Udir[k].fprotect[2]);UFD[i].Udir[k].flag=1;return;}void Delete(int i){char file[10]; int k;printf("请输入你想删除的文件名:");scanf("%s",file);for(k=0;k<10;k++) {if(UFD[i].Udir[k].flag&&!strcmp(UFD[i].Udir[k].fname,file)){UFD[i].Udir[k].flag=0;break;}else printf("出错\n");}return;}void main(){ int i,n=0;char m[10];char login[10];intFSystem();printf(" 欢迎使用\n");printf("1.本系统模拟文件管理2.系统已初始化10个用户,\n用户名分别是a~j,每个用户已分配五个文件\n");printf("**本系统的命令包括如下:\n");printf("**创建文件(create)\n");printf("**删除文件(delete)\n");printf("**打开文件(open)\n");printf("**关闭文件(close)\n");printf("**读取文件(read)\n");printf("**编写文件(write)\n");printf("**显示文件目录(printufd)\n");printf("**显示打开文件目录(dir)\n");printf("**退出(exit)\n");lgin: printf("请输入用户名(a~j):");scanf("%s",login);if(!strcmp(login,"exit")) return;for(i=0;i<10;i++){ if(!strcmp(UFD[i].uname,login)) break;}if(i>=10){ printf("该用户名不存在!"); goto lgin; }printUFD(i);for(;n!=1;){printf("请输入命令:");scanf("%s",&m);if(strcmp(m,"create")==0) Create(i);else if(strcmp(m,"delete")==0) Delete(i);else if(strcmp(m,"open")==0) Open(i);else if(strcmp(m,"close")==0) Close;else if(strcmp(m,"read")==0) Read();else if(strcmp(m,"write")==0) Write();else if(strcmp(m,"printufd")==0) printUFD(i);else if(strcmp(m,"dir")==0) printAFD();else if(strcmp(m,"exit")==0) n=1;else printf("出错\n");}printf("Saving....\n");printUFD(i);getch();return;}第四章调试与操作说明4.1用户登陆界面4.2创建文件界面4.3删除文件界面4.4退出界面第五章课程设计总结与体会在设计过程中,查询了不少相关资料,不断的发现问题、提出问题、解决问题。

相关主题