内核态与用户态
intel x86 架构的 CPU 分 Ring0-Ring3 三种级别的运行模式,Ring0级别最高,Ring3 最低。
-
针对不同的 级别,有很多的限制,比如说传统的 in ,out 指令,就是端口的输入输出指令,在 Ring0 级下是可以用的,但在 Ring3 级下就不能用,你用就产生陷井,告诉你出错了,当然限制还有很多了,不只是这一点。
-
操作系统下是利用这个特点,当操作系统自己的代码运行时, CPU 就切成 Ring0 级,当用户的程序运行是就只让它在 Ring3 级运行,这样如果用户的程序想做什么破坏系统的事情的话,也没办法做到。
-
当然,低级别的程序是没法把自己升到高级别的,也就是说 用户程序运行在 Ring3 级,他想把自己变成 Ring0 级自己是做不到的,除非是操作系统帮忙。
例如:版主 可以删除你的贴子,你却不能删除 版主 的贴子 ,当然你也没法让自己变成 版主 ,除非 版主 把你升为 版主(或是系统有 bug ).....
-
利用这个特性,操作系统就可以控制所有的程序的运行,确保系统的安全了. 平时把操作系统运行时的级别就叫内核态(因为是操作系统内核运行时的状态),而且普通用户程序运行时的那个级别叫用 户态。
-
当操作系统刚引导时, CPU 处于实模式,这时就相当于是 Ring0 级,于是操作系统就自动得到最高权限,然后切到保护模式时就是 Ring0 级,这时操作系统就占了先机,成为了最高级别的运行者,由于你的程序都是由操作系统来加载的,所以当它把你加载上来后,就把你的运行状态设为 Ring3 级,即最低级,然后才让你运行,所以没办法,你只能在最低级运行了,因为没办法把自己从低级上升到高级。
例如:这个论坛是由 版主 创立的,当时创立时就他一个用户,所以它就自然取得了最高权限了,即 版主 运行在 Ring0 级(内核态),然后他再让我们注册自己的账号,但是设置的权限是普通用户,所以我们一注册就只能是普通用户,即我们只能运行在 Ring3 级(用户级),我们没有更多的权限,所以我们只能任由 版主 "蹂躏" 了,看你不爽就删除你的贴子,踢你下线,加你进黑名单,永久封你的IP之类的,你除了发发牢骚之外也是无可奈何了, 这就是操作系统在 内核 态可以管理用户程序,杀死用户程序的原因了。