内核态与用户态
intel
x86 架构的
CPU
分
Ring0-Ring3
三种级别的运行模式,Ring0级别最高,Ring3
最低。
-
针对不同的
级别,有很多的限制,比如说传统的
in
,out 指令,就是端口的输入输出指令,在
Ring0
级下是可以用的,但在
Ring3
级下就不能用,你用就产生陷井,告诉你出错了,当然限制还有很多了,不只是这一点。
-
操作系统下是利用这个特点,当操作系统自己的代码运行时,
CPU 就切成
Ring0
级,当用户的程序运行是就只让它在
Ring3
级运行,这样如果用户的程序想做什么破坏系统的事情的话,也没办法做到。
-
当然,低级别的程序是没法把自己升到高级别的,也就是说
用户程序运行在 Ring3
级,他想把自己变成
Ring0
级自己是做不到的,除非是操作系统帮忙。
例如:版主 可以删除你的贴子,你却不能删除 版主 的贴子 ,当然你也没法让自己变成 版主 ,除非 版主 把你升为 版主(或是系统有 bug ).....
-
利用这个特性,操作系统就可以控制所有的程序的运行,确保系统的安全了.
平时把操作系统运行时的级别就叫内核态(因为是操作系统内核运行时的状态),而且普通用户程序运行时的那个级别叫用
户态。
-
当操作系统刚引导时,
CPU 处于实模式,这时就相当于是
Ring0
级,于是操作系统就自动得到最高权限,然后切到保护模式时就是
Ring0
级,这时操作系统就占了先机,成为了最高级别的运行者,由于你的程序都是由操作系统来加载的,所以当它把你加载上来后,就把你的运行状态设为
Ring3
级,即最低级,然后才让你运行,所以没办法,你只能在最低级运行了,因为没办法把自己从低级上升到高级。
例如:这个论坛是由 版主 创立的,当时创立时就他一个用户,所以它就自然取得了最高权限了,即 版主 运行在 Ring0 级(内核态),然后他再让我们注册自己的账号,但是设置的权限是普通用户,所以我们一注册就只能是普通用户,即我们只能运行在 Ring3 级(用户级),我们没有更多的权限,所以我们只能任由 版主 "蹂躏" 了,看你不爽就删除你的贴子,踢你下线,加你进黑名单,永久封你的IP之类的,你除了发发牢骚之外也是无可奈何了, 这就是操作系统在 内核 态可以管理用户程序,杀死用户程序的原因了。
Linux
环境下的内核态与用户态
-
Linux使用了Ring3级别运行用户
态,Ring0作为内核态,没有使用Ring1和Ring2。
-
Ring3状态不能访问
Ring0的地址空间,包括代码和数据。
-
Linux进程的4GB地址空
间,3G-4G部分大家是共享的,是内核态的地址空间,这里存放在整个内核的代码和所有的内核模块,以及内核所维护的数据。
-
用户运行一个程序,该程序所创建的进程开始是运行在用户态的,如果要执行文件操作,网络数据发送等操作,必须通过
write,send等系统调用,这些系统调用会调用内核中的代码来完成操作,这时,必须切换到Ring0,然后进入3GB-4GB中的内核地址空间去执
行这些代码完成操作,完成后,切换回Ring3,回到用户态。
-
这样,用户态的程序就不能随意
操作内核地址空间,具有一定的安全保护作用。
-
至于说保护模式,是说通过内存页
表操作等机制,保证进程间的地址空间不会互相冲突,一个进程的操作不会修改另一个进程的地址空间中的数据。
分享到:
相关推荐
本代码是目前能够找到的最早的Linux的内核版本,Linux 0.11内核是Linux内核的早期版本,于1991年由Linus Torvalds编写并发布。作为一个基于UNIX的操作系统内核,它的源代码包含了核心代码和一些驱动程序。采用开源...
linux 0.11内核下载,linux 内核
Linux0.11内核代码,对于学习内核的人来说,Linux0.11内核代码确实是个不错的选择。。
windows下面编译linux-0.11内核 MinGW32 Bochs
linux内核完全注释根据linux0.11编写的。搭配内核设计的艺术2版,学习linux内核的神组合。学习内核建议从linux0.11看起,初始版本内容比较简单,但包含的都是内核的精髓。先上手,学到了方法,后面再看最新版本就更...
LINUX0.11内核源码 真男人就读源码
《Linux 0.11内核完全注释》
Linux内核Linux内核0.11完全注解.rar0.11完全注解.rar
linux0.11内核源代码 linux0.11内核源代码 linux0.11内核源代码
本书对早期的Linux操作系统内核(v0.11)全部源代码文件进行了详细的注释和 说明,旨在让读者能够在短时间内对Linux的工作机理获得全面而深刻的理解,为进一步学习和研究Linux系统打下坚实的基础。书中首先介绍了 ...
linux0.11内核原理框图 VISIO版
可以直接make的linux-0.11源码,得到Image
linux0.11内核源代码.麻雀虽小,五脏俱全,linux内核的早期版本,学习LINUX内核的好东西!
linux0.11资料,linux0.11内核源码及完全注释
linux-0.11.rar linux0.11版内核源代码 下载
可结合赵炯著的Linux 0.11内核源代码注释进行学习,学习Linux的同学们可以下载进行学习。
linux-0.11 内核原代码 linux-0.11 内核原代码 linux-0.11 内核原代码
linux 0.11内核源代码 有注释 读linux 0.11内核源代码是学习和提高C语言编程能力的最佳途径 对以后其他语言的编程会有很大的帮助 几乎所有的优秀的编程人员都是通过此途径获得快速提高的
在Linux0.11内核的源代码中,包含了各种各样的文件,例如头文件、源文件、Makefile等。虽然它们都有不同的用途,但是它们的组合使得内核能够正常地运行。同时,源代码的开放性也允许了开发者在需要时对内核进行修改...