void roundRobin(int map[N][5],int proc_count,char filename[])
{
	QUEUE q;
	int cur_time=0;
	int new_proc[N];
	int i,k,quantum_used,p,temp,c,cpu_util=0;
	int blocked[N]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
	int turn_around[N];
	int proc_added=0;
	q.rear=q.front=-1;
	
	FILE *fp=fopen(filename,"w");
	fclose(fp);
	
	while(1)
	{
		int process_state[N]={0};		
		k=0;
		for(i=0;i<proc_count;i++)
		{
			if(cur_time==map[i][3])
			{
				new_proc[k++]=i;
				proc_added++;
			}
		}
		
		for(i=0;i<proc_count;i++)
		{
			if(blocked[i]==cur_time)
			{
				new_proc[k++]=i;
				blocked[i]=-1;
			}
		}
		
		sort_proc(new_proc,k);
		
		for(i=0;i<k;i++)
			insertQ(&q,new_proc[i]);
		
		if(q.rear!=q.front)
		{
			p=peekFront(q);
			process_state[p]=1;
			cpu_util++;
			quantum_used=(quantum_used+1)%2;
			map[p][4]++;
			
			if(map[p][4]==map[p][1])
			{
				removeQ(&q);
				quantum_used=0;
				turn_around[p]=cur_time;
			}
			if(quantum_used==0 && map[p][4]!=map[p][1] && map[p][4]!=(map[p][1])/2)
			{
				p=removeQ(&q);
				quantum_used=0;
				insertQ(&q,p);
			}
			
			if(map[p][4]==(map[p][1])/2)
			{
				p=removeQ(&q);
				quantum_used=0;
				blocked[p]=map[p][2]+cur_time+1;
			}
		}
			
		temp=q.front;
		while(temp!=q.rear)
		{
			temp=(temp+1)%N;
			if(q.arr[temp]!=p)
				process_state[q.arr[temp]]=2;
		}
		for(i=0;i<proc_count;i++)	
		{
			if(blocked[i]!=-1 && i!=p)
			{
				process_state[i]=3;
			}
		}	
		
		printProcessStateToFile(filename,process_state,proc_count,cur_time);
		
		c=checkBlocked(blocked,proc_count);
			
		if(q.front==q.rear && c && proc_added==proc_count)
			break;
		
		cur_time++;
		p=-1;
	}
	fp=fopen(filename,"a");
	fprintf(fp,"\n");
	fprintf(fp,"Finishing Time : %d\n",cur_time);
	fprintf(fp,"CPU utilization : %3.2f\n",(float)cpu_util/(cur_time+1));
	for(i=0;i<proc_count;i++)
	{
		temp=turn_around[i]-map[i][3]+1;
		fprintf(fp,"Turnaround process %d : %d\n",i,temp);
	}			
	fclose(fp);
}
void shortestRemainingJobFirst(int map[N][5],int proc_count,char filename[])
{
	int i,cur_time=0,k=0,j,min,temp;
	int ready[N],c;
	int blocked[N]={-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};
	int cpu_util=0;
	int turn_around[N];
	int proc_added=0;
	
	FILE *fp=fopen(filename,"w");
	fclose(fp);

	for(i=0;i<proc_count;i++)
	{
		map[i][4]=map[i][1];
	}
	
	while(1)
	{
		int process_state[N]={0};
		for(i=0;i<proc_count;i++)
		{
			if(cur_time==map[i][3])
			{
				ready[k++]=i;
				proc_added++;
			}
		}
		
		for(i=0;i<proc_count;i++)
		{
			if(blocked[i]==cur_time)
			{
				ready[k++]=i;
				blocked[i]=-1;
			}
		}
		
		if(k>0)
		{
			min=ready[0];
			j=0;
			for(i=0;i<k;i++)
			{
				if(map[ready[i]][4]<map[min][4] || (map[ready[i]][4]==map[min][4] && ready[i]<min))
				{
					min=ready[i];
					j=i;
				}
			}
			
			temp=ready[k-1];
			ready[k-1]=ready[j];
			ready[j]=temp;
			
			process_state[min]=1;
			map[min][4]--;
			cpu_util++;
			
			if(map[min][4]==0)
			{
				k--;
				turn_around[min]=cur_time;
			}
			if(map[min][4]==(map[min][1])/2)
			{
				blocked[min]=map[min][2]+cur_time+1;
				k--;
			}
		}
			
		for(i=0;i<k;i++)
		{
			if(ready[i]!=min)
				process_state[ready[i]]=2;
		}
		for(i=0;i<proc_count;i++)
		{
			if(blocked[i]!=-1 && i!=min)
				process_state[i]=3;
		}
			
		printProcessStateToFile(filename,process_state,proc_count,cur_time);
		
		c=checkBlocked(blocked,proc_count);
		
		if(k==0 && c && proc_added==proc_count)
			break;
				
		cur_time++;
		min=-1;
		
	}
	fp=fopen(filename,"a");	
	fprintf(fp,"\n");
	fprintf(fp,"Finishing Time : %d\n",cur_time);
	fprintf(fp,"CPU utilization : %3.2f\n",(float)cpu_util/(cur_time+1));
	for(i=0;i<proc_count;i++)
	{
		temp=turn_around[i]-map[i][3]+1;
		fprintf(fp,"Turnaround process %d : %d\n",i,temp);
	}
	fclose(fp);			
}
Пример #3
0
ProviderName ProviderRegistrar::findProvider(const ProviderName & providerName, Boolean test)
{
 //   CIMObjectPath objectName = providerName.getObjectName();
    Uint32 flags = providerName.getCapabilitiesMask();

    // validate arguments
/*    if(objectName.getNameSpace().isNull() || objectName.getClassName().isNull())
    {
        throw Exception("Invalid argument.");
    }
*/    
    CIMInstance provider;
    CIMInstance providerModule;
    ProviderName temp;
    Boolean hasNoQuery;
   
   switch (flags) {
       case ProviderType_INSTANCE:
          if (_prm->lookupInstanceProvider(providerName.getNameSpace(),providerName.getClassName(),
                provider,providerModule,0)) {
             if (test) checkBlocked(providerModule);
	          return ProviderName(
	             provider.getProperty(provider.findProperty
                       ("Name")).getValue ().toString (),
		          providerModule.getProperty(providerModule.findProperty
                       ("Location")).getValue().toString(),
	             providerModule.getProperty(providerModule.findProperty
                       ("InterfaceType")).getValue().toString(),
		          ProviderType::INSTANCE);
          }
          break;
       case ProviderType_ASSOCIATION:
          if (_prm->lookupInstanceProvider(providerName.getNameSpace(),providerName.getClassName(),
                provider,providerModule,1)) {
             if (test) checkBlocked(providerModule);
	          return ProviderName(
	             provider.getProperty(provider.findProperty
                       ("Name")).getValue ().toString (),
		          providerModule.getProperty(providerModule.findProperty
                       ("Location")).getValue().toString(),
	             providerModule.getProperty(providerModule.findProperty
                       ("InterfaceType")).getValue().toString(),
		          ProviderType::ASSOCIATION);
          }
          break;
       case ProviderType_QUERY:
          if (_prm->lookupInstanceProvider(providerName.getNameSpace(),providerName.getClassName(),
                provider,providerModule,0,&hasNoQuery)) {
             if (test) checkBlocked(providerModule);
	          return ProviderName(
	             provider.getProperty(provider.findProperty
                       ("Name")).getValue ().toString (),
		          providerModule.getProperty(providerModule.findProperty
                       ("Location")).getValue().toString(),
	             providerModule.getProperty(providerModule.findProperty
                       ("InterfaceType")).getValue().toString(),
		          ProviderType::INSTANCE);
          }
          break;
        case ProviderType_METHOD:
          if (_prm->lookupMethodProvider(providerName.getNameSpace(),providerName.getClassName(),
                providerName.getMethodName(),provider,providerModule)) {
             if (test) checkBlocked(providerModule);
	          return ProviderName(
	             provider.getProperty(provider.findProperty
                       ("Name")).getValue ().toString (),
		          providerModule.getProperty(providerModule.findProperty
                       ("Location")).getValue().toString(),
	             providerModule.getProperty(providerModule.findProperty
                       ("InterfaceType")).getValue().toString(),
		          ProviderType::METHOD);
          }
          break;
      default:
          CIMObjectPath objectName(String::EMPTY,
              providerName.getNameSpace(),providerName.getClassName());
          temp = _lookupProvider(objectName);
    }
    
    return(temp);
}