第九章 系统实验.ppt_第1页
第九章 系统实验.ppt_第2页
第九章 系统实验.ppt_第3页
第九章 系统实验.ppt_第4页
第九章 系统实验.ppt_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

9 2 1外存管理 文件系统是操作系统中负责管理和存取文件信息的软件机构 负责文件的建立 撤消 存入 读写 修改和复制 还负责完成对文件的按名存取和进行存取控制 以及向用户提供使用文件系统的接口 系统中的每个文件包括文件本身和属性两部分 文件系统在逻辑上的层次结构如图9 1所示 图9 1 在现代计算机系统中 一般都需要存储大量的文件 为了能有效的管理这些文件 必须对它们加以妥善的组织 以便做到用户只需向系统提供所要访问的文件的名字 就能够快速 准确地找到指定文件 目录管理涉及到文件控制块 FileControlBlock 和索引节点 目录管理可以分为单级目录结构 两级目录结构和树型目录结构 9 2 2目录管理 图9 2两级目录结构 文件系统作为一个高效管理文件的程序 其运行更多的是在系统内部进行 而用户所需要关心的只是它的接口 文件系统通常向用户提供两种接口 命令接口这是用户与文件系统之间进行交互的接口 用户可以通过键盘终端键入命令来实现与文件系统的交互 程序接口这是用户程序与文件系统之间的接口 用户程序可以通过系统调用取得文件系统的服务 完成自己所需的功能 9 2 3文件系统的接口 在Linux当中 普通文件和目录文件保存在称为 块物理设备 的磁盘或者磁带等存储介质上 一套Linux系统支持若干个物理盘 每个物理盘可以定义一个或者多个文件系统 每个文件系统均由逻辑块的序列组成 一般来说 一个逻辑盘可以划分为几个用途各不相同的部分 引导块 超级块 inode区以及数据区 Linux使用一种叫虚拟文件系统的技术从而可以支持多达几十种的不同文件系统 而EXT2是Linux自己的文件系统 它有几个重要的数据结构 超级块 inode 索引结点 组描述符 块位图 inode位图等 其中最重要的一个是超级块 用来描述目录和文件在磁盘上的物理位置 文件大小和结构等信息 另一个是inode 文件系统中的每个目录和文件均由一个inode描述 它包含 文件模式 类型和存取权限 数据块位置等信息 一个文件系统除了重要的数据结构之外 还必须为用户提供有效的接口操作 比如EXT2提供的OPEN CLOSE接口操作 9 2 4Linux的EXT2文件系统 EXT2文件系统将它所占用的逻辑分区划分成块组 blockgroup 如图8 3所示 EXT2的组描述符 图8 3EXT2文件系统的结构图8 3EXT2文件系统的结构 fopen 打开文件格式 FILE fopen constchar filename constchar mode fwhite和fread 读写文件size tfwite constvoid buffer size tsize size tcount FILE stream size tfread void buffer size tsize size tcount FILE stream fseek 定位文件intfseek FILE stream longoffset intorigin 9 2 5可能用到的编程技术 真正的文件系统在对外存进行管理时 会涉及到许多有关硬件 设备管理方面的底层技术 一方面这些技术不属于操作系统核心内容 另一方面过多的内容容易造成实验者顾此失彼 所以在这里我们推荐一种使用内存来模拟外存的方式 这样就可以跳过这些硬件技术而把精力直接放在数据结构设计和操作算法实现上面 假定pInode是一个指向inode结构的指针 而且它已经放入了需要的数值 现在需要将其写入到特定位置 可用如下代码实现 fd fopen filesystem w b fd是FILE指针类型 w便是 写方式 b表示二进制fseek fd specific area SEEK SET fd是文件指针 specific area为整形 为需要入pInode的位置fwrite pInode 1 sizeof inode fd 写入pInode信息 9 2 6用内存来模拟外存 索引节点的数据结构structinode structinode i forw structinode i back chari flag unsignedinti ino unsignedinti count unsignedintdi addr NADDR unsignedshortdi number unsignedshortdi mode unsignedshortdi uid unsignedshortdi gid unsignedshortdi size 9 4 1二级文件系统的的设计与实现 超级块的数据结构structfilsys unsignedshorts isize unsignedlongs fsize unsignedints nfree unsignedshorts pfree unsignedints free NICFREE unsignedints ninode unsignedshorts pinode unsignedints inode NICINOD unsignedints rinode chars fmod 用户和口令的数据结构structuser unsignedshortu default mode unsignedshortu uid unsignedshortu gid unsignedshortu ofile NOFILE structpwd unsignedshortp uid unsignedshortp gid charpassword PWDSIZ 有关目录的数据结构structdinode unsignedshortdi number unsignedshortdi mode unsignedshortdi uid unsignedshortdi gid unsignedlongdi size unsignedintdi addr NADDR structdirect chard name DIRSIZ unsignedintd ino structdir structdirectdirect DIRNUM intsize 程序设计思想 程序流程 图9 4 main c参考程序如下 include include include include include structure h include creat h include access h include ballfre h include close h include delete h include dir h include format h include halt h include iallfre h include install h include log h include name h include open h include rdwt h include igetput h structhinodehinode NHINO structdirdir structfilesys ofile SYSOPENFILE structfilsysfilsys structpwdpwd PWDNUM structuseruser USERNUM FILE fd structinode cur path inode intuser id unsignedshortusr id charusr p 12 charsel chartemp dir 12 main unsignedshortab fd1 ab fd2 ab fd3 ab fd4 i j char buf intdone 1 printf nDoyouwanttoformatthedisk yorn n if getchar y printf nFormatwilleraseallcontextonthedisk n printf Formating n format printf nNowwillinstallthefillsystem pleasewait n install printf n Login nPleaseinputyouruserid scanf u case 2 创建目录 printf pleaseinputdirname scanf s temp dir mkdir temp dir break case 3 改变当前目录 printf pleaseinputdirname scanf s temp dir chdir temp dir break case 4 创建文件 printf pleaseinputfilename scanf s temp dir ab fd1 creat 2118 temp dir 01777 buf char malloc BLOCKSIZ 6 5 write ab fd1 buf BLOCKSIZ 6 5 close 0 ab fd1 free buf break case 0 退出文件系统 logout usr id halt done 0 default printf error nNosuchcommand pleasetryagain nOryoucanaskyourteacherforhelp n break elseprintf Usercanseled nGoodBye n 文件系统的设计思想 真正的文件系统 在涉及到文件读写 文件创建等操作时 会用到内外存之间通信的语句 这些与底层硬件有关的编程一方面会给完成实验的人员制造不小的麻烦 另外更为重要的是这些内容并不属于操作系统原理的范畴 因此我们所设计的文件系统程序与真正的文件系统在某些方面有着本质的不同 下面的表9 1是一个大致的比较 表9 1实验文件系统与真实文件系统的区别 实验要求设计的文件系统使用一个二进制文件来模拟磁盘空间 该 文件系统 的所有用户信息 节点信息 超级块信息 文件信息均以二进制方式保存在文件的特定地方 图9 5是这个二进制文件的大体数据地址安排 图9 5数据地址安排 数据块的安排初始化数据块位于format h上面 下面是相关的算法描述 初始化数据块的算法流程图如图9 6所示 NICFREE 常量 为每个块组的大小 程序中设为50 几个重要的算法处理 图9 6初始化数据块 几个重要的算法处理 数据块的分配和回收数据块的分配和回收由位于ballfre h的代码完成 1 balloc 分配数据块 几个重要的算法处理 图9 7数据块的分配 几个重要的算法处理 bfree 回收数据块 几个重要的算法处理 图9 8数据块的回收 数据块的回收的算法流程图如图9 8所示 下面是部分参考程序源代码 几个重要的算法处理 几个重要的算法处理 access 访问控制 图9 9访问控制 访问控制的算法流程图如图9 9所示 下面是部分参考程序源代码 文件的相关操作 create 文件创建 图9 10创建文件 文件的相关操作 创建文件的算法流程图如图9 10所示 下面是部分参考程序源代码 文件的相关操作 delete 删除文件 图9 11删除文件 文件的相关操作 删除文件的算法流程图如图9 11所示 下面是部分参考程序源代码 文件的相关操作 read 读文件 图9 12读文件 文件的相关操作 读文件的算法流程图如图9 12所示下面是部分参考程序源代码 文件的相关操作 write 写操作 图9 13写文件 文件的相关操作 写文件的算法流程图如图9 13所示下面是部分参考程序源代码 文件的相关操作 open 打开文件 图9 14打开文件 文件的相关操作 打开文件的算法流程图如图9 14所示 下面是部分参考程序源码 目录操作 ls 浏览目录 图9 15浏览目录 目录操作 浏览目录的算法流程图如图9 15所示 下面是部分参考程序源码 目录操作 mkdir 创建目录 图9 16创建目录 目录操作 创建目录的算法流程图如图9 16所示下面是部分参考程序源码 目录操作 chdir 改变当前目录 图9 17改变当前目录 目录操作 修改目录的算法流程图如图9 17所示 下面是部分参考程序源码 用户的登陆与注销操作 login 用户登陆 图9 18用户登陆 用户的登陆与注销操作 用户登陆的算法流程图如图9 18所示 下面是部分参考程序源码 用户的登陆与注销操作 logout 注销用户 图9 19注销用户 用户的登陆与注销操作 注销用户的算法流程图如图9 19所示 部分参考程序源代码如下 文件系统的安装和退出 install 安装文件系统 图9 20安装文件系统 文件系统的安装和退出 安装文件系统的算法流程图如图9 20所示 下面是部分参考程序源码 文件系统的安装和退出 halt 退出文件系统 图9 21退出文件系统 文件系统的安装和退出 退出文件系统的算法流程图如图9 21所示 下面是部分参考程序源码 程序说明 实验所提供的代码为C语言所编写 该程序模拟文件系统所提供的操作有 login logout ls mkdir chdir和create 即创建一个文件 等等 所提供的功能通过主程序的菜单选择来实现 1 用户说明代码内已预置了五个用户 其用用户ID和口令分别为 用户ID口令2116don12117don22118abcd2119don42220don5 2 源文件的简要说明structure h定义了程序中用到的数据结构create h文件创建dir h目录创建 删除 改变当前目录等log h登陆与注销操作access h访问控制ballfre h数据块的分配与回收close h关闭文件delete h删除文件format h初始化数据块halt h退出文件系统iallfre h索引节点的分配与释放igetput h获取或释放i节点Install h安装name h文件搜索open h打开文件rdwt h读写文件main c主函数 9 4 2EXT2文件系统跟踪程序的设计与实现 一 程序设计思想EXT2文件系统跟踪程序结构框图如图9 22所示 图9 22程序结构框图 二 程序实现main 函数此函数的主要功能是在确认设备及文件系统正确后 打开并初始化超级块 然后显示菜单 可以根据自己的需要来选择使用其中的功能 流程图如图9 23 super 函数此函数的主要功能是显示超级块的数据结构中每条字段的信息 程序流程图如图9 24 图9 24super 函数程序流程图 show group 函数 显示第一块组的信息for i 0 i group blocks i printf n nGroup dof d i group blocks 1 count i group i i count 询问是否查看下一块组信息if i group blocks 1 while 1 printf n nDoyouwanttoviewthenextblock y n scanf s 此函数的主要功能是显示每块组的数据结构各字段的信息 并且可以根据需要查看块位图和索引节点位图的信息 程序流程图如图9 25和图9 26 下面为部分代码 str char malloc strlen tmp strcpy str tmp if strcmp str n 0 strcmp str N 0 strcmp str Y 0 strcmp str y 0 break 不查看下一块组信息 退出if strcmp str rep1 0 strcmp str rep2 0 break 图9 25group 函数程序流程图 图9 26show group 函数程序流程图 directory 函数 此函数的主要功能是根据输入的路径显示其目录下所有文件的内核目录数据结构字段信息 路径文件名分析while search ptr ch 1 if i1 0 ptr continue elseif i1 0 dir name char malloc i1 1 n1 0 while n1 i1 dir name n1 ptr ptr n1 dir name n1 0 if strlen dir name strlen root if strcmp dir name root 0 ptr full dir name ptr x find block no 2 2号节点为根目录保留节点x x 4096 i1 0 while search full dir name ch 1 if i1 0 full dir name continue elseif i1 0 dir name char malloc i1 1 n1 0 while n1 i1 dir name n1 full dir name full dir name n1 dir name n1 0 full dir name i1 0 show if file 1 printf n sisnotadirectory n dir name file 0 return 无效路径报错if wrong name 1 wrong name 0 gotoagain 图9 27directory 函数程序流程图 inode 函数 此函数的主要功能是根据输入的文件的索引节点号显示其的索引节点的数据结构各字段信息 并且可以根据需要以ASC码或者十六进制码查看文件内容 程序流程图如图9 28 以下是部分代码 对访问的索引节点权限的判断Inode void super block buffer printf nMode d Ino

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论