1 阻塞操作
定义:是指在执行设备操作时,若不能获得资源,则挂起进程直到满足可操作的
条件后再进行操作。
驱动如何实现阻塞操作?可以定义一个休眠等待队列,如果设备没有数据可读,就
将请求读数据的进程放到休眠等待队列中休眠,直到设备准备
好数据后,再唤醒休眠进程去读数据。
wait_queue_head_t q;-->休眠等待队列头
init_waitqueue_head(&q);-->初始化休眠等待队列
使用: read-->helloRead
helloRead()
wait_event_interruptible(q,con)-->使当前读进程休眠--》休眠期可被中断
wait_event(q,con)--》使当前读进程休眠--》休眠期不可被中断
q:修吗等待队列头
con:休眠唤醒条件 1:结束休眠 0:继续休眠
helloWrite()
con=1;
wake_up_interruptible(&q)-->唤醒进程(唤醒可被中断的休眠进程)
wake_up(&q)-->唤醒进程(唤醒不可被中断的休眠进程)
注意:当进程正常运行时,进程在运行队列中等待被运行
当进程休眠时,进程在休眠等待对列中等待被唤醒运行
2 非阻塞操作
定义:是指在不能进行设备操作时,并不挂起或休眠该进程,而是给进程一个非
正确的值,底层设备驱动通过不停的查询查看操作是否可进行,直到操作
可进行后给请求进程一个正确的结果。
ÿ