我知道中断会导致操作系统从当前任务更改CPU并运行内核例程。在这种情况下,系统必须保存在CPU上运行的进程的当前上下文。 但是,我想知道当任何随机进程进行系统调用时是否发生上下文切换。
答案 0 :(得分:0)
我想知道当任何随机进程进行系统调用时是否发生上下文切换。
不准确。回想一下,如果一个进程当前正在运行,它只能进行系统调用 - 不需要将上下文切换到已经运行的进程。
如果某个进程发出阻塞系统调用(例如{
"data": {
"changebaby": "no change",
"changemama": "no change"
}
}
),则会有一个上下文切换到下一个可运行进程,因为当前进程现在处于休眠状态。但那是另一回事。
答案 1 :(得分:0)
通常有两种方法可以导致内容切换。 (1)定时器中断调用强制进行上下文切换的调度程序或(2)进程产生。大多数操作系统都有许多系统服务,这些服务将导致进程产生CPU。
答案 2 :(得分:0)
我明白了。所以,首先我清楚一个关于系统调用的基本概念
当进程/程序发出系统调用并中断内核来调用syscall处理程序时。 TSS加载内核堆栈并跳转到系统调用函数表
看到它实际上与运行该程序本身的不同部分相同,唯一的主要变化是内核在此处发挥作用,并且该代码段将在环0中执行。
现在你的问题" 如果在随机进程进行系统调用时发生上下文切换会发生什么?"
好吧,什么都不会发生。事情会像以前一样工作。只是在TSS中使用普通地址而不是在该随机进程的TSS中指向内核堆栈和SysCall函数表地址。