minix操作系统分析.docx
《minix操作系统分析.docx》由会员分享,可在线阅读,更多相关《minix操作系统分析.docx(13页珍藏版)》请在冰豆网上搜索。
minix操作系统分析
Minix操作系统内核源代码概要分析
版本号:
0.01(2004-5-28更新)
作者:
guokunemail:
guo_kun@
第一部分PC外围设备的相关分析.
第二部分总体结构分析
第三部分头文件及数据结构分析
第四部分kernel代码分析
第五部分内存管理器的分析
第六部分文件系统分析
第七部分总结
第一部分PC外围设备的相关分析.
●处理器复位后的状态分析
●处理器的体系结构分析
●硬盘
Winchester硬盘结构分类分区表Io端口地址硬盘控制器
●软盘软盘结构分区表马达控制软盘控制器
●时钟(PT)8253
●实时时钟(RT)
●总线时钟
●可编程中断控制器8259A(PIC)
●显示卡6845-vramframeBuffer
●串口
●并口8255
●DMA控制器8237基地址,控制字
●键盘8248
●ISA总线ISA端口的地址范围
●PCI总线PCIIO/MEM/Configure
第二部分总体结构分析
总体结构分析概论
源代码结构分解为树形结构。
如下所示:
源代码总体组织结构.
sys/
ibm/
include/minix/
net/
...
kernel/
mm/
fs/
src/boot/
inet/
tools/
test/
etc/
lib/
第三部分头文件及数据结构分析
头文件详细分析
include目录结构
include/a.out.h
include/ansi.h
include/errno.h
include/fcntl.h
include/ibm/partition.h
include/limits.h
include/minix/boot.h
include/minix/callnr.h
include/minix/com.h
include/minix/config.h
include/minix/const.h
include/minix/keymap.h
include/minix/partition.h
include/minix/syslib.h
include/minix/type.h
include/signal.h
include/stdlib.h
include/string.h
include/sys/dir.h
include/sys/ioctl.h
include/sys/ptrtrace.h
include/sys/sigcontext.h
include/sys/stat.h
include/sys/types.h
include/sys/wait.h
include/termios.h
include/unistd.h
include/terminos.h
include/ansi.h
这个文件检测这个编译器是不是基于ANSI的编译器。
如果是的话,_ANSI就被定义为31415,如果不是的,则_ANSI未定义。
通过这个宏来诊测。
include/limits.h
这个文件是为了提高移植性。
●定义了C语言数据类型的长度
●定义了基于POSIX1003.1标准(table2-3)
#ifdef_POSIX_SOURCE/*这个宏表明了仅对POSIX可见*/
#endif
include/errno.h
为了解决错误在系统内部为负的,通过对_SYSTEM侦测来决定。
#ifdef_SYSTEM
#define_SIGN-
#else
#define_SIGN
include/unistd.h
包含了大量的重要常数和系统调用函数原型。
include/signal.h
这个文件定义所有的POSIX以及ANSI通用的信号。
MINIX支持所有的POSIX信号,
include/fcntl.h
open()和fcntl系统调用需要
注意create()已经过时。
但是为了保持向后兼容性,而提供。
structflock{
shortl_type;/*lock类型*/
shortl_whence;/*startingoffset*/
shortl_start;/*relativeoffsetbytes*/
shortl_len;/*size;if0,thenuntilEOF*/
shortl_pid;/*拥有lock的进程*/
}
include/stdlib.h
definescertaincommonmacros,types,andfunctions
types是idiv_t,div_t,wchar_t,size_t,
数据机构:
typedefstruct{intquot,rem}div_t;用于有符号和无符号除法
typedefstruct{longquot,rem}idiv_t;
include/terminos.h
structtermios{
tcflag_tc_iflag;输入模式
tcflag_tc_oflag;输出模式
tcflag_tc_cflag;控制模式
tcflag_tc_lflag;local模式
speed_tc_ispeed;输入速度
speed_tc_ospeed;输出速度
cc_tc_cc[NCCS];controlcharacters
}
include/sys/dir.h
#defineDIRBLOCKSIZ512
#ifndefDIRSIZ
#defineDIRSIZ14注意是14;
#endif
数据结构:
struct{
ino_td_ino;
chard_name[DIRSIZ];
}
include/a.out.h
分析:
a.out.h文件,这个文件描述了可执行文件的结构。
#ifndef_AOUT_H
#define_AOUT_H
避免了头文件的重复包含。
#endif
/*a.out的头*/
structexec{
unsignedchara_magic[2];/*魔术数*/
unsignedchara_flags;/*标志*/
unsignedchara_cpu;/*cupid*/
unsignedchara_hdrlen;/*头的长度*/
unsignedchara_unused;/*保留*/
unsignedchara_version;/*版本号(暂时未用)*/
longa_text;/*textsegment字节长度(sizesinb*/
longa_data;/*datasegment...*/
longa_bss;/*bsssegment...*/
longa_entry;/*entrypoint进入点*/
longa_total;/*所有分配的内存*/
longa_syms;/*符号表的大小(编译器产生*/
/*SHORTFORMENDSHERE*/
longa_trsize;/*text重定位大小*/
longa_drsize;/*数据重定位大小*/
longa_tbase;/*text重定位基址*/
longa_dbase;/*数据重定位大小*/
}
structreloc{
longr_vaddr;
unsignedshortr_symndx;
unsignedshortr_type;
}
/*符号表进入点*/
structnlist{
charn_name[8];/*符号名*/
longn_value;/*值*/
unsignedcharn_sclass;/*存储类*/
unsignedcharn_numaux;/*辅助进入点的数量(未使用)*/
unsignedshortn_type;/*语言基址和继承类型(未使用)*/
}
include/sys/types.h
分析:
这个文件包含了许多重要的数据类型定义(typedefinitions)。
这是一个非常好的编程习惯。
按照习惯,每个被定义的数据后面加上_t;
include/sys/ioctl.h
分析:
声明i/o控制字
include/minix/partition.h
分析:
分区在磁盘上位置(用于DIOCCETP和DIOCSETP)
include/ibm/partition.h
分区表的描述(DPT)
src/kernel/kernel.h
主头文件
第四部分kernel代码分析
mpx386.s
start.c详细分析MINIX消息机制的核心
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
src/kernel/dmp.c这个文件包含了一些debug下dump机制
src/kernel/driver.h
src/kernel/driver.c
src/kernel/drvlib.h驱动相关代码分析
src/kernel/drvlib.c
src/kernel/wini.cWinchestertask分析
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控制台分析
6845videocontroller与处理器分享内存空间
单色B0000
彩色B8000
high
attribute
Low
character
src/kernel/system.cfs与kernel的接口以及mm与kernel接口
sys_task
第五部分内存管理器的分析
src/mm/mm.h
src/mm/const.h
src/mm/type.h
src/mm/proto.h
src/mm/glo.h
src/mm/mproc.h
src/mm/param.h
src/mm/table.c
src/mm/main.c
src/mm/forkexit.c
src/mm/exec.c
src/mm/break.c
src/mm/signal.c
src/mm/getset.c
src/mm/trace.c
src/mm/alloc.c
src/mm/utility.c
src/mm/putk.c
第六部分文件系统分析
src/fs/fs.h
src/fs/const.h
src/fs/type.h
src/fs/proto.h
src/fs/glo.h
src/fs/fproc.h
src/fs/buf.h
src/fs/dev.h
src/fs/file.h
src/fs/lock.h
src/fs/inode.h
src/fs/param.h
src/fs/inode.c
src/fs/super.h
src/fs/table.c
src/fs/cache.c
src/fs/super.c
src/fs/filedes.c
src/fs/lock.c
src/fs/main.c
src/fs/open.c
src/fs/read.c
src/fs/write.c
src/fs/pipe.c
src/fs/path.c
src/fs/link.c
src/fs/stadir.c
src/fs/protect.c
src/fs/time.c
src/fs/misc.c
src/fs/device.c
总结