阅读时间:2015年11月9日
该目录下的代码文件从功能上可以分为三类,一类是硬件(异常)中断处理程序文件,一类是系统 调用服务处理程序文件,另一类是进程调度等通用功能文件。参见图 1.5。我们现在根据这个分类方式, 从实现的功能上进行更详细的说明。
主要包括两个代码文件:asm.s 和 traps.c 文件。asm.s 用于实现大部分硬件异常所引起的中断的汇 编语言处理过程。而 traps.c 程序则实现了 asm.s 的中断处理过程中调用的 c 函数。另外几个硬件中断 处理程序在文件 system_call.s 和 mm/page.s 中实现。
Linux 中应用程序调用内核的功能是通过中断调用 int 0x80 进行的,寄存器 eax 中放调用号。因此 该中断调用被称为系统调用。实现系统调用的相关文件包括 system_call.s、fork.c、signal.c、sys.c 和 exit.c 文件。
本程序主要实现系统调用(system_call)中断 int 0x80 的入口处理过程以及信号检测处理(从代码 第 80 行开始),同时给出了两个系统功能的底层接口,分别是 sys_execve 和 sys_fork。还列出了处理 过程类似的协处理器出错(int 16)、设备不存在(int7)、时钟中断(int32)、硬盘中断(int46)、软盘中 断(int38)的中断处理程序。
sched.c 是内核中有关任务调度函数的程序,其中包括有关调度的基本函数(sleep_on、wakeup、 schedule 等)以及一些简单的系统调用函数(比如 getpid())。另外 Linus 为了编程的方便,考虑到软盘 驱动器程序定时的需要,也将操作软盘的几个函数放到了这里。