code2012

加油,坚持,努力,自信
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

多进程--任务状态原理

Posted on 2011-05-28 15:47  code2012  阅读(336)  评论(0编辑  收藏  举报

1>

2>各层堆栈指针区域

    0级内核堆栈,总被压入者认为其是空栈!

3>地址映射寄存器区域

  在分页机制下,由线性地址空间到物理地址空间的映射 由包含页目录起始地质的控制寄存器CR3确定。

    与 任务相关的虚拟地址空间 到物理地址空间的映射由LDTR和CR3确定!

----------------------------------------------------------------------------------------------------

整体思路,及详细分析!

完成跳转,实现ring0->ring1(kernel.asm之restart)

1 restart:
2 mov esp, [p_proc_ready] ;ESP 指向进程表A结构体的 首地址!
3   lldt [esp + P_LDT_SEL] ;加载LDTR选择子 ;指向了进程testA表中的ldt_sel , ldt_sel指向;SELECTOR_LDT_FIRST==0x28
4   lea eax, [esp + P_STACKTOP] ;指向了进程testA表中的Reg结构体的尾地址
5   mov dword [tss + TSS3_S_SP0], eax ;TSS表中的esp0(0级堆栈) 当中断跳转的时候 把esp0 转到当前esp!
6  
7 pop gs ;把TestA()进程表中的gs 放戴 CPU的gs
8   pop fs
9 pop es
10 pop ds
11 popad
12 add esp, 4 ;跳过retaddr
13   iretd ;eip cs eflags

  相关原理: 1.在任务切换的过程中;处理器中的各寄存器的当前值,被自动保存到TR所指定的TSS中.

                2.下一个任务的TSS的选择子被装入TR,最后从TR所以指定的TSS中取出来各寄存器的值

       送到CPU的各寄存器!