版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、青岛理工大学操作系统课程设计报告院(系): 计算机工程学院 专业: 计算机科学与技术 班级: 计算122 学生姓名: 马 鹏 学号: 201207059 欧阳涛 201207060 题目: 模拟二级文件管理系统 起迄日期: 2015.07.13-2015.07.24 设计地点: 现代教育中心B303、B305 指 导 教 师: 熊晓芸 20142015年度 第 2 学期完成日期: 2015 年 7 月 24 日一、 课程设计目的通过研究Linux的文件系统结构,模拟设计一个简单的二级文件系统,第一级为主目录文件,第二级为用户文件。进行操作系统课程设计主要是在学习操作系统课程的基础上,在完成操作
2、系统各部分实验的基础上,对操作系统的整体进行一个模拟,通过实践加深对各个部分的管理功能的认识,还能进一步分析各个部分之间的联系,最后达到对完整系统的理解。同时,可以提高运用操作系统知识解决实际问题的能力;锻炼实际的编程能力、创新能力及团队组织、协作开发软件的能力;还能提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力。二、 课程设计内容及小组成员分工1.设计内容:通过研究Linux的文件系统结构,模拟设计一个简单的二级文件系统1) 能够实现下列命令:l Login 用户登录l Dir 列文件目录l Create 创建文件l Delete 删除文件l Open 打开文件l Close 关
3、闭文件l Read 读文件l Write 写文件l Bit 显示外部存储空间的位示图(按16*16的形式显示)2) 系统能检查键入命令的正确性,出错时应能显示出错原因3) 列目录时要列出文件目录、文件名和文件长度,以及系统总容量,占用容量、空闲容量(容量以字节为单位)4) 不允许对打开的文件执行重复打开操作或执行删除操作5) 外部存储空间的大小为256个Block,每个Block的大小为512字节,盘块号从1开始编号6) 文件系统对外部存储空间采用连续分配的方式控制块的大小为32字节,其中文件名字占8个字节,参照MS-DOS设计文件控制块的数据结构;FAT由文件名、起始盘块号,长度、最后一块字
4、节数四部分组成,占12个字节,磁盘的目录最大能存放256个目录项。目录固定放在外部存储器的1-6号盘块(12*256/512=6)。2.员工分工:学号:201207059 做总体设计以及函数接口学号:201207060 做各个功能函数三、 系统分析与设计1、 系统分析本次设计的“模拟二级文件管理系统”利用的是二级目录管理方式,分别由用户文件目录UFD(User File Directory)、主文件目录MFD(Master File Directory)构成。其中UFD由用户的所有文件块组成,在MFD中每个用户目录文件占用一个目录项,其中目录项中包含用户名、用户密码以及指向用户文件目录文件数组
5、的指针。用户文件目录项的基本信息包括基本信息、地址信息、访问控制信息、使用信息。基本信息:文件名、文件属性(只读、只写、只执行)地址信息:文件长度(文件可容纳数据的最大量)、存放位置(在虚拟磁盘中的起始位置)使用信息:文件使用状态(打开、关闭)文件系统中文件管理的基本操作:创建文件:创建一个新文件时,系统首先要为新文件申请必要的外存空间,并在用户文件目录UFD中为文件分配一个目录项。目录项中应记录新建文件的文件名、文件总容量、当前已经使用的容量、文件属性、文件在磁盘中的起始位置。删除文件:当已不在需要某文件时,可将它从文件系统中删除。在删除时,首先在UFD的文件链表中找到与该文件对应的文件结点
6、,然后确认文件是否处于关闭状态,若以上条件都满足,则系统就可以把结点从文件链表中删除,然后回收改结点对应的磁盘空间。打开文件:只有处于打开状态的文件才能被读取、写入、重复关闭且不能被删除。关闭文件:只有处于关闭状态的文件才能被删除,且不能被重复关闭。列文件目录:普通用户只能获取自己建立的文件或其他用户共享的文件的列表;超级用户(管理员)可以查看所用户建立的文件列表。写文件:用户可以把相关数据写入到用户自定义的文件中(磁盘上);待写文件必须处于打开状态,且不能是其他用户共享的文件。读文件:用户可以把文件中存储的数据读取出来;待读文件必须处于打开状态;用户可以读取自己建立的文件。文件系统中用户管理
7、的基本操作:用户登录:用户可以以普通用户身份登录,也可以作为管理员身份登录;若登录时输入的密码有误,最大重试次数为3次,若连续错误三次,管理系统会自动退出。2、 系统设计:3、 2.1模块设计main()disp()(功能函数总接口)disp(主程序对话框过程)Login()(用户注销)Create()(创建文件)Delete()(删除文件)Open()(打开文件)FileClose()(关闭文件)Write()(写文件)Read()(读文件)Dir_disp()(列文件目录)根据用户在主程序界面点击的按钮触发不同的函数执行。2.2数据结构说明struct Back_Diskint s;int
8、 e;int length;B_Disk_SysM,B_Disk_UserM;/定义回收磁盘空间结构体int Bp_s;/存放目录指针int Bp_u;/存放文件指针typedef struct FCBchar File_Name8;char File_Name_Extern16;char Property16;char Permission12;char time25;int Start_Block;int Block_Position;int Block_Num;FCB;/文件控制快/*typedef struct FATchar Dir_Name8;int Start_Block;int
9、 length;FAT;*/typedef struct FILESFCB File_FCB;/文件所对应的FCB char *Content;/文件内容 char File_Owner8;char Folder_NameN;int Open_Flag;int Length;FILES;/文件typedef struct Folderchar Folder_Name8;char Folder_Owner8;char Folder_ParentN;FCB Folder_FCB;Folder;/文件夹即目录文件struct USERSchar name8;char passwd6;int flag
10、;User3;/用户typedef struct OFDTFILES FD_Doc;int Start_Block;int Block_Position;int Block_Num;OFDT;/打开文件表2.3 算法流程图(1) 程序整体结构框图开始初始化User中有该用户?登录/注册?登录分析命令Y显示:无此用户N创建文件打开文件关闭文件读文件写文件列文件目录删除文件注销用户退出系统结束提示错误指令成功执行?YN框图1:程序整体框架(2) 建立文件流程框图框图2:建立文件流程图开始查找该用户的MFDUFD中有该文件?在UFD中的文件分配表中登记新文件项在文件项中记录长度、文件属性、文件名、文
11、件起始位置、文件打开标记找一块磁盘空闲块,将其标记为已使用显示:“建立”成功结束显示:同名文件不能建立修改全局磁盘数据结构:1.修改磁盘未用空间的起始地址2.修改磁盘剩余的空间大小NY(3) 打开文件流程框图框图3:打开文件流程图开始在用户的UDF中查找文件文件为“打开”状态?错误提示:文件已打开设置文件打开标记为打开文件描述符fd结束用户文件存在?错误提示:文件不存在Y(4)写文件流程框图上开始从用户UFD中查找待写入的文件文件已打开?根据文件目录表中记录的文件起始地址,把数据写入到磁盘中。文件存在?结束错误提示:文件未打开错误提示:文件不存在NYN文件长度够大?错误提示:文件长度不够NY框
12、图4:写文件流程框图四、系统测试与调试分析1. 系统测试测试说明测试名称模拟二级文件管理系统程序测试目的验证系统对于系统登录的处理流程测试技术单元测试测试方法黑盒测试法测试用例测试内容用户登录功能用户名测试步骤输入正确的用户名与密码输入正确用户名与错误密码输入错误用户名与密码测试数据root, 正确密码new,错误密码错误用户名、密码预期结果正常进入系统显示密码错误,并提示重试显示用户不存在测试结果与预期相符与预期相符与预期相符测试说明测试名称模拟二级文件管理系统程序测试目的验证系统对于文件管理的处理流程测试技术单元测试测试方法黑盒测试法测试用例测试内容文件管理功能创建文件测试步骤输入文件名,
13、正常文件大小输入文件名,超过磁盘容量大小的文件长度测试数据FILE, 1000FILE, 9999999预期结果提示创建成功提示错误:试图创建一个超大文件测试结果与预期相符与预期相符测试说明测试名称模拟二级文件管理系统程序测试目的验证系统对于文件管理的处理流程测试技术单元测试测试方法黑盒测试法测试用例测试内容文件管理功能打开文件测试步骤打开不存在的文件打开存在的且处于关闭状态的文件打开已经处于打开状态的文件测试数据mmmm.logmm.log预期结果提示未找到文件提示打开文件成功提示文件已打开测试结果与预期相符与预期相符与预期相符测试说明测试名称模拟二级文件管理系统程序测试目的验证系统对于文件
14、管理的处理流程测试技术单元测试测试方法黑盒测试法测试用例测试内容文件管理功能关闭文件测试步骤关闭不存在的文件关闭存在的且处于打开状态的文件关闭已经处于关闭状态的文件测试数据mmmm.logmm.log预期结果提示未找到文件提示文件关闭成功提示文件已关闭测试结果与预期相符与预期相符与预期相符测试说明测试名称模拟二级文件管理系统程序测试目的验证系统对于文件管理的处理流程测试技术单元测试测试方法黑盒测试法测试用例测试内容文件管理功能删除文件测试步骤删除自己建立的处于关闭状态的文件删除自己建立的处于打开状态的文件删除别人文件或不存在的文件测试数据mm.logFile.cFileother.log预期结
15、果提示删除成功提示该文件已被进程打开提示文件不存在或试图权限不够测试结果与预期相符与预期相符与预期相符测试说明测试名称模拟二级文件管理系统程序测试目的验证系统对于文件管理的处理流程测试技术单元测试测试方法黑盒测试法测试用例测试内容文件管理功能写文件测试步骤向不存在的文件里写字符串向已关闭的文件里写字符串向已打开的文件里写超出文件最大长度的字符串向已打开的文件里写小于文件最大长度的字符串测试数据mmnn.txtmm.log 99999999mm.log 1000预期结果提示文件不存在提示文件未打开,写入失败提示超出文件最大长度提示写入成功测试结果与预期相符与预期相符与预期相符与预期相符2、调试分
16、析:调试过程中遇到很多棘手的问题,比如文件创建成功后怎么样让他与磁盘存储联系起来,怎么样分配磁盘使得存储器能够很好的被利用等等问题,就说说以上俩比较典型的问题我是怎么处理的吧,在创建文件后我是采用目录一级文件与普通文件分开存储,高存储区存储目录文件,低存储区寸普通文件,在磁盘分配有回收问题上我采用每次在分配磁盘之前先将空闲区域有大到小排成队列每次分配从第一块区域开始(如果分配的文件大小小于第一块存储区快的大小时)这样分配磁盘完后减少了产生碎片的可能性并且使得剩余空闲区域不至于太小。四、 用户手册使用平台:windows xp以上,linux(内核2.4以上) 用法:同linux文件系统(ubu
17、ntu界面)1 登录界面:2. cd命令和dir命令Create命令查看内存Help命令Open,read,write,close命令Delete命令 等等,其他命令都可以通过帮助查看,在这里就不一一演示了六、程序清单头文件:1. file.h#define CMD_MAX 20/定义最大命令数#define FOLD_MAX 128/定义最大目录数#define FILE_MAX 512 /定义最大文件数#define N 8*4/定义命令提示符大小#define FD_MAX 1000/定义文件描述符大小#define M 1000/定义回收磁盘空间个数int DISK256512;/磁盘
18、数组int map1616;/位氏图数组/int Disk_Count_Dir;/int Disk_Count_Doc;/int x_Dir;/int x_Doc;/int y_Dir;/int y_Doc;int Flag;/0:表示为目录,1:表示为文件int Dir_Count;/目录指针int Docu_Count;/文件指针int Disk_used;/已经使用的磁盘容量(字节)char CMDCMD_MAX10;/定义命令数组char *token4;/命令格式数组int x_token;/指向数组二维数组*token的指针int p_user;/用户指针char position
19、N;/命令提示符struct Back_Diskint s;int e;int length;B_Disk_SysM,B_Disk_UserM;/定义回收磁盘空间结构体int Bp_s;/存放目录指针int Bp_u;/存放文件指针typedef struct FCBchar File_Name8;char File_Name_Extern16;char Property16;char Permission12;char time25;int Start_Block;int Block_Position;int Block_Num;FCB;/文件控制快/*typedef struct FATc
20、har Dir_Name8;int Start_Block;int length;FAT;*/typedef struct FILESFCB File_FCB;/文件所对应的FCB char *Content;/文件内容 char File_Owner8;char Folder_NameN;int Open_Flag;int Length;FILES;/文件typedef struct Folderchar Folder_Name8;char Folder_Owner8;char Folder_ParentN;FCB Folder_FCB;Folder;/文件夹即目录文件struct USER
21、Schar name8;char passwd6;int flag;User3;/用户typedef struct OFDTFILES FD_Doc;int Start_Block;int Block_Position;int Block_Num;OFDT;/打开文件表OFDT FDFD_MAX;int FD_Count;/打开文件表指针Folder DirFOLD_MAX;FILES DocumentFILE_MAX;2. fun.h#ifndef FUN#define FUNvoid disp();/现实界面void init();/初始化int Login();/登陆void Dir_D
22、isp();/文件显示void Create(char *);/创建文件void Delete(char *);/删除文件void Open(char *);/打开文件void Close(char *);/关闭文件void Read(char *);/读文件void Write(char *);/写文件void Bit();/显示磁盘存储void Tips();/提示void Print();/输出提示void Deal_CH(char *); /处理输入的命令字符串int set_disp_mode(int ,int);/控制屏幕回显功能,当第二个int为1时打开回显当第二个int为0时关
23、闭回显int Find_Absolute(char *);/绝对路径查找判断int Find_Relative(char *);/相对路径查找判断void To_Lower(char *);/大写字母转换为小写字母int find_name(char *name, int *flag);/匹配文件名,当name匹配为dir是flag置1否则置-1int find(char *p, char *m);/字符串p,和m的匹配void del_ch(char *str);/将str最后一个字符置为0void Recycling_Disk_User();/回收磁盘(存放目录)void Recyclin
24、g_Disk_Sys();/回收磁盘(存放文件)int Apply_Disk(int *, int *, int *, int);/申请分配磁盘void Free_Disk(int , int , int);/释放磁盘void Cha_Mod(char *str, char *ch);/修改权限#endif源程序:a) main.cint main()disp();return 0;b) fun.c(由于篇幅过长这里只列出部分代码)#include<stdio.h>#include<fun.h>#include<file.h>#include<stri
25、ng.h>#include<time.h>#include<termios.h>#include<unistd.h> #include<errno.h> #include<stdlib.h>#define ECHOFLAGS (ECHO | ECHOE | ECHOK | ECHONL)void disp()int i,j;int k;int flag;int a;char *cmd;cmd = (char *)malloc(sizeof(char);init();while(Login()flag = 0;printf(&qu
26、ot;nsuccessful login!nn");Tips();getchar();while(1)if(flag)break;Print();memset(token,'0',sizeof(token);k = -1;for(i = 0; cmdi = getchar(); i+)if(cmdi = 'n')cmdi = '0'break;if(!strcmp(cmd,"")continue;Deal_CH(cmd);To_Lower(token1);for(j = 0; j < CMD_MAX; j+)i
27、f(!strcmp(token1,CMDj)k = j; break;switch(k)case 0:/printf("%s",token1);if(x_token = 1)Userp_user.flag = 0;p_user = -1;flag = 1;elseprintf("%s格式输入命令有误!(help 命令可以查看命令格式)n",token1);break;case 1:if(x_token = 1 | x_token > 2)printf("%s格式输入命令有误!(help 命令可以查看命令格式)n",token1)
28、;break;if(!strcmp(token2,".")if(!strcmp(position,"/")break;elsefor(i = 0; i < strlen(position); i+)if(positioni='/')a = i;if(a = 0)for(i = a+1; i< strlen(position); i+)positioni = '0'elsefor(i = a; i< strlen(position); i+)positioni = '0'break;if(F
29、ind_Absolute(token2)strcpy(position,token2);else if(Find_Relative(token2)if(!strcmp(position,"/")sprintf(position,"%s%s",position,token2);elsesprintf(position,"%s/%s",position,token2);elseprintf("路径名出错或当前路径无%s文件n",token2);/getchar();break;case 2:if(x_token = 1
30、 | x_token = 2)Dir_Disp();elseprintf("%s格式输入命令有误!(help 命令可以查看命令格式)n",token1);/getchar();break;case 3:if(x_token = 3 | x_token = 2)Create(token2);elseprintf("%s格式输入命令有误!(help 命令可以查看命令格式)n",token1);/getchar();break;case 4:if(x_token = 2)Delete(token2);elseprintf("%s格式输入命令有误!(h
31、elp 命令可以查看命令格式)n",token1);/getchar();break;case 5:if(x_token = 2)Open(token2);elseprintf("%s格式输入命令有误!(help 命令可以查看命令格式)n",token1);/getchar();break;case 6:if(x_token = 2)Close(token2);elseprintf("%s格式输入命令有误!(help 命令可以查看命令格式)n",token1);/getchar();break;case 7:if(x_token = 2)Rea
32、d(token2);elseprintf("%s格式输入命令有误!(help 命令可以查看命令格式)n",token1);/getchar();break;case 8:if(x_token = 2)Write(token2);elseprintf("%s格式输入命令有误!(help 命令可以查看命令格式)n",token1);/getchar();break;case 9:Bit();/getchar();break;case 10:system("clear");/getchar();break;case 11:Tips();br
33、eak;case 12:printf("n关机中.n");sleep(2);exit(1);break;case 13:if(x_token = 3)Cha_Mod(token3,token2);elseprintf("%s格式输入命令有误!(help 命令可以查看命令格式)n",token1);break;default:printf("命令输入有误或无此命令,请重新输入!(help 命令可以查看命令格式)n");printf("nLogin incorrect!n关机中.n");sleep(2);exit(1)
34、;分配磁盘算法:void Recycling_Disk_User()int i;int j;int k;int p = 128*sizeof(Folder)/512;struct Back_Disk t;for(i = 0; i < M; i+)B_Disk_Useri.length = 0;DISK255511=1;Bp_u = 0;int count = 0;for(i = p; i < 256; i+)for(j = 0; j < 512; j+)if(DISKij=0)if(count = 0)B_Disk_UserBp_u.s = i;B_Disk_UserBp_u
35、.e = j;count+;elseif(count = 0)continue;elseB_Disk_UserBp_u.length = count;Bp_u+;for(k = 1; k < Bp_u; k+)if(B_Disk_Userk.length > B_Disk_Userk-1.length)t = B_Disk_Userk;B_Disk_Userk = B_Disk_Userk-1;B_Disk_Userk-1 = t;count = 0;void Recycling_Disk_Sys()int i;int j;int k;int p = 128*sizeof(Folder)/512 - 1;struct Back_Dis
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度体育场馆租赁协议范本
- 2024年有限责任公司小额信贷服务协议样本一
- 2024年度装修用建材采购协议样本一
- 商业门头出售合同模板
- 购股合同模板
- 食品场地合同模板
- 2024专项标准展位施工承揽合同一
- 设计版权版权合同模板
- app招商加盟合同模板
- 越南边贸合同模板
- 5陶行知的学前教育思想课件(42页PPT)
- 小学数学人教版一年级上册数学看图列式计算综合训练(带答案)
- GB∕T 41496-2022 铁合金 交货批水分的测定 重量法
- 肿瘤《外科学总论》最新)
- 磷酸铁锂电池工商业储能项目施工组织设计方案
- 妇科检查(课堂PPT)
- (精心整理)自由落体运动 导学案
- 7压力容器专业英语词汇ASME常用词汇
- CNAS-CC01:2015 管理体系认证机构要求
- 矿山规模划分标准
- 第一套极限配合 判断题
评论
0/150
提交评论