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