C++ 调用函数是否被视为上下文切换?
当我调用下面的函数时C++ 调用函数是否被视为上下文切换?,c++,c,function,context-switch,C++,C,Function,Context Switch,当我调用下面的函数时 void main(void){ Function(); } 它被认为是上下文切换,因为我在进入函数之前保存了寄存器吗?否,当内核交换进程时会发生上下文切换。调用用户空间函数将使您处于同一进程中,因此不会成为上下文切换。然而,调用内核函数需要来自内核的操作,因此它是到内核的上下文切换。上下文切换? 当我们同时进行多项任务时,我们真正做的是不断地从一项任务切换到另一项任务。这就是语境转换 这个术语起源于计算机科学。运行多线程进程的CPU会在运行另一个线程时暂时搁置给
void main(void){
Function();
}
它被认为是上下文切换,因为我在进入函数之前保存了寄存器吗?否,当内核交换进程时会发生上下文切换。调用用户空间函数将使您处于同一进程中,因此不会成为上下文切换。然而,调用内核函数需要来自内核的操作,因此它是到内核的上下文切换。上下文切换? 当我们同时进行多项任务时,我们真正做的是不断地从一项任务切换到另一项任务。这就是语境转换 这个术语起源于计算机科学。运行多线程进程的CPU会在运行另一个线程时暂时搁置给定线程的执行
<强调用>函数除了内核进程>/P>>P>不切换进程之前,我们问自己是否考虑了这个“上下文切换”,我们应该清理它的含义,或者更确切地说它意味着什么。 当我们谈论操作系统内核和进程时,我们可以在多种事物之间“切换”:
1但正如@BenVoigt正确指出的那样,这可能会带来安全隐患。这对于像
gettimeofday()
(cf.)这样的调用没有问题,但在其他情况下,这可能会导致机密数据泄漏到用户进程
2一些微内核设计分派一个进程,该进程实际处理管理器调用实现,因此需要切换到此进程地址空间。调用函数时,一些寄存器保持原样,但其他寄存器复制到程序堆栈。从用户模式切换到内核模式并返回时,也会发生这种情况,与执行系统调用时一样,操作系统中的上下文通常指寄存器和程序堆栈,从更广泛的意义上讲,这也包括页表条目。调用另一个函数时,这些函数都不会与另一个上下文交换。在执行系统调用时,内核上下文会被引入,即使在线程之间切换时也会有上下文切换。线程是“迷你进程”,因此在这种情况下会有上下文切换(尽管它与调用函数无关)交换是完全不同的事情,甚至内核函数通常也不会留下进程地址空间。使用线程,您只需要在CPU寄存器之间切换,这可以被视为上下文切换,也可以不被视为上下文切换。这不应该被迁移,这是一个关于理论计算机科学讨论中使用的术语定义的问题,这不是一个关于行为的问题。作为一个开放性问题,这更有用:如果我将函数调用视为上下文切换,这意味着什么,以及通过这种方式思考可以收集到什么?上下文切换是一个标准化的术语。它指的是操作系统将焦点从一个进程切换到另一个进程,而不是其他进程。这与该过程的内部无关。@BenVoigt完全同意,并且从CS的角度来看,给出的答案相当不准确……关于:
void main(void){
只有两个有效的s