【SylixOS RMS 調度】

      RMS(Rate Monotonic Secheduling)是一種可以提供固定任務週期的調度系統。與普通的隨機式的、不可預測的調度系統不同,RMS可以提供固定的、可設置的調度週期,且精度可達到納秒級。多個RMS調度之間優先級按照週期越小優先級越高的原則。

函數原型:

      sched_rms_init()爲線程 thread 創建一個rms調度器,sched_rms_destroy()用於刪除一個rms調度器。sched_rms_period()啓動rms調度器,period爲週期。執行sched_rms_period()後會開始計時,直到下次執行sched_rms_period()時,若未到設置週期則阻塞到時間到達,若超過設置週期則會發生溢出錯誤;

測試代碼如下:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sched_rms.h>
#include <pthread.h>

int main (int argc, char **argv)
{
    int              i;
    sched_rms_t      rms;
    struct timespec  period;

    period.tv_sec    = 3;
    period.tv_nsec   = 0;

    if (sched_rms_init(&rms, pthread_self()) < 0) {
        perror("sched_rms_init");
        return  (PX_ERROR);
    }

    for (i = 0; i < 5; i++) {
        if (sched_rms_period(&rms, &period) < 0) {
            perror("sched_rms_period");
            return  (PX_ERROR);
        }
        system("date");
    }

    if (sched_rms_destroy(&rms) < 0) {
        perror("sched_rms_destroy");
        return  (PX_ERROR);
    }
    return  (0);
}

運行結果:

若在system("data");之後加入一句sleep(5),則會迫使調度器超時,從而引發溢出超時錯誤,如下:

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