schedule()函数的实现
函数schedule()实现调度程序。它的任务是从运行队列的链表中找到一个进程,并随后就CPU分配给这个进程。
schedule()函数实现的功能分为三个部分:
(1)进程切换之前所执行的操作。
(2)完成进程切换时所执行的操作。
(3)进程切换之后所执行的操作。
1 进程切换之前所执行的操作。
进程切换之前的主要操作就是找到一个进程来替换当前正在执行的进程。在schedule()函数中,定义了一个局部变量 task_t *next,该部分的主要任务就是要找这个变量指向被选中的进程,并代替current进程。接下来具体说明该函数在进程切换之前的所进行的操作:
(1)首先禁止内核抢占,并初始化一些局部变量:
preempt_disable();
prev = current;
rq = this_rq();
(2)要保证prev不占用大内核锁。
(3)调用sched_clock()函数以读取TSC(Time Stamp Counter)