现在的位置: 首页 > 综合 > 正文

简单的“协作式”调度

2013年09月25日 ⁄ 综合 ⁄ 共 670字 ⁄ 字号 评论关闭

协作式调度 :
多个任务,某一时刻只能有一个任务运行。只有当前任务主动要求放弃时调度器才会运行其它任务。
也叫简单的前后台调度。

一个最简单的协作式任务,任务没有优先级,有2种状态(运行,睡眠)。缺省为运行态,主动放弃既进入睡眠态。任务拥有一个堆栈。

调度策略:调度器有一个任务列表,找第一个运行态任务执行,如果所有任务都在睡眠,调度器也睡眠(所有任务的最小睡眠时间)。

调度器api:
     
    struct task_t;
    typedef void (*entry_t)(task_t*); // entry function
    struct task_t{        
        unsigned char *stack_top; //stack top ,栈顶指针!
        entry_t entry; // entry function , 任务入口函数        
        unsigned long start,left,id; // time left,运行起始时间和剩余睡眠时间,任务id
        task_t():left(0),start(0),id(0){}
    };
    
    task_t* schedule();
    void run(); //启动调度器
    void addTask(task_t* p); //加入任务
    void sleep(task_t *p, unsigned long m); // 任务睡眠m毫秒

 

下载:

http://www.pudn.com/downloads148/sourcecode/os/detail640752.html

抱歉!评论已关闭.