中断是怎么实现的
中断是什么
简单的说
就是 CPU 在等待很久才能完成的任务时,趁机去干点别的事情去了。
要是这个耗时较长的任务完成了,给 CPU 打个电话,再把 CPU 叫回来干活。
用复杂的话来说
中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。——来自百度百科。
中断为什么要这样
为什么要让 CPU 趁机去干点别的事情呢?
让它等着不好吗?
是啊,可是别的进程怎么办呢?眼巴巴看着 CPU 搁这儿闲着吗?那不得骂街啊
干脆让给别的进程玩会儿得了
等我这儿事情忙得差不多了,再喊回来,这叫充分使用 CPU
用复杂的话来说
现代计算机中采用中断系统的主要目的是 [4]:
- ①提高计算机系统效率。计算机系统中处理机的工作速度远高于外围设备的工作速度。通过中断可以协调它们之间的工作。当外围设备需要与处理机交换信息时,由外围设备向处理机发出中断请求,处理机及时响应并作相应处理。不交换信息时,处理机和外围设备处于各自独立的并行工作状态。
- ②维持系统可靠正常工作。现代计算机中,程序员不能直接干预和操纵机器,必须通过中断系统向操作系统发出请求,由操作系统来实现人为干预。主存储器中往往有多道程序和各自的存储空间。在程序运行过程中,如出现越界访问,有可能引起程序混乱或相互破坏信息。为避免这类事件的发生,由存储管理部件进行监测,一旦发生越界访问,向处理机发出中断请求,处理机立即采取保护措施。
- ③满足实时处理要求。在实时系统中,各种监测和控制装置随机地向处理机发出中断请求,处理机随时响应并进行处理。
- ④提供故障现场处理手段。处理机中设有各种故障检测和错误诊断的部件,一旦发现故障或错误,立即发出中断请求,进行故障现场记录和隔离,为进一步处理提供必要的依据。
——来自百度百科。
中断是怎么办的
中断咋这么能干呢?
万一电话打给 CPU,CPU 不认识回家的路咋整啊?
这不简单吗?
CPU 趁机干别的事情之前,咱把这儿的电话和定位写在 CPU 手上,这它不就记住了吗?
用复杂的话来说
CPU 收到中断信号后会首先把一些数据 push 到内核栈上,保存的数据是和当前执行点相关的,这样中断完成后就可以返回到原执行点。如果 CPU 当前处于用户态,则会先切换到内核态,把用户栈切换为内核栈再去保存数据(内核栈的位置是在当前线程的 TSS 中获取的)。
那要是谁都给 CPU 打电话,大家弄混了,产生竞争了咋办呢?
这个也简单,给 CPU 配个秘书,嘿嘿。
秘书接到电话,把咱们这些打电话的人先记在本子上。到时候 CPU 再按照顺序上门。
那要是有人很着急,非得插队,要 CPU 赶紧回去咋办呢?
这个也没事,他权限大,他事情急就让他的呗。他权限小,事情缓,那就乖乖和咱们一起排队等呗
用复杂的话说
在某一时刻有几个中断源同时发出中断请求时,处理器只响应其中优先权最高的中断源。当处理机正在运行某个中断服务程序期间出现另一个中断源的请求时,如果后者的优先权低于前者,处理机不予理睬,反之,处理机立即响应后者,进入所谓的“嵌套中断”。中断优先权的排序按其性质、重要性以及处理的方便性决定,由硬件的优先权仲裁逻辑或软件的顺序询问程序来实现
——来自百度百科。