zoukankan      html  css  js  c++  java
  • 第五章 系统调用

    这一章开始学习系统调用的有关内容,在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变量包含特定的出错码

    系统调用的工作过程:

  • 相关阅读:
    程序输出小学四则运算表达式,支持真分数四则运算
    自我介绍
    一维数组求最大子数组的和(首位相邻32位)
    一维数组子数组求最大和
    第三周进度条
    第三周总结PSP日志文件
    四则运算<3>单元测试
    四则运算<3>
    30道四则运算<2>单元测试
    构建之法阅读笔记02
  • 原文地址:https://www.cnblogs.com/20135124freedom/p/5327908.html
Copyright © 2011-2022 走看看