Linux系统调用

一、概述

        现代操作系统中,内核提供了用户进程与内核进行交互的一组接口。这些接口让应用程序受限地访问硬件设备,提供了创建新进程并与已有进程进行通信的机制,也提供了申请操作系统其它资源的能力。这些接口就称为系统调用接口,Linux系统也提供了类似的接口,用来完成应用程序到内核的访问。


二、系统调用的作用

  1. 它为用户控件提供了一种硬件的抽象接口。
  2. 系统调用保证了系统的稳定和安全。
  3. 提供了进程地址空间的保护,是的每个应用程序都工作在自己的虚拟空间,从而隔离物理地址的访问。
三、接口设计格言——提供机制而不是策略
        应用程序一般不会直接调用系统调用,而是调用一些应用程序接口(API),比如C库提供的一些API。应用程序只跟API打交道,不关心系统调用,同样系统调用只跟内核打交道,不关心应用程序如何调用系统调用。这就是典型的策略与机制分离的设计思想,内核只负责设计机制,而是用的策略由应用程序来设计。

四、系统调用相关
        1. 系统调用实现了以下步骤:陷入内核,传递系统调用号和参数,执行系统调用并返回值给用户空间。
        2. 系统调用需要关联到系统调用号,Linux为每个系统调用分配唯一系统调用号,一旦确定就不再更改,即使是删除了某个系统调用,也需保持其调用号而不影响其它。
        3. 系统调用运行在内核空间,也即运行在当前进程上下文,current指针指向当前进程,也正因为如此,系统调用也可实现休眠,并且可被其它进程抢占,所以要注意系统调用的设计实现。调用结束返回到当前进程用户空间。
        4. 系统调用会对传入的参数进行严格的检验,尤其是指针。
        5. 系统调用的实现虽然比较简单,看驱动开发工程师都不会去实现一个新的系统调用,而是采用其它的方法来实现类似的访问,比如实现一个设备节点,通过ioctl来进行read、write。 

你可能感兴趣的:(linux)