在网上看了这么多中断处理过程的讲解,没有一个讲得全面和详细,今天把《计算机操作系统》看了一遍,想了很久,终于弄懂了中断处理的整个过程。
前言
在开始讲整个中断处理过程之前,我们先假设用户给计算机提交了三个作业,内容如下:
作业1:
print(1)
a=input() # 需要用户从键盘输入字符
print(a)
作业2:
print(1)
a=2+3
print(a)
作业3:
print(1)
c=5+3
print(c)
中断执行过程
这三个作业提交到计算机后,操作系统首先收容这三个作业,再利用高级调度将这三个作业调入外存,并为它们建立相应的PCB,然后将它们按顺序插入就绪队列等待CPU的调度。
首先被CPU调度执行的是进程1(作业1)[后面将“作业”全部称为“进程”],CPU按照指令的执行顺序首先执行print(1)
,然后执行a=input()
,这是一个输入指令,需要接收用户的外设输入,因此需要向设备控制器发出一条I/O指令[此时假设是中断驱动I/O方式],该指令经过I/O系统接口传到设备独立性软件,知道具体要使用的输入设备的物理名字,将设备的物理名字和I/O指令传到设备驱动程序进行指令译码,生成对应的底层操作信号用于控制设备控制器,然后来到中断处理程序,处理程序将进程1的CPU环境(包括当前PC的值、各类寄存器的值等message)保存下来用于后面的恢复,保存完之后,带着前面生成的底层操作信号来到设备控制器,利用设备控制器启动输入设备,等待用户输入。此时CPU可以将进程1挂起,跑去执行进程2。
当用户输入信息后,中断处理程序通过设备控制器向CPU发送一个中断请求,假设CPU正在执行进程2的a=3+2
指令,CPU执行完这条a=3+2
指令后,立即去执行中断处理程序,首先保护当前的CPU环境(也就是进程2的CPU环境),便于等下执行完中断处理程序后回来继续执行;保存完后CPU对各个中断源进行测试,以确定引起本次中断的I/O设备,找到后将相应设备的中断服务程序的入口地址装入到PC中,这样当CPU运行到这里时,便可直接转向中断服务程序;当CPU直接转向中断服务程序执行时,负责接收输入的寄存器将输入的数据传到CPU中;得到用户输入的数据然后恢复进程1刚刚保存的现场,将输入的数据传到a=input()
的a变量中,然后执行print(a)
,执行完后再返回进程2的现场继续执行进程2。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。