999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

煤礦安全監控系統多線程雙數據緩存數據處理技術

2021-05-10 09:51:28
煤礦安全 2021年4期

丁 遠

(1.中煤科工集團沈陽研究院有限公司,遼寧 撫順113122;2.煤礦安全技術國家重點實驗室,遼寧 撫順113122)

數據緩存隊列是為了協調不同吞吐速度設備之間數據通信而采用的技術[1]。在基于無主、多主通信方式煤礦監控系統[2]中,當同一分站下的多臺傳感器同一時間內向分站發送數據,會導致監控分站軟件結構中數據處理模塊短時間內處理多幀數據,由于數據處理模塊需要完成解包、解析、封包上傳的工作,導致因為數據接收與數據處理速度不匹配造成的數據包丟失問題。常用的環形隊列策略使用之前需要預設固定尺寸的隊列空間[3],另外在環形隊列寫空間滿時,接收的新數據因為隊列不能實時擴展,所以不能及時進入緩存需丟棄,導致數據丟失,針對此問題參考了生產者/消費者模型,設計了雙緩存隊列結構,解決不可動態擴展、數據溢出丟失問題。此外,為了提升監控分站運行速度,監控分站軟件中使用多線程技術,緩存隊列被多個線程讀寫,各個線程之間存在競爭資源問題,如果考慮不全,會出現饑餓現象,嚴重的會導致死鎖發生,為了避免此問題出現,將多線程安全技術融入到數據處理隊列中,解決資源競爭。

1 雙緩存隊列與線程安全設計

1.1 基礎隊列原理

數據結構理論定義了一種“一端入一端出”的先進先出(FIFO)線性表稱為隊列[4],數據插入端為隊尾,數據讀取端為隊頭。線性表在物理結構上分為順序存儲和鏈式存儲,順序存儲在物理層上可以看做對1 個大數組操作,鏈式存儲則是對分散內存的操作。

順序存儲結構隊列在創建之初需要向內存申請1 塊連續存儲空間,隊列的操作實際是對這個內存空間的操作,因為內存在隊列創建之初大小已經固定,所以當進隊數據量大于內存長度時,會出現隊列滿,無法進隊,丟棄該數據,此現象稱為假溢出。算法設計者常將順序結構的隊列頭、尾連接,并且設計了頭、尾指針以及相關算法,使隊列從結構上看形成環形,稱為環形隊列(有關環形隊列原理本文不多敘述),但是環形隊列中如寫速度大于讀速度會出現覆蓋現象。相對于順序存儲固定內存,鏈式存儲可在插入之前現申請內存,可以在物理結構上解決因隊列長度引起的問題,但是鏈式存儲存在內存碎片、增刪改查等操作的時間復雜度遠大于順序存儲等問題,鑒于此本文所設計的雙緩存技術建立在鏈式存儲結構上,融入環形隊列優點,避免過多內存碎片產生基礎上實現隊列空間充裕,數據不丟失。

1.2 雙緩存隊列設計

由數據緩存隊列與數據溢出隊列構成的雙緩存隊列[5]中,數據緩存隊列負責實現基于生產者/消費者模型算法完成數據源輸入與源數據處理模塊之間數據通信功能,其數據結構采用鏈式隊列組建成單鏈表環形結構。此數據結構結合了順序存儲、鏈式存儲各自優點,既具有鏈式存儲可動態申請內存實現隊列空間動態擴展,又避免了因頻繁申請釋放內存帶來的內存碎片。數據溢出隊列存儲當數據緩存隊列中入隊數據大于出隊數據時的隊列溢出數據,當數據緩存隊列空間足夠時,同步溢出隊列中數據到數據緩存隊列。溢出隊列屬于數據緩存隊列的補充,使用頻率較少,使用時申請內存,同步數據后釋放空間,單鏈表模式。

雙緩存隊列的數據結構分為隊列整體結構以及隊列節點結構,其中隊列節點結構包含于隊列整體結構中,做隊列整體結構的節點域。隊列整體結構由頭指針head、尾指針rear 以及節點計數器cnt 組成,head 與rear 用于進行入隊、出隊,cnt 記錄當前入隊數量,因為隊列中的節點是可復用的,無法通過數據域本身自帶信息判斷是否可寫入,在隊列被并發訪問時,cnt 不等于0 時,代表隊列不為空,有數據可讀;當cnt 小于隊列預設最大節點數量時,代表有空余空間可以入隊,因此可以通過對變量cnt 操作來保證出隊、入隊安全型。節點結構由數據域data、指針域next 構成。

