首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >上下文切换的定时

上下文切换的定时
EN

Stack Overflow用户
提问于 2021-07-11 16:03:49
回答 1查看 322关注 0票数 0

我试着理解开放源码软件中的上下文切换。我有几个问题我找不到答案。

我非常感谢你对这方面的任何见解。

  • 上下文切换是否发生在指令中间?如果没有,是否适用于多步指令(x86),如INC、XADD?
  • ,在哪个处理器上运行负责上下文切换的代码?如果它在任意处理器上运行,可以修改该处理器上的寄存器,对吗?那么操作系统如何保存特定处理器的状态呢?
EN

回答 1

Stack Overflow用户

发布于 2021-07-11 19:29:24

首先,请不要将操作系统限制在Windows :D上

上下文切换是否发生在指令中间?如果不是,是否适用于多步指令(x86),如INC、XADD?

在软件上下文切换中,上下文切换将发生在特定的中断(硬件定时器,或内部CPU滴答计数器定时器)上。所有CPU的体系结构(AFAIK)都有一个寄存器或标志来通知"Fetch单元“存在挂起的中断。然后,CPU通过设置PC寄存器开始执行ISR。注意上下文切换将在ISR上进行。因此,根据中断机制,在执行指令时发生中断,没有任何冲突。这样,当前指令将完全执行,但“获取单元”将加载第一个ISR指令(在硬件堆栈帧操作之后,在大多数体系结构中)。

虽然,最近的一些CPU架构有一个硬件上下文切换机制。这样,所有的上下文切换过程都将由CPU的硬件来完成和处理。为了触发上下文切换并告诉CPU从哪里加载其新状态,在Intel体系结构中使用远版本的CALLJMP指令。

在哪个处理器上运行负责上下文切换的代码?如果它在任意处理器上运行,可以修改该处理器上的寄存器,对吗?那么操作系统是如何保存特定处理器的状态的呢?

每个处理器都有自己的上下文开关。这样,每个处理器在内核中都有一个特定的调度程序,操作系统(通过观察处理器上的负载平衡)将把每个任务分配给其中一个处理器(至少在Linux中是如此)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68337880

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档