你的位置:首页 > 软件开发 > 操作系统 > Linux2.6内核进程调度系列

Linux2.6内核进程调度系列

发布时间:2016-08-21 02:00:10
RT /** * 递减当前进程的时间片计数器,并检查是否已经用完时间片。 * 由于进程的调度类型不同,函数所执行的操作也有很大差别。 */ /* 如果是实时进程,就进一步根据是FIFO还是RR类型的实时进程 */ if (rt_task(p)) { /** * ...

Linux2.6内核进程调度系列

RT

	/**	 * 递减当前进程的时间片计数器,并检查是否已经用完时间片。	 * 由于进程的调度类型不同,函数所执行的操作也有很大差别。	 */	 /* 如果是实时进程,就进一步根据是FIFO还是RR类型的实时进程 */	if (rt_task(p)) {				/**		 * 对SCHED_RR类型(时间片轮转)的实时进程,需要递减它的时间片。		 * 对SCHED_FIFO类型(先进先出)的实时进程,什么都不做,		 * 退出。在这种情况下,		 * current进程不可能被比其优先级低或其优先级相等的进程所抢占,		 * 因此维持当前进程的最新时间片计数器是没有意义的。		 */		if ((p->policy == SCHED_RR) && !--p->time_slice) {			/**			 * 对SCHED_RR类型的实时进程,如果它的时间片已经用完,			 * 就执行此下动作,以达到抢占当前进程的目的。			 * 如果必要的话,就尽快抢占。			 */			 /* 重新计算它的时间片,它根据进程的静态优先级来计算它的时间片。 */			p->time_slice = task_timeslice(p);			/**			 * 该标志被fork例程中的copy_process设置,			 * 直到这里,说明进程一定不是第一次运行了,			 * 它已经用完了一次它的时间片,将first_time_slice置为0.			 * 这样,它即使退出,也不会将剩余的时间片还给父进程了。			 */			p->first_time_slice = 0;			/**			 * 设置调度标志,以达到尽快抢占的目的。			 * 该标志强制调用schedule函数,以便current指向的进程能			 * 被另外一个有相同优先级(或更高优先级)的实时进程(如果有)所取代。			 */			set_tsk_need_resched(p);			/* put it at the end of the queue: */			/**			 * 将实时进程放到队列末尾。这样,如此链表中还有其他同优先级			 * 的RR进程,其他进程就能够得到运行了。			 */			requeue_task(p, rq->active);		}		goto out_unlock;	}

原标题:Linux2.6内核进程调度系列

关键词:linux

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录