换个角度看,也就是说,进程便可以在用户空间运行,又能够在内核空间中运行。进程在用户空间运行时,被称为进程的用户态,而陷于内核空间的时候,被称为进程的内核态。 linux
从用户态到内核态的转变,须要经过系统调用来完成。好比,当咱们查看文件内容时,就须要屡次系统调用来完成:首先调用 open() 打开文件,而后调用 read() 读取文件内容,并调用 write() 将内容写到标准输出,最后再调用 close() 关闭文件。性能优化
那么,系统调用的过程有没有发生 CPU 上下文的切换呢?答案天然是确定的。app
CPU 寄存器里原来用户态的指令位置,须要先保存起来。接着,为了执行内核态代码,CPU 寄存器须要更新为内核态指令的新位置。最后才是跳转到内核态运行内核任务。ide
而系统调用结束后,CPU 寄存器须要恢复原来保存的用户态,而后再切换到用户空间,继续运行进程。因此,一次系统调用的过程,实际上是发生了两次 CPU 上下文切换。性能
不过,须要注意的是,系统调用过程当中,并不会涉及到虚拟内存等进程用户态的资源,也不会切换进程。这跟咱们一般所说的进程上下文切换是不同的:优化
进程上下文切换,是指从一个进程切换到另外一个进程运行。进程
而系统调用过程当中一直是同一个进程在运行。内存
因此,系统调用过程一般称为特权模式切换,而不是上下文切换。但实际上,系统调用过程当中,CPU 的上下文切换仍是没法避免的。资源
上面的文章摘自极客时间app linux 性能优化实战的第3节,上文提到的root读某个磁盘中的文件,访问磁盘这些硬件资源,root也是没有权限的,必须通过系统调用,因此理解“CPU寄存器里原来用户态的指令,须要先保存起来。”就应该不难了。it