进程代码结构

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

                         

posted on 2011-05-19 13:19  wanghj_dz  阅读(306)  评论(0编辑  收藏  举报

导航