Linux内核sys_poll实现原理
来源:互联网 发布:多益网络官方客服电话 编辑:程序博客网 时间:2024/05/14 06:13
poll的功能:
可以监视多个文件描述符,一旦某个文件描述符就绪(一般是读就绪或者写就绪),就能够通知应用程序进行相应的读写操作。
poll核心代码:
for (;;) { struct poll_list *walk; for (walk = list; walk != NULL; walk = walk->next) { struct pollfd * pfd, * pfd_end; pfd = walk->entries; pfd_end = pfd + walk->len; for (; pfd != pfd_end; pfd++) {/** Fish for events. If we found one, record it and kill poll_table->_qproc,so we don't needlessly register any other waiters after this. They'll get immediately deregistered when we break out and return.*/ if (do_pollfd(pfd, pt)) { count++; pt->_qproc = NULL; } } } ....../*省去了一些不是很关键的代码*/ if (!poll_schedule_timeout(wait, TASK_INTERRUPTIBLE, to, slack)) timed_out = 1;}
poll开始执行时,对每一个文件都执行do_pollfd函数。do_pollfd函数会把poll的一个等待节点,加入到对应文件的等待队列上(通过do_pollfd的参数pfd可以找到对应文件的filp描述符,进而得到该文件的等待队列),并返回当前文件是否可供读写信息。如果没有符合要求的文件,则调用poll_schedule_timeout调度别的程序运行。
等到该进程又被调度运行时,要么就是有监视的文件可供读写了(该文件可供读写时,会唤醒在其等待队列上等待的进程,而poll进程在前面已经加入其等待队列了,所以会被唤醒),要么就是时间超时(也有可能被信号唤醒)。此时,需要再遍历一次,统计一下符合要求的文件信息,然后返回。
表述不好,纯当笔记了。Forgive me。
0 0
- Linux内核sys_poll实现原理
- sys_poll
- netlink的内核实现原理 - [linux内核]
- EPOLL Linux内核源代码实现原理分析
- D:LINUX内核层PRINTK实现原理
- syncookie的原理与linux内核实现
- Linux内核学习:netlink的内核实现原理
- Linux内核学习:netlink的内核实现原理
- malloc内核实现原理
- Linux 内核工作原理
- Linux内核定时器原理
- linux内核mmap原理
- linux 内核编译原理
- Linux内核管理原理
- SYN Cookie原理及其在Linux内核中的实现
- SYN Cookie原理及其在Linux内核中的实现
- Linux内核中链表和散列表的实现原理揭秘
- SYNCookie原理及在Linux内核中的实现
- [Java Concurrency in Practice]第十章 避免活跃性危险
- Android酷炫的UI开源框架(转)
- 欢迎使用CSDN-markdown编辑器
- Oracle中的分页存储过程
- FAILED Task attempt_xx_r_000000_0 failed to report status for 600 seconds
- Linux内核sys_poll实现原理
- BZOJ 题目1012: [JSOI2008]最大数maxnumber(线段树)
- [HDU 2159 FATE] 费用背包
- HDU 5130 求圆和简单多边形公共部分面积
- 丢失的第一个正整数
- UVALIVE 6958 I 求某TSP路径长度恰为定值+meet in middle + 折半
- HDU 5383 Yu-Gi-Oh! 过程中最小费用流
- Codeforces 557E dp+字典树+字典序第k大
- POJ 3630 解题报告