欢迎来到天天文库
浏览记录
ID:36221199
大小:111.00 KB
页数:7页
时间:2019-05-07
《嵌入式操作系统内核原理和开发(改进型优先级调度)》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、软件英才网软件行业驰名招聘网站嵌入式操作系统内核原理和开发(改进型优先级调度)上面的一篇博客说到了优先级调度,但是那个优先级调度算法比较极端。打个比方说,现在王先生有三个小孩,分别是老大、老二、老三。假设现在到了饭点,王先生需要给三个小孩喂饭。此时如果是时间片轮转的话,那么就是绝对公平,王先生每人一口不停地进行喂饭。如果是优先级调度,那么王先生首先自己有一个优先级考量,比如说三个小孩按照年龄顺序优先级是逐渐提高的,毕竟小孩需要更多的照顾嘛。这个时候如果需要进行喂饭的话,那么王先生需要首先伺候好最小的那个小孩老三,才会有时间照顾老二,至于老大什么时候才能得到照顾那就看造化了。
2、现在,我们打算重新换一种方法。假设三个小孩的优先级分别是1、2、3,其中年龄越小优先级越高,3代表高优先级。接着,我们按照优先级给三个小孩安排时间片,分别是1、2、3。同时,这个时间片不光代表了当前可用的剩余时间,还代表了小孩此时的临时优先级。(1)首先王先生给老三喂饭,时间片降低1,即临时优先级为2;(2)接着王先生判断当前优先级最高的仍为老三,毕竟老二的优先级也没有超过老三,所以老三的时间片降1,临时优先级为1;(3)王先生获知当前优先级最高的为老二,老二获得时间片;(4)此时王先生发现三个孩子的临时优先级都一样,那么就会按照固定优先级的大小依次对老三、老二、老大进行喂
3、饭。我们发现,这中间受益最大的就是老二。当然,我们可以做进一步推论,如果老王的孩子越多,那么优先级处于中间的孩子在时间片的分配上将更加均匀,响应也会更加及时,交互性也会变得很好。根据以上的想法,我们重新改写了优先级调度算法,修改为改进型优先级调度算法,[cpp]viewplaincopy1intfind_next_thread()2{3intindex;4intchoice=THREAD_MAX_NUMBER-1;5intvalue=gAllTask[choice].time_slice;有需要请联系我们软件英才网软件行业驰名招聘网站12for(index=choice-1
4、;index>=0;index--)3{4if(value5、TY_SCHEDULE018#defineSOFT_PRIORITY_SCHEDULE1这些代码都是可以在系统中共存的。选用什么算法,取决于实际情况是什么样的情形。[cpp]viewplaincopy19#include20#include21#include22#include23#include24#include25#include2627#defineUINT32unsignedint28#defineSTACK_LENGTH516、229#defineTHREAD_MAX_NUMBER1030#defineTIME_ROUND_SCHEDULE031#defineHARD_PRIORITY_SCHEDULE032#defineSOFT_PRIORITY_SCHEDULE13334typedefstruct_TASK_INFO35{36UINT32id;有需要请联系我们软件英才网软件行业驰名招聘网站1UINT32*stack;2UINT32size;3UINT32context;4UINT32priority;5UINT32time_slice;6void(*func)();78}TASK_INFO;97、10staticstructitimervaloldtv;11UINT32old=0;12UINT32count=0;13UINT32task_stack[THREAD_MAX_NUMBER][STACK_LENGTH]={0};14TASK_INFOgAllTask[THREAD_MAX_NUMBER]={0};15UINT32current_thread_id=0;1617voidset_timer()18{19structitimervalitv;20itv.it_interval.tv_sec=1;21it
5、TY_SCHEDULE018#defineSOFT_PRIORITY_SCHEDULE1这些代码都是可以在系统中共存的。选用什么算法,取决于实际情况是什么样的情形。[cpp]viewplaincopy19#include20#include21#include22#include23#include24#include25#include2627#defineUINT32unsignedint28#defineSTACK_LENGTH51
6、229#defineTHREAD_MAX_NUMBER1030#defineTIME_ROUND_SCHEDULE031#defineHARD_PRIORITY_SCHEDULE032#defineSOFT_PRIORITY_SCHEDULE13334typedefstruct_TASK_INFO35{36UINT32id;有需要请联系我们软件英才网软件行业驰名招聘网站1UINT32*stack;2UINT32size;3UINT32context;4UINT32priority;5UINT32time_slice;6void(*func)();78}TASK_INFO;9
7、10staticstructitimervaloldtv;11UINT32old=0;12UINT32count=0;13UINT32task_stack[THREAD_MAX_NUMBER][STACK_LENGTH]={0};14TASK_INFOgAllTask[THREAD_MAX_NUMBER]={0};15UINT32current_thread_id=0;1617voidset_timer()18{19structitimervalitv;20itv.it_interval.tv_sec=1;21it
此文档下载收益归作者所有