中断与信号

问题:既然说信号是中断在进程中的模拟,那为何中断有同步和异步,而信号说是进程间异步通讯机制?编程

中断:是指处理器接收到来自硬件或软件的信号,提示发生了某个事件,应该被注意,这种状况就称为中断(wiki)。中断改变处理器执行的指令顺序。(ULK3)网络

中断分为同步中断和异步中断:异步

  同步中断(异常,inter手册):指令执行时由CPU控制单元产生的,之因此称为同步,是由于只有在一条指令终止执行后cpu才会发出中断。程序的错误产生(内核经过发送一个信号来处理异常)或内核必须处理的异常条件产生(内核修复异常,如缺页或对内核服务的一个请求,int,sysenter指令)。unix

  异步中断(中断,inter手册):由其余硬件设备依照cpu时钟信号随机产生的。间隔定时器和I/O设备产生的。进程

 

信号:用于在用户态进程间通讯,内核也用信号通知进程系统发生的时间。信号是很短的消息,能够被发送到一个进程或一个进程组。事件

使用信号的两个主要目的:让进程知道已经发生了一个特定的事件;强迫进程执行它本身代码中的信号处理程序。同步

由于信号的发生不可预见,因此称信号是异步的(异步中断确定不可预见,那这么分析,同步中断也是不可预见的,由于何时执行异常指令也不可预见,因此我理解应该是站的角度不一样而致使分析不同)。网络编程

异步:预先不知道某些事件是否会发生,何时发生,设置预期措施。软件

同步:约定某个条件,事件发生后执行相应操做。硬件

 

下面站在I/O的角度上分析同步异步,阻塞与非阻塞(UNPV13)

同步和异步关注的是消息如何通知的机制。同步的状况是由处理消息者本身去等待消息是否被触发,而异步的状况是由触发机制来通知处理消息者
阻塞和非阻塞关注的是发生在消息的处理的时刻。阻塞就是等待,发出通知,等待结果完成。非阻塞是发出通知,当即返回结果,没有等待过程。

 

阻塞非阻塞:能够简单理解为须要作一件事能不能当即获得返回应答,若是不能当即得到返回,须要等待,那就阻塞了,不然就能够理解为非阻塞。
同步异步: 你老是作完一件再去作另外一件,无论是否须要时间等待,这就是同步;异步呢则反之,你能够同时作几件事,并不是必定须要一件事作完再作另外一件事。同步简单理解成一问一答同步进行,异步能够简单理解为没必要等一个问题有答了再去问另外一个问题,尽管问,有答了再通知你。(知乎)

阻塞非阻塞都是同步(非阻塞只有读了才能写),异步确定是非阻塞。

unix网络编程中说到:将IO模型分为五类:阻塞IO,非阻塞IO,IO复用,信号驱动,异步IO其中阻塞IO就是那种recv, read,一直等,等到有了拷贝了数据才返回;非阻塞就是不用等,当即返回,设置描述符为非阻塞就好了,可是要进程本身一直检查是否可读;IO复用其实也是阻塞的,不过能够用来等不少描述符;信号驱动采用信号机制等待;异步IO就不用等待了,当他告知你的时候,已经能够返回了,数据都拷贝好了。posix.1严格定义的异步IO是要求没有任何一点阻塞,而上述的前面四个(阻塞IO,非阻塞IO,IO复用,信号驱动)都不一样程度阻塞了,并且都有一个共同的阻塞: 内核拷贝数据到进程空间的这段时间须要等待。

相关文章
相关标签/搜索