首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

GHz 相似的新旧 CPU 有什么区别?当CPU检测到中断时会发生什么?

问:GHz 相似的新旧 CPU 有什么区别?

答:尽管具有相似的时钟速度或 GHz,但旧版和新版 CPU 的性能确实有很大不同。这种差异就像将那些简洁的经典野马汽车与新的涡轮增压版本进行比较一样 - 这两辆车的功能却相差甚远。       

较新的 CPU,它们有一个很酷的架构,对吧?它们采用更先进的制造工艺制造,这使得它们更小、更节能。因此,即使在相同的时钟速度下,他们也会比他们的老表兄弟运行得更凉爽,完成更多的工作。

还有一种叫做“指令集”的超级智能东西。新的 CPU 每个时钟周期 (IPC) 可以执行更多指令,这基本上意味着更快的处理速度。即使具有相似的 GHz,与旧 CPU 相比,新 CPU 在一个周期内可以执行更多操作。

哦,不能忘记新手中的那些多核和线程。更多的核心意味着更多的并发任务,有助于提高运行速度。请记住,这里越多越好,而不是为了您最喜欢的冰淇淋而排队。

问:微控制器如何处理中断?它们是否存储在 RAM 中然后从那里执行?

答:因此,对于中断处理,它实际上取决于所使用的架构,但让我们以现代微控制器中广泛使用的 Cortex-M 微处理器系列为例:

你有一个外设,在某个时刻会触发一个偶数,例如我们有一个开始接收数据的 SPI,发生的情况是,他的状态寄存器中将设置一个标志位(我们可以调用 RCV:接收标志),指示已发生收到一些数据

首先,我们需要通过启用 SPI_CTRL 寄存器中的 INTR(中断接收位)位来启用由 SPI 触发的此类事件的中断处理

RCV 标志(接收标志)连接到 Cortex-M NVIC,并在 NVIC 控制器上有专用条目,在外设级别启用中断处理后,signa 不再被门控,可以转发到 NVIC

NVIC是Nested Vector Interrupt Controller的缩写,负责将中断信号转发给Cortex-M cpu,我们可以将每个中断线分别转发给CPU,设置优先级、敏感级别,手动控制中断的状态如果需要(挂起、活动、未活动),报告中断线状态..,因此,如果在 NVIC 级别启用 SPI 中断线,则 NVIC 将在 CPU 接口级别提高中断线信号

一旦CPU从NVIC获得此中断线触发,将中断主程序的执行(完成当前活动指令的执行或立即停止,取决于指令类型),然后将尝试获取与该中断线相对应的处理程序

为了获取处理程序位置并跳转到它,它首先从 VTOR 寄存器(向量表偏移寄存器)获取向量表基地址(向量表包含所有中断处理程序地址),然后根据在 CU 接口级别触发的中断行号来确定要读取并获取处理程序地址的向量表基地址的偏移量

从向量表中获取该处理程序的位置后,在跳转到中断处理程序之前,CPU 将通过备份 CPU 状态来执行上下文切换,这是通过将一些 CPU 内部寄存器内容保存到堆栈中来在 Cortex M 上完成的,所以在某些时候是的,它需要无论如何,将其保存到RAM中,因为堆栈被分配在RAM中的某个段中,在皮质M寄存器中,R0,R1,R2,R3,R12,LR,PC,XPSR将被保存

CPU然后跳转到中断处理程序并开始执行

在处理程序中,SPI 必须清除其状态标志以避免出现不需要的背靠背中断并执行处理例程,例如从其数据寄存器读取数据

在中断退出时CPU将从堆栈内存中恢复中断入口时保存的内容

最后CPU恢复执行主程序

问:为什么CPU只有几千字节的缓存?它是如何工作的?

答:首先,CPU 缓存就像隔壁的一个小内存空间。与系统 RAM 相比,它很小,主要是因为它的速度非常快。可以把它想象成杂货店的快速通道,它很小,但可以很快完成工作。

因此,CPU 不会一路奔波到 RAM 来获取数据,而是将一些数据保存在其后袋(缓存)中以供即时访问。现在,更大的缓存大小会让事情变得更快,这是事实。但是,问题在于:房间越大,寻找东西所需的时间就越多。因此,我们试图取得平衡并保持小而高效。

现在,关于它的工作原理,您的 CPU 缓存非常智能,它会根据您之前的操作预测您接下来需要什么。这个过程称为空间和时间局部性,它将用它认为 CPU 接下来需要的数据填充缓存。

问:当CPU检测到中断时会发生什么?

答:有时,这取决于架构,甚至取决于同一架构中的 cpu 类型,但是对于主程序运行并中断的通用用例,会发生什么情况:

CPU完成正在进行的指令的执行(对于多周期指令,如arm上的push/pop,它取决于配置和cpu类型,因此要么完成,要么被中断并在从中断返回后恢复,或者从中断返回后重新启动)

CPU 将一些内部 cpu 寄存器推送到当前堆栈中,这将保存 cpu 执行上下文,以便能够在从中断返回后恢复 cpu 状态(在arm cortex-m r0,r1,r2,r3,r12,lr,pc 上) ,xpsr 寄存器被保存),这种保存可以纯粹由软件(如 cortex-a)完成,而不是由硬件(如 cortex-m)完成

cpu需要确定向量表的位置,在cortex-m上,中断向量表的地址保存到寄存器VTOR(向量表偏移寄存器)中

根据中断控制器(如 cortex-m 上的 NVIC)上存在的 VTOR 值和中断号,它将确定要跳转到的中断处理程序的偏移量(当我们遇到像 cortex-m 中那样的向量中断的情况时)。

CPU 跳转到中断处理程序的开头并将链接寄存器设置为 cortex-m 中的特殊值 (EXEC_RETURN)

执行完成后,CPU必须跳转到链接寄存器中存在的值,这个神奇的值将告诉CPU它正在从中断返回,并且必须在中断进入期间恢复CPU保存的上下文

CPU从堆栈中恢复已经保存的CPU上下文,以便能够恢复到之前被中断的几乎相同的位置

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O9HJJFkCBvKmxHNpko7m26vQ0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券