x86 多任务 例子.doc

上传人:桔**** 文档编号:545745285 上传时间:2023-07-07 格式:DOC 页数:21 大小:63.50KB
返回 下载 相关 举报
x86 多任务 例子.doc_第1页
第1页 / 共21页
x86 多任务 例子.doc_第2页
第2页 / 共21页
x86 多任务 例子.doc_第3页
第3页 / 共21页
x86 多任务 例子.doc_第4页
第4页 / 共21页
x86 多任务 例子.doc_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《x86 多任务 例子.doc》由会员分享,可在线阅读,更多相关《x86 多任务 例子.doc(21页珍藏版)》请在金锄头文库上搜索。

1、x86 多任务 例子第6课:多任务_影子的传说_百度空间我的空间 主页|空间装扮博客|写新文章相册|上传照片好友|找新朋友档案|留言板我的应用 loading. 我的i贴吧 i动态传送门我的动态_sousuo_ 0 | | 我的空间 | 我的应用 | 我的i贴吧 | 百度空间 | 百度首页 | 退出 影子的传说这是一个神秘的世界,又是一个失落的世界 主页博客相册|个人档案 |好友 查看文章 第6课:多任务2009-04-17 13:41第6课:多任务 下载源代码 目标 在本课中,我们将在skelix内核中同时运行多个任务(本文中可以暂时理解成进程)。每个任务都有自己的LDT表,并且是基于优先级

2、的任务调度。 TSS 现在我们开始skelix内核的多任务支持工作了。首先要澄清的是:在单处理器上面,进程只能并发,而不是并行。就是说同一时刻只能有一个任务在运行,cpu会划分很多很小的时间片来运行各个任务,这样看起来就像多个任务在同时运行一样。i386从硬件上就支持多任务了,但是也可以通过编程来实现,本文就是一个例子,每个任务轮流运行一个小的时间片。我们知道,单个cpu只有1组寄存器,这些可以用于所有任务。当由一个任务切换到另一个任务时,必须先保存原来任务的运行环境(就是一堆寄存器和其他信息),通常称这个运行环境叫上下文。i386使用一个叫TSS的段来存储这些信息,这个TSS段至少104字节

3、(不包括IOPL位图的话),对应它的是一个TSS描述符。TSS描述符只能在GDT表中,这意味着任务不能自己通过LDT来切换到其他任务。当时钟中断到来切换任务时,CPU会自动保存相关信息到TSS中。 TSS定义了任务的上下文环境,结构如下: (图1) 31 16,15 0 +-+ | | NO use | Back Link | | 高地址 +-+ | | ESP0 | | +-+ | | NO use | SS0 | | +-+ | | ESP1 | | +-+ | | NO use | SS1 | | 低地址 +-+ |/ | ESP2 | +-+ | NO use | SS2 | +-+

4、| CR3 | +-+ | EIP | +-+ | EFLAGS | +-+ | EAX | +-+ | ECX | +-+ | EDX | +-+ | EBX | +-+ | ESP | +-+ | EBP | +-+ | ESI | +-+ | EDI | +-+ | NO use | ES | +-+ | NO use | CS | +-+ | NO use | SS | +-+ | NO use | DS | +-+ | NO use | FS | +-+ | NO use | GS | +-+ | NO use | LDT | +-+ | I/O 位图 | NO use | T |

5、+-+ i386处理器可以使用嵌套任务,就是说当任务1切换到任务2时,任务2 的 Back Link 域被设置成任务1的选择子,且任务2的EFLAGS中的NT(嵌套任务标识)置位,这样任务2返回时,cpu就知道切换回任务1。我们知道,i386有4中特权级,所以可以在TSS中设置这四种特权级下的堆栈。比如一个任务运行在ring3特权级下,它使用用户态堆栈,使用系统调用可以让这个任务切换到ring0的内核态,这是堆栈也必须切换到内核态堆栈。这些堆栈指针就是存放在TSS中的。现在我们来看看TSS描述符(它只能放在GDT中): 图2:TSS描述符定义 63_56_55_54_53_52_51_48_

6、| 基地址(31到24位) | G | 0 | 0 |AVL| 长度(19到16位) | |_| _47_46_45_44_41_40_39_32_ | P | DPL | 0 | 1 | 0 | B | 1 | 基地址(23到16位) | |_| 31_16 | 基地址(15到0位) | |_| 16_ | 长度(15到0位) | |_| * 图3:通用描述符定义 63_56_55_54_53_52_51_48_ | 基地址(31到24位) | G |D/B| X | U | 长度(19到16位) | |_| _47_46_45_44_41_40_39_32_ | P | DPL | 类型 | A | 基地址(23到16位) | |_| 31_16 | 基地址(15到0位) | |_| 16_

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号