資料介紹
引 言
在對實時采集更新的數據進行處理時,往往會遇到數據更新速度與數據處理的速度不匹配的問題。這種情況下,會出現數據丟失而導致數據處理結果不準確,甚至會帶來不可預測的后果,因此需要一種機制來協調數據更新與數據處理,從而保證數據的完整性和處理結果的準確性。作為一個多任務、多用戶操作系統,Linux支持多個進程在系統中并發運行,由于進程本身的動態特性,用來描述實時數據處理非常合適,因此,解決好Linux進程間的同步與通信問題就能解決實時數據處理的問題。
在Linux環境下,進程通常存在運行(running)、阻塞(blocked)、就緒(ready)、終止(terminated)四種狀態。當多個進程并發執行時,往往會出現進程間的競態。我們希望進程能協調彼此間的行為,使得一個進程只有在其他的進程執行到一個特定的點時才會執行一個動作,即控制同步;同時,當并發進程訪問共享數據時不應當出現競爭條件。這一點通過在訪問共享數據時執行互斥來確保,即數據訪問同步。
實現同步的基本技術是阻塞一個進程,直到一個特定條件滿足為止;實現數據訪問同步是通過阻塞一個進程直到另外的進程完成訪問共享數據。
1 有限長度緩沖區的生產者一消費者問題模型
當僅存在單個生產者和消費者時,生產進程和消費進程所對應的是同樣的數據結構,它們共享同一個數據空間。生產進程和消費進程如何進行相互協調,使得消費進程每次使用的數據都是生產進程新生產寫人的,又使生產進程新寫入的數據不會覆蓋還未被消費進程讀出使用的數據,是該問題模型實現的關鍵問題。
在生產者一消費者問題模型中,生產者進程不斷生產產品并把它們放入緩沖區,消費者進程不斷從緩沖區中取走產品進行消費。當緩沖區中產品已經放滿時,表示生產速度高于消費速度,出現了供過于求,此時生產者必須等待產品被消費;當緩沖區為空時,表示消費速度高于生產速度,出現了供不應求,此時消費者進程必須等待產品的生產。生產和消費的進程必須達到同步運行,才能實現供需平衡。
處理讀寫同步的兩種常見的策略被稱為“強讀者同步(strong reader synchronization)”和“強寫者同步(strongwriter synchronization)”。在強讀者同步中,總是給讀者以優先權,只要寫者當前沒有進行寫操作,讀者就可以獲得訪問權;在強寫者同步中,寫者總是獲得優先權,只要強讀者當前沒有進行讀操作,寫者就可以獲得訪問權。而生產者消費者同步與單純的讀寫同步又有不同,消費者可以通過訪問資源對資源進行刪除或銷毀。
一個有限長度緩沖區的生產者消費者問題模型,是由若干生產者和消費者進程以及一個有限的緩沖池構成的。每個緩沖區能夠存儲一個信息記錄,一個生產者一次生產一個信息記錄。產生一個記錄之后,等待單獨進入一個空的緩沖區后將記錄寫入緩沖區。一個消費者進程一次消費一個信息記錄。當它需要消費時,它等待單獨進入一個滿的緩沖區后將記錄讀出。
通過上面的描述可以得出,解決生產者一消費者問題模型的方案需要滿足以下幾個條件:
◇生產者不應覆蓋一個滿的緩沖區;
◇消費者不應使用一個空的緩沖區;
◇生產者和消費者應按互斥方式訪問數據緩沖區;
◇數據必須按照先進先出(FIFO)方式;
◇不能出現忙等待。
必須避免數據寫進程不斷、反復地檢查緩沖區直到找到一個空緩沖區為止,而讀進程也必須避免不斷檢查直到找到一個滿緩沖區為止。這相當于系統內部產生忙等待,是在僅使用臨界段(CS)算法實現進程同步時難以避免的問題。
針對問題模型解決方案的限制條件,采用信號量方式解決實時更新數據處理的進程同步問題,即上述的生產者一消費者問題模型。
信號量是一個非負值的共享整數值,只能用于初始化和不可分操作。不可分操作是指在對一個數據D進行操作時不能與任何其他對D的操作重疊的操作。定義操作P和V為不可分操作。P和V的不可分性意味著這些操作不能并發執行,避免了對信號量的競爭條件。定義P和V的操作語義為:

由上述定義的語義看,對一個信號量S的操作,P和V為改變S的值,或者掛起或喚醒一個對S進行P操作的進程。被掛起的進程為阻塞狀態,因而避免了忙等待問題。一個二進制的信號量只取0和1,用來實現互斥。
在P和V操作中,對進程的阻塞和喚醒需要操作系統的進程管理組件的參與,因此信號量會被操作系統實現而不是應用程序實現。
在對實時采集更新的數據進行處理時,往往會遇到數據更新速度與數據處理的速度不匹配的問題。這種情況下,會出現數據丟失而導致數據處理結果不準確,甚至會帶來不可預測的后果,因此需要一種機制來協調數據更新與數據處理,從而保證數據的完整性和處理結果的準確性。作為一個多任務、多用戶操作系統,Linux支持多個進程在系統中并發運行,由于進程本身的動態特性,用來描述實時數據處理非常合適,因此,解決好Linux進程間的同步與通信問題就能解決實時數據處理的問題。
在Linux環境下,進程通常存在運行(running)、阻塞(blocked)、就緒(ready)、終止(terminated)四種狀態。當多個進程并發執行時,往往會出現進程間的競態。我們希望進程能協調彼此間的行為,使得一個進程只有在其他的進程執行到一個特定的點時才會執行一個動作,即控制同步;同時,當并發進程訪問共享數據時不應當出現競爭條件。這一點通過在訪問共享數據時執行互斥來確保,即數據訪問同步。
實現同步的基本技術是阻塞一個進程,直到一個特定條件滿足為止;實現數據訪問同步是通過阻塞一個進程直到另外的進程完成訪問共享數據。
1 有限長度緩沖區的生產者一消費者問題模型
當僅存在單個生產者和消費者時,生產進程和消費進程所對應的是同樣的數據結構,它們共享同一個數據空間。生產進程和消費進程如何進行相互協調,使得消費進程每次使用的數據都是生產進程新生產寫人的,又使生產進程新寫入的數據不會覆蓋還未被消費進程讀出使用的數據,是該問題模型實現的關鍵問題。
在生產者一消費者問題模型中,生產者進程不斷生產產品并把它們放入緩沖區,消費者進程不斷從緩沖區中取走產品進行消費。當緩沖區中產品已經放滿時,表示生產速度高于消費速度,出現了供過于求,此時生產者必須等待產品被消費;當緩沖區為空時,表示消費速度高于生產速度,出現了供不應求,此時消費者進程必須等待產品的生產。生產和消費的進程必須達到同步運行,才能實現供需平衡。
處理讀寫同步的兩種常見的策略被稱為“強讀者同步(strong reader synchronization)”和“強寫者同步(strongwriter synchronization)”。在強讀者同步中,總是給讀者以優先權,只要寫者當前沒有進行寫操作,讀者就可以獲得訪問權;在強寫者同步中,寫者總是獲得優先權,只要強讀者當前沒有進行讀操作,寫者就可以獲得訪問權。而生產者消費者同步與單純的讀寫同步又有不同,消費者可以通過訪問資源對資源進行刪除或銷毀。
一個有限長度緩沖區的生產者消費者問題模型,是由若干生產者和消費者進程以及一個有限的緩沖池構成的。每個緩沖區能夠存儲一個信息記錄,一個生產者一次生產一個信息記錄。產生一個記錄之后,等待單獨進入一個空的緩沖區后將記錄寫入緩沖區。一個消費者進程一次消費一個信息記錄。當它需要消費時,它等待單獨進入一個滿的緩沖區后將記錄讀出。
通過上面的描述可以得出,解決生產者一消費者問題模型的方案需要滿足以下幾個條件:
◇生產者不應覆蓋一個滿的緩沖區;
◇消費者不應使用一個空的緩沖區;
◇生產者和消費者應按互斥方式訪問數據緩沖區;
◇數據必須按照先進先出(FIFO)方式;
◇不能出現忙等待。
必須避免數據寫進程不斷、反復地檢查緩沖區直到找到一個空緩沖區為止,而讀進程也必須避免不斷檢查直到找到一個滿緩沖區為止。這相當于系統內部產生忙等待,是在僅使用臨界段(CS)算法實現進程同步時難以避免的問題。
針對問題模型解決方案的限制條件,采用信號量方式解決實時更新數據處理的進程同步問題,即上述的生產者一消費者問題模型。
信號量是一個非負值的共享整數值,只能用于初始化和不可分操作。不可分操作是指在對一個數據D進行操作時不能與任何其他對D的操作重疊的操作。定義操作P和V為不可分操作。P和V的不可分性意味著這些操作不能并發執行,避免了對信號量的競爭條件。定義P和V的操作語義為:

由上述定義的語義看,對一個信號量S的操作,P和V為改變S的值,或者掛起或喚醒一個對S進行P操作的進程。被掛起的進程為阻塞狀態,因而避免了忙等待問題。一個二進制的信號量只取0和1,用來實現互斥。
在P和V操作中,對進程的阻塞和喚醒需要操作系統的進程管理組件的參與,因此信號量會被操作系統實現而不是應用程序實現。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 永磁同步電機控制解析合集 84次下載
- Linux用戶態開發驅動教程及基礎知識 7次下載
- Linux內核進程調度schedule深入理解的詳細資料說明 5次下載
- 關于進程與線程的解析PDF文件資料
- Linux教程之進程的概念和進程管理命令的使用 2次下載
- linux進程的深入理解 2次下載
- Linux系統管道和有名管道的通信機制解析 0次下載
- Linux進程調度的原理解析 1次下載
- 進程間通信之Linux下進程間通信概述 0次下載
- Linux守護進程詳解 0次下載
- Linux進程控制編程 0次下載
- Linux源碼分析系列的進程 32次下載
- LINUX系統下多線程與多進程性能分析
- Linux 2.6進程調度
- Linux進程管理 0次下載
- Linux系統進程管理入門指南 971次閱讀
- Linux用戶身份與進程權限詳解 1.2k次閱讀
- 讀寫分離怎么保證數據同步 2.1k次閱讀
- Linux中進程、線程和協程的基礎概念 1.5k次閱讀
- 淺談Linux kernel中的同步機制 1.5k次閱讀
- 如何在Linux使用ps/pstree/top命令查看進程 2.4k次閱讀
- 三態模型/五態模型/七態模型說明 Linux操作系統的進程狀態轉換 6.1k次閱讀
- 一行代碼教你如何隱藏Linux進程 2.5k次閱讀
- Linux:測試進程占用的虛擬內存大小 3.4k次閱讀
- 虛擬機:linux 進程的最大線程個數 3.2k次閱讀
- Linux進程調度時機概念分析 3.3k次閱讀
- 嵌入式Linux中進程調度怎樣來解析 883次閱讀
- Linux進程管理:什么是進程?進程的生命周期 8.9k次閱讀
- 基于嵌入式操作系統Linux環境中的沒有競爭態讀寫進程同步設計 906次閱讀
- 基于Linux進程管理的詳細剖析 4.2k次閱讀
下載排行
本周
- 1冷柜-電氣控制系統講解
- 13.68 MB | 4次下載 | 10 積分
- 2安川A1000變頻器中文版說明書
- 20.16 MB | 3次下載 | 3 積分
- 3直流電路的組成和基本定律
- 1.67 MB | 2次下載 | 免費
- 4丹佛斯2800系列變頻器說明書
- 8.00 MB | 1次下載 | 5 積分
- 5PC8011同步開關型降壓3.5A單節鋰電池充電管理電路技術手冊
- 0.74 MB | 1次下載 | 免費
- 6ES7243E+ES8311音頻錄制與播放電路資料
- 0.06 MB | 1次下載 | 5 積分
- 7SDM02 激光測距模塊產品手冊
- 0.43 MB | 1次下載 | 免費
- 8SDFM 激光測距模塊模組手冊
- 0.54 MB | 1次下載 | 免費
本月
- 1CH341編程器軟件NeoProgrammer_2.2.0.10
- 20.47 MB | 170次下載 | 1 積分
- 22025智能家居傳感器市場分析及創新應用
- 3.11 MB | 43次下載 | 免費
- 3RV1126B系列開發板產品資料
- 4.19 MB | 18次下載 | 免費
- 4CH341編程軟件下載
- 2.50 MB | 16次下載 | 5 積分
- 5全志系列-米爾基于T153核心板開發板 四核異構、3路千兆網,賦能多元化工業場景
- 3.05 MB | 12次下載 | 免費
- 6【開源】60余套STM32單片機、嵌入式Linux、物聯網、人工智能項目案例及入門學習資源包
- 10.55 MB | 8次下載 | 免費
- 7冷柜-電氣控制系統講解
- 13.68 MB | 4次下載 | 10 積分
- 8特斯拉MODEL S車載充電機主電路回路原理圖
- 0.81 MB | 4次下載 | 3 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233094次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191448次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183356次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81604次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73824次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發燒友App





創作
發文章
發帖
提問
發資料
發視頻
上傳資料賺積分
評論