RTOS的Task 是進程還是線程還是協程

好了,今天爲大家講解講解OS中的線程、進程和協程的這幾個概念,同時一起看看RTOS中的任務到底屬於哪一種。

先來看看什麼概念:

線 程(英語:thread)

操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。一條線程指的是進程中一個單一順序的控制流,一個進程中可以併發多個線程,每條線程並行執行不同的任務。在Unix System V及SunOS中也被稱爲輕量進程(lightweight processes),但輕量進程更多指內核線程(kernel thread),而把用戶線程(user thread)稱爲線程。

進 程

是一個具有一定獨立功能的程序關於某個數據集合的一次運行活動。它是操作系統動態執行的基本單元,在傳統的操作系統中,進程既是基本的分配單元,也是基本的執行單元。進程對CPU並不是獨佔連續執行的,OS管理着進程需要經常打斷當前的進程,並對多個進程進行監控調度等。

協 程(Co-Routine)

 我們也知道一個線程裏面可以運行多個協程,其實函數調用就是一種狀態爲初態的協程,A函數中調用B函數,可以認爲是A任務切換到B任務來執行,然後執行完回到A任務,不過這樣調用的任務始終是從初始狀態開始,如果一個函數主動放棄CPU通過保存當前現場,比如寄存器值等,然後恢復到另外一個函數的寄存器狀態,便實現了任意狀態函數的併發執行,就實現了協程。

與函數調用的區別就是主動放棄CPU

對於目前主流的RTOS

  • 首先對於MCU上的堆棧。Task都是共享的,個人認爲是類似單進程多線程模型。

  • MCU一般沒有內存管理模塊MMU等等,這也是爲什麼我們當個任務程序跑飛會導致整個系統無法運行的原因。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章