嵌入式作業系統核心原理和開發(通用優先順序排程)

2021-08-26 22:34:36 字數 1783 閱讀 2257

相比較其他排程演算法而言,時間片的輪轉更多的注重公平性。但是,任務與任務之間也是有先後之分的,有的任務我們希望多安排一些時間片,而有的任務我們則希望少安排一些時間片。比較說,如果我們在上網的話,我們就希望上網的操作響應的更快一些;如果我們在進行gui操作,我們當然就希望圖形響應更快一些。這些都是可以理解的,下面我們就緒要對資料結構進行一些修改。

typedef struct _task_info

task_info;

這裡的priority就是當前執行緒的優先順序,所以最簡單的方法就是根據priority直接分配對應的time_slice。也就是這個函式,

void reset_time_slice ()

所以,以後每次排程的時候,我們就首先尋找當前最高優先順序的任務,看看當前任務安排的時間片是否用完了,沒有用完就繼續執行。如果當前優先順序的任務已經沒有時間片了,那麼此時就可以安排低優先順序的任務進行排程了。

void signal_handler(int m)

galltask[index].time_slice --;

current_thread_id = index;

swap(&old, &galltask[current_thread_id].context);

}

下面,我們就根據任務優先順序挑選下乙個需要執行的thread了,

int find_next_thread()

return index;

}

整個**的流程也不複雜,大家可以執行、單步除錯一把,試試看。

#include #include #include #include #include #include #include #define uint32 unsigned   int

#define stack_length 512

#define thread_max_number 10

typedef struct _task_info

task_info;

static struct itimerval oldtv;

uint32 old = 0;

uint32 count = 0;

uint32 task_stack[thread_max_number][stack_length] = ;

task_info galltask[thread_max_number] = ;

uint32 current_thread_id = 0;

void set_timer()

void swap(uint32* prev, uint32* next)

void hello()

}int find_next_thread()

return index;

}void reset_time_slice ()

void task_init(int index)

void signal_handler(int m)

galltask[index].time_slice --;

current_thread_id = index;

swap(&old, &galltask[current_thread_id].context);

}void set_all_task()

}int main()

exit(0);

return 1;

}

嵌入式作業系統核心原理和開發(中斷)

在我個人看來,中斷是cpu最重要的特色。從某種意義上來說,沒有中斷就沒有嵌入式作業系統。一旦你明白了中斷的真正含義,你對作業系統的了解就算真正入門了。什麼是中斷呢?我們可以看看微控制器下面是怎麼做的。include sbit led p1 6 unsigned int led enable 0 vo...

嵌入式作業系統核心原理和開發(開篇)

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!作業系統是很多人每天必須打交道的東西,因為在你開啟電腦的一剎那,隨著bios自檢結束,你的windows系統已經開始執行了。如果問大家作業系統是什麼?可能有的人會說作業系統就是windows,就是那些可以放大 縮小 移動的視窗。對曾經是計算機專業的...

linux 嵌入式作業系統核心原理和開發總結

01 嵌入式作業系統核心原理和開發 優先順序的修改 02 嵌入式作業系統核心原理和開發 改進的鍊錶記憶體分配演算法 03 嵌入式作業系統核心原理和開發 等值block記憶體池設計 04 嵌入式作業系統核心原理和開發 執行緒狀態 05 嵌入式作業系統核心原理和開發 實時系統中的定時器 06 嵌入式作業...