操作系统第四次实验报告_文件系统.docx

  1. 1、本文档共37页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
实验四 文件系统 刘唯墨安全 0801 实验介绍 本实验要求在假设的 I/O 系统之上开发一个简单的文件系统, 这样做既能让实验者对文 件系统有整体了解,又避免了涉及过多细节。用户通过 create, open, read 等命令与文件系统 交互。文件系统把磁盘视为顺序编号的逻辑块序列,逻辑块的编号为 0至L-1。I/O系统利 用内存中的数组模拟磁盘。 实际物理磁盘的结构是多维的: 有柱面、 磁道、扇区等概念。 I/O 系统的任务是隐藏磁 盘的结构细节, 把磁盘以逻辑块的面目呈现给文件系统。 逻辑块顺序编号, 编号取值范围为 0至L -1,其中L表示磁盘的存储块总数。实验中,我们可以利用字符数组 ldisk[L][B] 构 建磁盘模型, 其中 B 表示每个存储块的长度。 I/O 系统从文件系统接收命令, 根据命令指定 的逻辑块号把磁盘块的内容读入命令指定的内存区域, 或者把命令指定的内存区域内容写入 磁盘块。内存区域内容写入磁盘块。 整体组织 注:我定义的文件系统中,磁盘分为两大部分:数据区和保留区。其中保留区中又包含位图区和文件 描述符区,数据区的首部是文件的目录项,也就是说,文件的目录项在文件创建时会创建相应的目录 项在数据区的文件首部;而位图区用于表征数据的占用情况,例如数据区的第 N 块被分配了,那么位 图区中也要做相应的改变。 文件描述符 注:文件描述符位于保留区后半部, 用于分为两类型, 即表示目录的 0 号描述符和 1 号以后的描述符, 用于表示文件的长度和分配块情况,具体看上图。 目录项 注:目录项位于数据区的首部,目录项的 0 位用于保存文件描述符的序号, 1 号以后用于存放文件名 总结: 一个文件的所有存放于由位视图,文件描述符,目录项和数据区表征。 ① 对磁盘的操作: 字符数组(L*B)模拟磁盘,考虑到文件系统和 I/O系统(磁盘)不是同一层,故将所有对磁盘的操 作只能规约为这二者之间的接口来操作: void read_block(int,char *); void read_block(int,char *); // 文件系统与 IO 设备的接口函数,读取块 void write_block(int,char *);// 文件系统与 IO void write_block(int,char *); 也就是说,之后的文件的创建,删除,打开,关闭,指针定位等操作,里面牵扯到磁盘内容读写的步 骤,全部需要用这两个接口完成,然后这两个接口对磁盘的操作是以块为单位的,所以例如某些操作,只 要更改磁盘中的某一块中的某一位,则需要先读取某一块存于零时数组中,然后修改这个数组的某一位, 然后再将这个数组写回磁盘。 ② 对文件的操作: 文件的创建 int create(char *) . 找一空闲文件描述符 . 在文件目录里为新创建的文件分配一个目录项, (可能需要为目录文件分配新的磁盘块) . 在分配到的目录项里记录文件名以及描述符编号 . 返回状态信息 文件的删除 int destroy(char *) . 在目录里搜索该文件的描述符编号 . 删除该文件对应的目录项,并更新位图 . 释放文件描述符 . 返回状态信息 文件的打开 int open(char *) . 搜索目录找到文件对应的描述符序号 . 在打开文件表中分配一个表目 . 在分配到的表目中把读写指针置为 0 ,并记录描述符编号 . 读入文件的第一块到读写缓冲区中 . 返回分配到的表目在打开文件表中的索引号 文件的关闭 int close(int) . 把缓冲区的内容写入磁盘 . 释放该文件再打开文件表中对应的表目 . 返回状态信息 文件的写 int write(int,int,int) . 写的内容若小于缓冲区内容,则直接写入缓冲区,完成写操作(关闭的时候会将缓冲区写入文件) . 入写入的内容,缓冲区无法一次装完,则需要填满缓冲区,然后将缓冲区写入文件,腾出缓冲区, 然后再写入缓冲区, 碰到缓冲区满的情况便写入文件, 腾出缓冲区, 以 便文件的写入, 完成写操作。 . 返回状态信息 文件的读 int read(int,int,int) . 将文件整个内容整个取出在一个临时字符数组中 . 根据要求的读取参数定位读写位置,输出读取内容,完成读操作 . 返回状态信息 文件指针定位 int lseek(int,int) . 把文件的读写指针移动到 pos 指定的位置。 pos . 是一个整数,表示从文件开始位置的偏移量。文件打开时,读写指针 . 自动设置为 0 。每次读写操作之后,它指向最后被访问的字节的下一 . 个位置。 lseek 能够在不进行读写操作的情况下改变读写指针能位置。 实验过程 该文件系统根据输入的指令来对文件系统的操作 命令

文档评论(0)

dingfulaowang + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档