--------------------------------------------------------
进程优先级
--------------------------------------------------------
这节实现进程优先级...
1,进程表中添加两个成员
int ticks; /* remained ticks */
int priority;
2,将优先级赋值为 ticks
/* 将进程优先级赋值为 ticks */
proc_table[0].ticks = proc_table[0].priority = 15;
proc_table[1].ticks = proc_table[1].priority = 5;
proc_table[2].ticks = proc_table[2].priority = 3;
3,schedule 函数
PUBLIC void schedule()
{
PROCESS* p;
int greatest_ticks = 0;
while(!greatest_ticks){
for(p = proc_table; p < proc_table + NR_TASKS; p++){
if(p->ticks > greatest_ticks){
/* 找 ticks 最大的进程并选择它 */
greatest_ticks = p->ticks;
p_proc_ready = p;
}
}
if(!greatest_ticks){
for(p = proc_table; p < proc_table + NR_TASKS; p++){
p->ticks = p->priority;
}
}
}
}
4,修改 clock_handler
PUBLIC void clock_handler(int irq)
{
ticks++;
p_proc_ready->ticks--;
// if enenter?
if (k_reenter != 0) {
return;
}
if (p_proc_ready->ticks > 0) {
return;
}
schedule();
}
运行:
OK,可以看到优先级机制是没有问题的!
至此,我们的进程篇章就告一段落了,下一篇章我们将开始探讨 IO !