Minix是荷兰Vrjie大学的Andrew S. Tanenbaum教授编写的一个类Unix操作系统,虽然在功能和规模上不能和Unix相比,但作为操作系统的学习对象是非常合适的。Minix一共约一万两千行代码,在Tanenbaum教授所著的“Operating Systems: Design and Implementation”一书中有具体的注释和讲解。
Minix虽然是Unix的精简,但其组件齐全,文件系统、进程调度、内存管理等部分的数据结构、算法和设计思想也比较成熟,本文将针对Minix的文件系统进行详细描述和讲解,同时结合Linux中常中的EXT3文件系统进行横向的比较。
文件系统是操作系统对磁盘等存储设备进行管理的程序,它对文件在存储设备上的组织方式、数据表示和主要操作进行管理和实现。具体地说,它负责为用户新建文件,保存、读、写、权限控制和撤销等。
Minix文件系统
Minix文件系统本质上是一个运行于Minix用户态的C程序。用户程序通过给文件系统发送消息来进行文件的读写,文件系统完成之后回复消息。Minix文件系统可以说是一个网络文件服务器程序,只是这个程序和调用者运行在同一台机器上而已。Minix文件系统在设计时考虑了一下几个方面,首先,Minix文件系统是可以在独立于Minix文件系统之外进行修改、测试和试验的。其次,Minix文件系统可以很容易的在任意带有C编译器的机器上编译、运行。唯一需要注意的是不同操作系统之间消息的传递机制可能是不同的。下面将对Minix文件系统的几个关键域进行概述。这些关键域包括消息、文件系统的布局、位图、inode、块高速缓存、目录、文件描述符、文件锁以及设备文件等。
消息
消息是由用户进程发送给文件系统,指明了文件系统要完成的操作和操作对象。在Minix中大部分用于系统调用。主要消息如
文件系统在处理消息时是通过不断循环来应带消息的。当获取到一个消息后,文件系统以消息的类型作为索引查找一张函数表,找出处理该消息的函数。对应的函数返回操作结果。文件系统将结果返回给消息的发送者。
文件系统的布局
Minix文件系统是一个逻辑上独立的实体,它包括i-nodes、目录和数据块,可以被存储在任何块设备上。不管在什么设备上,Minix文件系统都有相同的布局。图表明了具有64个i-node和1KB块。在这个简单的例子中 ,位图区域是一个1KB的块,一个位图区域的byte