[1.3_3]计算机系统概述——系统调用
文章目录
- 第一章 计算机系统概述
- 系统调用
- (一)什么是系统调用,有何作用
- (二)系统调用与库函数的区别
- (三)小例子:为什么系统调用是必须的
- (四)什么功能要用到系统调用
- (五)系统调用的过程
- 小结
第一章 计算机系统概述
系统调用
- 什么是系统调用?
- 系统调用与库函数的区别
- 小例子:为什么系统调用是必须的?
- 什么功能要用系统调用实现?
- 系统调用的过程
(一)什么是系统调用,有何作用
操作系统作为用户和计算机硬件之间的接口,需要向上提供一些简单易用的服务。主要包括命令接口和程序接口。其中,程序接口由一组系统调用组成。
“系统调用”是操作系统提供给应用程序(程序员/编程人员)使用的接口,可以理解为一种可供应用程序调用的特殊函数,应用程序可以通过系统调用来请求获得操作系统内核的服务。
(二)系统调用与库函数的区别
系统调用和库函数的调用有区别。平时我们写程序时,可以用汇编语言的方式来直接请求系统调用服务。但是现在的编程更多的是使用高级语言编程,我们会直接使用高级语言的库函数,但是这些高级语言的库函数,在底层也会用到操作系统提供的系统调用功能,来请求操作系统的服务。
系统调用,应该是比高级语言的库函数更为底层的接口。
普通应用程序 | 可直接进行系统调用,也可使用库函数。有的库函数涉及系统调用,有的不涉及 |
---|---|
编程语言 | 向上提供库函数。有时会将系统调用封装成库函数,以隐藏系统调用的一些细节,使程序员编程更加方便。 |
操作系统 | 向上提供系统调用,使得上层程序能请求内核的服务。 |
裸机 |
不涉及系统调用的库函数:如“取绝对值”的函数
涉及系统调用的库函数:如“创建一个新文件”的函数
(三)小例子:为什么系统调用是必须的
生活场景:你去学校的打印店打印论文,你按下了WPS的“打印”选项,打印机开始工作。
你的论文打印到一半时,另一位同学按下了Word的“打印”按钮,开始打印他自己的论文。
思考:如果两个进程可以随意地、并发地共享打印机资源,会发生什么情况?
两个进程并发运行,打印机设备交替地收到WPS和Word两个进程发来的打印请求,结果两篇论文的内容混杂在一起了。这显然不是我们想要的结果。
由于系统当中有各种各样的并发的进程,而这些并发的进程又需要共享地使用类似于打印机设备这样的共享资源,但是这样的共享资源其实是需要各个进程互斥地共享的。
那么怎么实现对共享资源的互斥访问呢?最好的方式就是让操作系统内核来对共享资源进行统一的管理。上层的那些应用程序只能通过“系统调用”的方式,来请求操作系统,给它分配这种资源,之后,这个进程才可以对这种资源进行使用和访问。而各个进程的请求会由操作系统内核来协调处理,保证它们并发运行的时候不会发生这种混乱的事情。
解决方法:由操作系统内核对共享资源进行统一的管理,并向上提供“系统调用”,用户进程想要使用打印机这种共享资源,只能通过系统调用向操作系统内核发出请求。内核会对各个请求进行协调处理。
因此,系统调用是必须的。
(四)什么功能要用到系统调用
王道资料按照功能划分,分为了以下五种:
系统调用(按功能分类)
设备管理
完成设备的 请求/释放/启动 等功能
文件管理
完成文件的 读/写/创建/删除 等功能
进程控制
完成进程的 创建/撤销/阻塞/唤醒 等功能
进程通信
完成进程之间的 消息传递/信号传递 等功能
内存管理
完成内存的 分配/回收 等功能
拓展:可以搜索“Linux系统调用”,了解Linux操作系统提供了哪些系统调用。
总之,只要是对共享资源的访问,那肯定是需要系统调用来进行,因为这些共享资源是有限的(如:内存、I/O设备、文件),所以操作系统会对这些共享资源进行统一的管理和分配,因此应用程序在使用这些资源的时候就必须通过系统调用的方式请求操作系统内核来帮它进行接下来的处理。
应用程序通过系统调用请求操作系统的服务。而系统中的各种共享资源都由操作系统内核统一掌管。因此凡是与共享资源有关的操作(如存储分配、I/O操作、文件管理等),都必须通过系统调用的方式向操作系统内核提出服务请求,由操作系统内核代为完成。这样可以保证系统的稳定性和安全性,防止用户进行非法操作。
(五)系统调用的过程
一个应用程序运行在用户态,这个程序的各个指令会依次地被CPU执行。
当它想要发出系统调用的时候,它需要用传参数的指令,给CPU的寄存器当中传递一些必要的参数。比如在某寄存器当中传入了参数1
,参数1
的作用是:指明本次将要发出的系统调用是什么类型(如Linux系统中的“fork”,我指明一会儿要做的就是它)。而传递参数的指令可能会有多条(如图,还有参数2
),主要要看这次系统调用需要传递几个参数。而操作系统会根据应用程序提供的这些参数,来判断它想要的到底是哪种类型的服务。
当这些参数都放到了寄存器当中之后,应用程序就会执行一条特殊的指令,叫作陷入指令。这个陷入指令的执行,会引发一个内中断。CPU在检测到这个内部中断信号之后,它发现这个内部中断信号是由trap指令引起的,于是,CPU接下来就会暂停运行这个应用程序,转而去执行陷入指令处理程序
,即系统调用入口程序(可以理解为一种中断程序,只是由陷入程序引发的内中断)。【CPU转为内核态了】
接下来,系统调用程序会检查寄存器中的若干参数,最终知道这个程序想要调用的是哪种系统调用服务,于是,接下来,系统调用入口程序,就会调用特定的系统调用类型所对应的处理程序,然后让这个程序上CPU运行。
系统调用处理完毕后,CPU又会转为用户态,接着执行之前的应用程序。
传递系统调用参数→执行陷入指令(用户态)→执行相应内核程序处理系统调用(核心态)→返回应用程序
注意:
1、陷入指令是在用户态执行的,执行陷入指令之后立即引发一个内中断,使CPU进入核心态
2、发出系统调用请求是在用户态,而对系统调用的相应处理在核心态下进行。
小结
相关文章:

