用户态与内核态
用户空间与内核空间
在计算机的虚拟内存中,高位地址有一部分被分为内核空间,低位部分被分为用户空间。
这两个划分也把程序分为了两类,只能在用户空间执行的程序叫做用户程序,而在内核空间执行的程序称为内核程序。两者之间的交互通过系统提供的封装接口进行。
这样的划分也起到了安全作用,有一些程序十分危险,不允许用户执行。
用户空间
用户空间内又包含了堆,栈和保留空间(不可访问的),用户空间内的用户进程是无法直接执行一些底层操作,比如IO等操作硬件的行为。
内核空间
加载了OS内核,linux系统的内核空间占用低于windows,这也使得linux性能高于windows。
CPU的状态
CPU大多情况下是处于用户态的,这时的CPU也只能访问用户空间。
当用户进程发出一个系统调用的时候,内核会把CPU从用户态切换到内核态,然后CPU执行相应的内核函数。
在内核态下的CPU可以执行底层操作,执行完毕后还要返回用户态,并把执行结果返回给用户进程。
为什么说内核态切换成本很高
CPU不可能无成本的切换状态,一个用户程序发出调用内核函数的请求到返回结果要经历以下几个阶段。
- 用户进程发出系统系统调用,提交请求给用户空间内的内核函数封装接口
- CPU状态切换,从用户态切换到内核态
- 在内核态下执行内核函数
- 内核空间下,返回结果给处理程序
- CPU切换回用户态
- 用户空间下,返回结果。