免费注册 查看新帖 |

Chinaunix

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

[内核入门] 关于thread_union的两个疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-08-27 18:37 |只看该作者 |倒序浏览
在内核2.6中堆栈这么定义:
union thread_union {
      struct thread_info thread_info;
      unsigned long stack[THREAD_SIZE/sizeof(long)];
};
根据内核的配置,THREAD_SIZE既可以是4K字节(1个页面)也可以是8K字节(2个页面)。thread_info是52个字节长。
在深入理解linux内核中可以看到这副图:


从union角度来看,某一时刻不是只有一个变量存在于这块内存中吗,这个图这么画对不?union声明时,变量长度不是最大变量长度的整数倍吗,这个里面应该是thread_info是最大变量,但8k不是52字节的整数倍,这是怎么回事?

论坛徽章:
1
水瓶座
日期:2013-09-28 21:40:25
2 [报告]
发表于 2013-08-27 22:40 |只看该作者
stack[0]的地址与thread_info地址相同,也就是说每个thread的thread_info保存在进程内核栈的最低端。

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
3 [报告]
发表于 2013-08-28 08:15 |只看该作者
Although the size of 'struct thread_info' is 52 bytes long, but it is not 52 bytes aligned. It 's 4 bytes aligned. 4096 or 8192 can be divided by 4.

论坛徽章:
0
4 [报告]
发表于 2013-08-28 09:13 |只看该作者
firkraag 发表于 2013-08-28 08:15
Although the size of 'struct thread_info' is 52 bytes long, but it is not 52 bytes aligned. It 's 4  ...


Why it is 4 bytes aligned? And what's your opinion on the first question?Thank you!

论坛徽章:
1
双鱼座
日期:2013-08-28 13:47:26
5 [报告]
发表于 2013-08-28 09:34 |只看该作者
回复 4# dsfhs

Because the largest field of 'struct thread_info' is 4 bytes long in 32bits machine. You can baidu the articles about 'bytes aligned'.


For 1st question:

When you reference the field of 'thread_info' in the union, you get the 'thread_info',  when you reference the 'stack' field you get the 'stack' array as well. They share the same memory area. What is it is determined by how you reference it. BTW, the graph is right.
   

论坛徽章:
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
6 [报告]
发表于 2013-08-28 11:23 |只看该作者
回复 1# dsfhs

The graph is right! You misunderstand union struct.

   

论坛徽章:
0
7 [报告]
发表于 2013-08-30 09:43 |只看该作者
联合体的地址对齐是以最大成员长度对齐
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP