首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 操作系统 > Linux > 品评Minix源码--1,全局头文件
【标  题】:品评Minix源码--1,全局头文件
【关键字】:Minix,--1
【来  源】:http://blog.csdn.net/benfaung/archive/2006/09/23/1267697.aspx

品评Minix源码--1,全局头文件

头文件定义了函数接口和数据结构,是整个项目的基础部分,而且很大程度上决定了这个项目的体系结构。

下面先来了解一下Minix的头文件都是干嘛的,以此来了解Minix是怎样一个架构的。
分析的源码是《操作系统设计与实现》下册的代码,也就是著名的AppendixB。分析源码的工作是在FreeBSD 6.0下进行的,使用Source-Navigator来分析。这些头文件不全,但都是必要的东西。

1.整体结构:

头文件目录结构为:
包含用户程序使用的头文件:include
包含IBMPC特有定义的头文件:includeibm
包含操作系统使用的头文件:includeminix
包含POSIX头文件,一般给编译程序用的:includesys


2.详细功能(按照代码在书本中出现的顺序)

2.1.include

00000: ansi.h
是编译Minix系统每个都要包含的头文件。用来测试编译器是否符合ANSI标准。最重要的宏是_PROTOTYPE,声明函数都用这个。
声明函数的格式为:_PROTOTYPE(int close, (int _fd));

00100:limits.h
间接包含在每个Minix源文件中,是一些数据类型的基本大小的定义,还有诸如最大link数目,最大参数个数,文件名最长为多少个字符等限制。

00200:errno.h
最重要的是全局变量errno,用来放错误号的。该头文件定义了一系列的错误类型。有特色的东西就是,如果定义了_SYSTEM,就定义 _SIGN为负号,如果没有定义_SYSTEM,就定义_SIGN为空。然后错误码定义为:#define EMFILE (_SIGN 24)。在定义一系列错误码前,还先定义了错误码的数量。

00400:unistd.h
声明了Unix-like系统的N多系统调用,比如unlink, brk, chown等,声明中的参数命名规范都是以下划线开头的,比如:_path;还有定义了一些常量,有这么几类:
1.access()使用的F_OK, X_OK, W_OK, R_OK,也就是检查权限的东东。
2.lseek()使用的SEEK_SET, SEEK_CUR, SEEK_END
3.遵循的POSIX版本号
4.STDIN_FILENO, STDOUT_FILENO, STDERR_FILENO,看名字就知道是干嘛的了。
5.如果退出系统的:RBT_HALT, RBT_REBOOT, RBT_PANIC, RBT_REST, RBT_MONITOR
6.定义了NULL
7.POSIX相关的变量

00600:string.h
包含字符串操作的C函数的原型。

00700:signal.h
定义标准信号名,比如:SIGHUP, SIGINT, SIGTERM等。还有C语言中信号库的函数原型。信号处理涉及到Minix的所有部分!

00900:fcntl.h
主要由文件系统引用。包含了creat, open, fcntl系统调用的原型,还有一系列的参数和flag,比如:O_CREAT, O_EXCL,O_RDONLY等。

01000:stdlib.h
用户程序使用最频繁的头文件。C的“有用”的函数的原型还有一些常量,类型的定义,比如size_t。

01100:terrnios.h
操作系统控制台跟终端接口是很复杂的。所以要有个标准,让不同硬件能跟操作系统和用户交互。这个文件就干这些事情。它定义了控制终端类型的I/O 设备要用到的常量,宏和函数原型,最重要的是terrnios结构,包含的内容有:标识各种操作模式的标志位,设置输入输出频率的变量和放置特殊字符的数 组。这个文件定义的东西多数是POSIX需要的。但后面它也定义了一些MINIX自己扩展的东西,比如定义57600或以上的波特率。

01400:a.out.h
定义可执行文件在磁盘的存储格式。包括文件启动的文件头和符号表。(有个疑问,Minix不用elf?)

2.2.include/sys

