Exemple #1
0
void init_scheduler()
{
	terminal_writestring("Initializing scheduler\n");
	memzero(tasks, sizeof(task_t*)*SCHEDULER_MAX_TASKS);
	
	//Initialize jump array
	tasks[0] = (void*)SCHEDULER_MAX_TASKS;
	curr_task = 0;
	next_task = 0;
	
	set_idt_desc(IRQ_OFFSET+0x00, (uint32_t)&schedule_handler, 0, IntGate32, 0x08);
	set_idt_desc(PROC_EXIT, (uint32_t)&exit_handler, 3, IntGate32, 0x08);
	set_idt_desc(PROC_YIELD, (uint32_t)&yield_handler, 3, IntGate32, 0x08);
	
}
Exemple #2
0
/**
 * Set the IDT.
 */
void install_idt() {
	uint32_t i;

	_idtr.limit = sizeof(struct idt_desc) * MAX_INTERRUPTS;
	_idtr.base = (uint32_t) &_idt;

	memset((intptr_t)_idtr.base, 0, _idtr.limit);

	for(i = 0; i < MAX_INTERRUPTS; i++)
		set_idt_desc(i, 0b01110001, 0x08,
			     (intptr_t) default_int_handler);
	__asm__ ("lidt _idtr");
}