2.6.3 MINIX头文件
include/minix/ 和 include/ibm/ 目录包含了MINIX特有的头文件。 include/minix/ 中的文件对任何平台上的MINIX实现都是需要的。include/ibm/ 中定义了IBM 类型机器上的MINIX实现所特有的数据结构和宏。
先从minix/目录开始。config.h (2600行)被MINIX所有部分的主控头文件所包含,并且它是编译器实际上处理的第一个文件。当因硬件差异或对操作系统的使用方式不同而需要对MINIX的配置作修改时,只需要编辑该文件并重新编译即可。用户设置的参数均放在该文件的第一部分。其中第一个是参数MACHINE。在一台PC上,编译器自行决定MINIX应针对哪种机器进行编译。PC上标准的MINIX编译器是Amsterdam Compiler Kit (ACK)编译器,它通过在 __STDC__之外再定义一个宏 __ACK__来标识自己。同时它还定义一个宏 _EM_WSIZE,以指定目标机的字长(以字节为单位)。
Config.h 文件中的其他定义允许在特殊安装中进行其他需求的定制。
下一个文件是 const.h (2900行)。通过它可以理解头文件的另一种普遍用法。在这里我们发现一些常量定义,在许多地方用到,通过这些定义我们可以防止发生变量在多处定义不一致的错误。
const.h 中有几处定义值得注意。EXTERN被定义为 extern (2906行)。EXTERN用法只是增强MINIX移植性的一种途径,因为这样一来,即使在链接程序不支持变量多重定义的机器上,MINIX也能够被链接成功。PRIVATE被定义为 static 的同义词。对于那些不会在定义文件以外被引用的过程和数据,它们往往被声明为PRIVATE以使其名字在文件之外不可见。PUBLIC 被定义为空串。
const.h 的其余部分定义了在整个系统中使用的数值常量。其中有一段专门定义与机器或配置相关的内容。
type.h (3100行)是另一个通过主控头文件被包含在每一个编译版本中的文件。它包括了许多重要的类型定义,以及相关的数量值。该文件中最重要的定义是3135到3146行的message,其细节请看下图:
图 2-30 MINIX中使用的六种消息类型。消息元素的长度将随机器结构而变化
当需要发送一条消息,而其中包含3个整数和3个指针(或3个整数和2个指针)时,应使用图2-30中的第一种格式。对其他格式依此类推。
include/minix 下还有另一个通过主控头文件被广泛使用的文件,即 syslib.h (3000行)。它包含在操作系统内部调用以访问操作系统其他服务的C库函数原型。
当一个进程需要执行一条MINIX系统调用时,它向内存管理器(MM)或文件系统(FS)发送一条消息。每条消息中含有所要求的系统调用序号。这些序号在下一个文件callnr.h (3400行)中定义。
文件 com.h (3500行)主要包含从MM和FS发送到I/O任务的消息中所使用的公共定义。其中也定义了任务序号。为了将其与进程号分开,任务号是负数。该文件还定义了可被发送到每个系统任务的消息类型。
最后,include/minix/还包含了几个更特殊的头文件。其中有boot.h (3700行),另一个是 keymap.h (3800行)。partition.h (4000行)只被核心使用,而不被文件系统或内存管理器使用。对于一个支持额外的I/O设备的实现,还有另外一些类似的文件,它们分别支持其他的设备。
include/ibm 是这里讨论的最后一个特殊头文件目录,它下面有两个文件包含与 IBM PC系列机相关的信息。一个是 diskparam.h ,它被软盘系统任务使用。另一个文件是 partition.h (4100行),它定义了IBM 兼容机上使用的硬盘分区表和相关的常量。
联系客服