目錄
2 核 4 執行緒
1mhz 就是 1us
大小核(big.little)
核心指令(opcode)
手動排程(編譯時刻排程)(compile-time schedule)
自動排程(runtime schedule)
任務平面(task plane)
「任務多元化原則」
資料完整性
共享資源
2 核: cpu 中存在兩條流水線,可以並行執行兩個執行緒。
4 執行緒:cpu 總共提供了 4 個暫存器頁,可以同時儲存 4 套不同的上下文。
1us 對應乙個指令週期。
12mh:1us 時間內就有 12 個指令週期。
500kh:1us 時間內就有 0.5個指令週期。
假設所有指令都是單指令週期的,這樣 1 個指令週期就對應一條指令,假設每條指令都是 2 個位元組大小(16 位指令)。1ms 時間內 1mhz 的系統可以執行大約 2kb 的**,乙個 12mhz 的系統可以執行 24kb 的**。
在 1mhz 的系統中對於乙個 1khz的毫秒中斷,中斷處理程式越接近 2kb,就說明系統越可能「丟中斷「。
我們來看乙個例項:評估乙個 10khz 的外中斷,中斷處理程式允許的理論最大安全尺寸是多少?
首先,我們要搞清楚系統的指令大小和指令集的週期數情況。以 arm cortex m3 為例,其指令大
部分為單週期指令,支援 16 位指令和 32 位指令。為了評估中斷處理程式的尺寸上線,我們可以分別以16 位指令和 32 位指令為基礎計算出兩個結果作為參考範圍;
其次,我們要搞清楚系統頻率。假設系統頻率為 72mhz,已知 10khz 等效於 100us,則中斷處理
程式的理論最大尺寸範圍是(72 * 100 * 2)位元組到(72 * 100 * 4)位元組,即 14.4kb 到 28.8k 之間。取最小值 14.4kb。
結論,中斷處理程式及其呼叫的子函式,其尺寸總和至少要小於 14.4kb 才能確保 10khz 的中斷得
到及時的響應。由於未考慮迴圈、分支以及其它任務的存在,以上結果僅用於粗略的快速評估,實際**通常應該遠小於這一上線值。當實際尺寸接近或者超過 14.4kb 時基本可以判定系統無法及時穩定的響應中斷。
arm cortex a 系列:大小核(big.little)結構。
輪詢(round-robin)/狀態機(fsm)
作業系統(os)在執行時刻(runtime)通過某種排程演算法自動的進行任務拆分和排程的方式。
互有原子性的任務在同乙個任務平面上。
任務平面的定義不具備傳遞性。
裸機環境下,在未開啟中斷巢狀的情況下,具有相同優先順序的中斷處理程式在同乙個任務平面上。每個中斷優先順序都是乙個任務平面。
裸機環境下,超級迴圈裡阻塞執行的任務,乙個任務完成之前不允許別的任務執行,因此相互具有原子性——在同乙個任務平面上。
裸機環境下,超級迴圈裡併發執行的任務,在每個迴圈週期內所有的任務均只執行一小部分,從每個任務的視角來看,任務執行的過程不停的被打斷,因而這些任務彼此之間不具有原子性——處於不同的任務平面上,且每個任務都獨佔乙個任務平面。
作業系統環境下,如果任務的優先順序都必須不同,則每個任務都獨佔乙個任務平面,每個優先順序都是乙個任務平面,例如 µcosii。
作業系統環境下,如果任務的優先順序允許相同,且同優先順序任務彼此不能打斷時,擁有相同優先順序的任務在同乙個任務平面上,每個任務優先順序都是乙個任務平面。
作業系統環境下,如果任務的優先順序允許相同,且同優先順序任務彼此能夠打斷,則所有任務都獨佔乙個任務平面。這種情況我們在後續的模型中有專門的分類和討論。
簡單說就是進行多工開發時,為了保證系統的可靠性,應該假設每個任務彼此都是可以相互打斷的,在這種「最壞」假設下開發出來的**顯然適應所有的情況。
資料完整性問題的本質是操作的原子性問題,是由任務併發特性引起的。
保護共享:在訪問共享資源時遮蔽上下文切換。
# define safe_atom_code(...)
嵌入式Linux多工程式設計 程序 管道 命名管道
pid t new pid new pid fork switch new pid char envp char ar execv char ar execvp char ar execve if execl bin echo echo executed by execl nullptr 0 per...
python 多工程式設計
多工 在同一時間內執行多個任務 多工的目的 多工的最大好處是充分利用cpu資源,提高程式的執行效率 併發 在一段時間內交替執行多個任務 並行 在同一時刻同時執行多個任務 程序 執行中的程式,分配資源的最小單位 執行緒 使用資源的最小單位 程序和執行緒的關係 乙個程式執行後至少有乙個程序,每個程序預設...
多工網路程式設計
1 include 2 include 3 include 4 include 5 include in.h 6 include 7 include link.h 8 9 define port 8888 10int main void 11 31 sin.sin family af inet fi...