3分钟了解syscall系统调用|详细易懂的流程

文章目录

  • syscall
    • 1.简介
    • 2.详细解释
    • 3.具体举例
    • 4.比喻解释
    • 5.作用
    • 6.优点
    • 7.总结
  • syscall和int 0x80有什么不同?
    • 1. 上下文切换效率
    • 2. 指令执行流程
    • 3. 兼容性
    • 总结
  • syscall 具体流程
    • 1. 用户空间准备
    • 2. 执行syscall指令
    • 3. 切换到内核态
    • 4. 内核模式下执行系统调用
    • 5. 返回用户空间

syscall

1.简介

系统调用(syscall)是操作系统提供给程序以请求内核服务的一种机制。和int 0x80提供相同的服务。

2.详细解释

在计算机系统中,操作系统控制着对硬件资源的访问。应用程序不能直接操作硬件,而是需要通过操作系统提供的接口。系统调用就是这些接口之一,允许应用程序执行诸如读写文件、发送网络请求、创建进程等操作。系统调用作为用户空间(应用程序执行的地方)和内核空间(操作系统核心部分执行的地方)之间的桥梁,确保资源使用的安全性和有效性。

3.具体举例

以Linux操作系统中的read()系统调用为例。当一个程序想要从文件中读取数据时,它会执行以下步骤:

  1. 程序调用read()函数,并提供文件描述符(文件的唯一标识)、存放数据的缓冲区地址和要读取的字节数。
  2. read()函数将这些参数传递给操作系统内核。
  3. 内核检查参数的有效性,然后从文件系统中读取数据到缓冲区。
  4. 读取完成后,控制返回给程序,程序可以使用缓冲区中的数据。

4.比喻解释

可以将系统调用比作餐厅里的服务员。就像顾客不能直接进入厨房取菜,而需要通过服务员传达他们的需求一样,应用程序也不能直接访问硬件资源,而需要通过系统调用来请求操作系统执行特定的任务。

5.作用

系统调用使应用程序能够执行文件操作、进程控制、通信等操作,同时确保了操作系统能够控制和管理资源访问,保证系统的稳定性和安全性。

6.优点

安全性: 隔离用户程序和内核,防止直接的硬件访问导致的安全问题。
易用性: 提供了标准化的接口,简化了程序对硬件的操作。
兼容性: 应用程序通过系统调用与操作系统交互,减少了对特定硬件的依赖。

7.总结

系统调用是操作系统提供给应用程序的一种重要接口,它使得程序能够安全、有效地执行需要操作系统干预的操作,如文件处理、进程管理等。尽管系统调用引入了一定的性能开销,但它的安全性和易用性使得它成为操作系统设计中不可或缺的一部分。

syscall和int 0x80有什么不同?

1. 上下文切换效率

INT 80h:指令 INT 80h 触发软件中断。执行时,CPU 需要在处理中断之前保存程序的当前状态,包括各种寄存器。此过程是一个上下文切换,它涉及大量开销,因为 CPU 实质上是在暂停一个任务以启动另一个任务。

syscall: 该 syscall 指令旨在最大限度地减少需要保存和恢复的状态量,从而减少上下文切换开销。这是从用户模式到内核模式的更直接的过渡,需要更少的 CPU 时间和资源使用

2. 指令执行流程

INT 80h: 使用 INT 80h ,中断处理机制更复杂。CPU 必须跳转到中断向量,然后中断向量指向相应的内核例程。这会增加额外的步骤并增加指令的路径长度。
syscall: syscall 提供更直接的路径。它使用特殊的 CPU 寄存器直接跳转到内核中的系统调用处理程序。这种较短的路径意味着仅向内核发送系统调用请求所花费的 CPU 周期更少。

3. 兼容性

虽然 syscall 效率更高,但只能用于特定的CPU体系架构。INT 80h具有向后兼容性,对于不可以使用syscall的机器或旧软件上尤为重要。

总结

SYSCALL减少了上下文切换和简化了指令执行流程,性能更高,但对旧机器的兼容性不如int 80h.

syscall 具体流程

当执行系统调用的时候,具体的执行流程如下。
请添加图片描述

1. 用户空间准备

在用户空间中,在执行 syscall 指令之前,应用程序会设置系统调用号及其参数。这通常是通过将系统调用号放在寄存器中(对于 x86-64 体系结构)并将参数放在其他 RAX 寄存器(如 RDI, RSI, RDX, R10, R8 和 R9 )中来完成的。

2. 执行syscall指令

应用程序执行syscall CPU 指令。和add,mov一样,这是专为转换到内核模式以执行系统调用而设计的 CPU 指令。读取到该指令后,CPU就会依次完成下面工作。

