zoukankan      html  css  js  c++  java
  • 单处理器上保护软中断​使用的数据结构需要禁​用本地软中断吗?

    问:请教各位大侠:
    《深入理解linux内核》中,内核同步章节有这样一段话
    保护可延迟函数(软中断)所访问的数据结构应采取的措施:
    单处理器上:在单处理器上不存在竞争条件,这是因为可延迟函数(软中断)的执行总是在一个CPU上串行执行--也就是说,一个可延迟函数不会被另一个可延迟函数中断。因此,根本不需要同步原语。

    我觉得不太对啊,一个软中断虽然不会被另一个软中断“中断”,但是可能被硬中断“中断”,而硬中断最后还是要执行到软中断,因此还是会形成对资源的临界区访问。我觉得在保护软中断时,应该关闭本地软中断,比如用local_bh_disable

    不知道这样理解对不对?

    答:开始处理软中断的情况主要是
    1、中断退出执行的irq_exit
    2、内核线程ksoftirqd
    3、local_bh_enable


       1:  asmlinkage void do_softirq(void)
       2:  {
       3:          unsigned long flags;
       4:          struct thread_info *curctx;
       5:          union irq_ctx *irqctx;
       6:          u32 *isp; 
       7:   
       8:          if (in_interrupt())
       9:                  return;
      10:  ....
      11:  }


    可以看到,in_interrupt 判断,当前若是从硬件中断退出后执行的irq_exit进入的do_softirq,则立即返回,可以避免你说的情况

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    JS 获取网页内容高度 和 网页可视高度 支持IE6789 Firefox Chrome
    JS 回车快捷键登陆页面 兼容火狐和IE
    如何设置span宽度
    实现三行布局页面自适应不同分辨率下的屏幕高度
    电脑个别网站打不开 POSTMAN可以请求通
    克隆DataTable
    Microsoft Visual SourceSafe 6.0 关联VS
    asp.net 网站设置访问超时时长
    sql server management studio(ssms)连接多个数据库注意事项
    ASP.NET Core 开发中间件(StaticFiles)使用
  • 原文地址:https://www.cnblogs.com/justinzhang/p/2109915.html
Copyright © 2011-2022 走看看