Exemplo n.º 1
0
void processSet( struct pcb_t *p, memaddr start, int priority){
	// Abilita gli interrupt, il Local Timer e la kernel-mode
  	p->p_s.cpsr = STATUS_ALL_INT_ENABLE(p->p_s.cpsr) | STATUS_SYS_MODE;
    	// Disabilita la memoria virtuale
    	p->p_s.CP15_Control = (p->p_s.CP15_Control) & ~(ENABLE_VM);
	p->p_s.cpsr = STATUS_ENABLE_TIMER(p->p_s.cpsr);
    	p->p_s.sp = RAM_TOP - FRAME_SIZE;
    	// Assegna a PC l'indirizzo della funzione esterna test()
    	p->p_s.pc = (memaddr) start;
	p->priority = priority;
    	//assegno un pid al processo
	p->pid = newpid();
	activeProcesses[first->pid-1] = p;
	//inserisco il processo dove di competenza
	insertProcQ(priority_queue( priority ), p);
}
// Test basic functionality
TEST_F(PriorityQueueTest, BasicTest) {

  int num_elements = 100;
  uint32_t value;
  PriorityQueue<uint32_t> priority_queue(num_elements);

  priority_queue.Push(1);
  priority_queue.Push(2);
  priority_queue.Push(3);
  priority_queue.Push(4);

  EXPECT_EQ(priority_queue.GetSize(), 4);

  priority_queue.Pop(value);
  EXPECT_EQ(value, 4);

}
Exemplo n.º 3
0
//gestore degli interrupt
void int_handler(){	
	interruptStart = getTODLO();	//tempo in cui comincia la gestione dell'interrupt, da
					//assegnare poi ad un eventuale processo svegliato dall'interrupt
	state_t *returnState = (state_t*) INT_OLDAREA;
	returnState->pc -= 4;
	if( current_process != NULL){
		copy_state( returnState, &current_process->p_s );
		current_process->userTime += interruptStart - userTimeStart;//se c'è un processo aggiorno il suo userTime
		current_process->CPUTime += interruptStart - CPUTimeStart;
	}
	int cause = getCAUSE();
	if(CAUSE_IP_GET(cause, IL_TIMER)){
		if( current_timer == PSEUDO_CLOCK ){
			while( devSem[CLOCK_SEM] < 0 ){	//Ad ogni pseudo clock tick mi assicuro che il semaforo sia sempre a zero
				verhogen( &devSem[CLOCK_SEM], 1, 0, getTODLO() - interruptStart);
			}
		}
		else if(current_timer == TIME_SLICE ){
			if( current_process != NULL ){
				insertProcQ( priority_queue(current_process->priority), current_process);
				current_process->CPUTime += getTODLO() - interruptStart;	//se metto in pausa il processo aggiorno anche il suo CPUTime
				current_process = NULL;
			}
		}
	}
	else if(CAUSE_IP_GET(cause, IL_DISK)){
		dtnp_interrupt(IL_DISK);
	}
	else if(CAUSE_IP_GET(cause, IL_TAPE)){
		dtnp_interrupt(IL_TAPE);
	}
	else if(CAUSE_IP_GET(cause, IL_ETHERNET)){
		dtnp_interrupt(IL_ETHERNET);
	}
	else if(CAUSE_IP_GET(cause, IL_PRINTER)){
		dtnp_interrupt(IL_PRINTER);
	}
	else if(CAUSE_IP_GET(cause, IL_TERMINAL)){
		terminal_interrupt();
	}
	scheduler();
}
Exemplo n.º 4
0
inline static stream_t new_stream(device_t input, device_t output, double sample_rate, long max_buffer_size)
{
    stream_t stream         = fa_new(audio_stream);

    stream->impl            = &audio_stream_impl;

    stream->input           = input;
    stream->output          = output;
    stream->input_channels  = fa_audio_input_channels(input);
    stream->output_channels = fa_audio_output_channels(output);

    stream->sample_rate     = sample_rate;
    stream->max_buffer_size = max_buffer_size;

    stream->signal_count    = 0;
    stream->sample_count    = 0;

    stream->in_controls     = atomic_queue();
    stream->controls        = priority_queue();

    return stream;
}