请问多任务操作系统如何编写任务调度部分?
我在保护模式下写了一个单任务的系统,要使它支持多任务,必然对任务状态描述符和局部描述符进行设置,请问设计一个多任务系统,至少会用到什么结构?如何使用这些结构,还有怎么进行任务切换? 问题点数:100、回复次数:5Top
1 楼mydo(侯佩|hopy|ks)回复于 2006-05-04 13:17:07 得分 0
系统里必须支持一个任务管理器,功能是为每个任务分配时间片,处理各个
任务的共享,互锁,饿死 等问题,并且使用特定算法决定不同任务的的分配
时间片长度,在任务切换时保留每个任务的特定信息。多任务的要用到什么
结构依你的要实现的功能而定,比如上面说的就要有一个结构元素来存放任务
的特定优先级别。Top
2 楼glietboys(大大(beer))回复于 2006-05-04 16:06:35 得分 0
如果是你自己编写的,如果你的任务没有运行过程中,不响应除了时钟中断之外的中断的话,那很简单,只要搞懂任务状态描述符和局部描述符怎么设置就可以了;如果还响应其他中断的话,那会相当复杂.
至于数据结构,只要保存任务的TSS_SEL,LDT_SEL就可以了,当然,还有一个全局的维护任务的链表,其他的就没有什么必要添加了.
至于共享,互锁,饿死 等问题,是不用考虑的,因为这些问题涉及到I/O问题和算法问题.
如果能做到那个地步,估计你也不用在这问问题了.Top
3 楼WYlslrt(WY.lslrt(http://www.wyos.net))回复于 2006-05-07 10:09:30 得分 0
你可以使用软件切换或者硬件切换,在我们经常使用的cpu上,自己写的操作系统使用任务切换是比较好的,你可以去好好的看下x86的任务切换机制,必须得数据结构为TSS:任务状态段,可以看看清华的80x86汇编语言程序设计Top
4 楼tb01412(tb)回复于 2006-05-09 10:02:22 得分 0
去看LINUX0.11版的内核,推荐一本书:LINUX内核完全注释Top
5 楼Peter_Cheung()回复于 2006-05-10 11:10:09 得分 0
for IA32, 任务管理器is timer handler, which is IRQ 0.
you can write your 任务管理器 in there.
from PeterTop




