《异步通知IO》

linux应用层没有中断概念,信号是进程间通信的一种。IO设备由于其访问速度问题,需要CPU等待,这样会消耗CPU时间。当需要把IO设备中断传递给应用程序,使用“异步通知I/O”。

一、发送信号(释放信号)

void kill_fasync(struct fasync_struct **fp, int sig, int band)

{

       /* First a quick test without locking: usually

        * the list is empty.

        */

       if (*fp) {

              rcu_read_lock();

              kill_fasync_rcu(rcu_dereference(*fp), sig, band);

              rcu_read_unlock();

       }

}

这里采用RCUread-copy update)同步机制.读(更新)fasync_struct

信号发送时通过send_sigio(fown, fa->fa_fd, band);将信号发送。

二、异步处理

int fasync_helper(int fd, struct file * filp, int on, struct fasync_struct **fapp)

{

       ****

rcu_assign_pointer(*fapp, new);fasync_struct

****

}

你可能感兴趣的:(《异步通知IO》)