コード例 #1
0
ファイル: proc.c プロジェクト: Jasminekiki/OSdesign
PUBLIC void schedule()
{
	PROCESS*	p;
	int 		greatest_priority=0;
	int 		i;
	
	while (!greatest_priority) 
	{
		if (firstLen-firstHead>0)
		{		
			p_proc_ready=firstQueue[firstHead];	
			//greatest_priority=p_proc_ready->ticks;
			greatest_priority=p_proc_ready->priority;
			break;
		}
		else if(secondLen-secondHead>0)						
		{
			for (i=0; i<secondLen; i++)		
			{
				p=secondQueue[i];
				if (p->state!=kRUNNABLE || p->ticks==0) continue;
				if (p->ticks > greatest_priority) 
				{
					greatest_priority = p->ticks;
					p_proc_ready = p;
				}
				/*{	
					if (p->priority>greatest_priority && p->ticks!=0)
					{
						greatest_priority=p->priority;
						p_proc_ready=p;
					}
				}*/
			}
		}
		else
		{
			for(i=0;i<lastLen;i++)
			{
				p=lastQueue[i];
				if (p->ticks > greatest_priority) 
				{
					greatest_priority = p->ticks;
					p_proc_ready = p;
				}
			}
		}
		if (!greatest_priority)	initializeAllPro();
	}
	p_proc_ready->state=kRUNNING;
}
コード例 #2
0
ファイル: proc.c プロジェクト: Billniu/OS-Design
PUBLIC void schedule()
{
	PROCESS*	p;
	int 		greatest_priority=0;
	int 		i;
	
	while (!greatest_priority) 
	{
		if (firstLen-firstHead>0)
		{		
			p_proc_ready=firstQueue[firstHead];	//第一个队列按照先到先得
			greatest_priority=p_proc_ready->ticks;
			break;
		}
		else						//第二个队列按照优先级
		{
			for (i=0; i<secondLen; i++)		//第二个队列增设判断是否为runnable状态
			{
				p=secondQueue[i];
				if (p->state!=kRUNNABLE || p->ticks==0) continue;
				if (p->ticks > greatest_priority) 
				{
					greatest_priority = p->ticks;
					p_proc_ready = p;
				}
				/*{	下面代码被卡死。。。我也不懂为什么。。
					if (p->priority>greatest_priority && p->ticks!=0)
					{
						greatest_priority=p->priority;
						p_proc_ready=p;
					}
				}*/
			}
		}
		if (!greatest_priority)	initializeAllPro();
	}
	p_proc_ready->state=kRUNNING;
}