Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 寻找有限状态机不同调度算法的比较_Algorithm_Embedded_Scheduled Tasks_Scheduler_State Machine - Fatal编程技术网

Algorithm 寻找有限状态机不同调度算法的比较

Algorithm 寻找有限状态机不同调度算法的比较,algorithm,embedded,scheduled-tasks,scheduler,state-machine,Algorithm,Embedded,Scheduled Tasks,Scheduler,State Machine,在没有操作系统的嵌入式系统中,是否有好的资源(书籍、网站)可以很好地比较有限状态机(FSM)的不同调度算法 我正在设计一个没有操作系统的简单嵌入式web服务器。我想知道用于安排系统中发生的不同事件的处理的各种方法 例如,如果两个事件同时到达,事件的优先级如何?如果我为事件分配不同的优先级,如何确保优先级较高的事件首先得到处理?如果在处理事件时出现更高优先级的事件,如何确保立即处理该事件 我计划使用FSM检查事件到达时的各种条件,然后正确安排事件处理。因为嵌入式web服务器没有操作系统,所以我正在

在没有操作系统的嵌入式系统中,是否有好的资源(书籍、网站)可以很好地比较有限状态机(FSM)的不同调度算法

我正在设计一个没有操作系统的简单嵌入式web服务器。我想知道用于安排系统中发生的不同事件的处理的各种方法

例如,如果两个事件同时到达,事件的优先级如何?如果我为事件分配不同的优先级,如何确保优先级较高的事件首先得到处理?如果在处理事件时出现更高优先级的事件,如何确保立即处理该事件


我计划使用FSM检查事件到达时的各种条件,然后正确安排事件处理。因为嵌入式web服务器没有操作系统,所以我正在考虑使用一种方法。但是我想比较一下这种方法中可以使用的不同算法的优缺点。

如果我知道这个问题的意思,答案可能仍然是Miro Samek的

你说:“我的意思是,例如,在like中的调度条件,如果两个任务同时到达,则需要对哪个任务进行优先级排序,并与嵌入式Web服务器中的其他情况类似。”

我将其解释为:“当多个任务同时到达时,用于确定首先执行(计划)哪个任务的规则集是什么。”

我用你的术语“任务”来说明相似性。但Clifford是正确的。正确的术语应该是“事件”或“消息”

当你说“日程安排条件”时,我想你的意思是“确定事件日程安排的一套规则”

算法的定义是:在计算或其他解决问题的操作中,特别是由计算机执行的过程或规则集

摘自一篇题为:

考虑计算机的中央处理单元,它必须处理 随时间到达的作业顺序。作业应按什么顺序到达 为了平均最大限度地缩短作业完成的时间而进行处理 在系统中从到达到完成

这听起来就像你所说的“计划条件”

我之所以提出这一点,是因为用正确的词语来描述你所寻找的将有助于我们(SO社区)为你提供更好的答案,并有助于你自己进一步研究

如果我对你的问题的解释仍然不是你所想的,请让我知道,特别是我所说的是错误的,我会再试一次。也许更多的例子可以帮助我更好地理解

关于日程安排的进一步阅读(这是您要求的):

  • 当然,一个很好的起点是维基百科关于
  • 比您要查找的级别低一点,但仍然包含有关日程安排的详细信息(注意:无论出于何种原因,PDF的页面顺序相反,请从底部开始)
  • 优先级中断调度程序示例:

    typedef struct {
        void   (*task)(void); // Pointer to the task function.
        uint32_t period;      // Period to execute with.
        uint32_t delay;       // Delay before first call.
    } task_type;
    
    volatile uint32_t elapsed_ticks = 0;
    task_type tasks[NUM_TASKS];
    
    void Dispatch_Tasks(void)
    {
        Disable_Interrupts();
        while (elapsed_ticks > 0) { // TRUE only if the ISR ran.
            for (uint32_t i = 0; i < NUM_TASKS; i++) {
                if (--tasks[i].delay == 0) {
                    tasks[i].delay = tasks[i].period;
    
                    Enable_Interrupts();
                    tasks[i].task(); // Execute the task!
                    Disable_Interrupts();
                }
            }
            --elapsed_ticks;
        }
        Enable_Interrupts();
    }
    
    // Count the number of ticks yet to be processed.
    void Timer_ISR(void)
    {
        ++elapsed_ticks;
    }
    
    以优先级为0的架构为例。两个事件同时出现。一个优先级为2,另一个优先级为3。调度算法开始处理优先级为2的事件,因为它具有更高的优先级

    处理优先级为2的事件时,另一个优先级为0的事件进入。计划程序中断优先级为2的事件并处理优先级为0的事件

    处理完优先级为0的事件后,它将返回到处理优先级为2的事件。处理完优先级为2的事件后,它将处理优先级为3的事件

    最后,当处理完所有优先级中断后,它将控制权返回给主处理任务,主处理任务处理优先级不重要的事件

    举例说明:

    在上图中,“任务”是指所提到的双列直插式开关或
    main()

    要搜索的术语有和。一些好的阅读材料是(我从中获得图像的地方)、和上的一篇论文

    我提到Toppers内核规范只是因为我从中得到了映像。但任何实时操作系统的核心都是它的调度算法和中断架构

    您询问的“事件”处理将由微处理器/微控制器中断子系统处理。您如何构造优先级以及如何处理非优先级事件是整个调度算法的组成部分

    协作调度程序的示例:

    typedef struct {
        void   (*task)(void); // Pointer to the task function.
        uint32_t period;      // Period to execute with.
        uint32_t delay;       // Delay before first call.
    } task_type;
    
    volatile uint32_t elapsed_ticks = 0;
    task_type tasks[NUM_TASKS];
    
    void Dispatch_Tasks(void)
    {
        Disable_Interrupts();
        while (elapsed_ticks > 0) { // TRUE only if the ISR ran.
            for (uint32_t i = 0; i < NUM_TASKS; i++) {
                if (--tasks[i].delay == 0) {
                    tasks[i].delay = tasks[i].period;
    
                    Enable_Interrupts();
                    tasks[i].task(); // Execute the task!
                    Disable_Interrupts();
                }
            }
            --elapsed_ticks;
        }
        Enable_Interrupts();
    }
    
    // Count the number of ticks yet to be processed.
    void Timer_ISR(void)
    {
        ++elapsed_ticks;
    }
    
    typedef结构{
    void(*task)(void);//指向任务函数的指针。
    uint32\u t period;//要执行的期间。
    uint32\u t delay;//第一次调用前的延迟。
    }任务类型;
    易失性uint32时间间隔=0;
    任务类型任务[任务数量];
    作废分派任务(作废)
    {
    禁用中断();
    while(已用_ticks>0){//仅当ISR运行时为TRUE。
    对于(uint32_t i=0;i
    上面的例子摘自一篇题为

    协作调度器是超级循环和计时器中断的组合