Unix用户模式和内核模式
Unix用户模式和内核模式
处理器一般有两种模式:用户模式和内核模式。在对系统调用进行处理时,处理器需要首先从用户模式切换到内核模式。内核模式和用户模式所使用的进程的虚拟地址空间是相互独立的,因此在两种模式间传输数据时,需要了解处理器当前模式和处理器先前模式。
在PDP-11/40计算机中,有一个处理器状态字的16位寄存器PSW。其中12~13位表示处理器先前模式,14~15位表示处理器当前模式。00表示内核模式,11表示用户模式。
切换模式时,映射到虚拟地址的物理内存区域也随之发生变化。虚拟地址在用户模式时映射到用户程序的内存区域,在内核模式时则映射到内核程序的内存区域。内存映射的切换由MMU来实现。另外,内核程序在系统启动时被读取到内存中。
为什么需要内核模式?
因为内核提供的功能通常会对系统造成很大影响。如果放任用户程序随意使用内核功能会造成很多问题。通过制定规则强制用户程序使用内核功能时必须提出申请,使系统的安全性得以提高。同时也使用户程序开发人员在编写程序时无需对内核的实现细节有过多的了解。
即内核模式为操作系统协调各个用户程序的有序运行提供了保障。当用户程序执行一些可能有危险的操作时,必须进入内核模式,而内核模式则要确保这些操作的安全性,否则不继续执行,返回错误。
试想一个例子,假如用户程序可以不通过内核模式而直接修改处理器中的寄存器,那么该用户程序可以一直将pc寄存器保存为自己要执行指令的地址,这样一来进程调度以及中断等机制将无从谈起。类似的例子还有很多,这充分说明了内核模式在现在操作系统中存在的必要性。
参考文献:《Unix内核源码剖析》 青柳隆宏