免费注册 查看新帖 |

Chinaunix

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

Linux内核栈写时复制 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-08-22 13:17 |只看该作者 |倒序浏览
Linux中fork使用了写时复制技术,那么如果内核栈也使用写时复制技术,当发生写保护异常的时候就没有栈可以使用了,如何解决这个冲突呢?

论坛徽章:
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
2 [报告]
发表于 2011-08-22 14:31 |只看该作者
回复 1# Mr-gmL
内核栈跟task_struct的thread_info共用一块空间。(一般为连续的1个或者2个页面)。而这块空间的申请是在dup_task_struct中通过get_free_pages来获取,也就是说直接就获取了线性地址,不会在走缺页异常那块流程了。

论坛徽章:
0
3 [报告]
发表于 2011-08-23 17:21 |只看该作者
get_free_pages是找到一快空闲的物理内存供映射,没有映射之前是不能读写的,为什么在内核中就直接使用get_free_pages的返回地址呢,这是个物理地址,并不是线性地址,应该不能够访问吧.

论坛徽章:
0
4 [报告]
发表于 2011-08-24 00:29 |只看该作者
get_free_pages是找到一快空闲的物理内存,  但函数返回的是映射到此物理地址的线性地址。

作为访问其内容所用的地址只能是线性地址。物理地址只是在建立地址映射而设置页表时会用到。

个人理解。

论坛徽章:
0
5 [报告]
发表于 2011-08-24 09:20 |只看该作者
回复 1# Mr-gmL


    内核栈是不使用写时复制的。直接用alloc_thread_info宏获取一块空闲的内存区(1个页或者2个页大小),用来存放新进程的thread_info结构和内核栈。

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
6 [报告]
发表于 2011-08-24 09:56 |只看该作者
回复 5# zhanglistar


    re,正解

论坛徽章:
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
7 [报告]
发表于 2011-08-24 10:09 |只看该作者
回复 3# Mr-gmL
get_free_pages返回就是可用的物理页框了啊。

论坛徽章:
0
8 [报告]
发表于 2011-08-24 10:26 |只看该作者
回复 3# Mr-gmL


    在内核中页面的映射关系是已经映射好的,所以应该没有你说的问题。。。

论坛徽章:
0
9 [报告]
发表于 2011-08-24 12:50 |只看该作者
回复 8# luoyan_xy


    我查看的是0.12的源码,所以get_free_page返回的是没有映射的物理页地址,但是在内核空间中,物理地址是对等映射的,所以可以直接使用.

论坛徽章:
0
10 [报告]
发表于 2011-08-24 15:53 |只看该作者
回复 5# zhanglistar


    因为是在内核里分配空间,而且内核的空间是系统启动时候就已经映射好了的,内核对内存的需求是不会cow的。   相反只有对用户的内存请求才会有cow。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP