中断与信号

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

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

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

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

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

 

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

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

因为信号的发生不可预见,所以称信号是异步的(异步中断肯定不可预见,那这么分析,同步中断也是不可预见的,因为什么时候执行异常指令也不可预见,所以我理解应该是站的角度不同而导致分析不一样)。

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

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

 

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

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

 

阻塞非阻塞:可以简单理解为需要做一件事能不能立即得到返回应答,如果不能立即获得返回,需要等待,那就阻塞了,否则就可以理解为非阻塞。
同步异步: 你总是做完一件再去做另一件,不管是否需要时间等待,这就是同步;异步呢则反之,你可以同时做几件事,并非一定需要一件事做完再做另一件事。同步简单理解成一问一答同步进行,异步可以简单理解为不必等一个问题有答了再去问另一个问题,尽管问,有答了再通知你。(知乎)

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

unix网络编程中说到:
将IO模型分为五类:阻塞IO,非阻塞IO,IO复用,信号驱动,异步IO
其中阻塞IO就是那种recv, read,一直等,等到有了拷贝了数据才返回;
非阻塞就是不用等,立即返回,设置描述符为非阻塞就行了,但是要进程自己一直检查是否可读;
IO复用其实也是阻塞的,不过可以用来等很多描述符;
信号驱动采用信号机制等待;
异步IO就不用等待了,当他告知你的时候,已经可以返回了,数据都拷贝好了。

posix.1严格定义的异步IO是要求没有任何一点阻塞,而上述的前面四个(阻塞IO,非阻塞IO,IO复用,信号驱动)都不同程度阻塞了,而且都有一个共同的阻塞: 内核拷贝数据到进程空间的这段时间需要等待。

 

转载于:https://www.cnblogs.com/kevin-kang/p/3675674.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值