详解Linux系统调用过程
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系统调用过程相关推荐
- linux 系统调用函数详解,Linux系统调用之sysinfo函数解析
[sysinfo系统调用] 功能描述: 获取系统总体统计信息. 用法: #include int sysinfo(struct sysinfo *info); 参数: info:指向sysinfo结构 ...
- linux上 arm开发环境搭建,详解 LINUX下QT For ARM开发环境搭建过程
LINUX下QT For ARM开发环境搭建过程是本文介绍的内容,不多说,先来看内容.在PC上,我们需要得到两个版本的Qt,分别是:Qt-4.5.2和QtEmbedded-4.5.2-arm.前者包括 ...
- 详解Linux运维工程师打怪升级篇
详解 Linux 运维工程师打怪升级篇 积累经验篇 做运维也快4年多了,就像游戏打怪升级,升级后知识体系和运维体系也相对变化挺大,学习了很多新的知识点. 运维工程师 是从一个呆逼进化为苦逼再成长为牛逼 ...
- 清理linux服务器缓存,详解Linux手动释放缓存的方法
详解Linux手动释放缓存的方法 发布时间:2020-08-20 07:53:27 来源:脚本之家 阅读:87 作者:闪电王国 栏目:服务器 Linux释放内存的命令: sync echo 1 > ...
- 详解linux下auto工具制作Makefile源码包(制作篇)
2019独角兽企业重金招聘Python工程师标准>>> 详解linux下auto工具制作Makefile源码包(制作篇) 水木杨 一. 概述 为了更好的制作configure ...
- 详解Linux交互式shell脚本中创建对话框实例教程
详解Linux交互式shell脚本中创建对话框实例教程 本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一 ...
- 详解LINUX 的DHCP服务
大家好!我是书记.今天我给大家带来的是Linux中的DHCP服务的详细讲解以及实现的具体的过程. (1) DHCP的概念:DHCP是进行IP地址等网络信息集中管理的 服务.在 ...
- find linux 目录深度_浪里淘沙,详解Linux系统中Find命令的实用技巧
知了小巷:浪里淘沙,详解Linux系统中Find命令的实用技巧. 啊哈,找到了! 当我们需要在Linux系统上定位某个文件或目录时,find命令通常是必备之选. 它使用起来非常简单,但有许多不同的可选 ...
- 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...
最新文章
- 【bzoj1951】 Sdoi2010—古代猪文
- Scala标识符的命名规范
- a high quality start up vc in uk
- Swift之从SIL深入分析函数的派发机制
- 远程仓库---从远程库克隆
- Asp.Net Core使用Skywalking实现分布式链路追踪
- 线性规划图解法求最优解_高中数学:简单的线性规划问题
- Vue学习笔记(二) —— 组件开发
- voms下的反射大师_大师们都爱磨砂,只有卒姆托将他发挥到极致
- sde自动备份到文件gdb
- accept 返回0_Netty深入浅出系列:Netty源码分析之accept过程
- 使用二维数组遇到的问题
- 欧姆龙cp1h指令讲解_欧姆龙PLC功能指令
- typora下载安装步骤
- 响应式2022英文企业官网源码,感觉挺有创意的
- python实现小写金额转换成大写
- oracle创建存储过程报错,oracle创建了存储过程,在PLSQL @路径 执行后报错
- 机器学习算法工程师也会遇到35岁这道坎么?
- 【ES6】ES6简介,ES6常用操作,let 、var和const的区别,看完我写的ES6,马上会的,你就是高手
- 寒门难出贵子,AI助力教育但问题依然难解