用户态和内核态

故事背景:爸爸让小明玩手枪,但是小明很可能会乱打手枪,打死真人直接蹲橘子,所以爸爸就给枪设置了一个权限,每当小明面对真人扣动扳机的时候,就会有一个吃了蓝色药丸的枪之恶魔从枪管子里伸出来狠狠的捅小明的皮燕子。

故事解读:CPU指令集也有很多不能随便用的东西,所以操作系统划分了权限,给不同权限开放不同的指令。

 

权限分类:

  ring 0(内核态)

  ring 1

  ring 2

  ring 3(用户态)

ring0可以访问所有CPU指令集,ring3最低,只能使用常规指令。

 

两者的在指令上的区别

一般来说,ring0权限下开放的指令有:IO读写、网卡访问、申请内存、访问硬件资源。

 

一般来说,ring3权限下开放的指令有:普通的计算指令等

 

两者在空间权限的区别

用户态和内核态的栈是不同的,分别是用户栈和内核栈。

用户态可以访问虚拟内存0-3G的空间,内核态访问0-4G的空间

 

切换流程

  • 保留用户态现场(上下文、寄存器、用户栈等)
  • 复制用户态参数,用户栈切到内核栈,进入内核态
  • 额外的检查(因为内核代码对用户不信任)
  • 执行内核态代码
  • 复制内核态代码执行结果,回到用户态
  • 恢复用户态现场(上下文、寄存器、用户栈等

切换接口

 

posted @ 2022-09-19 22:03  srid  阅读(99)  评论(0)    收藏  举报