系统调用会引起CPU上下文切换吗? · Issue #5 · Talk-Go-CSAPP-05Discusion

五月 18, 2024 [Linux 与系统] #Linux #obsidian #操作系统原理 #硬件 #编译链接

系统调用会引起CPU上下文切换吗? · Issue #5 · Talk-Go-CSAPP-05Discusion

要明确系统调用的目的/系统调用的函数的作用

解释: 调用系统调用就是为了切换进程,那自然就会引起context switch

例子1: 示例场景中有两个并发的进程,shell进程和hello进程,最开始只有shell进程在运行,即等待命令行上的输入. 当我们让它运行hello程序时,shell通过调用一个专门的函数,即系统调用,来执行我们的请求,系统调用会将控制权传递给操作系统, 操作系统保存shell进程的上下文,创建一个新的hell进程及其上下文,然后将控制权传给新的hello进程, hello进程终止后,操作系统恢复shell进程的上下文, 并将控制权传回给它.csappP12

例子二: 一个用于获取系统时间的 system call 详见

system-call-and-context-switch

这篇文章有两个例子:

总结:这两者的上下文切换,是否都是同一流程?

主要注意的是:

进程上下文切换,是指从一个进程切换到另一个进程运行 而系统调用过程中一直是同一个进程在运行

系统调用过程通常称为特权模式切换,而不是上下文切换。 当进程调用系统调用或者发生中断时,CPU从用户模式(用户态)切换成内核模式(内核态),此时,无论是系统调用程序还是中断服务程序,都处于当前进程的上下文中,并没有发生进程上下文切换。

当系统调用或中断处理程序返回时,CPU要从内核模式切换回用户模式,此时会执行操作系统的调用程序。如果发现就需队列中有比当前进程更高的优先级的进程,则会发生进程切换: 当前进程信息被保存,切换到就绪队列中的那个高优先级进程;否则,直接返回当前进程的用户模式,不会发生上下文切换。