⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 seg.cc

📁 南京航空航天大学开发的一个类Unix和Linux的操作系统,好不好看看就知道了,
💻 CC
字号:
#include <lib/root.h>#include <lib/string.h>#include <lib/gcc.h>#include "irq.h"#include "seg.h"gdt_t gdt;static gdtdes_t gdtdes = {sizeof(gdt_t)-1, (u32_t)&gdt};static idt_t idt;static idtdes_t idtdes = {sizeof(idt_t)-1, (u32_t)&idt};static ldt_t ldt; /* all the process share the same ldt */void gdt_t::init(){	memset(&null, 0, 8);	kcode.init(X86KCODE, 0, 0xfffff);	kdata.init(X86KDATA, 0, 0xfffff);	ldtdes.init(X86LDT, (u32_t)&ldt, sizeof(ldt_t)-1);	tss[0].init(X86AVL386TSS, 0, sizeof(tss_t)-1);	tss[1].init(X86AVL386TSS, 0, sizeof(tss_t)-1);}void gdt_t::swtch(tss_t * from, tss_t * to){	/* also clear "busy tss" flag */	tss[0].init(X86AVL386TSS, (u32_t)from, sizeof(tss_t)-1);	tss[1].init(X86AVL386TSS, (u32_t)to, sizeof(tss_t)-1);	asm volatile(		"ltr %w0\n\t"		"ljmp %1,$0\n\t"		::"r"(TSS0SEL),"i"(TSS1SEL));}void ldt_t::init(){	memset(&null, 0, 8);	ucode.init(X86UCODE, 0, 0xfffff);	udata.init(X86UDATA, 0, 0xfffff);}asmlinkage void trap0x00();asmlinkage void trap0x01();asmlinkage void trap0x02();asmlinkage void trap0x03();asmlinkage void trap0x04();asmlinkage void trap0x05();asmlinkage void trap0x06();asmlinkage void trap0x07();asmlinkage void trap0x08();asmlinkage void trap0x09();asmlinkage void trap0x0a();asmlinkage void trap0x0b();asmlinkage void trap0x0c();asmlinkage void trap0x0d();asmlinkage void trap0x0e();asmlinkage void trap0x0f();asmlinkage void trap0x10();asmlinkage void trap0x11();asmlinkage void trap0x12();asmlinkage void irq0x00();asmlinkage void irq0x01();asmlinkage void irq0x02();asmlinkage void irq0x03();asmlinkage void irq0x04();asmlinkage void irq0x05();asmlinkage void irq0x06();asmlinkage void irq0x07();asmlinkage void irq0x08();asmlinkage void irq0x09();asmlinkage void irq0x0a();asmlinkage void irq0x0b();asmlinkage void irq0x0c();asmlinkage void irq0x0d();asmlinkage void irq0x0e();asmlinkage void irq0x0f();asmlinkage void syscallentry();#define __trap(trapno) \sysgate[trapno].init(X86386TRAP, KCODESEL, (u32_t) trap##trapno)#define __irq(irqno) \sysgate[0x20+irqno].init(X86386INTR, KCODESEL, (u32_t) irq##irqno)void idt_t::init(){	__trap(0x00);	__trap(0x01);	__trap(0x02);	__trap(0x03);	__trap(0x04);	__trap(0x05);	__trap(0x06);	__trap(0x07);	__trap(0x08);	__trap(0x09);	__trap(0x0a);	__trap(0x0b);	__trap(0x0c);	__trap(0x0d);	__trap(0x0e);	__trap(0x0f);	__trap(0x10);	__trap(0x11);	__trap(0x12);	__irq(0x00);	__irq(0x01);	__irq(0x02);	__irq(0x03);	__irq(0x04);	__irq(0x05);	__irq(0x06);	__irq(0x07);	__irq(0x08);	__irq(0x09);	__irq(0x0a);	__irq(0x0b);	__irq(0x0c);	__irq(0x0d);	__irq(0x0e);	__irq(0x0f);	sysgate[0x80].init(X86SYSCALL, KCODESEL, (u32_t)syscallentry);}void i386init(){	idt.init();	asm volatile ("lidt %0"::"m"(idtdes));	gdt.init();	asm volatile(		"lgdt %0\n\t"		"ljmp %1,$0f\n\t"		"0: mov %2,%%ss\n\t"		"mov %2,%%ds\n\t"		"mov %2,%%es\n\t"		::"m"(gdtdes),"i"(KCODESEL),"r"(KDATASEL));	ldt.init();	asm volatile("lldt %w0"::"r"(LDTSEL));}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -