【2017年整理】操作系统课程设计-信息学院计本0601班范海青113

上传人:爱****1 文档编号:950236 上传时间:2017-05-23 格式:DOC 页数:30 大小:382KB
返回 下载 相关 举报
【2017年整理】操作系统课程设计-信息学院计本0601班范海青113_第1页
第1页 / 共30页
【2017年整理】操作系统课程设计-信息学院计本0601班范海青113_第2页
第2页 / 共30页
【2017年整理】操作系统课程设计-信息学院计本0601班范海青113_第3页
第3页 / 共30页
【2017年整理】操作系统课程设计-信息学院计本0601班范海青113_第4页
第4页 / 共30页
【2017年整理】操作系统课程设计-信息学院计本0601班范海青113_第5页
第5页 / 共30页
点击查看更多>>
资源描述

《【2017年整理】操作系统课程设计-信息学院计本0601班范海青113》由会员分享,可在线阅读,更多相关《【2017年整理】操作系统课程设计-信息学院计本0601班范海青113(30页珍藏版)》请在金锄头文库上搜索。

1、操作系统课程设计学 院:信息科学与工程学院专 业: 班 级: 学 号: 学生姓名: 指导教师: 2009 年 4 月 18 日一、实验内容1、 题目:模拟 UNIX(linux)文件系统问题描述在任一 OS 下,建立一个大文件,把它假象成一张盘,在其中实现一个简单的 模拟 UNIX 文件系统 。二、概要设计在现有机器硬盘上开辟20M的硬盘空间(利用一个循环操作,在 Disk中写入20M的零,创建一个20M的文件即是) ,作为设定的硬盘空间。磁盘块物理模型如下文件则是指具有文件名的若干相关元素的集合。文件属性主要如下文件名:实现了按名存取,文件名和目录文件允许重名。文件类型:可以从不同的角度来规

2、定文件的类型。普通文件、管道文件、块文件。文件长度:指文件的当前长度,长度的单位可以是KB。文件的物理位置:文件在磁盘中物理的存储,并打印出来。此次UNIX文件系统最简单的目录结构。整个文件系统中只建立一张目录表,每空闲盘块栈(存放空闲盘块)目录区 各盘块(每个占1KB)存放文件内容,为程序设计方便,iNode 节点也存放在此处。1kb(目录快)30kB20480kb0kb(超级块信息)个文件一个目录项,目录项含有文件相关信息。每建立一个新文件要先检索所有的目录项保证文件名唯一。然后找出一空白目录项填入相关信息,并修改状态位。删除文件是找到对应目录项,回收所占用空间,清除该目录。逻辑结构如下文

3、件名 索引节点编号文件名1 INode文件名2 INode文件名3 INode. .Unix文件系统当文件很多时,文件目录要占用大量的盘块。在查找目录的过程中,可能需要多次启动磁盘读入目录文件的盘块。在检索目录文件中只用到了文件名,显然,文件的物理地址等文件的描述信息在检索目录时不需调入内存。为此,可以把文件名与文件描述信息分开。使文件描述信息单独形成一个索引结点。把文件描述信息单独形成一个称为索引结点的数据结构,简称为inode;文件目录中的每个目录项,则仅由文件名及指向该文件所对应的inode的指针所构成。这样,为找到一个文件的平均启动磁盘的次数减少很多模型如下: Root Fan.txt

4、A B存储空间的分配与回收成组链接法首先,建立操作系统课程的设计模型。这个系统将利用一个 20M 的文件作为自己的磁盘空间,设计时由于一个盘块占用 1KB,所以 20M 空间可以产生 20480 个盘块系统本身将 0# - 30#块作为系统区,所以用户区便剩下 20450 个盘块,每 50 个盘块INode 节点INode 节点目录节点节点为一组,一共可以分为 409 个组。将每一组含有的盘块总数N和该组的盘块号,记入其前一组的第一个盘块的 S.free(1)S.free(50)。这样由各组的第一个盘块形成了一条链。将第一组的盘块总数和所有的盘块号,记入空闲盘块号栈中,作为当前可供分配的空闲盘

5、块号。最末一组只有49个盘块,其盘块号分别记入其前一组的S.free(1)S.free(99)中,而在S.free(0)中则存放0,作为空闲盘块链的结束标志。基本功能1、初始化2、建立文件3、建立子目录4、打开文件 5、删除文件6、删除目录7、显示目录三、详细设计和编码正规文件i 结点文件类型 目录文件(共 1byte) 块设备管道文件 。物理地址(索引表)共有 13 个表项,每表项 2byte。文件长度 4byte。联结计数 1bytestruct INodeFileSpec fileSpec;short iaddr13;int fileLength;int linkCount;文件名 14

6、byte(5)目录项信息i 结点号 2bytestruct DirChildchar filename14;short i_BNum ;struct DirNodeDirChild childItem64;short DirCount;定义磁盘文件名const char FileName=os.txt;默认为空的文件名const char NullName=0000000000000;默认目录文件的长度const int DirLen=1; 默认超级块的快号const short SSNum=-1; /super block num定义枚举类型,普通,目录,块文件,管道文件enum FileS

