操作系统中的系统调用和上下文切换
什么是系统调用
系统调用是操作系统提供给应用程序的一组接口,应用程序通过这些接口向操作系统发出请求来执行特权操作,例如读取或写入文件、创建新的进程或线程、管理内存、网络通信等。系统调用允许应用程序在用户模式下执行,但可以通过操作系统提供的接口来请求操作系统内核执行特权操作。
这种方式可以保证操作系统的安全性和稳定性,并且使得应用程序可以访问系统资源而不需要暴露敏感的操作系统细节。常见的操作系统(例如Linux,Windows,macOS等)提供了不同的系统调用接口,但它们通常都包含一些通用的系统调用接口,例如文件和进程管理
什么是上下文切换
CPU的上下文切换
在我们进行系统调用的时候,需要从用户态转到内核态,CPU会将用户态下的程序计数器和寄存器保存起来,然后转回内核态下的程序计数器和寄存器,这就是CPU的一次上下文切换
一次系统调用会经历从用户态转到内核态,再从内核态转到用户态,可知一次系统调用进行了两次上下文切换
进程的上下文切换
为了让多个应用程序交替进行,看起来像是并行一样,进程需要轮流获得CPU的使用权,在进程交换的时候就产生了进程的上下文切换,由于操作系统是在内核态下进行进程的调度的,所以进程的切换必然需要先从用户态转到内核态
不同的进程之间还有不同的虚拟内存,对应到实际上就是不同的进程拥有不同的页表,所以进程的上下文切换=用户态到内核态的切换,再加上页表的切换