16得票1回答
多核CPU,多线程和上下文切换?

假设我们有一个20核心的CPU和一个具有20个CPU密集型且互不干扰的线程的进程:每个CPU核心一个线程。我正在尝试弄清楚在这种情况下是否会发生上下文切换。我认为会发生上下文切换,因为操作系统中有需要CPU时间的系统进程。 我知道有不同的CPU架构,某些答案可能会有所不同,但您能否请解释: ...

15得票4回答
上下文切换保存了什么?

两个线程之间的上下文切换到底保存和恢复了哪些内容? 在同一进程中 在两个进程之间

13得票1回答
(编写内核)如何修改中断描述符表?

我正在编写一个小内核,只是为了深入了解一些底层的东西。现在,它能够在虚拟盒子中启动,并且我可以向屏幕显示文本,分配一些内存以及其他非常基础的功能。这个内核是用C++和一些汇编语言编写的。 其中我想探索的之一就是多任务机制的原理。据我所知,它大致如下: 内核初始化中断描述符表,以便定期发出...

12得票2回答
内核栈的作用是什么?

以下是我阅读的有关进程A和进程B之间发生上下文切换的描述。我不理解内核栈的用途。应该有一个针对每个进程的内核栈。我正在阅读的描述中提到了将A的寄存器保存在A的内核栈上,还将A的寄存器保存到A的进程结构中。保存寄存器到内核栈和进程结构的目的是什么?为什么需要这两者? 上下文切换概念上很简单:...

12得票6回答
非自愿上下文切换的原因

我正在尝试对一台较大的机器(32核,256GB RAM)上编写的多线程程序进行分析。我已经注意到,在不同运行之间,程序性能可能会有很大差异(70-80%)。我似乎无法找到导致程序性能巨大变化的原因,但是通过分析大量运行的“时间”实用程序的结果,我已经发现非自愿上下文切换的数量与程序性能高度相关...

10得票3回答
在单个 CPU 上启动的进程无法避免上下文切换。

我正在调查如何在专用CPU上运行进程,以避免上下文切换。 在我的Ubuntu上,我使用内核参数“isolcpus = 3,7”和“irqaffinity = 0-2、4-6”隔离了两个CPU。 我确信已经正确考虑到这一点:$ cat /proc/cmdline BOOT_IMAGE=/boo...

10得票6回答
我的线程能否帮助操作系统决定何时进行上下文切换?

我正在使用C ++在Linux上开发一个多线程应用程序,尝试实现实时操作,并在心跳或尽可能接近它的时间执行操作。 事实证明,操作系统会将我的线程换出并导致延迟长达十分之一秒,从而导致心跳不规则。 是否有一种方法可以提示操作系统,让我的线程在此时进行上下文切换? 我可以在执行完心跳后立即进行...

10得票3回答
进程调度中,调度器和分派器有什么区别?

我目前正在攻读操作系统本科课程。对于进程调度中的调度程序(dispatcher)和中期调度器(medium term scheduler)的功能,我感到有些困惑。根据我所学的知识,中期调度器选择要进行换入和换出的进程,一旦进程被选定,实际的交换操作是由调度程序通过上下文切换(Context S...

9得票2回答
使用Zend Action Helper ContextSwitch创建自定义的JSON响应对象

我通常会将编码后的json对象附加到响应主体中,但现在有一种情况需要使用ContextSwitch动作助手。 我有一个Zend_Form,需要三个不同的响应上下文: html - 正常渲染表单为HTML格式,包含布局。 html-partial - 一个ajax "get"请求,只渲染表...

9得票3回答
一个上下文切换的代价有多大?手动实现任务切换是否比依赖操作系统线程更好?

想象一下,我有两个(三个、四个或更多)需要并行运行的任务。现在,最简单的方法是创建独立的线程并忘记它。但是,在普通的单核 CPU 上,这将意味着大量的上下文切换 - 我们都知道上下文切换很慢,而且通常是错误的。应该避免使用,对吧? 在这种情况下,如果我已经从头开始编写软件,我可以额外做一些工...