免费注册 查看新帖 |

Chinaunix

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

【0.11内核sched.c信号阻塞问题请教】 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-04-26 11:39 |只看该作者 |倒序浏览
Linux0.11内核中关于sched.c程序中有关信号位图的阻塞问题 一直没想通
  代码的116行
    if(  (  (*p)->signal & ~(BLOCKABLE & (*p)->blocked)  )   &&  (*p)->state == TASK_INTERRUPTIBLE)
              (*P)->state = TASK_RUNNING;
  其中 ~(BLOCKABLE & (*p)->blocked)  用于忽略被阻塞的信号,但是SIGKILL 和SIGSTOP不能被阻塞。
   但是绕来绕去  还是没能明白,什么叫不能被阻塞,为什么上面那句可以用于忽略被则色的信号呢?
    BLOCKABLE 被宏定义为(~(_S(SIGKILL))  | (_S(SIGSTOP)))
  这样BLOCKABLE的值就等于(...1011,1111,1110,1111,1111b)
   (*p)-> blocked 中被阻塞的位被置为1  假设,所有的位都被置1,即阻塞所有信号,那么~(BLOCKABLE & (*p)->blocked)  就只有原先代表SIGKILL和SIGSTOP的位为1了,那么(*p)->signal & ~(BLOCKABLE & (*p)->blocked) 又是代表什么意思?  请求高人指点,绕进去了...真的很晕...

论坛徽章:
0
2 [报告]
发表于 2012-04-26 12:01 |只看该作者
因为SIGKILL 和SIGSTOP两个信号优先级高,必须立即处理,所以在ret_from_sys_call(在system_call.s文件中)中不能阻塞,必须立即响应。

论坛徽章:
0
3 [报告]
发表于 2012-04-26 12:11 |只看该作者
但是 (*p)->signal & ~(BLOCKABLE & (*p)->blocked)  怎么理解呢?

论坛徽章:
0
4 [报告]
发表于 2012-04-26 14:47 |只看该作者
还有135行的代码
        while(1)
                {
                        c = -1;
                        next = 0;
                        i = NR_TASKS;
                        p = &task[NR_TASKS];
                        while(--i)
                        {
                                if(!*--p)
                                        continue;
                                if((*p)->state == TASK_RUNNING && (*p)->counter > c)
                                        c = (*p)->counter,next = i;
                        }
                        if(c) break;
                        for(p = &LAST_TASK; p > &FIRST_TASK; --p)
                                if(*p)
                                        (*p)->counter = ((*p)-counter >> 1) + (*p)->priority;
                }
                switch_to(next);       


   

这里说 if(c) break;
   如果有任务的话  ,那肯定会返回到switch_to(next)这里来啊  后面给counter的赋值岂不是执行不到? 我总觉得这里应该是if(!c) break 才对,但查了很多资料  却不是这样的    各位大神,请指教呀...
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP