阻塞与非阻塞访问。Poll()函数提供了较好的解决设备访问的机制,但是如果有了异步通知整套机制,就更加完整了。
中断:
上半部:中断处理程序
下半部:软中断 tasklet 工作队列 workqueue<-work_struct
进程: runqueue 运行队列
struct runqueue{
。。。。
struct task_struct
}
阻塞:
wait_event_interruptibel()
wake_up_interruptible()
非阻塞:
Poll() select()
并发竞态
spinlock() 自旋锁
down_interruptible() 信号量
up(&sem)
异步通知:
一旦设备就绪,则主动通知应用程序。
信号时异步的,一个进程不必通过任何操作来等待信号的到达,事实上,进程也不知道信号到底什么时候到达。
linux信号:
使用信号进行进程间通信(IPC)是Unix系统中的一种传统机制,linux 系统也支持这种机制。
一个信号被捕捉的意思是 当一个信号到达时有 相应的代码处理它。如果一个信号没有被这个进程所捕获,内核采用默认行为处理 。
信号的接收:
在用户程序中 ,为了捕捉信号,可以使用signal()函数来设置对应信号的处理函数
void (*signal)(int signal,void (*handler)(int )))(int);
如果signal()调用成功,它返回最后一次为信号signum绑定的处理函数handler值,失败返回SIG_ERR.
使用信号实现异步通知的应用程序
显示如下: