欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    操作系统原理课程设计文件管理系统方案.doc

    • 资源ID:4226478       资源大小:216KB        全文页数:37页
    • 资源格式: DOC        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    操作系统原理课程设计文件管理系统方案.doc

    操作系统原理课程设计文件管理系统 院 系: 计算机学院三系 班 级: 计软05 1班 姓 名: 韩 宇 学 号: 3 5 号 指导教师: 益民 2007 年7 月 4 日操作系统原理课程设计任务书一、题目:文件系统管理 二、设计要求(1)由鲁建成,韩宇,肖鹏完成设计与实现。(2)查阅相关资料,自学具体课题中涉及到的新知识。(3)采用结构化、模块化程序设计方法,功能要完善,具有一定的创新。(4)所设计的程序应有输入、输出。一. (5)按要求写出课程设计报告,并于设计结束后1周提交。其主要容包括:封皮、课程设计任务书,指导教师评语与成绩、目录、概述、需求分析、概要设计、详细设计、软件的调试、总结、启谢、附录:带中文注释的程序清单、参考文献。报告一律用A4纸打印,中文字体为宋体,西文字体用Time New Roma,一律用小四号字,行距采用“固定值”18磅,首行缩进2字符。总体设计应配合软件总体模块结构图来说明软件应具有的功能。详细设计应用传统或N-S流程图和屏幕抓图说明,调试的叙述应配合出错场景的抓图来说明出现了哪些错误,如何解决的。三、课程设计工作量由于是设计小组团结协作完成设计任务,一般每人的程序量在200行有效程序行左右,不得抄袭。四、课程设计工作计划2007年6月18日,指导教师讲课,学生根据题目准备资料;2007年6月19日,进行总体方案设计;2007年6月20日2007年6月25日,完成程序模块并通过独立编译;2007年6月26日2007年6月27日,将各模块集成为一个完整的系统,并录入足够的数据进行调试运行;2007年6月27日2007年6月29日,验收、撰写报告;2007年6月29日下午,验收或总结。 指导教师签章: 教研室主任签章 操作系统原理课程设计指导教师评语与成绩指导教师评语:课程设计表现成绩: 课程设计验收成绩: 课程设计报告成绩: 课程设计 总成绩: 指导教师签章 2007年 7 月 10 日目 录一 概述-5二 需求分析-71) 问题获取2) 分析三 概要设计-8四 详细设计-91) 具体功能概述2) 程序流程图3) 程序代码五 程序的调试与运行结果说明-32六 用户使用说明-351) 引言2) 功能介绍七 启谢-36八 参考资料-36一 概述1. 课程设计的目的1理解重要数据结构的意义2掌握文件系统的工作原理3通过本次课程设计加深文件系统部功能及部实现的理解2. 课程设计的要求1需要的基本知识:文件:一组带标志的在逻辑上有完整意义的信息项的序列,这个标识为文件名。文件系统:操作系统中统一管理信息资源的一种软件,管理文件的存储、检索、更新。提供安全可靠的共享和保护手段,并且方便用户使用。2技能:具有用C语言编程的能力,懂得文件系统调用处理的算法及一些操作系统文件系统的实现的基本思想。3尚未掌握的知识点:高速缓存管理和磁盘管理算法4参阅操作系统原理书籍中文件管理的相关知识。5老师提出的要求:在理解文件系统的层次结构,掌握高速缓存管理和磁盘管理的基本思想和算法的基础上,掌握文件系统的系统调用处理算法和运用,分析流行操作系统文件系统的实现的基本思想,尝试设计简单的文件系统3. 课程设计的主要设计思想在任一OS下,建立一个大文件,把它假想成一盘,在其中实现一个简单的模拟UNIX(LINUX)文件系统。本次文件系统具有以下的功能:  1、初始化        2、建立文件(需给出文件名,文件长度)        3、建立子目录        4、打开文件(显示文件所占的盘块)        5、删除文件        6、删除目录        7、显示目录(即显示目录下的信息,包括文件、子目录等)        8、显示整个系统信息 【关键词】 文件管理 目录管理 操作系统 C语言二 需求分析1) 问题获取我们以学生为调查对象。模拟询问了若干问题,这些问题的提出和解决有助项目的开发和方向定位。问题如下:1)有关用户操作方面的相关问题# 是否需要使用者的登录登出操作?# 允许用户执行哪些操作?# 各项操作的提示操作是设置在软件界面上还是在菜单里?# 允许用户对文件的操作有哪些?2)有关技术支持方面的相关问题# 用户使用的是那种操作系统?(WindowsXP / Linux/苹果?)# 是否使用数据库的相关技术?# 是否向用户提供相关的技术文档?2) 分析经过相关的问题获取,我们分析了本项目的相关需求。本项目的名称:简易文件系统本系统的使用人员:所有使用计算机的人员本项目的开发工具:WinTc数据库设计:无界面设计:命令行提示方式的程序在用户操作方面,运行本系统前不需要用户的登录操作,运行后可以直接进入操作界面,用户可以直观的使用本程序。用户可以对文件做以下的操作:文件的建立,删除,查找,文件目录的相关管理,各项操作应可以直接操作,不会有任何的限制。用户大多使用的是WindowsXP操作系统,而且很多的用户安装了WinTc软件,这样我们以WinTc编写的程序用户可以直接使用三 概要设计本程序的功能模块图如图所示:简易的文件系统创建文件创建目录查看文件删除目录删除文件查看目录 在此文件模拟系统上可以实现以下操作:# 创建目录:md + 空格 + 目录名,在指定路径下创建指定的目录,如果没有指定路径,则在当前目录下创建指定目录。对于重名的目录给与错误提示。# 创建文件:vi + 空格 + 文件名 + 文件长度, 创建一个指定名字的新文件,即在目录中增加一项,对于重名的文件给与错误提示。# 删除目录:del + 空格 + 目录名,删除指定的目录及此目录下的文件和子目录。# 删除文件:del + 空格 + 文件名,删除指定的文件。# 查看目录:cd + 空格 + 目录名,显示指定目录下的全部文件和一级子目录,如果没有指定目录名,则显示当前目录下的相应容。# 查看文件:cat + 空格 + 文件名,显示指定的文件,如没有此文件,则显示错误提示。# 键入quit退出文件系统。四 详细设计1)具体功能概述初始化,查看当前目录文件列表,查看文件,查看系统信息,创建目录、文件,删除目录、文件,进入当前目录的指定目录,返回上一级目录,显示帮助命令和退出文件模拟12项功能。2)程序流程图4.2.1 Format()1 超级块初始化 图3.2.1.1 i<50 super_block.freei=i;    super_block.stacki=50+i;   2 信息初始化 图3.2.1.2i<640 j<100 i_nodei.file_addressj=-1 i_nodei.file_length=-1;     i_nodei.file_style=-1;   3 存储空间初始化 图3.2.1.3 I<20449 memoryi.n=0;     memoryi.a=0;  j<50 memoryi.freej=-1;4 将空闲块的信息用成组的方法写进每组的最后一个块中 i<20449 (i+1)%50=0 是 否 k=i+1; j<50 是 k<20450 否 memoryi.freej=k;   memoryi.memoryi.n+;  freej=-1   k+; memoryi.a=0;        continue; j<50  memoryi.freej=-1; memoryi.n=0; 图3.2.1.44.2.2 Callback(int length) 图3.2.2 I=length-1;i>=0 k=physici;     m=49-super_block.n;  是 super_block.n=50 否 j<50 memoryk.freej=super_block.freej;super_block.n=0;     memoryk.n=50; memoryk.a=0; 是 m=-1 否 m=49;     super_block.freem=physici;super_block.n+;4.2.3 Allot(int length) 图3.2.3 i<length k=50-super_block.n;  m=super_block.freek;  p=super_block.free49;  是 m=-1|memoryp.a=1 否printf("内存不足,不能够分配空间n");   callback(length);    super_block.n=1 是 否 emorym.a=1;  physici=m;    super_block.n=0; j<memorym.n super_block.freej=memorym.freej;     super_block.n+;continue;physici=m; memorym.a=1;uper_block.n-4.2.4 create_file(char filename,int length)图 i<640 strcmp(filename,rooti.是 file_name)=0 否printf("文件已经存在,不允许建立重名的文件") i<640 是 rooti.i_num=-1 否strcpy(rooti.file_name,filename);strcpy(rooti.dir_name,cur_dir);i_nodei.file style=style;i_nodei.file_length=length;allot(length);j<lengthi_nodei.file_addressj=physicj; break; 图3.2.44.2.5 del_file(char filename)  I<640 是 strcmp(filename,rooti.file_name)=0 否  k=rooti.i_num; j<i_nodek.file_length  printf("不存在这个文件n"); physicj=i_nodek.file_addressj;callback(i_nodek.file_length);j<100i_nodek.file_addressj=-1;strcpy(rooti.file_name,""); rooti.i_num=-1;   strcpy(rooti.dir_name,"");      I _nodek.file_length=-1;       i_nodek.file_style=-1;       图3.2.54.2.6 del_dir(char filename) i<640 k=rooti.i_num; strcmp(rooti.file_name,filename)=0&& strcmp(cur_dir,filename)!=0 && (i_nodek.file_style)=0 j<640strcmp(filename,rootj.是 dir_name)=0 否 printf("这个不是目录文printf("目录del_file(file 件 或者不存在这个目录不为空不能 name); 或者你要删除的是直接删除") 当前目录n"); 图3.2.64.2.7 void display_curdir() I<640 strcmp(cur_dir,rooti.dir_name)=0 是 否k=rooti.i_num;    printf("tt  %st",rooti.file_name);   printf("t%dt",i_nodek.file_style);       printf("%dt",i_nodek.file_length);       printf("%sn",rooti.dir_name);   图3.2.73.2.8 display_dir(char filename) I<640 是 否k=rooti.i_num; strcmp(filename,rooti.file_name)=0) printf("没有这个目录n");&& (i_nodek.file_style=0)是 否 strcpy(cur_dir,filename);  图 3.2.84.2.9 void open_file(char filename是 i<640 否 k=rooti.i_num;strcmp(filename,rooti.file_name)=0 && (i_nodek.file_style=1)是 否 printf("没有这个文件 printf("tt  %st",rooti.file_name);    或者这个文件不是正规文件n");  printf("t%dt",i_nodek.file_style);      printf("%dt",i_nodek.file_length);       printf("%sn",rooti.dir_name);        printf("tt文件占用的物理地址n");j<i_nodek.file_lengthprintf("%d  ",i_nodek.file_addressj); 图3.2.93)程序代码:/* HELLO.C - Hello, world */#include "stdio.h"#include <stdlib.h> #include <conio.h> #include <string.h> int physic300; /* 文件地址缓冲区 */int style=1; /* 文件的类型 */char cur_dir10="c" /* 当前目录 */ struct command char 10;cmd12;struct block int n; /* 空闲的盘快的个数 */ int free50; /* 存放空闲盘快的地址 */ int a; /* 模拟盘快是否被占用 */memory200;struct block_super int n; /* 空闲的盘快的个数 */ int free50; /* 存放进入栈中的空闲块 */ int stack50; /* 存放下一组空闲盘快的地址 */super_block;struct node /* i结点信息 */ int file_style; /* i结点 文件类型 */ int file_length; /* i结点 文件长度 */ int file_address100; /* i结点 文件的物理地址 */ i_node64;struct dir /* 目录项信息 */ char file_name10; /* 文件名 */ int i_num; /* 文件的结点号 */ char dir_name10; /* 文件所在的目录 */ c64;void format() /* 格式化 */int i,j,k; super_block.n=50; for(i=0;i<50;i+) /* 超级块初始化 */ super_block.freei=i; /* 存放进入栈中的空闲块 */ super_block.stacki=50+i; /* 存放下一组的盘块 */ for(i=0;i<64;i+) /* i结点信息初始化 */ for(j=0;j<100;j+) i_nodei.file_addressj=-1;/* 文件地址 */ i_nodei.file_length=-1; /* 文件长度 */ i_nodei.file_style=-1; /* 文件类型 */ for(i=0;i<64;i+) /* 根目录区信息初始化 */ strcpy(ci.file_name,""); ci.i_num=-1; strcpy(ci.dir_name,""); for(i=0;i<200;i+) /* 存储空间初始化 */ memoryi.n=0; /* 必须有这个 */ memoryi.a=0; for(j=0;j<50;j+) memoryi.freej=-1; for(i=0;i<200;i+) /* 将空闲块的信息用成组的方法写进每组的最后一个块中 */ /* 存储空间初始化 */ if(i+1)%50=0) k=i+1; for(j=0;j<50;j+) if(k<200) memoryi.freej=k;/* 下一组空闲地址 */ memoryi.n+; /* 下一组空闲个数 注意在memoryi.n+之前要给其赋初值 */ k+; else memoryi.freej=-1; memoryi.a=0; /* 标记为没有使用 */ continue; /* 处理完用于存储下一组盘块信息的特殊盘块后,跳过本次循环 */ for(j=0;j<50;j+) memoryi.freej=-1; memoryi.n=0; printf("已经初始化完毕n"); printf("欢迎进入UNIX文件模拟系统!nn");void write_file(FILE *fp) /* 将信息读入系统文件中 */ int i; fp=fopen("system","wb"); for(i=0;i<200;i+) fwrite(&memoryi,sizeof(struct block),1,fp); fwrite(&super_block,sizeof(struct block_super),1,fp); for(i=0;i<64;i+) fwrite(&i_nodei,sizeof(struct node),1,fp); for(i=0;i<64;i+) fwrite(&ci,sizeof(struct dir),1,fp); fclose(fp);void read_file(FILE *fp) /* 读出系统文件的信息 */ int i; fp=fopen("system","rb"); for(i=0;i<200;i+) fread(&memoryi,sizeof(struct block),1,fp); fread(&super_block,sizeof(struct block_super),1,fp); for(i=0;i<64;i+) fread(&i_nodei,sizeof(struct node),1,fp); for(i=0;i<64;i+) fread(&ci,sizeof(struct dir),1,fp); fclose(fp);void callback(int length) /* 回收磁盘空间 */ int i,j,k,m,q=0; for(i=length-1;i>=0;i-) k=physici; /* 需要提供要回收的文件的地址 */ m=49-super_block.n; /* 回收到栈中的哪个位置 */ if(super_block.n=50) /* 注意 当super_block.n=50时 m=-1;的值 */ /* super_block.n=50的时候栈满了,要将这个栈中的所有地址信息写进下一个地址中 */ for(j=0;j<50;j+) memoryk.freej=super_block.freej; super_block.n=0; memoryk.n=50; memoryk.a=0; if(m=-1) m=49; /* 将下一个文件地址中的盘块号回收到栈底中,这个地址中存放着刚才满栈的地址的信息 */ super_block.freem=physici; /* 将下一个文件地址中的盘块号回收到栈中 */ super_block.n+; void allot(int length) /* 分配空间 */ int i,j,k,m,p; for(i=0;i<length;i+) k=50-super_block.n; /* 超级块中表示空闲块的指针 */ m=super_block.freek; /* 栈中的相应盘块的地址 */ p=super_block.free49; /* 栈中的最后一个盘块指向的地址 */ if(m=-1|memoryp.a=1) /* 检测是否还有下一组盘块 */ printf("存不足,不能够分配空间n"); callback(length); break; if(super_block.n=1) memorym.a=1; /* 将最后一个盘块分配掉 */ physici=m; super_block.n=0; for(j=0;j<memorym.n;j+) /* 从最后一个盘块中取出下一组盘块号写入栈中 */ super_block.freej=memorym.freej; super_block.n+; continue; /* 要跳过这次循环,下面的语句在IF中已经执行过 */ physici=m; /* 栈中的相应盘块的地址写进 文件地址缓冲区 */ memorym.a=1; super_block.n-; void create_file(char filename,int length) /* 创建文件 */ int i,j; for(i=0;i<64;i+) if(strcmp(filename,ci.file_name)=0) printf("文件已经存在,不允许建立重名的文件n"); return; for(i=0;i<64;i+) if(ci.i_num=-1) ci.i_num=i; strcpy(ci.file_name,filename); strcpy(ci.dir_name,cur_dir); /* 把当前目录名 给新建立的文件 */ i_nodei.file_style=style; i_nodei.file_length=length; allot(length); for(j=0;j<length;j+) i_nodei.file_addressj=physicj; break; void create_dir(char filename) /* 创建目录 */ style=0; /* 0代表文件类型是目录文件 */ create_file(filename,4); style=1; /* 用完恢复初值,因为全局变量,否则 */void del_file(char filename) /* 删除文件 */ int i,j,k; for(i=0;i<64;i+) if(strcmp(filename,ci.file_name)=0) k=ci.i_num; for(j=0;j<i_nodek.file_length;j+) physicj=i_nodek.file_addressj; callback(i_nodek.file_length); /* 调用 回收函数 */ for(j=0;j<100;j+) /* 删除文件后要将文件属性和目录项的各个值恢复初值 */ i_nodek.file_addressj=-1; /* 地址恢复初值 */ strcpy(ci.file_name,""); /* 文件名恢复初值 */ ci.i_num=-1; /* 目录项的I结点信息恢复初值 */ strcpy(ci.dir_name,""); /* 目录项的文件目录信息恢复初值 */ i_nodek.file_length=-1; /* 文件长度恢复 */ i_nodek.file_style=-1; /* 文件类型恢复初值 */ break; if(i=64) printf("不存在这个文件n"); void del_dir(c

    注意事项

    本文(操作系统原理课程设计文件管理系统方案.doc)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开