7.11 用户态和内核态的区别

less than 1 minute read

区别

  • 内核态:cpu可以访问内存的所有数据,包括外围设备, 内核态运行内核代码
  • 用户态:只能受限的访问内存,且不允许访问外围设备, 运行用户代码

用户态与内核态的切换

  • 用户态程序切换到内核态, 但是不能控制在内核态中执行的指令, 这种机制叫系统调用, 在CPU中的实现称之为陷阱指令(Trap Instruction)
    • 用户态程序将一些数据值放在寄存器中, 或者使用参数创建一个堆栈(stack frame), 以此表明需要操作系统提供的服务.
    • 用户态程序执行陷阱指令
    • CPU切换到内核态, 并跳到位于内存指定位置的指令, 这些指令是操作系统的一部分, 他们具有内存保护, 不可被用户态程序访问
    • 这些指令称之为陷阱(trap)或者系统调用处理器(system call handler). 他们会读取程序放入内存的数据参数, 并执行程序请求的服务
    • 系统调用完成后, 操作系统会重置CPU为用户态并返回系统调用的结果

特权级

  • 特权级显然是非常有效的管理和控制程序执行的手段, 硬件上在执行每条指令时都会对指令所具有的特权级做相应的检查

用户态切换到内核态的3种方式

  • 系统调用
  • 异常
  • 外围设备中断

参考