linux内核中的poll机制实现原理

这篇博客详细解析了Linux内核中的poll机制,从sys_poll系统调用到do_sys_poll函数,再到do_pollfd的执行过程。文章强调了驱动程序如何通过poll_wait和poll函数配合,使得进程在条件不满足时进入休眠状态,并在设备就绪时被唤醒。通过这个过程,读者可以了解到如何在驱动中编写poll函数以实现有效的I/O等待策略。
摘要由CSDN通过智能技术生成

下面是函数调用情况:

SYSCALL_DEFINE3(poll, struct pollfd __user *, ufds, unsigned int, nfds,
        long, timeout_msecs)
        
#define SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, _##name, __VA_ARGS__)
#define SYSCALL_DEFINEx(x, sname, ...)                \
    __SYSCALL_DEFINEx(x, sname, __VA_ARGS__)
#define __SYSCALL_DEFINEx(x, name, ...)                    \
    asmlinkage long sys##name(__SC_DECL##x(__VA_ARGS__))
    
    
宏解析得到函数:
asmlinkage long sys_poll(struct pollfd __user * ufds, unsigned int nfds,
        long timeout_msecs)
上面这个函数位于fs/select.c中
poll(struct pollfd *fds, nfds_t nfds, int timeout)   对超时参数进行一些处理后直接调用下面函数
    ret = do_sys_poll(ufds, nfds, to)  ‘
        poll_initwait(&table)
            init_poll_funcptr(table->pt, __pollwait)   -->   table->pt->qproc = __pollwait;
        fdcount = do_poll(nfds, head, &ta

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值