操作系统用户态和核心态和CPU上下文切换
目录
- 操作系统用户态和核心态
- 用户态和核心态
- 操作系统用户态和核心态是如何交换的
- 系统调用
- CPU上下文
- 什么是CPU上下文和CPU上下文切换
- CPU为什么要进行上下文切换
操作系统用户态和核心态
用户态和核心态
操作系统两种状态:用户态和内核态。
操作系统的用户态和内核态是操作系统的两种运行状态,出现这两种状态的原因主要是为了对访问能力进行限制,用户态的权限较低,而内核态的权限较高。
- 用户态:用户态允许的程序只能受限访问内存,只能读取用户程序的数据,也就是处于用户态的CPU只能受限访问内存,并且不允许访问外围设备(包括网卡,硬盘等),用户态下CPU不允许独占,也就是说CPU能够被其他程序获取。
- 内核态:内核态允许的程序可以访问计算机的任何数据和资源,不受限制,包括外围设备,也就是处于内核态的CPU能访问任意数据,包括外围设备,处于内核态的CPU可以从一个程序切换到另一个程序,并且不会发生CPU抢占的情况。
当应用程序需要访问操作系统提供的资源或者执行一些特权操作时,需要从用户态切换到内核态,由操作系统内核来完成相应的操作。用户态下的应用程序只能访问自己的内存空间和一些受限的资源,不能直接访问操作系统资源的外围设备(包括网卡,硬盘等),也不能指向特权操作。用户态和内核态之间的切换需要一定的时间和资源,因此应该尽量减少切换次数,来提高系统的性能和稳定性。
操作系统用户态和核心态是如何交换的
用户态和内核态的交换是通过系统调用(System Call)来实现的,当应用程序需要访问系统提供的资源或执行特权操作时,它会通过系统调用请求操作系统内核来完成相应的操作,系统调用是一种特殊的函数调用,它可以将应用程序从用户态切换到内核态,并将控制器交给操作系统内核。内核态下的操作系统内核会执行相应操作,并将结果返回给应用程序。完成操作后,操作系统内核将控制器重新交回应用程序,使其回到用户态。
系统调用是用户态和内核态之间重要的接口,也是应用程序访问操作系统资源和执行特权的唯一途径。系统调用的实现需要一定的系统资源和开销,因此它的使用应该尽量减少,以提高系统的性能和稳定性。
系统调用
从用户态到内核态的转变,需要通过系统调用来完成。比如,当我们查看文件内容时,就需要多次系统调用来完成:首先调用 open() 打开文件,然后调用 read() 读取文件内容,并调用 write() 将内容写到标准输出,最后再调用 close() 关闭文件。系统调用会将CPU从用户态切换到核心态,以便 CPU 访问受到保护的内核内存。
系统调用的过程会发生 CPU 上下文的切换,CPU 寄存器里原来用户态的指令位置,需要先保存起来。接着,为了执行内核态代码,CPU 寄存器需要更新为内核态指令的新位置。最后才是跳转到内核态运行内核任务。
而系统调用结束后,CPU 寄存器需要恢复原来保存的用户态,然后再切换到用户空间,继续运行进程。所以,一次系统调用的过程,其实是发生了两次 CPU 上下文切换。
注意:系统调用过程中,并不会涉及到虚拟内存等进程用户态的资源,也不会切换进程。
系统调用过程通常称为特权模式切换,而不是进程上下文切换。
CPU上下文
什么是CPU上下文和CPU上下文切换
CPU寄存器包括指令寄存器和程序计数器。他们是用来暂存指令、数据和地址,以及程序运行的下一条指令的地址,这些都是任务运行时的必要环境,这些也被称为CPU 上下文。上下文切换就是把当前任务的CPU上下文保存起来,然后加载新任务的上下文到这些指令寄存器和程序计数器等寄存器中,这些被保存起来的上下文被存储到操作系统的内核中,等待任务调度执行时再次加载进来,这样就能保证任务的原来状态不受影响,让任务看起来是运行的。
CPU为什么要进行上下文切换
当多个进程竞争CPU的时候,为了保证每个进程可以公平被CPU调用,采用处理任务按照CPU时间片的机制,当某个时间片上的任务到达最后的时间点,那么这个任务就被挂起,然后CPU处理下一个任务,由于CPU处理的速度非常快,在人类的感知上认为是并行处理的,实际上是伪并行,同一个时间只有一个任务能被CPU运行处理
相关文章:
操作系统用户态和核心态和CPU上下文切换
目录 操作系统用户态和核心态用户态和核心态操作系统用户态和核心态是如何交换的系统调用 CPU上下文什么是CPU上下文和CPU上下文切换CPU为什么要进行上下文切换 操作系统用户态和核心态 用户态和核心态 操作系统两种状态:用户态和内核态。 操作系统的用户态和内核态…...
TSINGSEE青犀视频汇聚平台EasyCVR视频广场面包屑侧边栏支持拖拽操作
TSINGSEE青犀视频汇聚平台EasyCVR可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有GB28181、RTSP/Onvif、RTMP等,以及厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等,能对外分发RTSP、RTMP、FLV、HLS、Web…...
RocketMQ发送消息超时异常
说明:在使用RocketMQ发送消息时,出现下面这个异常(org.springframework.messging.MessgingException:sendDefaultImpl call timeout……); 解决:修改RocketMQ中broke.conf配置,添加下…...
WordPress做权重站:二级目录伪静态写法
我喜欢用WordPress建站,但是每个网站我都会写3个以上的二级目录,为什么了,因为WordPress数据量过大会导致数据库很大很卡,所以这种做法可以减轻数据库的负荷。我一般每个目录的文章达到15万篇就不会再更新了,3个目录加…...
浅谈下API初步认知
当我们谈论API,我们指的是应用程序接口(Application Programming Interface)。API允许不同的软件应用程序之间互相通信和交互。它定义了一组规定和协议,用于确定数据传输和请求的格式、方法和功能。 API的作用是在软件开发中提供一…...
LeetCode--剑指Offer75(2)
目录 题目描述:剑指 Offer 58 - II. 左旋转字符串(简单)题目接口解题思路1代码解题思路2代码 PS: 题目描述:剑指 Offer 58 - II. 左旋转字符串(简单) 字符串的左旋转操作是把字符串前面的若干个字符转移到…...
基于vue-cli3的vue项目 通过postcss-pxtorem 实现px自动转换成rem并解决版本问题
1、npm安装依赖 npm install lib-flexible --save npm install postcss-pxtorem --save-dev 2、引入lib-flexible 在项目入口文件main.js 中引入lib-flexible import "lib-flexible/flexible.js"; 3、 配置postcss-pxtorem vue-cli3 项目postcss-pxtorem的…...
前端开发常用的方法封装(二)
1.将阿拉伯数字翻译成中文的大写数字 export const numberToChinese (num) > {let AA new Array("零","一","二","三","四","五","六","七","八","九","十&q…...
【Java】Springboot脚手架生成初始化项目代码
Springboot配置生成初始化项目代码可以通过mvn的mvn archetype:generate 和阿里云原生应用脚手架(地址)、spring官方提供的start初始化生成页面(地址)。 1、mvn archetype:generate 通过mvn选择对应的脚手架可以快速生成初始化代码…...
LLaMA系列 | LLaMA和LLaMA-2精简总结
文章目录 1、LLaMA1.1、模型结构1.2、训练方式1.3、结论 2、LLaMA-22.1、相比LLaMA1的升级2.3、模型结构2.3.1、MHA, MQA, GQA区别与联系 2.4、训练方式 1、LLaMA 🔥 纯基座语言模型 《LLaMA: Open and Efficient Foundation Language Models》:https:/…...
运动蓝牙耳机什么款式好、适合运动的蓝牙耳机推荐
夏天到了,越来越多的年轻人会选择在一天的忙碌之后通过简单的运动缓解疲劳。而在运动装备的选择上,除了常规的衣服、鞋之外,耳机也成为了当下年轻群体的必备项,尤其是在运动的过程中听听喜欢的音乐或者电台能够更好地放松身心。那…...
在敏捷项目中如何做好资源规划?
敏捷项目管理是一种交付项目的迭代方法,主要用于软件开发项目。该方法由多个迭代或增量步骤组成,以实现最终目标。在敏捷的环境下工作,难免遇到以下这些情况: ● 人员和团队通常必须将时间分配到不同的项目上。 ● 敏捷和非敏捷工…...
mybatis-plus 用法
目录 1 快速开始 1.1 依赖准备 1.2 配置准备 1.3 启动服务 2 使用 2.1 实体类注解 2.2 CRUD 2.3 分页 2.4 逻辑删除配置 2.5 通用枚举配置 2.6 自动填充 2.7 多数据源 3 测试 本文主要介绍 mybatis-plus 这款插件,针对 springboot 用户。包括引入&…...
重测序数据分析流程丨操作步骤与代码与代码脚本
群体重测序数据分析笔记 在生物信息学中,群体重测序数据的挖掘和分析对于理解生物的进化、自然选择以及功能基因的定位等研究具有重要的意义。今天分享的笔记内容是群体遗传学相关的知识点,下面将一步步介绍整个重测序分析的流程和方法。 分析常用流程和…...
npm -v无法显示版本号
情况: 删除C盘下.npmrc文件后解决。路径 C:\Users\Dell 记录一下这个解法。...
【Vue】父子组件值及方法传递使用
父子组件值、方法引用 1、值 1.1 父组件获取子组件值 父组件 <template><div><button click"getChildValue">click</button><child ref"child"></child></div> </template><script> import Child…...
医药化工企业洁净厂房改造消防防爆安全的重要性
设计 【摘要】:近年来,我国医药化工企业规模不断扩大。医药化工企业的情况复杂,稍有不慎将发生火灾或者爆炸,对人员生命以及财产安全造成巨大的损害,酿成悲剧。所以,“三同时”原则的落实,如何…...
Web开发中防止SQL注入
一、SQL注入简介 SQL注入是比较常见的网络攻击方式之一,它不是利用操作系统的BUG来实现攻击,而是针对程序员编写时的疏忽,通过SQL语句,实现无账号登录,甚至篡改数据库。 二、SQL注入攻击的总体思路 1.寻找到SQL注入…...
【LeetCode-中等】剑指 Offer 35. 复杂链表的复制(详解)
目录 题目 方法1:错误的方法(初尝试) 方法2:复制、拆开 方法3:哈希表 总结 题目 请实现 copyRandomList 函数,复制一个复杂链表。在复杂链表中,每个节点除了有一个 next 指针指向下一个节…...
QT图形视图系统 - 使用一个项目来学习QT的图形视图框架 -第一篇
文章目录 QT图形视图系统介绍开始搭建MainWindow框架设置scene的属性缩放功能的添加加上标尺 QT图形视图系统 介绍 详细的介绍可以看QT的官方助手,那里面介绍的详细且明白,需要一定的英语基础,我这里直接使用一个开源项目来介绍QGraphicsVi…...
【Axure高保真原型】引导弹窗
今天和大家中分享引导弹窗的原型模板,载入页面后,会显示引导弹窗,适用于引导用户使用页面,点击完成后,会显示下一个引导弹窗,直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…...
超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析
Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问(基础概念问题) 1. 请解释Spring框架的核心容器是什么?它在Spring中起到什么作用? Spring框架的核心容器是IoC容器&#…...
【C++特殊工具与技术】优化内存分配(一):C++中的内存分配
目录 一、C 内存的基本概念 1.1 内存的物理与逻辑结构 1.2 C 程序的内存区域划分 二、栈内存分配 2.1 栈内存的特点 2.2 栈内存分配示例 三、堆内存分配 3.1 new和delete操作符 4.2 内存泄漏与悬空指针问题 4.3 new和delete的重载 四、智能指针…...
接口自动化测试:HttpRunner基础
相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具,支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议,涵盖接口测试、性能测试、数字体验监测等测试类型…...
Mysql故障排插与环境优化
前置知识点 最上层是一些客户端和连接服务,包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念,为通过安全认证接入的客户端提供线程。同样在该层上可…...
