请教:模拟CPU任务调度算法的问题。
这个问题已经想了2周了,但是还是没有头绪。找了许多模拟任务调度的算法,没有关于周期性任务和非周期任务的算法,请大家看看,有没有好的办法,多谢。
任务描述如下:
要求手动输入任务的名称,优先级,执行时间和频率,例如:
-----------------------------------------
任务名称 优先级 执行时间(ms) 频率(Hz)
-----------------------------------------
A 3 1 非周期
B 5 1 100
C 4 2 200
D 2 1 100
E 1 1 100
-----------------------------------------
优先级是固定的,如何编写调度程序,使CPU能够在1个Major frame ( Majorframe = 1000/Min(频率) = 10 ms )中完成调度,并且最后输出Gantt Chart, CPU空闲的时刻用‘/’代替,如下:
Gantt Chart:
---|---------------------
|B|C|C|A|D|/|C|C|E|/|
---|--------------------->
我想请教大家这个算法,如何处理周期任务,因为它过某个时间又会出现。我用的是结构体,但是搜索到的许多调度程序是用的链表,如下,但是好像这个题目还用不到链表,对吗?
struct content
{
char name;
int priority;
int exetime;
int frequency;
struct *content next; /* 链表 */
}
希望大家能够共同学习提高,多谢。
[解决办法]
使用优先队列 完全二叉树能实现这个吧,数组就行,效率高
[解决办法]
用c程序模拟cpu任务调度
如果你懂单片机中断和一般程序的话我想这个问题很容易解决了
hoho,自己研究一下吧!
[解决办法]
可以
把周期性任务的 task写的时钟中断里, 时间到了就模拟执行, 再将任务设成下一个周期的时间值.
是可抢占还是不可抢占, 还是非周期可抢占, 周期不可抢占, 楼主要考虑
[解决办法]
我想请教大家这个算法,如何处理周期任务,因为它过某个时间又会出现。我用的是结构体,但是搜索到的许多调度程序是用的链表,如下,但是好像这个题目还用不到链表,对吗?
=--------------------------------
任务队列,把要执行的任务都挂在队列内.
建立一个链表,把周期性任务链起来.周期性的检查该链表,到了就把它放入任务队列.它执行完记录它执行的
当前时间
[解决办法]
算法很多啊(google),队列queue就是和我们排队的概念一样,FIFO而已。
另外还有优先队列(堆),可以回头看看,磨刀不误砍柴工
[解决办法]
楼主,你这个问题,
是不是只要求结果,能模拟出来的样子就可以, 至于时间准确不准确就不考虑了.
有没有限制只能用C
[解决办法]
看看 < <linux内核完全注释> > , 找点思路.
------解决方案--------------------
这个问题一定会用到数据结构的, 既使用数组存储, 也需要类似链表的操作.
楼主可暂时不考虑 周期性 这个要求, 先实现非周期版本的, 这里的周期性实在不是主要问题,
如果楼主自己能实现非周期版本后, 肯定很容易明白周期怎样实现.
[解决办法]
楼主说搞了两个星期了, :p, 算是比较辛苦了 , 这几天偶也正好有空, (我对这个挺有兴趣), 写了个, 程序可能很垃圾, 比如, 不Ctrl-C停不下来 :), 但还是有参考价值的. 楼主可以看看
http://blog.csdn.net/roadtang/archive/2007/09/12/1782513.aspx