欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

帶保存和恢復(fù)標志的服務(wù)中斷的制作方法

文檔序號:6460569閱讀:152來源:國知局
專利名稱:帶保存和恢復(fù)標志的服務(wù)中斷的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及服務(wù)中斷,特別是與嵌套子程序有關(guān)的服務(wù)中斷。
在處理系統(tǒng)中,普遍使用中斷服務(wù)子進程來實現(xiàn)對共享資源,如存儲器的多個要求的處理。這些子進程一般包括禁止下一個中斷的指令,直到完成當前中斷,并重啟中斷。這種使中斷禁止/使能功能的主要目的是確保服務(wù)對同一資源的競爭要求,而不破壞已有的信息。
在有些情況下,每個中斷子進程分別在開始部和結(jié)束部的禁止和再使能中斷的簡單動作不足以防止信息毀壞。例如,有時需要容許在第一個子進程中嵌套第二個子進程,它們都包括自己的禁止和使能中斷指令。嵌套的第二個子進程的結(jié)尾能包括一個中斷使能的指令,接著是一個啟動返回的返回指令,并完成第一個子進程。然而,如果當嵌套的第二個子進程發(fā)出它的中斷使能指令時,服務(wù)另一個中斷的請求被掛起,那么其它中斷能在完成第一個子進程之前被第三個中斷服務(wù)。如果第三個子進程共享的存儲器位置仍然被第一個子進程使用,第三個子進程能夠修改并不被注意地破壞在這些共享存儲器位置的信息。另外,這些存儲器位置能包括不正確信息,如還沒有被第一個子進程更新的存儲器地址。在這種情況下,第三個子進程在不正確地址或讀取或保存信息。
對該問題的一個已知的解決方案是首先保存涉及執(zhí)行嵌套子進程的處理器狀態(tài)的相關(guān)數(shù)據(jù)(如處理器狀態(tài)字),使中斷不能進行一個子進程,然后讀取保存的數(shù)據(jù)并在使中斷重使能之前恢復(fù)處理器至它的較早狀態(tài)。這種解決方案是耗時且耗內(nèi)存的。
歐洲專利441054一般性地討論了該問題并建議將寄存器庫,狀態(tài)位和服務(wù)中斷的中斷邏輯的結(jié)合作為一個解決方案。有必要提供一個更簡單的方法。
本發(fā)明的目的之一是提供一個服務(wù)中斷的簡單方法,它能有效地避免破壞保存在存儲器中的信息的問題。
注意在這里使用的單詞“存儲器”,將一般被解釋為與這樣的方式一致,即在該方式下它無限制地被使用并包括各種類型的易失和非易失設(shè)備,如寄存器,RAM,DRAM,ROM,LIFO,FIFO等等。
依照本發(fā)明,在響應(yīng)被請要的中斷執(zhí)行嵌套子進程的處理器的操作中,一種服務(wù)這樣的中斷的方法包括·提供一個表示當前中斷能狀態(tài)的指示器;·保存包括該指示器的狀態(tài)數(shù)據(jù);·將該當前中斷使能狀態(tài)置于禁止狀態(tài);·至少開始執(zhí)行被請求中斷指定的一個動作;·在接收另一個中斷請求前·從保存的狀態(tài)數(shù)據(jù)中讀取指示器;·將當前中斷使能狀態(tài)置于該指示器表示的狀態(tài)。


