Linux poll机制详细讲解

所有的系统调用,基于都可以在它的名字前加上“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, 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)0x7fffffffffffffffULL / (s64)HZ)timeout_jiffies = -1;else#endiftimeout_jiffies = msecs_to_jiffies(timeout_msecs);} else {/* Infinite (< 0) or no (0) timeout */timeout_jiffies = timeout_msecs;}return do_sys_poll(ufds, nfds, &timeout_jiffies);}



