




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、操作系统课程设计报告题 目: 文件系统的模拟设计 一、设计目的本课程设计是学习完“操作系统原理”课程后进行的一次全面的综合训练,通过课程设计,更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。二、设计内容(1)概述为linux系统设计一个简单的二级文件系统。要求做到以下几点:1.可以实现下列几条命令:login 用户登录dir 列目录create 创建文件delete 删除文件open 打开文件close 关闭文件read 读文件write 写文件cd 进出目录2列目录时要列出文件名,物理地址,保护码和文件长度3源文件可以进行读写保护(2)设计原理
2、和系统总体功能框架图1、在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。2、文件物理结构可采用显式链接或其他方法。3、磁盘空闲空间的管理可选择位示图或其他方法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到fat中。4、文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。5、对文件或目录的操作采用windows系统的api函数来实现。6、设计一个较实用的用户界面,方便用户使用。要求提供以下相关文件操作:用户登录、创建目录、删除目录、创建文件、删除文件、读文件、
3、写文件、复制文件、移动文件、返回根目录、退出。功能结构图如图1.0所示:开始 format列目录选择操作退出 停止 登录改变目录创建文件创建目录t写文件关闭文件删除文件e打开文件ne 结束图1.0安装(3)详细设计及少数重要编码的说明这次课程设计中,我负责4个板块,分别是显示列表函数和目录、创建函数文件创建函数、打开文件函数和关闭文件系统函数。、 显示列表函数和目录 流程图如图1.1所示模拟文件系统创建目录删除目录创建文件删除文件读文件写文件复制文件移动文件返回根目录图1.1、 文件创建函数算法:查找当前目录下是否有同名文件,是则退出,否则让用户输入文本文件内容,以#结束。申请inode空间(
4、ialloc函数),申请硬盘block空间(balloc函数),申请失败则结束。将文件内容写入inode空间和block空间。修改当前目录的结构,修改inode位图,block位图,写入模拟硬盘。详细过程如流程图1.2所示:开始k=1或k=2创建文件夹创建文件有同名文件夹有同名文件返回创建失败信息当前目录为空返回创建失败信息把节点连接到该目录下把节点连接到该目录下的最后一个子节点之后创建成功结束12y n n y y n 图1.2、打开文件函数 对文件进行关闭操作,若此时文件不存在或处于读状态或写状态,则返回关闭失败信息;若此时文件处于空闲状态,则调用close函数进行关闭操作。流程图如图1.
5、3所示: 开始打开文件文件是否存在?是文件存在则调用openfile函数打开文件文件不存在则返回错误信息显示文件内容结束图1.3 、关闭文件系统函数 对文件进行打开操作,若此时文件不存在或已处于打开状态或读状态或写状态,则返回打开失败信息;若此时文件处于空闲状态,则调用open函数进行打开操作。流程图如图1.4所示:开始打开文件文件是否存在?是文件存在则调用closefile函数关闭开文件文件不存在则返回错误信息结束图1.4(4)运行结果分析 程序结果如图1.5-1.7所示 图1.5 图1.6 图1.7(5)设计小结操作系统课程设计是本课程重要的实践教学环节。课程设计的目的,一方面使学生更透彻
6、地理解操作系统的基本概念和原理,使之由抽象到具体;另一方面,通过课程设计加强学生的实验手段与实践技能,培养学生独立分析问题、解决问题、应用知识的能力和创新精神。与本课程的实验教学相比,课程设计独立设课,具有更多的学时,给学生更多自行设计、自主实验的机会,充分放手让学生真正培养学生的实践动手能力,全面提高学生的综合素质。对于本次操作系统课程设,由于linux比较陌生,刚起步阶段花了很大时间去查阅各种资料。当完成设计时,感觉掌握了以前学到的知识,并且还对操作系统应用有了更深入的认识。对二级文件系统也有了很好的了解,熟练c语言布局的使用,如何解决实现里面功能的各种问题。(6)参考文献 1计算机操作系
7、统(第3版),汤小丹,西安电子科技大学出版社,2007年7月2c语言程序设计,孟庆昌,人民邮电出版社,2006年4月3计算机操作系统教程(第3版)习题解答与实验指导,张尧学,清华大学出版社,2006年11月 (7)附源代码 12、显示列表函数dir( )和目录创建函数mkdir( )等(文件名dir.c)#include "stdio.h"#include "string.h"#include "filesys.h"_dir( ) /*dir*/ unsigned int di_mode; int i,j,one; struct in
8、ode *temp_inode; printf("ncurrent directory:n"); for(i=0;i<dirnum;i+) if(!(strcmp(dir.directi.d_name,"")&&(dir.directi.d_ino=0) dir.size = i;break; for(i=0;i<dir.size;i+) if (dir.directi.d_ino!=diempty) printf("%14s ,dir.direct%d.d_ino = %d, 属性:",dir.direc
9、ti.d_name,i,dir.directi.d_ino); temp_inode=iget(dir.directi.d_ino); di_mode=temp_inode->di_mode; for(j=0;j<12;j+) one=di_mode%2; di_mode=di_mode/2; if (one) printf("x"); else printf("-"); if(temp_inode->di_mode & difile) printf(" %d bytesn",temp_inode->d
10、i_size); printf("block chain of the file:"); for(j=0;j<temp_inode->di_size/blocksiz+1;j+) printf("%d-",temp_inode->di_addrj); printf("endn"); else printf("<dir>n");iput(temp_inode); mkdir(dirname) /*mkdir*/char *dirname; int dirid,dirpos; struct
11、 inode *inode; struct direct bufblocksiz/(dirsiz+2); unsigned int block; memset(buf,0,(blocksiz/(dirsiz+2)*sizeof(struct direct); dirid=namei(dirname); if(dirid!=null) inode=iget(dirid); if (inode->di_mode&didir) printf("n directory already existed!n"); else printf("n%s is a fi
12、le name,&can't creat a dir the same name",dirname); iput(inode); return;dirpos=iname(dirname);inode=ialloc( );/ inode->i_ino=dirid;dir.directdirpos.d_ino=inode->i_ino;dir.size+;/* fill the new dir buf*/strcpy(buf0.d_name,".");buf0.d_ino=inode->i_ino;strcpy(buf1.d_name
13、,".");buf1.d_ino=cur_path_inode->i_ino;block=balloc( );fseek(fd,datastart+block*blocksiz,seek_set);fwrite(buf,1,blocksiz,fd);inode->di_size=2*sizeof(struct direct);inode->di_number=1;inode->di_mode=useruser_id.u_default_mode;inode->di_uid=useruser_id.u_uid|didir;inode->di
14、_gid=useruser_id.u_gid;inode->di_addr0=block;iput(inode);return;chdir(dirname) /*chdir*/char *dirname; unsigned int dirid; struct inode *inode;unsigned short block;int i,j,low=0,high=0;dirid=namei(dirname);if(dirid=null) printf("n %s does not existedn",dirname); return ;inode=iget(dir.d
15、irectdirid.d_ino);if(!access(user_id,inode,useruser_id.u_default_mode) printf("nthe directory %s ,permission deny",dirname); iput(inode); return ;/*pack the current directoryfor(i=0;i<dir.size;i+) for (;j<dirnum;j+) printf("nin chdir(%s),j = %d",dirname,j); if (dir.directj.
16、d_ino=0) break; printf("nin chdir(%s),j2 = %d",dirname,j); memcpy(&dir.directi,&dir.directj,dirsiz+2);dir.directj.d_ino=0;*/* write back the current directory */for(i=0;i<cur_path_inode->di_size/blocksiz+1;i+)/ bfree(cur_path_inode->di_addri);for(i=0;i<dir.size;i+=block
17、siz/(sizeof(struct direct) if(i>0) block=balloc( ); cur_path_inode->di_addri=block; fseek(fd,datastart+block*blocksiz,seek_set); fwrite(&dir.directi,1,blocksiz,fd); else fseek(fd,datastart+cur_path_inode->di_addr0*blocksiz,seek_set); fwrite(&dir.direct0,1,blocksiz,fd);cur_path_inode
18、->di_size=dir.size*(sizeof(struct direct);iput(cur_path_inode);cur_path_inode=inode;/* read the change dir from disk */j=0;for(i=0;i<inode->di_size/blocksiz+1;i+) fseek(fd,datastart+ inode->di_addri*blocksiz,seek_set); fread(&dir.directj,1,blocksiz,fd); j+=blocksiz/(dirsiz+2); return
19、;13、文件创建函数 creat( ) ( 文件名creat.c)#include "stdio.h"#include "filesys.h"creat(user_id,filename,mode)unsigned int user_id;char *filename;unsigned short mode;unsigned int di_ith,di_ino; struct inode *inode; int i,j,k,user_p; for(user_p=0;user_p<usernum;user_p+) if(useruser_p.u_ui
20、d = user_id) k=user_p; break; di_ino=namei(filename); if (di_ino!=null) /*already existed*/ inode=iget(di_ino); if(access(user_id,inode,mode)=0) iput(inode); printf("ncreat access not allowedn"); return ; /*free all the block of the old file */ for(i=0;i<inode->di_size/blocksiz+1;i+)
21、 bfree(inode->di_addri); /*to do: add code here to update the pointer of the sys_file*/ for(i=0;i<sysopenfile;i+) if (sys_ofilei.f_inode=inode) sys_ofilei.f_off=0; for(i=0;i<nofile;i+) if (userk.u_ofilei= sysopenfile+1) userk.u_uid=inode->di_uid; userk.u_gid=inode->di_gid; for(j=0;j&l
22、t;sysopenfile;j+) if (sys_ofilej.f_count=0) userk.u_ofilei=j; sys_ofilej.f_flag=mode; return i; else /*not existed before */ inode=ialloc( ); di_ith=iname(filename); dir.size+; dir.directdi_ith.d_ino=inode->i_ino; inode->di_mode=userk.u_default_mode|difile; inode->di_uid=userk.u_uid; inode-
23、>di_gid=userk.u_gid; inode->di_addr0=balloc(); inode->di_size=0; inode->di_number=1; for (i=0;i<sysopenfile;i+) if (sys_ofilei.f_count=0) break; for(j=0;j<nofile;j+) if (userk.u_ofilej=sysopenfile+1) break; userk.u_ofilej=i; sys_ofilei.f_flag=mode; sys_ofilei.f_count=0; sys_ofilei.
24、f_off=0; sys_ofilei.f_inode=inode; return j;14、打开文件函数open( ) (文件名open.c)#include "stdio.h"#include "filesys.h"unsigned short open(user_id,filename,openmode)int user_id;char *filename;unsigned short openmode; unsigned int dirid;struct inode *inode;int i,j,k;dirid=namei(filename);i
25、f (dirid=null) /*no such file */ printf("n file does not existed!n"); return null; inode=iget(dir.directdirid.d_ino);if (!access(user_id,inode,openmode) /*access denied*/ printf("n file open has not access!"); iput(inode); return null; /* alloc the sys_ofile item*/for(i=1;i<sy
26、sopenfile;i+) if (sys_ofilei.f_count=0) break;if (i=sysopenfile) printf("n system open file too muchn"); iput(inode); return null; sys_ofilei.f_inode=inode; sys_ofilei.f_flag=openmode; sys_ofilei.f_count=1; if (openmode&fappend) sys_ofilei.f_off=inode->di_size; else sys_ofilei.f_off=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年学前教育与发展心理学考试题及答案
- 2025年心理应用与咨询实践考试试卷及答案
- 2025年心理健康教育师考试题及答案
- 2025年现代通信技术基础与应用考试卷及答案
- 2025年人工智能的发展与应用知识试卷及答案
- 2025年酒店管理执业资格考试试题及答案
- 2025年机械设计及制造专业考试试卷及答案
- 2025年国际关系与外交专业考研真题试题及答案
- 2025年广告学专业知识考试试卷及答案
- 2025年高级项目经理职业资格考试试卷及答案
- 23《海底世界》说课稿- 2023-2024学年统编版语文三年级下册
- 2024年黑龙江省《辅警招聘考试必刷500题》考试题库附答案(满分必刷)
- 2025年广西宏桂集团招聘笔试参考题库含答案解析
- 起重机培训课件-指挥职责及操作
- 经济地理学讲义(2024级)
- 电网智能化运维管理平台建设
- 无处不在-传染病知到智慧树章节测试课后答案2024年秋南昌大学
- 公司人事管理制度范文(2篇)
- 国家开放大学电大22270资源与运营管理(统设课)期末终考题库参考答案
- 酒店养生药膳培训课件
- 中职语文高二上学期拓展模块上册期末模拟卷1原卷版
评论
0/150
提交评论