1.3_3 系统调用

1.3_3 系统调用

(一)什么是系统调用

回顾:操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务。主要包括命令接口和程序接口。其中,程序接口由一组系统调用组成。

image-20240219153022401

image-20240219153107595

  “系统调用”是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以通过系统调用来请求获得操作系统内核的服务

(二)系统调用与库函数的区别

image-20240219153426004

  在我们写程序时,实际上是可以直接通过汇编语言去进行系统调用,来请求操作系统服务的,如上图。

  但是,现在更多的是使用高级语言来编程。

  我们一般会使用高级语言提供的库函数来进行编程,如下图。这些库函数在底层也可能会用到系统调用,来请求操作系统的服务。

image-20240219153547126

  可见,系统调用是比库函数更为底层的接口。

image-20240219153724118

注意:

  库函数的底层不是一定会涉及系统调用的。

  有可能涉及系统调用,如:“创建一个新文件”的库函数。

  也可能不涉及系统调用,如:“取绝对值”的库函数。

(三)为什么系统调用是必须的?

举例

  比如打印文件。如果两个进程可以随意地、并发地共享打印机资源,打印机交替地处理两个进程发来的打印请求,那么打印的内容就混在一起了,这显然不是我们想要的结果。

  由于系统当中有各种各样的并发的进程,而这些并发的进程又需要共享地使用类似于打印机设备这样的共享资源。实际上,这样的共享资源是需要被各个进程互斥地共享的。

  怎么实现对共享资源的互斥访问呢?

  **解决方法:**由操作系统内核对共享资源进行统一的管理,并向上提供“系统调用”,用户进程想要使用打印机这种共享资源,只能通过系统调用向操作系统内核发出请求。内核会对各个请求进行协调处理。

(四)什么功能要用到系统调用?

image-20240219164906794

  应用程序通过系统调用请求操作系统的服务。而系统中的各种共享资源都由操作系统内核统一掌管,因此凡是与共享资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。

(五)系统调用的过程

  如果一个应用程序想要进行系统调用,它在背后需要做一些什么事情?

image-20240219165253858

  首先,应用程序运行在用户态,其中各个指令会被CPU依次执行。

  当它想要发出系统调用的时候,它要用传参指令给CPU的寄存器传递一些必要的参数。

image-20240219165932180

  例如,在某个寄存器中,存放的“参数1”,是用来指明此次要进行“哪种系统调用”的。(例如Linux系统中的“fork”系统调用)

  传递参数的指令可能有多条,取决于本次系统调用需要传递几个参数。操作系统会根据这些参数,判断这个应用程序到底想要什么样的服务。

  当传参指令都执行好以后,应用程序会再执行一条特殊的指令——陷入指令(这个在上一节中已经提到过)。

  陷入指令会引发内中断,因此CPU会转而执行相应的中断处理程序——即系统调用的入口程序。

image-20240219170257763

  “系统调用入口程序”实际上也就是“中断处理程序”,本质是一回事。只不过它处理的是“由陷入程序引发的内中断”。

  “系统调用入口程序”通过CPU寄存器中的参数(刚刚提到的),来判断此时要去执行哪种系统调用,并转而执行相应的系统调用程序(如:"fork"系统调用的处理程序)。

image-20240219171016768


高级语言调用库函数(涉及系统调用)的过程:

image-20240219171402618

过程:

传递相关系统调用所需参数 —> 执行陷入指令(用户态下执行) —> 执行相应的内核程序处理系统调用(核心态下执行) —> 返回应用程序。

注意:

  1.陷入指令是在用户态执行的,执行陷入指令后立即引发一个内中断,使CPU进入核心态

陷入指令是一种特殊的指令,但并不是特权指令,仍然是一个非特权指令。

  2.发出系统调用请求是在用户态,而对系统调用的相应处理核心态下进行。

注意:陷入指令 = trap指令 = 访管指令。

总结

image-20240219171827283

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

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

相关文章

leetcode(动态规划)53.最大子数组和(C++详细解释)DAY12

文章目录 1.题目示例提示 2.解答思路3.实现代码结果 4.总结 1.题目 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 提示 2.解答思…

十二:枚举与注解