緩存隊列的數據結構圖如圖1。

圖1 緩存隊列數據結構圖Fig.1 data structure of cache queue

1.3 多線程安全設計

為了同時與多路傳感器進行數據通信,系統采用了多線程技術[6]實現系統并發執行。但是多線程對緩存隊列同一時間操作會產生異常發生,如1 個線程或多個線程同時對隊列進行入隊操作時,如果不進行臨界區保護,會導致不可預知的數據損壞,發生hardfault 中斷,系統崩潰;另外如果1 個線程一直占用臨界區,導致其他資源無法訪問,會導致其他線程發生饑餓[7]現象。因此多線程訪問臨界資源時,必須進行同步控制。常用方法為信號量、條件鎖、互斥量等。

綜合各個方法優勢,考慮每個方法可能導致的問題,設計如下方法:

1)條件不滿足時,掛起線程。

2)條件滿足時通過信號量釋放通知進程訪問臨界區。

3)條件等待是線程間同步的一種手段,如果只有1 個線程,條件不滿足,一直等下去都不會滿足,所以必須要有1 個線程通過某些操作,改變共享變量,使原先不滿足的條件變得滿足,并且友好的通知等待在條件變量上的線程。

4)條件不會無緣無故的突然變得滿足了,必然會牽扯到共享數據的變化。所以一定要用互斥鎖來保護。沒有互斥鎖就無法安全的獲取和修改共享數據。

2 算法設計

2.1 出入隊

入隊操作時首先判斷緩沖隊列是否滿隊,如果隊列滿,將待入隊數據插入溢出隊列,否則插入緩沖隊列。當緩沖隊列非滿并且溢出隊列為空,通過對cnt 值確定是否回收緩沖隊列冗余空間;若緩沖隊列非滿并且溢出隊列非空,將溢出隊列數據同步到緩沖隊列中。出隊時需要先判斷隊列是否為空,若非空說明隊列有數據可讀。在預設長度為L 的隊列中,保持head 與read 的相對空間為2 個節點數據長度,每入隊1 個數據head 循環加1,每讀出1 個數據tail 循環加1。讀寫數據時,讀寫指針以不對的速度環繞著緩沖隊列旋轉,head 在前tail 在后。在數據輸入的初始階段,頭指針更新。如果指針指向緩沖區末尾部分,它就會重新回到初始位置,當寫入抵達尾指針,就會停止,在此,緩沖區的數據量已達到頂峰,數據無法錄入。當其指向數據區尾端,且發送工作結束,進行位置刷新;假使其抵達緩沖區尾部,那么指針就會回到初始位置,一旦與頭指針相遇,就表明數據傳輸工作完成。隊列操作示意圖如圖2。

2.2 數據同步與冗余回收

定義數據緩存對列為Qbuf, 溢出隊列為Qof,將Qbuf 的rear 和rear->next 分別隊列Qof 的head 與rear,為了獲取Qbuf 的隊尾節點地址,需要將Qbuf->rear->next 指向Qof 的rear,Qbuf->rear 指向Qof->head。為了實現多線程安全,同步過程避免緩存隊列各個數據節點次序打亂,在同步數據之前需確保緩存隊列中至少有1 個節點可寫入數據。當Qbuf 隊列滿隊時進行數據同步,根據Qbuf->rear 的位置可以判斷有隊列數據要出隊,如果此時暫停入隊操作將Qof 數據同步到Qbuf 隊尾后進行出隊操作,Qbuf->head 指針將異常偏移,導致緩存隊列節點數據間順序錯亂。

當緩存隊列節點cnt 不等于0 時,緩存隊列存在冗余節點,可對Qbuf 進行冗余空間回收[8],常用算法為申請臨時節點指針t,并且t 指向待回收節點,改變rear 指針指向Qbuf->rear->next->next,釋放t,并且cnt 減1。在回收操作之前,要保證緩沖隊列至少有2 個可以寫入的空間,如果只有1 個節點可以寫入數據,此時進行回收空間操作,根據當前的head 位置可知Qbuf 正在進行出隊操作,如果此時暫停,將t 指向待回收節點,并且釋放。當恢復出隊操作時,由于原待出隊節點已經釋放,Qbuf->head 已經下移,該指針域未知,導致指針越界,這是類似多路數據采集與處理系統[9]中最為關鍵嚴重的問題。

3 試驗驗證

以沈陽研究院KJ1177X 煤礦監控系統為平臺,該系統是全國首家符合AQ 6201—2019 行業標準[10]的煤礦監控系統,該系統下的每臺監控分站可接32個傳感器。在實驗室采用與現場井工礦一致的線纜布置搭建采煤工作面環境后,其中傳感器以甲烷傳感器,風速風向傳感器,開停傳感器為主,并且接入少于5 臺斷電器后,配置監控分站為采煤面煤與瓦斯突出斷電與報警模式后進行超限斷電、故障斷線、突出預警實驗以及穩定性試驗。使用Wireshark 工具在PC 端進行以太網異常數據監測,在監控分站軟件中的接收傳感器數據以及上傳數據接口中分別打印相關傳感器數據,人工隨機調整傳感器數據以及制造傳感器斷線故障,觀察相關斷電器是否執行閉鎖操作,并且監控PC 與監控分站端所對應的數據狀態是否一致。在閉鎖試驗后,系統進行不間斷40 d 穩定試驗,查看監測軟件,無異常中斷與數據,并且在此期間無監控分站上傳的傳感器通信中斷指令,表明監控分站到傳感器之間無數據丟失發生。

4 結 語

針對煤礦監控系統中,監控分站既需要處理中心站軟件的指令,又要與大量傳感器進行數據通信,如果處理傳感器數據不及時或數據丟失可能判斷傳感器通信故障,導致相關聯斷電器斷電的問題;設計了帶有多線程安全的雙數據緩存技術的緩存隊列,監控分站先將傳感器數據幀插入隊列存放后,再進行解析處理,另外考慮避免饑餓或死鎖發生。實際應用證明該數據緩存隊列軟件架構清晰,占用內存小,易實現,提升了系統數據處理能力,解決了分站對中心站指令、傳感器數據處理不及時、丟失等問題。

主站蜘蛛池模板: 国产一区二区三区精品久久呦| 国产系列在线| 国产99在线| 99视频国产精品| 国产成人免费视频精品一区二区 | 波多野衣结在线精品二区| 日韩色图在线观看| 2021国产精品自产拍在线| 色综合久久久久8天国| 中国精品自拍| 99re精彩视频| 萌白酱国产一区二区| 亚洲色图欧美在线| 久久综合亚洲色一区二区三区| 波多野结衣一区二区三区四区视频 | 国内熟女少妇一线天| 九九热精品视频在线| 中文字幕日韩欧美| 毛片网站在线播放| 亚洲国产中文在线二区三区免| 美女毛片在线| 国产亚洲视频播放9000| 国产一区二区色淫影院| 91色爱欧美精品www| 啪啪国产视频| 午夜天堂视频| 国产精品天干天干在线观看| 亚洲国产天堂久久综合| 青青草国产在线视频| 亚洲天堂网在线视频| 超碰aⅴ人人做人人爽欧美| 一级爆乳无码av| 国产97视频在线观看| 国产黑丝视频在线观看| 国产精品区视频中文字幕| 美女被狂躁www在线观看| 国产精鲁鲁网在线视频| 伊人色在线视频| 狠狠久久综合伊人不卡| 九九视频在线免费观看| 国产精品一区不卡| 国产高清免费午夜在线视频| 99久视频| www亚洲天堂| 日本精品中文字幕在线不卡| 国产成人午夜福利免费无码r| 91无码人妻精品一区| 国产精彩视频在线观看| 亚洲精品欧美日本中文字幕| 国产精品护士| 91九色国产在线| 国产国产人成免费视频77777| 免费毛片网站在线观看| 亚洲,国产,日韩,综合一区 | 国产高清不卡视频| 日韩欧美国产精品| 亚洲国内精品自在自线官| 人妻精品久久无码区| 香蕉国产精品视频| 真实国产乱子伦视频| 四虎影视库国产精品一区| 国产午夜看片| 亚洲综合激情另类专区| 国产h视频在线观看视频| 亚洲人成日本在线观看| 国产精品第| 狠狠色丁香婷婷综合| 囯产av无码片毛片一级| 91精品国产麻豆国产自产在线| 伊人国产无码高清视频| 国产精品自在自线免费观看| 国产伦精品一区二区三区视频优播| 亚洲日本韩在线观看| 91午夜福利在线观看| 男人的天堂久久精品激情| 国产乱子伦手机在线| 欧美精品在线免费| 欧美精品啪啪一区二区三区| A级毛片无码久久精品免费| 国产精品专区第1页| 国产精品男人的天堂| 又黄又爽视频好爽视频|