01600:types.h
良好的编程素养包括typedef自己的数据类型。这个文件中的数据类型都是以_t结尾的,比如ino_t, dev_t等。比较好的定义有8位无符号类型用unsigned char,16位无符号用unsigned short, 32位无符号用unsigned long。这个文件后面还定义了信号处理的函数指针。

01800:ioctl.h
定义了很多设备控制的宏,主要是I/O设备。不过我还是不大理解它跟terrnios.h的分工。

02000:sigcontext.h
用于内核的内存管理器。定义一些用来在信号处理前后保存和恢复系统操作的结构。

02200:ptrace.h
定义了ptrace系统调用的一些东东。ptrace是用来“process tracing and debugging(freebsd的man说的)”的,可以让一个进程控制另外一个进程。

02300:stat.h
定义了stat()和fstat()函数返回的结构,用来操作文件的。也定义了一些文件其他的文件状态,比如权限之类的。主要用于内存管理和文件系统上。定义了chmod, fstat, mkdir, mkfifo, stat, umask这些函数的原型。

02400:dir.h
定义了目录项结构。

02500:wait.h
定义了wait()和waitpid()系统调用相关的东东。在内存管理中实现。

2.3. include/minix

02600:config.h
这个头文件就厉害啦,通过配置它,能使minix在不同体系架构的机器上被编译。它分为2部分:
1.用户设置参数,比如MACHINE是IBM_PC还是SUN_4等;
2.非用户配置参数,比如定义了芯片类型等。

02900:const.h
为了使常量定义一致而搞的头文件。当然, kernel,mm他们都有自己local的const,而跨区域的const就得包括这个minix/const.h。
它包含了一些掩码,比如BYTE:0377;一些宏,比如:MAX(a, b);内存单元的大小, CLICK_SIZE;还有TRUE, FALSE等。

03100:type.h
相当重要的东西。因为它包含了message的结构的定义,这个结构定义得很巧,以后再展开分析。

03300:syslib.h
包含操作系统内部调用以访问操作系统其他服务的C库函数的原型。很扰口,以后就懂了。

03400:callnr.h
定义minix系统调用的序号。它在前面的部分也限制了系统调用的个数,定义NCALLS,为77个。这些序号在unix-like操作系统的汇编中比较常用。

03500:com.h
定义了mm和fs发送到i/o任务消息中所使用的公共定义,也定义了任务序号。这个任务序号的定义也很讲究,用的是负数,这就跟进程区分开来了。还定义了可以发送到每个系统任务的信号类型。

03700:boot.h
用在内核和文件系统中,定义了设备和访问从boot程序传入系统的参数。

03800:keymap.h
定义一些结构,用来实现不同语言所需的字符集对应的特殊键盘布局。

04000:partition.h
只用于内核,定义了若干个牛B的结构,描述了磁盘的分区布局。它跟ioctl的DIOCGETP和DIOCSETP一块儿玩。

2.4. include/ibm

04100:partition.h
定义了IBM兼容机上使用的磁盘分区表和相关常量。

-----------------
下一贴主要关注进程管理相关的头文件。 
UML日记:【上一篇】
CMS Soft:【下一篇】
【相关文章】
  • C语言-编程实例-经典C程序100例(7----10)
  • C语言-编程实例-经典C程序100例(11----15)
  • lfs系统安装后--1
  • AIX---10备份与恢复
  • AIX---11设备管理
  • AIX---12网络管理基础
  • AIX---13网络文件系统
  • AIX---14性能分析与故障诊断
  • AIX--191学习笔记
  • My LFS Learning --1
  • 【随机文章】
  • 转发信息库
  • DataGrid中以多列显示数据,并且对用户的点击改变其背景
  • webwork Action中获取request, response对象的方法
  • 关于细分和SMOOTH的问题
  • SA-200第15部分 还原系统和文件
  • 八年工作经验为什么只能拿月薪1700?
  • 程序员常用SQL 语句:
  • ROS2.96,ROS2.97,电信+网通双线接入策略路由+自动切换图文教程
  • <<四问学习法>> 助你高效学习MCSE课程
  • 订票修改版(姚蒂)
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.