Ejemplo n.º 1
0
pcb_t *makeInit() {
	// Init the first process
	pcb_t *pcb = allocPcb();
	pcb->p_pid = 1;
	// Processor Status Register
	pcb->p_s.cpsr = STATUS_SYS_MODE;
	pcb->p_s.cpsr = STATUS_ALL_INT_ENABLE(pcb->p_s.cpsr);
	pcb->p_s.cpsr = STATUS_ENABLE_TIMER(pcb->p_s.cpsr);
	// System Control Register
	pcb->p_s.CP15_Control = CP15_CONTROL_NULL;
	// Other registers
	pcb->p_s.pc = (memaddr) init;
	pcb->p_s.sp = RAM_TOP-FRAMESIZE;
	return pcb;
}
Ejemplo n.º 2
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);
}