从资源管理和程序控制执行的角度出发,将指令系统分为两大部分:特权指令和非特权指
令。在程序执行时,根据执行程序对资源和机器指令的使用权限,把机器设置为两个状
态:核心态和用户态。
也就是说,当系统处于核心态时,就可以使用所有指令、资源,并具备改变 CPU 状态的
能力;而当 CPU 在用户态时,只能使用非特权指令。
如果 CPU 执行用户程序时(用户态)出现了中断,系统将自行转到中断处理程序,CPU 就
由用户态转换到核心态;中断处理结束后,返回继续执行用户程序,此时 CPU 又由核心态
转到用户态。
那么用户态和核心态之间的区别是什么呢?(以下区别摘至《UNIX 操作系统设计》)
1. 用户态的进程能存取它们自己的指令和数据,但不能存取内核指令和数据(或其他
进程的指令和数据)。然而,核心态下的进程能够存取内核和用户地址
2. 某些机器指令是特权指令,在用户态下执行特权指令会引起错误
此处牵引出另外一个概念:用户级线程和内核级线程
在传统的操作系统中,是不支持内核级线程的(只有内核进程,出于安全没有把线程
这个新生事物放入到内核中),每次都是一个进程去到一个 CPU 核心(但是多核
CPU 仍然可以处理多个进程),因此用户级线程是对内核透明的,也做不到进程那样
的时间片轮转调度(时间一到直接停你进程,线程都得一块停),此时的线程管理全
部交给用户态做,且可以用 jacket 进行优化效率
在如今的多核 CPU/多 CPU 支持内核级线程的情况下(实际上的意思是线程对于内核
可见了,内核可以接手线程管理),那就可以多个内核级线程并行运行了。不会再出
现同一个进程下的线程一损俱损的情况了。缺点是:让内核来调度线程的话会出现切
换线程得经历用户态到核心态的切换,代价更大
然而在今天的操作系统中,常见的操作是 n 个用户态线程----映射到---->1 个内核态
线程 算是一个折中方案
3.中断
评论5