【奔跑吧!Linux 内核(第二版)】第7章:系统调用的概念
笨叔 陈悦. 奔跑吧 Linux 内核(第2版) [M]. 北京: 人民邮电出版社, 2020.
文章目录
在现代操作系统中,处理器的运行模式通常分成两个空间:一个是内核空间,另一个是用户空间。大部分的应用程序运行在用户空间,而内核和设备驱动运行在内核空间。
应用程序需要访问硬件资源或者需要内核提供服务,该怎么办?
在现代操作系统架构中,内核空间和用户空间之间多了一个中间层——系统调用层。
系统调用层的主要作用?
系统调用层是操作系统内核与用户空间之间的关键中间层,其主要作用可概括为以下三个方面:
-
提供硬件抽象接口
系统调用层为用户空间程序屏蔽了底层硬件细节,提供统一的抽象接口。例如,应用程序通过文件操作相关的系统调用(如open、read)访问磁盘时,无需关心具体的磁盘类型、文件系统结构或物理扇区位置,内核会处理这些底层差异。这种抽象简化了开发,提升了编程效率。 -
保障系统稳定与安全
系统调用层作为用户程序访问内核的唯一合法入口,通过权限检查、参数验证等机制防止非法操作。例如,内核可基于进程权限过滤对硬件或敏感资源的请求,避免应用程序直接操纵硬件或越权访问其他进程资源,从而维护系统的整体安全性和稳定性。 -
增强可移植性
通过标准化接口(如POSIX),系统调用层使应用程序无需修改代码即可在不同硬件架构或操作系统上重新编译运行。例如,Linux的C库(如glibc)封装了系统调用,遵循POSIX标准的程序可在不同UNIX-like系统间移植。
此外,系统调用层还支持多任务和虚拟内存的实现。通过集中管理资源访问,内核能高效调度CPU和内存,确保多个进程并发运行时的隔离性与公平性。
Linux 内核里提供了哪些机制来让用户程序和内核进行信息交互?
- 设备节点。在实现了一个设备节点之后,就可以对该设备执行 read() 和 write() 等操作,甚至可以通过 ioctl 接口来自定义一些操作。
- sysfs 接口。sysfs 接口也是一种让用户程序和内核直接通信的方式,是 Linux 内核推荐的做法。
- 系统调用。可以通过新增系统调用的方式实现。