Minix2.0操作系统的源代码由两个目录组成:include/目录和src/目录

include/目录包含了操作系统所有的头文件(即.h文件)

src/目录下包含了操作系统所有的源文件(.c或.s文件)

头文件的组织结构为:

include/目录下为POSIX标准头文件;

include/sys/目录下为额外的POSIX标准头文件;

include/minix/目录下为MINIX操作系统定义的头文件

源文件的组织形式为:

src/kernel/目录存放着MINIX操作系统第一层(进程管理)和第二层(设备管理)的源代码;

src/mm/目录存放着MINIX操作系统第三层中内存管理子系统的源代码;

src/fs目录下存放着MINIX操作系统第三层中文件管理系统的源代码;

src/lib目录下存放着MINIX操作系统使用的库例程源代码(e.g. open,read);

src/tools目录下存放着Init源程序,用于启动Minix;

src/boot目录下存放着启动和安装MINIX操作系统的源代码


minix OS的主体是以C语言编写的,在minix2.0的源代码中,以“.c”结尾的文件均为C语言源程序

minix的内核源代码少部分是用汇编语言编写的,其中大部分是关于中断与异常处理的底层程序。在minix2.0源代码中,以“.s”结尾的文件均为汇编语言源程序


src/commands/ :包含公用程序(e.g. cat, cp, date, ls, pwd)的源代码

src/test/: 包含有一些被设计用来对新编译好的Minix系统进行完整测试的工具(由于Minix是一个用于教学的操作系统,这意味着对它常常要作修改)

src/inet/: 包含了重新编译Minix以使之支持网路的源代码


Minix的内部结构:

Minix被组织成4层,每一层执行一套定义得很完整的功能,这4层如下图所示:

第1、2层的代码位于src/kernel/下。第一层是Minix内核的最底层,该层包括完成以下的功能函数:系统的初始化、中断、消息传递以及进程调度。


Minix2.0操作系统公用头文件说明

以下头文件均在目录include/下:

ansi.h: 用来检测编译器是否遵循标准C,如果是的话,_ANSI就被定义为31415,如果不是的,则_ANSI未定义。通过这个宏来诊测。

limits.h: 定义语言类型(如整型)和操作系统(如字)的基本尺寸,提高了可移植性

errno.h: 定义了minix操作系统程序执行时可能出现的各种错误号

unistd.h: 包含了大量的重要常数和系统调用函数原型。

string.h: 包含了用于字符处理的函数原型

signal.h: 定义了所有的ANSI和POSIX通用信号,minix支持所有的POSIX信号

fcntl.h: 定义了open()和fcntl()系统调用所需的各种参数和标志, 注意:create()已经过时。但是为了保持向后兼容性,而提供。

stdlib.h: 定义了一些共用的宏、类型和函数原型

termious.h: 被controlling终端类型的使用

a.out.h: 描述了可执行文件的格式

sys/types.h: 包含重要的类型定义

sys/ioctl.h: 声明设备的控制操作

sys/sigcontext.h: 定义了sigreturn(2)系统调用的所需的sigcontext结构

sys/sigptrace.h: 包含ptrace(2)系统调用所需的宏定义

sys/stat.h: 定义了stat()和fstat()系统调用所需的结构和宏

sys/dir.h:给出目录结构的布局

sys/wait.h: 包含wait()系统调用所需的宏定义

minix/config.h: 设置了minix内核、内存管理子系统、文件管理子系统的配置参数

minix/const.h: 定义了minix操作系统各部分共用的常量(宏定义)

minix/type.h: 定义了minix操作系统各部分公用的结构

minix/syslib.h: 声明了系统库函数的函数原型

minix/callnr.h: 定义了允许的系统调用号

minix/com.h: 包含内存管理子系统、文件管理子系统和I/O任务所需的一些宏定义以及I/O任务号

minix/boot.h: 包含文件系统所需的设备宏定义以及boot程序传递给minix操作系统的参数


Minix2.0操作系统kernel文件分析

详细分析  MINIX消息机制的核心:

  • mpx386.s
  • start.c
  • proc.c

保护模式分析:

  • src/kernel/exception.c
  • src/kernel/protect.c
  • src/kernel/klib386.s
  • src/kernel/klib.s
  • src/kernel/main.c
  • src/kernel/misc.c
  • src/kernel/i8259.c

含了一些debug下的dump机制:

  • src/kernel/dmp.c

驱动相关代码分析:

  • src/kernel/driver.h
  • src/kernel/driver.c
  • src/kernel/drvlib.h
  • src/kernel/drvlib.c

Winchester task 分析:

  • src/kernel/wini.c
  • src/kernel/at_wini.c

时钟分析:

  • src/kernel/clock.c

终端任务分析:

  • src/kernel/tty.h
  • src/kernel/tty.c

键盘任务分析:

  • src/kernel/keyboard.c

控制台分析:

  • src/kernel/console.c

fs与kernel的接口以及mm与kernel接口sys_task

  • src/kernel/system.c

