Linux驱动开发-第六章-Linux阻塞与非阻塞IO、轮询与异步通知编程

本文详细介绍了Linux驱动开发中的阻塞与非阻塞IO概念,包括阻塞IO的进程状态切换和非阻塞IO的处理方式。接着讨论了轮询机制,推荐在大量文件描述符时使用epoll以提高性能。最后,讲解了异步通知编程,包括用户空间如何设置信号接收和驱动端如何发送信号进行异步通知。
摘要由CSDN通过智能技术生成

Linux阻塞与非阻塞IO、轮询与异步通知编程

阻塞与非阻塞IO

  • 阻塞操作是指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的条件后再进行操作。被挂起的进程进入睡眠状态,被从调度器的运行队列移走,直到等待的条件被满足。而非阻塞操作的进程在不能进行设备操作时,并不挂起,它要么放弃,要么不停地查询,直至可以进行操作为止。

  • 等待队列的Linux驱动代码示例:

    static ssize_t xxx_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
    {
         
    ...
        DECLARE_WAITQUEUE(wait, current);	/* 定义等待队列元素 */
        add_wait_queue(&xxx_wait, &wait);	/* 添加元素到等待队列 */
        /* 等待设备缓冲区可写 */
        do {
         
        	avail = device_writable(...);
            if (avail < 0) {
         
                if (file->f_flags &O_NONBLOCK)											/* 非阻塞 */
                {
         
                    ret = -EAGAIN;
                    goto out;
                }
                __set_current_state
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值