我们接着上篇博文说。
2.2 第二题题目
修改本章的源程序,使之能够顺序完成以下工作:
(1)从程序管理器任务切换到任务A,显示一条消息;
(2)再从任务A转换到任务B,显示一条消息;
(3)从B直接返回到程序管理任务。
2.3 分析
(1)很容易,(2)如何实现?我的思路是在任务A的符号表中安装B的任务门。
程序运行的具体流程如下:
- 内核的符号表中要增加一个条目,用来接收B任务门描述符的选择子
- A任务的符号表中也要有B任务的任务门条目(留待内核重定位);
- 内核加载任务B,在内核符号表中安装B的任务门描述符的选择子;
- 内核加载任务A,加载的时候,自然会对A的符号表进行重定位,这样就把B任务的任务门选择子写到了A的符号表中;
- 从内核切换到任务A;
- 任务A通过B的任务门(已经在符号表中)切换到任务B;
- 任务B返回到内核。
2.4 对内核代码的修改
在内核符号表中增加一个条目。
安装调用门的时候,一定要除去最后的任务门。
加载任务B,安装B的任务门描述符,并且填写选择子到符号表。
内核加载任务A,通过JMP
指令切换过去。
2.4 对用户程序1的修改
在A的符号表中增加一个条目。
以上截图,只截取了比较重要的部分,其他地方的修改,还请读者下载我的完整代码。