进程代码结构
sconst.inc
P_STACKBASE equ 0
GSREG equ P_STACKBASE
FSREG equ GSREG + 4
ESREG equ FSREG + 4
DSREG equ ESREG + 4
EDIREG equ DSREG + 4
ESIREG equ EDIREG + 4
EBPREG equ ESIREG + 4
KERNELESPREG equ EBPREG + 4
EBXREG equ KERNELESPREG + 4
EDXREG equ EBXREG + 4
ECXREG equ EDXREG + 4
EAXREG equ ECXREG + 4
RETADR equ EAXREG + 4
EIPREG equ RETADR + 4
CSREG equ EIPREG + 4
EFLAGSREG equ CSREG + 4
ESPREG equ EFLAGSREG + 4
SSREG equ ESPREG + 4
P_STACKTOP equ SSREG + 4
P_LDT_SEL equ P_STACKTOP
P_LDT equ P_LDT_SEL + 4
Proc.h
typedef struct s_stackframe{}
typedef struct s_proc {}
/* Number of tasks */
#define NR_TASKS 1
/* stacks of tasks */
#define STACK_SIZE_TESTA 0x8000
#define STACK_SIZE_TOTAL STACK_SIZE_TESTA
global.h
EXTERN TSS tss;
EXTERN PROCESS* p_proc_ready;
extern PROCESS proc_table[];
extern char task_stack[];
kernal.final.asm
call cstart
jmp cs:csint:调用kernel_main()函数
hwint00: //时钟中断处理函数,时钟中断发生时运行这个函数。Ring0级
restart() //调度函数ring0级,同时也是第一个进程的入口。
start.c
cstart()
protect.c
init_prot()
init_idt_desc()
init_descriptor()
exception_handler()
seg2phys()
main.c
kernel_main()
[*p_proc=proc_table,初始化proc_table,调用restart()函数]
TestA() //进程A, ring1级