Chinaunix首页 | 论坛 | 博客
  • 博客访问: 295146
  • 博文数量: 56
  • 博客积分: 3025
  • 博客等级: 中校
  • 技术积分: 534
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-06 17:28
个人简介

Honesty and diligence should be your eternal mates.

文章分类

全部博文(56)

文章存档

2012年(1)

2011年(27)

2010年(20)

2008年(8)

分类: LINUX

2010-12-02 11:29:31

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) |
给主人留下些什么吧!~~