博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第五章 系统调用
阅读量:5033 次
发布时间:2019-06-12

本文共 928 字,大约阅读时间需要 3 分钟。

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

系统调用的工作过程:

转载于:https://www.cnblogs.com/20135124freedom/p/5327908.html

你可能感兴趣的文章
sharepoint Report使用共享数据源部署报错
查看>>
C++ Primer 5th 第16章 模板与泛型编程
查看>>
22个Web 在线编辑器[转]
查看>>
解决“The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path”问题...
查看>>
T-SQL语句学习(一)
查看>>
装箱拆箱(一)
查看>>
Python3 PyMySQL 的使用
查看>>
11个审查Linux是否被入侵的方法
查看>>
CentOS6.7源码安装MySQL5.6
查看>>
android Bitmap总结
查看>>
触发器简介
查看>>
JAVA反射机制的学习
查看>>
mysql - rollup 使用
查看>>
Chrome系列 Failed to load resource: net::ERR_CACHE_MISS
查看>>
出现函数重载错误call of overloaded ‘printfSth(double)’ is ambiguous
查看>>
SDUT 1941-Friday the Thirteenth(水)
查看>>
java API连接虚拟机上的hbase
查看>>
c#扩展出MapReduce方法
查看>>
Cookie工具类 - CookieUtil.java
查看>>
[转载]linux下各文件夹的结构说明及用途介绍
查看>>