2014-09-18 178 views
1

它好像在difference between a trap and an interrupt是明确的:一个陷阱是一个软件调用的调用内核(例如,通过一个例外)和一个中断是恰当的硬件(磁盘,I/O和外围设备,如鼠标和键盘......)(详细了解the difference here)。使用Control + C陷阱或中断进程的突然结束?

认识到这一点,在什么类别应按Ctrl + C结束进程进行分类?这是一个软件调用的调用,因此它是一个陷阱,因为它可以从Shell执行等等,或者它是一个中断,因为它是CPU从键盘接收的信号?或者中断完全在用户的域之外,这意味着它是硬件与CPU在用户无法达到的级别交互?

谢谢!

+2

这是一个中断!!! – 2014-09-18 18:47:32

+0

@shekharsuman请不要惹人注意地接受你的回答,这很粗鲁 – Gilles 2014-09-19 09:20:25

+0

@ Gilles-其实我接受了对SO的不接受答案!为什么!但是,你不认为满足OP的答案必须被他接受吗?您可能已经通过操作系统Stack Exchange论坛了解了我的本质,在该论坛中,我请求考虑查看我接受的答案...... – 2014-09-19 13:45:54

回答

2

陷阱和中断之间的差别并不像你在你的问题描述(为参考感谢),但交出的事件的异步特性。陷阱意味着由于通常不正确的/内部操作(例如除以零或页面错误,或者当您发出信号,软件中断)时代码执行中的中断,但它始终处于代码中的同一位置(同步随着代码执行),并且由于外部硬件而发生中断,当某些设备发出信号以中断它正在做的事情时,因为它已准备好发送一些数据。本质上,陷阱是同步的,中断不是。

说此,无论是改变CPU的执行的正常过程中的异常事件。两者都是产生硬件,但出于不同的原因:第一同步发生(你知道总是,在该指令,它就会产生,如果在所有生产)和第二不(你不知道提前当外部硬件断言中断线时,该指令将被执行)。另外,有两种陷阱(取决于触发它们的事件),一种将指令指针指向下一条指令(例如除零陷阱),另一个将它指向导致陷阱的相同指令(例如,页面错误,一旦纠正陷阱的原因后必须重新执行)当然,软件中断自然,总是陷阱(陷阱总是改变执行过程),因为它可以预测的程序流程中的确切点在哪里CPU无线我会被打断。

所以,用这个解释,你也许可以回答你yourshelf问题,一个按Ctrl-C中断是一个中断因为你不能提前predice时,将中断CPU执行,你不能标志着该点你的代码。

请记住,异步中断ocurr,不会陷阱。

2

在Linux系统上按下Ctrl+C用于终止信号为SIGINT的进程,并且可以被程序拦截,以便在退出之前清除其自身,或者根本不会退出。

如果它是一个陷阱,它会立即死亡!

因此,它是一种软件中断!

+0

中断总是可以被程序拦截,而陷阱不能?谢谢,谢克尔 – aralar 2014-09-19 19:26:44

+0

对不起,我还不清楚。请你介绍一下@ miguel5!你指的是哪个程序! – 2014-09-19 19:28:01

+0

我的意思是任何用户级程序(不是内核等)!谢谢! – aralar 2014-09-21 05:13:19

3

首先是信号 - 按Control-C会导致内核向当前的前台进程发送一个信号(类型为SIGINT)。如果该进程没有为该信号设置处理程序(使用来自signal()系列的系统调用之一),则会导致该进程被终止。

的信号是,我想,“中断”的信号,但这是无关的硬件中断。这些仅在内核内部使用。

+0

其实它是一种软件中断!中断也可以是软件类型... – 2014-09-18 19:12:28

+0

对不起,但有**信号**,它们是unix中的陷阱...例如,一个SIGSEGV是一个陷阱,它在代码中同步发生(总是尝试创建一个无效的内存访问)请参阅我对以下问题的回答(或以上,不知道)。 – 2014-09-22 06:25:16

0

Control-C不是一个中断...至少不在PC(现在是MAC)硬件上。换句话说,键盘控制器不会为键组合“控制”和“C”生成特定的中断。

键盘只使用一个中断矢量,这个中断矢量是在一个按键和一个键上触发的。键盘是一个非常慢的硬件设备。在按键重复率设置为最快的情况下,按住一个键每秒钟会产生33次中断。

如果操作系统的设计者认为control-C非常重要,那么他们可能会包含测试“这是C键的关键”AND是“控制”键触发了键盘中断了几十亿机器周期然后,在仍然处理键盘中断的同时,它们将使用软件中断指令产生陷阱

更好的操作系统会将键盘中断的处理时间减少到最低限度,它们只会附加到循环缓冲区(环形缓冲区)的键码包括按下/释放的位并立即终止中断。

操作系统wo然后,只要有时间,注意环形缓冲区指针的改变。它会触发从环形缓冲区中提取关键代码的代码,验证该代码是否代表“ctrl-C”组合,并设置标记为“ctrl-C”检测到。

最后,当调度程序准备运行属于当前进程的线程时,它检查检测到的标志“ctrl-C”,如果是这种情况,调度程序将PC设置为指向SIGINT例程恢复到前一个执行地址

无论详细情况如何,“ctrl-C”不能是中断,它可以是从键盘中断调用的陷阱,也可以是调度器异步测试的同步对象