当前位置: 首页 > news >正文

操作系统之系统调用

系统调用

从上文简介得知,操作系统是计算机硬件和软件之间的桥梁,通过管理计算机软件和硬件资源,最终为我们用户提供服务。就如同一个管家帮助我们对CPU(进程)的管理、内存的管理、设备的管理、文件的管理。而我们如何实现操作系统这个管家帮助我们的管理就需要用到系统调用了。

系统调用 是用户程序与操作系统内核之间的接口,用于在用户空间和内核空间之间进行交互。系统调用允许用户程序请求操作系统提供的服务,如文件操作、进程管理、内存分配等。简单来说,系统调用就相当于操作系统这个管家底下的下人,去完成管家所要求的具体事项。是应用程序请求操作系统执行特权操作的一个机制。

操作系统的接口类型

(1)图形接口:主要是通过图标、文字、窗口等形式形成一个便于操作的使用环境,令任何人都可以使用计算机。例如Windows系统

(2)命令级接口:是提供给系统管理员或者程序员的接口,他们可以通过命令级接口向计算机发号施令,而每条命令又有很多选项,这是图形接口无法给予的功能。 例如Linux系统

(3)程序接口:是面向程序开发者的接口,他们可以通过程序接口获取更多系统资源和服务,并且程序接口也是程序取得操作系统服务的唯一途径,OS的程序接口又是由各种类型系统调用组成。

操作系统的接口标准

POSIX标准,由IEEE(Institute of Electrical and Electronics Engineers)制定的标准,旨在确保不同操作系统之间的兼容性和可移植性。

基本概念

在了解具体的系统调用之前我们需要先需要知道以下几个概念:

系统调用与API(应用程序接口)

联系与区别:

1、API是对系统调用的抽象与封装,通常由操作系统或第三方库提供。通过API,开发者能够方便地访问底层系统调用,而无需直接与内核交互。 2、系统调用是API的实现,通常位于操作系统内核层。当开发者调用API时,API会调用相应的系统调用来完成底层的任务。

以下是C语言中API函数printf()调用系统调用write()的过程

系统态与用户态

系统态:指操作系统内核正在占用CPU运行时的工作状态,有较高的特权级别,又称为内核态、管态。
用户态:用户程序运行时的状态,较低的特权级别,又称为普通态(普态)、目态。

系统调用号

是操作系统用来标识不同系统调用的唯一标识符。每个系统调用在操作系统内核中都有一个与之关联的编号。

系统调用表(sys_call_table)

是操作系统内核中的一个数据结构,它将系统调用号与实际的系统调用处理函数(内核函数)相对应。每个系统调用号都会在系统调用表中有一个对应的条目,系统调用表在系统启动时被初始化并存储在内存中。操作系统通过查找这个表来决定在用户程序发起某个系统调用时,应该调用哪个内核函数来处理该请求。

系统调用过程

当用户态的进程调用一个系统调用时,首先调用引bc库中的函数,这个函数必定有一条从用户态转入到内核态的陷入指令(如int0x80),这时便进入了内核态,在内核中找到系统调用表的入口地址sys_call_table,然后根据系统调用号在表中查到对应的系统调用入口地址,并执行相应的系统调用服务例程,执行完成后通过返回指令iet从内核态返回到用户态。

以fork()函数为例

如图
(1)从用户程序中调用fork();
(2)在Iibc库中把fork()对应的系统调用号“2”放入寄存器eax;
(3)通过“int 0x80"陷入内核;
(4)在中断描述表IDT中查到系统调用的入口“0x80";
(5)进入Linux内核的entry_.32(64).S文件,从系统调用表sys_call_table中找到sys_fork的入口地址;
(6)将控制权转交给系统调用,执行fork.c中的do_fork代码;
(7)执行结束后通过iret或者sysireti返回;
(8)最后检查切换回用户空间之前需要完成的任务,如果没有则恢复用户进程的状态,并将控制权交还给用户程序。

相关文章:

操作系统之系统调用

系统调用 从上文简介得知,操作系统是计算机硬件和软件之间的桥梁,通过管理计算机软件和硬件资源,最终为我们用户提供服务。就如同一个管家帮助我们对CPU(进程)的管理、内存的管理、设备的管理、文件的管理。而我们如何…...

【docker】exec /entrypoint.sh: no such file or directory

dockerfile生成的image 报错内容: exec /entrypoint.sh: no such file or directory查看文件正常在此路径,但是就是报错没找到。 可能是因为sh文件的换行符使用了win的。...

CAPL概述与环境搭建

