zoukankan      html  css  js  c++  java
  • 013_Linux驱动之_poll机制

    1. 功能:poll的机制与select相似,与select在本质上没有多大差别。管理多个描写叙述符也是进行轮询,依据描写叙述符的状态进行处理,可是poll没有最大文件描写叙述符数量的限制。

    2. 技术资料:poll多路复用 这篇文章写得很好
    3. 技术资料:poll机制分析
    4. 首先我们看应用程序中poll的调用原型
                                       //文件                        数量                          时间以毫秒为单位
    static unsigned int poll(struct file *file, struct socket *sock,poll_table *wait)
    5. 首先我们看看简单应用程序中如何使用的

    6. 第一点中我们定义一个pollfd的数组变量,为什么是数组呢,因为调用poll函数时候可以同时调用很多个,所 以第三点传入数组地址时候就能够同时调用很多个
    第二点我们设置了文件和事件,具体其他的可以看看poll多路复用
    第三点就是我们应用程序中调用了,当我们运行这个时候,会调用到驱动程序中的.poll机制的程序
     
    7. 当我们上面运行应用程序时候,调用到ret = poll(fds, 1, 5000);这条时候驱动程序中就会运行forth_drv_poll函数


     
    8. 从上面看,当调用到驱动程序之后会在poll_wait(file, &button_waitq, wait);停下来
    9. 解析poll_wait,函数原型
    //                                          文件            等待队列头             poll_table就是传入的时间
    static inline void poll_wait(struct file * filp, wait_queue_head_t * wait_address, poll_table *p)
    10.解析上面图片中poll_wait(file, &button_waitq, wait);


    从上面三张图片程序运行时从应用程序到驱动程序的参数传递。
    也就是说应用程序传递给可poll_wait的文件file和时间wait=5000MS
    button_waitq是等待队列头012_Linux驱动之_wait_event_interruptible
    11. 当运行到poll_wait时候,进程就会挂到button_waitq的等待队列中去
    想要就行往下运行,则需要
    1. button_waitq的头队列被唤醒
    2. 时间wait超过5000ms

  • 相关阅读:
    Java学习10——package和import
    第一次作业_031502532_吴智慧
    Java学习9——面向对象
    Java学习8——类(对象)之间的关系
    Java学习7——一些注意的地方
    Java学习5——标识符和关键字
    Zookeeper集群和HBase集群
    Zookeeper、HBase的伪分布
    hive学习笔记——表的基本的操作
    hive 学习笔记——表的入门操作和命令
  • 原文地址:https://www.cnblogs.com/luxiaoguogege/p/9690239.html
Copyright © 2011-2022 走看看