Presentation is loading. Please wait.

Presentation is loading. Please wait.

本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址:www.dtdishui.com 论坛地址:www.dtdebug.com QQ交流 :49759272.

Similar presentations


Presentation on theme: "本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址:www.dtdishui.com 论坛地址:www.dtdebug.com QQ交流 :49759272."— Presentation transcript:

1 本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :

2 内容回顾 在之前课程里面讲到了线程的等待链表和调度链表 这节课我们开始学习Windows的线程切换,线程切换比较复杂 为了更好的学习,我们要先读一份代码: 模拟Windows线程切换(ThreadSwitch)

3 1、关键结构体 //线程结构体(仿EHREAD) typedef struct { char *name; //线程名 相当于线程TID int Flags; //线程状态 int SleepMillisecondDot; //休眠时间 void *InitialStack; //线程堆栈起始位置 void *StackLimit; //线程堆栈界限 void *KernelStack; //线程堆栈当前位置,也就是ESP void *lpParameter; //线程函数的参数 void (*func)(void *lpParameter); //线程函数 } GMThread_t;

4 2、调度链表 //线程结构体数组 extern GMThread_t GMThreadList[MAXGMTHREAD]; name Flags ... 所谓创建线程,就是创建一个 结构体,并且挂到这个数组中 此时的线程状态为:创建

5 3、初始化线程堆栈 StackLimit eax edx ecx ebx esi edi ebp Startup 9 GMThreadp name Flags ... KernelStack InitialStack

6 4、线程切换 当前线程 目标线程 ... eax edx ecx ebx esi edi eax edx ... ebp Startup 9 GMThreadp 保留ESP 切换ESP

7 5、线程的第一次运行: (参见课堂演示)

8 6、模拟线程切换总结: 1) 线程不是被动切换的,而是主动让出CPU. 2) 线程切换并没有使用TSS来保存寄存器,而是使用堆栈. 3) 线程切换的过程就是堆栈切换的过程.

9 7、课后练习: VIP会员可见


Download ppt "本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址:www.dtdishui.com 论坛地址:www.dtdebug.com QQ交流 :49759272."

Similar presentations


Ads by Google