在我們實際開發或者構思項目的過程中,會根據產品的定義或者客戶需求對產品的功能上進行分解從而轉換成我們軟件的開發的概要設計需求表現,比如我們需要做一個多路可調的電源輸出并且可以通過 PC 端控制電源的當前輸出以及實時顯示當前的輸出電壓和電流,但是接上負載之后可能由于線阻問題可能會導致負載端的電壓低于實際輸出端的電壓,所以還需要一個負載端(遠端)的電壓補償功能,如下圖1所示:

1.1 任務定義
在上述圖 1 和圖 2 的設計模塊的功能圖和功能關系圖之后,此時我們可以通過上述圖能發現哪些功能或者說模塊需要設計的,其實這里的“多通道電源控制”就是我們的“任務”。現在我們把這個大的任務已經分解開上述圖 1 所示的 5 個小功能,這個 5 個小的功能咱們也可以稱之為任務。
1.2 觀察者角度
所以這里我們軟件上對“ 任務” 的理解,其實它是我們對所要做的一件事情從某種角度上的抽象出來的一功能或者一個執行活動。 這里面為什么是從某種角度呢?這個很好理解,就是通常我們看到一個事情可以有很多方面去觀察的,比如事物的功能去劃分觀察,又或者是對事物的顏色或者活動狀態去劃分。所以在我們軟件開發過程中“某種角度”也就是說觀察者的觀察方向很重要,因為它直接的影響到了我們的軟件模塊劃分以及后續針對這個模塊進行線程或者進程的執行有著直接影響。
1.3 操作系統的調度
這里面我們不得不說些關于操作系統的調度這個概念了, 當有一堆任務需要被處理,但由于資源有限,比如說只有一臺打印機,現在有很多人都需要打印各自的文檔那怎么辦呢?現在的資源(打印機)只有一個,但任務(很多人需要打印)比較多。 這就需要確定某種規則來決定處理這些任務,這就是調度要做的事情了。 現在回到我們的 CPU 上,就拿現在的單核 CPU, CPU 在同一個時間點只能做一件事情,那它是如何處理多件不同的事情呢? 這里一般情況分為搶占式和時間片式的調度方式,當然還有很多其它的調度算法,咱們只是
了解即可。
1.4 線程
線程則是某一進程中一路單獨運行的程序。也就是說,線程存在于進程之中。一個進程由一個或多個線程構成,各線程共享相同的代碼和全局數據,但各有其自己的堆棧。由于堆棧是每個線程一個,所以局部變量對每一線程來說是私有的。由于所有線程共享同樣的代碼和全局數據,它們比進程更緊密,比單獨的進程間更趨向于相互作用,線程間的相互作用更容易些,因為它們本身就有某些供通信用的共享內存:進程的全局數據。線程是進程中執行運算的最小單位,亦即執行處理機調度的基本單位。 如果把進程理解為在邏輯上操作系統所完成的任務,那么線程表示完成該任務的許多可能的子任務之一。 還是列舉上述圖 1 的例子“多通道電源控制”項目。這里面的“多通道電源控制”的這個大任務,如果把它當作一個進程的話,那么它下面 5 個小任務就可以理解為我們的線程(子任務)。線程可以在處理器上獨立調度執行,這樣,在多處理器環境下就允許幾個線程各自在單獨處理器上進行。操作系統提供線程就是為了方便而有效地實現這種并發性,當然在單處理器上的線程,其實從宏觀角度來看也是并行執行的。
1.5 進程
進程是表示資源分配的基本單位,又是調度運行的基本單位。例如,用戶運行自己的程序,系統就創建一個進程,并為它分配資源,包括各種表格、內存空間、磁盤空間、 I/O 設備等。然后,把該進程放人進程的就緒隊列。進程調度程序選中它,為它分配 CPU 以及其它有關資源,該進程才真正運行。所以,進程是系統中的并發執行的單位。一個進程和一個線程最顯著的區別是:線程有自己的全局數據。線程存在于進程中,因此一個進程的全局變量由所有的線程共享。由于線程共享同樣的系統區域,操作系統分配給一個進程的資源對該進程的所有線程都是可用的,正如全局數據可供所有線程使用一樣。


郵箱:TianjiStar.work@outlook.com
-
cpu
+關注
關注
68文章
11053瀏覽量
216249 -
FreeRTOS
+關注
關注
12文章
492瀏覽量
63900 -
線程
+關注
關注
0文章
507瀏覽量
20109 -
進程
+關注
關注
0文章
207瀏覽量
14239
發布評論請先 登錄
深入理解和實現RTOS_連載
深入理解和實現RTOS_連載
【MiCOKit試用體驗】慶科MiCO系統篇(1)MiCO RTOS線程
進程與線程的通俗解釋
理解任務切換和任務狀態改變的關鍵是什么?
【資料】RT-Threa操作系統中任務的概念及實現任務所用到的數據結構
多進程與多線程的基本概念
基于RTOS的應用進程中的典型線程

評論