免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2846 | 回复: 8
打印 上一主题 下一主题

[内存管理] linux中如何防止进程直接访问3-4GB内核空间的?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-04 22:08 |只看该作者 |倒序浏览
因为没有看到相关的资料,只好自己假设一下,请高手给与指点,另外,以下的假设基于x86处理器。
假设1、在处于用户空间时,用户进程的页转换查找表中只有0—3G空间的页表项可能有效。在通过系统调用进入进程上下文内核态时,会把需要的3--4G空间的页表项填入到进程的页表转换查找表中。在从内核空间返回用户空间时,会清零3—4G虚拟空间对应的页表项。这种方式显然比较耗费CPU资源。

假设2、有资料介绍,linux中用到了四个全局段,即内核代码段、内核数据段、用户数据段、用户代码段。假设内核代码段和内核数据段映射0—4G的空间,而用户数据段和用户代码段只映射0—3G的空间。这样的话,用户态空间和用户上下文件内核态空间就可以用同一个页转换查找表了。这样就可以用段保护方式防止用户访问3G以上的线性空间了。

假设3、用户态空间和进程上下文内核态空间使用同一个页转换表。只是在3G以上线性空间对应的页转换表项中设置了超级用户标识,只有超级用户(即内核态)能访问(在x86系统中页表项保护中0,1,2为超级用户级,3为用户级),这样使用页表项的保护阻止用户进程访问高于3G线性空间。这个假设可能性最大,因为在进程上下文内核态,有时需要把0号进程的3—4G空间对应的页表项拷贝到本进程的3—4G空间页表项。

论坛徽章:
2
CU大牛徽章
日期:2013-04-17 11:46:28CU大牛徽章
日期:2013-04-17 11:46:39
2 [报告]
发表于 2012-07-04 22:19 |只看该作者
楼主能否提供一个应用层直接访问内核空间的例子代码?

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
3 [报告]
发表于 2012-07-05 08:30 |只看该作者
回复 1# harvey_perfect
假设3的描述比较符合linux的实现方式

   

论坛徽章:
0
4 [报告]
发表于 2012-07-05 20:20 |只看该作者
回复 2# cdtits
这个应该是不能通过用户进程直接访问内核空间的。我只是想知道在linux是如何实现的。
谢谢交流。


   

论坛徽章:
0
5 [报告]
发表于 2012-07-05 20:21 |只看该作者
瀚海书香 发表于 2012-07-05 08:30
回复 1# harvey_perfect
假设3的描述比较符合linux的实现方式

谢谢指点。

论坛徽章:
0
6 [报告]
发表于 2012-07-11 18:47 |只看该作者
看intel的手册你可以知道的更详细,太细了或许你抓不到重点,或者看linux内核情景分析,他能直接告诉你。
你的猜想到挺好的,还是去看点资料去验证你猜想吧。

如果是说X86的话,猜想2和3都用到了。

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
7 [报告]
发表于 2012-07-14 22:59 |只看该作者
回复 1# harvey_perfect

假设2 有问题, 内核可以维护整个内存空间的页面表;但内核代码或数据段不大可能映射到0~3G的用户空间里去。
   

论坛徽章:
3
处女座
日期:2015-03-18 14:35:45羊年新春福章
日期:2015-03-18 14:48:23午马
日期:2015-03-18 14:51:09
8 [报告]
发表于 2012-07-16 18:26 |只看该作者
每个进程都有自己的LDT,LDT用来分隔不同进程空间互不干扰,如果要访问内核空间,有两种方法,直接用GDT中的描述符,但是你只能访问DPL>=CPL的段,还有一种就是通过门来间接访问,可是访问门描述符也和CPL相关门选择符RPL和 CPL<=门描述符的DPL才能访问门
否则产生一般保护异常
主要就是通过特权级来控制的

论坛徽章:
3
处女座
日期:2015-03-18 14:35:45羊年新春福章
日期:2015-03-18 14:48:23午马
日期:2015-03-18 14:51:09
9 [报告]
发表于 2012-07-16 18:27 |只看该作者
内核通过赋予给GDT里面描述符项的DPL来控制进程是否能访问改内核段
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP