下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、poll机制分析韦东山 2009.12.10所有的系统调用,基于都可以在它的名字前加上“sys_”前缀,这就是它在内核中对应的函数。比如系统调用 open、read、write、poll ,与之对应的内核函数为:sys_open、sys_read、sys_write、sys_poll。一、内核框架:对于系统调用 poll或 select,它们对应的内核函数都是sys_poll。分析 sys_poll,即可理解 poll机制。1.sys_poll函数位于 fs/select.c 文件中,代码如下:asmlinkage long sys_poll(struct pollfd _user *ufds
2、, unsigned int nfds,long timeout_msecs)s64 timeout_jiffies;if (timeout_msecs 0) #if HZ 1000/* We can only overflow if HZ 1000 */if (timeout_msecs / 1000 (s64)0 x7fffffffffffffffULL / (s64)HZ)timeout_jiffies = -1;else#endiftimeout_jiffies = msecs_to_jiffies(timeout_msecs);) else /* Infinite ( init_po
3、ll_funcptr(&pwq-pt, _pollwait); pt-qproc = qproc;即 table-pt-qproc = _pollwait , _pollwait 将在驱动的 poll 函数里用到。3.do_sys_poll函数位于 fs/select.c 文件中,代码如下:static int do poll(unsigned int nfds, struct poll list *list,struct poll_wqueues *wait, s64 *timeout)for (;) (if (do_pollfd(pfd, pt) (count+;pt = NULL
4、;if (count | !*timeout | signal_pending(current)break;count = wait-error;if (count)break;if (*timeout = (s64)MAX_SCHEDULE_TIMEOUT-1) /* Wait for longer than MAX_SCHEDULE_TIMEOUT. Do it in* a loop*/_timeout = MAX_SCHEDULE_TIMEOUT - 1;*timeout -= _timeout; else _timeout = *timeout;*timeout = 0;_timeou
5、t = schedule_timeout(_timeout);if (*timeout = 0)*timeout += _timeout;_set_current_state(TASK_RUNNING);return count;(010203040506070809101112131415161718192021222324252627282930313233343536 )分析其中的代码,可以发现,它的作用如下:1从 02行可以知道,这是个循环,它退出的条件为:a.09行的 3个条件之一 (count非 0,超时、有信号等待处理)count非 0表示 04行的 do_pollfd至少有一个
6、成功。b.11、12行:发生错误2重点在 do_pollfd函数,后面再分析3第 30行,让本进程休眠一段时间,注意:应用程序执行poll 调用后,如果的条件不满足,进程就会进入休眠。那么,谁唤醒呢?除了休眠到指定时间被系统唤醒外,还可以被驱动程序唤醒 记住这点,这就是为什么驱动的poll 里要调用 poll_wait 的原因,后面分析。4.do_pollfd函数位于 fs/select.c 文件中,代码如下:static inline unsigned int do_pollfd(struct pollfd *pollfd, poll_table *pwait),if (file-f_op
7、& file-f_op-poll)mask = file-f_op-poll(file, pwait);,)可见,它就是调用我们的驱动程序里注册的poll函数。二、驱动程序:驱动程序里与poll相关的地方有两处:一是构造file_operation结构时,要定义自己的poll函数。二是通过 poll_wait 来调用上面说到的 _pollwait 函数,pollwait 的代码如下:static inline voidpoll_wait(struct file * filp, wait_queue_head_t * wait_address, poll_table *p) if (p
8、& wait_address)p-qproc(filp, wait_address, p); )p-qproc就是_pollwait 函数,从它的代码可知,它只是把当前进程挂入我们驱动程序 里定义的一个队列里而已。它的代码如下:static void _pollwait(struct file *filp, wait_queue_head_t *wait_address,poll_table *p) struct poll_table_entry *entry = poll_get_entry(p);if (!entry)return;get_file(filp);entry-filp
9、 = filp;entry-wait_address = wait_address;init_waitqueue_entry(&entry-wait, current);add_wait_queue(wait_address, &entry-wait);)执行到驱动程序的 poll_wait 函数时,进程并没有休眠,我们的驱动程序里实现的poll函数是不会引起休眠的。 让进程进入休眠,是前面分析的 do_sys_poll 函数的 30 行_timeout=schedule_timeout _timeout)。poll_wait 只是把本进程挂入 某个队列,应用程序调用poll
10、sys_poll do_sys_poll poll_initwait , do_poll do_pollfd 我们自己写的 poll 函数后,再调用 schedule_timeout 进入 休眠。如果我们的驱动程序发现情况就绪,可以把这个队列 上挂着的进程唤醒。可见,poll_wait 的作用,只是为了让驱动程序 能找到要唤醒的进程。即使不用poll_wait ,我们的程序也有机会被唤醒:chedule_timeout(_timeout),只是要休眠_time_out这段时间。现在来总结一下 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. 进程被唤醒的条
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年大学建筑工程造价(全过程造价管理)试题及答案
- 工程机械技术营销
- 制氧机培训课件
- 【初中 生物】我国的动物资源及保护教学课件-2025-2026学年北师大版生物八年级下册
- 2026年烟草市场专项治理工作总结样本(四篇)
- 2026年国防教育知识竞赛试题(附答案)
- 房角分离术术前眼压准备策略
- 成瘾医患沟通的跨文化适应策略
- 成本标杆的行业对标策略-1
- 浙江省湖州市南浔区2023-2024学年七年级上学期期末英语试题(含答案)
- 2025年5年级期末复习-苏教版丨五年级数学上册知识点
- 2025年韩家园林业局工勤岗位工作人员招聘40人备考题库及参考答案详解一套
- 工会工作考试题库
- 焊接机器人变位机技术设计方案
- 栏杆安装施工方案示例
- 2026年蔬菜种植公司组织架构设置及调整管理制度
- JJF 2333-2025 恒温金属浴校准规范
- 2025年水工金属结构行业分析报告及未来发展趋势预测
- 化纤面料特性说明手册
- 高校文化育人课题申报书
- 小儿脑瘫作业疗法家庭指导
评论
0/150
提交评论