• 反腐败国际合作"朋友圈"又大了! 2019-07-13
  • 前线 从一面“魔镜” 看苏宁科技集团智能化发展战略 2019-07-13
  • 身份证被盗产生不良记录 网络虚拟账号权属纠纷如何避免 2019-07-07
  • 的确,呆子七窍通了栁窍。[哈哈] 2019-06-20
  • 强国博客首页整合公告 2019-06-08
  • 西海都市报数字报刊平台 2019-05-27
  • 美国反拥枪的孩子很受伤 2019-05-25
  • C罗戴帽单骑救主 葡萄牙33战平西班牙 2019-05-25
  • 证监会去年对外公开监管信息14560条 2019-05-16
  • 中山八路总站调整12公交线 2019-05-16
  • 谢春涛:深刻把握“中国特色社会主义进入新时代”的重大意义 2019-05-09
  • 湖南一博士生举报水利局领导受贿 遭到冒牌纪委约谈 2019-05-09
  • 西安地铁唐风诗韵文化专列将于6月18日首发 2019-04-30
  • 铜梁区旧县街道:全面提升执行力 推动工作落地见效 2019-04-30
  • 上海电影节女性影人大放异彩 中生代女演员不用焦虑 2019-04-29
  • linux 内核 poll机制的问题

    天王盖地虎626 发布于 2018/11/14 10:14
    阅读 129
    收藏 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-07-13
  • 前线 从一面“魔镜” 看苏宁科技集团智能化发展战略 2019-07-13
  • 身份证被盗产生不良记录 网络虚拟账号权属纠纷如何避免 2019-07-07
  • 的确,呆子七窍通了栁窍。[哈哈] 2019-06-20
  • 强国博客首页整合公告 2019-06-08
  • 西海都市报数字报刊平台 2019-05-27
  • 美国反拥枪的孩子很受伤 2019-05-25
  • C罗戴帽单骑救主 葡萄牙33战平西班牙 2019-05-25
  • 证监会去年对外公开监管信息14560条 2019-05-16
  • 中山八路总站调整12公交线 2019-05-16
  • 谢春涛:深刻把握“中国特色社会主义进入新时代”的重大意义 2019-05-09
  • 湖南一博士生举报水利局领导受贿 遭到冒牌纪委约谈 2019-05-09
  • 西安地铁唐风诗韵文化专列将于6月18日首发 2019-04-30
  • 铜梁区旧县街道:全面提升执行力 推动工作落地见效 2019-04-30
  • 上海电影节女性影人大放异彩 中生代女演员不用焦虑 2019-04-29
  • 广东十一选五缩号软件 内蒙古十一选五的走势图百度乐彩网 3d出组三规律 东城西就8码免费公开 魔方的玩法技巧 吉林快3走势图下载 北京单场奖金怎么算 湖南彩票动物总动员 2019年神童透码报资料 广东好彩1玩法 云南快乐十分走直图 双用五子棋围棋 陕西11选5爱彩乐遗漏 内蒙古快三结果走势图 泳坛夺金开奖时间