專利名稱:防止多處理器計算機(jī)中各處理器間進(jìn)程發(fā)生沖突的方法
按,在現(xiàn)有電腦作業(yè)系統(tǒng)(Operating System)的技術(shù)中,DOS作業(yè)系統(tǒng)是屬一種單進(jìn)程且獨(dú)占資源的單工系統(tǒng),該系統(tǒng)在其運(yùn)行上只能有一個進(jìn)程(process),故在單一處理器的環(huán)境下,DOS作業(yè)系統(tǒng)中不可能有一個以上的進(jìn)程同時執(zhí)行。若有多個進(jìn)程提交該系統(tǒng)進(jìn)行處理,即需依靠排班隊列(Scheduling Queues)的方式,依序執(zhí)行各進(jìn)程。
傳統(tǒng)上,在對一臺具有多處理器計算機(jī)中的處理器數(shù)目進(jìn)行測量時,一般是令每個處理器均執(zhí)行一進(jìn)程(process),同時分別在存儲器中寫入一個標(biāo)記,以表示該處理器的存在。但在此種傳統(tǒng)量測過程中,如何能令該等處理器均能正確地執(zhí)行每個進(jìn)程,令其在分別執(zhí)行所屬進(jìn)程時,不致發(fā)生沖突,且在所有進(jìn)程被執(zhí)行完畢后,仍能保證DOS作業(yè)系統(tǒng)的正常運(yùn)行,則是目前在DOS作業(yè)系統(tǒng)下,對多處理器計算機(jī)中的處理器數(shù)目進(jìn)行測量時,尚無法有效解決的問題。
有鑒于傳統(tǒng)上對多處理器計算機(jī)中多處理器數(shù)目進(jìn)行量測時,易發(fā)生多處理器進(jìn)程沖突的諸多缺點,發(fā)明人乃進(jìn)一步研究改良,研發(fā)出本發(fā)明,本發(fā)明主要是藉由一整數(shù)變量(semaphore),以其作為鎖定標(biāo)志,標(biāo)識出目前是否有處理器正在占用系統(tǒng)資源,若無處理器占用系統(tǒng)資源,即可將該鎖定標(biāo)志置入后,再令一處理器執(zhí)行其中斷服務(wù)例程;在執(zhí)行完畢后,再釋放該鎖定標(biāo)志,使其他處理器能夠依序使用系統(tǒng)資源,執(zhí)行其中斷服務(wù)例程。
本發(fā)明的主要目的,是透過設(shè)置一整數(shù)變量,作為鎖定標(biāo)志,以保證一電腦中的多個處理器,可依序執(zhí)行其所屬進(jìn)程,令各該進(jìn)程間不致發(fā)生沖突,當(dāng)一處理器進(jìn)程結(jié)束后,即釋放該鎖定標(biāo)志,并回復(fù)到中斷前的狀態(tài),使其他處理器能夠依序使用系統(tǒng)資源,執(zhí)行其中斷服務(wù)例程,并確保多處理器模塊執(zhí)行完畢后,DOS作業(yè)系統(tǒng)仍能維持正常運(yùn)行。
本發(fā)明的另一目的,是將該整數(shù)變量標(biāo)志設(shè)置于各該多處理器所屬的進(jìn)程控制表的代碼段內(nèi),因各該代碼段是不隨進(jìn)程的執(zhí)行而改變,故各該處理器在執(zhí)行該中斷服務(wù)例程前,可將其數(shù)據(jù)段和堆棧段內(nèi)的數(shù)據(jù)先予以保存,并將保存的地址儲存在該代碼段內(nèi),以確保各該處理器在完成中斷處理后,能正確地查找到該等數(shù)據(jù),并回復(fù)到中斷前的狀態(tài)。
為了實現(xiàn)上述目的,本發(fā)明提供一種防止多處理器計算機(jī)中各處理器間進(jìn)程發(fā)生沖突的方法,該方法是以一整數(shù)變量作為鎖定標(biāo)志,設(shè)置于一多處理器計算機(jī)中各處理器所屬的進(jìn)程控制表的代碼段內(nèi),以標(biāo)識出目前是否已有處理器正在占用系統(tǒng)資源,若無處理器占用系統(tǒng)資源,即可在將該鎖定標(biāo)志置入后,令一處理器執(zhí)行其中斷處理程序,在執(zhí)行完畢后,再釋放該鎖定標(biāo)志,使其他處理器能夠使用系統(tǒng)資源,依序于接收到中斷信號時,正常執(zhí)行其中斷處理程序。
圖1所示乃本發(fā)明的整體流程示意圖;圖2所示乃本發(fā)明中主處理器的處理流程示意圖;圖3所示乃本發(fā)明中各輔處理器的處理流程示意圖;圖4所示乃本發(fā)明中各輔處理器對其中斷服務(wù)例程的入口進(jìn)行設(shè)定的處理流程示意圖。
在符合Intel架構(gòu)的多處理器主機(jī)板上,一般均安裝有一個含有局部高級可編程中斷控制器(local APIC)的主處理器,該主處理器主要是于該多處理器系統(tǒng)間負(fù)責(zé)傳遞通信訊息及命令,當(dāng)該主處理器接收到由其他處理器透過系統(tǒng)總線所發(fā)出的中斷信號時,會將該中斷信號傳遞至所指定的輔處理器,使各該輔處理器對中斷進(jìn)行處理。當(dāng)該種多處理器主機(jī)板上的DOS作業(yè)系統(tǒng)接收到一特殊的中斷啟始(start-up)信號時,其上的該主處理器將會觸發(fā)該特殊的中斷,令各該輔處理器能依序執(zhí)行一中斷服務(wù)例程(serviceroutine),使該服務(wù)例程去檢查該中斷信號,并呼叫特定的中斷處理程序,對該中斷進(jìn)行處理,且將其目前的狀態(tài)儲存至一存儲器中。由于在DOS作業(yè)系統(tǒng)下,同一時刻僅允許一處理器執(zhí)行該服務(wù)例程,本發(fā)明即藉由設(shè)置一整數(shù)變量,作為一鎖定標(biāo)志的方法,利用該鎖定標(biāo)志標(biāo)識出目前是否已有處理器正在占用系統(tǒng)資源,執(zhí)行該中斷處理程序,若無處理器占用系統(tǒng)資源,即可將該鎖定標(biāo)志置入后,令一處理器執(zhí)行該中斷服務(wù)例程;在執(zhí)行完畢后,再釋放該鎖定標(biāo)志,使其他處理器能夠依序使用系統(tǒng)資源,執(zhí)行其中斷服務(wù)例程。
在本發(fā)明中,由于該多處理器主機(jī)板上的各處理器,均有其各別應(yīng)執(zhí)行的進(jìn)程(process),各該進(jìn)程于存儲器中,均對應(yīng)者一進(jìn)程控制表(processcontrol block),各該進(jìn)程控制表的數(shù)據(jù)段及堆棧(Stack)段互不相同,故若該整數(shù)變量標(biāo)志是被設(shè)計置放于該數(shù)據(jù)段內(nèi),由于該數(shù)據(jù)段內(nèi)的數(shù)據(jù),將因進(jìn)程的執(zhí)行而改變,令其它處理器找不到該標(biāo)志,而導(dǎo)致系統(tǒng)崩潰。因此,本發(fā)明是將該整數(shù)變量標(biāo)志設(shè)計置放于各該進(jìn)程控制表的代碼段內(nèi),該代碼段是不隨進(jìn)程的執(zhí)行而改變。如此,各該處理器在執(zhí)行該中斷服務(wù)例程前,可將該數(shù)據(jù)段和堆棧段內(nèi)的數(shù)據(jù)先予以保存,并將保存的地址儲存在該代碼段內(nèi),以確保各該處理器在完成中斷處理后,能正確地查找到該等數(shù)據(jù),并回復(fù)到中斷前的狀態(tài)。
本發(fā)明中,當(dāng)該多處理器主機(jī)板被開機(jī),并完成DOS作業(yè)系統(tǒng)的啟始(boot-up)程序后,參閱第1圖所示,系統(tǒng)是先對主處理器完成初始化狀態(tài)設(shè)定(101);并由該主處理器設(shè)定各該輔處理器進(jìn)行中斷的入口地址(102);然后,再對各該輔處理器依序發(fā)出中斷信號(103);各該輔處理器在接收到一中斷信號時,將調(diào)用存儲器中(位于40∶67)的一中斷向量(interrupt vector),以依據(jù)該中斷向量內(nèi)所提供的中斷服務(wù)例程(Service Routine)的地址,執(zhí)行相應(yīng)的中斷程序(104),故,各輔處理器所執(zhí)行的對應(yīng)中斷服務(wù)例程的地址,必須置放于位于存儲器中40∶67地址的該中斷向量(interrupt vector)內(nèi),使各該輔處理器均能透過該中斷向量,找到對應(yīng)的中斷服務(wù)例程,并予執(zhí)行,以完成對該中斷的處理;各該輔處理器是利用本發(fā)明所設(shè)計的鎖定標(biāo)志,標(biāo)識出目前已占用系統(tǒng)資源,處于正在執(zhí)行該中斷處理程序的狀態(tài),在執(zhí)行完畢后,再釋放該鎖定標(biāo)志(105),并等待下一次的中斷請求(106),如此,即可令其他輔處理器依序使用系統(tǒng)資源,執(zhí)行該中斷服務(wù)例程。
在本發(fā)明中,復(fù)參閱第1圖所示,在各該輔處理器接收到一中斷信號時,需將其目前的狀態(tài)儲存至一暫存存儲器中(107),使在各該處理器完成對該中斷的處理,并釋放該鎖定標(biāo)志后,該主處理器可根據(jù)保存于該暫存存儲器中的數(shù)據(jù)(108),正確地查找到各該輔處理器中斷前的狀態(tài)數(shù)據(jù),以確保各該輔處理器在完成中斷處理后,仍能回復(fù)到中斷前的狀態(tài)(109)。
在本發(fā)明的前述處理程序中,參見第2圖所示,該主處理器是依下列步驟,進(jìn)行處理首先,判斷該主處理器當(dāng)前的模式,是否屬實模式(real mode)(201),若當(dāng)前模式為保護(hù)模式(protection mode),結(jié)束處理;否則,判斷該主處理器的識別號(ID),是否為Pentium以上的處理器(202),若否,則結(jié)束處理;若為Pentium以上的處理器,則將當(dāng)前的操作模式切換到保護(hù)模式(203),并搜索浮點指針(float pointer),找到本地的高級可編程中斷控制器(local APIC)的基地址(base address)(204);然后,再于該地址處分別設(shè)置任務(wù)優(yōu)先級寄存器(register)、偽向量寄存器、目的寄存器及目的格式寄存器(205);并為每個待處理的輔處理器設(shè)定一對應(yīng)的變量,并將該變量值設(shè)為0,同時保存其數(shù)據(jù)段(206);再為每個處理器申請數(shù)據(jù)使用空間及4K頁空間,其中的4K頁空間是支持每個處理器運(yùn)行時所需的存儲器空間(207);然后再判斷是否申請成功(208)?若否,結(jié)束處理,否則,設(shè)定中斷服務(wù)例程的入口地址模塊(209),發(fā)出中斷啟始(start up)信號,令各該輔處理器開始執(zhí)行中斷服務(wù)例程(211);在中斷服務(wù)例程被執(zhí)行完畢,再恢復(fù)中斷前的系統(tǒng)環(huán)境,并釋放存儲器空間,且切換回實模式(212),等待下一次被調(diào)用。
在本發(fā)明中,參見第3圖所示,各該輔處理器在利用本發(fā)明所設(shè)計的鎖定標(biāo)志,標(biāo)識出目前占用系統(tǒng)資源的狀態(tài)時,主要是依下列步驟,進(jìn)行處理首先,偵測鎖定標(biāo)志值(301),并判斷該標(biāo)志是否已經(jīng)被鎖定(302),若已被鎖定,則返回(301),繼續(xù)偵測鎖定標(biāo)志值;否則,對該標(biāo)志值進(jìn)行鎖定(303);將數(shù)據(jù)段及堆棧段改為申請的段空間(304)后,再向暫存存儲器中寫入對應(yīng)段空間的存在標(biāo)志(305),使該主處理器可自該暫存存儲器中,正確地讀取各該輔處理器中斷前的狀態(tài)數(shù)據(jù);在完成執(zhí)行該中斷處理程序,再釋放該標(biāo)志值的鎖定(306),且將該標(biāo)志設(shè)定為空閑狀態(tài)(307),令其他輔處理器能夠使用系統(tǒng)資源,依序執(zhí)行該中斷服務(wù)例程。
在本發(fā)明中,參見第4圖所示,該中斷服務(wù)例程的入口地址模塊主要是依下列步驟,進(jìn)行設(shè)定首先,判斷0X70的入口是否為可寫狀態(tài)(401)?若否,則結(jié)束處理;否則,向0X70的入口寫入0X7F值(402);判斷0X71的入口是否為可寫狀態(tài)(403)?若是,向0X70的入口寫入0X0A值(402),并將中斷服務(wù)例程的地址寫入存儲器地址40∶67中(405)。
本發(fā)明在該代碼段中,是藉設(shè)定一整數(shù)變量(semaphore),以作為是否鎖定的標(biāo)志,使各該處理器在執(zhí)行中斷服務(wù)程序的過程中,可先循環(huán)檢測該整數(shù)變量的鎖定標(biāo)志是否被鎖定,若是,則令其處于等待狀態(tài),并繼續(xù)循環(huán)檢查該鎖定標(biāo)志,否則,鎖定該標(biāo)志,并執(zhí)行中斷服務(wù)程序,在中斷服務(wù)例程被執(zhí)行完畢,即釋放該鎖定標(biāo)志,以令其他處理器可依序執(zhí)行其中斷服務(wù)程序。
如此,在對一臺具有多處理器計算機(jī)中的處理器數(shù)目進(jìn)行測量時,各該處理器在依序接收到中斷信號時,均能正常執(zhí)行其中斷處理程序,并可有效防止各處理器間進(jìn)程發(fā)生沖突的情事,確保多處理器模塊執(zhí)行完畢后,DOS作業(yè)系統(tǒng)仍能維持正常運(yùn)行。
以上所述,僅是本發(fā)明的較佳實施例,惟,本發(fā)明所主張的權(quán)利范圍,并不局限于此,按凡熟悉該項技藝人士,依據(jù)本發(fā)明所揭露的技術(shù)內(nèi)容,可輕易思及的等效變化,均應(yīng)屬不脫離本發(fā)明的保護(hù)范疇。
權(quán)利要求
1.一種防止多處理器計算機(jī)中各處理器間進(jìn)程發(fā)生沖突的方法,該方法是以一整數(shù)變量作為鎖定標(biāo)志,設(shè)置于一多處理器計算機(jī)中各處理器所屬的進(jìn)程控制表的代碼段內(nèi),以標(biāo)識出目前是否已有處理器正在占用系統(tǒng)資源,若無處理器占用系統(tǒng)資源,即可在將該鎖定標(biāo)志置入后,令一處理器執(zhí)行其中斷處理程序,在執(zhí)行完畢后,再釋放該鎖定標(biāo)志,使其他處理器能夠使用系統(tǒng)資源,依序于接收到中斷信號時,正常執(zhí)行其中斷處理程序。
2.如權(quán)利要求1所述的一種防止多處理器計算機(jī)中各處理器間進(jìn)程發(fā)生沖突的方法,該方法是先對該等多處理器中一含有局部高級可編程中斷控制器的主處理器,進(jìn)行初始化狀態(tài)設(shè)定,并由該主處理器設(shè)定各該輔處理器進(jìn)行中斷的入口地址;然后,再對各該輔處理器依序發(fā)出中斷信號。
3.如權(quán)利要求2所述的一種防止多處理器計算機(jī)中各處理器間進(jìn)程發(fā)生沖突的方法,其中各該輔處理器在接收到一中斷信號時,將調(diào)用存儲器中的一中斷向量,以依據(jù)該中斷向量內(nèi)所提供的中斷服務(wù)例程的地址,執(zhí)行相應(yīng)的中斷程序,以完成對該中斷的處理。
4.如權(quán)利要求3所述的一種防止多處理器計算機(jī)中各處理器間進(jìn)程發(fā)生沖突的方法,其中各該輔處理器是利用該鎖定標(biāo)志,標(biāo)識出目前已占用系統(tǒng)資源,處于正在執(zhí)行該中斷處理程序的狀態(tài),在執(zhí)行完畢后,再釋放該鎖定標(biāo)志,并等待下一次的中斷請求。
5.如權(quán)利要求2所述的一種防止多處理器計算機(jī)中各處理器間進(jìn)程發(fā)生沖突的方法,其中在各該輔處理器接收到一中斷信號時,需將其目前的狀態(tài)儲存至一暫存存儲器中,使在各該處理器完成對該中斷的處理,并釋放該鎖定標(biāo)志后,該主處理器可根據(jù)保存于該暫存存儲器中的數(shù)據(jù),正確地查找到各該輔處理器中斷前的狀態(tài)數(shù)據(jù),以確保各該輔處理器在完成中斷處理后,仍能回復(fù)到中斷前的狀態(tài)。
6.如權(quán)利要求2所述的一種防止多處理器計算機(jī)中各處理器間進(jìn)程發(fā)生沖突的方法,其中當(dāng)該主處理器當(dāng)前的模式是屬實模式時,判斷該主處理器的識別號是否符合規(guī)定;若符合規(guī)定,即將當(dāng)前的操作模式切換到保護(hù)模式,并搜索浮點指針,找到本地的高級可編程中斷控制器的基地址;然后,再于該地址處分別設(shè)置任務(wù)優(yōu)先級寄存器、偽向量寄存器、目的寄存器及目的格式寄存器;并為每個待處理的輔處理器設(shè)定一對應(yīng)的變量,并將該變量值設(shè)為零,同時保存其數(shù)據(jù)段;再為每個處理器申請數(shù)據(jù)使用空間及運(yùn)行空間;然后再判斷是否申請成功?若是,則設(shè)定中斷服務(wù)例程的入口地址模塊,發(fā)出中斷啟始信號。
7.如權(quán)利要求6所述的一種防止多處理器計算機(jī)中各處理器間進(jìn)程發(fā)生沖突的方法,其中在中斷服務(wù)例程被執(zhí)行完畢后,再恢復(fù)中斷前的系統(tǒng)環(huán)境,并釋放存儲器空間,且切換回實模式,等待下一次被調(diào)用。
8.如權(quán)利要求2所述的一種防止多處理器計算機(jī)中各處理器間進(jìn)程發(fā)生沖突的方法,其中各該輔處理器在利用該鎖定標(biāo)志,標(biāo)識出目前占用系統(tǒng)資源的狀態(tài)時,主要是依下列步驟,進(jìn)行處理首先,偵測鎖定標(biāo)志值,并判斷該標(biāo)志是否已經(jīng)被鎖定,若已被鎖定,繼續(xù)偵測鎖定標(biāo)志值;否則,對該標(biāo)志值進(jìn)行鎖定;將數(shù)據(jù)段及堆棧段改為申請的段空間后,再向暫存存儲器中寫入對應(yīng)段空間的存在標(biāo)志,使該主處理器可自該暫存存儲器中,正確地讀取各該輔處理器中斷前的狀態(tài)數(shù)據(jù);在完成執(zhí)行該中斷處理程序,再釋放該標(biāo)志值的鎖定,且將該標(biāo)志設(shè)定為空閑狀態(tài),令其他輔處理器能夠使用系統(tǒng)資源,依序執(zhí)行該中斷服務(wù)例程。
全文摘要
本發(fā)明以整數(shù)變量作為鎖定標(biāo)志,設(shè)置于一多處理器計算機(jī)中各處理器所屬的進(jìn)程控制表的代碼段內(nèi),以標(biāo)識出目前是否已有處理器正在占用系統(tǒng)資源,若無,即可在將該鎖定標(biāo)志置入后,令一處理器執(zhí)行其中斷處理程序,在執(zhí)行完畢后,再釋放該鎖定標(biāo)志,使其他處理器能夠使用系統(tǒng)資源,依序于接收到中斷信號時,正常執(zhí)行其中斷處理程序,使在對一多處理器計算機(jī)中各處理器數(shù)目進(jìn)行量測時,可有效防止各處理器間進(jìn)程發(fā)生沖突。
文檔編號G06F9/48GK1367432SQ01101588
公開日2002年9月4日 申請日期2001年1月23日 優(yōu)先權(quán)日2001年1月23日
發(fā)明者陳玄同, 林光信 申請人:英業(yè)達(dá)股份有限公司