《2022年minix文件系统研究 .pdf》由会员分享,可在线阅读,更多相关《2022年minix文件系统研究 .pdf(14页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、目录摘要. 1 1 引言. 1 1.1 研究背景 . 1 1.2 研究目的和意义 . 1 1.3 主要研究工作 . 2 2 MINIX 文件系统 . 2 2.1 MINIX 文件系统原理 . 2 2.2 MINIX 文件系统实现 . 6 2.2.1 核心数据结构分析 . 6 2.2.2 典型操作实现 . 8 3 总结. 12 致谢. 13 参考文献 . 13 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 14 页 - - - - - - - - - 1 MINIX 文件
2、系统研究摘要本文对文件系统进行了分析, 主要研究了 MINIX文件系统的基本原理,通过阅读代码,分析了MINIX 文件系统的实现中所用的主要数据结构, MINIX文件系统的工作流程以及典型操作的实现。关键词: MINIX,文件系统,表格管理1 引言1.1 研究背景对于长期的信息存储, 我们有如下三个基本要求: 1. 必须能存储大量的信息; 2. 在使用信息的进程终止时,信息必须保存下来;3. 多个进程可以并发地访问这些信息。解决所有这些问题的常用方法就是把信息以文件为单位,存储在磁盘或其他外部介质上。文件是由操作系统来管理的,包括文件的结构、文件的命名、文件的使用、文件的保护和文件的实现等,这
3、些都是在操作系统的设计中需要解决的问题。在一个操作系统中,负责处理与文件有关的各种事情的那一部分,就称为文件系统。文件系统由三部分组成: 与文件管理有关的软件、 被管理的文件以及实施文件管理所需的数据结构。从系统角度来看,文件系统是对文件存储器空间进行组织和分配,负责文件的存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,当用户不再使用时撤销文件等。1.2 研究目的和意义文件系统是操作系统的一个重要组成部分,是负责存取和管理文件信息的软件机构,通过对操作系统所管理的存储空间的抽象,向用户提供统一的、对象化的访问接口,屏蔽对物理设
4、备的直接名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 14 页 - - - - - - - - - 2 操作和资源管理。本文主要研究MINIX 操作系统的文件系统,通过分析 MINIX 的文件系统,了解MINIX 文件系统的基本原理和设计模式,掌握MINIX 的文件系统的实现,加深了对操作系统的理解。1.3 主要研究工作本文主要研究了 MINIX文件系统的基本原理, 并对 MINIX文件系统的实现进行了分析。2 MINIX 文件系统2.1 MINIX 文件系统原理和所有
5、的文件系统一样, MINIX文件系统也必须为文件分配和释放空间、记录磁盘块和空闲空间、提供某种方式来防止文件被非法使用等。 从本质上来说, MINIX文件系统只不过是运行在用户空间的一个大的C 程序。在读、写文件时,用户进程向文件系统发送一条消息,表明自己需要什么操作,而文件系统会完成相应的工作,并返回一个结果。文件系统实际上是一个网络文件服务器,只不过它正好和调用进程在同一台机器上运行。这种设计方式有深刻的含义。一方面,文件系统可以独立于MINIX的其他部分进行修改、调试和测试。另一方面,我们可以很方便地把整个文件系统移植到任何一台带有C编译器的计算机上,在那里进行编译链接,然后把它作为一个
6、独立的类UNIX的远程文件服务器。文件系统设计中存在许多关键问题:消息、文件系统的布局、位图、i 节点、块高速缓存、目录和路径、文件描述符、文件锁以及设备文件。1. 消息文件系统的结构基本上与内存管理器和所有的I/O 任务一样。文件系统的主循环程序不断地等待消息。当收到消息后,它首先提取消息的类型,然后以其为索引查找文件系统中处理各类消息名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 14 页 - - - - - - - - - 3 的过程指针表。随后调用相应过程,进行处
7、理后,返回状态值。文件系统再把回答消息发送给调用进程,然后回到循环的开始,等待下一条消息的到来。2. 文件系统的布局MINIX文件系统是一个自成体系的逻辑实体。它可以存储在任何一个块设备中,如软盘或硬盘分区。MINIX 文件系统与标准的UNIX 的文件系统基本相同,由6 部分组成:引导块、超级块、i节点位图、区段位图、 i 节点、数据区。 MINIX文件系统布局如图1 所示:图 1 一张软盘或一个小的硬盘分区上的磁盘布局每个文件系统都以一个引导块开始。引导块是计算机加电启动时可由 ROMBIOS 自动读入的执行代码和数据。但并非所有盘都用作引导设备,所以对于不用于引导的盘片,这一盘块中可以不含
8、代码。但任何盘片必须要含有引导块空间,以保持MINIX 文件系统格式的统一。如果内核文件放在文件系统中,那么就可以在文件系统所在的设备的第一个块(引导块空间)存放实际的引导程序,并由它来取得和加载文件系统中的内核映象文件。超级块包含了描叙文件系统布局的信息,其主要功能是给出文件系统各个部分的大小。和引导块一样,超级块的大小也是固定的 1024 字节。如果给定块的大小和i 节点数,我们可以很容易地算出 i 节点位图的大小和存放i 节点所需的块数。3. 位图MINIX 使用了两个位图来管理空闲的i-node和区段。当一个文件被删除时,很容易计算出该文件i-node 所在的位图块,并利用 cache
9、 来查找该块,找到后改变该文件所对应的i-node 位图所在的位。区段位图的操作类似。一般来说我们可能错误的从常理认为创建一个文件时,文件系统必须逐一地检查每一个位图位,以便可以找到一个空闲的名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 14 页 - - - - - - - - - 4 i-node ,然后把它用于新建的问题。但是在实际的工作过程中,在内存的超级块表中会有一个域指向了第一个可用的i-node ,所以我们可以直接使用。那么这个特殊域是如何做到指向第一个空闲
10、 i-node的呢?当一个i-node 被释放时,要检查这个被释放的i-node 是不是在当前第一个空闲i-node 之前,如果是,则指向刚释放的 i-node 。当整个分区上的i-node都被占用了时候,空闲i-node 地址域将被指向第0 号 i-node 。这样的机制同样使用于区段。4. i 节点在 MINIX中 i 节点的布局和 UNIX中几乎一样。如图2 所示:图 2 MINIX 的 i 节点i 节点的主要作用是给出文件数据块所在的位置。前 7 个区段名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - -
11、 - - - - - 第 5 页,共 14 页 - - - - - - - - - 5 号直接存在 i 节点中。在MINIX 发行版中,区段和块的大小都为1KB ,所以小于 7KB的文件可以不必使用间接块号。当文件的大小超过 7KB时,需要使用间接区段。 i 节点中含有模式信息,给出了文件的类型和保护标志位、SETUID位、SETGID 位,类型包括普通文件、目录、块设备文件、字符设备或者管道。i 节点中的link字段记录了多少个目录项正在指向这个i 节点。5. 块高速缓存MINIX使用块高速缓存来改进文件系统的性能。高速缓存使用一个固定长度的缓冲区数组来实现,每个缓冲区由头和体两个部分组成。
12、头里面包含有指针和计数器、标志位。体则包含了一个磁盘块大小的空间。所有未使用的缓冲区被连接在一条双向链表中,按最近一次使用时间的先后顺序排列,如图3 所示。为了快速判断某个块是否在缓存中,MINIX使用了哈希表。图 3 块高速缓存使用的链接表6. 目录和路径目录和路径名管理是文件系统的一个重要功能。MINIX文件系统的系统调用一部分是以文件名作为数据的标示的。在实际操作中实际需要的是目的文件的i-node 。文件系统需要在目录树中查找文件并找到对应的i-node 。7. 文件描述符在 read 和 write系统调用中会用到文件描述符,这个文件描述符是在文件被打开时返回的。文件系统首先是一个程
13、序,它有自己的地址空间,并在其中维护进程表的部分内容。在地址空间中有一个字段是一个数组,以文件的描述符编号作为索引。当给名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 14 页 - - - - - - - - - 6 定一个文件描述符时, 可以通过改数组找到相应的文件。在 MINIX中,每个文件都有一个32位的整数来描述即将读写的下一个字节的位置,这个整数成为文件位置,它是通过lseek系统调用来修改的。在 MINIX 中存在一个共享表filp,包含了所有被打开的文件的文
14、件位置。同时文件的i-node 也在其中。进程表中的文件描述符数组只要包含指向filp表项的指针就可以了。8. 文件锁在文件系统管理中,有一部分内容需要使用专门的表结构,这就是文件锁。 MINIX 在这个部分支持 POSIX标准,支持 IPC中的建议性文件锁,允许文件的任何部分或多个部分被标记位锁定。锁操作不是强制的,而是进程过程中的一种自觉行为,在执行存在潜在冲突的操作前检查文件锁。9. 管道和设备文件管道和设备文件与普通文件有很大不同。读取一个管道时: 如果管道为空,则读进程可能被阻塞,直到另一个进程把数据写入管道。类似地,当从终端读取数据时,进程也必须一直等待。因此,文件系统有必要把这些
15、请求挂起,等以后再执行。2.2 MINIX 文件系统实现2.2.1 核心数据结构分析文件系统中使用的各种数据结构和表格都定义在头文件中。有些数据结构还放在系统一级的头文件中。const.h定义了整个文件系统中用到的一些常量,如表的长度和标志位等; type.h 定义了 V1和 V2版本的 i 节点在磁盘上的结构;proto.h提供了一些函数原型; glo.h 定义了全局变量和用于输入和应答消息的缓冲区。文件系统的进程表部分包含在fproc.h文件中;文件 buf.h 中定义了块高速缓存; 文件 file.h中包含了中间表filp,主要用于存放文件的当前位置及i 节点指针;文件锁表file_lo
16、ck存放在lock.h中;在文件 inode.h中定义了 i 节点表 inode ,用于保存名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 14 页 - - - - - - - - - 7 当前正在使用的i 节点,数据结构如图4 所示;文件 param.h 为包含参数的消息字段定义了名称;文件super.h中定义了超级块表,数据结构如图5 所示。图 4 i 节点的数据结构定义名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - -
17、- - - - 名师精心整理 - - - - - - - 第 8 页,共 14 页 - - - - - - - - - 8 图 5 超级块表的数据结构定义文件 table.c中包含了一个经过初始化的数组call_vector,它是一个指针数组,在主循环中用来决定系统调用号与相应的处理函数之间的映射关系。2.2.2典型操作实现1. 表格管理对于每一个主要的表格, 都有一个相关的文件, 该文件包含了该表格的各种管理函数。这些函数会被大量地调用,并成为表格与文件系统之间的主要接口。块管理:块高速缓存是由文件cache.c 中的函数来管理的。 这个文件包含 9 个函数,各函数的功能如图6 所示。名师资
18、料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 14 页 - - - - - - - - - 9 图 6 用于块管理的过程i 节点管理:块高速缓存并不是唯一需要支持函数的文件系统表,i 节点同样也需要。 i 节点是由 inode.c 中的函数管理的,很多管理 i节点表的函数与块管理函数非常相似,各函数的功能如图 7 所示。图 7 用于 i 节点管理的过程超级块的管理:文件 super.c 中包含了超级块和位图的管理函数,总共有 6 个函数,各函数功能如图8 所示。名师资料总结
19、- - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 14 页 - - - - - - - - - 10 图 8 用于管理超级块和位图的过程文件描述符的管理: MINIX使用了专门的函数来管理文件描述符和 filp表,这些函数位于 filedes.c中。其中,get_fd 函数为创建或打开的文件分配一个空闲的文件描述符和一个空闲的filp表项, get_filp函数用于检查一个文件描述符是否在合适的范围内,find_filp函数通过 filp表来查找潜在的读进程。文件锁: POSIX记录锁
20、函数如图9 所示。文件 lock.c中只有两个函数,其中, lock_op 会检查指定的锁范围是否有效,锁被清除后, lock_revive会唤醒所有阻塞在这个锁上的进程。图 9 POSIX 的建议性记录锁操作,这些操作通过系统调用FCNTL请求2. 主程序文件系统的主循环包含在文件main.c 中。在调用 fs_init进行初始化后,就进入主循环。它调用get_work 等待下一条请求消息的到来。当文件系统启动后, 它会立即进入 fs_init中的一个循环, 这个循环中的第一条语句是去调用receive ,获得在 PM的 pm_init初始化函数所发出的一条信息,每条信息包含一个进程号和一个
21、PID。前者用于文件系统的进程表中的索引,后者被保存在相应表项的 fp_pid字段。接下来,完成文件系统自己的初始化。首先,一些重要的常量被测试并验证其有效性,然后初始化高速缓存和设备表,并在必名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 14 页 - - - - - - - - - 11 要时装入 RAM 盘以及根设备的超级块等。在完成了与进程管理器的交互之后,fs_init调用的第一个函数是 buf_pool ,用于构建块高速缓存所用到的链表。在buf_pool之
22、后,下一个被调用的函数是build_dmap ,接下来被调用的是load_ram,它负责为RAM盘分配空间,如果引导参数需要,还可以在上面装入根文件系统。文件 main.c 中的最后一个函数是load_supper ,它初始化超级块表,并把根设备的超级块读入内存。3. 对单个文件的操作创建、打开和关闭文件:文件open.c 中包含有 6 个系统调用的代码,分别是 creat ,open, mknod, mkdir, close和 lseek 。读文件:文件 read.c 中包含 do_read, read_write , rw_chunk,read_map,rd_indir,read_ahea
23、d 和 rahead 函数。写文件: 文件 write.c中包含 do_write , write_map , wr_indir ,clear_zone ,new_block 和 zero_block 函数。管道:文件 pipe.c 中包含 do_pipe ,pipe_check ,suspend,release, revive, do_unpause , select_request_pipe和select_match_pipe函数。4. 目录和路径将路径名转换成i 节点:许多系统调用(如open,unlink和mount)都以路径名作为参数。这些系统调用在开始执行它们自己的任务之前通常都要
24、先获得目标文件的i节点。路径名的解析是在文件 path.c 中进行的。挂装文件系统: mount和 unmount这两个系统调用可以将不同设备上的相互独立文件系统“黏连”在一起,形成一个无缝的目录树。挂装是通过把被挂装文件系统的根目录i节点及超级块读入内存,并在超级块中设置两个指针来实现的。卸载文件系统要比挂装容易得多。挂装和卸载函数在文件mount.c 中实现。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 14 页 - - - - - - - - - 12 3 总结
25、本文主要研究了 MINIX文件系统的基本原理, 并对 MINIX文件系统的实现进行了分析。从本质上来说, MINIX文件系统只不过是运行在用户空间的一个大的 C 程序。在读、写文件时,用户进程向文件系统发送一条消息,而文件系统完成相应的工作。同时,文件系统实际上是一个网络文件服务器,只不过它正好和调用进程在同一台机器上运行。这种设计方式有深刻的含义。一方面,文件系统可以独立于MINIX的其他部分进行修改、调试和测试。另一方面,我们可以很方便地把整个文件系统移植到任何一台带有C编译器的计算机上。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - -
26、- - - 名师精心整理 - - - - - - - 第 13 页,共 14 页 - - - - - - - - - 13 致谢参考文献1. Andrew S. Tanenbaum, Albert S. Woodhull. Operating Systems Design and Implementation, Third Edition, Pearson Education, Inc. 2006. 2. 汤子瀛 等. 计算机操作系统 . 第 3 版. 西安电子科技大学出版社 . 2011. 3.Bovet, D.P. Understanding the Linux Kernel. OReilly & Associates, Inc. 2001. 4. 网络资源 . 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 14 页,共 14 页 - - - - - - - - -