FreeRTOS — 任務調度—搶占式,時間片和合作式


以下內容轉載自安富萊電子:http://forum.armfly.com/forum.php

FreeRTOS 操作系統支持的任務調度方式:搶占式,時間片和合作式。

這部分算是 FreeRTOS 操作系統的核心了。

1、關 於 合 作 式 調 度 器 的 特 別 說 明

  關於合作式調度器,官方進行了特別的說明,說明如下:請點擊這里

2、FreeRTOS  支 持 的 調 度 方 式

  FreeRTOS 操作系統支持三種調度方式:搶占式調度,時間片調度和合作式調度。實際應用主要是搶占式調度和時間片調度,合作式調度用到的很少。

3 、什 么 是 調 度 器

  簡單的說,調度器就是使用相關的調度算法來決定當前需要執行的任務。所有的調度器有一個共同的特性:

 4、 搶 占 式 調 度 器

4.1 搶占式調度器基本概念

  在實際的應用中,不同的任務需要不同的響應時間。例如,我們在一個應用中需要使用電機,鍵盤和LCD 顯示。電機比鍵盤和 LCD 需要更快速的響應,如果我們使用合作式調度器或者時間片調度,那么電機將無法得到及時的響應,這時搶占式調度是必須的。

  如果使用了搶占式調度,最高優先級的任務一旦就緒,總能得到 CPU 的控制權。比如,當一個運行着的任務被其它高優先級的任務搶占,當前任務的 CPU 使用權就被剝奪了,或者說被掛起了,那個高優先級的任務立刻得到了 CPU 的控制權並運行。又比如,如果中斷服務程序使一個高優先級的任務進入就緒態,中斷完成時,被中斷的低優先級任務被掛起,優先級高的那個任務開始運行。

  使用搶占式調度器,使得最高優先級的任務什么時候可以得到 CPU 的控制權並運行是可知的,同時使得任務級響應時間得以最優化。

  總的來說,學習搶占式調度要掌握的最關鍵一點是:每個任務都被分配了不同的優先級,搶占式調度器會獲得就緒列表中優先級最高的任務,並運行這個任務。

4.2 FreeRTOS 搶占式調度器的實現

  如果用戶在 FreeRTOS 的配置文件 FreeRTOSConfig.h 中禁止使用時間片調度,那么每個任務必須配置不同的優先級。當 FreeRTOS 多任務啟動執行后,基本會按照如下的方式去執行:

下面我們通過如下的框圖來說明一下搶占式調度在 FreeRTOS 中的運行過程。

 

上面就是一個簡單的不同優先級任務通過搶占式調度進行任務調度和任務切換的過程。

5 、 時 間 片 調  度 器

5.1 時間片調度器基本概念

  在小型的嵌入式 RTOS 中,最常用的的時間片調度算法就是 Round-robin 調度算法。這種調度算法可以用於搶占式或者合作式的多任務中。另外,時間片調度適合用於不要求任務實時響應的情況。

  實現 Round-robin 調度算法需要給同優先級的任務分配一個專門的列表,用於記錄當前就緒的任務,並為每個任務分配一個時間片(也就是需要運行的時間長度,時間片用完了就進行任務切換)

5.2 FreeRTOS 時間片調度器的實現

  在 FreeRTOS 操作系統中只有同優先級任務才會使用時間片調度,另外還需要用戶在FreeRTOSConfig.h 文件中使能宏定義:

#define configUSE_TIME_SLICING 1

默認情況下,此宏定義已經在 FreeRTOS.h 文件里面使能了,用戶可以不用在 FreeRTOSConfig.h 文件中再單獨使能。

下面通過如下的框圖來說明一下時間片調度在 FreeRTOS 中的運行過程:

上面就是一個簡單的同優先級任務通過時間片調度進行任務調度和任務切換的過程。

 

 

 

 

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM