加入收藏 | 设为首页 | 会员中心 | 我要投稿 佛山站长网 (https://www.0757zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

kernel学习:系统调用的知识点

发布时间:2016-10-08 19:25:54 所属栏目:Unix 来源:网络整理
导读:一般情况下,用户进程是不能访问内核空间的。它既不能访问内核中的数据,也不能访问内核中的函数。但在linux内核中设置了一组用于实现各种系统功能的函数,成为

5、系统调用表:

系统调用表sys_call_table存储了所有系统调用对应的服务例程函数的地址。

在x86中:2.6.38/arch/x86/kernel/syscall_table_32.S

在arm中2.6.38/arch/arm/kernel/calls.S

6、系统调用号:每个系统调用对应一个唯一的系统调用号。用户通过系统调用号,而不是名称来调用。

x86:2.6.38/arch/x86/include/asm/unistd32.h或unistd64.h

arm:2.6.38/arch/arm/include/asm/unistd.h能找到它们。

内核是通过系统调用号作为下表去sys_call_table来获取服务例程的地址的。在系统中系统调用号一旦分配就不能去除,这是为了兼容。

7、系统调用例程

所有的系统调用服务例程都声明在include/linux/syscalls.h中,但分散在不同的文件中。

asmlinkagelong sys_nice(int increment);

系统调用除了sys_外还有一个asmlinkage来告诉编译器从堆栈中获取参数。还必须有一个long的返回,表示执行成功还是出错。系统调用号,名称和目的都是相同的,但是在不同内核和架构中实现的方法可能不同。

8、如何使用系统调用

1、通过c库来使用系统调用

2、在2.6.18之前的内核使用_syscall宏来使用系统调用。

3、在2.6.19开始废除了_syscall,而使用syscall()通过向函数提供调用号和参数实现调用

出处:http://blog.csdn.net/muge0913/article/details/7517303

(编辑:佛山站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读