内核态:cpu可以访问内存所有数据,包括内存和硬盘,cpu也可以将自己从一个程序切换到另一个程序。
用户态:只有受限的访问内存,且不允许访问外围设备(硬盘,网卡),占用cpu的能力被剥夺,cpu资源可以被其他程序获取。
用户态和内核态的切换
所有用户程序都是运行在用户态的,但是有时候程序需要做一些内核态的事情,例如从硬盘中读取数据,从键盘中获取输入等,而唯一可以做这些事情的就是操作系统,所以此时程序就需要先操作系统系统请求以程序的名义来执行这些操作。这时需要这样一个机制:用户态程序切换到内核态,但是不能控制在内核中执行的指令。这种机制叫系统调用,在cpu中实现叫陷阱指令。
- 系统调用
- 异常事件:当cpu在执行运行在用户态下的程序时,发生了某些事先不可知异常,这时会触发有当前运行进程切换到处理此异常的内核相关的程序中,也就是转到了内核态,比如缺页异常。
- 外围设备的中断:当外围设备完成用户请求的操作后,会向cpu发出相应的中断信号,这时cpu会暂停执行下一条即将要执行的指令而赚取执行he中断信号对用的处理程序。比如硬盘读写操作的完成