操作系统任务调度的原理(个人总结):
创建两个任务A、B
任务A的优先级>任务B的优先级(计算机根据任务的优先级大小让谁先执行)
A运行->任务A运行完->调用void OSTimeDly (INT32U ticks);函数,交出CPU的使用权,作用是让任务A运行态转换成等待状态,引发一次任务调度,任务调度函数void OS_Sched (void);作用是查找处于就绪状态优先级最高的任务B->进行任务切换OS_TASK_SW();切换到任务B工作->任务B运行完成->B由运行态转换成等待状态->计算机查找处于就绪状态优先级最高的任务->没有任务待运行->计算机进入到空闲任务(计算机是不能停下来的),前提条件是没有任务再运行了->这时任务A产生定时时间到,即任务A控制块里的ptcb->OSTCBDly减到0(计算机会产生一个硬件定时器中断,进入中断服务函数void OSTimeTick (void);该中断服务函数的作用是每个中断来临,把任务A和任务B控制块里面的ptcb->OSTCBDly--;操作,其中ptcb->OSTCBDly最初的值是void OSTimeDly (INT32U ticks)函数传进去的tick的值)->任务A由等待状态转换成就绪状态->再次任务调度void OS_Sched (void);查找优先级最高的就绪状态的任务A->进行任务切换OS_TASK_SW();->再次让任务A运行起来。循环往复。以上就是操作系统任务调度的原理。
第二章
操作系统是一种管理软件,程序控制块就是对各个任务管理的结构体。
这个结构体是通过链表链接,为了提高查找速度,再加上一个数组,数组的各个元素存储了链表成员的指针。
Typedef struct tcb{
Char*code_name;
Intp;
Intv_number;
Void(*fun)(void);//函数指针,指向各个任务