简介
执行程序控制是指通过程序控制指令来实现程序控制功能。在计算机系统有很多地方都需要执行程序控制,例如,内存与外存之间的数据传送;计算机中的中断处理过程;应用程序执行过程的控制。
数据传送中的程序控制由于CPU与外部设备的速度不匹配,在早期的计算机系统中,没有中断机构,一般采取程序控制方式控制数据传送。程序控制方式是指在程序控制下进行的数据传递方式。在完成外设数据的输入输出中,整个输入输出过程是在CPU执行程序的控制下完成的。这种方式分为以下两种情况:
无条件传送方式无条件传送方式是在假定外设已经准备好的情况下,直接利用输入指令(IN指令)或输出指令(OUT指令)与外设传送数据,而不去检查(查询)外设的工作状态。这种传送方式的优点是控制程序简单。但它必须是在外设已经准备好的情况下才能使用,否则传送就会出错。所以在实际应用中无条件传送方式使用较少,只用于一些较简单外设的操作,如对开关信号的输入,对LED显示器的输出等。
在此情况下,外设总是准备好的,它可以无条件地随时接收CPU发来的输出数据,也能够无条件地随时向CPU提供需要输入 的数据2。
程序查询传送方式程序查询传送方式也称为条件传送方式。[2]在这种方式下,利用查询方式进行输入输出,就是CPU通过执行程序查询外设的状态,判断外设是否准备好接收数据或准备好了向CPU输入的数据。根据这种状态,CPU有针对性地为外设的输入输出服务。
一个用户程序的执行自始至终是在操作系统控制下进行的。一个用户将他要解决的问题用某一种程序设计语言编写了一个程序后就将该程序连同对它执行的要求输入到计算机内,操作系统就根据要求控制这个用户程序的执行直到结束。操作系统控制用户的执行主要有以下一些内容:调入相应的编译程序,将用某种程序设计语言编写的源程序编译成计算机可执行的目标程序,分配内存储等资源将程序调入内存并启动,按用户指定的要求处理执行中出现的各种事件以及与操作员联系请示有关意外事件的处理等。
对于程序查询传送方式来说,一个数据传送可由3步完成:
(1)CPU从接口中读取状态信息;
(2)CPU检测状态字的对应位是否满足“就绪”条件,如果不满足,则回到前一步继续读取状态信息;
(3)如果状态字表明外设已处于“就绪”状态,则传送数据。
应用程序控制应用程序控制功能主要是控制用户程序的执行。一个用户将他要解决的问题用某一种程序设计语言编写成一个程序后就连同对程序的执行的要求输入到计算机内,操作系统就根据要求控制用户程序的执行直到结束。操作系统控制用户程序的执行主要有以下一些内容:调入相应的编译程序将某种设计语言编写的源程序编译成计算机可执行的目标程序,分配内存资源将程序调入到内存并启动,按用户指定的要求处理执行中出现的各种事件以及操作员联系的请示有关意外事件的处理等。
中断处理唤醒被阻塞的驱动(程序)进程当中断处理程序开始执行时,首先去唤醒处于阻塞状态的驱动(程序)进程。如果是采用了信号量机制,则可通过执行 signal 操作,将处于阻塞状态的驱动(程序)进程唤醒;在采用信号机制时,将发送一信号给阻塞进程。
保护被中断进程的 CPU 环境通常由硬件自动将处理机状态字 PSW 和程序计数器(PC)中的内容,保存在中断保留区(栈)中,然后把被中断进程的 CPU 现场信息(即包括所有的 CPU 寄存器,如通用寄存器、段寄存器等内容)都压入中断栈中,因为在中
断处理时可能会用到这些寄存器。图 给出了一个简单的保护中断现场的示意图。该程序是指令在 N 位置时被中断的,程序计数器中的内容为 N+1,所有寄存器的内容都被保留在栈中。
转入相应的设备处理程序由处理机对各个中断源进行测试, 以确定引起本次中断的 I/O 设备, 并发送一应答信号给发出中断请求的进程,使之消除该中断请求信号,然后将相应的设备中断处理程序的入口地址装入到程序计数器中,使处理机转向中断处理程序。
中断处理对于不同的设备,有不同的中断处理程序。该程序首先从设备控制器中读出设备状态,以判别本次中断是正常完成中断,还是异常结束中断。若是前者,中断程序便进行结束处理;若还有命令,可再向控制器发送新的命令,进行新一轮的数据传送。若是异常结束中断,则根据发生异常的原因做相应的处理。[1]
恢复被中断进程的现场当中断处理完成以后,便可将保存在中断栈中的被中断进程的现场信息取出,并装入到相应的寄存器中, 其中包括该程序下一次要执行的指令的地址 N+1、 处理机状态字 PSW,以及各通用寄存器和段寄存器的内容。这样,当处理机再执行本程序时,便从 N+1 处开始,最终返回到被中断的程序。
I/O 操作完成后,驱动程序必须检查本次 I/O 操作中是否发生了错误,并向上层软件报告,最终向调用者报告本次 I/O 的执行情况。除了上述的第 4 步外,其它各步骤对所有 I/O设备都是相同的,因而对于某种操作系统,例如 UNIX 系统,是把这些共同的部分集中起来,形成中断总控程序。每当要进行中断处理时,都要首先进入中断总控程序。而对于第 4 步,则对不同设备须采用不同的设备中断处理程序继续执行。图示出了中断处理流程。