这一章开始学习系统调用的有关内容,在linux内核分析中,系统调用是绕不去的一个坎。下面就是我这周的读书感受。

一.几个重要的基本概念

API系统调用在用户空间和硬件设备上添加了一个中间层(应用编程接口API),这个层的主要作用如下:1首先为用户空间提供了一种硬件的抽象接口。2.保证系统的稳定和安全3.系统调用是用户访问内核的唯一手段:除异常和陷入外

系统调用号:每个系统被赋予了一个系统调用号,一旦分配就不能有变更,这个表被存储在arch/i386/kernel/syscall.64.c当中。

系统调用处理程序:通过软中断的方式,引发一个异常来促使系统切换到内核态处理应用程序

二.系统调用的几个重要思想

Unix的接口有一句格言:“提供机制而不是策略。”

三.系统调用的具体过程:

有了用户态和内核态的基本知识了解之后,我们可以以系统调用为例,看一看中断具体是怎么执行的

系统调用的意义:

操作系统为用户态进程与硬件设备进行交互提供了一组接口——系统调用

    把用户从底层的硬件编程中解放了出来

    极大地提高了系统的安全性

    使用户程序具有可移植性:用户程序与具体硬件已经被抽象接口所替代

操作系统提供的API和系统调用的关系

API(应用程序编程接口)和系统调用:

    应用编程接口和系统调用是不同的:

    1.API只是一个函数定义

    2.系统调用通过软中断向内核发出了一个明确的请求

    Libc库定义的一些API引用了封装例成,唯一目的就是发布系统调用

    1.一般每个系统调用对应一个封装例程

    2.库函数再用这些封装例程定义出给用户的API(把系统调用封装成很多歌方便程序员使用的函数)

      不是每个API都对应一个特定的系统调用)

           API可能直接提供用户态的服务 如:一些数学函数

           1.一个单独的API可能调用几个系统调用

           2.不同的API可能调用了同一个系统调用

       返回值

           大部分封装例程返回一个整数,其值的含义依赖于相应的系统调用

           -1在多数情况下表示内核不能满足进程的请求

           Libc中定义的errno变量包含特定的出错码

系统调用的工作过程:

posted on 2016-03-28 09:50  20135124  阅读(209)  评论(0编辑  收藏  举报