pSchedule.pptVIP

  • 10
  • 0
  • 约4.63千字
  • 约 20页
  • 2016-02-25 发布于江苏
  • 举报
pSchedule.ppt

GeekOS调度算法的设计与实现 实验目的 掌握进程调度算法 掌握GeekOS中的进程调度过程 能够给GeekOS添加FCFS调度算法并进行测试 系统已经存在的调度算法: 优先级调度算法(priority-scheduling algorithm,PSA) 、 轮转调度算法(Round-Robin,RR),又称时间片轮转法 GeekOS中优先级调度算法的实现 优先权,又称优先级调度算法(priority-scheduling algorithm) 基本思想:每个进程都有一个优先级来表示其享有的调度优先权,CPU分配给具有最高优先级的进程,具有相同优先级的进程按FCFS顺序调度。 在就绪队列中查找优先级最高的进程 static __inline__ struct Kernel_Thread* Find_Best (struct Thread_Queue* queue){ /* Pick the highest priority thread */ struct Kernel_Thread *kthread = queue-head, *best = 0; while (kthread != 0) { if (best == 0 || kthread-priority best-priority) best = kthread; //best保存就绪队列中优先级最高的进程 kthread = Get_Next_In_Thread_Queue(kthread); } return best; } GeekOS中轮转调度算法的实现 轮转调度算法(Round-Robin,RR),又称时间片轮转法 基本思想: 1)将CPU的处理时间分成固定大小的时间片 2)所有的就绪进程按FCFS原则排成一个队列 3)每次调度时把CPU分配给队首元素,并令其执行一个时间片。如果一个时间片用完,但未完成要求的任务,则它主动释放自己占有的CPU而排到就绪队列的末尾,等待下一次调度。同时,进程调度程序又去调度就绪队列中的第一个进程。 Timer_Interrupt_Handler(1/2) 定时器中断服务程序Timer_Interrupt_Handler,位于timer.c中。 PC机的可编程定时芯片Intel 8253 的OUT引脚连接在8259的0级上,因此系统每隔一个10ms就发出一个时钟中断请求(IRQ0)、这个时间节拍是操作系统运行的脉搏,称之为1个系统滴答(tick)或一个系统时钟周期。 因此,每经过1个滴答时间,系统就会调用一次时钟中断处理程序Timer_Interrupt_Handler Timer_Interrupt_Handler(2/2) Timer_Interrupt_Handler: 通过全局变量g_numTicks来累计自系统启动以来经过的时钟滴答数。每发生一次时钟中断g_numTicks就增加1。 当前进程的numTicks增加1,当其值大于等于g_Quantum时,需要调度其它进程,并把当前进程移至较低一级优先级队列中。 static void Timer_Interrupt_Handler(struct Interrupt_State* state) { …… struct Kernel_Thread* current = g_currentThread; /* Update global and per-thread number of ticks */ ++g_numTicks; ++current-numTicks; /*如果当前进程已经完成分配给它的时间片,那么中断将返回一个代码表示我们需要重新调度一个进程. */ if (g_SchedPolicy == RR){ if (current-numTicks = g_Quantum) {   g_needReschedule = true; current-numTicks=0; /*当此中断返回后,到lowlevel.asm 中的226 行执行HandleInterrupt 包括如下功能 : Make_Runnable, Get_Next_Runnable, g_needReschedule=0,Activate_User_Context. */ } } } 从队列中获取队首元素 static __inline__ struct Kernel_Thread* Find_Next(struct Thread_Queue* queue) { struct Kernel_Thread *kthr

文档评论(0)

1亿VIP精品文档

相关文档