minix2.0内核组织结构与公用头文件说明

简介:

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
目录
相关文章
|
存储 Unix 数据处理
【操作系统】文件的结构和组织
【操作系统】文件的结构和组织
338 0
|
2天前
|
安全 调度
软件体系结构 - 宏内核
【4月更文挑战第19天】软件体系结构 - 宏内核
19 0
|
3月前
|
Linux 调度 索引
Linux内核源码的组织结构
Linux内核源码的组织结构
|
9月前
|
传感器 芯片 内存技术
第二十六章 linux-i2c子系统一
第二十六章 linux-i2c子系统一
73 1
|
4月前
|
Linux API 芯片
Linux 系统的中断子系统基本框架(一)
Linux 系统的中断子系统基本框架(一)
43 0
|
4月前
|
Linux
Linux文件概念和结构
Linux文件概念和结构
24 0
|
4月前
|
C语言 Windows
9.3 Windows驱动开发:内核解析PE结构节表
在笔者上一篇文章`《内核解析PE结构导出表》`介绍了如何解析内存导出表结构,本章将继续延申实现解析PE结构的PE头,PE节表等数据,总体而言内核中解析PE结构与应用层没什么不同,在上一篇文章中`LyShark`封装实现了`KernelMapFile()`内存映射函数,在之后的章节中这个函数会被多次用到,为了减少代码冗余,后期文章只列出重要部分,读者可以自行去前面的文章中寻找特定的片段。
26 0
9.3 Windows驱动开发:内核解析PE结构节表
|
4月前
|
存储 Windows
9.2 Windows驱动开发:内核解析PE结构导出表
在笔者的上一篇文章`《内核特征码扫描PE代码段》`中`LyShark`带大家通过封装好的`LySharkToolsUtilKernelBase`函数实现了动态获取内核模块基址,并通过`ntimage.h`头文件中提供的系列函数解析了指定内核模块的`PE节表`参数,本章将继续延申这个话题,实现对PE文件导出表的解析任务,导出表无法动态获取,解析导出表则必须读入内核模块到内存才可继续解析,所以我们需要分两步走,首先读入内核磁盘文件到内存,然后再通过`ntimage.h`中的系列函数解析即可。
35 0
9.2 Windows驱动开发:内核解析PE结构导出表
|
10月前
|
C语言 Windows
驱动开发:内核解析PE结构节表
在笔者上一篇文章`《驱动开发:内核解析PE结构导出表》`介绍了如何解析内存导出表结构,本章将继续延申实现解析PE结构的PE头,PE节表等数据,总体而言内核中解析PE结构与应用层没什么不同,在上一篇文章中`LyShark`封装实现了`KernelMapFile()`内存映射函数,在之后的章节中这个函数会被多次用到,为了减少代码冗余,后期文章只列出重要部分,读者可以自行去前面的文章中寻找特定的片段。
171 0
|
11月前
|
存储 Windows
驱动开发:内核解析PE结构导出表
在笔者的上一篇文章`《驱动开发:内核特征码扫描PE代码段》`中`LyShark`带大家通过封装好的`LySharkToolsUtilKernelBase`函数实现了动态获取内核模块基址,并通过`ntimage.h`头文件中提供的系列函数解析了指定内核模块的`PE节表`参数,本章将继续延申这个话题,实现对PE文件导出表的解析任务,导出表无法动态获取,解析导出表则必须读入内核模块到内存才可继续解析,所以我们需要分两步走,首先读入内核磁盘文件到内存,然后再通过`ntimage.h`中的系列函数解析即可。
214 0