问题标签 [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.

0 投票
0 回答
333 浏览

c++ - 定时器中断内的上下文切换,意外的编译错误

我正在测试一个在dispatch()函数中实现的上下文切换。据我了解,当我在中断计时器内调用调度时会出现问题。如果我这样做,它甚至不会编译!奇怪的是,如果我实现调度只是为了调用定时器中断和定时器来进行上下文切换,它可以完美地工作。我试图让调度宏或内联函数,但问题是一样的 - 当我尝试构建它时,发生了一些意外的异常?

这足以让你告诉我有什么问题吗?

0 投票
3 回答
36778 浏览

linux-kernel - 上下文切换内部

我想在这个问题的帮助下学习并填补我的知识空白。

因此,用户正在运行一个线程(内核级),它现在调用yield(我认为是系统调用)。调度程序现在必须将当前线程的上下文保存在 TCB 中(存储在内核中的某处)并选择另一个线程来运行并加载其上下文并跳转到其CS:EIP. 为了缩小范围,我正在研究运行在 x86 架构之上的 Linux。现在,我想进入细节:

所以,首先我们有一个系统调用:

1) 包装函数yield将系统调用参数压入堆栈。推送返回地址并使用推送到某个寄存器(例如EAX)的系统调用号引发中断。

2)中断将CPU模式从用户更改为内核,并跳转到中断向量表,然后从那里跳转到内核中的实际系统调用。

3)我猜调度程序现在被调用,现在它必须将当前状态保存在 TCB 中。这是我的困境。因为,调度程序将使用内核堆栈而不是用户堆栈来执行其操作(这意味着必须更改SSSP)它如何在不修改进程中任何寄存器的情况下存储用户状态。我在论坛上读到有用于保存状态的特殊硬件指令,但是调度程序如何访问它们以及谁运行这些指令以及何时运行?

4) 调度程序现在将状态存储到 TCB 并加载另一个 TCB。

5) 当调度器运行原始线程时,控制返回到包装函数,该函数清除堆栈并恢复线程。

附带问题:调度程序是否作为仅内核线程运行(即只能运行内核代码的线程)?每个内核线程或每个进程是否有单独的内核堆栈?

0 投票
2 回答
2005 浏览

architecture - 处理器处理中断的速度有多快

我正在研究中断。所以大多数架构都是中断驱动的,如果一切都是中断驱动的,处理器能以多快的速度处理所有这些。例如,在按下键盘按键时,它会创建一个中断,要求内核寻找新字符的缓冲区,在这种情况下,处理器可以服务多快,同时在发出中断时,处理器需要切换到内核空间,这在上下文切换方面成本很高。所以我假设,即使在所有这些之后,如果处理器具有良好的性能,那么我只能假设两次击键之间的时间在计算机速度方面是很多时间?一个平均,一分钟发生多少上下文切换?我想这会让我对我真正学习的内容有所了解并获得真实的生活感觉......谢谢......

0 投票
3 回答
1693 浏览

c - 测量上下文切换的时间

我开始熟悉 MicroC/OS-II 内核和多任务处理。我编写了以下两个使用信号量的任务:

现在我想测量上下文切换时间,即处理器在这两个任务之间切换所需的时间。

这是否仅通过使用以下函数来完成timer()

还是我完全错了?

0 投票
3 回答
1385 浏览

linux - 软件中断程序和用户模式函数之间的区别

好吧,我的问题在标题中

众所周知,异常处理程序负责将用户模式切换到内核模式
这涉及某些汇编指令

据称这样做是为了防止应用程序使用访问受限的高特权指令和内存区域

用户模式应用程序不能自己执行这个用户内核切换吗?即在应用程序本身的常用函数例程中使用这些汇编指令?

如果是这样,那么我无法理解软件中断的意义以及与用户内核切换相关的所有安全注意事项

我们只需在我们的程序中实现该开关,瞧!我们现在处于内核模式

WTH

0 投票
2 回答
676 浏览

virtualization - Type-1 VMM 和 Ring 1

最近,我正在做关于虚拟化的功课。我的问题是,VMM 如何将控制权转移到来宾内核并在 Ring 1 中运行该代码?

Type-1 VMM:这是经典的陷阱和仿真 VMM。VMM 直接在硬件上运行,在 Ring 0 中充当“主机操作系统”。来宾内核和来宾应用程序在 VMM 上运行,分别在 Ring 1 和 Ring 3 中。

  1. 当来宾应用程序进行系统调用时,它将捕获到 Ring 0 VMM,(CPU 旨在执行此操作)。

  2. 然后 VMM 将检测到这是一个系统调用,然后将控制权转移到来宾内核系统处理程序并在环 1 中执行它。

  3. 完成后,来宾内核执行 syscall-return,这是一个特权调用,它将再次陷入 VMM。

  4. VMM 然后在 ring 3 中真正返回到访客用户空间。(CPU 也被设计为这样做。)

我的问题是关于第 2 步的。VMM 如何将控制权转移到来宾内核并强制 CPU 响铃 1?这不可能是一个简单的“调用”,因为那时来宾内核代码将在环 0 中运行。它必须是某种“系统调用返回”或一些特殊的上下文切换指令。

你有什么想法吗?谢谢!

0 投票
2 回答
1436 浏览

linux-kernel - CPU 在 X86 上从内核模式切换到用户模式:何时以及如何?

CPU 何时以及如何在 X86 上从内核模式切换到用户模式:它到底做了什么?它是如何实现这种转变的?

0 投票
0 回答
262 浏览

ajax - Zend 上下文切换与布局

我在 Zend 中使用上下文切换通过 XHR 在对话框中显示 HTML。

在我的整个应用程序中,我根据我所在的模块/控制器加载 CSS/脚本文件;一个例子是在用户模块的视图控制器中,我的应用程序将加载 css/user/view.css 脚本。

但是,由于我正在使用上下文切换,我的 metahead(我的布局的一部分)没有呈现(出于显而易见的原因),因此只有发出 XHR 请求的当前页面的样式可用。

有没有一种很好、干净的方式可以为 XHR 端点上的模块/控制器引入样式?

谢谢

0 投票
1 回答
353 浏览

multithreading - 如何在嵌入式开发工具包中强制上下文切换

这些天我学习了多处理器的嵌入式开发,我想问是否可以在调试模式下强制进行上下文切换,以访问我想要的特定线程?如果可能的话,有没有办法通过调试器做到这一点?我使用的调试器是 gdb 来调试系统。

我已经阅读了发布在这里的帖子,但没有真正帮助我解决这些问题。

ps,我知道这可能不是安全的行动,但对我来说是必要的。

提前致谢。

0 投票
1 回答
128 浏览

multithreading - 为什么同步需要上下文切换到操作系统?

我正在观看关于高性能计算的演讲,从 24:55 开始,一位演讲者表示,通过获取锁进行同步需要将上下文切换到操作系统的内核(如果应用程序的话,甚至不是虚拟机的内核)运行在一个)。我希望能简要解释一下为什么会这样以及为什么它不能在 JVM 内部处理(如果是 Java 应用程序)。