CAPL概述与环境搭建 目录 CAPL概述与环境搭建1. CAPL简介与应用领域1.1 CAPL简介1.2 CAPL的应用领域 2. CANoe/CANalyzer 安装与配置2.1 CANoe/CANalyzer 简介2.2 安装CANoe/CANalyzer2.2.1 系统要求2.2.2 安装步骤 2.3 配置CANoe/CANalyzer2.3.1 配置CAN通道2.3.2 配置CAPL节点…...

ML-Agents:智能体(三)

注:本文章为官方文档翻译,如有侵权行为请联系作者删除 Agent - Unity ML-Agents Toolkit–原文链接> ML-Agents:智能体(一) ML-Agents:智能体(二) ML-Agents:智能体&a…...

【harbor】离线安装2.9.0-arm64架构服务制作和升级部署

执行: .prepare 【作用就是产生一些配置信息 和docker-compose.yaml文件,然后docker-compose发布docker】 harbor官网地址:Harbor 参考文档可以看这里:部署 harbor 2.10.1 arm64 - 简书。 前提环境准备: 安装docker 和 docker…...

可视化-Visualization

可视化-Visualization 1.Introduction Visualization in Open CASCADE Technology is based on the separation of: on the one hand – the data which stores the geometry and topology of the entities you want to display and select, andon the other hand – its pr…...

完整化安装kubesphere,ks-jenkins的状态一直为init

错误描述: 打印日志: kubectl describe pod ks-jenkins-7fcff7857b-gh4g5 -n kubesphere-devops-system 日志描述如下: Events: Type Reason Age From Message ---- ------ ---- …...

halcon三维点云数据处理(十)locate_cylinder_3d

目录 一、locate_cylinder_3d例程代码二、gen_binocular_rectification_map函数三、binocular_disparity函数四、自定义函数select_best_candidates五、自定义函数remove_shadowed_regions 一、locate_cylinder_3d例程代码 1、读取或者创建3D形状模型, 2、根据双目…...

【CSS】设置滚动条样式

文章目录 基本语法用法案例 基本语法 在CSS中,可以使用 ::-webkit-scrollbar 和相关伪元素来为滚动条设置样式,但请注意这些伪元素是非标准的,主要用于WebKit内核浏览器(如Chrome、Safari)。 ::-webkit-scrollbar CSS …...

一个运行在浏览器中的开源Web操作系统Puter本地部署与远程访问

文章目录 前言1.关于Puter2.本地部署Puter3.Puter简单使用4. 安装内网穿透5.配置puter公网地址6. 配置固定公网地址 💡 推荐 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。【点击跳转到网站…...

支持selenium的chrome driver更新到131.0.6778.264

最近chrome释放新版本:131.0.6778.264 如果运行selenium自动化测试出现以下问题,是需要升级chromedriver才可以解决的。 selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only s…...

conda+jupyter+pycharm:如何在Windows conda环境下运行jupyter并使用浏览器或者pycharm运行.ipynb

1 安装conda 2 conda环境下安装jupyter pip install jupyter3 设置jupyter配置文件 1)创建 jupyter_notebook_config.py文件 jupyter notebook --generate-config 2)设置密码 3)设置参数 直接将以下参数修改为自己的配置后复制到配置文件…...

生成式数据增强在大语言模型中的应用与实践

引言 近年来,大语言模型(Large Language Models, LLMs)如GPT、BERT等在自然语言处理(NLP)领域取得了巨大突破。然而,这些模型的性能往往依赖于大量高质量的训练数据,而在许多实际应用场景中&am…...

深度学习笔记11-优化器对比实验(Tensorflow)

🍨 本文为🔗365天深度学习训练营中的学习记录博客🍖 原作者:K同学啊 目录 一、导入数据并检查 二、配置数据集 三、数据可视化 四、构建模型 五、训练模型 六、模型对比评估 七、总结 一、导入数据并检查 import pathlib,…...

汽车免拆诊断 | 2007款保时捷Carrera S车行驶中发动机冷却液温度报警灯异常点亮

故障现象 一辆2007款保时捷Carrera S车,搭载3.8 L自然吸气发动机,累计行驶里程约为7.8万km。车主反映,车辆行驶一段距离后,组合仪表上的发动机冷却液温度报警灯异常点亮。为此,在其他维修厂已更换过节温器、发动机冷却…...

【蓝牙】win11 笔记本电脑连接 hc-06

