中断是计算机体系中一个非常重要的概念,中断的产生是因为中央处理器CPU与外部设备的性能不匹配而采取的一种提高CPU利用率的改善机制。当多个外设同时请求CPU对其进行操作时,CPU如果采用线性任务处理方式时,执行一个任务对外设进行相应操作,其它任务和外设就必须等待,一直到当前正在执行的任务完毕,CPU才能执行下一个任务并进行相应的外设操作。由于CPU的运行速度远远大于其它的外设,所以在这样的线性工作机制下CPU的利用率非常的低。于是,人们就开始为提高CPU的利用率而改进CPU的工作方式。后来便诞生了中断机制。
中断就是让CPU中断当前的工作,转而去执行另外的任务。当任务完成,或达到某个特殊条件时,CPU再回过头来继续执行原来未完成的工作。比如:我们正在读一本书,这时电话铃声响了,我们要暂时中断读书这个任务,接起电话,等接完电话之后再回到读书这个任务中去。
异常是当CPU在执行当前任务时,出现了一些非正常的错误,CPU则暂停当前任务,转入错误处理程序,处理完毕后再回到原任务中继续执行。比如:我们正在读一本书,在边读边翻页的过程中,一不小心把一页纸撕坏了,那么只好先中断读书这个任务,用胶水把书页粘好,再回到中断前的位置继续读书。
举一个计算机执行任务的实际例子:CPU目前正在执行一个需要30s才能完成的处理任务A。另外还有一个需要打印10页纸的打印任务B。每打印一张纸,打印机都需要CPU对其执行一个打印指令,执行这条指令需要10ms的时间,打印机接收了打印指令后可脱离CPU独自进行打印工作,打印一页纸需要2s的时间。也就是说打印10页纸的工作时间为(2+0.01)* 10 = 20.1s。
如果采用线性工作机制的话,CPU先执行任务A,等A完成之后再执行任务B,总执行时间为30 + 20.1 = 50.1s。执行过程如下:
可见,CPU在执行任务B时,只执行了“打印指令”,而打印工作是由打印机来完成的。也就是说,在20.1s的时间里,CPU有20s的时间是空闲的,CPU只工作了0.1s。在CPU空闲时完全可以让其去执行其它任务。而在线性任务执行机制下,其它的任务只能等待CPU执行完任务B之后再执行。由此可见在这种任务执行机制下CPU的吞吐率非常的低。
而如果采用中断机制的话,CPU处理任务A和任务B的过程为:
由图可知,CPU正在执行任务A时,收到一个打印任务B的中断请求。这时CPU中断任务A,转向任务B。而这个任务B只需要CPU对打印机发送一条打印指令,10ms即可完成,这时CPU再回到任务A继续执行。当打印机打印完第1页纸之后,再对CPU请求中断。CPU收到中断请求之后再次中断任务A,转向任务B,执行10ms的打印指令之后再回到任务A。如此反复执行,直到A和B两个任务全部结束。总用时为30 + 0.01 * 10 = 30.1s。可以看到,引入了中断机制的任务系统大大的提高了CPU的吞吐量,也就提高了CPU的利用率。
Copyright © 2015-2023 问渠网 辽ICP备15013245号