操作系统——用户态和内核态
处理器的4种状态
大多数计算机系统处理器状态有4种,分别支持0~3级共4个特权级别,其中0级权限最高,3级权限最低
- 0级(Ring0/R0)为内核级,处理I/O操作,执行中断处理等关键操作
1级(Ring1/R1)为系统调用级,可以执行文件系统调用,获得特定的和受保护的程序服务2级(Ring2/R2)为共享库级,可被多个运行进程共享,允许调用库函数,读取但不修改内部数据- 3级(Ring3/R3)为应用程序级,所受到的保护最少
几乎所有的通用操作系统只使用了0级和3级,即简单区分内核态和用户态
内核态
即为上面所说的0级(Ring0/R0),本质上来说负责最基本的硬件管理,如处理I/O操作请求,执行中断处理(没错中断属于硬件管理),文件管理
用户态
即为上面所说的3级(Ring3/R3),本质上来说负责人机交互,即运行一些你一眼就会用或者上网查一查就会用的软件
内核态和用户态的互相转换
中断!
一般程序在运行过程中,产生了中断,例如该腾讯会议需要调用本机的麦克风和摄像头,由用户态转向内核态,由内核态组织调用摄像头和麦克风,在腾讯会议请求调用得到处理后,内核态就会改变关键字段,转换为用户态
用户态转向内核态的所有情况都是:中断,而内核态转向用户态就是在内核态需要处理的中断处理完了就转换为用户态
那么中断有哪些呢
中断的类型
外中断
即我们一般所说的中断,指的是来自CPU外部的中断请求,如I/O操作处理,磁盘读写等等
内中断
即我们所说的异常,一般有三种:陷入(trap)、错误(fault)、终止(abortion)
-
陷入(trap)和错误(fault)
陷入(trap):由陷入指令引发,是应用程序故意引发的
错误(fault):由错误条件引起的,可能被内核程序修复。内核程序修复故障后会把 CPU使用权还给应用程序,让它继续执行下去。如:缺页故障
错误(fault)和陷入(trap)最重要的一点区别是他们发生时所保存的EIP值的不同:错误(fault)保存的EIP指向触发异常的那条指令;而陷入(trap)保存的EIP指向触发异常的那条指令的下一条指令
-
终止(abortion),指程序遇到了不可修复的错误,例如整数除零
Linux操作系统的root用户和内核态的区别
root用户只是一个超级用户,只不过是一个权力大一些的用户。
天行有常,不为尧存,不为桀亡——《荀子》
这句话我认为可以很好地类比Linux下普通用户、root用户和内核态的关系。
普通用户为平民,root用户为皇帝。平民说我要把国库一把火烧了,这肯定是不行的;但是皇帝说我要一把火把国库烧了,这谁也不敢拦(sudo rm -rf /* 🐶)。但是这么皇帝这么做有没有什么结果呢,那当然会引起很多很多问题,此时就是天行有常了,内核态就是那个世间天理规律,一直都存在,人人都可以利用世间天理规律,平民和皇帝都可以;当然违背了天理规律,总会受到天理规律的惩罚
参考资料
[中断(interrupt)、异常(exception)、陷入(trap)]:https://blog.csdn.net/bailyzheng/article/details/8018820)
[同步中断与异步中断的区别]:https://www.cnblogs.com/zxc2man/p/11822263.html