[1.3_3]计算机系统概述——系统调用
文章目录第一章 计算机系统概述系统调用(一)什么是系统调用,有何作用(二)系统调用与库函数的区别(三)小例子:为什么系统调用是必须的(四)什么功能要用到系统调…...

Vue基础学习 第一个Vue程序 el挂载点 v-指令(1)
Vue简介 Vue是一个Javascript框架Vue框架可以简化Dom操作响应式数据驱动 : 页面是由数据生成的,当数据出现改动,页面也会即时改变 第一个Vue程序 Vue中文文档官网:https://v2.cn.vuejs.org/v2/guide/ 根据官方文档的说法&#…...

前端页面性能
提升页面性能的方法资源压缩合并,减少HTTP请求非核心代码异步加载异步加载方式?1)动态脚本加载、2)defer、3)async(在加载js的时候在script标签上添加这两个属性,<script src"./test.js" charset"utf-8" defer><…...

2023-03-04 反思
摘要: 当前的时期确实比较特殊,不但是对于一个生命周期的最后的挣扎,更是在经历了各种浮浮沉沉的波澜之后还有更多的波浪。 精神分析-GRY: 非常奇怪的一个跳梁小丑, 不过我个人认为用这个标签是对跳梁小丑的侮辱和上层管理者对于这种人的纵容有很大关系…...

奇思妙想:超链接唤起本地应用
文章目录分析实现参考很多人的博客都有这样的小玩意,点击之后就可以直接与博主进行对话,而且无需添加好友。 先研究一下网页源代码: <a href"tencent://message/?uin88888888&Siteqq&Menuyes">联系我</a>很明…...

初识数据结构——“数据结构与算法”
各位CSDN的uu们你们好呀,今天小雅兰进入一个全新的内容的学习,就是算法和数据结构啦,话不多说,让我们进入数据结构的世界吧 什么是数据结构? 什么是算法? 数据结构和算法的重要性 如何学好数据结构和算…...

华为OD机试Golang解题 - 计算网络信号
华为Od必看系列 华为OD机试 全流程解析+经验分享,题型分享,防作弊指南)华为od机试,独家整理 已参加机试人员的实战技巧华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典文章目录 华为Od必看系列使用说明本期题目…...

ESP32编译及运行错误记录
1、打印格式不对 一般都是因为日志中某个参数打印格式不匹配造成。 ESP_LOGI(TAG, "[APP] Free memory: %lu bytes", esp_get_free_heap_size());//将之前的%d 改为%lu 2、配置载不对 这里选择了蓝牙模块需要引入蓝牙组件才能编译通过 idf.py menuconfig Component…...

GEE开发之降雨(CHIRPS)数据获取和分析
GEE开发之降雨CHIRPS数据获取和分析1.数据介绍2.初识CHIRPS2.1 代码一2.2 代码二3.逐日数据分析和获取4.逐月数据分析和获取4.1 代码一4.2 代码二(简洁)5.逐年数据分析和获取5.1 代码一5.2 代码二(简洁)前言:主要获取和分析UCSB-CHG/CHIRPS/DAILY的日数据、月数据和…...

TypeScript中面向对象
面向对象 要想面向对象,操作对象,首先便要拥有对象; 要创建对象,必须要先定义类,所谓的类可以理解为对象的模型; 程序中可以根据类创建指定类型的对象; 举例来说: 可以通过Perso…...

Transformer 模型:入门详解(1)
动动发财的小手,点个赞吧! 简介 众所周知,transformer 架构是自然语言处理 (NLP) 领域的一项突破。它克服了 seq-to-seq 模型(如 RNN 等)无法捕获文本中的长期依赖性的局限性。事实证明,transformer 架构是…...

深入理解js中的new关键字
在js中我们经常会使用到new关键字,那我们在使用new关键字的时候,new到底做了什么呢?今天我们就来深入探究一下 1.初步使用 我们先来使用一下,这是一个正常操作 function Person() {this.name "John";}let person new…...

RT-Thread Nano(2) - 线程
参考:RT-Thread API参考手册: 线程管理 线程的分类:动态线程,静态线程 动态线程是系统自动从动态内存堆上分配栈空间的线程句柄(程序运行时再分配空间),静态线程是由用户分配栈空间与线程句柄(可以说是程序编译时已经分配好空间) 1.创建线程 创建一个动态线程 rt_thread_t …...

真香,Grafana开源Loki日志系统取代ELK?
一、Loki是什么? Loki是由Grafana Labs开源的一个水平可扩展、高可用性,多租户的日志聚合系统的日志聚合系统。它的设计初衷是为了解决在大规模分布式系统中,处理海量日志的问题。Loki采用了分布式的架构,并且与Prometheus、Graf…...

机器学习|多变量线性回归 | 吴恩达学习笔记
前文回顾:机器学习 | 线性回归(单变量) 目录 📚多维特征 📚多变量梯度下降 📚梯度下降法实践 🐇特征缩放 🐇学习率 📚特征和多项式回归 📚正规方程 &…...

高并发内存池
按照threadcache,centralcache,pagecache顺序所列 这里还需要一定的前期准备工作 首先是可以设计一个定长内存池 ObjectPool.h #pragma once #include<iostream> #include"Common.h" using std::cout; using std::endl; using std::…...

springboot mybatis-plus 对接 sqlserver 数据库 批处理的问题
问题: 在对接 sqlserver数据库的时候 主子表 保存的时候 子表批量保存 使用的 mybatis-plus提供的saveOrUpdateBatch 这个方法 但是 报错 报错内容为 : com.microsoft.sqlserver.jdbc.SQLServerException: 必须执行该语句才能获得结果。 框架版本 sprin…...

Acwing---843. n-皇后问题——DFS
n-皇后问题1.题目2.基本思想3.代码实现1.题目 n−皇后问题是指将 n 个皇后放在 nn 的国际象棋棋盘上,使得皇后不能相互攻击到,即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n,请你输出所有的满足条件的棋子摆法。 …...

Android事件分发机制
文章目录Android View事件分发机制:事件分发中的核心方法onTouchListener和onClickListener的优先级事件分发DOWN,MOVE,UP 事件分发CANCEL代码实践requestdisallowIntereptTouchEvent作用Android View事件分发机制: 事件分发中的核心方法 Android中事件…...

python版协同过滤算法图书管理系统
基于协同过滤算法的图书管理系统 一、简介(v信:1257309054) 本系统基于推荐算法给用户实现精准推荐图书。 根据用户对物品或者信息的偏好,发现物品或者内容本身的相关性,或者是发现用户的相关性,然…...

Redis基础入门
文章目录前言一、redis是什么?二、安装步骤1.下载安装包2.安装三、Redis的数据类型redis是一种高级的key-value的存储系统,其中的key是字符串类型,尽可能满足如下几点:字符串(String)列表(List)集合(Set,不允许出现重复…...

【微服务】Feign实现远程调用和负载均衡
目录 1.什么是Feign 2 订单微服务集成Feign 2.1.引入依赖 2.2添加注解 2.3编写Feign的客户端 2.4修改OrderServiceImpl.java的远程调用方法 2.5重启订单服务,并验证 总结 1.什么是Feign Feign是Spring Cloud提供的⼀个声明式的伪Http客户端, 它…...

Windows使用QEMU搭建arm64 ubuntu 环境
1. 下载 QEMU: https://qemu.weilnetz.de/w64/ QEMU UEFI固件文件: https://releases.linaro.org/components/kernel/uefi-linaro/latest/release/qemu64/QEMU_EFI.fd arm64 Ubuntu镜像: http://cdimage.ubuntu.com/releases/20.04.3/rel…...

NodeJS安装
一、简介Node.js是一个让JavaScript运行在服务端的开发平台,Node.js不是一种独立的语言,简单的说 Node.js 就是运行在服务端的 JavaScript。npm其实是Node.js的包管理工具(package manager),类似与 maven。二、安装步骤…...

Gin 优雅打印请求与回包内容
文章目录1.Gin 的 Middleware2.使用 Middleware 打印请求与回包内容3.多次读取请求 Body 的问题4.多次读取响应 Body 的问题5.小结参考文献在开发 Web 应用程序时,难免不会遇到功能或性能等问题。为了快速定位问题,需要打印请求和响应的内容。本文将介绍…...

关于k8s中ETCD集群备份灾难恢复的一些笔记
写在前面 集群电源不稳定,或者节点动不动就 宕机,一定要做好备份,ETCD 的快照文件很容易受影响损坏。重置了很多次集群,才认识到备份的重要博文内容涉及 etcd 运维基础知识了解静态 Pod 方式 etcd 集群灾备与恢复 Demo定时备份的任务编写二进…...

【设计模式之美 设计原则与思想:设计原则】19 | 理论五:控制反转、依赖反转、依赖注入,这三者有何区别和联系?
关于 SOLID 原则,我们已经学过单一职责、开闭、里式替换、接口隔离这四个原则。今天,我们再来学习最后一个原则:依赖反转原则。在前面几节课中,我们讲到,单一职责原则和开闭原则的原理比较简单,但是&#x…...

2023年全国最新高校辅导员精选真题及答案13
百分百题库提供高校辅导员考试试题、辅导员考试预测题、高校辅导员考试真题、辅导员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 一、单选题 131.下列不属于我国国土空间具有的特点的是() A.水资…...

【XXL-JOB】XXL-JOB定时处理视频转码
【XXL-JOB】XXL-JOB定时处理视频转码 文章目录【XXL-JOB】XXL-JOB定时处理视频转码1. 准备工作1.1 高级配置1.2 分片广播2. 需求分析2.1 作业分片方案2.2 保证任务不重复执行2.2.1 保证幂等性3. 视频处理业务流程3.1 添加待处理任务3.2 查询待处理任务3.3 更新任务状态3.4 工具…...

optuna用于pytorch的轻量级调参场景和grid search的自定义设计
文章目录0. 背景:why optuna0.1 插播一个简单的grid search0.2 参考1. Optuna1.1 a basic demo与部分参数释义1.2 random的问题1.3 Objective方法类2. Optuna与grid search4. optuna的剪枝prune5. optuna与可视化6. 未完待续0. 背景:why optuna 小模型参…...