3. 切换到内核态

CPU从用户态(ring 3)切换到内核模式(ring 0),以获得更高的执行权限。
这一步步骤的具体流程

1. 最小的上下文保存
a). CPU 自动将指令指针RIP保存到寄存器中 RCXRIP 指向应用程序中应在系统调用完成后执行的指令
b). 将包含 CPU 当前状态的 RFLAGS 寄存器保存到寄存器中R11 。这包括中断启用/禁用标志等标志。

这种最小的上下文保存是提升INT 80h 效率的关键改进之一。

2. 直接跳转到系统调用处理程序
CPU载入模型特定寄存器(MSR)IA32_LSTAR,其中包含内核中系统调用入口点的地址直接跳转到系统调用处理程序。这种直接跳转是相对于 INT 80h 方法的另一个效率改进,INT 80h 方法需要遍历中断描述符表。

至此,完成了内核态的切换,下面开始在内核模式下执行系统调用的程序。

4. 内核模式下执行系统调用

1. 执行调度程序
CPU 现在处于内核模式,在IA32_LSTAR 指向的地址处执行代码。这是Linux 内核中的系统调用调度程序。

调度程序从 RAX 寄存器中读取系统调用号。根据该调用号,从内核系统调用表中查找到相应的内核函数

调度程序调用系统调用号对应的函数。该函数的参数取自寄存器(RDI、RSI、RDX、R10、R8、R9)。

2. 执行内核函数
内核函数执行。这可能涉及各种操作,例如访问文件、创建进程或修改系统设置,具体取决于调用的系统调用。
完成后,内核函数通常会返回一个结果,该结果将放置在寄存器中 RAX

5. 返回用户空间

处理完系统调用后,内核需要将控制权交还给用户空间中的应用程序。
CPU执行sysret 指令。此指令针对从系统调用返回进行了优化。
sysret 恢复 CPU 的用户模式操作状态。它从 RCX 寄存器加载 RIP,从 R11 寄存器加载 RFLAGS,有效地返回到执行syscall之前的状态。
CPU 切换回用户模式,并在原始系统调用指令之后立即在应用程序中继续执行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/597014.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unity3D UGUI图集打包与动态使用(TexturePacker)

