新四季網

硬體共享系統和方法

2023-05-03 06:30:46

專利名稱:硬體共享系統和方法
技術領域:
本文件大體上涉及電子計算機和數字數據處理系統中的輸入和輸出,且更確切地說,涉及用於在此類系統中防止訪問共享資源的構件或步驟。本文件揭示至少一種用於多線程多處理器共享異步硬體單元的系統。
背景技術:
在現代計算機系統中,在處理器上運行的軟體程序(SW)越來越普遍地使用多個執行線程。這些執行線程可在有多個線程在同一處理器上運行時顯示感知同時性,或者當計算機系統中存在多個處理器時顯示真實同時性。
此外,在現代計算機系統中越來越普遍地具有複雜的硬體資源(HW),例如直接存儲器訪問(DMA)通道;具有內部緩衝或內部DMA引擎的外圍設備;和媒體處理元件,其從專有存儲區域、內部緩衝器工作或者使用DMA。有些硬體資源還可具有多個通道,從而增加了可同時運行且還需要被管理的有效硬體資源的數目。(由於計算機系統可有效地將多通道裝置用作多個資源,因而在本文中,我們針對每個通道使用標籤「硬體資源」以免與「硬體裝置」混淆。)計算機系統中的硬體資源經常按照需要而成為異步的,以使得對其進行管理的處理器可針對所需任務來對其每一者進行編程,繼續執行其它操作,且稍後再返回並獲得早先編程的任務的結果。這形成了真實的並行性。
當一硬體資源由多個執行線程使用時,不論線程的同時性的性質如何,某機制必須可用,以確保每次只有一個執行線程使用所述硬體資源。確保硬體資源正確操作且確保執行線程獲得的結果是正確的,這一點是必要的。而這一點正是現有技術方法所欠缺的,因為它們建立在軟體鎖定(例如,軟體相互排斥鎖定,通稱為「互斥體」)的基礎上。
圖1a-b(背景技術)是在文體上展示現代計算機如何可能為非常複雜的系統的實例的方框圖。圖1a展示具有單個主處理器的較簡單的計算機系統,且圖1b展示具有多個主處理器的較複雜的計算機系統。在作業系統(OS)的控制下,每個處理器可潛在地運行多個軟體程序(此處未直接展示)。針對當前目的,我們並不特別關注高級別的軟體程序,而是關注於其中我們稱為「執行線程」(TOE)的基本部分。在關於計算技術的許多優秀文本中均涵蓋線程程序執行,所以我們此處只提出單個軟體程序可能具有單個線程或多個線程,且所有這些線程可能競爭使用整個計算機系統內的資源。確切地說,計算機系統中的執行線程可能需要異步地共享一個或一個以上硬體資源(HWR)。
現在參看圖1a,TOE#2代表執行線程的最簡單情況。其未在使用且其未在等待任何硬體資源。類似地,HWR#1代表簡單情況。任何執行線程均未在使用它且沒有線程在等待使用它。TOE#1和HWR#2代表稍微複雜的情況。TOE#1在使用HWR#2,且沒有其它執行線程在等待使用HWR#2。
事實很少像描述的這樣簡單。舉例來說,如果TOE#1在使用HWR#2且TOE#2也需要使用HWR#2會出現什麼情況呢?在常規的計算機系統中,作業系統通過軟體鎖定來管理對硬體資源的訪問。可能會發生像下面這樣的對話(1)TOE#1我需要使用HWR#2。
(2)OS(在檢查其鎖定並對其更新之後)好的,TOE#1,請用。
(3)TOE#2我需要使用HWR#2。
(4)OS(在檢查其鎖定之後)不行,TOE#2,請稍等。
(5)TOE#1我用完了HWR#2。
(6)OS(在更新其鎖定之後)好了,TOE#2,請用。
這個對話是簡縮的,且並未涵蓋所有可能的情況。舉例而言,如果步驟(4)從未發生(比如因為TOE#1崩潰或編程得較差),那麼會出現什麼情況?作業系統必須也處置這種情況。
現在參看圖1b,圖中描繪了若干較複雜的場景,這些場景在現代計算機系統中均越來越普遍。舉例來說,除了多個處理器之外,這些計算機系統可能還運行不同的作業系統(例如,處理器#1中的Windows(TM)作業系統和處理器#2中的Linux作業系統)。如圖1b中也顯示且現在所論述的,硬體資源本身可能具有也應被考慮在內的複雜特徵。
在圖1b中展示了與上述對話下的場景相似的場景。此處,TOE#2在使用HWR#3且TOE#3也想使用所述HWR#3。舉例而言,比如HWR#3是印表機且TOE#2用它來列印文本字符,而HWR#3想用它來列印圖像。
再次,常規方法是使用控制各個執行線程的作業系統通過軟體鎖定方案來管理對硬體資源的這種爭奪。通常,此類軟體鎖定實施為相互排斥目標(通稱為「互斥體」)。
互斥體是這樣一種程序目標其允許多個執行線程共享同一硬體資源,例如文件或印表機訪問,只不過不是同時使用。當一執行線程開始時,由作業系統建立和管理針對每個共享硬體資源的唯一命名的互斥體。於是,任何需要資源的執行線程均在其使用硬體資源的同時鎖定互斥體,從而防止來自其它執行線程的可能干擾。當不再需要硬體資源或當使用其的執行線程完成時解鎖互斥體。
接著參看圖1b,此處TOE#4代表可能發生嚴重問題的情況。如果用簡單的衝突解決機制來處置剛剛針對TOE#2和TOE#3描述的情形,那麼TOE#4可能以停止來等待TOE#3以等著輪到其使用HWR#3而結束。當今大多數的複雜作業系統具有避免這種場景的機制,雖然這些機制可能不像理想中那樣有效。但是並非所有計算機系統都使用此類作業系統,而且在許多應用中不存在使用此類複雜作業系統並導致其所帶來的內在負擔的其它理由。因此,如今仍然需要一種用於在計算機系統中訪問硬體資源的內在負擔較輕的機制。也就是說需要這樣一種機制其不會不當地要求比特定應用可能實際需要的作業系統能力更為複雜或負擔更重的作業系統能力。
此外,在一定程度上類似於所預見的,圖1b描繪了HWR#3和HWR#4作為多通道硬體裝置(多通道HW)的一部分。因此,如果HWR#4是一群在所有相關方面均與HWR#3同等的成組印表機中的另一印表機,那麼如果可簡單地將我們來自TOE#3的假設列印工作重新導向到HWR#4將比較理想。傳統上,計算機系統中的作業系統負責管理此類多通道硬體資源。
現在還參看圖2(背景技術),其是表示在採用傳統軟體鎖定的方案中TOE#2將如何獲得HWR#3的使用的偽碼列表。首先,用處理器#2上的OS#2(即,圖2中的鎖定#2)建立HWR#3的所有權。接著,用處理器#1上的OS#1(即,鎖定#1)建立所有權。TOE#2現在可使用HWR#3,直到它的使用結束或者所述作業系統中的一者介入為止。接著,釋放鎖定#1。並且接著,釋放鎖定#2。如接下來論述,圖2中用星號標出的區域是特別關注的區域。
圖3a-d(背景技術)是一系列時序圖,其分別展示針對執行線程訪問可用(閒置)硬體資源的兩種代表性情況,以及趨向於最差情況的假設情形和趨向於最佳情況的假設情形。圖3a-c逐步展示硬體資源的增高的速度對於傳統計算機系統中的性能的影響。此處要注意的重要一點是,不論各個硬體資源的佔空度如何,軟體鎖定管理的佔空度始終實質上保持固定(當然,如果硬體資源不是閒置的,那麼佔空度可增大)。因此,如圖3c所表示,最差情況是,一執行線程將其大部分處理器時間用於處理訪問硬體資源的額外開銷,而不是進行實際工作。
相反,圖3d表示最佳情況,其中一執行線程將其很小一部分處理器時間用於訪問硬體資源的額外開銷,且因此進行了更多的實際工作。圖3d中所描繪的情況顯然是合乎需要的,但在當前的常規方案中,其無法實現。內在地存在這樣一種限度可優化用於基於處理器的軟體鎖定的軟體,且在當今大多數作業系統中,已經在很大程度上達到這種限度。
舉例來說,取決於互斥體的實施方式,其用於鎖定和解鎖互斥體以維持針對給定硬體資源的原子訪問的「額外開銷」可在大約幾十微秒左右。當使用程序存儲空間受到保護的作業系統(例如Linux和Windows(TM))時,這一數字會激增。當互斥體需要多處理器可靠時,其也會激增。於是,這些越來越普遍的情況中的額外開銷的量級可能會變得顯著更高,從而趨向於抵消掉使用硬體加速器的性能優點以及使得硬體資源異步的優點。此外,多處理器可靠鎖定通常實施為旋轉鎖定,且所有這些可能會導致多個處理器之間出現優先級顛倒。
因此,如今仍然特別需要一種用於在計算機系統中訪問硬體資源的更有效的機制。

發明內容
因此,試圖提供一種用於在多線程計算機系統中有效共享異步硬體單元的系統。
簡而言之,本發明的一個優選實施例是一種用於在能夠運行至少一個具有多個線程的軟體程序的計算機系統中共享硬體資源的系統。所述計算機系統內的數據結構系統包含鎖定指示器(lock_indicator)。所提供的邏輯接收由所述線程中被界定為請求線程的一個線程使用硬體資源的請求。所提供的鎖定邏輯基於所述鎖定指示器確定所述硬體資源是否可供所述請求線程使用。所提供的響應於鎖定邏輯的邏輯接著控制所提供的邏輯以設置所述鎖定指示器,以改為指示所述硬體資源是不可用的,並控制所提供的邏輯用運行指示器(go_indicator)發信號通知可繼續針對所述請求的所述硬體資源的使用。設置鎖定指示器的邏輯特別在硬體資源的控制下操作。
所屬領域的技術人員通過閱讀在本文中描述且在附式中說明的目前已知的執行本發明的最佳模式和優選實施例的工業適應性的描述將容易了解這些和其它要素。


結合圖式的附圖閱讀以下詳細描述,將容易了解本發明的目的和優點,在附圖中圖1a-b(背景技術)是在文體上展示現代計算機系統的潛在複雜性的方框圖,其中圖1a展示具有單個主處理器的較簡單的計算機系統,且圖1b展示具有多個主處理器的較複雜的計算機系統。
圖2(背景技術)是表示在採用常規軟體鎖定的方案中執行線程將如何獲得對硬體資源的使用的偽碼列表。
圖3a-d(背景技術)是一系列時序圖,其分別展示針對執行線程訪問閒置硬體資源的兩種代表性情況(趨向於最差情況的假設情形以及趨向於最佳情況)的假設情形。
圖4是描繪根據本發明的硬體鎖定系統如何與現代計算機系統相關的示意方框圖。
圖5是描繪圖4的發明性硬體鎖定系統的示範性實施例中的主要數據結構的示意方框圖。
圖6a-g是描繪根據本發明的硬體鎖定系統用於編程硬體加速器的程序的一系列流程圖,其中圖6a展示總體流程圖,圖6b-d展示硬體所執行的「原子」步驟的細節,且圖6e-g展示軟體所執行的步驟的細節。
在附圖各圖中,使用相同的參考標號表示相同或相似的元件或步驟。
具體實施例方式
優選實施例是用於在多線程且可能具有多處理器的計算機系統中共享異步硬體資源的系統。如本文在各種圖式中且尤其在圖4的視圖中說明,本發明的優選實施例由籠統的參考字符10描繪。
簡單地說,本發明已注意到現有技術方法中的不足之處是由於使用這些方法的一或若干作業系統僅僅鬆散地連接到實際硬體資源。相反,這使得發明者認識到獲得對硬體資源的較緊密控制且因此對其更佳使用的方式在於使其積極地參與管理控制其使用的鎖定。發明者將此新方法稱為「硬體鎖定」,儘管所涉及的工作的若干部分仍由所述一或若干作業系統處置。
再次簡要參看圖1a-b且現還參看圖4中的示意性方框圖,可理解本發明硬體鎖定系統10是如何與現代計算機系統12有關的。一般來說且尤其為了以下揭示內容起見,可將計算機系統12視為具有軟體方面(SW方面14)和硬體方面(HW方面16)。SW方面14包含一作業系統(OS 18)或若干作業系統(如果採用多個的話),且其包含執行線程(線程20)。雖然在一般計算情形中稍微有點難用,但此處符合將變得顯而易見的原因,處理器(CPU 22)或若干處理器(如果使用多個的話)包含在SW方面14中。相對,HW方面16包含SW方面14所使用的硬體資源24,且此可視情況包含多通道硬體裝置26,所述多通道硬體裝置26又包含一個以上有效硬體資源24。
圖5是描繪本發明硬體鎖定系統10的示範性實施例中的主數據結構400的示意性方框圖。這些數據結構400包含控制位412、控制寄存器414和等待列表416。
針對每個硬體資源24而維持的控制位412包含Lock_bit 418、Go_bit 420、Ready_bit422、PendWriter_bit 424和PendReader_bit 426。所述Lock_bit 418用以發信號通知硬體資源24被鎖定。所述Go_bit 420用以發信號通知應開始使用硬體資源24。所述Ready_bit422用以發信號通知硬體資源24已完成向其所請求的事項。並且,所述PendWriter_bit 424和所述PendReader_bit 426分別用以發信號通知存在等待對硬體資源24進行寫入或讀取操作的待決等待者。
如果計算機系統12具有多個處理器(CPU 22),那麼控制位412進一步包含針對每個CPU 22的ProcEnable_bit 428,且總體地而並非針對個別硬體資源24來維持這些ProcEnable_bit 428。
所述控制寄存器414包含針對每個CPU 22的ThreadID_reg 430,以及第一和第二臨時程序計數器寄存器(PC_temp1_reg 432和PC_temp2_reg 434)及第一和第二異常地址寄存器(Ex_addr1_reg 436和Ex_addr2_reg 438)。所述ThreadID_reg 430用於存儲當前執行線程20的唯一識別符。所述PC_temp1_reg 432和PC_temp2_reg 434用於臨時保持程序計數器的當前內容。並且,所述Ex_addr1_reg 436和Ex_addr2_reg 438用於保持異常例行程序的地址,所述例行程式處置寫入或讀取操作的待決等待者的添加。與數據結構400中的大部分元件(其可動態改變)不同的是,Ex_addr1_reg 436和Ex_addr2_reg 438可在初始化時加載且隨後不發生變化。
如果計算機系統12具有多通道硬體裝置26,那麼控制寄存器414進一步包含針對每個通道(有效硬體資源24)的ReqID_reg 440。
針對每個硬體資源24維持的等待列表416包含寫入等待者列表(WriteWaiters_lst)444和讀取等待者列表(ReadWaiters_lst)446。這些分別保持等待在給定時間使用硬體資源24的線程20的列表(如果有的話)。
圖6a-g是描繪本發明硬體鎖定系統10用於編程硬體加速器的實例性程序500的一系列流程圖。圖6a展示整體流程圖,圖6b-d展示圖6a中由HW方面16執行的「原子」步驟的細節,且圖6e-g展示圖6a中由SW方面14執行的步驟的細節。
總地來說且在此假設硬體加速器實例的上下文中,圖6a-g展示特別值得考慮的五種情況情況1當硬體資源24可用時,取得鎖定;
情況2當硬體資源24由另一線程20「擁有」時,取得鎖定;情況3在請求完成之後,獲得關於硬體資源24的請求完成的信息;情況4在請求完成之前,獲得關於硬體資源24的請求完成的信息;和情況5通知等待者硬體資源24已完成請求。
情況1在圖6a中,程序500的步驟502到步驟512包括情況1。在步驟502中,進入程序500,且在步驟504中,接收來自線程20的尋求使用硬體資源24的請求。
在步驟506處,確定硬體資源24是否可用(即,Lock_bit 418當前是否設置為「0」)。此處硬體資源24是可用的(替代情況為情況2,下面將進行描述)。因此,在步驟508中,本線程20將「1」寫入到Lock_bit 418。注意,當存在多通道硬體裝置26時,硬體鎖定系統10可允許將「1」寫入到一系列Lock_bit 418(或等效機制),直到所有通道(硬體資源24)均在使用中為止。
本線程20現具有硬體資源24的「所有權」,且在步驟510中,其繼續編程通用寄存器等,無論向硬體資源24請求什麼都將使用所述通用寄存器。此後,在步驟512中,線程20設置Go_bit 420,發信號通知可立即開始使用硬體資源24(注意,Go_bit 420此處僅僅是觸發器;其不像其它位那樣用作「1」和「0」的雙態觸發)。
線程20現取得硬體資源24,且完成情況1。
情況2在圖6a中,步驟502到步驟506和步驟514到步驟516包括情況2。步驟502-506大致如同剛描述的那樣進行,不同之處只是此處硬體資源24是不可用的(即,Lock_bit 418此處當前設置為「1」)。因此,在步驟514中,HW方面16準備將等待者添加到寫入等待者列表(WriteWaiters_lst 444)。HW方面16相對於計算機系統12的SW方面14「以原子方式」處置步驟514,從而避免傳統軟體鎖定機制中所必需的負擔較重且易出錯的例行程序。此後,在步驟516中,SW方面14「等待」硬體資源24再次變成可用的。程序500接著循環回到步驟504,在此可開始鎖定特定硬體資源24的另一嘗試。
圖6b詳細展示步驟514。在步驟518中,HW方面16將程序計數器存儲在PC_ternp1_reg 432中。在步驟520中,HW方面16將PendWriter_bit 424設置為「1」。在步驟522中,HW方面16禁用中斷,從而防止上下文切換和保留一致性的可能性。如果計算機系統12具有多個處理器(CPU 22),那麼在步驟524中,HW方面16通過設置各個ProcEnable_bit 428以禁用其它處理器而使其停止,從而確保寫入等待者列表444中的項目保持一致。並且,在步驟526中,HW方面16將程序計數器設置為jumpToAddWriteWaiters中的地址(即,設置為Ex_addr1_reg 436中所存儲的內容)。
既然HW方面16已經「以原子方式」處理剛描述的關鍵準備工作,那麼SW方面14可自由地安全地繼續進行步驟516。
圖6e針對本發明硬體鎖定系統10的此實施例詳細展示步驟516。此處,與線程20相關聯的信號量用作等待機制,且SW方面14維持等待線程的優先級排序列表。[當然,可在替代實施例中使用FIFO或另一排序排列。]在步驟528中,SW方面14獲得當前線程20的ThreadID_reg 430和其優先級。在步驟530中,SW方面14找出哪個寫入等待信號量與此特定線程20相關聯。在步驟532中,在此實例中基於線程優先級,SW方面14將此寫入等待信號量插入到寫入等待者列表444中。在步驟533中,SW方面14保存PC_temp1_reg 432的備份(出於下文論述的原因)。在步驟534中,SW方面14啟用中斷,且如果存在多個處理器(CPU 22),那麼其不停止其它處理器(設置其各自的ProcEnable_bit 428以啟用它們)。在步驟536中,SW方面14使當前線程20在寫入等待信號量上為待決的。[此等待可能是無限的,但通常釋放Lock_bit 418且此線程20到達寫入等待者列表444頂部,且發信號通知所述信號量(下文提供額外論述)]。在步驟538中,SW方面14注意到已取得所述寫入等待信號量。並且,在步驟540中,SW方面14向程序計數器加載PC_temp1_reg 432的先前保存的內容(已知恰在重啟用中斷之前所保存的副本是正確的)。
情況3-4的前篇回想以設置Go_bit 420從而發信號通知可立即開始使用硬體資源24而結束的情況1(取得鎖定)。此後,SW方面14可繼續做與請求不相關的其它事情,但可能其將最終檢查以查看是否已完成所述請求(見圖6a)。SW方面14通過讀取Ready_bit 422而進行此操作。注意,當存在多通道硬體裝置26時,硬體鎖定系統10應基於針對通道(硬體資源24)的ThreadID_reg 430的各自內容而區分此類請求。
再次參看圖6a,在步驟512(其中Go_bit 420發信號通知此情況)之後,在步驟542中,HW方面16執行我們在此處正使用的實例的硬體加速器行為。接著,在步驟544中,HW方面16設置Ready_bit 422,發信號通知硬體資源24已完成了向其請求的事項。在步驟546中,HW方面16接下來重新設置Lock_bit 418,從而發信號通知硬體資源24再次可用。
同時,在步驟548中,SW方面14可執行其想要進行的任何組件特定行為(例如,與硬體資源24不相關的任務、平行執行或完全沒有事務)。
情況3在圖6a中,步驟550和步驟552包括情況3(在請求完成之後獲得信息)。在步驟550中,SW方面14確定是否設置了Ready_bit 422。此處,硬體資源24已完成且Ready_bit422已被重新設置(替代情況為情況4,不久將進行描述)。因此,隨後進行步驟552,且退出程序500。
情況4在圖6a中,步驟550、步驟554、步驟556和步驟552包括情況4(在請求完成之前獲得信息)。在步驟550中,SW方面14確定是否設置了Ready_bit 422。只是在此處,硬體資源24尚未完成,且Ready_bit 422尚未被重新設置。因此,隨後進行步驟554,其中HW方面16準備將等待者添加到讀取等待者列表(ReadWaiters_lst 446)。HW方面16也相對於計算機系統12的SW方面14「以原子方式」處置步驟554,從而此處也避免了傳統軟體鎖定機制中所必然的負擔較重且易出錯的例行程序。此後,在步驟556中,SW方面14「等待」硬體資源24完成向其請求的事項。接著,隨後進行步驟552,且退出程序500。
圖6c詳細展示步驟554。在步驟558中,HW方面16將程序計數器存儲在PC_temp2_reg 434中。在步驟560中,HW方面16將PendReader_bit 426設置為「1」。在步驟562中,HW方面16禁用中斷(防止上下文切換和保留一致性)。如果計算機系統12具有多個CPU 22,那麼在步驟564中,HW方面16通過設置各個ProcEnable_bit 428以禁用其它CPU來使其停止,從而確保讀取等待者列表446中的項目保持一致。並且,在步驟566中,HW方面16將程序計數器設置為jumpToAddReadWaiters中的地址(即,設置成Ex_addr2_reg 438中所存儲的內容)。
SW方面14必須將線程20添加到讀取等待者列表446(等待完成請求的線程20的列表)。這只在採用多通道硬體裝置26時才需要。如果僅存在單通道硬體資源24,那麼可僅存在一個等待線程20,且讀取等待者列表446將僅具有單個元件。
既然HW方面16已經「以原子方式」處理了剛描述的關鍵準備工作,那麼SW方面14可自由地安全地繼續進行步驟556。
圖6f針對本發明硬體鎖定系統10的此實施例詳細展示步驟556。此處,同樣,與線程20相關聯的信號量用作等待機制,且SW方面14維持等待線程的優先級排序的列表。[可替代地使用FIFO或另一排序排列。]
在步驟568中,SW方面14獲得當前線程20的ThreadID_reg 430和其優先級。在步驟570中,SW方面14找出哪個讀取等待信號量與此特定線程20相關聯。在步驟572中,在此實例中基於線程優先級,SW方面14將此讀取等待信號量插入到讀取等待者列表446中。在步驟573中,SW方面14保存PC_temp2_reg 434的副本(出於下文論述的原因)。在步驟574中,SW方面14啟用中斷,且如果存在多個CPU 22,那麼其不停止其它CPU(設置其各自ProcEnable_bit 428以啟用它們)。在步驟576中,SW方面14使當前線程20在讀取等待信號量上為待決的(可能無限地)。在步驟578中,SW方面14注意到已取得所述讀取等待信號量。並且,在步驟580中,SW方面14向程序計數器加載在先前保存為PC_temp2_reg 434的內容之後的下一指令地址(已知恰在重啟用中斷之前所保存的副本是正確的,且此處需要向下一所需指令偏移)。
情況5的前篇回想在我們的示範性硬體加速器完成之後,HW方面16重新設置Lock_bit 418(在步驟546中)。HW方面16現檢查是否存在等待硬體資源24變為可用的線程20(見(例如)情況2)或是否存在等待硬體資源24完成對請求的處理的線程20(見(例如)情況4)。HW方面16通過在步驟582中檢查PendWriter_bit 424和在步驟584中檢查PendReader_bit 426來進行此操作。如果這些均未被設置,那麼沒有要通知的等待者,且隨後進行步驟552並退出程序500。
情況5在圖6a中,步驟586、步驟588和步驟552包括情況5(通知等待者關於請求完成)。在步驟586中,HW方面16產生中斷且開始中斷服務例行程序(ISR)運行。如同步驟514和步驟554,優選的是相對於SW方面14「以原子方式」進行步驟586,且使HW方面16處置其有利於此。此後,在步驟588中,SW方面14完成運行ISR。隨後進行下一步驟552,且退出程序500。
圖6d詳細展示步驟586。如果採用多通道硬體裝置26,那麼在步驟590中,HW方面16用已完成請求的ID更新ReqID_reg 440。在步驟592中,HW方面16重新設置PendWriter_bit 424,且在步驟594中,HW方面16重新設置PendReader_bit 426。如果存在多個CPU 22,那麼在步驟596中,HW方面16通過設置各個ProcEnable_bit 428以禁用其它CPU來使其停止。並且,在步驟598中,HW方面16產生由相關聯ISR服務的中斷。
既然HW方面16已經「以原子方式」處理剛描述的關鍵準備工作,那麼SW方面14可自由地安全地繼續進行步驟588。
圖6g針對本發明硬體鎖定系統10的此實施例詳細展示步驟588。在步驟600中,SW方面14確定等待編程硬體資源24的線程20的列表是否具有一個以上項目。如果是,那麼在步驟602中,使PendWriter_bit 424設置為「1」。在步驟604中,SW方面14還確定等待硬體資源24完成最後請求的線程20的列表是否具有一個以上項目。如果是,在步驟606中,使PendReader_bit 426設置為「1」。接下來,在步驟608中,SW方面14從等待編程硬體資源24的線程20的列表(寫入等待者列表444)獲取頂部項目(如果有的話)。類似地,在步驟610中,SW方面14從與硬體資源24的已完成請求相關聯的線程20的列表(讀取等待者列表446)中獲取頂部項目(如果有的話)。此情形在存在多通道硬體裝置26時是可能的。為此,HW方面16需要能夠在隨後可由SW方面14讀取的編程時間分配唯一請求ID(在ReqID_reg 440中)以使得其能夠將線程20與各自ReqID_reg 440相關聯。
在步驟612中,SW方面14現經由相關聯信號量而發信號通知線程20(等待編程的那些線程和等待完成的那些線程)。
如果存在多個CPU 22,那麼在步驟614中,SW方面14現不停止在步驟596中停止的那些CPU(由於這是ISR且其它處理器已在此操作期間停止,且列表修改將已是安全且一致的)。並且,在步驟616中,SW方面14從中斷返回。
總而言之,現應清楚,與更普通的基於純軟體的鎖定實施方案相比,尤其在最小化上下文切換和取得及釋放鎖定的額外開銷的方面,本發明硬體鎖定系統10提供顯著的運行時間性能改進。所述硬體鎖定系統10一般提供固有地比現有技術方法負擔輕的用於在現代計算機系統中訪問硬體資源的機制,且其尤其提供一種比現有技術方法更有效的用於訪問此類硬體資源的機制。
當使用硬體鎖定系統10時,對於編程未佔用的硬體資源24沒有任何額外開銷(即,不需要招致軟體鎖定的巨大額外開銷)。硬體資源24本身保證線程20(在相同和不同CPU22上運行的那些線程)內的訪問的排他性。
類似地,硬體鎖定系統10當在硬體資源24已經完成請求時得到完成信息的時候沒有任何額外開銷。舉例來說,線程20此處將其本身放在等待者列表(ReadWaiters_lst 446)中以被通知請求完成,硬體資源24接著將產生中斷,且相關聯ISR將發信號通知等待者列表中的頂部元件關於所述完成。ISR將接著運行,而不管何時將通知所請求的線程20關於完成。因此,ISR此處僅在存在等待線程20時才執行。
硬體鎖定系統10還為等待編程硬體資源24的等待者提供列表(例如,寫入等待者列表444和讀取等待者列表446)的排序的自由。任何所需排序均是可能的,且因此憑所實施的處理。相反地,使用現有技術軟體鎖定,鎖定的等待者為FIFO、LIFO或由OS排序的優先級。
概括地說,此文件至少揭示用於在運行至少一個具有多個線程的軟體程序的計算機系統中共享硬體資源的方法和系統。在計算機系統內的數據結構中提供鎖定指示器。接收由所述線程中界定為請求線程的一個線程使用硬體資源的請求。基於鎖定指示器,確定硬體資源是否可供所述請求線程使用。如果此指示硬體資源是可用的,那麼在硬體資源控制下設置鎖定指示器,以改為指示所述硬體資源是不可用的,且運行指示器發信號通知以指示現可繼續針對所述請求的硬體資源使用。
儘管上文已描述各種實施例,但應了解僅以實例方式展示所述實施例,且本發明的寬度和範圍不應受上述示範性實施例中的任一者限制,而是應替代地僅根據所附權利要求書和其等效物來界定。
權利要求
1.一種用於在運行至少一個具有多個線程的軟體程序的計算機系統中共享硬體資源的方法,所述方法包括(a)在所述計算機系統內的數據結構中提供鎖定指示器;(b)接收由所述線程中被界定為請求線程的一個線程使用所述硬體資源的請求;(c)基於所述鎖定指示器確定所述硬體資源是否可供所述請求線程使用;和(d)如果所述(c)指示所述硬體資源是可用的,那麼(1)在所述硬體資源的控制下設置所述鎖定指示器,以改為指示所述硬體資源是不可用的;和(2)用運行指示器發信號通知,以指示可繼續針對所述請求的所述硬體資源的使用。
2.根據權利要求1所述的方法,其中所述(a)包含進一步在所述數據結構中提供寫入等待者列表,所述寫入等待者列表能夠存儲至少一個線程識別值(thread-identity_value);且所述方法進一步包括(e)如果所述(c)指示所述硬體資源是不可用的,那麼(1)向所述寫入等待者列表添加識別所述請求線程的一所述線程識別值;和(2)等待所述硬體資源對於所述請求線程的待決可用性。
3.根據權利要求2所述的方法,其中所述(e)(1)是在所述硬體資源的控制下相對於所述線程以原子方式執行的。
4.根據權利要求1所述的方法,其中所述(a)包含進一步在所述數據結構中提供準備指示器(ready_indicator);且所述方法進一步包括(e)一旦完成所述請求,則(1)在所述硬體資源的控制下設置所述準備指示器,藉此發信號通知所述請求線程所述請求已完成;和(2)在所述硬體資源的控制下重新設置所述鎖定指示器,藉此指示所述硬體資源再次為可用的。
5.根據權利要求4所述的方法,其中所述(a)包含進一步在所述數據結構中提供讀取等待者列表,所述讀取等待者列表能夠存儲至少一個線程識別值;且所述方法進一步包括(f)基於所述準備指示器確定所述硬體資源是否已完成所述請求;和(g)如果所述(f)指示所述硬體資源尚未完成所述請求,那麼(1)向所述讀取等待者列表添加識別所述請求線程的一所述線程識別值;和(2)等待所述請求對於所述請求線程的待決完成。
6.根據權利要求5所述的方法,其中所述(g)(1)是在所述硬體資源的控制下相對於所述線程以原子方式執行的。
7.根據權利要求4所述的方法,其進一步包括(f)在所述(e)之後,確定所述線程中的任何線程是否正在等待寫入或讀取所述硬體資源,且如果是的話,那麼(1)在所述硬體資源的控制下在所述計算機系統中產生中斷;和(2)在所述中斷內,發信號通知所述正在等待寫入或讀取所述硬體資源的線程中的至少一者其應當繼續。
8.根據權利要求7所述的方法,其中所述(e)和所述(f)是在所述硬體資源的控制下相對於所述線程以原子方式執行的。
9.根據權利要求7所述的方法,其中所述(f)(1)是在所述硬體資源的控制下相對於所述線程以原子方式執行的。
10.一種用於在運行至少一個具有多個線程的軟體程序的計算機系統中共享硬體資源的系統,其包括處於所述計算機系統內的數據結構,其包含鎖定指示器;接收構件,其用於接收由所述線程中被界定為請求線程的一個線程使用所述硬體資源的請求;鎖定構件,其用於基於所述鎖定指示器確定所述硬體資源是否可供所述請求線程使用;和響應於所述鎖定構件的構件,其用於控制設置構件,其用於在所述硬體資源的控制下設置所述鎖定指示器,以改為指示所述硬體資源是不可用的;和信令構件,其用於用運行指示器發信號通知可繼續針對所述請求的所述硬體資源的使用。
11.根據權利要求10所述的系統,其中所述數據結構進一步包含寫入等待者列表,以存儲至少一個線程識別值;且所述響應於所述鎖定構件的構件進一步用於控制添加構件,其用於向所述寫入等待者列表添加識別所述請求線程的一所述線程識別值,所述添加構件是在所述硬體資源的控制下相對於所述線程以原子形式操作的;和等待構件,其用於等待所述硬體資源對於所述請求線程的待決可用性。
12.根據權利要求10所述的系統,其中所述數據結構進一步包含準備指示器;且進一步包括響應於所述請求的完成的構件,其用於控制設置構件,其用於在所述硬體資源的控制下設置所述準備指示器,藉此發信號通知所述請求線程所述請求已完成;和重新設置構件,其用於在所述硬體資源的控制下重新設置所述鎖定指示器,藉此指示所述硬體資源再次為可用的。
13.根據權利要求12所述的系統,其中所述數據結構進一步包含讀取等待者列表,以存儲至少一個線程識別值;且進一步包括確定準備構件,其用於基於所述準備指示器確定所述硬體資源是否已完成所述請求;和響應於所述準備就緒構件的構件,其用於控制添加構件,其用於向所述讀取等待者列表添加識別所述請求線程的一所述線程識別值,所述添加構件是在所述硬體資源的控制下相對於所述線程以原子形式操作的;和等待構件,其用於等待所述請求對於所述請求線程的待決完成。
14.根據權利要求12所述的系統,其進一步包括確定等待者構件,其用於確定所述線程中的任何線程是否正在等待寫入或讀取所述硬體資源;和響應於所述確定等待者構件的構件,其用以控制產生構件,其用於在所述硬體資源的控制下在所述計算機系統中產生中斷,所述產生構件是在所述硬體資源的控制下相對於所述線程以原子方式操作的;和信令構件,其用於在所述中斷內發信號通知所述正在等待寫入或讀取所述硬體資源的線程中的至少一者應當繼續。
15.根據權利要求14所述的系統,其中所述用於控制的響應於所述請求的完成的構件、所述用於設置所述準備指示器的構件、所述用於重新設置所述鎖定指示器的構件和所述等待構件是在所述硬體資源的控制下相對於所述線程以原子方式操作的。
全文摘要
本發明提供用於在計算機系統中共享硬體資源的方法和系統,所述計算機系統運行至少一個具有多個線程的軟體程序。在所述計算機系統內的數據結構中提供鎖定指示器。接收由所述線程中被界定為請求線程的一個線程使用所述硬體資源的請求。基於所述鎖定指示器,確定所述硬體資源是否可供所述請求線程使用。如果這指示所述硬體資源是可用的,那麼在所述硬體資源的控制下設置所述鎖定指示器,以改為指示所述硬體資源是不可用的,且運行指示器發信號通知以指示現可繼續針對所述請求的所述硬體資源的使用。
文檔編號G06F9/50GK101078996SQ200710097240
公開日2007年11月28日 申請日期2007年4月28日 優先權日2006年5月6日
發明者格克汗·阿夫卡羅古拉裡, 史蒂文·L·彼得森 申請人:輝達公司

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