CPU的两种工做状态:内核态(管态)和用户态(目态)。安全
内核态:
1.系统中既有操做系统的程序,也有普通用户程序。为了安全性和稳定性,操做系统的程序不能随便访问,这就是内核态。即须要执行操做系统的程序就必须转换到内核态才能执行!!!
2. 内核态能够使用计算机全部的硬件资源!!!操作系统
用户态:不能直接使用系统资源,也不能改变CPU的工做状态,而且只能访问这个用户程序本身的存储空间!!!!进程
三种从“用户态”转换到“内核态”的最主要(触发)方式:
a.系统调用(用户进程主动发起的):这是用户态进程“主动”要求切换到内核态的一种方式,用户态进程经过“系统调用”身子那个使用操做系统提供的服务城区完成工做!!
b.异常:当CPU执行运行在用户态下的程序时,发生了某些不可知的异常,这是会触发当前运行进程切换处处理此异常的内核程序中,也就转到了内核态,好比缺页异常!!
c.外围设备的中断:当外围设备完成用户请求的操做后,会向CPU发出相应的中断信号,这时CPU会暂停执行下一条即将要执行的指令转而去执行与中断信号对应的处理程序,若是先前执行的指令时用户态下的程序,那么这个转换过程天然也就发生了由用户态到内核态的切换。好比硬盘读写操做完成,系统会切换到硬盘读写的中断处理程序中执行后续操做等。ip
以上三种触发方式,本质上的切换操做是一致的,没有任何区别,都是至关于执行了一个中断相应的过程!!由于系统调用实际上最终也是“中断机制”实现的,而异常和中断的处理机制基本上也是一致的!!。内存
涉及到“用户态切换到内核态”的步骤主要包括:
1.从当前进程的描述符中提取内核栈的ss0及esp0信息。
2.使用ss0和esp0指向的内核栈将当前进程的cs、eip、eflags、ss、esp信息保存起来,这个过程也完成了有用户态到内存栈的切换过程,同时保存了被暂停执行的程序的下一条指令。
3.将先前有中断向量检索获得的中断程序的cs、eip信息装入相应的寄存器,开始执行中断处理程序,这是就转到了内核态的程序执行了。资源
总结:
1.计算机系统中有“操做系统程序”和“普通用户程序”。
2.操做系统程序执行就是在“内核态”下执行的。
3.普通用户程序就是在“用户态”下执行的。
4.内核态能够使用全部的硬件资源,用户态不能直接使用系统资源,也不能改变CPU的工做状态,只能访问用户程序本身的存储空间!!
5.为了安全和稳定性,操做系统程序是不能随便访问的!!!
6.引发“用户态切换到内核态”的本质就是“CPU实行了一次中断相应”!!硬件