【Linxu内核设计与实现】-第5章 系统调用

来源:互联网 发布:mysql.host不存在 编辑:程序博客网 时间:2024/06/05 03:34

第5章 系统调用

用户进程与内核交互的接口,使应用程序受限的访问硬件设备,提供了创建新进程并与已有进程通讯的机制,也提供了申请操作系统其它资源的能力。应用程序发出请求,内核来满足这些请求,或者返回一个错误。

5.1 与内核通信

(1)    系统调用在用户空间和硬件设备之间添加了一个中间层

为用户空间提供抽象的接口

保证了系统的稳定与安全

(2)    系统调用是用户空间访问内核的唯一手段。除去异常和陷入外,它是内核唯一的合法入口。

5.2 API、POSIX和C库

(1)用户空间通过应用编程接口API,而不是直接使用系统调用

(2)调用流程如下:


(3)    大多数Unix系统上,POSIX定义的API函数和系统调用之间有着直接关系。

(4)    C库:实现了Unix系统的主要API,包括标准C库,和系统调用接口。.

(5)    开发重点

  • 应用程序开发:关注API
  • 内核开发:关注系统调用

5.3系统调用

(1)通常通过C库中定义的函数来访问系统调用(syscall)。

(2)long型的返回值来表示成功还是失败。负数失败,0成功。出现错误的时候,C库把错误码写入全局变量,通过调用perror()库函数,翻译成用户理解的错误字符串。

(3)系统调用有一个明确的操作

(4)getpid()系统调用

SYSCALL_DEFINE0(getpid)

{

       Returntask_tgid_vnr(current);

}

SYSCALL_DEFINE0:是一个宏,定义无参系统调用。展开后

asmlinkage long sys_getpid(void)

asmlinkage:限定词,编译指令,通知编译器仅从栈中提取该函数的参数。所有系统调用都需要该限定词。

返回值是long型,保证32/64兼容。

5.3.1 系统调用号

(1)Linux中,每个系统调用,都被赋予了一个独一无二系统调用号。用户空间进程执行一个系统调用的时候,这个系统调用号就是来指定执行哪个系统调用,进程不会提及系统调用的名字。

(2)系统调用号一旦分配不能随意改变。

5.3.2 系统调用性能

Linux系统调用执行快,内核上下文切换时间短。系统调用处理程序很简洁。

5.4 系统调用处理程序


5.4.1 指定恰当的系统调用

仅仅陷入内核空间是不够的,必须把系统调用号一并传给内核。X86平台,陷入内核之前,把系统调用号存入到eax寄存器中去,系统调用程序一旦运行则从eax中得到数据。

5.4.2 参数传递

除了传递系统调用号,大部分系统调用还需要传递参数,发生陷入的时候需要把这些参数从用户空间传递到内核空间,x86上,是像系统调用号一样,将这些参数存到寄存器中,ebx、ecx、edx、esi、edi按照顺序,存放前五个参数。

5.5 系统调用的实现

5.5.1 实现系统调用

接口力求简洁,参数尽可能少。力求稳定,不做改动。多为未来扩展考虑。

5.5.2 参数验证

(1)系统调用在内核空间执行,系统调用需要检查所有参数的合法性。如文件描述符是否有效,PID是否有效,指针是否有效。

(2)在接受一个用户空间指针前,内核必须保证:


(3)copy_to_user() copy_from_user() 


(4)是否具有合法权限。Reboot系统调用,只允许系统管理员来执行。


5.6 系统调用上下文

(1)内核在执行系统调用的时候处于进程上下文,current指针指向当前任务。

(2)进程上下文中,内核可以休眠,也可以被抢占。

(3)系统调用结束的时候,控制权仍然在system_call()中,它最终负责切换到用户空间,并让用户程序继续执行下去。


5.6.1 绑定一个系统调用的最后步骤



5.6.2 从用户空间访问系统调用

(1)通常,系统调用靠C库支持,用户程序通过包含标准头文件和C库连接。

(2)Linux提供了一组宏。用于直接对系统调用访问。_syscalln()。n为0到6.


5.6.3 为什么不通过系统调用的方式实现


5.7 小结

(1)系统调用到底是什么

(2)Linux内核如何实现系统调用

(3)执行系统调用的连锁反应:

陷入内核-传递系统调用号和参数-执行系统调用函数-返回值带回用户空间。

(4)如何增加一个新的系统调用。

(5)实现新增系统调用的优缺点。



阅读全文
'); })();
1 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 阎罗大帝 洪荒阎罗 我想做阎罗 阎罗传奇 洪荒吾乃阎罗大帝免费 吾乃阎罗大帝 洪荒吾阎罗大帝 洪荒之吾乃阎罗大帝 洪荒吾乃阎罗大帝第八区 都市之阎罗天子 洪荒吾为阎罗大帝 洪荒之阎罗大帝 洪荒吾乃阎罗 史上阎罗系统 阎罗养成系统 洪荒我乃阎罗大帝 我要做阎罗txt 我要做阎罗纵横 厄夜怪客我要做阎罗 阎肃 阎肃个人资料 阎良之窗 阎良飞机城 阎良二手房 阎良招聘 阎良航空城 西安到阎良 阎良旅游团 阎良楼盘 阎良一日游 阎良房价 阎良换锁 阎良清真寺 阎良开锁 阎良修锁 阎良医院 阎良旅游 阎良租房子 阎良交友 阎良三技校 阎良征婚