详解CPU的态

news2024/11/25 12:56:47

目录

1.CPU的工作过程

2.寄存器

3.CPU的上下文

4.系统调用

5.CPU的态


1.CPU的工作过程

CPU要执行的指令的地址存在寄存器中,指令存放在内存中,而CPU本质上就是一个去内存中根据地址取指令,然后执行指令的硬件。

举一个例子:

例如PC寄存器中存放50,CPU读到存放的50,发出一条取址指令,去取出地址为50的内存单元中的指令,再传回给CPU。

2.寄存器

众所周知,为了配平CPU和内存之间速率的差距,CPU和内存之间存在着一个由寄存器组成的中间层,寄存器种会存放着CPU接下来要执行的指令,以及后续可能要执行到的指令以及可能要用到的数据。只有预先装载进去这部分可能要用到的东西才能抹平CPU和内存之间的速率差距,不然每次都要去内存取内容,可能是会拉低CPU的效率的。

 

但该预先装载哪些内容进寄存器种喃?这里遵循了程序的局部性原理。

程序的局部性原理:

程序在执行的时候呈现出局部性规律,在一段时间内,整个程序的执行仅限于程序中的某一个部分,相应的,执行所访问的存储空间也局限于某个内存区域。局部性又分为时间局部性和空间局部性。时间局部性指的是,如果程序中的某条指令一旦执行,则不久后可能会被再次执行,执行指令时访问的数据单元在不久后会被再次访问。空间局部性指的是,一旦访问了某个存储单元,不久后,其附近的存储单元也将被访问。

3.CPU的上下文

上文聊过,为了抹平内存和CPU之间的速率差,给CPU配备了寄存器。寄存器中存储着当前执行的指令、数据、以及下一条指令在内存中的地址等等事关程序正常运行的关键信息。所以寄存器中存储的内容合称为CPU的上下文。

4.系统调用

系统中将一些对系统级别资源的调用封装成了一个个函数,称为系统调用,常见的系统调用有很多,比如IO操作就是个系统调用。

5.CPU的态

操作系统在启动后,内存被分为两部分(两段):

  1. 内核段从0地址开始编址,存放操作系统程序,里面包含系统调用。
  2. 用户段,从内核段之后开始编址,存放用户程,也就是各个进程的数据和指令。

由于内核段存放的是系统相关的内容,基于安全的考虑,肯定是不允许被CPU随意访问的,需要特权才行。因此将CPU的权限设计为了两种状态:

  1. 用户态,只能访问用户段
  2. 内核态,能访问用户段和内核段

所谓的态就是能访问用户段的上下文以及能访问内核段的上下文。当我们调用系统调用的时候会引起上下文的切换,也就是CPU态的切换。上下文切换的意思是,先把前一个任务的 CPU 上下文保存起来,然后加载新任务的上下文到这些寄存器和程序计数器,最后再跳转到程序计数器所指的新位置,运行新任务。之所以会切换上下文,这是因为寄存器加载数据和指令的时候遵照了程序的局部性原理。CPU访问用户段时,寄存器里预加载的是用户段的资源;CPU访问内核段时,寄存器里预加载的是内核段的资源。

所以CPU进行态切换的时候,上下文一定会完全换一套的。总的来说为了保证多数情况下程序执行的效率,“局部性原理”是必须存在的,为了内核的安全,CPU态的划分是必须存在的。所以,CPU上下文切换是不得不接受的一种代价。

CPU的上下文切换是种耗时的操作:

  1. 寄存器保存和恢复:在上下文切换过程中,需要保存当前任务的寄存器状态,并恢复下一个任务的寄存器状态。寄存器保存和恢复涉及将寄存器的值从CPU保存到内存(或者栈)中,以及从内存中恢复到CPU中。这涉及到数据的读写和复制操作,会引入一定的延迟和开销。

  2. 内存刷新和缓存失效:上下文切换可能涉及刷新CPU缓存和内存管理单元(MMU)的操作。当切换到一个新的任务时,之前的任务的缓存内容可能需要刷新,新任务的页表和内存映射需要加载和设置,这些操作可能导致缓存失效和内存访问延迟。

  3. 上下文数据复制:在上下文切换过程中,需要将当前任务的上下文数据保存到内存中,同时从内存中加载下一个任务的上下文数据。这包括寄存器状态、程序计数器、标志位和其他与任务执行相关的数据。数据的复制和加载需要占用CPU和内存带宽,并引入一定的延迟。

  4. 任务切换开销:上下文切换不仅仅涉及寄存器和内存的操作,还包括任务切换本身的开销。这包括切换内核栈、更新任务控制块(TCB)、更新调度器数据结构等操作。这些操作可能需要修改内核数据结构,增加了上下文切换的开销。

