操作系统用户态和核心态和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…...

Cat.1如何成为物联网业务加速器?
随着Cat.1芯片及模组在功耗和成本上的不断优化,在窄带物联网领域,越来越多的终端客户把Cat.1当做与NB-IoT相比较的第二选择。越来越多的表计、烟感、市政等行业终端将Cat.1模组应用于非集中化部署的上报类终端业务中,Cat.1这只“网红猫”仍保…...

Qt应用开发(基础篇)——布局管理 Layout Management
目录 一、前言 二:相关类 三、水平、垂直、网格和表单布局 四、尺寸策略 一、前言 在实际项目开发中,经常需要使用到布局,让控件自动排列,不仅节省控件还易于管控。Qt布局系统提供了一种简单而强大的方式来自动布局小部件中的…...

Python web实战之 Django 的 ORM 框架详解
本文关键词:Python、Django、ORM。 概要 在 Python Web 开发中,ORM(Object-Relational Mapping,对象关系映射)是一个非常重要的概念。ORM 框架可以让我们不用编写 SQL 语句,就能够使用对象的方式来操作数据…...

pycharm制作柱状图
Bar - Bar_rotate_xaxis_label 解决标签名字过长的问题 from pyecharts import options as opts from pyecharts.charts import Barc (Bar().add_xaxis(["高等数学1,2","C语言程序设计","python程序设计","大数据导论",…...

静态资源导入探究
静态资源可以在哪里找呢?我们看看源码 从这个类进去 里面有个静态类 WebMvcAutoConfigurationAdapter 有个配置类,将这个类的对象创建并导入IOC容器里 这个静态类下有个方法 addResourceHandlers(ResourceHandlerRegistry registry)静态资源处理器 若自…...

安全狗V3.512048版本绕过
安全狗安装 安全狗详细安装、遇见无此服务器解决、在windows中命令提示符中进入查看指定文件夹手动启动Apache_安全狗只支持 glibc_2.14 但是服务器是2.17_黑色地带(崛起)的博客-CSDN博客 安全狗 safedogwzApacheV3.5.exe 右键电脑右下角安全狗图标-->选择插件-->安装…...

prometheus监控k8s kube-proxy target down
prometheus kube-proxy target down 解决 修改配置 kubectl edit cm/kube-proxy -n kube-systemmetricsBindAddress: "0.0.0.0:10249"删除 kube-proxy pod 使之重启应用配置 kubectl delete pod --force `kubectl get pod -n kube-system |grep kube-proxy|awk {pr…...

SPSS数据分析--假设检验的两种原假设取舍决定方式
假设检验的两种原假设取舍决定方式 在t检验,相关分析,回归分析,方差分析,卡方检验等等分析方法中,都需要用到假设检验。假设检验的步骤一般如下: 提出假设:H0 vs H1 ;假设原假设H0 成立的情况…...

Python实现猫狗分类
不废话了,直接上代码: def load_imagepath_from_csv(csv_name):image_path []with open(csv_name,r) as file:csv_reader csv.reader(file)next(csv_reader)for row in csv_reader:image_path.append(row[0])return image_pathimport csv csv_name &…...

pjsip、pjsua2+bcg729 windows下编译java版本
文章目录 简要说明流程步骤 简要说明 基本参考的这里 https://docs.pjsip.org/en/latest/get-started/windows/build_instructions.html#building-the-projects 我这里主要是为了生成pjsua2.dll 用于在java下调用。 其中 libbcg729.dll 是通过vcpkg来进行安装。 pjsip使用vs2…...