1.用户态和内核态
1.1 用户态和内核态的引入
最简单的运行程序的方式是“直接执行”,即直接在 CPU 上执行任意程序。直接执行的问题是:
- 如何限制代码行为?比如禁止:设置特殊寄存器的值、访问存储器的任意位置、I/O 请求、申请更多系统资源等
- 在运行这个程序的时候,如何切换到另一个程序?进程调度应该是 OS 才有的权限
因此引入用户态和内核态和两种模式。用户态无法执行受限操作,如 I/O 请求,执行这些操作会引发异常。核心态只能由操作系统运行,可以执行特权操作。用户程序通过 系统调用 system call 执行这些特权操作。OS 执行前会判断进程是否有权限执行相应的指令。
区分用户态和核心态的执行机制称为“受限直接执行”(Limited Direct Execution)。
1.2 两种工作模式的简述
(1)用户态又称为目态,计算机硬件可以通过一个模式位1进行表示。当计算机系统执行用户程序时,系统处于用户态。
(2)内核态又称为管态,计算机硬件可以通过一个模式位0进行表示,每当计算机能够控制计算机时,它就处于内核态。例如,当用户程序通过系统调用请求OS服务时,系统必须从用户态切换到内核态,以响应请求。
2.各态下的指令,中断
2.1特权指令和非特权指令
(1)特权指令是指 具有特殊权限的指令,如:清除内存,置时钟,分配系统资源,修改虚存的段表或页表,修改用户的访问权限等,由于这些指令的权限过大,使用不当会导致难以想象的灾难,甚至于整个系统崩溃。所以这些指令只能在内核态下执行,实际上,CPU在内核态下可以执行指令系统的所有指令
(2)用户态下只能执行非特权指令,在用户态下使用特权指令时,将产生中断以阻止用户使用特权指令
(3)从用户态转换为内核态的唯一途径是中断或异常
2.2 访管指令和访管中断
(1)访管指令( trap 指令) 是一条在用户态下执行的指令。在用户程序中,因要求操作系统提供服务而有意识地使用访管指令,从而产生一个中断事件(自愿中断),将操作系统转换为内核态,称为访管中断。访管中断由访管指令产生,程序员使用访管指令向操作系统请求服务。
(2)由于用户程序只能在用户态下运行,若用户程序想要完成在用户态下无法完成的工作时,就需要依靠访管指令。访管指令本身不是特权指令,其基本功能是让程序拥有“自愿进管”的手段 ,从而引起访管中断。
2.3 只能在内核态下执行的指令
包括特权指令,访问硬件指令,上下文切换指令等:
1)I/O指令
2)中断管理指令:关中断,开中断
3)内存管理指令:如 LGDT(加载全局描述符表),LIDT(加载中断描述符表)
4)系统状态设置指令:如 HLT(停止处理器),RESET(复位)
5)访问硬件指令:控制CPU特定寄存器;直接操作设备寄存器等
6)上下文切换指令:如 IRET(从中断返回,恢复用户态)