关闭

[笔记]《Linux内核设计与实现》第五章系统调用

92人阅读 评论(0) 收藏 举报
分类:
目前正在通读《Linux内核设计与实现》一书,本文是对第五章<系统调用>的总结。
1.系统调用是什么?
由内核提供的一组接口,在Linux中,系统调用是用户空间访问内核的唯一手段;除异常和陷入外,它们是内核唯一的合法入口。
2.与库函数和应用程序接口(API)有怎样的关系?
3.如何增加系统调用?
3.1 限定词:asmlinkage
所有的系统调用都需要这个限定词。这是一个编译命令,通知编译器仅从栈中提取该函数的参数。
所有的系统调用,在内核中其方法名都被加上前缀"sys_"。
3.2 系统调用号
在Linux中,每个系统调用被赋予一个系统调用号。内核使用系统调用表sys_call_table为每个有效的系统调用指定唯一的系统调用号。每一种体系结构中,都明确定义了这个表。
表项是以64位类型存放的。
3.3步骤:
3.3.1 编写完系统调用,符合设计规范,做必要的兼容和合法性检查;
3.3.2 在系统调用表的最后加入一个表项;从0开始,在表中的位置(index值)就是它的系统调用号;
3.3.3 系统调用必须被编译进内核映象,实现方法就是把它放入kernel/下的一个相关文件中;
4.系统调用的执行:
将系统调用号和参数压入寄存器,然后触发软中断来陷入内核。
应用程序通知内核的机制是靠软中断实现的:通过引发一个异常来促使系统切换到内核态去执行异常处理程序。此时的异常处理程序实际上就是系统调用处理程序。
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:44047次
    • 积分:1173
    • 等级:
    • 排名:千里之外
    • 原创:72篇
    • 转载:13篇
    • 译文:1篇
    • 评论:7条
    文章分类
    最新评论