文章目录 前言步骤 前言 使用电脑通过蓝牙添加串口 步骤 设置 -> 蓝牙和其他设备 点击 显示更多设备 更多蓝牙设置 COM 端口 -> 添加 有可能出现卡顿,等待一会 传出 -> 浏览 点击添加 hc-06,如果没有则点击 再次搜索 确定 添加成…...

what?ngify 比 axios 更好用,更强大?

文章目录 前言一、什么是ngify?二、npm安装三、发起请求3.1 获取 JSON 数据3.2 获取其他类型的数据3.3 改变服务器状态3.4 设置 URL 参数3.5 设置请求标头3.6 与服务器响应事件交互3.7 接收原始进度事件3.8 处理请求失败3.9 Http Observables 四、更换 HTTP 请求实现…...

EFCore HasDefaultValueSql (续2 HasComputedColumnSql)

前情:EFCore HasDefaultValueSql EFCore HasDefaultValueSql (续1 ValueGeneratedOnAdd)-CSDN博客 小伙伴在使用 HasDefaultValueSql 时,对相关的 ValueGeneratedOnAdd, HasComputedColumnSql 也有了疑问: HasComputedColumnSql 对于计算…...

springboot整合h2

在 Spring Boot 中整合 H2 数据库非常简单。H2 是一个轻量级的嵌入式数据库&#xff0c;非常适合开发和测试环境。以下是整合 H2 数据库的步骤&#xff1a; 1. 添加依赖 首先&#xff0c;在你的 pom.xml 文件中添加 H2 数据库的依赖&#xff1a; <dependency><grou…...

Unity自带的真车模拟系统,速度不够大r时如何以匀速上桥

在 Unity 中&#xff0c;如果你使用自带的真车模拟系统&#xff08;如 Wheel Collider&#xff09;时&#xff0c;发现车辆上桥时速度不够&#xff0c;导致无法顺利上坡&#xff0c;可以通过以下方法调整车辆的行为&#xff0c;使其能够以匀速上桥&#xff1a; 1. 调整 Wheel C…...

HarmonyOS鸿蒙-@State@Prop装饰器限制条件

一、组件Components级别的状态管理&#xff1a; State组件内状态限制条件 1.State装饰的变量必须初始化&#xff0c;否则编译期会报错。 // 错误写法&#xff0c;编译报错 State count: number;// 正确写法 State count: number 10; 2.嵌套属性的赋值观察不到。 // 嵌套的…...

C# 中的 Task 和 Async/Await

理解 C# 中的 Task 和 Async/Await&#xff1a;提升程序性能的利器 前言&#xff1a;在现代应用程序开发中&#xff0c;特别是在设计用户界面&#xff08;UI&#xff09;和进行网络请求等 I/O 操作时&#xff0c;异步编程变得尤为重要。C# 提供了一套强大的异步编程模型&#…...

vue.js 基于VueCli自定义创建项目

在使用Vue.js进行项目开发时&#xff0c;我们可以使用Vue CLI来快速创建项目。Vue CLI是一个基于Vue.js的命令行工具&#xff0c;它提供了一套完整的项目脚手架&#xff0c;可以帮助开发者快速搭建Vue.js项目的开发环境。 下面我们来详细解析如何使用Vue CLI自定义创建项目&am…...

Java中的反射机制及其应用场景

目录 什么是Java反射机制&#xff1f; 工作原理 主要应用场景 注意事项 总结 什么是Java反射机制&#xff1f; Java反射机制是一种强大的工具&#xff0c;它允许程序在运行时访问、检查和修改其本身的类和对象的信息。通过反射&#xff0c;开发者可以在不知道类的具体实现…...

金融项目实战 03|JMeter脚本实现手工接口测试

目录 一、环境说明 1、项目环境搭建 2、Mock说明 二、构造测试数据 1、通过系统页面构造 2、通过接口构造 3、通过数据库构造【推荐】 4、案例&#xff1a;构造借款业务数据 三、JMeter执行接口测试用例 1、获取图片验证码、获取短信验证码 2、注册脚本 3、登录脚本…...

前端工具汇总

1. vscode 下载地址&#xff1a;https://code.visualstudio.com/ vscode扩展汇总&#xff1a; 1.1 Code Spell Checker&#xff08;必须安装&#xff09; 代码拼写检查器 1.2 Auto Close Tag 自动添加HTML/XML的关闭标签 3. Auto Import 自动查找、解析并为所有可用导入…...

【学习路线】Python数据分析(数据科学) 详细知识点学习路径(附学习资源)

