所有的系统调用,基于都可以在它的名字前加上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文件中,代码如下:
asmlinkagelongsys_poll(structpollfd__user*ufds,unsignedintnfds,longtimeout_msecs){s64timeout_jiffies;if(timeout_msecs>0){#ifHZ>1000/*WecanonlyoverflowifHZ>1000*/if(timeout_msecs/1000>(s64)0x7fffffffffffffffULL/(s64)HZ)timeout_jiffies=-1;else#endiftimeout_jiffies=msecs_to_jiffies(timeout_msecs);}else{/*Infinite(<0)orno(0)timeout*/timeout_jiffies=timeout_msecs;}returndo_sys_poll(ufds,nfds,&timeout_jiffies);}