随笔分类 - Minix内核源代码剖析
摘要:接上一篇C语言中可变参数函数实现原理,从理论上详细介绍了C语言中可变参数函数的实现,这一篇从minix内核源码中的scanf函数入手,学习C语言经典可变参数函数的实现过程在scanf.c文件中,可以看到scanf函数,代码如下:#include #include #include "loc_incl.h"int scanf(const char *format, ...){ va_list ap; int retval; va_start(ap, format); retval = _doscan(stdin, format, ap); va_e...
阅读全文
posted @ 2013-10-19 01:10
cpoint
摘要:谈到C语言中可变参数函数的实现(参见C语言中可变参数函数实现原理),有一个头文件不得不谈,那就是stdarg.h本文从minix源码中的stdarg.h头文件入手进行分析: 1 #ifndef _STDARG_H 2 #define _STDARG_H 3 4 5 #ifdef __GNUC__ 6 /* The GNU C-compiler uses its own, but similar varargs mechanism. */ 7 8 typedef char *va_list; 9 10 /* Amount of space required in an argument l...
阅读全文
posted @ 2013-10-18 00:05
cpoint
摘要:在看minix中bsearch实现的源代码之前,先学习一下C 语言中void类型以及void*类型的使用方法与技巧。void的含义:void的字面意思是“无类型”,void *则为“无类型指针”,void *可以指向任何类型的数据。void几乎只有“注释”和限制程序的作用,因为从来没有人会定义一个void变量,让我们试着来定义:void a;这行语句编译时会出错,提示“illegal use of type 'void'”。即使void a的编译不会出错,它也没有任何实际意义。 众所周知,如果指针p1和p2的类型相同,那么我们可以直接在p1和p2间互相赋值;如果p1和p2指向不
阅读全文
posted @ 2013-10-14 00:56
cpoint
摘要:在minix2.0源代码中,有将字符串类型转换为int、long、double类型的函数实现,相关的实现函数分别在atoi.c、atol.c、atof.c文件中,我们来逐一学习其中的源码:1、int atoi(register const char *nptr) :将字符串类型转换为int类型int atoi(register const char *nptr){ int total = 0; int minus = 0; //记录正负的变量(0:'+',1:'-') while (isspace(*nptr)) nptr++; //滤去前导空格字符 if (*
阅读全文
posted @ 2013-10-14 00:49
cpoint
摘要:在minix2.0源代码中,有相当经典的时间转换函数实现(src\ src\ lib\ ansi\ asctime.c),今天我们就来分析一下asctime.c中的源码首先引入几个相关的头文件:1、time.h 主要的结构体与相关定义:struct tm { int tm_sec; /* 分钟后面的秒[0, 59] */ int tm_min; /* 小时后面的分钟[0, 59] */ int tm_hour; /* 距离凌晨00:00点的小时数[0, 23] */ int tm_mday; /* ...
阅读全文
posted @ 2013-10-14 00:46
cpoint
摘要:minix中关于如何判定一个字符的类型,如大写、小写、数字……如果采用传统的方法,如判断一个字母大写的方法:if(c>='A' && c'a') || (c'A') || (c>'0' && c<'9')) return true如果假设更多的局限,效率明显下降minix的做法是定义一个256元素的unsigned char _ctypes[]数组,由于8位需要8种属性分别描述,如下:#define _U 0x01 /* this bit is for upper-
阅读全文
posted @ 2013-08-19 14:37
cpoint
摘要:详细分析 MINIX消息机制的核心:mpx386.sstart.cproc.c保护模式分析:src/kernel/exception.csrc/kernel/protect.c src/kernel/klib386.ssrc/kernel/klib.ssrc/kernel/main.csrc/kernel/misc.csrc/kernel/i8259.c含了一些debug下的dump机制:src/kernel/dmp.c驱动相关代码分析:src/kernel/driver.hsrc/kernel/driver.csrc/kernel/drvlib.hsrc/kernel/drvlib.cWin
阅读全文
posted @ 2013-07-12 00:18
cpoint
摘要:以下头文件均在目录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()系统调用
阅读全文
posted @ 2013-07-12 00:15
cpoint
摘要: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目录
阅读全文
posted @ 2013-07-12 00:11
cpoint

浙公网安备 33010602011771号