总的来说CPU上下文切换很耗时,我们常见的就是IO操作、进程切换这些都会引起CPU上下文切换。

为什么上下文切换前要先将前一个任务的上下文保存起来:

这里解答一个问题,就是为什么上下文切换前要先将前一个任务的上下文保存起来,而不是直接保存该任务执行到何处了?其实也是基于性能来考虑的。举个例子:

假设执行三条指令:

ABC  

AC,用户级指令  

B,内核级指令

执行A时,“局部性原理”驱使寄存器在用户段加载需要的数据以及可能会用到的数据。

执行B时,“局部性原理”驱使寄存器在内核段加载需要的数据以及可能会用到的数据,卸载掉原来的老数据。

执行C时,“局部性原理”驱使寄存器在用户段加载需要的数据以及可能会用到的数据,卸载掉原来的老数据。

根据“局部性原理”,ABC指令是连续执行的,AC之间的数据很可能是共用的,但是由于中间执行B指令,就造成了额外的一次重新寻址加载数据的时间。

所以把前一个不同级别的指令的上下文保存起来是个不错的优化方法,避免了额外的重复寻址,减少了额外的时间开销。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/770583.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【雕爷学编程】Arduino动手做(22)——8X8 LED点阵MAX7219屏4

37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的。鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这…

vscode使用技巧

在使用vscode编辑代码时,在settings.json中增加配置项可以配置回车换行缩进补齐方式: 第一种:使用空格补齐: "editor.insertSpaces":true 按下回车换行后: 第二种:使用tab键补齐: …

【java】对ArrayList中的元素进行排序的几种方式

对ArrayList中的元素进行排序的几种方式 一、使用Collections工具类 1、对基本类型排序 通过Collections.sort()对基本类型排序默认是以升序排序 // 1.Collections.sort()默认按照升序排序 List<Integer> integerList new ArrayList<>(); Collections.addAll(…

每日一刷——替换空格

题目描述&#xff1a; 请实现一个函数&#xff0c;将一个字符串中的每个空格替换成“%20”。例如&#xff0c;当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。 我的思路&#xff1a;从左向右循环遍历字符串&#xff0c;定义一个空串。如果遇到空格&#xf…

Ubuntu18.04 拯救者R9-7945HX 4060 配置ZED 2i代双目相机驱动+ORBSLAM2

AMD的拯救者网卡很拉&#xff0c;研究了很久除了换网卡可以解决网络问题&#xff0c;其它没找到合适的办法&#xff0c;这里我用手机USB共享网络的方式勉强上网&#xff0c;这里不得不说华为的信号桥很好用。 之前在1050ti的电脑上布置过&#xff0c;很顺利&#xff0c;这个新…

SDUT 2023 summer team contest(for 22) - 1-Gym - 102220

B - Balanced Diet 题意&#xff1a;这题题意有点难搞啊&#xff0c;就是有n个物品&#xff0c;一个有m种&#xff0c;对于第 i 种物品如果你要买它就至少买 l[i]个&#xff0c;然后就是给你n行&#xff0c;每行两个数&#xff0c;ai,bi,表示这个糖果类型为bi&#xff0c;价值为…

STM32学习笔记(十三)丨USART通用同步/异步收发器(串口外设的基本使用丨串口发送数据、串口发送+接收数据)

本篇文章包含的内容 一、STM32的USART外设1.1 STM32的USAER外设简介1.2 USART外设的结构和工作原理1.3 串口通信数据帧1.4 起始位侦测和USART的噪声判断机制1.5 波特率发生器 二、串口发送和接收数据包2.1 HEX数据包2.2 文本数据包2.3 固定包长HEX数据包接收2.4 可变包长文本数…

chrome edge svg转png

chrome edge svg转png 生成SVG blockdiag Live Preview 导出png 截图&#xff1a; 左上角截取屏幕截图

零售EDI:True Value EDI 需求分析

True Value 是一家享有盛誉的卖场&#xff0c;经营范围广泛&#xff1a;包括家居用品、工具、园艺用品等。据悉&#xff0c;True Value 已将 EDI 纳入其供应商评级中。 True Value 将 EDI 作为对其供应商的一项要求&#xff0c;这意味着如果你希望与 True Value 建立合作关系&a…

uniapp 小程序 联想地址搜索

