2016-07-05 85 views
0

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

回答

0

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

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

如果某个进程发出阻塞系统调用(例如,sleep()),则会切换到下一个可运行进程的上下文,因为当前进程正在休眠。但那是另一回事。

+0

你能告诉我“过程控制块”在这个过程中的作用是什么? –

0

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

0

好吧,我明白你的意思了。所以,首先我清楚一个关于系统调用的非常基本的想法。
当进程/程序进行系统调用并中断内核以调用系统调用处理程序时。 TSS加载内核堆栈并跳转到系统调用函数表。
看到它的运行程序本身的不同部分实际上相同,唯一的主要变化是内核在这方面发挥的作用,这段代码将在环0中执行

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

好吧,什么都不会发生。事情会像以前一样工作。只需要在TSS中拥有正常的地址,而不必在该随机进程的TSS中指向内核堆栈和SysCall函数表地址。