用於交換數據的方法和系統的製作方法
2023-12-09 03:35:41 2
專利名稱:用於交換數據的方法和系統的製作方法
技術領域:
一般來說,本發明涉及生產者(producer) /消費者(consumer)軟體,更具體來說, 涉及用於在生產者與消費者之間交換數據的方法和系統。
背景技術:
一般來說,I/O掃描機制利用包括配置成使用共享存儲緩衝器通過模塊交換數據 的生產者和消費者的軟體實現。此外,數據交換通常要求通過底板(backplane)的握手機 制,以便允許對數據的訪問。具體來說,生產者要求對將數據寫入共享存儲緩衝器的訪問, 而消費者要求對從共享存儲緩衝器讀取數據的訪問。相應地,在數據交換期間,至少某些掃 描機制要求生產者和/或消費者等待對數據的訪問。具體來說,握手機制可要求多次讀訪 問或寫訪問。例如,通常實現共享存儲器信號量(semaphore)、如Peterson算法,以便確保 對共享存儲器數據緩衝器的相干(coherent)訪問。但是,這類信號量往往要求反覆嘗試以 獲得訪問。此外,在生產者和/或消費者中之一捕獲最新數據時,某些已知的掃描機制要求 臨界區域或超時。計算這類等待時間或超時會很困難並且容易出錯。相應地,至少某些已知的掃描機制向掃描模塊發送命令,以便準備控制器訪問。但 是,這種機制往往要求該模塊延遲其正常處理以讀取該命令,由此引起數據交換的延遲。此 夕卜,至少某些已知的掃描機制使用硬體機制來幫助訪問控制。但是,硬體機制可能安裝和維 護起來成本高和/或費時。
發明內容
在一方面,提供一種用於在第一模塊與第二模塊之間交換數據的方法。該方法包 括在第一模塊生成數據,其中第一模塊配置成允許第二模塊實質連續地訪問數據。該方法 還包括在第二模塊讀取數據,其中第二模塊配置成允許第一模塊實質連續地生成數據。該 方法最後包括在讀取數據時在第一模塊與第二模塊之間交換數據。在另一方面,提供一種系統。該系統包括控制器以及配置成通過共享存儲器接口 與控制器交換數據的輸入/輸出模塊。數據通過下列步驟進行交換用第一模塊生成數據, 在第二模塊讀取數據,並且在讀取數據時將數據從第一模塊交換到第二模塊。第一模塊配 置成允許第二模塊實質連續地訪問數據;而第二模塊配置成允許第一模塊實質連續地生成 數據。在又一方面,提供安裝在輸入/輸出模塊中的電腦程式。電腦程式包括配置 成指示輸入/輸出模塊在第一模塊與第二模塊之間交換數據的至少一個代碼段。數據通過 下列步驟進行交換在第一模塊生成數據,其中第一模塊配置成允許第二模塊實質連續地 訪問數據;在第二模塊讀取數據,其中第二模塊配置成允許第一模塊實質連續地生成數據; 以及在讀取數據時在第一模塊與第二模塊之間交換數據。
圖1是包括控制器和輸入/輸出模塊的掃描機制的示範實施例。圖2和圖3是可用於通過使用圖1所示掃描機制交換數據的示範算法的流程圖。
具體實施方式
本發明提供一種系統,該系統包括控制器以及配置成通過共享存儲器接口與控制器交 換數據的輸入/輸出(I/O)模塊。在一個實施例中,該系統包括輸入到I/O模塊的電腦程式, 並且包括用於交換數據的算法。該系統還可包括讀取和操作電腦程式的處理器。該算法的技 術效果是控制生產者和消費者,以便促進在控制器與I/O模塊之間交換數據。該算法使生產者能 夠異步且相干地寫入新數據,而不阻塞和等著協調與消費者的訪問。消費者也異步讀取最新的生 產者數據,而不阻塞或等著生產者對數據的訪問。在示範實施例中,系統不需要專用硬體。此外,用於生產者/消費者交換的數據結構僅包括生產者狀態字節、消費者狀態 字節和多個不同的數據緩衝槽(buffer bin),如4個不同的數據緩衝槽。對於生產者,該算 法確保緩衝槽中至少之一始終可用於寫入最近的生產數據,使得生產者不等待對消費者的 訪問。對於消費者,該算法使消費者能夠即時鎖定最新產生的數據緩衝器以讀取數據。在 示範實施例中,該算法僅要求2個共享存儲器讀/寫操作以協商對適當數據緩衝槽的訪問, 由此改進在通過底板進行掃描時的性能。應當注意,雖然針對掃描機制描述本發明,但是本領域技術人員要領會,本發明也 可適用於在生產者與消費者之間交換數據的任何系統和/或設備。此外,雖然針對處理器 和電腦程式描述本發明,但是本領域技術人員要領會,本發明也可適用於配置成在生產 者與消費者之間交換數據的任何系統和/或程序。本文所使用的術語「處理器」並不局限 於本領域中稱作處理器的那些集成電路,而是廣義地表示計算機、處理器、微控制器、微型 計算機、可編程邏輯控制器、專用集成電路和其它可編程電路。處理器可以是計算機的組成 部分,所述計算機可包括例如軟盤驅動器或壓縮盤只讀存儲器(CD-ROM)驅動器的裝置,用 於從例如軟盤、⑶-ROM、磁光碟(MOD)或數字通用光碟(DVD)的計算機可讀介質讀取數據。圖1是包括控制器104和I/O模塊108的掃描機制100的示範實施例。在該示範 實施例中,I/O模塊108控制多個遠程模塊112的I/O數據。具體來說,I/O模塊108實現 共享存儲器接口,並且包括用於每個已配置遠程模塊112的4緩衝器生產者/消費者數據 集。例如,如果用戶將網絡配置成包括50個遠程模塊112,則I/O模塊108向各模塊112提 供用於輸入數據交換的50個生產者/消費者數據集以及用於輸出數據交換的另外50個生 產者/消費者數據集。各生產者/消費者數據集包括生產者狀態字節、消費者狀態字節和 4個數據緩衝槽。在該示範實施例中,掃描機制包括電腦程式中包含的算法,其使生產者能夠生 成新數據並使消費者能夠查看和/或讀取最新生成的生產者數據,而無需等著協商訪問。 相應地,生產者和消費者可異步並在任何時間間隔進行操作。在一個實施例中,生產者周期 比消費者周期快。在備選實施例中,消費者周期比生產者周期快。在另一個實施例中,生產 者周期和消費者周期交替進行。在各實施例中,生產者和消費者都不要求任何臨界區域或 超時。更具體來說,不要求生產者狀態和消費者狀態的共享存儲器控制值的讀/寫是原子 的。相應地,對這些值的生產者和消費者訪問可以是並發的並且是重疊的。該算法使共享存儲器訪問最小,以便優化性能。此外,該算法僅需要共享存儲器的單字節寫入和單字節讀取以協商緩衝器訪問。一般來說,4緩衝器掃描對於各生產者/消費者組合要求4個不同的共享存儲器 緩衝槽。因此,輸入掃描需要4個緩衝槽,而輸出掃描需要另外4個緩衝槽。緩衝器的偏移 位置可在模塊啟動/配置期間確定,使得在實際掃描操作期間,緩衝器可簡單地通過緩衝 器索引值0、1、2或3來表示。例如,具有12位元組的輸入掃描數據的模塊可將其4緩衝器組 定位在共享存儲器中在偏移0x10000處。在這個示例中,由於各輸入緩衝器的數據大小為 OxOC,所以4緩衝器定位在偏移0xl0000、0xl000C、0xl0018和0x10024處。然後,在配置期 間確定這些偏移,並映射4緩衝器掃描索引值0、1、2和3。控制基本4緩衝器掃描操作需要共享存儲器中最少5個控制子欄位。具體來說, 控制子欄位中的4個僅由生產者寫入,包括最後周期值、槽選擇符(selector)、bin0子欄位 和binl子欄位。剩餘的控制子欄位是僅由消費者寫入的周期值。可定義附加欄位,以便增 強I/O掃描操作。一般來說,生產者和消費者在binO與binl之間交替。相應地,在操作期間,消費者 使用一個緩衝槽中鎖定的緩衝器值,而生產者採用新產生的緩衝器來更新其它緩衝槽。在 各生產周期期間,生產者找到可用的I/O掃描緩衝器,向其寫入生產數據,並且在共享存儲 器中呈現該緩衝器的索引值。在一個實施例中,生產者將新產生的緩衝器索引值寫入當前 沒有被消費者鎖定的緩衝槽欄位。此外,生產者在各生產周期期間讀取和保存消費者周期 值。當生產者從前一生產周期看到消費者周期值變化時,生產者必須在其下一生產周期轉 換到其它緩衝槽。相應地,如果消費者周期值在生產者正對binO進行產生時發生變化,則 下一產生將針對binl。如果binl是活動的,則生產者轉換到binO。生產者寫入槽選擇符, 以便指明它當前正使用哪個緩衝槽(binO或者binl)。該算法允許生產者隨每個所觀測消 費周期不斷轉換其緩衝槽和槽選擇符狀態。消費者觀測生產者狀態,並且從鎖定的緩衝槽 挑選最新生產緩衝器。4緩衝器握手算法僅要求兩個共享存儲器訪問來協調下一生產/消費緩衝器。讀 取或寫入實際數據還需要第三共享存儲器訪問。相應地,生產者必須將新數據寫入空閒緩 衝器位置,用新緩衝器索引寫入生產者狀態欄位,並且讀取消費者狀態欄位以確定下一生 產周期的動作。消費者寫入新消費者狀態欄位以開始消費周期,讀取生產者狀態以識別消 費緩衝器,並且從該消費緩衝器讀取數據。如果僅需要5個控制子欄位,則生產者狀態欄位和消費者狀態欄位對於各狀態字 段可減小到單個字節。使用更大的DWORD大小提供用於緩衝槽就緒位的空間,以便為特定 的鎖定緩衝器賦予緩衝器有效指示。如果不需要緩衝器特定細節,則這些就緒位可用將 binO值設置成等於binl值的機製取代,以便指明生產者未就緒。使用DWORD狀態大小還為 將來的增強提供備用位。圖2和圖3是用於生產者與消費者之間的4緩衝器掃描的算法的流程圖。在該示 範實施例中,該算法包括生產者算法208 (圖2所示)和消費者算法212 (圖3所示)。在生 產者算法208期間,當前緩衝器變量、前一緩衝器變量和鎖定緩衝器變量是生產者的局部 實例變量,而不是共享存儲器欄位。這些變量記錄4個掃描緩衝器索引值0、1、2或3中之 一。生產者的局部實例數據還記錄各掃描緩衝器的當前使用中(in-use)狀態。在第一生產周期之前,全部4個掃描緩衝器可用(不在使用中)。相應地,在該示範實施例中,生產者找到可用(不在使用中的)掃描緩衝器,並且將緩衝器索引值保存(216)到當前緩衝器變量。然後,生產者將新生產數據寫入(220)共享 存儲器中的當前緩衝器偏移位置。通過將當前緩衝器值和鎖定緩衝器值放入當前槽選擇符 的適當緩衝槽,創建新生產者狀態。還設置適當的最後消費者周期值欄位。生產者算法208 還包括將生產者狀態寫入共享存儲器(225),並且從該共享存儲器讀取消費者狀態(226)。在該示範實施例中,生產者算法208確定(228)消費者周期值自最後生產周期以 來是否改變。如果消費者周期值已改變(232)(指明當前緩衝槽的鎖定),則對下一生產周 期切換(toggle) (236)生產者的槽選擇符。相應地,除了當前緩衝器索引和前一緩衝器索 引之外,所有生產緩衝器被標記為(240) 『可用』。此外,鎖定緩衝器值設置成(244)等於 當前緩衝器值,以便保存新的消費者鎖定緩衝器值。如果自最後生產周期以來沒有檢測到 (248)消費者周期開始(即,前一緩衝器的值等於鎖定緩衝器的值),則前一緩衝器索引標 記為(252) 『可用』,並且可在下一生產周期使用。此外,當前緩衝器索引標記為(256) 『不 可用』(在使用中),並且不能在下一生產周期使用。另外,對下一生產周期將前一緩衝器值 設置成(260)等於當前緩衝器值。在消費者算法212期間,當前周期變量、前一周期變量和鎖定周期變量是消費者 的局部實例變量,而不是共享存儲器欄位。這些變量記錄5個周期值1、2、3、4或5中之一。 消費者的局部實例數據還記錄各周期值的當前使用中狀態。在第一消費周期之前,全部5 個周期值可用(不在使用中)。相應地,在該示範實施例中,消費者找到(264) 『可用』(不在使用中的)消費者周 期值,並且將這個值保存到當前周期變量。消費者還用新消費者周期值將新消費者狀態寫 入(268)共享存儲器,並且從該共享存儲器讀取(272)生產者狀態。然後,消費者算法212 確定(276)新消費者周期值是否等於生產者狀態中的最後消費者周期值。如果新消費者周 期值不等於最後消費者周期值(280),則消費者從當前生產者槽選擇符所指明的緩衝槽中 檢索(284)緩衝器索引。如果新消費者周期值等於最後消費者周期值(288),則生產者已經 看到新的消費者周期,並且相應地切換其槽選擇符。因此,消費者從不由當前生產者槽選擇 符所指明的緩衝槽中檢索(292)緩衝器索引。隨後,消費者從緩衝器索引所指明的適當共享存儲緩衝器偏移讀取(296)生產者 數據。消費者算法212確定(300)自最後消費者周期以來是否已經出現生產者周期(通 過生產者狀態的變化所指明)。如果生產者周期已經出現(304),則消費者將當前周期、前 一周期和最後消費者周期值標記為(308) 『不可用』。此外,消費者將其餘周期值標記為 (312) 『可用』(不在使用中)。此外,鎖定周期值設置成等於當前周期值,以便保存新的鎖 定周期值。如果前一生產者狀態值等於當前生產者狀態(生產者周期尚未出現(320)),則 消費者在前一周期不等於鎖定周期時將前一周期值標記為(324) 『可用』。此外,當前周期 值標記為(328) 『不可用』(在使用中),並且不能在下一消費周期使用。此外,對下一消費 周期將前一周期值設置成(332)等於當前周期值。相應地,生產者算法208和消費者算法212使執行掃描握手所需的底板讀/寫訪 問最少。具體來說,生產者和消費者都只需要對4緩衝器底板握手的單次寫入和單次讀取 以及實際I/O掃描數據的額外讀取或寫入。另外,該算法在軟體實現中不需要任何超時和/或臨界區域。在該示範實施例中,生產者負責管理生產周期期間4個掃描緩衝器的可用性或者使用中狀態。這種管理針對當前未用於生產的掃描緩衝器相對使對消費可用的緩衝器的可 用性。為執行這種管理,生產者必須知道消費者當前已經鎖定哪個緩衝器以及哪個緩衝器 在最後生產周期中被使用。然後,生產者必須為當前生產周期挑選餘下緩衝器中之一。進行 這種選擇由於生產者與消費者之間出現的競態條件(racecondition)而有些複雜。競態條 件在生產者將新緩衝器值寫入預期的當前生產緩衝槽時出現。當執行該生產寫入時,消費 者可能在同時鎖定生產者正寫入的同一緩衝槽並且還讀取這個鎖定緩衝槽中的緩衝器值。 生產者不知道消費者在緩衝槽中實際看到哪個緩衝器值。生產者只知道它是剛寫入的新生 產緩衝器或者前一生產緩衝器。由於這種競態條件,4緩衝器算法要求生產者假定兩個緩衝 器均在使用中(當前生產緩衝器和前一生產緩衝器均標記為在使用中,但是這兩個其餘緩 衝器隱含地可供使用)。例如,如果生產者先前已經在緩衝器1中產生新數據,並且現在在緩衝器2中產生 數據,則在用值2更新當前緩衝槽之後,生產者檢查消費者周期值並且看到消費者先前已 經鎖定同一緩衝槽。生產者這時必須假定緩衝器1和緩衝器2均在使用中,並且可能正在 被消費。在後續生產周期,生產者隨意將緩衝器0或緩衝器3用於新生產者數據。在該示範實施例中,消費者狀態中的消費者周期值欄位旨在指明消費周期的出 現。新消費周期通過在各消費周期的開始改變消費者周期值來指明。生產者在其下一生產 周期看到該值變化,並且知道消費周期已經出現或者正在進行中。消費者必須處理隨消費 者周期值變化的幾個問題。首先,消費者需要隨每個消費周期改變周期值,但是它不能重複 生產者在其前一生產周期中可能已經看到的值。因此,消費者必須跟蹤在最後周期期間呈 現了哪個消費者周期值。其次,消費者不能使用當前在生產者狀態最後消費者周期值欄位中呈現的周期 值。必須避免這個周期值,因此消費者可在後續消費者周期中正確比較生產者周期值和消 費者周期值。如果使用這個值並且生產者在消費者再使用同一值之前沒有循環到改變最後 消費者周期值,則消費者會用消費者槽選擇符子算法來挑選錯誤的緩衝槽。最後,當消費者在生產者正寫入新生產者狀態的同時也寫入新消費者周期值並讀 取生產者狀態時,必須處理競態條件。在這種情況下,消費者不肯定生產者看到了哪個消費 者周期值。相應地,消費者必須假定當前周期值和前一周期值均在使用中,並且不可用於下 一消費者周期。本質上,如上所述,這是生產者必須處理的相同競態條件。相對於消費者周期值,每個周期僅需要4個值來呈現唯一值。但是,由於要求避免 生產者的最後消費者周期值,消費者周期值選擇子算法需要5個周期值(值範圍為1-5)。 應當注意,消費者周期值1、2、3、4和5與緩衝槽無關,而只是向生產者指明新的消費者周期 已經出現。在該示範實施例中,要求生產者在每個生產周期期間將其看到的最新消費者周期 值複製到生產者狀態欄位最後消費者周期值。消費者使用這個值來確定它應當從哪個緩衝 槽進行讀取。快速(fast)生產者可在消費者讀取生產者狀態之前切換其槽選擇符。相應 地,為在消費者周期期間進行正確的緩衝槽選擇,消費者將生產者狀態最後消費者周期值 的值與當前消費者周期值進行比較。如果這些值不相等,則消費者使用生產者狀態槽選擇符值所指明的緩衝槽。但是,如果這些周期值相等,則消費者知道生產者在消費者讀取其生 產者狀態值之前已經完成另一周期。因此,生產者的槽選擇符從預計位置進行切換,並且消 費者必須使用其它緩衝槽中的鎖定緩衝器。相應地,本系統提供定期更新其所產生數據並向消費者指明最新所產生緩衝器的 生產者。此外,消費者定期鎖定生產緩衝器,使得它可相干地讀取所有數據。生產者使用共 享存儲器中兩個緩衝槽中之一來指明最新生產緩衝器索引值(緩衝器0-3)。生產者每次 僅向一個槽寫入新生產緩衝器值,並且使用生產者槽選擇符欄位來指明當前哪個槽是活動 的。當消費者想要訪問最新產生的緩衝器時,消費者寫入新的消費者周期值,以便指明新消 費周期的開始。通過這種動作,消費者命令生產者停止將新生產緩衝器寫入當前槽,並且在 其下一生產周期轉換到其它槽。這有效地鎖定所選槽以免其它生產周期更新,並允許消費 者讀取所選槽並且將其緩衝器值用於消費。
相應地,該算法提供一種比先前軟體實現更快的I/O掃描機制。這是優於先前算 法的技術改進,但是它也將產生具有更快和更一致掃描時間的產品。此外,在該示範實施例中,基本的4緩衝器算法包括與掃描機制100配合使用的若 幹增強。這些增強便於支持多個遠程模塊並且提高性能。具體來說,如果模塊需要多個I/ 0緩衝器組,則多個組可在共享存儲器中實現。各緩衝器組包括單個生產者/消費者交換 所需的基本欄位,即消費者狀態、生產者狀態以及4個緩衝槽。這個基本組則在共享存儲器 中根據數據交換的需要被重複多次。生產者/消費者控制狀態欄位可布置在4個共享存儲 器陣列中,即輸入消費者狀態陣列、輸入生產者狀態陣列、輸出消費者狀態陣列和輸出生產 者狀態陣列。在該示範實施例中,術語「掃描索引值」指的是其中對I/O緩衝器組定位特定控制 狀態欄位集合的陣列索引。例如,掃描索引值5表示對應生產者/消費者狀態標誌位於陣 列索引5,其中4個控制陣列中的每個如下輸入消費者狀態=輸入消費者偏移[5]輸入生產者狀態=輸入生產者偏移[5]輸出消費者狀態=輸出消費者偏移[5]輸出生產者狀態=輸出生產者偏移[5]在該示範實施例中,系統起作用以控制多個遠程I/O模塊並將來自主控制器的掃 描進行分割。相應地,對於各遠程模塊需要一組生產者和消費者狀態控制欄位。具體來說, 在配置期間,該模塊必須在共享存儲器中為輸入消費者、輸入生產者、輸出消費者和輸出生 產者創建41/0控制陣列組。各陣列包含所有模塊的生產者或消費者狀態欄位的列表。在配置期間,該模塊還必須識別各遠程I/O模塊的輸入和輸出數據緩衝器偏移。 單個緩衝器偏移值指向4緩衝器掃描期間使用的4緩衝器陣列。數據大小值將指明各掃描 緩衝器的大小,並且還隱含對陣列中各掃描緩衝器的偏移。例如,如果模塊的輸入數據大小 為12位元組,則輸入緩衝器偏移必須指向各自位於緩衝器陣列中偏移0、12、24和36的4個 12位元組的緩衝器。這些緩衝器對應於4緩衝器掃描算法中的掃描緩衝器索引0、1、2和3。 掃描算法和狀態欄位則可用於識別要使用哪個掃描緩衝器。如果從模塊支持根據配置(例如遠程模塊I/O掃描數據)動態分配的多個I/O緩 衝器組,則本系統負責為4個控制狀態陣列正確分配和呈現掃描索引值。由於I/O數據集可隨各配置而改變,控制狀態欄位和對應掃描索引值可因各配置變化而被丟棄或添加。該 系統負責正確處理控制狀態欄位的掃描索引值的指配。相應地,該系統嘗試維持所指配的 掃描索引值被封裝在索引值的低範圍中。因此,當配置添加新的I/O數據區域時,系統在狀 態陣列結束處分配新位置之前再使用先前被解除分配的掃描索引位置。這可要求該模塊保 持內部或專用掃描索引分配陣列,以便確定哪些掃描索引位置被分配而哪些是空閒的。
在該示範實施例中,消費者就緒位存在於消費者狀態中,以便指明消費者是否就 緒。生產者可使用各緩衝槽(binO或binl)中的緩衝槽就緒位來指明其就緒狀態。生產者 將為具有有效數據的各生產周期在緩衝槽中設置緩衝槽就緒位。如果生產者進入它尚未就 緒的狀態,則生產者必須在不設置緩衝槽就緒位的情況下執行另一生產周期,或者只是清 除前一生產周期的緩衝槽中的緩衝槽就緒位。消費者根據它已經鎖定供消費的緩衝槽中的 緩衝槽就緒位來確定它正消費的生產數據是否有效。主控制器將在第一輸入掃描期間通過輸入消費者狀態指明它已就緒,並且在第一 輸出掃描期間用輸出生產者狀態指明輸出就緒。當輸出被禁用時,主控制器必須清除輸出 生產者狀態的最新產生的緩衝槽中的緩衝槽就緒位,以便適當指明無效的輸出數據。在利 用RX3i系統的一個實施例中,主控制器將還不主張(deassert)底板RUN線。類似地,從模塊用其輸入生產者狀態來指明其第一生產周期期間輸入數據是有效 的。從模塊還可用輸出消費者狀態中的消費者就緒位來指明它已準備消費輸出。在該示範實施例中,從模塊在從模塊的啟動序列期間初始化特定欄位。由主模塊 在模塊配置之後立即對I/O掃描設置框中的其餘欄位取樣。這提供在配置期間改變I/O掃 描數據大小和位置的模塊靈活性。如果主模塊具有不隨配置變化的靜態數據大小,則整個 I/O掃描設置框在啟動序列期間被初始化一次。該示範實施例還包括生成指示第一模塊的生產周期的生產者狀態,並且寫入生產 者狀態以指明第二模塊可從其讀取數據的緩衝槽。該示範實施例還包括生成指示第二模 塊的消費周期的消費者狀態,並且寫入消費者狀態以指明第一模塊可向其寫入數據的緩衝槽。在一個實施例中,該方法包括在第一模塊的第一生產周期期間生成數據,並且讀 取指示第二模塊的消費周期的消費者狀態,以便確定寫入第二生產周期的生產數據的位 置。在這個實施例中,該方法還包括在第一生產周期期間對多個緩衝槽中第一緩衝槽生成 數據,並且在第二生產周期期間對多個緩衝槽中第二緩衝槽生成數據。在另一實施例中,該方法包括在第二模塊的第一消費者周期期間讀取數據,並且 讀取指示生產周期的生產者狀態,以便確定新生產數據是否可用於第二消費者周期。在這 個實施例中,該方法還包括在第一消費周期期間從多個緩衝槽中第一緩衝槽讀取數據,並 且在第二消費周期期間從多個緩衝槽中第二緩衝槽讀取數據。本文所使用的、以單數形式所述且帶有詞「一個」或「一種」的要素或步驟應當被理 解為不排除多個所述要素或步驟的情況,除非明確說明這種排除情況。此外,本發明中「一 個實施例」的說法不是要被解釋為排除同樣結合了所述特徵的其它實施例的存在。提供用於在生產者與消費者之間交換數據的系統和方法的示範實施例。這些系統 和方法並不局限於本文所述的具體實施例,而是可單獨且獨立於本文所述的其它組件來使 用該系統的組件。此外,可單獨且獨立於本文所述的其它步驟來使用方法中所述的步驟。
雖然按照各種具體實施例描述了本發明,但是本領域技術人員要領會,在權利要 求書的精神和範圍之內,可經過修改來實施本發明。
權利要求
一種用於在第一模塊與第二模塊之間交換數據的方法,所述方法包括在所述第一模塊生成數據,所述第一模塊配置成允許所述第二模塊實質連續地訪問所述數據;在所述第二模塊讀取所述數據,所述第二模塊配置成允許所述第一模塊實質連續地生成數據;以及在讀取所述數據時在所述第一模塊與所述第二模塊之間交換所述數據。
2.如權利要求1所述的方法,還包括生成指示所述第一模塊的生產周期的生產者狀態;以及 讀取所述生產者狀態,以便指明所述第二模塊可從其讀取所述數據的緩衝槽。
3.如權利要求1所述的方法,還包括生成指示所述第二模塊的消費周期的消費者狀態;以及 讀取所述消費者狀態,以便指明所述第一模塊可向其寫入所述數據的緩衝槽。
4.如權利要求1所述的方法,還包括在所述第一模塊的第一生產周期期間生成數據;以及讀取指示所述第二模塊的消費周期的消費者狀態,以便確定寫入第二生產周期的生產 數據的位置。
5.如權利要求4所述的方法,還包括在所述第一生產周期期間對多個緩衝槽中第一緩衝槽生成數據;以及 在所述第二生產周期期間對多個緩衝槽中第二緩衝槽生成數據。
6.如權利要求1所述的方法,還包括在所述第二模塊的第一消費者周期期間讀取數據;以及讀取指示生產周期的生產者狀態,以便確定新生產數據是否可用於第二消費者周期。
7.如權利要求6所述的方法,還包括在所述第一消費周期期間從多個緩衝槽中第一緩衝槽讀取數據;以及 在所述第二消費周期期間從所述多個緩衝槽中第二緩衝槽讀取數據。
8.一種系統,包括 控制器;以及配置成通過共享存儲器接口與所述控制器交換數據的輸入/輸出模塊,其中所述數據 通過下列步驟進行交換用第一模塊生成所述數據; 在第二模塊讀取所述數據;以及在讀取所述數據時將所述數據從所述第一模塊交換到所述第二模塊,其中所述第一模 塊配置成允許所述第二模塊實質連續地訪問所述數據;以及所述第二模塊配置成允許所述 第一模塊實質連續地生成所述數據。
9.如權利要求8所述的系統,其中,所述數據還通過下列步驟進行交換 生成指示所述第一模塊和所述第二模塊中至少之一的周期的狀態;以及讀取所述狀態,以便指明所述第二模塊可從其讀取數據的第一緩衝槽以及所述第一模 塊可對其生成數據的第二緩衝槽中至少之一。
10.如權利要求8所述的系統,其中,所述數據還通過下列步驟進行交換在所述第一模塊的第一生產周期期間寫入數據;以及讀取指示所述第二模塊的消費周期的消費者狀態,以便確定寫入第二生產周期的生產 數據的位置。
11.如權利要求10所述的系統,其中,所述數據還通過下列步驟進行交換在所述第一生產周期期間將數據寫入多個緩衝槽中第一緩衝槽;以及在所述第二生產周期期間將數據寫入多個緩衝槽中第二緩衝槽。
12.如權利要求8所述的系統,其中,所述數據還通過下列步驟進行交換在所述第二模塊的第一消費者周期期間讀取數據;以及讀取指示生產周期的生產者狀態,以便確定新生產數據是否可用於第二消費者周期。
13.如權利要求12所述的系統,其中,所述數據還通過下列步驟進行交換在所述第一消費周期期間從多個緩衝槽中第一緩衝槽讀取數據;以及在所述第二消費周期期間從多個緩衝槽中第二緩衝槽讀取數據。
14.一種安裝在輸入/輸出模塊中的電腦程式,所述電腦程式包括至少一個代碼 段,所述代碼段配置成指示所述輸入/輸出模塊在第一模塊與第二模塊之間通過下列步驟 交換數據在所述第一模塊生成數據,所述第一模塊配置成允許所述第二模塊實質連續地訪問所 述數據;在所述第二模塊讀取所述數據,所述第二模塊配置成允許所述第一模塊實質連續地生 成數據;以及在讀取所述數據時在所述第一模塊與所述第二模塊之間交換所述數據。
15.如權利要求14所述的電腦程式,其中,所述電腦程式還包括至少一個代碼段, 所述代碼段配置成指示所述輸入/輸出模塊生成指示所述第一模塊的生產周期的生產者狀態;以及讀取所述生產者狀態,以便指明所述第二模塊可從其讀取所述數據的緩衝槽。
16.如權利要求14所述的電腦程式,其中,所述電腦程式還包括至少一個代碼段, 所述代碼段配置成指示所述輸入/輸出模塊生成指示所述第二模塊的消費周期的消費者狀態;以及讀取所述消費者狀態,以便指明所述第一模塊可向其寫入所述數據的緩衝槽。
17.如權利要求14所述的電腦程式,其中,所述電腦程式還包括至少一個代碼段, 所述代碼段配置成指示所述輸入/輸出模塊在所述第一模塊的第一生產周期期間生成數據;以及讀取指示所述第二模塊的消費周期的消費者狀態,以便確定寫入第二生產周期的生產 數據的位置。
18.如權利要求17所述的電腦程式,其中,所述電腦程式還包括至少一個代碼段, 所述代碼段配置成指示所述輸入/輸出模塊在所述第一生產周期期間對多個緩衝槽中第一緩衝槽生成數據;以及在所述第二生產周期期間對多個緩衝槽中第二緩衝槽生成數據。
19.如權利要求14所述的電腦程式,其中,所述電腦程式還包括至少一個代碼段, 所述代碼段配置成指示所述輸入/輸出模塊在所述第二模塊的第一消費者周期期間讀取數據;以及讀取指示生產周期的生產者狀態,以便確定新生產數據是否可用於第二消費者周期。
20.如權利要求19所述的電腦程式,其中,所述電腦程式還包括至少一個代碼段, 所述代碼段配置成指示所述輸入/輸出模塊在所述第一消費周期期間從多個緩衝槽中第一緩衝槽讀取數據;以及 在所述第二消費周期期間從所述多個緩衝槽中第二緩衝槽讀取數據。
全文摘要
提供一種用於在生產者與消費者之間交換數據的方法。該方法包括用生產者寫入數據而沒有阻塞消費者並且無需等待對消費者的訪問。該方法還包括用消費者讀取數據而沒有阻塞生產者並且無需等待對生產者的訪問。在讀取數據時,將該數據從生產者交換到消費者。
文檔編號G06F9/46GK101861568SQ200880116894
公開日2010年10月13日 申請日期2008年7月11日 優先權日2007年9月17日
發明者G·史密斯 申請人:通用電氣公司