【Linux】进程信号全攻略(二)-四:???? 如何理解内核态和⽤⼾态

时间:2024-11-09 09:49:08

在这里插入图片描述
结论:
• 操作系统⽆论怎么切换进程,都能找到同⼀个操作系统!换句话说操作系统系统调⽤⽅法的执⾏,是在进程的地址空间中执⾏的!

  • 内核态: 0-4G 范围的虚拟空间地址都可以操作,尤其是对 3-4G 范围的⾼位虚拟空间地址必须由内核态去操作。

  • 3G - 4G 部分⼤家是共享的(指所有进程的内核态逻辑地址是共享同⼀块内存地址),是内核态的地址空间,这⾥存放在整个内核的代码和所有的内核模块,以及内核所维护的数据。
    在这里插入图片描述

  • 关于特权级别,涉及到段,段描述符,段选择⼦,DPL,CPL,RPL等概念, ⽽现在芯⽚为了保证兼容性,已经⾮常复杂了,进⽽导致OS也必须得照顾它的复杂性,这块我们不做深究了。

  • ⽤⼾态就是执⾏⽤⼾ [0,3] GB 时所处的状态

  • 内核态就是执⾏内核 [3,4] GB 时所处的状态

  • 区分就是按照CPU内的CPL决定,CPL的全称是Current Privilege Level,即当前特权级别。

  • ⼀般执⾏ int 0x80 或者 syscall 软中断,CPL会在校验之后⾃动变更

  • 这样会不会不安全??