进程代码结构

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

                         

转载于:https://www.cnblogs.com/wanghj-dz/archive/2011/05/19/2050957.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值