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

    操作系统课程设计文件系统的实现Word文档格式.docx

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

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

    操作系统课程设计文件系统的实现Word文档格式.docx

    1、每个目录项16个字节,目录项下只允许建立4个子目录或者文件。i-node位图1块64个字节,共512位,可以描述512个i-node的使用情况。i-node的长度是16字节。文件超过两个盘块会用到一级索引。每个以及索引盘块(64字节)可以包含16个盘块号。文件包含目录文件和文本文件。实现Format,Mkfile,Mkdir,Cd,Delfile,Deldir,Dir,Copy,Open,Viewinodebitmap,Viewblockbitmap等功能。二、整体功能及设计(功能划分及流程图)1、数据结构:struct DirectoryEntry /目录项 char name8; /文件或

    2、目录名 int dirid; /目录标志(0为文件,1为目录) int inodenumber; /i-node编号;struct DirectoryEntryInBlock DirectoryEntry de4; /每个目录项大小为16字节,64字节空间最多可以存储4个目录项 int num; /磁盘块存储的目录项数目struct indexaddressstruct int indexaddress16; /每个索引块大小为4字节,64字节空间最多可以存储16个索引块号 /索引块存储的索引数目union Block /单个盘块64个字节大小可以存储文件内容或者存储目录项或者存储索引块号 c

    3、har space64; /空间大小为64个字节用于存储文件内容 DirectoryEntryInBlock deib; indexaddressstruct ias; struct inodeStruct /i-node结构 int blockamount; /盘块数 int directblockaddress1,directblockaddress2; /直接盘块地址*2 int stairindexaddress; /一级索引地址struct DiskBlock /磁盘布局 DirectoryEntry rootdirectory4; /根目录,最多4个目录项 char inodebi

    4、tmap512; /512个i-node状态 char blockbitmap1024; /1024个磁盘块状态 inodeStruct inode512; /512个i-node存储区 Block datablock1024; /数据块存储区static DiskBlock db; /全局磁盘变量int rootdirectoryamount; /用于记录根目录的使用数目,最大为4int inodeamount; /用于记录i-node的使用数目,最大为512int datablockamount; /用于记录数据块的使用数目,最大为1024int spaceamount; /用于记录数据块

    5、中64位字节的使用数目,最大为64DirectoryEntry filelist500; /用于记录文件方便遍历检索DirectoryEntry directorylist500; /用于记录目录方便int fileamount; /用于记录文件数目int directoryamount; /用于记录目录的数目char localposition8; /用于记录当前位置 2、文件系统相关图(1)文件系统简单结构图如图1所示。图1 文件系统简单结构图(2)磁盘构成示意图如图2所示图2 磁盘构成示意图(3)文件构成图如图3所示。文件或目录名目录标志I-node编号图3 文件构成图(4)I-node

    6、构成图如图4所示。图4 I-node构成图三、编程实现:(主要功能代码及解释)void Format() /初始化 int i,j; for(i=0;i4;i+) memset(db.rootdirectoryi.name,0,8); /给文件或目录名初始化 db.rootdirectoryi.dirid=-1; db.rootdirectoryi.inodenumber=-1; 512; db.inodebitmapi=0; db.inodei.blockamount=0; db.inodei.directblockaddress1=-1; db.inodei.directblockaddr

    7、ess2=-1; db.inodei.stairindexaddress=-1;1024;i+) db.blockbitmapi=0; memset(db.datablocki.space,0,64); /给单个盘块的64字节空间初始化 db.datablocki.deib.num=0; db.datablocki.ias.num=0; for(j=0;jj+) db.datablocki.deib.dej.inodenumber=-1;j+) db.datablocki.ias.indexaddressj=-1;500; memset(filelisti.name,0,8); filelis

    8、ti.dirid=-1; filelisti.inodenumber=-1; memset(directorylisti.name,0,8); directorylisti.dirid=-1; directorylisti.inodenumber=-1; rootdirectoryamount=0; inodeamount=0; datablockamount=0; spaceamount=0; fileamount=0; directoryamount=0; strcpy(localposition,Root);void Mkfile() /创建文件 char filename8,path1

    9、0; printf(文件名称: scanf(%s,filename);文件路径:,path); if(strcmp(path,)=0) if(rootdirectoryamount printf(创建失败,该目录已满n break; else strcpy(db.datablockdb.inodedirectorylisti.inodenumber.directblockaddress1.deib.detnum.name,filename); db.datablockdb.inodedirectorylisti.inodenumber.directblockaddress1.deib.detn

    10、um.dirid=0; db.datablockdb.inodedirectorylisti.inodenumber.directblockaddress1.deib.detnum.inodenumber=inodeamount; db.inodeinodeamount.blockamount=1; db.inodeinodeamount.directblockaddress1=datablockamount; db.inodebitmapinodeamount=1; db.blockbitmapdatablockamount=1; filelistfileamount=db.databloc

    11、kdb.inodedirectorylisti.inodenumber.directblockaddress1.deib.detnum; inodeamount+; datablockamount+; fileamount+; db.datablockdb.inodedirectorylisti.inodenumber.directblockaddress1.deib.num+; printf( break; if(i=directoryamount)创建失败,路径有误nvoid Mkdir() /创建目录 char directoryname8,path10;目录名称:,directoryn

    12、ame);目录路径: strcpy(db.rootdirectoryrootdirectoryamount.name,directoryname); db.rootdirectoryrootdirectoryamount.dirid=1; directorylistdirectoryamount=db.rootdirectoryrootdirectoryamount; directoryamount+;目录创建成功n else strcpy(db.datablockdb.inodedirectorylisti.inodenumber.directblockaddress1.deib.detnu

    13、m.name,directoryname); db.datablockdb.inodedirectorylisti.inodenumber.directblockaddress1.deib.detnum.dirid=1; directorylistdirectoryamount=db.datablockdb.inodedirectorylisti.inodenumber.directblockaddress1.deib.detnum; inodeamount+; directoryamount+;void Cd() /更改当前目录项请输入当前目录为:,localposition);当前目录位置

    14、修改成功nvoid Delfile() /删除文件 char filename8; int i,j,k,flag;请输入要删除的文件的名称: for(k=0;krootdirectoryamount;k+) if(strcmp(db.rootdirectoryk.name,filename)=0) memset(db.rootdirectoryk.name,0,8); db.rootdirectoryk.dirid=-1; db.rootdirectoryk.inodenumber=-1; break; for(j=0;db.datablockdb.inodedirectorylistk.in

    15、odenumber.directblockaddress1.deib.num;j+) if(strcmp(db.datablockdb.inodedirectorylistk.inodenumber.directblockaddress1.deib.dej.name,filename)=0) memset(db.datablockdb.inodedirectorylistk.inodenumber.directblockaddress1.deib.dej.name,0,8); db.datablockdb.inodedirectorylistk.inodenumber.directblocka

    16、ddress1.deib.dej.dirid=-1; db.datablockdb.inodedirectorylistk.inodenumber.directblockaddress1.deib.dej.inodenumber=-1;fileamount; if(strcmp(filename,filelisti.name)=0) flag=i; if(db.inodefilelisti.inodenumber.blockamount=1) memset(db.datablockdb.inodefilelisti.inodenumber.directblockaddress1.space,0

    17、,64); db.inodefilelisti.inodenumber.blockamount=0; db.inodebitmapfilelisti.inodenumber=0; db.blockbitmapdb.inodefilelisti.inodenumber.directblockaddress1=0; db.inodefilelisti.inodenumber.directblockaddress1=-1;文件删除成功n else if(db.inodefilelisti.inodenumber.blockamount=2) memset(db.datablockdb.inodefi

    18、lelisti.inodenumber.directblockaddress2.space,0,64); db.blockbitmapdb.inodefilelisti.inodenumber.directblockaddress2=0; db.inodefilelisti.inodenumber.directblockaddress2=-1; else int temp=db.inodefilelisti.inodenumber.blockamount-2; db.blockbitmapdb.inodefilelisti.inodenumber.stairindexaddress=0; for(int j=0;temp; int temp1=db.data


    注意事项

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

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




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

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

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


    收起
    展开