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

释放双眼,带上耳机,听听看~!

第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)实现新增系统调用的优缺点。

给TA打赏
共{{data.count}}人
人已打赏
安全运维

WordPress网站专用docker容器环境带Waf

2020-7-18 20:04:44

安全运维

运维安全-Gitlab管理员权限安全思考

2021-9-19 9:16:14

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索