欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    操作系统课程设计文件系统的模拟设计.docx

    • 资源ID:6876784       资源大小:239.49KB        全文页数:15页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

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

    操作系统课程设计文件系统的模拟设计.docx

    1、操作系统课程设计文件系统的模拟设计操作系统课程设计报告题 目: 文件系统的模拟设计 一、设计目的本课程设计是学习完“操作系统原理”课程后进行的一次全面的综合训练,通过课程设计,更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。二、设计内容(1)概述为Linux系统设计一个简单的二级文件系统。要求做到以下几点:1.可以实现下列几条命令: login 用户登录 dir 列目录 create 创建文件 delete 删除文件 open 打开文件 close 关闭文件 read 读文件 write 写文件 cd 进出目录2列目录时要列出文件名,物理地址,保

    2、护码和文件长度3源文件可以进行读写保护(2)设计原理和系统总体功能框架图1、在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。2、文件物理结构可采用显式链接或其他方法。3、磁盘空闲空间的管理可选择位示图或其他方法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到FAT中。4、文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。5、对文件或目录的操作采用windows系统的API函数来实现。6、设计一个较实用的用户界面,方便用户使用。要求提供以下相关文件操作:用户登

    3、录、创建目录、删除目录、创建文件、删除文件、读文件、写文件、复制文件、移动文件、返回根目录、退出。功能结构图如图1.0所示:(3)详细设计及少数重要编码的说明这次课程设计中,我负责4个板块,分别是显示列表函数和目录、创建函数文件创建函数、打开文件函数和关闭文件系统函数。1、 显示列表函数和目录 流程图如图1.1所示2、 文件创建函数算法:查找当前目录下是否有同名文件,是则退出,否则让用户输入文本文件内容,以#结束。申请inode空间(ialloc函数),申请硬盘block空间(balloc函数),申请失败则结束。将文件内容写入inode空间和block空间。修改当前目录的结构,修改inode位

    4、图,block位图,写入模拟硬盘。详细过程如流程图1.2所示:、打开文件函数 对文件进行关闭操作,若此时文件不存在或处于读状态或写状态,则返回关闭失败信息;若此时文件处于空闲状态,则调用Close函数进行关闭操作。流程图如图1.3所示: 、关闭文件系统函数 对文件进行打开操作,若此时文件不存在或已处于打开状态或读状态或写状态,则返回打开失败信息;若此时文件处于空闲状态,则调用Open函数进行打开操作。流程图如图1.4所示:(4)运行结果分析 程序结果如图1.5-1.7所示 图1.5 图1.6 图1.7(5)设计小结操作系统课程设计是本课程重要的实践教学环节。课程设计的目的,一方面使学生更透彻地

    5、理解操作系统的基本概念和原理,使之由抽象到具体;另一方面,通过课程设计加强学生的实验手段与实践技能,培养学生独立分析问题、解决问题、应用知识的能力和创新精神。与本课程的实验教学相比,课程设计独立设课,具有更多的学时,给学生更多自行设计、自主实验的机会,充分放手让学生真正培养学生的实践动手能力,全面提高学生的综合素质。对于本次操作系统课程设,由于Linux比较陌生,刚起步阶段花了很大时间去查阅各种资料。当完成设计时,感觉掌握了以前学到的知识,并且还对操作系统应用有了更深入的认识。对二级文件系统也有了很好的了解,熟练C语言布局的使用,如何解决实现里面功能的各种问题。(6)参考文献 1计算机操作系统

    6、(第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 inode *temp_inode; printf(nCURRENT DIRE

    7、CTORY:n); for(i=0;iDIRNUM;i+) if(!(strcmp(dir.directi.d_name,)&(dir.directi.d_ino=0) dir.size = i;break; for(i=0;idi_mode; for(j=0;jdi_mode & DIFILE) printf( %d bytesn,temp_inode-di_size); printf(block chain of the file:); for(j=0;jdi_size/BLOCKSIZ+1;j+) printf(%d-,temp_inode-di_addrj); printf(endn)

    8、; else printf(n);iput(temp_inode); mkdir(dirname) /*mkdir*/char *dirname; int dirid,dirpos; struct 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_mo

    9、de&DIDIR) printf(n directory already existed!n); else printf(n%s is a file name,&cant 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_i

    10、no=inode-i_ino;strcpy(buf1.d_name,.);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_gi

    11、d=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.directdirid.d_ino);i

    12、f(!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;idir.size;i+) for (;jDIRNUM;j+) printf(nIn chdir(%s),j = %d,dirname,j); if (dir.directj.d_ino=0) break; printf(nIn chdir(%s),j2 = %d,dirnam

    13、e,j); memcpy(&dir.directi,&dir.directj,DIRSIZ+2);dir.directj.d_ino=0;*/* write back the current directory */for(i=0;idi_size/BLOCKSIZ+1;i+)/ bfree(cur_path_inode-di_addri);for(i=0;i0) block=balloc( ); cur_path_inode-di_addri=block; fseek(fd,DATASTART+block*BLOCKSIZ,SEEK_SET); fwrite(&dir.directi,1,B

    14、LOCKSIZ,fd); else fseek(fd,DATASTART+cur_path_inode-di_addr0*BLOCKSIZ,SEEK_SET); fwrite(&dir.direct0,1,BLOCKSIZ,fd);cur_path_inode-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;idi_size/BLOCKSIZ+1;i+) fseek(fd,DATASTA

    15、RT+ inode-di_addri*BLOCKSIZ,SEEK_SET); fread(&dir.directj,1,BLOCKSIZ,fd); j+=BLOCKSIZ/(DIRSIZ+2); return;13、文件创建函数 creat( ) ( 文件名creat.c)#include stdio.h#include filesys.hcreat(user_id,filename,mode)unsigned int user_id;char *filename;unsigned short mode;unsigned int di_ith,di_ino; struct inode *ino

    16、de; int i,j,k,user_p; for(user_p=0;user_pUSERNUM;user_p+) if(useruser_p.u_uid = 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

    17、of the old file */ for(i=0;idi_size/BLOCKSIZ+1;i+) bfree(inode-di_addri); /*to do: add code here to update the pointer of the sys_file*/ for(i=0;iSYSOPENFILE;i+) if (sys_ofilei.f_inode=inode) sys_ofilei.f_off=0; for(i=0;idi_uid; userk.u_gid=inode-di_gid; for(j=0;ji_ino; inode-di_mode=userk.u_default

    18、_mode|DIFILE; inode-di_uid=userk.u_uid; inode-di_gid=userk.u_gid; inode-di_addr0=balloc(); inode-di_size=0; inode-di_number=1; for (i=0;iSYSOPENFILE;i+) if (sys_ofilei.f_count=0) break; for(j=0;jNOFILE;j+) if (userk.u_ofilej=SYSOPENFILE+1) break; userk.u_ofilej=i; sys_ofilei.f_flag=mode; sys_ofilei.

    19、f_count=0; sys_ofilei.f_off=0; sys_ofilei.f_inode=inode; return j;14、打开文件函数open( ) (文件名open.c)#include stdio.h#include filesys.hunsigned 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);if

    20、(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;idi_size; else sys_ofilei.f_off=0

    21、;/*alloc the user open file item*/ for(j=0;jUSERNUM;j+) if(userj.u_uid = user_id) k=j; break; for(j=0;jNOFILE;j+) if (userk.u_ofilej=SYSOPENFILE+1) break;if (j=NOFILE) printf(n user open file too much!n); sys_ofilei.f_count=0; iput(inode); return NULL; userk.u_ofilej=i;/记录用户打开的文件在sys_ofile 中的位置 /*if

    22、 APPEND,free the block of the file before*/if (openmode &FAPPEND) for(i=0;idi_size/BLOCKSIZ+1;i+) bfree(inode-di_addri); inode-di_size=0; return j;15、关闭文件函数close( ) ( 文件名close.c) #include stdio.h#include filesys.hclose(user_id,cfd) /*close*/ unsigned int user_id; unsigned short cfd; struct inode *inode; int j,k; for(j=0;jUSERNUM;j+) if(userj.u_uid = user_id) k=j; break; inode=sys_ofileuserk.u_ofilecfd.f_inode;iput(inode);sys_ofileuserk.u_ofilecfd.f_count-;userk.u_ofilecfd=SYSOPENFILE+1;


    注意事项

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

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




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开