问题标签 [context-switch]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
windows - windows驱动开发:上下文切换回调?
驱动程序是否可以在内核中为每个上下文切换注册回调?
谢谢!
linux-kernel - linux内核中的 schedule()+switch_to() 函数实际上是如何工作的?
我试图了解 linux 内核中的调度过程实际上是如何工作的。我的问题与调度算法无关。它是关于功能schedule()
和switch_to()
工作方式的。
我会尽力解释。我看见了:
当进程用完时间片时,标志need_resched
由 设置scheduler_tick()
。内核检查标志,发现它已设置,并调用schedule()
(与问题 1 相关)切换到新进程。这个标志是一个消息,应该尽快调用调度,因为另一个进程应该运行。在返回用户空间或从中断返回时,need_resched
检查标志。如果设置了,内核会在继续之前调用调度程序。
查看内核源代码(linux-2.6.10 - 《Linux内核开发,第二版》一书所基于的版本),我还看到一些代码可以schedule()
自愿调用该函数,赋予另一个进程运行的权利。我看到该函数switch_to()
是实际执行上下文切换的函数。我查看了一些依赖于架构的代码,试图了解switch_to()
实际在做什么。
这种行为引发了一些我无法找到答案的问题:
完成
switch_to()
后,当前正在运行的进程是什么?调用的过程schedule()
?还是下一个流程,即被选中运行的流程?当
schedule()
被中断调用时,要运行的选定进程在中断处理完成时开始运行(在某种 RTE 之后)?还是在那之前?如果
schedule()
函数不能从中断中调用,标志何时need_resched
设置?当定时器中断处理程序工作时,正在使用什么堆栈?
不知道能不能说清楚。如果我不能,我希望我能在一些答案(或问题)之后做到这一点。我已经查看了几个试图理解该过程的来源。我有《Linux Kernel Development, sec ed》一书,我也在使用它。如果这有助于解释,我对 MIP 和 H8300 架构有所了解。
zend-framework - zend view render如何解析视图脚本的路径
像“customSearchAction()”这样的操作如何映射到视图脚本文件名。
这些文件名都不适用“customsearch.xml.phtml”、“customSearch.xml.phtml”、“custom-search.xml.phtml”。
请注意,我正在为 xml、json使用上下文切换视图助手。此外,模块和操作正在正确解析。当我将操作名称更改为“customsearchAction()”并将脚本文件重命名为“customsearch.xml.phtml”时,它就可以工作了。
那么上述情况下视图脚本文件名是如何解析的呢?在 Zend 框架中
c# - 不同 CPU 内核上的上下文切换和线程执行
从我关于 SO 的另一个问题中,我发现它可能遵循简单的方法
如果在 if 和控制台 writeline 调用之间发生上下文切换,则可能在不同的 CPU 上执行。这对我来说是个新闻,所以我现在想知道何时可以为另一个 CPU 切换单线程代码,以及为什么在上述简单情况下它可能有意义?
c# - 试图理解 Thread.MemoryBarrier() 和上下文切换之间的关系
由于看起来上下文切换可能发生在指令执行的任何时候,我现在想知道为什么代码“部分有问题”(这两条指令)是有意义的,如果上下文切换可以在任何指令之间发生并且我们可能在不同的 CPU 上第二条指令的核心。
此处对 MemoryBarrier 的描述似乎并未保证MemoryBarrier在调用它后不会切换 CPU。
(这与这个问题有关)
c - 关于 sigsetjmp 和 siglongjmp 的问题
我正在尝试了解sigsetjmp()
andsiglongjmp()
功能。sigsetjmp()
保存上下文和siglongjmp()
恢复上下文的手册页状态。我的问题是,他们也会处理堆栈指针和程序计数器值吗?
欢迎任何指向额外资源的链接。
multithreading - 上下文切换步骤
我被要求描述上下文切换所涉及的步骤 (1) 在两个不同进程之间和 (2) 在同一进程中的两个不同线程之间。
- 在上下文切换期间,内核会将旧进程的上下文保存在其 PCB 中,然后加载计划运行的新进程的已保存上下文。
- 同一进程中两个不同线程之间的上下文切换可以由操作系统调度,以便它们看起来是并行执行的,因此通常比两个不同进程之间的上下文切换更快。
这是否过于笼统,或者您会添加什么来更清楚地解释该过程?
linux - 在 Linux 上跟踪上下文切换
可能重复:
监控 pthread 上下文切换
我有一个程序,在某些调度布局下会发生一些奇怪的事情(许多执行 sched_yield 的线程似乎以一种奇怪的方式相互限制)。
我想根据每个 CPU 上的 OS 调度程序片来准确跟踪正在发生的事情。有没有办法捕捉到这样的痕迹?我正在运行 SLES 11.1,具有 root 权限。
language-agnostic - 是否必须有一个模式切换才能成为上下文切换?
是否必须有一个模式开关,即。从用户模式到内核模式以便将该操作称为上下文切换?
module - 如何在内核模式下写入某个进程的虚拟内存
我想使用我的 Unix 模块来写入另一个进程内存(我想在内核模式下进行并避免使用 pthread 接口)。
我必须使用影响当前进程内存而不是我希望它影响的进程的函数(如 do_mmap(..)、do_unmmap(..)、sys_mprotect(..) 等)。
所以我想,我需要找到一种方法来对我想要的进程进行上下文切换,以使我想要的进程成为当前进程。我试图复制 schedule() 的实现,并稍作改动:我替换了以下行:
下一个 = pick_next_task(rq);
和:
下一个 = 我的下一个;
我的问题是 schedule 需要太多我无法包含的结构和函数,所以我必须重新实现它们。做这样的事情似乎很糟糕。你有什么建议吗?
我想避免修改现有的内核,所以我不必强迫用户重新启动和修改他们的操作系统来使用我的程序(这就是我使用模块的原因)。
顺便说一句,我使用的是“2.6.38-11-generic”版本的 Linux。