minix2.0内核组织结构与公用头文件说明的更多相关文章

  1. Minix2.0内核源代码的组织结构

    Minix2.0操作系统的源代码由两个目录组成:include/目录和src/目录 include/目录包含了操作系统所有的头文件(即.h文件) src/目录下包含了操作系统所有的源文件(.c或.s文 ...

  2. VS2008和VC6.0下使用pthread.h头文件

    原文:http://www.cppblog.com/liquidx/archive/2009/06/16/87811.html 要在windows环境下使用 #include <pthread. ...

  3. Minix2.0操作系统公用头文件说明

    以下头文件均在目录include/下: ansi.h: 用来检测编译器是否遵循标准C,如果是的话,_ANSI就被定义为31415,如果不是的,则_ANSI未定义.通过这个宏来诊测. limits.h: ...

  4. 如何指定GCC的默认头文件路径

    如何指定GCC的默认头文件路径 网上偶搜得之,以之为宝:)原地址:http://blog.chinaunix.net/u/28781/showart.php?id=401631============ ...

  5. MinGW中的头文件路径级环境变量设置

    整理自 MinGW中的头文件路径   C头文件目录%MINGW_PATH%/include下有头文件,里面有strcpy等c函数的声明. C++头文件目录%MINGW_PATH%/lib/gcc/mi ...

  6. ARM单片机的头文件如何用结构体定义地址

    下面我们以ARM Cortex-M0内核单片机LPC1114的头文件lpc11xx.h文件进行说明. 1.先说两句 lpc11xx.h文件是lpc11xx系列单片机包含的头文件.这个文件的作用和51单 ...

  7. direct.h头文件(对目录操作)

    chdir()改变当前目录的函数原形:int chdir(const char *path)功能:把由path指定的目录改为当前目录.path参数中可以指定驱动器号,如“a:\\ddd”, 但只是改变 ...

  8. linux 内核头文件 linux kernel header

    概述:在进行有关系统软件的安装的时候(编译一个新的驱动,或者安装一个系统级别的测试工具,例如systemtap),经常需要重新编译内核,相应的问题往往与内核头文件有关.那么,什么是内核头文件,为什么需 ...

  9. linux内核中链表代码分析---list.h头文件分析(一)【转】

    转自:http://blog.chinaunix.net/uid-30254565-id-5637596.html linux内核中链表代码分析---list.h头文件分析(一) 16年2月27日17 ...

随机推荐

  1. jQuery选择器(一)

    晚上闲着没事,正好用来整理下jQuery的选择器,毕竟没有总结就不算学习嘛. 首先,对事件处理.遍历DOM和Ajax操作,都依赖于选择器. 1.CSS选择器 要使用某个HTML元素,就先要找到它,而c ...

  2. 用Qt写软件系列五:一个安全防护软件的制作(3)

    引言 上一篇中讲述了工具箱的添加.通过一个水平布局管理器,我们将一系列的工具按钮组合到了一起,完成了工具箱的编写.本文在前面的基础上实现窗体分割效果.堆栈式窗口以及Tab选项卡. 窗体分割 窗体分割是 ...

  3. .NET的EF框架中:在应用程序配置文件中找不到名为“”的连接字符串问题

    今天在使用EF Code First框架时,当把模型都定义好了,想通过程序包管理控制台利用enable-migrations –force来生成数据库表的时候报错了,如下: 找不到连接字符串,但是我仔 ...

  4. git clone 失败问题解决方案

    第一次从github上通过终端pull项目,出现了上述问题.询问了后台,才知道原来是电脑公钥(publickey)未添加至github,所以无法识别. 因而需要获取本地电脑公钥,然后登录github账 ...

  5. Winform如何实现ComboBox模糊查询

    最近朋友问了一个关于Winform实现ComboBox模糊查询的知识点,自己好久没有搞Winform了,就上手练了一下,废话不多说,进入正题. 前台设计: 前台就是一个简单的Form窗体+一个Comb ...

  6. SEO技巧汇集

    每个人都喜欢好用的技巧,对吗?这里有55个用于搜索引擎优化的小技巧,甚至你的老妈用起来都易如反掌.哦,不是我的老妈,但你明白我的意思.这意味着网页设计师和SEO新手中大部分人都能迅速上手,没有任何困难 ...

  7. Monotype推出基于HTML5的Web字体平台

    著名字体公司Monotype近日宣布推出基于HTML5的Web字体平台,设计者可以访问近10万字体的目录. Monotype推出基于HTML5的Web字体平台 Monotype推出基于HTML5的We ...

  8. volcanol_Linux_ 问题汇总系列_4_Thinkpad_E40_0578MDC_在Fedora 13 Linux(FC13)中如何安装无线网卡驱动

    今天晚上,我突然想在自己到笔记本上安装linux系统,因为我自己第一次接触到的linux是红帽支持到Fedora Core 4,所以一直最中意的linux 发行版本是FC系列,同时由于FC 15以后到 ...

  9. 2016 长春东北赛---Coconuts(离散化+DFS)

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5925 Problem Description TanBig, a friend of Mr. Frog ...

  10. Scalaz(44)- concurrency :scalaz Future,尚不完整的多线程类型

    scala已经配备了自身的Future类.我们先举个例子来了解scala Future的具体操作: import scala.concurrent._ import ExecutionContext. ...