版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系我們

[科普中國]-執(zhí)行程序控制

科學(xué)百科
原創(chuàng)
科學(xué)百科為用戶提供權(quán)威科普內(nèi)容,打造知識科普陣地
收藏

簡介

執(zhí)行程序控制是指通過程序控制指令來實現(xiàn)程序控制功能。在計算機(jī)系統(tǒng)有很多地方都需要執(zhí)行程序控制,例如,內(nèi)存與外存之間的數(shù)據(jù)傳送;計算機(jī)中的中斷處理過程;應(yīng)用程序執(zhí)行過程的控制。

數(shù)據(jù)傳送中的程序控制由于CPU與外部設(shè)備的速度不匹配,在早期的計算機(jī)系統(tǒng)中,沒有中斷機(jī)構(gòu),一般采取程序控制方式控制數(shù)據(jù)傳送。程序控制方式是指在程序控制下進(jìn)行的數(shù)據(jù)傳遞方式。在完成外設(shè)數(shù)據(jù)的輸入輸出中,整個輸入輸出過程是在CPU執(zhí)行程序的控制下完成的。這種方式分為以下兩種情況:

無條件傳送方式無條件傳送方式是在假定外設(shè)已經(jīng)準(zhǔn)備好的情況下,直接利用輸入指令(IN指令)或輸出指令(OUT指令)與外設(shè)傳送數(shù)據(jù),而不去檢查(查詢)外設(shè)的工作狀態(tài)。這種傳送方式的優(yōu)點是控制程序簡單。但它必須是在外設(shè)已經(jīng)準(zhǔn)備好的情況下才能使用,否則傳送就會出錯。所以在實際應(yīng)用中無條件傳送方式使用較少,只用于一些較簡單外設(shè)的操作,如對開關(guān)信號的輸入,對LED顯示器的輸出等。

在此情況下,外設(shè)總是準(zhǔn)備好的,它可以無條件地隨時接收CPU發(fā)來的輸出數(shù)據(jù),也能夠無條件地隨時向CPU提供需要輸入 的數(shù)據(jù)2。

程序查詢傳送方式程序查詢傳送方式也稱為條件傳送方式。[2]在這種方式下,利用查詢方式進(jìn)行輸入輸出,就是CPU通過執(zhí)行程序查詢外設(shè)的狀態(tài),判斷外設(shè)是否準(zhǔn)備好接收數(shù)據(jù)或準(zhǔn)備好了向CPU輸入的數(shù)據(jù)。根據(jù)這種狀態(tài),CPU有針對性地為外設(shè)的輸入輸出服務(wù)。

一個用戶程序的執(zhí)行自始至終是在操作系統(tǒng)控制下進(jìn)行的。一個用戶將他要解決的問題用某一種程序設(shè)計語言編寫了一個程序后就將該程序連同對它執(zhí)行的要求輸入到計算機(jī)內(nèi),操作系統(tǒng)就根據(jù)要求控制這個用戶程序的執(zhí)行直到結(jié)束。操作系統(tǒng)控制用戶的執(zhí)行主要有以下一些內(nèi)容:調(diào)入相應(yīng)的編譯程序,將用某種程序設(shè)計語言編寫的源程序編譯成計算機(jī)可執(zhí)行的目標(biāo)程序,分配內(nèi)存儲等資源將程序調(diào)入內(nèi)存并啟動,按用戶指定的要求處理執(zhí)行中出現(xiàn)的各種事件以及與操作員聯(lián)系請示有關(guān)意外事件的處理等。

對于程序查詢傳送方式來說,一個數(shù)據(jù)傳送可由3步完成:

(1)CPU從接口中讀取狀態(tài)信息;

(2)CPU檢測狀態(tài)字的對應(yīng)位是否滿足“就緒”條件,如果不滿足,則回到前一步繼續(xù)讀取狀態(tài)信息;

(3)如果狀態(tài)字表明外設(shè)已處于“就緒”狀態(tài),則傳送數(shù)據(jù)。

