快速业务通道

内核笔记之“System Calls”

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-13
1、基础知识.
在linux内核中,每个系统函数都有一个编号,应用程序通过此编号调用内核函数,即使函数被删除,此编号也不会被回收或重新分配,而是指向一个报错函数sys_ni_syscall().每个系统调用定义前面都有一个“asmlinkage”修饰符,告诉编译器只在栈中寻找函数参数.
2、调用过程.
应用程序调用系统调用函数时,产生一个软中断信号,在x86中,是int 0x80指令,系统捕获这个信号,进入内核模式执行处理函数 system_call().
进行系统调用时,应用程序会把系统函数编号及参数放入寄存器,system_call()检测此编号是否合法,如果合法,则执行此调用.
3、如何把系统调用绑定到内核.
在系统调用表中添加一条目录.调用编号会在文件<asm/unistd.h>中被分配.例如要添加系统调用sys_foo(),则在 arch/*/kernel/entry.S文件中相应的地方添加 “long sys_foo”.然后将实现函数放到kernel/sys.c 及其他用到该函数的地方.
linux提供了一系列的宏来实现系统调用,宏的命令形式为_syscalln(),0<n<6,宏的使用方法为“_syscall(函数返回,函数名,参数1类型,参数1名,……)“,例如对于编号为283的“void sys_foo(int a,int b)”,可以通过宏_syscall2()包装为“#define __NR_open 283 _syscall2(void,int,a,int,b)”.
这样,用户程序就可以通过调用foo()函数来调用sys_foo();
Empire CMS,phome.net

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号