📄 global.h
字号:
#define NR_TASKS 1
#define NR_PROCS 0
#define LDT_SIZE 2
#define INTERRUPT 0
#define SLEEP 1
#define READY 2
#define RUNNING 3
#define EV_KEYPRESS 4#define STACK_SIZE_RAM 0x800
#define STACK_SIZE_MEMORY 0x800
#define STACK_SIZE_TTY 0x800
#define STACK_SIZE_HD 0x800
#define STACK_SIZE_FS 0x800
#define STACK_SIZE_IS 0x800
#define STACK_SIZE_CLOCK 0x800
#define STACK_SIZE_TOTAL STACK_SIZE_CLOCK+STACK_SIZE_RAM+STACK_SIZE_MEMORY+STACK_SIZE_TTY+STACK_SIZE_HD+STACK_SIZE_FS+STACK_SIZE_IS/* 中断向量 */
#define INT_VECTOR_DIVIDE 0x0
#define INT_VECTOR_DEBUG 0x1
#define INT_VECTOR_NMI 0x2
#define INT_VECTOR_BREAKPOINT 0x3
#define INT_VECTOR_OVERFLOW 0x4
#define INT_VECTOR_BOUNDS 0x5
#define INT_VECTOR_INVAL_OP 0x6
#define INT_VECTOR_COPROC_NOT 0x7
#define INT_VECTOR_DOUBLE_FAULT 0x8
#define INT_VECTOR_COPROC_SEG 0x9
#define INT_VECTOR_INVAL_TSS 0xA
#define INT_VECTOR_SEG_NOT 0xB
#define INT_VECTOR_STACK_FAULT 0xC
#define INT_VECTOR_PROTECTION 0xD
#define INT_VECTOR_PAGE_FAULT 0xE
#define INT_VECTOR_COPROC_ERR 0x10
#define SELECTOR_DUMMY 0
#define SELECTOR_FLAT_C 0x8
#define SELECTOR_FLAT_RW 0x10
#define SELECTOR_VIDEO (0x18+3)
#define SELECTOR_TSS 0x20
#define SELECTOR_LDT_FIRST 0x28
#define SELECTOR_KERNEL_CS SELECTOR_FLAT_C
#define SELECTOR_KERNEL_DS SELECTOR_FLAT_RW
#define SELECTOR_KERNEL_GS SELECTOR_VIDEO
#define DA_386IGate 0x8E /* 386 中断门类型值 */
#define DA_386TSS 0x89 /* 可用 386 任务状态段类型值 */
/* 权限 */
#define PRIVILEGE_KRNL 0
#define PRIVILEGE_TASK 1
#define PRIVILEGE_USER 3
#define DA_C 0x98 /* 存在的只执行代码段属性值 */
#define DA_DRW 0x92 /* 存在的可读写数据段属性值 */
#define DA_LDT 0x82 /* 局部描述符表段类型值 */
/* 选择子类型值说明 */
/* 其中, SA_ : Selector Attribute */
#define SA_RPL_MASK 0xFFFC
#define SA_RPL0 0
#define SA_RPL1 1
#define SA_RPL2 2
#define SA_RPL3 3
#define RPL_KRNL SA_RPL0
#define RPL_TASK SA_RPL1
#define RPL_USER SA_RPL3
#define SA_TI_MASK 0xFFFB
#define SA_TIG 0
#define SA_TIL 4
//中断向量号
#define INT_VECTOR_IRQ0 0x20
#define INT_VECTOR_IRQ8 0x28
/* GDT */
/* 描述符索引 */
#define INDEX_DUMMY 0 // ┓
#define INDEX_FLAT_C 1 // ┣ LOADER 里面已经确定了的.
#define INDEX_FLAT_RW 2 // ┃
#define INDEX_VIDEO 3 // ┛
#define INDEX_TSS 4
#define INDEX_LDT_FIRST 5#define mDevPosition m1
#define mDestPosition m2
#define mSrcPosition m3
#define mSize m4#define SCROLL_SCREEN_UP 1
#define SCROLL_SCREEN_DOWN 2
#define SCREEN_SIZE (80*25)
#define SCREEN_WIDTH 80#define STRUCT_ALLOC 1 /*structAlloc结构*/
#define STRUCT_HOLE 2 /*物理页分配结构*/
#define STRUCT_PROCESS 3 /*进程结构体*/
#define MAX_STRUCT 320 /*同类结构体的最大数量*/#define MEM_START 0x500000 /*可分配内存的起始地址,5M*/
#define HOLE_BASE 0x501400
#define K 1024
#define M 1024*1024
#define MEMSIZE 32*M /*32M*/#define TTY_IN_BYTES 16
#define NR_CONSOLES 3
#define TTY_FIRST (TTYTable)
#define TTY_END (TTYTable+NR_CONSOLES)
#define vir2phys(seg_base,vir) (t_32)(((t_32)seg_base)+(t_32)(vir))#define kmalloc() mallocStruct(STRUCT_PROCESS)
#define kfree(addr) freeStruct(STRUCT_PROCESS,addr)#define mmalloc() mallocStruct(STRUCT_HOLE)
#define mfree(addr) freeStruct(STRUCT_HOLE,addr)#define memCopy MemoryCopy
#define memSet MemorySet/*********************************************************************///存储段描述符
typedef struct Descriptor
{
t_16 LimitLow;
t_16 BaseLow;
t_8 BaseMiddle;
t_8 Attribute1;
t_8 LimitH_Attr2;
t_8 BaseHigh;
}DESCRIPTOR;
//门描述符
typedef struct s_gata
{
t_16 OffsetL;
t_16 Selector;
t_8 Dcount;
t_8 Attribute;
t_16 OffsetH;
}GATE;typedef struct s_stackframe
{
t_32 gs;
t_32 fs;
t_32 es;
t_32 ds;
t_32 edi;
t_32 esi;
t_32 ebp;
t_32 kernel_esp;
t_32 ebx;
t_32 edx;
t_32 ecx;
t_32 eax;
t_32 retaddr;
t_32 eip;
t_32 cs;
t_32 eflags;
t_32 esp;
t_32 ss;
}STACK_FRAME;
typedef struct _proc
{
STACK_FRAME Regs;
t_16 LDTSelector;
DESCRIPTOR LDT[LDT_SIZE];
int Pid;
int InitPriority;
int Priority;
char p_name[16];
char state;
int TTYNum;
t_32 ReturnValue;
struct _proc *next;
}PROCESS;
typedef struct s_tss{
t_32 BackLink;
t_32 esp0;
t_32 ss0;
t_32 esp1;
t_32 ss1;
t_32 esp2;
t_32 ss2;
t_32 cr3;
t_32 eip;
t_32 flags;
t_32 eax;
t_32 ecx;
t_32 edx;
t_32 ebx;
t_32 esp;
t_32 ebp;
t_32 esi;
t_32 edi;
t_32 es;
t_32 cs;
t_32 ss;
t_32 ds;
t_32 fs;
t_32 gs;
t_32 ldt;
t_16 trap;
t_16 IoBase;
}TSS;
typedef struct s_task{
FuctionPoint Inital_eip;
int StackSize;
}TASK;typedef struct _structAlloc
{
t32 start; /*结构体分配区域的起始地址*/
t32 size; /*结构体分配区域的大小*/
t8 sid; /*结构体的类型*/
t32 structSize; /*此类结构体的大小*/
t8 bitmap[MAX_STRUCT/8]; /*用于分配管理的位图*/
t32 first; /*记录最后一次分配成功的位置*/
t16 usable; /*实际可分配数*/
t16 alloc; /*已分配数*/
struct _structAlloc *next;
}structAlloc;
typedef struct _hole{
t32 start; /*start of the hole*/
t32 size; /*the size of hole*/
struct _hole *next;
}hole;typedef struct s_Console
{
unsigned int CurrentStartAddr;
unsigned int OriginalAddr;
unsigned int Size;
unsigned int CursorPos;
}CONSOLE;
typedef struct s_TTY
{
t_32 Buffer[TTY_IN_BYTES];
t_32 *Head;
t_32 *Tail;
int Count;
t_32 KeyBuffer[TTY_IN_BYTES];
t_32 *KeyHead;
t_32 *KeyTail;
int KeyCount;
CONSOLE *pConsole;
}TTY;struct t_bios_time{
int second;
int minute;
int hour;
int day;
int month;
int year;
int century;
};/*********************************************************************/extern t_8 gdt_ptr[6];
extern DESCRIPTOR gdt[GDT_SIZE];
extern t_8 idt_ptr[6];
extern GATE idt[IDT_SIZE];
extern TSS tss;
extern IrqFuction IrqTable[NR_IRQ];extern int Disp_pos;
extern int Head,Tail;
extern int ReEnter;
extern int LostTicks;extern PROCESS *usrProc; //指向用户进程队列的头指针
extern PROCESS *pCurrentProc;//指向当前运行的进程
extern PROCESS *ReadyProc;extern structAlloc structAllocer;/*用于管理 structAlloc*/extern hole *head;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -