5 2 併發和它的管理

2021-06-10 00:40:25 字數 1571 閱讀 5504

在現代 linux 系統, 有非常多的並發源, 並且因此而來的可能競爭情況. 多個使用者空間程序在執行, 它們可能以令人驚訝的方式組合訪問你的**. smp 系統能夠同時在不同處理器上執行你的**. 核心**是可搶占的; 你的驅動**可能在任何時間失去處理器, 代替它的程序可能也在你的驅動中執行. 裝置中斷是能夠導致你的**併發執行的非同步事件.核心也提供各種延遲**執行的機制, 例如 workqueue, tasklet, 以及定時器, 這些能夠使你的**在任何時間以一種與當前程序在做的事情無關的方式執行. 在現代的, 熱插拔的世界中, 你的裝置可能在你使用它們的時候輕易地消失.

避免競爭情況可能是乙個令人害怕的工作. 在乙個任何時候可能發生任何事的世界, 驅動程式員如何避免產生絕對的混亂? 事實證明, 大部分競爭情況可以避免, 通過一些想法, 核心併發控制原語, 以及幾個基本原則的應用. 我們會先從原則開始, 接著進入如何使用它們的細節中

競爭情況來自對資源的共享訪問的結果. 當 2 個執行的線路[17]有機會操作同乙個資料結構(或者硬體資源), 混合的可能性就一直存在. 因此第乙個經驗法則是在你設計驅動時在任何可能的時候記住避免共享的資源. 如果沒有併發訪問, 就沒有競爭情況. 因此小心編寫的核心**應當有最小的共享. 這個想法的最明顯應用是避免使用全域性變數. 如果你將乙個資源放在多個執行線路能夠找到它的地方, 應當有乙個很強的理由這樣做.

事實是, 然而, 這樣的共享常常是需要的. 硬體資源是, 由於它們的特性, 共享的, 軟體資源也必須常常共享給多個執行緒. 也要記住全域性變數遠遠不是共享資料的唯一方式;任何時候你的**傳遞乙個指標給核心的其他部分, 潛在地它創造了乙個新的共享情形. 共享是生活的事實.

這是資源共享的硬規則: 任何時候乙個硬體或軟體資源被超出乙個單個執行執行緒共享, 並且可能存在乙個執行緒看到那個資源的不一致時, 你必須明確地管理對那個資源的訪問. 在上面的 scull 例子, 這個情況在程序 b 看來是不一致的; 不知道程序 a 已經為( 共享的 ) 裝置分配了記憶體, 它做它自己的分配並且覆蓋了 a 的工作. 在這個例子裡, 我們必須控制對 scull 資料結構的訪問. 我們需要安排, 這樣**或者看到記憶體已經分配了, 或者知道沒有記憶體已經或者將要被其他人分配. 訪問管理的常用技術是加鎖或者互斥 -- 確保在任何時間只有乙個執行執行緒可以操作乙個共享資源. 本章剩下的大部分將專門介紹加鎖.

然而, 首先, 我們必須簡短考慮一下另乙個重要規則. 當核心**建立乙個會被核心其他部分共享的物件時, 這個物件必須一直存在(並且功能正常)到它知道沒有對它的外部引用存在為止. scull 使它的裝置可用的瞬間, 它必須準備好處理對那些裝置的請求. 並且 scull 必須一直能夠處理對它的裝置的請求直到它知道沒有對這些裝置的引用(例如開啟的使用者空間檔案)存在. 2 個要求出自這個規則: 除非它處於可以正確工作的狀態, 不能有物件能對核心可用, 對這樣的物件的引用必須被跟蹤. 在大部分情況下, 你將發現核心為你處理引用計數, 但是常常有例外.

遵照上面的規則需要計畫和對細節小心注意. 容易被對資源的併發訪問而吃驚, 你事先並沒有認識到被共享. 通過一些努力, 然而, 大部分競爭情況能夠在它們咬到你或者你的使用者前被消滅.

[17] 本章的意圖, 乙個執行"執行緒"是任何執行**的上下文.每個程序顯然是乙個執行執行緒, 但是乙個中斷處理也是, 或者其他響應乙個非同步核心事件的**.

5 2程序管理

使用uptime命令可顯示系統當前時間 使用者已登入系統的時間 系統中登入使用者的數量 過去的1 5 15分鐘內執行佇列中的平均程序數量。注意 通常,只要每個cpu的當前活動程序數不大於3,則表示系統的效能良好,如果每個cpu的程序數大於5,則表示這台計算機的效能有嚴重問題。2 ps ps命令常用來...

GreenPlum 併發管理

併發管理涉及兩方面的問題 一方面是保證併發事務一致性,另一方面是有效管理資源佇列。greenplum併發和事務管理基於postgresql單節點的mvcc multi version concurrency control,多版本併發控制 和快照特性,並開發了自有的 完備的分布式事務管理機制。pos...

谷歌和它的完美團隊

谷歌最近的一項研究表明,團隊成員間的互動比團隊成員的構成更重要。谷歌研究員總結了谷歌的高效率團隊都具備的五個特徵。安全感 可靠性 目的性 使命感和影響力對團隊效率的影響比職位 技能水平和工作地點帶來的影響要大。在aristotle這個研究專案裡,谷歌收集了來自很多領域的資料。研究員對團隊負責人進行採...