應(yīng)用程序控制應(yīng)用程序控制功能主要是控制用戶程序的執(zhí)行。一個用戶將他要解決的問題用某一種程序設(shè)計語言編寫成一個程序后就連同對程序的執(zhí)行的要求輸入到計算機(jī)內(nèi),操作系統(tǒng)就根據(jù)要求控制用戶程序的執(zhí)行直到結(jié)束。操作系統(tǒng)控制用戶程序的執(zhí)行主要有以下一些內(nèi)容:調(diào)入相應(yīng)的編譯程序?qū)⒛撤N設(shè)計語言編寫的源程序編譯成計算機(jī)可執(zhí)行的目標(biāo)程序,分配內(nèi)存資源將程序調(diào)入到內(nèi)存并啟動,按用戶指定的要求處理執(zhí)行中出現(xiàn)的各種事件以及操作員聯(lián)系的請示有關(guān)意外事件的處理等。

中斷處理喚醒被阻塞的驅(qū)動(程序)進(jìn)程當(dāng)中斷處理程序開始執(zhí)行時,首先去喚醒處于阻塞狀態(tài)的驅(qū)動(程序)進(jìn)程。如果是采用了信號量機(jī)制,則可通過執(zhí)行 signal 操作,將處于阻塞狀態(tài)的驅(qū)動(程序)進(jìn)程喚醒;在采用信號機(jī)制時,將發(fā)送一信號給阻塞進(jìn)程。

保護(hù)被中斷進(jìn)程的 CPU 環(huán)境通常由硬件自動將處理機(jī)狀態(tài)字 PSW 和程序計數(shù)器(PC)中的內(nèi)容,保存在中斷保留區(qū)(棧)中,然后把被中斷進(jìn)程的 CPU 現(xiàn)場信息(即包括所有的 CPU 寄存器,如通用寄存器、段寄存器等內(nèi)容)都壓入中斷棧中,因為在中

斷處理時可能會用到這些寄存器。圖 給出了一個簡單的保護(hù)中斷現(xiàn)場的示意圖。該程序是指令在 N 位置時被中斷的,程序計數(shù)器中的內(nèi)容為 N+1,所有寄存器的內(nèi)容都被保留在棧中。

轉(zhuǎn)入相應(yīng)的設(shè)備處理程序由處理機(jī)對各個中斷源進(jìn)行測試, 以確定引起本次中斷的 I/O 設(shè)備, 并發(fā)送一應(yīng)答信號給發(fā)出中斷請求的進(jìn)程,使之消除該中斷請求信號,然后將相應(yīng)的設(shè)備中斷處理程序的入口地址裝入到程序計數(shù)器中,使處理機(jī)轉(zhuǎn)向中斷處理程序。

中斷處理對于不同的設(shè)備,有不同的中斷處理程序。該程序首先從設(shè)備控制器中讀出設(shè)備狀態(tài),以判別本次中斷是正常完成中斷,還是異常結(jié)束中斷。若是前者,中斷程序便進(jìn)行結(jié)束處理;若還有命令,可再向控制器發(fā)送新的命令,進(jìn)行新一輪的數(shù)據(jù)傳送。若是異常結(jié)束中斷,則根據(jù)發(fā)生異常的原因做相應(yīng)的處理。[1]

恢復(fù)被中斷進(jìn)程的現(xiàn)場當(dāng)中斷處理完成以后,便可將保存在中斷棧中的被中斷進(jìn)程的現(xiàn)場信息取出,并裝入到相應(yīng)的寄存器中, 其中包括該程序下一次要執(zhí)行的指令的地址 N+1、 處理機(jī)狀態(tài)字 PSW,以及各通用寄存器和段寄存器的內(nèi)容。這樣,當(dāng)處理機(jī)再執(zhí)行本程序時,便從 N+1 處開始,最終返回到被中斷的程序。

I/O 操作完成后,驅(qū)動程序必須檢查本次 I/O 操作中是否發(fā)生了錯誤,并向上層軟件報告,最終向調(diào)用者報告本次 I/O 的執(zhí)行情況。除了上述的第 4 步外,其它各步驟對所有 I/O設(shè)備都是相同的,因而對于某種操作系統(tǒng),例如 UNIX 系統(tǒng),是把這些共同的部分集中起來,形成中斷總控程序。每當(dāng)要進(jìn)行中斷處理時,都要首先進(jìn)入中斷總控程序。而對于第 4 步,則對不同設(shè)備須采用不同的設(shè)備中斷處理程序繼續(xù)執(zhí)行。圖示出了中斷處理流程。