这篇文章是《读薄「Linux 内核设计与实现」》系列文章的第 III 篇,本文主要讲了以下问题:系统调用的概念、系统调用的实现原理与过程以及如何在 Linux 中增加一个系统调用。
0x00 系统调用的概念
系统调用是为了和用户空间上的进程进行交互,内核提供的一组界面。
应用程序通过这组界面访问硬件和其他操作系统资源
完成对硬件和资源的访问控制
硬件设备的抽象(提供设备的独立性)
0x01 系统调用简介
I 常用系统调用
fork(), exec(), open(), read(), write(), close(),……
目前 Linux 系统调用 300 多个
II 应用程序及系统调用的层次关系
应用程序通过在用户空间实现的 API 而不是直接通过系统调用来编程
例:调用 printf() 函数时,应用程序、C 库和内核的关系:
应用程序调用 printf() -> C 库中的 printf() -> C 库中的 write() -> 内核中的 write() 系统调用
0x02 Linux 系统调用实现原理
I 相关概念
int 80H:软中断,通知内核的机制是靠软中断实现的,第128号中