7、pecNORMAL,DIR,BLOCK,PIP;/0,1,2,3short SS51; /超级栈,指针为 SS0,保存当前可用盘快short freeBlockNum=0; /当前可用盘快所在组记录的盘快号short freeTotalB=20450; 文件总长度short freeDirNode29; /可用索引节点栈short freeDirCount=30; /索引节点栈指针short currDirNum; /当前目录所在的磁盘号short currINum;DirNode *currDir; /当前目录节点INode *iNode; /当前 iNode 节点系统调用函数列表系统调用原

8、型 功能 入口、出口参数说明Void ArrarEqual(short arr51,short begin,short end)arr51数组赋值,在成组链接初始化时使用void BWrite(short arr51,short diskNum)往磁盘中写入短数组void BWriteArr(short arr512,short diskNum )重构 BWrite,实现一个数组的写入,数组长度不确定void BRead(INode *iNode,short diskNum)从磁盘中读出 iNode 节点void BRead(short arr51,short diskNum)从磁盘中读出数组

9、void BReadArr(short arr512,short diskNum)从磁盘中读出数组,成组链接多级索引使用BWrite(DirNode *currDir,short diskNum)写入一个目录项Void BWrite(INode *iNode,short diskNum)写入一个 iNodeVoid AssAnEmpty() 分配一个空闲的普通快short AssAnDir() 分配一个空闲的目录快short IsFileExist(DirNode *currDir,char fileName14)判断一个文件是否存在 -1 不存在,否则返回文件所在磁盘号bool IsFile

10、(INode *iNode,short diskNum)判断一个文件是一个普通文件bool IsDir(INode *iNode,short diskNum)判断一个文件是一个索引文件void CreateINode(INode *iNode,FileSpec fileSpec,short linkCount,short length)创建一个 iNode,并分配磁盘空间void CleanINode(INode *iNode)清空 iNode 信息,并分配磁盘空间void InsertDir(DirNode *currDir,char fileName14,short blockNum)将当

11、前目录项插入到内存中目录项中void ShowFileInfo(INode 打开一个文件,显示文件信息*iNode,char fileName14)void ShowBlockInfo(INode *iNode)打开一个文件,显示文件占用磁盘空间信息void DelDirItem(DirNode *currDir,char fileName14)删除索引中一项void CallBackOne(short diskNum)回收一块空余磁盘片void CallBackINode(short diskNum)回收文件的 iNOde 节点主要函数列表函数原型 功能 入口、出口参数说明Format 创建

12、 20M 磁盘void Init(DirNode *currDir,FileSpec fielSpec,char filename14,INode *iNode,short diskNum)初始化,创建个目录节点并初始化超级栈Init() 初始化索引栈void Linkdisk() 成组链接初始化void InitCreate(DirNode *currDir,FileSpec fielSpec,char filename14,INode *iNode,short diskNum)创建一个文件节点,并分配 INOde 和磁盘空间void Create(DirNode *currDir,char

13、 fileName14,INode *iNode,short length,FileSpec fileSpec)存在文件,并分配iNOde 节点和磁盘空间void Mf(DirNode *currDir,char fileName14,INode *iNode,short length)创建一个文件void Md(DirNode *currDir,char fileName14,INode *iNode,short length)在当前目录创建一个子目录void Open(DirNode *currDir,char fileName14,INode *iNode)打开文件,显示文件信息void

14、 Del(DirNode *currDir,char fileName14,INode *iNode)删除一个文件void Rd(DirNode *currDir,char fileName14,INode *iNode)删除一个目录void Dir(DirNode *currDir,INode *iNode) 显示目录项的内容void exit(DirNode *currDir,INode *iNode) 退出,并销毁资源void AuthorMessage() 打印版权信息void help() 提示信息主框架开 始打印作者信息初始化磁盘合法性检查输入命令显示:命令错误falseo有新建文

15、件 新建目录 打开文件 删除文件 删除目录 显示目录立退出初始化命令format利用文件创建命令可在硬盘上创建一个名为 Disk 的 20M 的空间,并将该磁盘空间整体假想成一个独立硬盘,我们将在这张封闭的磁盘上进行各种关于文件的操作。Format 具体操作如下:(1) 利用一个循环操作,在 Disk 中写入 20M 的零。(2) 然后将 0#块,即超级块中写入 31# - 80#的盘块号,并将全部可用剩余盘块数FreeBlock=20450 记录在 0#块中。(3) 同时将 80#,130#,180#(间距 50)等 408 个(第 409 个组头不存在下一组)盘组的组头中写入成组连接好的下

16、一组盘块号。2、系统初始化自动完成假如 Disk 已被格式化完毕,那么系统便将进行下一步,那就是初始化。初始化主要完成将根目录项读入内存,便于文件操作,并将 0#超级块中保存的当前可用盘块号写入内存中的超级栈中,具体操作如下:(1) 初始化一个超级栈,将超级块中保存的当前可分配盘块号读入栈中。(2) 定义一个全局变量 FreeBlock,用来记录当前全部可用的盘块总数。3、建立文件mf filename如果终端发来的命令格式为 mf filename,则可以判断出这是建立文件的命令。要想成功建立一个文件,首先需要判断在同级目录下是否有重名的文件,并且需要判断是否有足够的空间允许建立一个指定长度的文件。mf(代表 make fi

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号