zoukankan      html  css  js  c++  java
  • poll机制

    现在来总结一下poll机制:
    1. poll > sys_poll > do_sys_poll > poll_initwait,poll_initwait函数注册一下回调函数__pollwait,它就是我们的驱动程序执行poll_wait时,真正被调用的函数。

    2. 接下来执行file->f_op->poll,即我们驱动程序里自己实现的poll函数
       它会调用poll_wait把自己挂入某个队列,这个队列也是我们的驱动自己定义的;
       它还判断一下设备是否就绪。

    3. 如果设备未就绪,do_sys_poll里会让进程休眠一定时间

    4. 进程被唤醒的条件有2:一是上面说的“一定时间”到了,二是被驱动程序唤醒。驱动程序发现条件就绪时,就把“某个队列”上挂着的进程唤醒,这个队列,就是前面通过poll_wait把本进程挂过去的队列。

    5. 如果驱动程序没有去唤醒进程,那么chedule_timeout(__timeou)超时后,会重复2、3动作,直到应用程序的poll调用传入的时间到达。

    在select/poll函数返回的时候,通过poll_free_wait/poll_free_entry执行的remove_wait_queue
    mark一下,函数名应该是 free_poll_entry

  • 相关阅读:
    单调队列 POJ 2823
    大组合数取mod lucas 定理
    多校4
    多校2
    2016多校1
    百度之星 初赛B续
    iot-web增加apis-namespace组件
    25.75k8s
    新项目增加gradlew
    vue图片点击放大预览v-viewer
  • 原文地址:https://www.cnblogs.com/idyllcheung/p/10571533.html
Copyright © 2011-2022 走看看