Linux系统调用的层次如下:

用户程序-------->C库(即API):INT 0x80------------>system_call------------>系统调用服务例程--------->内核程序

***API即就是系统提供的C库。系统调用是通过软中断指令INT 0x80实现的。

(1)INT 0x80:被封装在C库函数中,执行此指令会让新系统跳转到一个预设的内核空间地址,它指向系统调用处理程序,即system_call函数

(2)system_call:根据具体的系统调用号转到执行具体的系统调用服务例程。

过程:通过系统调用号查找系统调用表sys_call_table,软中断指令0x80执行时,系统调用号会被放入eax寄存器当中(由于系统调用服务例程只会从堆栈中获取参数),system_call函数可以读取eax寄存器获取(system_call函数执行时会首先将这些寄存器压入堆栈中),然后将其乘以4,生成偏移地址,然后以sys_call_table为基址,基址加上偏移地址,就可以得到具体的系统调用服务例程的地址,然后就可以得到系统服务例程(是对一个具体的系统调用的内核实现函数,系统调用处理程序是在执行系统调用服务例程之前的一个引导过程,是针对INT 0x80这条指令的,面向所有系统调用)了。

系统调用通过软中断INT 0x80陷入内核,跳转到系统调用处理程序system_call函数,然后处理相应的服务例程。但是由于是代表用户进程,所以这个执行过程并不属于中断上下文,而是进程上下文。因此,在系统调用的过程中,可以访问用户进程的许多信息,可以被其它进程抢占,可以休眠。

当系统调用完成后,把控制权交回到发起调用的用户进程,内核会有一次调度。如果发现有优先级更高的进程或当前进程的时间片用完,那么会选择优先级更高的进程或重新选择进程执行

二。系统调用的意义

系统调用在用户空间进程和硬件设备之间添加了一个中间层,该层的作用:

1.为用户空间提供了一个统一的硬件的抽象接口。

2.保证了系统的稳定和安全(可以避免应用程序不正确的使用硬件设备,窃取其它进程的资源)

3.如果应用程序可以随意的访问硬件,而内核又对此一无所知的话,几乎无法实现多任务和虚拟内存,当然也不能实现良好的稳定性和安全性

在Linux中,系统调用时用户空间访问内核的唯一手段,除异常和中断外,他们是访问内核的唯一入口。

参考博客:http://blog.sina.com.cn/s/blog_9df3658301011b7f.html

详解Linux系统调用过程相关推荐

  1. linux 系统调用函数详解,Linux系统调用之sysinfo函数解析

    [sysinfo系统调用] 功能描述: 获取系统总体统计信息. 用法: #include int sysinfo(struct sysinfo *info); 参数: info:指向sysinfo结构 ...

  2. linux上 arm开发环境搭建,详解 LINUX下QT For ARM开发环境搭建过程

    LINUX下QT For ARM开发环境搭建过程是本文介绍的内容,不多说,先来看内容.在PC上,我们需要得到两个版本的Qt,分别是:Qt-4.5.2和QtEmbedded-4.5.2-arm.前者包括 ...

  3. 详解Linux运维工程师打怪升级篇

    详解 Linux 运维工程师打怪升级篇 积累经验篇 做运维也快4年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师 是从一个呆逼进化为苦逼再成长为牛逼 ...

  4. 清理linux服务器缓存,详解Linux手动释放缓存的方法

    详解Linux手动释放缓存的方法 发布时间:2020-08-20 07:53:27 来源:脚本之家 阅读:87 作者:闪电王国 栏目:服务器 Linux释放内存的命令: sync echo 1 > ...

  5. 详解linux下auto工具制作Makefile源码包(制作篇)

    2019独角兽企业重金招聘Python工程师标准>>> 详解linux下auto工具制作Makefile源码包(制作篇) 水木杨 一.     概述 为了更好的制作configure ...

  6. 详解Linux交互式shell脚本中创建对话框实例教程

    详解Linux交互式shell脚本中创建对话框实例教程 本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一 ...

  7. 详解LINUX 的DHCP服务

         大家好!我是书记.今天我给大家带来的是Linux中的DHCP服务的详细讲解以及实现的具体的过程.     (1)     DHCP的概念:DHCP是进行IP地址等网络信息集中管理的 服务.在 ...

  8. find linux 目录深度_浪里淘沙,详解Linux系统中Find命令的实用技巧

    知了小巷:浪里淘沙,详解Linux系统中Find命令的实用技巧. 啊哈,找到了! 当我们需要在Linux系统上定位某个文件或目录时,find命令通常是必备之选. 它使用起来非常简单,但有许多不同的可选 ...

  9. 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器

    本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...

最新文章

  1. 【bzoj1951】 Sdoi2010—古代猪文
  2. Scala标识符的命名规范
  3. a high quality start up vc in uk
  4. Swift之从SIL深入分析函数的派发机制
  5. 远程仓库---从远程库克隆
  6. Asp.Net Core使用Skywalking实现分布式链路追踪
  7. 线性规划图解法求最优解_高中数学:简单的线性规划问题
  8. Vue学习笔记(二) —— 组件开发
  9. voms下的反射大师_大师们都爱磨砂,只有卒姆托将他发挥到极致
  10. sde自动备份到文件gdb
  11. accept 返回0_Netty深入浅出系列:Netty源码分析之accept过程
  12. 使用二维数组遇到的问题
  13. 欧姆龙cp1h指令讲解_欧姆龙PLC功能指令
  14. typora下载安装步骤
  15. 响应式2022英文企业官网源码,感觉挺有创意的
  16. python实现小写金额转换成大写
  17. oracle创建存储过程报错,oracle创建了存储过程,在PLSQL @路径 执行后报错
  18. 机器学习算法工程师也会遇到35岁这道坎么?
  19. 【ES6】ES6简介,ES6常用操作,let 、var和const的区别,看完我写的ES6,马上会的,你就是高手
  20. 寒门难出贵子,AI助力教育但问题依然难解

热门文章

  1. apollo找不到相应的namespace
  2. The Illustrated Transformer【译】
  3. dubbo实现SOA架构
  4. 找出最大数,连同下标一起输出
  5. 使用IDEA集成docker部署springboot项目及bug解决并连同redis、MySQL
  6. 学习netbeans电子商务教程第四节使用mysql遇到的操作问题
  7. ArcGIS教程:3D 点要素
  8. 相机内存卡照片删除怎么恢复?小伙伴们看过来!
  9. 新手小白用记事本编写Java入门程序需要注意的常见问题
  10. appium中的TouchAction的常用用法