Linux系统学习

系统调用指操作系统提供给用户程序调用的一组“特殊”接口,用户程序可以通过这组“特殊”接口来获得操作系统内核提供的服务。

为什么用户程序不能直接访问系统内核提供的服务呢?这是由于在Linux中,为了更好地保护内核空间,将程序的运行空间分为用户空间和内核空间(也就是常称的用户态和内核态),它们分别运行在不同的级别上,逻辑上是相互分离的。因此,用户进程通常情况下不允许访问内核数据,也无法使用内核函数,它们只能在用户空间操作用户数据,调用用户空间的函数。

但是,在有些情况下,用户空间的进程需要获得一定的系统服务(调用内核空间程序),这时操作系统就必须利用系统提供用户的“特殊接口”———系统调用规定用户进程进入内核空间的具体位置。在进行系统调用时,程序运行空间需要从用户空间进入内核空间,处理完成后再返回用户空间。

Linux系统调用还算精简(只有250个左右),它继承了UNIX系统调用中最基本和最有用的部分。这些系统调用按照功能逻辑大致可分为进程控制、进程间通信、文件系统控制、存储管理、网络管理、套接字控制、用户管理等几类。

用户编程接口(API)

前面讲到的系统调用并不直接与程序员进行交互,它仅仅是一个通过软中断机制向内核提交请求以获取内核服务的接口。实际使用中,程序员调用的通常都是用户编程接口(API)。

例如,创建进程的API函数fork()函数对应于内核空间的sys_fork()系统调用,但并不是所有的函数都对应一个系统调用。有时,一个API函数会需要几个系统调用来共同完成函数的功能,甚至还有一些API函数不需要调用相应的系统调用(因此它所完成的不是内核提供的服务)。

系统命令

系统命令相对于API更高了一层,它实际上是一个可执行程序,它的内部引用了用户编程接口(API)来实现相应的功能,它们之间的关系如下图1:

python 调用linux内核api_Linux系统调用及用户编程接口(API)学习相关推荐

  1. Linux系统调用及用户编程接口(API)学习

    Linux系统调用 系统调用指操作系统提供给用户程序调用的一组"特殊"接口,用户程序可以通过这组"特殊"接口来获得操作系统内核提供的服务. 为什么用户程序不能直 ...

  2. Linux内核Hook系统调用execve

    资源下载地址:linux内核hook系统调用execve函数-Linux文档类资源-CSDN下载 (已在内核为 4.19.0-amd64-desktop版本uos编译通过,并成功达到目的) 在Linu ...

  3. 第四十二期-ARM Linux内核的系统调用(2)

    作者:罗宇哲,中国科学院软件研究所智能软件研究中心 上一期中我们介绍了ARM Linux内核中的系统调用和定义系统调用的流程,这一期我们将介绍系统调用的执行过程. 一.ARM Linux内核中系统调用 ...

  4. linux内核添加系统调用(详细)

    linux内核添加系统调用(详细) 说在前面: 这是我第五次编译内核,分别踩了很多坑.中途问过wz佬,佬让我用qemu.我还是最后换ubuntu虚拟机跑了.现在已经有点emo了. 这篇博客是我第五次的 ...

  5. Python调用Linux终端命令---转自本人的私人博客

    python调用Linux终端使用Linux命令,需要一subprocess模块. 挂上一组代码: import subprocessdef mypass():mypass = 'lqs1503715 ...

  6. 《LINUX内核设计与实现》第五章学习总结

    一.与内核通信 系统调用:用户控件进程和硬件设备之间添加了一个中间层 系统调用的三个主要作用: 为用户空间提供了一种硬件的抽象接口 系统调用保证了系统的稳定和安全 每个进程都运行在虚拟系统中,而在用户 ...

  7. python如何实现接口安全_利用pypy沙箱模式实现安全的开放式Python用户编程接口的方法与流程...

    本发明涉及人机交互技术领域,具体为一种利用pypy沙箱模式实现安全的开放式Python用户编程接口的方法. 背景技术: 编程是人与计算机交互最直接与高效的方式,由于其专业性与敏感性,一般产品不会提供该 ...

  8. linux内核那些事之用户空间管理

    内核主要数据结构 linux内核将用户空间抽象成struct vm_area_struct进行管理,每申请以个用户空间在内核中都会抽象成对应的vm_are_struct进行管理,同时为了区别不同进程的 ...

  9. linux内核编译系统调用,linux编译内核及添加系统调用

    我们都知道系统功能调用是Unix/Linux操作系统向用户程序提供支持的接口,通过这些接口应用程序向操作系统请求服务,控制转向操作系统,而操作系统在完成服务后,将控制和结果返回给用户程序. 系统调用的 ...

最新文章

  1. MTD的坏块管理(一)-快速了解MTD的坏块管理
  2. Windows 10 又在生产环境进行测试?微软:发错了
  3. AI 摄像头翻车:把光头裁判误为足球,观众花钱看了个寂寞...
  4. 【模式识别与机器学习】——3.9势函数法:一种确定性的非线性分类方法
  5. 【小程序】当前“页面B”动态更改title,点击返回按钮,更改的标题会显示在“来源页面A”...
  6. SQL Server高级查询之数据库安全管理 第六章节
  7. 文献检索是利用计算机对文献,文献检索计算机课.ppt
  8. WinAPI 数据类型
  9. 三十年了,读书依然不求甚解:一个普通程序员的读书生涯回顾
  10. Hutool 导出excel并合并单元格
  11. 诚之和:太平鸟难渡“抄袭劫”?
  12. animation-delay负值妙用,你不来了解一下吗
  13. 【HDU No. 2243】单词情结 考研路茫茫——单词情结
  14. python 拼音地名对应关系,使用Python的http.server实现一个简易的Web Api对外提供HanLP拼音转换服务...
  15. VS异常:文件乱码:文件加载,使用Unicode(UTF-8)编码加载文件xxx时,有些字节已用Unicode替换字符替换。保存该文件将不会保留原始文件内容。
  16. RVDT接口测试工装研究
  17. [转]数据的游戏:冰与火
  18. 原生js实现滑块拖动功能
  19. 笔记本电脑卡顿怎么办?教你一键重装系统让电脑“复活”
  20. 使用 Unity 和 C# 开发您的首个游戏

热门文章

  1. 【opencv】20.直方图均衡化的数学原理
  2. 【数据结构与算法】2.深度优先搜索DFS、广度优先搜索BFS
  3. 《Effective-Ruby》读书笔记
  4. HashSet源码解析
  5. JVM Class详解之一
  6. 使用Spring Boot开发Web项目
  7. Spring中ApplicationContext的事件机制
  8. Java并发编程(6):Runnable和Thread实现多线程的区别(含代码)
  9. 浅谈线程池(上):线程池的作用及CLR线程池
  10. Scala基础教程(五):函数、闭包