• 网传上海限购政策松绑 市房管局目前调控政策并无变化 2019-04-23
  • 新疆坚决打好污染防治攻坚战 2019-04-23
  • 景德镇一道路泥泞坑洼找不到东家 区住建局牵头改造 现已完工 2019-04-20
  • 【春到渭南】随手拍渭南各地区春景,一贴看尽渭南春色! 2019-04-18
  • 新能源汽车纳入蚌埠市级政府集中采购目录 2019-04-17
  • 马克思的每个人全面而自由发展,是人的最高需求层次理论。 2019-04-13
  • 习近平:在2018年春节团拜会上的讲话 2019-04-13
  • 陕煤集团多家分公司5月煤炭铁路装运量创历史新高 2019-03-25
  • 中国公民可72小时免签停留俄大城市?中俄正在协商 2019-03-21
  • 就是,适可而止,太多就太假了。[哈哈] 2019-03-21
  • 海螺集团党委组织召开今年第五次中心组学习会 2019-03-17
  • 哈洽会华南城分会场暨俄罗斯风情文化节启幕 2019-03-17
  • 什么是幸福 ——“幸福死了”与“健康长寿” 2019-03-08
  • 高级需求不是物质需求,而是精神需求。你可能理解不了,为什么方志敏们面对高官,厚禄的诱惑而其志不改。 2019-03-08
  • 让办证群众跑十几趟 宁都这黄所长“黄”了 2019-03-05
  • linux 内核 poll机制的问题

    天王盖地虎626 发布于 2018/11/14 10:14
    阅读 99
    收藏 0
     广东十一选五推荐号 www.qhysp.com do_poll(nfds, head, &table, end_time);
                for(;;)
                {
                    for (; pfd != pfd_end; pfd++) //查询多个驱动程序
                    {
                        if (do_pollfd(pfd, pt))  -> mask = file->f_op->poll(file, pwait);return mask;
                        { //do_pollfd函数相当于调用驱动里面的forth_drv_poll函数,下面另外再进行分析,返回值mask非零,count++,记录等待事件发生的进程数
                            count++;
                            pt = NULL;
                        }
                    }
                     
                    if (count || timed_out) //若count不为0(有等待的事件发生了)或者timed_out不为0(有信号发生或超时),则推出休眠
                        break;
                     
                    //上述条件不满足下面开始进入休眠,若有等待的事件发生了,超时或收到信号则唤醒
                    poll_schedule_timeout(wait, TASK_INTERRUPTIBLE, to, slack)
                }

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

    从代码上,我们可以分析,如果内侧的for循环一直没有执行,也就是count 一直是0,timed_out也没有超时,也就是说,会执行
     poll_schedule_timeout(wait, TASK_INTERRUPTIBLE, to, slack)//进行休眠

    因为这个函数是在外侧for循环中的,这样,岂不是导致多次执行

     poll_schedule_timeout函数嘛?不清楚会有什么后果?

    加载中
    0
    彭添
    彭添

    没用过,让我来推测一波:poll_schedule_timeout会阻塞直到下次event到来,这样的话就不会一直for,因为在没有event来的时候你再次循环也没用

    0
    天王盖地虎626
    天王盖地虎626

    引用来自“彭添”的评论

    没用过,让我来推测一波:poll_schedule_timeout会阻塞直到下次event到来,这样的话就不会一直for,因为在没有event来的时候你再次循环也没用

    我的理解,休眠是挂起要执行相应的进程,而不影响外层for循环的

    彭添
    彭添
    接下面那条:就是说,从进程状态来讲,这个函数根本没阻塞进程,但是从CPU的角度来将,这个进程已经被睡眠了
    彭添
    彭添
    内核里面还有一种机制,就是schedule,主动让出CPU调度,在这种情况下,执行了这个函数这个进程不会再占用CPU时间片,那么等下一次调度的时候就继续for,就是说再次for的时候也可能是空的。刚刚看了下代码,这个函数底层是调用设置为非TASK_RUNNING,并且设置为可抢占, 然后调用schedule(),这样的话调用这个函数后内核会把这个进程移出运行队列,直到下一次调度或者时间到了
    返回顶部
    顶部
  • 网传上海限购政策松绑 市房管局目前调控政策并无变化 2019-04-23
  • 新疆坚决打好污染防治攻坚战 2019-04-23
  • 景德镇一道路泥泞坑洼找不到东家 区住建局牵头改造 现已完工 2019-04-20
  • 【春到渭南】随手拍渭南各地区春景,一贴看尽渭南春色! 2019-04-18
  • 新能源汽车纳入蚌埠市级政府集中采购目录 2019-04-17
  • 马克思的每个人全面而自由发展,是人的最高需求层次理论。 2019-04-13
  • 习近平:在2018年春节团拜会上的讲话 2019-04-13
  • 陕煤集团多家分公司5月煤炭铁路装运量创历史新高 2019-03-25
  • 中国公民可72小时免签停留俄大城市?中俄正在协商 2019-03-21
  • 就是,适可而止,太多就太假了。[哈哈] 2019-03-21
  • 海螺集团党委组织召开今年第五次中心组学习会 2019-03-17
  • 哈洽会华南城分会场暨俄罗斯风情文化节启幕 2019-03-17
  • 什么是幸福 ——“幸福死了”与“健康长寿” 2019-03-08
  • 高级需求不是物质需求,而是精神需求。你可能理解不了,为什么方志敏们面对高官,厚禄的诱惑而其志不改。 2019-03-08
  • 让办证群众跑十几趟 宁都这黄所长“黄”了 2019-03-05