orange‘s中断机制

采用中断门的方式来实现这些。
直接上源码:
*======================================================================*/
PUBLIC void init_prot()
{
init_8259A();

// 全部初始化成中断门(没有陷阱门)
init_idt_desc(INT_VECTOR_DIVIDE,	DA_386IGate,
	      divide_error,		PRIVILEGE_KRNL);

init_idt_desc(INT_VECTOR_DEBUG,		DA_386IGate,
	      single_step_exception,	PRIVILEGE_KRNL);

init_idt_desc(INT_VECTOR_NMI,		DA_386IGate,
	      nmi,			PRIVILEGE_KRNL);

init_idt_desc(INT_VECTOR_BREAKPOINT,	DA_386IGate,
	      breakpoint_exception,	PRIVILEGE_USER);

init_idt_desc(INT_VECTOR_OVERFLOW,	DA_386IGate,
	      overflow,			PRIVILEGE_USER);

init_idt_desc(INT_VECTOR_BOUNDS,	DA_386IGate,
	      bounds_check,		PRIVILEGE_KRNL);

init_idt_desc(INT_VECTOR_INVAL_OP,	DA_386IGate,
	      inval_opcode,		PRIVILEGE_KRNL);

init_idt_desc(INT_VECTOR_COPROC_NOT,	DA_386IGate,
	      copr_not_available,	PRIVILEGE_KRNL);

init_idt_desc(INT_VECTOR_DOUBLE_FAULT,	DA_386IGate,
	      double_fault,		PRIVILEGE_KRNL);

init_id

你可能感兴趣的:(orange一个操作系统的实现)