通过随机系统调用上下文切换

时间:2016-07-05 04:22:42

标签: operating-system kernel system

我知道中断会导致操作系统从当前任务更改CPU并运行内核例程。在这种情况下,系统必须保存在CPU上运行的进程的当前上下文。 但是,我想知道当任何随机进程进行系统调用时是否发生上下文切换。

3 个答案:

答案 0 :(得分:0)

  

我想知道当任何随机进程进行系统调用时是否发生上下文切换。

不准确。回想一下,如果一个进程当前正在运行,它只能进行系统调用 - 不需要将上下文切换到已经运行的进程。

如果某个进程发出阻塞系统调用(例如{ "data": { "changebaby": "no change", "changemama": "no change" } } ),则会有一个上下文切换到下一个可运行进程,因为当前进程现在处于休眠状态。但那是另一回事。

答案 1 :(得分:0)

通常有两种方法可以导致内容切换。 (1)定时器中断调用强制进行上下文切换的调度程序或(2)进程产生。大多数操作系统都有许多系统服务,这些服务将导致进程产生CPU。

答案 2 :(得分:0)

我明白了。所以,首先我清楚一个关于系统调用的基本概念 当进程/程序发出系统调用并中断内核来调用syscall处理程序时。 TSS加载内核堆栈并跳转到系统调用函数表 看到它实际上与运行该程序本身的不同部分相同,唯一的主要变化是内核在此处发挥作用,并且该代码段将在环0中执行。

现在你的问题" 如果在随机进程进行系统调用时发生上下文切换会发生什么?"

好吧,什么都不会发生。事情会像以前一样工作。只是在TSS中使用普通地址而不是在该随机进程的TSS中指向内核堆栈和SysCall函数表地址。