当前位置: 代码迷 >> 汇编语言 >> 实在找不到原因了!关于任务切换。该如何解决
  详细解决方案

实在找不到原因了!关于任务切换。该如何解决

热度:8775   发布时间:2013-02-26 00:00:00.0
实在找不到原因了!关于任务切换。
通过时钟中断来进行任务切换。

中断是通过 IDT任务门->GDT任务段(TSS)描述符->中断处理程序 实现
然后在GDT中安排了一个TSS描述符,并且将其对应的TSS段初始化好,任务的代码段和数据段都安排好了。
对应TSS描述符的选择子为sel_process0

任务切换的做法是,时钟中断发生时进行中断处理,然后jmp sel_process0:0

然后打开时钟中断,如果没有任何问题的话,中断会不停的发生,任务也会不停的执行,因为我只设置了一个任务。
就是为了实验任务切换成功与否,如果一个任务可以成功不断的执行,那多个任务肯定可以切换成功。

但是我遇到的问题是,第一次时钟中断可以成功的切换到任务0,但是第二次时钟中断就发生了“通用保护故障”(INT 0xD)

为了找到问题,我通过在中断中重新设置任务0的TSS描述符以及TSS段的内容来排错,发现仍然是第二次时钟中断中切换的时候发生上述错误,所以排除了任务切换后描述符和TSS会被改变的可能。

但是实在找不到其他的原因了。


我的任务0的内容是 在显存的一个位置输出ascii字符,循环++

有没有人给点提示?

------解决方案--------------------------------------------------------
没办法给出太多提示,因为你说得还不够详细。
首先,任务切换在两个任务之间进行,你的另一个任务,或者主进程是什么?
其次,利用时钟中断进行任务切换,必须注意TSS描述符的B位,以及EFLAGS的NT位。如果设置不当,一定会出问题的。
------解决方案--------------------------------------------------------
你在real pc中还是在vm中?
------解决方案--------------------------------------------------------
帮顶。
  相关解决方案