学习本路线内容之前&#xff0c;请先学习Python的基础知识 其他路线&#xff1a; Python基础 >> Python进阶 >> Python爬虫 >> Python数据分析&#xff08;数据科学&#xff09; >> Python 算法&#xff08;人工智能&#xff09; >> Pyth…...

Flutter 实现验证码输入框学习

学习flutter代码 实现一个用于输入验证码的自定义组件&#xff0c;它允许用户输入固定长度的验证码&#xff0c;并在输入完成时触发回调。 前置知识点学习 TextStyle TextStyle 是 Flutter 中用于定义文本样式的类。它提供了一组属性来控制文本的外观&#xff0c;如字体大小、…...

hutool糊涂工具通过注解设置excel宽度

import java.lang.annotation.*;Documented Retention(RetentionPolicy.RUNTIME) Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER}) public interface ExcelStyle {int width() default 0; }/*** 聊天记录*/ Data public class DialogContentInfo {/**…...

汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图)

汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图) 前面的两篇博文简述了AutoSAR CP分层架构的概念&#xff0c;下面我们来具体到每一层的具体内容进行讲解&#xff0c;每一层的每一个功能块力求用一个总览图&#xff0c;外加一个例子的图给大家进…...

有收到腾讯委托律师事务所向AppStore投诉带有【水印相机】主标题名称App的开发者吗

近期&#xff0c;有多名开发者反馈&#xff0c;收到来自腾讯科技 (深圳) 有限公司委托北京的一家**诚律师事务所卞&#xff0c;写给AppStore的投诉邮件。 邮件内容主要说的是&#xff0c;腾讯注册了【水印相机】这四个字的商标&#xff0c;所以你们这些在AppStore上的app&…...

SpringBoot操作spark处理hdfs文件

SpringBoot操作spark处理hdfs文件 1、导入依赖 <!-- spark依赖--><dependency><groupId>org.apache.spark</groupId><artifactId>spark-core_2.12</artifactId><version>3.2.2</version></dependency><depend…...

Spring Boot中的依赖注入是如何工作

Spring Boot 中的依赖注入&#xff08;Dependency Injection&#xff0c;简称 DI&#xff09;是通过 Spring 框架的核心机制——控制反转&#xff08;Inversion of Control&#xff0c;IOC&#xff09;容器来实现的。Spring Boot 基于 Spring Framework&#xff0c;在应用中自动…...

算法面试1

简述yolov1的网络架构 YOLOv1网络结构包括24层卷积层用来提取图像的特征&#xff0c;2层全连接层回归得到7730&#xff08;141420&#xff09;的张量。   网络结构大概如下&#xff1a;输入的是4484483通道的图像&#xff0c;就是RGB图像&#xff0c;然后用64个卷积核大小是…...

Android车机DIY开发之软件篇(八)单独编译

Android车机DIY开发之软件篇(八)单独编译 1.CarLauncher单独编译 CarLauncher源码位于 packages/apps/Car/Launcher 用Eclipse ADT 谷歌定制版编译而成&#xff0c;.mk .bp编译 Android13目录如下: alientekalientek:~/packages/apps/Car$ ls Calendar …...

保证Mysql数据库到ES的数据一致性的解决方案

文章目录 1.业务场景介绍1.1 需求分析1.2 技术实现方案 2.业界常用数据一致性方案分析2.1 同步双写方案2.2 MQ异步双写方案2.3 扫表定期同步方案2.4 监听binlog同步方案 1.业务场景介绍 1.1 需求分析 某知名的在线旅游平台&#xff0c;在即将到来的春季促销活动之前&#xff…...

Cursor实现go项目配置并实现仓库Gin项目运行

✅作者简介&#xff1a;大家好&#xff0c;我是 Meteors., 向往着更加简洁高效的代码写法与编程方式&#xff0c;持续分享Java技术内容。 &#x1f34e;个人主页&#xff1a;Meteors.的博客 &#x1f49e;当前专栏&#xff1a;知识备份 ✨特色专栏&#xff1a;知识分享 &#x…...

【网络云SRE运维开发】2025第2周-每日【2025/01/11】小测-【第11章NAT理论和实操考试】解析

文章目录 一、选择题二、理论题三、实操题 【网络云SRE运维开发】2025第2周-每日【2025/01/11】小测-【第11章NAT理论和实操考试】解析 一、选择题 在H3C设备上&#xff0c;NAT技术主要用于&#xff08; &#xff09; A. 提高网络安全性 B. 实现不同网段的通信 C. 将内部私有IP…...

drawDB docker部属

docker pull xinsodev/drawdb docker run --name some-drawdb -p 3000:80 -d xinsodev/drawdb浏览器访问&#xff1a;http://192.168.31.135:3000/...

页面顶部导航栏(Navbar)的功能(Navbar/index.vue)

这段代码是一个 Vue.js 组件&#xff0c;实现了页面顶部导航栏&#xff08;Navbar&#xff09;的功能。我将分块分析它的各个部分&#xff1a; 模板 (Template): <!-- spid-admin/src/layout/components/Navbar/index.vue --> <template><div class"navb…...

【人工智能】用Python进行对象检测:从OpenCV到YOLO的全面指南

对象检测是计算机视觉领域的核心任务之一&#xff0c;广泛应用于视频监控、自动驾驶、智能安防等多个场景。随着深度学习技术的发展&#xff0c;基于传统方法的对象检测逐渐被基于神经网络的先进模型所取代。本文将系统地介绍如何使用Python进行对象检测&#xff0c;重点探讨了…...

深度学习从入门到实战——卷积神经网络原理解析及其应用

卷积神经网络CNN 卷积神经网络前言卷积神经网络卷积的填充方式卷积原理展示卷积计算量公式卷积核输出的大小计算感受野池化自适应均值化空洞卷积经典卷积神经网络参考 卷积神经网络 前言 为什么要使用卷积神经网络呢&#xff1f; 首先传统的MLP的有什么问题呢&#xff1f; - …...

Flink概念知识讲解之:Restart重启策略配置

Flink概念知识讲解之&#xff1a;Restart重启策略配置 当 Task 发生故障时&#xff0c;Flink 需要重启出错的 Task 以及其他受到影响的 Task &#xff0c;以使得作业恢复到正常执行状态。 Flink 通过重启策略和故障恢复策略来控制 Task 重启&#xff1a;重启策略决定是否可以…...

Golang中使用 Mqtt

MQTT 是一种基于发布/订阅模式的 轻量级物联网消息传输协议 &#xff0c;可以用极少的代码和带宽为联网设备提供实时可靠的消息服务&#xff0c;它广泛应用于物联网、移动互联网、智能硬件、车联网、电力能源等行业。 本文主要介绍如何在 Golang 项目中使用 github.com/eclips…...

腾讯云下架印度云服务器节点,印度云服务器租用何去何从

近日&#xff0c;腾讯云下架印度云服务器节点的消息引起了业界的广泛关注。这一变动让许多依赖印度云服务器的用户开始担忧&#xff0c;印度云服务器租用的未来究竟在何方&#xff1f; 从印度市场本身来看&#xff0c;其云服务市场的潜力不容小觑。据 IDC 报告&#xff0c;到 2…...

STM32内置Flash

一、原理 利用flash存储用户数据需要注意查看&#xff0c;用户数据是否会覆盖芯片运行程序。 IAP&#xff08;在程序中编程&#xff09;利用程序修改程序本身&#xff0c;和OTA是一个原理。IAP在程序中编程支持任意一种通信下载。 ICP&#xff08;在电路中编程&#xff0c;通…...

面试:C++类成员初始化顺序

1、非静态数据成员&#xff1a;按它们在类定义的声明顺序初始化&#xff0c;不会按它们在初始化列表的顺序。 2、静态数据成员&#xff1a;在main函数启动之前&#xff0c;并且只初始化一次 3、基类构造函数&#xff1a;如果类从一个或多个基类继承而来&#xff0c;基类的构造…...

约束的笔记

约束的分类 为什么需要约束 为了保证数据的完整性 ①实体完整性&#xff08;Entity Integrity&#xff09;(同一个表中&#xff0c;不能存在两条完全相同无法区分的记录) ②域完整性&#xff08;Domain Integrity&#xff09; ③引用完整性&#xff08;Referential Integ…...

【Docker】安装registry本地镜像库,开启Https功能

下载镜像 docker pull registry:2 需要启动https功能&#xff0c;就要生成服务端的自签名的证书和私钥&#xff0c;以及在docker客户端安装这个经过签名的证书。 第一步&#xff1a;生成公私钥信息&#xff0c;第二步&#xff0c;制作证书签名申请文件&#xff0c; 第三步&…...

el-tree拖拽光标错位问题

背景&#xff1a;el-tree实现的分类树增加拖拽功能后&#xff0c;当分类树由于数量较多产生滚动条&#xff0c;如果分类树已滚动&#xff0c;进行拖拽时会造成光标错位的问题: 原因&#xff1a;el-tree拖拽光标定位的高度并未加上滚动的高度解决&#xff1a;将滚动的样式属性放…...