灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2487回复:0

Linux环境下的内核态与用户态简析

楼主#
更多 发布于:2012-08-27 15:08


Linux环境下的内核态与用户态简析



Linux使用了Ring3级别运行用户态,Ring0作为内核态,没有使用Ring1和Ring2。



Ring3状态不能访问Ring0的地址空间,包括代码和数据。



Linux进程的4gB地址空间,3G-4G部分大家是共享的,是内核态的地址空间,



这里存放在整个内核的代码和所有的内核模块,以及内核所维护的数据。

用户运行一个程序,该程序所创建的进程开始是运行在用户态的,如果要执行文件操作,网络数据发送等操作,必须通过write,send等系统调用,这些系统调用会调用内核中的代码来完成操作,这时,必须切换到Ring0,然后进入3GB-4GB中的内核地址空间去执行这些代码完成操作,完成后,切换回Ring3,回到用户态。



这样,用户态的程序就不能随意操作内核地址空间,具有一定的安全保护作用。



至于说保护模式,是说通过内存页表操作等机制,保证进程间的地址空间不会互相冲突,一个进程的操作不会修改另一个进程的地址空间中的数据。



喜欢0 评分0
游客

返回顶部