免费注册 查看新帖 |

Chinaunix

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

读 linux device driver 想起的一个current指针的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-07-16 15:51 |只看该作者 |倒序浏览
既然Linux支持多cpu, smp, 那么current为什么不是一个数组或者类似数组的宏呢
我想既然真正支持多cpu , 如果在双核处理器,当前进程应该是current[cpu_index]才对啊
那么这个current到底代表的是当前哪个处理器呢? 他无法描述某一个时刻两个处理器的状态啊?

求高人指点

论坛徽章:
0
2 [报告]
发表于 2011-07-20 13:01 |只看该作者
每个cpu上的current是不影响的

论坛徽章:
0
3 [报告]
发表于 2011-07-20 13:43 |只看该作者
X86下:  
10 DECLARE_PER_CPU(struct task_struct *, current_task);
  11
  12 static __always_inline struct task_struct *get_current(void)
  13 {
  14         return percpu_read_stable(current_task);
  15 }
  16
  17 #define current get_current()

用了每CPU变量

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
4 [报告]
发表于 2011-07-20 14:21 |只看该作者
回复 1# picobsd


    每个CPU的current指针不是一样的。

论坛徽章:
0
5 [报告]
发表于 2011-07-22 11:20 |只看该作者
回复 2# lengyuex


    恕我驽钝, 还是不明白,那么对于一个n核心处理器, current到底引用的是哪个cpu呢? 怎么分别引用不同cpu上面的current呢?

论坛徽章:
0
6 [报告]
发表于 2011-07-23 15:16 |只看该作者
回复  lengyuex


    恕我驽钝, 还是不明白,那么对于一个n核心处理器, current到底引用的是哪个cpu ...
picobsd 发表于 2011-07-22 11:20



current->> get_current->> current_thread_info->> percpu_read_stable->>percpu_from_op

对于smp,每个cpu上都有正在运行的进程的thread_info,current就根据当行栈里thread_info结构获得task_struct的地址,也就是当行进程的地址。

因为task是thread_info的第一个member,offset为0, 所以很容易获得。

而thread_info放在当前内核栈的最小地址处,栈的地址总是从页框开始处开始的,所以根据页框的大小,直接mask掉后N位就能得到thread_info的首地址。

不知道说得明白不?HOHO~~~

论坛徽章:
0
7 [报告]
发表于 2011-07-25 14:15 |只看该作者
回复 7# lengyuex


    既然thread_info基于每个cpu的,在多核心cpu中应该也有多个thread_info阿,我总觉得如果‘当前的’总能选出'一个'而不是'n个'的话,那么就还不是真正多线程的。
    谢谢你耐心的解答,等我水平高了也许就明白了, 万分感谢。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP