操作系统——用户态与内核态、同步与异步、阻塞与阻塞
文章目录
- 什么是用户态与内核态
- 同步与异步、阻塞与非阻塞
- 四种组合方式
什么是用户态与内核态
计算机系统中,通常 CPU 执行两种不同性质的程序代码:一种是操作系统内核程序(管理程序);另一种是用户自编程序(即系统外层的应用程序,或简称 “应用程序”)。CPU 运行这两种不同性质的程序,就是操作系统中最基本的两种运行模式:用户态和内核态。
先来说一些废话
程序执行目的就是操作计算机中的各种硬件资源,每个程序最终都会编程二进制语言来操作硬件,从而实现某种具体功能。这样一说,好像可以不用操作系统,每个程序自己就是操作系统了。行吗?肯定不行啊。应用程序大多是高级语言编写的,你会将高级语言编译成二进制语言吗?这时你会说“我不会”,但有牛人会编写,并提供编译工具给大家使用。好,即使你的程序已经转换成二进制语言了,那你知道接下来如何和硬件进行交互来操作硬件,这么多程序都要来使用有限的硬件,那到底是给你用还是给他用,谁有权力管理这些硬件资源、制定使用规则。这时你又会说“我不会”,但总牛人知道怎么和硬件交互,有这个能力来编写代码来统一管理资源并制定使用规则,我们这些普通人达成共识都遵循他的规则就行。这…我无法反驳了,因为这个牛人编写的代码就是操作系统了。
操作系统可以让你编写的应用程序代码与硬件交互,同时管理不同应用程序如何有序使用硬件资源,所有应用程序都是运行在操作系统之上的。所以一定要保证操作系统安全运行,才能确保上层应用程序正常运行。
操作系统经过这么多年的发展,由优秀科技人才经过深思熟虑写出来的程序,肯定比应用程序代码逻辑要严格。(形象化例子)既然大家都认同我(操作系统),我就有权利和责任让大家稳定运行,那大家就应该遵循和支持我制定的规则,并在我制定的规则内运行。我也想尽最大努力让大家方便快速地使用所需硬件资源,但这些资源都是有限的,怎么管理和使用(各种硬件的使用、内存管理、进程管理等),大家都不清楚,所以这些资源和功能我不能都对大家开放,我需要统一管理起来,才能合理分配,有什么需求就告诉我,我知道怎么使用这些资源并计算得到你想要的结果,你只需要在外面等我一会儿,我就会把结果返回给你。
什么是用户态和内核态?
程序运行其实是CPU处理计算这段程序代码,所以更好的理解用户态和内核态,可以从CPU的角度去看待。
- 当CPU在计算用户应用程序代码时,此时CPU所处状态就是用户态;
- 当CPU在计算操作系统内核代码时,此时CPU所处状态就是内核态。
即用户态是普通应用程序运行的模式,内核态是操作系统内核运行的模式。
为什么要区分用户态或内核态这两种运行模式?
在用户态下,程序只能访问自己分配的内存空间,不能直接访问操作系统内核提供的资源,如硬件设备、内存管理、进程管理等。内核负责管理硬件设备、进程调度、内存管理、文件系统等核心功能,内核态就是为了保证系统安全、稳定运行。从下面几个角度对比:
- 安全性和稳定性:
如果所有的程序都运行在最高特权级别的内核态,一个程序的错误或恶意行为都可能导致整个系统崩溃。
通过将应用程序限制在用户态,即使出现错误也不会直接影响到整个操作系统的稳定性。 - 资源访问控制:
内核拥有对硬件资源的完全控制权,包括CPU、内存、外设等。
如果所有程序都直接访问硬件资源,将会造成资源的冲突和安全隐患。
通过用户态和内核态的隔离,操作系统可以有效地管理和调度系统资源的访问。 - 系统调用机制:
用户态程序需要通过系统调用来请求操作系统内核提供的服务,如文件读写、进程管理等。
系统调用是用户态程序与内核交互的主要方式,它提供了一个受控的接口,保证了系统的安全性。
用户态与内核态切换:
前面说了用户态与内核态是CPU执行的两种状态,好像CPU可以随意切换去执行用户程序还是应用程序。这当然是可以的,但要考虑CPU在这两种状态下切换所带来的开销对系统性能的影响。
当发生用户态到内核态的切换时,CPU需要保存当前用户态进程的执行状态(如寄存器、程序计数器等),这样再切回来时才能知道上次执行到哪里了,同时还要加载内核态进程的执行状态。同样,从内核态切换回用户态时,也需要进行相反的上下文切换操作。上下文切换需要大量的内存读写操作,会消耗CPU和内存带宽,造成一定的性能损耗。
其次,用户态程序和内核态程序访问内存的方式不同,用户态程序的内存访问受到限制,而内核态程序可以访问全部内存空间。
在切换的过程中,CPU需要切换内存管理单元(MMU)的页表设置,以适应不同的内存访问模式。这种切换也需要消耗一定的CPU时间和资源。以及指令集切换、系统调用都会造成性能开销。
同步与异步、阻塞与非阻塞
同步与异步、阻塞与非阻塞这两个概念经常看见,很容易混淆,所以在这里通过对比的方式解释并比较两者的区别:
- 对象
- 同步与异步是指用户空间程序调用内核空间程序的发起方式,针对的是两个对象调用关系;
- 阻塞与非阻塞指的是用户空间程序的一种执行状态,针对的是用户空间程序的执行状态。
- 目的
- 同步与异步的目的是调用方获取被调用方返回的结果,但获取方式存在区别:
- 同步:A 调用 B,由调用方 A 盲目主动询问 B 操作是否完成并获取返回结果的方式;
- 异步:A 调用 B,由被调用方 B 主动回调或通知调用方任务已完成并获取返回结果的方式;
- 阻塞与非阻塞的目的是用户空间程序是否继续执行。
- 阻塞:用户空间程序调用某个耗时操作,用户空间程序需要等待这个操作完成才能继续执行;
- 非阻塞:用户空间程序调用某个耗时操作,不需要等待这个操作完成就可以继续执行面的程序。
- 同步与异步的目的是调用方获取被调用方返回的结果,但获取方式存在区别:
总结起来:同步与异步关注的是调用方获取被调用方响应结果的方式:同步(调用方主动获取)、异步(回调或通知,即调用方被动接收);阻塞与非阻塞关注的是调用方在调用耗时操作(被调用方)时,自己本身的执行情况:阻塞(操作未完成,调用方原地等待,不执行后面的程序),非阻塞(操作未完成,调用方先跳过,继续执行后面的程序)。
四种组合方式
同步与异步、阻塞与非阻塞可以有四种组合方式:同步阻塞、同步非阻塞、异步阻塞和异步非阻塞,下面已IO操作为例进行简单讲解:
- 同步阻塞(Synchronous Blocking)
特点:线程发起I/O操作后,线程会被阻塞,直到I/O操作完成获取同步结果。
缺点:线程在等待I/O期间无法做其他事情,系统吞吐量较低。 - 同步非阻塞(Synchronous Non-Blocking)
特点:线程发起I/O操作后立即返回,线程不阻塞,I/O操作未完成期间,线程可以继续执行其他任务,需要主动轮询检查I/O操作是否完成。
缺点:需要自己实现轮询机制,增加了编程复杂度。 - 异步阻塞(Asynchronous Blocking)
特点:线程发起I/O操作后,线程会被阻塞,直到I/O操作完成,通过IO回调或通知等异步方式告知线程获取结果。
缺点:这种毫无意义。线程在IO操作期间已被阻塞,异步通知完全是多余,直接等待同步获取结果就可以了。 - 异步非阻塞(Asynchronous Non-Blocking)
特点:线程发起I/O操作后立即返回,线程不阻塞,线程可以继续执行其他任务,通过IO回调等异步方式通知线程获取结果。不要线程主动轮询,减轻了线程的负担。
缺点:需要实现异步通知机制,编程复杂度较高。
相关文章:
操作系统——用户态与内核态、同步与异步、阻塞与阻塞
文章目录 什么是用户态与内核态同步与异步、阻塞与非阻塞四种组合方式 什么是用户态与内核态 计算机系统中,通常 CPU 执行两种不同性质的程序代码:一种是操作系统内核程序(管理程序);另一种是用户自编程序(…...

C# VSTO读取Excel单元格Value、Value2
对单个单元格的值,需要用object 对象去接 object value (object)oneCellRange.Value; object value2 (object)oneCellRange.Value2; 对矩形范围的值,需要用object[,]去接 object[,] matrixValues (object[,])matrixRange.Value; object[,] matrixV…...

如何快速从手动测试转向自动化测试
寻求具有无缝持续集成和持续交付 (CI/CD) 的高效 DevOps 管道比以往任何时候都更加重要。想象一下这样一个场景:您的软件组织显著减少了人工工作量、降低了成本,并更加自信地发布了软件更新。换句话说,通过将 Web UI 和 API 测试结合在一起&a…...
【Linux+Docker】修改Docker容器中的hosts文件
1、进入容器bash docker exec -it <container_id> bash2、安装编辑器 2.1、安装vim apt-get updateapt-get install vim2.2、安装nano apt-get install nano3、编辑hosts文件 3.1、使用vim编辑 vi /etc/hosts3.2、使用nano编辑 nano /etc/hosts4、安装ping apt-get…...

在VS Code中进行Java的单元测试
在VS Code中可以使用 Test Runner for Java扩展进行Java的测试执行和调试。 Test Runner for Java的功能 Test Runner for Java 结合 Language Support for Java by Red Hat 和 Debugger for Java这两个插件提供如下功能: 运行测试: Test Runner for …...

国内信创web中间件生态
国内信创web中间件生态 东方通 官网https://www.tongtech.com/pctype/25.html 宝蓝德 官网https://www.bessystem.com/product/0ad9b8c4d6af462b8d15723a5f25a87d/info?p101 金蝶天燕 官网 https://www.apusic.com/list-117.html 中创 官网http://www.inforbus.com…...
CSS中的writing-mode属性:解锁文本布局新维度
在网页设计的广阔天地里,CSS(层叠样式表)扮演着至关重要的角色,它赋予了我们塑造网页外观和布局的强大能力。其中,writing-mode属性是一个常被忽视但功能强大的工具,用于控制文本的书写方向和排列方式。今天…...

SQL面试题练习 —— 波峰波谷
来源:字节今日头条 目录 1 题目2 建表语句3 题解 1 题目 有如下数据,记录每天每只股票的收盘价格,请查出每只股票的波峰和波谷的日期和价格; 波峰定义:股票价格高于前一天和后一天价格时为波峰 波谷定义:股…...

检索模型预训练方法:RetroMAE
论文title:https://arxiv.org/pdf/2205.12035RetroMAE: Pre-Training Retrieval-oriented Language Models Via Masked Auto-Encoder 论文链接:https://arxiv.org/pdf/2205.12035 摘要 1.一种新的MAE工作流,编码器和解器输入进行了不同的掩…...

OpenHarmony实战开发——宿舍全屋智能开发指南
项目说明 基于OpenAtom OpenHarmony(以下简称“OpenHarmony”)、数字管家开发宿舍全屋智能,实现碰一碰开门、碰一碰开灯、碰一碰开风扇以及烟感检测。因为各项目开发流程大体相似,本文主要以碰一碰开门为例介绍如何在现有OpenHar…...

等了10年,终于迎来RTX5/RTX4全家桶开源,开源,开源! 且免费商用
我们的V4, V5, V6 ,V7开发板都配套了大量的RTX4, RTX5教程和案例,从2015年发布首版RTX4内核教程以来,已经整整10年了。 1、制作这个RTX教程和案例,其实也承受了很大的压力,因为只有RTX内核是免费商用的,中间件并不免费…...

Python 读取.shp文件并生成图幅编号
代码适用于需要处理和分析地理空间数据的场景,如城市规划、环境监测或自然资源管理,其中它可以帮助用户读取特定区域的Shapefile文件,确定其地理边界,并基于这些边界计算出按照经纬度5度间隔的图幅编号,进而用于地图制…...

【算法】位运算算法——判断字符是否唯一
题解:判断字符是否唯一(位运算算法) 目录 1.题目2.题解3.位图参考代码4.细节5.总结 1.题目 题目链接:LINK 2.题解 题解有两种方法, 一是做一个哈希数组,去查重; 二是直接用一个变量每一位来对应表示是否有这个字母…...

AAAI2024 基于扩散模型 多类别 工业异常检测 DiAD
前言 本文分享一个基于扩散模型的多类别异常检测框架,用于检测工业场景的缺陷检测或异常检测。 设计SG语义引导网络,在重建过程中有效保持输入图像的语义信息,解决了LDM在多类别异常检测中的语义信息丢失问题。高效重建,通过在潜…...

JavaEE-Spring Controller(服务器控制以及Controller的实现和配置)
Spring Controller 服务器控制 响应架构 Spring Boot 内集成了 Tomcat 服务器,也可以外接 Tomcat 服务器。通过控制层接收浏览器的 URL 请求进行操作并返回数据。 底层和浏览器的信息交互仍旧由 servlet 完成,服务器整体架构如下: Server&…...
页面导出PDF,非可视区域如何解决
const exportToPDF () > {const element document.getElementById(chart-container);if (!element) return;const originalScrollHeight element.scrollHeight;// 临时解除滚动条限制,确保所有内容都可见element.style.height ${originalScrollHeight}px;// …...
Android UI:ViewTree: 监听
文章目录 涉及设计模式 观察者模式+策略模式API源码分析总结涉及设计模式 观察者模式+策略模式 被观察者:ViewTree ViewTree持有一个观察器ViewTreeObserver 系统在ViewRootImpl和View的相关方法中调用ViewTreeObserver上的注册的监听器的方法,…...

【光伏干货】光伏无人机巡检步骤
随着光伏产业的迅速发展和无人机技术的日益成熟,光伏无人机巡检已成为提高光伏电站运维效率、降低运维成本的重要手段。本文将详细介绍光伏无人机巡检的步骤,帮助读者更好地理解和应用这一技术。 一、前期准备 1、设备检查:对无人机及其相关…...

『大模型笔记』从头开始代码构建GPT!
从头开始代码构建GPT! 文章目录 一. 从头开始代码构建GPT!二. 参考文献一. 从头开始代码构建GPT! 我们构建了一个生成式预训练Transformer (GPT),遵循论文《Attention is All You Need》和OpenAI的GPT-2 / GPT-3的方法。我们讨论了与ChatGPT的联系,ChatGPT已经风靡全球。我…...

idea的project structure下project [lauguage ]()level 没有java的sdk17选项如何导入
idea的project structure下project lauguage level 没有java的sdk17选项如何导入 别导入了,需要升级idea版本。idea中没有project language level没有17如何添加 - CSDN文库 别听这文章瞎扯淡 2021版本就是没有,直接卸载升级到最新版本就可以了。没办法…...

【Oracle APEX开发小技巧12】
有如下需求: 有一个问题反馈页面,要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据,方便管理员及时处理反馈。 我的方法:直接将逻辑写在SQL中,这样可以直接在页面展示 完整代码: SELECTSF.FE…...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...
工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配
AI3D视觉的工业赋能者 迁移科技成立于2017年,作为行业领先的3D工业相机及视觉系统供应商,累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成,通过稳定、易用、高回报的AI3D视觉系统,为汽车、新能源、金属制造等行…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...

相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...

链式法则中 复合函数的推导路径 多变量“信息传递路径”
非常好,我们将之前关于偏导数链式法则中不能“约掉”偏导符号的问题,统一使用 二重复合函数: z f ( u ( x , y ) , v ( x , y ) ) \boxed{z f(u(x,y),\ v(x,y))} zf(u(x,y), v(x,y)) 来全面说明。我们会展示其全微分形式(偏导…...