圖1是描述處理系統(tǒng)的方框圖,它能按照本發(fā)明的實施例服務(wù)中斷。
圖2是表示一個按照本發(fā)明應(yīng)用實施例的方法的示范性操作順序的表。
圖3是描述應(yīng)用于該實施例中的示范性中斷子進程的方框圖。
圖1的處理系統(tǒng)包括一個處理器10,一個存儲器20和一條總線30。示范性處理器10使用時鐘脈沖來順序進行由程序計數(shù)器寄存器確認的指令。一般,程序計數(shù)器寄存器包括處理器將要讀取并因此而動作的下一條指令的存儲器位置。
該處理器包括一個中斷服務(wù)單元12,一個寄存器組14,一個指令解碼器16和一個算術(shù)邏輯單元18。在本實施例中,存儲器20包含一個有多個存儲器位置用于存儲的RAM,它存儲,例如,子進程和數(shù)據(jù)。在優(yōu)先實施例中,存儲器部分作為LIFO堆棧22來使用。
處理器10和存儲器20連接至總線30用來彼此通信并與連接至該總線的其它硬件通信。該總線包括各種載有信息的線路,如地址,中斷,數(shù)據(jù),讀取閘門,寫入閘門和設(shè)備選擇閘門。
處理器10的操作是由程序流中的指令和中斷來控制的。該中斷可以或是從總線30接收的外部中斷,或是在處理器本身,如從處理器中的計時器(未示出)中產(chǎn)生的內(nèi)部中斷。
所有中斷由中斷服務(wù)單元12服務(wù),該單元產(chǎn)生確定與外部中斷和內(nèi)部中斷有關(guān)的存儲器位置的地址。為了響應(yīng)任何中斷,單元12產(chǎn)生確認對應(yīng)的內(nèi)部中斷子進程在存儲器20中的位置的一個地址。中斷服務(wù)單元最好包含一個用于產(chǎn)生地址的專門的優(yōu)先級敏感硬件元件,如一個可編程的查詢表或一個編碼器。二者在現(xiàn)有技術(shù)中是已知的。二者都能使速度最大并能在較低優(yōu)先級中斷之前服務(wù)較高優(yōu)先級中斷。
該寄存器組14包含多個寄存器,它們包含可更新的存儲器地址和由中斷子進程產(chǎn)生的變量。在本優(yōu)先實施例中,寄存器組包括·變量寄存器140,141,142,它存有各自變量A0,A1,A2的;·一個程序計數(shù)器寄存器,它存有將要存取的存儲器中的下一條指令的連續(xù)更新地址PC;·一個計數(shù)器寄存器144,它有一個計數(shù),表示等待使用的信息片的個數(shù)。
·一個或多個通用寄存器(未示出);和·一個或多個數(shù)據(jù)寄存器(未示出),它存有或從存儲器20中讀取或由算法邏輯單元18產(chǎn)生的數(shù)據(jù)。
指令解碼器16是一個傳統(tǒng)的硬件元件,如一個排序器或微排序器,用于轉(zhuǎn)換從存儲器20中讀取的指令為低級操作碼,將由算法邏輯單元18執(zhí)行。該算法邏輯單元也是一個傳統(tǒng)的硬件元件。
圖2示出了一個典型的連續(xù)步驟示例,它將根據(jù)本發(fā)明優(yōu)先實施例在服務(wù)多個中斷時由處理器10)來執(zhí)行。在本例中使用的中斷子進程是·一個生產(chǎn)信息的生產(chǎn)信息子進程;·一個消費信息子進程,用于使用由生產(chǎn)信息子進程產(chǎn)生的信息;·一個更新計數(shù)器子進程,用于更新寄存器144中的計數(shù)。
該表的列標題有下面含義·符號IR代表一個中斷請求標志的狀態(tài),“1”表示一個中斷請求正在被接收,“0”表示沒有中斷請求正在被接收。
·符號IE代表一個中斷使能標志的狀態(tài),“1”表示該標志被設(shè)定(即中斷當前是使能的),“0”表示該標被重置(即中斷當前是禁止的)。
·“Inst.#”表示當前正被處理器10執(zhí)行的指令個數(shù)。
·“計數(shù)”是當前包含在寄存器144中的數(shù)目,即已經(jīng)產(chǎn)生正在等待消費的信息片個數(shù)。
·符號A0和A1表示分別保存在寄存器140和141中的這些變量的當前值。
圖3示出了示范性子進程,包括在該子進程中的每條指令前面有各自的指令#。
現(xiàn)在參考圖3描述圖2中的例子。注意本例中假設(shè)在步驟1之前,中斷使能標志已設(shè)置(IE=1),并且寄存器144中的計數(shù)已被初始化為值0,表示沒有信息在等待消費。
在步驟1,收到一個產(chǎn)生信息的中斷請求(1R=0)。該處理器10通過從已在執(zhí)行的任何過程切換到中斷子進程生產(chǎn)信息響應(yīng)該請求。
在步驟2和3,處理器重置中斷請求標志,產(chǎn)生信息并將它保存在存儲器20中,并執(zhí)行生產(chǎn)信息子進程的指令#1和#2。具體是·在步驟2,重置中斷請求標(IR=0),并執(zhí)行指令#1,即將變量A1(在寄存器141中的)值設(shè)為1。(變量A0的值這時是不確定的。)·在步驟3,執(zhí)行指令#2,即調(diào)用子進程更新計數(shù)。
在步驟4至9,處理器執(zhí)行被調(diào)用的更新計數(shù)子進程。具體是·在步驟4,執(zhí)行指令#10,即壓入和禁止中斷。根據(jù)本指令,處理器首先通過將中斷使能標志的當前狀態(tài)壓入LIFO堆棧保存它(IE=1)。如果需要保存附加信息(如其它標志的當前狀態(tài)),該附加信息此時也被推入堆棧。然后處理器重置中斷使能標志(IE=O),從而使下一個中斷不能直到完成對寄存器144中的計數(shù)的更新。
·在步驟5,通過設(shè)置變量A0(在寄存器140中)值等于寄存器144中的計數(shù)的當前值,即A0=0,執(zhí)行指令#11。
·在步驟6,通過計算總和A0+A1=1并將該總和保存在寄存器140中作為A0的新值,執(zhí)行指令#12。
·在步驟7,通過保存寄存器144中的新值作為計算的新值,即計數(shù)=1來執(zhí)行指令#13。
·在步驟8,執(zhí)行指令#14,即恢復(fù)指令。依照本指令,處理器將中斷使能標志恢復(fù)到狀態(tài)IE=1,當指令#10被執(zhí)行時,該標于步驟4保存在LIFO堆棧中。(如果在步驟4保存附加信息,這時放棄這樣的信息。)
·在步驟9,執(zhí)行指令#15,即返回指令。依照本指令,處理器返回到先前執(zhí)行的子進程,即生產(chǎn)信息子進程。
·在步驟10,處理器執(zhí)行將在生產(chǎn)信息子進程中執(zhí)行的下一條指令,即指令#3跳至生產(chǎn)信息。這只是重啟生產(chǎn)信息子進程。
在步驟11和12,處理器產(chǎn)生信息,保存在存儲器20中并執(zhí)行生產(chǎn)信息子進程的指令#1和#2,具體是·在步驟11,通過將變量A1再次初始化為值1,執(zhí)行指令#1。
·在步驟12,通過調(diào)用更新計數(shù)子進程執(zhí)行指令#2。
在步驟13至17,處理器承擔(dān)起執(zhí)行被調(diào)用的更新計數(shù)子進程的任務(wù),其中接收到一個中斷請求。具體是·在步驟13,首先通過將中斷使能標志(IE=1)保存在LIFO堆棧中執(zhí)行指令#10(推入和禁止中斷)。然后重置中斷使能標志(IE=0),從而禁止下一個中斷,直到寄存器144中的計數(shù)更新完成。
·在步驟14,通過將變量A0值設(shè)為等于計數(shù)當前值,即A0=1,執(zhí)行指令#11。
·在步驟15,通過計數(shù)總和A0+A1=2并將寄存器140中的總和保存作為A0的新值,執(zhí)行指令#12。在該步驟,也收到一個中斷請求,它將忽略該請求直到根據(jù)指令#14再次使能中斷。
·在步驟16,通過將寄存器144中的A0新值保存作為計數(shù)新值(計數(shù)=2),執(zhí)行指令#13。
·在步驟17,通過恢復(fù)中斷使能標志為狀態(tài)IE=1,執(zhí)行指令#14,當指令#10最后執(zhí)行時,該標于步驟13保存在LIFO堆棧中。
在步驟18,處理器響應(yīng)在步驟15中接收到的中斷請求,它是一個要求消費信息的請求。這是通過切換至消費信息子進程來響應(yīng)的。
在步驟19,處理器重置中斷請求標(IR=0),然后接著執(zhí)行消費信息子進程。具體是·在步驟19,通過設(shè)置變量A0值為計數(shù)當前值,即A0=2,執(zhí)行指令#4。
·在步驟20,通過從寄存器140中讀取A0當前值(現(xiàn)在等于計數(shù)),執(zhí)行指令#5。
·在步驟21,通過對A0值與0的比較執(zhí)行指令#6。如果A0=0,表示存儲器20中沒有信息在等待消費,處理器跳到消費信息子進程的開始部。然而,如果A0=2,表示存儲器中有2塊信息正在等待被消費。這樣,處理器消費已保存的最后一塊信息,然后該消費信息子進程中的剩下指令響應(yīng)地對計數(shù)成1。
·在步驟22,通過設(shè)置變量A1值(在寄存器141中)為-1,執(zhí)行指令#7。
·在步驟23,通過調(diào)用更新計數(shù)子進程執(zhí)行指令#8。
在步驟24至28,處理器負責(zé)執(zhí)行被調(diào)用的更新計數(shù)子進程,其中收到一個中斷請求。具體是·在步驟24,首先通過將中斷使能標志(IE=1)保存在LIFO堆棧中執(zhí)行指令#10(推入和禁止中斷)。然后重置中斷使能標志(IE=O),從而禁止下一個中斷,直到寄存器144中的計數(shù)更新完成。
·在步驟25,通過將變量A0值設(shè)為等于計數(shù)當前值,即A0=1,執(zhí)行指令#11。在該步,也收到一個中斷請求。
·在步驟26,通過計數(shù)總和A0+A1=2并將寄存器140中的總和保存作為A0的新值,執(zhí)行指令#12。
·在步驟27,通過將寄存器144中的A0新值保存作為計數(shù)新值(計數(shù)=1),執(zhí)行指令#13。
·在步驟28,通過恢復(fù)中斷使能標志為狀態(tài)IE=1,執(zhí)行指令#14,當指令#10最后執(zhí)行時,該標于步驟13保存在LIFO堆棧中。
在步驟29,處理器響應(yīng)在步驟25中接收到的中斷請求,它是一個切換至先前運行的生產(chǎn)信息子進程的請求。
在步驟30。當前面的生產(chǎn)信息子進程被中斷時(即在步驟17,這里A0=2和A1=1),處理器重置中斷請求標志(IR=0)并從存儲器中獲取存在的A0和A1值。然后執(zhí)行返回指令(指令#15)來啟動返回至先前的生產(chǎn)信息子進程。然后處理器執(zhí)行生產(chǎn)信息子進程中下一個連續(xù)指令,即指令#3。
在步驟31,通過跳至生產(chǎn)信息子進程的開始部,處理器執(zhí)行指令#3。
在步驟32和33,處理器產(chǎn)生信息,將它保存在存儲器20中并執(zhí)行生產(chǎn)信息子進程中的指令#1和#2。具體是·在步驟32,通過將變量A1重新初始化為值1,執(zhí)行指令#1。
·在步驟33,通過調(diào)用更新計數(shù)子進程執(zhí)行指令#2。
在步驟34至38,處理器再次負責(zé)執(zhí)行被調(diào)用的更新計數(shù)子進程,其中收到另一個中斷請求。具體是·在步驟34,首先通過將中斷使能標志(IE=1)保存在LIFO堆棧中執(zhí)行指令#10(推入和禁止中斷)。然后重置中斷使能標志(IE=0),從而禁止下一個中斷,直到寄存器144中的計數(shù)更新完成。
·在步驟35,通過將變量A0值設(shè)為等于計數(shù)當前值,即AO=1,執(zhí)行指令#11。
·在步驟36,通過計數(shù)總和A0+A1=2并將寄存器140中的總和保存作為A0的新值,執(zhí)行指令#12。
·在步驟37,通過將寄存器144中的A0新值保存作為計數(shù)新值(計數(shù)=2),執(zhí)行指令#13。在該步,也收到一個中斷請求,它將忽略該請求直到依照指令#14再次使能中斷。
·在步驟38,通過恢復(fù)中斷使能標志為狀態(tài)IE=1執(zhí)行指令#14,當指令#10最后執(zhí)行時,該標于步驟34保存在LIFO堆棧中。
在步驟39,處理器響應(yīng)在步驟37中接收到的中斷請求,它是一個切換至先前運行的消費信息子進程的請求。
在步驟40。當前面的消費信息子進程被中斷時(即在步驟28,這里A0=1和A1=-1),處理器重置中斷請求標(IR=0)并從存儲器中獲取存在的A0和A1值。然后執(zhí)行返回指令(指令#15)來啟動返回至先前的消費信息子進程。然后處理器執(zhí)行消費信息子進程中下一個連續(xù)指令(即在指令#8之后,在步驟23中執(zhí)行)。
在步驟41,通過跳至該子進程的開始部,處理器執(zhí)行消費信息子進程中的下一個連續(xù)指令,即指令#9。
接著在步驟41,處理器將繼續(xù)以相似的方式操作。提供圖2中的示范性步驟來說明依照本發(fā)明的一個實施例。服務(wù)中斷如何以一種簡單方式,即用很少幾條指令,通過保存最少信息并不需要特殊硬件而有效實現(xiàn)。
注意到上面描述的和圖2中顯示的順序是一個示范性實施例,提供它只為了幫助理解本發(fā)明。不意味著限制本發(fā)明的范疇。例如,只使用單位碼作為中斷請求狀態(tài)(IR)和中斷使能狀態(tài)(IE)。然而在現(xiàn)有技術(shù)中眾所周知,一些處理器能同時響應(yīng)多個中斷請求并能跟蹤多個中斷能狀態(tài)。本發(fā)明同樣能,例如,通過給IR和IE分別使用多位碼,服務(wù)這樣多個請求并跟蹤這樣多個狀態(tài)。而且,本發(fā)明不限于使用本例中公開的三個示范性子進程(即,生產(chǎn)信息,消費信息,更新計數(shù)),但可應(yīng)用于各種各樣的進程和子進程,為了響應(yīng)中斷請求它們可以變成嵌套使用。
權(quán)利要求
1.一種在處理器的操作中服務(wù)中斷的方法,該處理器能夠響應(yīng)請求的中斷執(zhí)行嵌套子進程,該方法包含a.提供一個表示當前中斷使能狀態(tài)的指示器(IE);b.保存包含所述指示器的狀態(tài)數(shù)據(jù);c.將當前中斷使能狀態(tài)置為禁止狀態(tài);d.最少開始執(zhí)行一個由被請求的中斷所指定的動作;e.在接收另一個中斷請求之前i.從保存的狀態(tài)數(shù)據(jù)讀取指示器(IE);Ii.將當前中斷使能狀態(tài)置為所述指示器所表示的狀態(tài)。
2.權(quán)利要求1中的方法,其中狀態(tài)數(shù)據(jù)只包含所述指示器。
3.權(quán)利要求1中的方法,其中通過將狀態(tài)數(shù)據(jù)推入到一個LIFO堆棧中保存狀態(tài)數(shù)據(jù),并通過從所述堆棧彈出所述數(shù)據(jù)讀取指示器。
4.權(quán)利要求1中的方法,其中處理器能夠同時接收多個中斷請求,所述指示器表示每個所述中斷的當前中斷使能狀態(tài)。
5.權(quán)利要求1中的方法,用于產(chǎn)生和消費保存的信息,所述方法在接收另一個中斷請求之前,包括更新等待被消費的信息的計數(shù)。
6.權(quán)利要求1中的方法,所述將當前中斷狀態(tài)置為狀態(tài)指示器的狀態(tài)包含放棄剩下的狀態(tài)數(shù)據(jù)。
7.一種能夠響應(yīng)請求的中斷執(zhí)行嵌套子進程的處理器,所述處理器能被編程來服務(wù)所述中斷,通過a.提供一個表示當前中斷使能狀態(tài)的指示器(IE);b.保存包含所述指示器的狀態(tài)數(shù)據(jù);c.將當前中斷使能狀態(tài)置為禁止狀態(tài);d.最少開始執(zhí)行一個由被請求的中斷所指定的動作;e.在接收另一個中斷請求之前?。畯谋4娴臓顟B(tài)數(shù)據(jù)讀取指示器(IE);ⅱ.將當前中斷能狀態(tài)置為所述指示器所表示的狀態(tài)。
8.權(quán)利要求7中的處理器,其中狀態(tài)數(shù)據(jù)只包含所述指示器。
9.權(quán)利要求7中的處理器,其中通過將狀態(tài)數(shù)據(jù)推入到一個LIFO堆棧中保存狀態(tài)數(shù)據(jù),并通過從所述堆棧彈出所述數(shù)據(jù)讀取指示器。
10.權(quán)利要求7中的處理器,其中處理器能夠同時接收多個中斷請求,所述指示器表示每個所述中斷的當前中斷使能狀態(tài)。
11.權(quán)利要求7中的處理器,在接收另一個中斷請求之前,被編程來讀取該指示器(IE)。
12.權(quán)利要求11中的處理器,其中狀態(tài)數(shù)據(jù)只包含所述指示器。
13.權(quán)利要求7中的處理器,所述將當前中斷使能狀態(tài)置為所述指示器作表示的狀態(tài)包含放棄剩下的狀態(tài)數(shù)據(jù)。
全文摘要
提供了一種方法,它能避免當處理器嵌套子進程而且這些子進程使中斷能和不能時出現(xiàn)的毀壞信息。
文檔編號G06F13/20GK1320243SQ00801734
公開日2001年10月31日 申請日期2000年7月31日 優(yōu)先權(quán)日1999年8月19日
發(fā)明者W·L·薩維勒, K·羅斯 申請人:皇家菲利浦電子有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
博野县| 怀来县| 赤水市| 江孜县| 南通市| 乾安县| 左权县| 泉州市| 托克托县| 钟山县| 达州市| 华容县| 耒阳市| 扎囊县| 盐源县| 贡嘎县| 志丹县| 阳信县| 普兰店市| 阿尔山市| 融水| 万州区| 江川县| 商河县| 治多县| 化德县| 永川市| 临夏市| 天气| 黄平县| 海兴县| 秦安县| 布尔津县| 鹤山市| 军事| 商洛市| 嘉兴市| 龙海市| 门源| 文成县| 五家渠市|