文章目录 01、枚举类的使用1.1、枚举类的理解1.2、自定义枚举类1.3、使用enum关键字定义枚举类1.4、Enum类中的常用方法1.5、使用enum关键字定义的枚举类实现接口 02、注解的使用2.1、注解的理解2.3、如何自定义注解2.4、jdk中4个基本的元注解的使用12.5、jdk中4个基本的元注解…

RabbitMQ保证消息的可靠性

1. 问题引入 消息从发送,到消费者接收,会经理多个过程: 其中的每一步都可能导致消息丢失,常见的丢失原因包括: 发送时丢失: 生产者发送的消息未送达exchange消息到达exchange后未到达queue MQ宕机&…

Day11-Linux系统iNode及链接知识及企业按哪里精讲

Day11-Linux系统iNode及链接知识及企业按哪里精讲 1. 文件核心 属性知识1.1 什么是索引节点(inode)。1.2 索引节点作用1.3 inode是怎么产生的?1.4 inode的特点?1.5 Linux系统读取文件的原理1.6 企业生产案例:No space …

【Jvm】运行时数据区域(Runtime Data Area)原理及应用场景

文章目录 前言:Jvm 整体组成 一.JDK的内存区域变迁Java8虚拟机启动参数 二.堆0.堆的概念1.堆的内存分区2.堆与GC2.1.堆的分代结构2.2.堆的分代GC2.3.堆的GC案例2.4.堆垃圾回收方式 3.什么是内存泄露4.堆栈的区别5.堆、方法区 和 栈的关系 三.虚拟机栈0.虚拟机栈概念…

Python Selenium实现自动化测试及Chrome驱动使用

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站零基础入门的AI学习网站~。 目录 ​编辑 前言 Selenium简介 安装Selenium库 编写自动化测试脚本 1 打开浏览器并访问网页 2 查找页面元…

沁恒CH32V30X学习笔记11---使用外部时钟模式2采集脉冲计数

使用外部时钟模式2采集脉冲计数 使用外部触发模式 2 能在外部时钟引脚输入的每一个上升沿或下降沿计数。将 ECE 位置位时,将使用外部时钟源模式 2。使用外部时钟源模式 2 时,ETRF 被选定为 CK_PSC。ETR 引脚经过可选的反相器(ETP),分频器(ETPS)后成为 ETRP,再经过滤波…

MySQL 基础知识(十)之 MySQL 架构

目录 1 MySQL 架构说明 2 连接层 3 核心业务层 3.1 查询缓存 3.2 解析器 3.3 优化器 3.4 执行器 4 存储引擎层 5 参考文档 1 MySQL 架构说明 下图是 MySQL 5.7 及其之前版本的逻辑架构示意图 MySQL 架构大致可分为以下三层: 连接层:负责跟客户…

unity学习(26)——客户端与服务器合力完成注册功能(8)json编解码问题,大结局

服务器端发送的内容如下: 客户端所接受的内容如下: 是一样的,不是传输问题,少了一个解码的过程,之前那个addMessage函数应该是不能解码的! 具体解析一下数据包的内容:上边的是成功的&#xff0…

Sparse MLP

上图展示了本文网络的整体架构。与ViT、MLP-Mixer和Swin Transformer类似,空间分辨率为HW的输入图像被分割为不重叠的patch。作者在网络中采用了44的patch大小,每个patch被reshape成一个48维的向量,然后由一个线性层映射到一个c维embedding i…

【Jvm】性能调优(上)线上问题排查工具汇总

文章目录 一.互联网概念1.产品闭环和业务闭环2.软件设计中的上游和下游3.JDK运行时常量池 二.CPU相关概念1.查询CPU信息2.CPU利用率(CPU utilization)和 CPU负载(CPU load)2.1.如何理解CPU负载2.2.top命令查看CPU负载均值2.3.CPU负…

小型医院医疗设备管理系统|基于springboot小型医院医疗设备管理系统设计与实现(源码+数据库+文档)

小型医院医疗设备管理系统目录 目录 基于springboot小型医院医疗设备管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、职员信息管理 2、设备信息管理 3、库房信息管理 4、公告信息管理 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、…