作者:推球了 | 来源:互联网 | 2017-07-19 22:28
(1)任务切换是调用schedule()函数实现的。它首先检测alarm(进程报警定时值),唤醒任何已得到信号的可中断任务。然后从任务数组中最后一个任务开始循环处理并跳过不含任务的数组槽,比较每一个就绪状态任务的counter值,选出最大值的任务,或者系统中没有一个可运行的任务存在,则选择任务0。然后调用switch_to()切换至被选出的任务。如果有可运行任务但counter值都为0,则根据每个任务的优先权值,更新每一个任务的counter值,然后再重新进行比较选择。
(2)switch_to(n)将切换当前任务到任务n,首先检测任务n是不是当前任务,如果是则什么也不做,退出。否则进行任务切换,跳转到TSS段选择符会造成任务切换到该TSS对应的进程,每个进程的TSS对应着它的进程号所在的task[]数组中。