当前位置:  技术问答>linux和unix

请教高手,如何理解Tasklet的序列化?

    来源: 互联网  发布时间:2016-01-29

    本文导语:  LKD中讲Tasklet机制可以保证相同tasklet的序列化,是因为在对tasklet处理的时候通过设置相应的state和count实现的。但如果是SMP时,如果有多个cpu同时读取某个tasklet(假如该tasklet当前状态不是RUN),那么这时岂不会有多个...

LKD中讲Tasklet机制可以保证相同tasklet的序列化,是因为在对tasklet处理的时候通过设置相应的state和count实现的。但如果是SMP时,如果有多个cpu同时读取某个tasklet(假如该tasklet当前状态不是RUN),那么这时岂不会有多个cpu对同一个tasklet进行处理?

|

tasklet要通过__tasklet_schedule()或者__tasklet_hi_schedule()调度才能投入使用。只在一个cpu上运行就是靠注释部分实现的。


void fastcall __tasklet_schedule(struct tasklet_struct *t)
{
    unsigned long flags;

    local_irq_save(flags);
    /*tasklet在调用tasklet_schedule标记其需要被调度时已经把该tasklet绑定到当前CPU。*/
    t->next = __get_cpu_var(tasklet_vec).list;
    __get_cpu_var(tasklet_vec).list = t;
    raise_softirq_irqoff(TASKLET_SOFTIRQ);
    local_irq_restore(flags);
}


---------------------------

 jianchaolv() ( ) 信誉:100    Blog   加为好友  2007-06-15 09:35:09  得分: 0  
 
 
   我知道"一个tasklet永远只会在同一个CPU上执行", 但我想知道它是如何实现的。是不是在处理tasklet中的state和count时,采用原子操作?
  
 

|
Nod see ulk Chapter 4

Sftirqs are statically allocated (i.e., defined at compile time), while tasklets can also be allocated and initialized at runtime (for instance, when loading a kernel module). Softirqs can run concurrently on several CPUs, even if they are of the same type. Thus, softirqs are reentrant functions and must explicitly protect their data structures with spin locks. Tasklets do not have to worry about this, because their execution is controlled more strictly by the kernel. Tasklets of the same type are always serialized: in other words, the same type of tasklet cannot be executed by two CPUs at the same time. However, tasklets of different types can be executed concurrently on several CPUs. Serializing the tasklet simplifies the life of device driver developers, because the tasklet function needs not be reentrant.


especially "the same type of tasklet cannot be executed by two CPUs at the same time"


-------------------------------

 i_noname(晚九朝五) ( ) 信誉:100    Blog   加为好友  2007-6-14 20:08:29  得分: 0  
 
 
   
看书不仔细,一个tasklet永远只会在同一个CPU上执行

  
 

|
__get_cpu_var(tasklet_vec).list;

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • sembuf.sem_num到底如何理解?--初学者向各位请教
  • 请教关于linux内存分析中提到的page out/ page in指标的理解
  • 请教,ubuntu官方上配置POSTFIX教程有一步无法理解
  • 初学,请教一个信号问题,这个方法不理解
  • 请教,,PM: Adding info for No Bus:usbdev5.6_ep00 (这句的因该怎么来理解呢)
  • 请教对fork()的理解
  • 请教使用相关值对象的理解和使用问题。(请大家帮忙)
  • 请教,请教,这个问题是为什么????
  • 请教本地硬盘安装问题请教本地硬盘安装问题
  • ■请教■请教redhat最基本的问题!
  • 请教一个 shell 问题,我用下面这个 shell 语句总是失败,请教
  • 高分请教,各位大侠,请教一个问题,理论高手请进??谢谢
  • 请教Linux下pgadmin3-1.0.2的编译和安装!!高分请教!
  • 各位大虾,请教装了REDHAT9操作系统后,启动时无法引导到LINUX,请教该如何解决啊
  • 请教,请教,,,一定要看!!一定要看!!
  • 请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • :请教高手,小弟打印width=1500,height=600(A3纸)的Applet,在预览中是该区域是黑的,打印出来也是黑的,请教高手解决一下
  • 请教象我这样的硬盘应如何安装Linux,我昨天试装了,但有问题。(老问题了,也看了前面的帖子,但还是来请教,请多指教)
  • 请教这种循环的执行过程
  • 请教两个redhat9问题
  • 请教如何在指定目录下查找包含指定文字的文件
  • 请教局域网中如何通过ip地址得到主机名
  • 请教kdevelop的问题
  • 请教linux 下的adsl拨号问题.
  • 请教,如何用虚拟订机安装liux
  • 【请教】LINUX 下SNMP的MIB开发
  • 请教一个opengl的问题


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3