系统调用就是通过系统api操作由操作系统统一管理的资源,比如设备、文件、内存、进程、进程间通信。系统调用运行在系统的核心态,需要内核上下文环境
从用户态的函数调用切换到核心态的系统调用,需要通过中断实现,当执行系统调用时,先将参数压入栈寄存器,然后通过中断将控制器交给操作系统,操作系统根据系统调用码查找系统调用表得到相应的访问地址,执行系统调用,将结果返回给用户程序。这过程中需要切换两次上下文,第二次是调用开始时从用户地址空间切换到内核地址空间,第二次时系统调用执行返回时,从内核地址空间切换回用户地址空间。
函数调用 | 系统调用 |
---|---|
运行在用户地址空间 | 运行在内核地址空间 |
不需要切换上下文,开销小 | 需要切换到内核上下文,执行结束后需要切换到用户上下文,开销大 |
转载网络:https://www.jianshu.com/p/8dcbe530fcc3