效果图&#xff1a; qqmap-wx-jssdk.js下载 <template><view class"items"><view class"items-text">地址&#xff08;必填&#xff09;</view><input type"text" placeholder"搜索地址" maxlength&quo…

SQL-每日一题【585.2016年的投资】

题目 Insurance 表&#xff1a; 请你编写一个 SQL 查询&#xff0c;报告 2016 年 (tiv_2016) 所有满足下述条件的投保人的投保金额之和&#xff1a; 他在 2015 年的投保额 (tiv_2015) 至少跟一个其他投保人在 2015 年的投保额相同。他所在的城市必须与其他投保人都不同&#…

Revit中如何添加剖面?快速实现剖面图

一、Revit中如何添加剖面&#xff1f; 除了标高绘制所得到的楼层平面视图和立面视图之外&#xff0c;还可以添加剖面视图&#xff0c;这样可以得到任意位置一个竖向的剖切面&#xff0c;例如在楼梯细节处理中&#xff0c;楼梯处于建筑物内部&#xff0c;立面也看不到整个楼梯的…

pdf怎么翻译?有这个工具就够了

pdf怎么翻译&#xff1f;PDF文档一直是我们日常生活和工作中不可避免的一部分。但是&#xff0c;当我们需要翻译PDF文件时&#xff0c;我们往往会感到无助&#xff0c;因为PDF文档不能像其他文本文件一样直接复制和粘贴。那么今天就给大家介绍一款可以帮助我们进行PDF翻译的工具…

Pytorch框架中各文件的作用

新人在接触Pytorch以及深度学习等领域时&#xff0c;面对一个开源的代码可能无从下手&#xff0c;一个Pytorch框架相对比较负责&#xff0c;文件也多&#xff0c;其中的逻辑不免让初学者感到不知所措&#xff0c;下面大致梳理一下Pytorch各文件夹的作用和逻辑&#xff0c;其中的…

基于 Orbit 的云原生应用交付基础原则与良好实践

本文作者&#xff1a;何文强——腾讯云 CODING 高级架构师。 负责 CODING DevOps产品解决方案架构设计和技术产品布道以及 CODING 云原生技术研究与落地实践。在多个技术大会担任演讲嘉宾&#xff0c;腾讯云 CODING DevOps 课程认证出品人&#xff0c;腾讯云云原生训练营核心初…

上市公司Git分支管理规范

Git分支管理策略 主分支Master 首先&#xff0c;代码库应该有一个、且仅有一个主分支。所有提供给用户使用的正式版本&#xff0c;都在这个主分支上发布。 Git主分支的名字&#xff0c;默认叫做Master。它是自动建立的&#xff0c;版本库初始化以后&#xff0c;默认就是在主…

ASEMI快恢复二极管MUR20100CT尺寸, MUR20100CT体积

编辑-Z MUR20100CT参数描述&#xff1a; 型号&#xff1a;MUR20100CT 最大峰值反向电压(VRRM)&#xff1a;1000V 最大RMS电压(VRMS)&#xff1a;700V 最大直流阻断电压(VDC)&#xff1a;1000V 平均整流正向电流(IF)&#xff1a;20A 非重复峰值浪涌电流(IFSM)&#xff1a…

Revit中墙体的问题,门窗洞口及柱断梁墙

一、如何同时开两道相邻墙的门窗洞口 做外墙装饰的时候&#xff0c;我们很经常为了方便、简洁在已经绘制好的墙体外围再绘制一面墙体&#xff0c;并且添加上材质作为外饰面&#xff0c;提高工作效率;但是遇到有门窗洞口的墙体时&#xff0c;外饰面墙体却没办法直接被门窗剪切&a…

LeetCode142.环形链表II

142.环形链表II 目录 142.环形链表II一、哈希表二、双指针 一、哈希表 和141题.判断链表是否有环类似&#xff0c;区别在于141题只要求判断链表中是否有环&#xff0c;该题则要求我们返回入环节点 一个非常直观的思路&#xff1a;遍历链表中的每个节点&#xff0c;并将它们记…

【论文】基于GANs的图像文字擦除 ——2010.EraseNet: End-to-End Text Removal in the Wild(已开源)

pytorch官方代码&#xff1a;https://github.com/lcy0604/EraseNet 论文&#xff1a;2010.EraseNet: End-to-End Text Removal in the Wild 网盘提取码&#xff1a;0719 一、图片文字去除效果 图10 SCUT-EnsText 真实数据集的去除 第一列原图带文字、第二列为去除后的标签&a…