IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 设备驱动轮询(poll)操作 -> 正文阅读

[系统运维]设备驱动轮询(poll)操作

阻塞和非阻塞I/O是设备访问的两种模式,阻塞操作是指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作得条件后在进行操作,被挂起的进程进入睡眠状态,被从调度器的运行队列移走,直到等待的条件被满足。设备驱动中阻塞I/O一般基于等待队列或基于等待队列的内核API实现。

非阻塞操作的进程在不能进行设备操作时,并不会被挂起,它要么放弃,要么不停的查询直到可以进行操作为止。

非阻塞I/O的应用程序可以借助轮询函数来查询设备是否能被立即访问,在用户程序中,通常使用select(),poll(),epoll()接口查询是否可以对设备进行无阻塞的访问。select(),poll(),epoll()系统调用最终会使设备驱动中的poll()函数被执行。epoll()可以理解为扩展的poll(),当多路复用的文件数量庞大,I/O流量频繁的时候,不太适用select()和poll(),这种情况下,select()和poll()的性能表现较差。这是建议使用epoll(),epoll最大的好处是不会随着fd的数目增长而降低效率。注意设备驱动中的poll()函数本身不会阻塞,与select(),poll(),epoll()相关的系统调用会阻塞的等待至少一个文件描述符集合可被访问或超时。

驱动程序中的poll实现:
在这里插入图片描述
__poll_t (*poll) (struct file *, struct poll_table_struct *);
① 对可能引起设备文件状态变化的等待队列调用poll_wait()函数,将对应的等待队列头部添加到poll_table中,poll_wait()函数只是把当前进程添加到poll_table中,实际作用是让等待队列可以唤醒因select()而睡眠的进程。
② 返回设备资源的可获取状态(POLLIN,POLLOUT,POLLPRI等)。
在调用wake_up_interruptible(&target->event_wait);接口即可唤醒对应进程。

应用程序调用poll的时候,经过系统调用层unistd.h,在linux内核中通过宏定义调用(fs/select.c)
SYSCALL_DEFINE3(poll, struct pollfd __user *, ufds, unsigned int, nfds,int, timeout_msecs) ->
do_sys_poll->do_poll->do_pollfd->vfs_poll
do_sys_poll中主要是调用poll_initwait,它初始化一个poll_wqueues变量table,其会定义一个_pollwait回调,该回调会在poll_wait()时被真正的调用。
do_poll中主要调用do_pollfd,及在判断do_pollfd至少有一个成功,或有错误产生或有信号等待处理,应用程序调用poll后,如果do_pollfd和判断条件等都没有满足,就会调用poll_schedule_timeout()进程进入休眠,除了休眠到指定时间被系统唤醒外,还可以被驱动程序唤醒(驱动程序poll operation中调用poll_wait()的原因)。
do_pollfd主要就是调用file_operations中定义的poll接口,以及处理上报事件mask。

应用程序中调用select和epoll调式:
Epoll:
请添加图片描述

select
请添加图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-09-06 11:30:56  更:2021-09-06 11:32:25 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 13:23:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码