1、系统调用表与系统调用号:
系统调用表sys_call_table存储了所有系统调用对应的服务例程的函数地址。每个系统调用都有一个编号来唯一标识,这个编号就是系统调用号。用户使用系统调用是通过系统调用号而不是系统调用的名字。系统调用表中的每一项都与系统调用号依次对应,所以我们可以通过把系统调用号作为下标来定位我们需要的系统调用的服务例程。
系统调用表在源码文件:arch/x86/kernel/syscall_table.h中定义;
系统调用号在源码文件:arch/x86/include/asm/unistd_32.h中定义;
2、系统调用服务例程:
系统调用服务例程负责系统调用最终在内核态下的实现,其编码规范为内核态程序的编码规范。系统调用服务例程的声明集中在include/linux/syscalls.h头文件中,而定义分布于不同的文件中。系统调用服务例程的函数名都以sys_开头,且在定义的时候需要加asmlinkage标记,告诉编译器仅从堆栈中获取该函数的参数。每个系统调用服务例程都返回一个long型的返回值以表示调用是否成功。每个系统调用的系统调用号、命名以及操作都由POSIX统一规定,但内核具体如何去实现并没有规定。
阅读(1663) | 评论(0) | 转发(0) |