2. 系统调用

系统调用被应用程序(用户程序)用于向操作系统请求服务。以下陈述说明了为什么需要系统调用。操作系统可以直接访问系统硬件,但用户程序不能直接访问硬件。这样做是为了内核可以保护系统免受恶意用户程序的侵害。但是,用户程序经常需要来自硬件的一些信息(例如,来自网络摄像头以显示图片),但它无法直接获取信息。因此,它请求操作系统提供信息。此请求是通过使用适当的系统调用来完成的。

系统调用在内核模式下执行。每个系统调用都有一个与之关联的编号。这个编号被传递给内核,内核就是通过这个编号知道发起了哪个系统调用。当用户程序发出系统调用时,实际上是在调用一个库例程。库例程通过执行 INT 0x80 汇编指令向 Linux 操作系统发出陷阱。它还使用 EAX 寄存器将系统调用号传递给内核。系统调用的参数也使用其他寄存器(EBX、ECX 等)传递给内核。内核执行系统调用,并使用寄存器将结果返回给用户程序。如果系统调用需要向用户程序提供大量数据,它将使用另一种机制(例如,copy_to_user 调用)。