linux驱动开发
IO模型
阻塞IO
应用程序调用 IO 操作后,会一直阻塞等待数据的读取或写入完成。
直到数据准备就绪或写入完成,应用程序才会继续执行。
非阻塞IO
应用程序调用 IO 操作后,如果数据还没有准备好或无法立即写入,函数会立即返回而不是阻塞等待。应用程序可以继续执行其他任务,之后再次检查数据的准备情况。
IO多路复用
使用 select、poll 或 epoll 等机制,应用程序可以同时监听多个 IO 事件。当任何一个 IO 事件就绪时,应用程序会被通知,可以进行读取或写入操作。这种模型允许同时处理多个 IO 操作,提高了系统的并发性能。
相关API
1.定义等待队列头
wait_queue_head_t wq_head;
2.初始化等待队列头
init_waitqueue_head(&wq_head);
3.wait_event(wq_head, condition)
等待某个条件满足:
当条件condition为假时,进程将被置于休眠状态,并添加到等待队列中,等待条件满足时被唤醒。
当条件condition为真时,进程将继续执行。
4.wait_event_interruptible(wq_head, condition)
功能:检查condition的真假,如果为真,则函数执行结束,如果为假,将进程切换到可中断