制作图集的好处: 众所周知CPU是用来处理游戏的逻辑运算的,而GPU是用来处理游戏中图像的。在GPU中,我们要绘制一个图像需要提交图片(纹理)到显存,然后再进行绘制(在这个过程中会产生一次DrawCall…

vue3 + TS + vite 搭建中后台管理系统(完整项目)

vue3 TS vite 搭建中后台管理系统(完整项目) 前言1、搭建步骤及方法2、集成多种插件功能,实现中后台按需使用3、新手学TS如何快速进入状态、定义TS类型4、layout搭建四款常见风格6、大屏搭建效果5、vue3Ts运营管理系统总结: 前言…

three.js相机按照指定路线在建筑模型中漫游(支持开始,暂停)

three.js相机按照指定路线在模型中漫游(支持开始,暂停) 关键点 相机运动曲线 // 相机路线 const points [new THREE.Vector3(0, 40, 300),new THREE.Vector3(50, 40, 300),new THREE.Vector3(50, 40, 50),new THREE.Vector3(150, 40, 50),…

详细解读QLC SSD无效编程问题-2

作者通过SimpleSSD仿真模型,采用SLCQLC混合模式来开展进一步的验证工作。评估过程中,当写入请求到达固态硬盘时,首先会被写入缓存(DRAM),然后才被回写到NAND。文中引入了一个名叫做LRU(Least Recently Used…

【Unity中的A星寻路】Navigation导航寻路系统四大页签详解

👨‍💻个人主页:元宇宙-秩沅 👨‍💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍💻 本文由 秩沅 原创 👨‍💻 收录于专栏:Uni…

几种读nii图像方法的轴序比较

读 .nii / .nii.gz 图像并转成 numpy 可用 medpy.io、nibabel、itk、SimpleITK 几种方法,然而几种方法读出来的轴序有出入,本篇比较此几种方法。 Datum 所用数据来自 verse,经 iTomxy/data/verse/preprocess.py 预处理,朝向和轴…

【观察】Aginode安捷诺:坚守“长期主义”,服务中国数字经济

毫无疑问,随着整个社会加速数字化转型,尤其是5G、人工智能、大数据等技术兴起,以及智慧医疗、智慧金融、智能制造等应用加速落地,算力网络在经济社会发展中扮演了愈来愈重要的角色,成为支撑数字经济蓬勃发展的“新引擎…

根本记不住MySQL进阶查询语句

1 MySQL进阶查询 1.1 MySQL进阶查询的语句 全文以数据库location和Store_Info为实例 ---- SELECT ----显示表格中一个或数个字段的所有数据记录 语法:SELECT "字段" FROM "表名"; select 列名 from 表名 ; ---- DISTINCT ----不显示重复的数…

高清网络视频监控平台的应用-城市大交通系统视联网

目 录 一、应用需求 二、系统架构设计 三、功能介绍 1.实时视频监控 2.云台控制 3.语音功能 4. 录像管理与回放 5.告警联动 6.多种显示终端呈现 (1)CS客户端 (2)web客户端 (3&#xf…

seo分享:慎重使用蜘蛛池

其实要提高搜索引擎蜘蛛的来访次数,唯一的方法还是要通过网站本身的内容更新。频繁更新有质量的内容,才能够提高蜘蛛的来访次数。如果本身内容更新不多,外部引流的蜘蛛过多,最终发现没什么内容索引,蜘蛛来访的次数也会…

【竞技宝】DOTA2:tundra宣布解散旗下阵容 whitemon留队

北京时间2024年1月4日,在DOTA2ESL吉隆坡站的比赛结束后,最近将要迎来的是BB Dacha别墅杯的预选赛,目前随着AR官宣新赛季阵容,国内一线队伍都已经全部公布了大名单。而国外还有一些队伍仍在进行人员调整,其中就包括前TI…

Strict MIME type checking is enforced for module scripts per HTML spec.

目录 前言错误信息如下:前言 最近使用docker打包Nginx和vue 为镜像文件,启动镜像时报错 错误信息如下: index89886.js:1 Failed to load module script: Expected a JavaScript module script but the server responded with a MIME type of "text/html". Stri…

MySQL之、CRUD、函数及union查询(实施必会)

文章目录 前言一、CRUD1.1SELECT(查询)1.2INSERT(新增)1.3UPDATE(修改)1.4DELETE(删除) 二、函数2.1常见函数2.1.1字符函数2.1.2数字函数2.1.3日期函数 2.2流程控制函数(重点)2.3聚合函数 三、union与union all思维导图: 前言 本篇博主给大家带来MySQL之、CRUD、常…

搜维尔科技:ART光学跟踪系统在工业VR/AR领域的应用

ART公司成立于1999年,拥有38万员工遍布全球,ART一直致力于红外线光学跟踪系统的研发与生产,并将先进的科技应用于产品研发,产品制造,市场营销,产品销售以及优秀的客户支持。主要向客户提供高端的虚拟现实跟…

MySQL Enterprise版本各系统安装包下载

一、官方下载地址 oracle下载地址 https://edelivery.oracle.com/osdc/faces/SoftwareDelivery 使用oracle账号登录进去 Category选择Download Package(下载安装包),搜索栏输入mysql Enterprise关键字点search进行搜索。选项结果第一个MySQL Enterprise Edition&a…

JAVA的引用与C++的指针有什么区别

JAVA的引用与C的指针有什么区别 1. Java值类型与引用类型1.1 变量初始化1.2 变量赋值1.3 函数传参 2. Java数据存储方式2.1 Java局部变量&&Java方法参数2.2 Java数组类型引用和对象2.3 String类型数据 3. Java引用类型3.1 强引用3.2 软引用3.3 弱引用3.4 虚引用 4. JAV…

MySQL8.0安装教程

Mysql安装教程 1.Mysql下载 进入官网https://www.mysql.com/进行下载: 2.Mysql安装 双击文件进行安装,选择默认安装方式: 这里列出了五种安装类型: Developer Default:默认安装类型;Server only&#x…

在Ubuntu22.04上部署Stable Diffusion

在AI绘画软件领域Stable-Diffusion(简称SD)在开源领域绝对是不二之选,他的插件方式可以让此软件具有更多的功能,开发者社群为此提供了大量免费高质量的外接预训练模型(fine-tune)和插件,并持续维…

Linkage Mapper 各工具参数详解——Barrier Mapper

【小白一学就会无需其他教程】此文档用于解析使用Linkage Mapper 各输入输出参数详情以及可能的影响,并介绍了如何解释模型输出结果和输出参数,适合刚入手的人。篇幅很长很啰嗦,是因为每个参数都解释的万分细致。 从以下链接中获取内容&#…

Linux文件fd剖析

学习之前,首先要认识什么是文件? 空文件也是要在内存中占据空间的,因为它还有属性数据。文件 属性 内容文件操作 对内容 对属性 或者对内容和属性的操作标定一个文件的时候,必须使用:路径文件名,文件具…