当前位置: 首页 > 知识库问答 >
问题:

无限循环任务的优先抢占式调度

邢法
2023-03-14

Google和Stackoverflow上有很多关于优先级抢占式调度的资料,但是我仍然对优先级抢占式调度内核中无限循环任务的调度感到困惑。让我们考虑以下情况:

RTOS启动两个任务< code>T1和< code>T2,优先级分别为< code>50和< code>100。这两项任务看起来都像:

void T1()
{
    while(1)
    {
        perform_some_task1();
        usleep(100);
    }
}

void T2()
{
    while(1)
    {
        perform_some_task2();
        usleep(100);
    }
}

据我所知,内核会因为其较高的优先级而调度T2并因为其较低的优先级而挂起T1。现在因为T2是一个无限循环,它永远不会将html" target="_blank">CPU放弃给T1,直到其他高优先级任务抢占T2

但是,我的理解似乎不正确,因为我已经在RTOS中测试了上述情况,并且我在两个任务打印的控制台上获得输出。

有人能评论我对此事的理解以及RTOS在上述情况下的实际行为吗?

共有1个答案

徐高韵
2023-03-14

在这种情况下,一旦perform_some_taskN();被执行,两个任务都将被挂起(释放资源供另一个线程使用)。根据留档:

usleep()函数将导致调用线程暂停执行,直到经过参数useconds指定的实时微秒数,或者向调用线程传递信号,并且其操作是调用信号捕获函数或终止进程。由于系统对其他活动的调度,暂停时间可能比请求的长。

顺便说一下,< code>usleep()已被弃用(请改用< code>nanosleep()):

POSIX.1-2001宣布此函数已过时;请改用 nanosleep(2)。POSIX.1-2008 删除了 usleep() 的规范。

 类似资料:
  • 在非先占优先级调度中,进程根据分配给它们的优先级编号进行调度。 一旦进程被安排好了,它就会运行直到完成。 通常,优先级数越低,进程的优先级越高。 人们可能会对优先级数字感到困惑,因此在GATE中,明确提到哪一个是最高优先级,哪一个是最低优先级。 示例 在例子中,有7个进程:,,,,,和。 它们的优先级,到达时间和爆发时间在表中给出。 进程ID 优先级 到达时间 爆发时间 1 2 0 3 2 6 2

  • 嗨,伙计们。我们被分配了一个关于抢占优先调度的任务,我真的不知道如何做到这一点,因为两个或多个进程具有相同的优先级编号。 我必须做一个甘特图,计算周转时间和平均等待时间。 如果可能的话,你们能否发布一个关于如何做到这一点的分步解决方案,以便我可以研究它是如何完成的。 谢谢你们的帮助。

  • 在抢占式优先级调度中,在进程到达就绪队列时,其优先级与就绪队列中存在的其他进程的优先级以及CPU在该点执行的优先级进行比较。 在所有可用的进程中具有最高优先级的那个将被赋予CPU。 抢先优先级调度和非抢占优先级调度之间的区别在于,在抢先优先级调度中,正在执行的作业可以在更高优先级作业到达时停止。 一旦所有作业在就绪队列中可用,算法将表现为非抢占式优先级调度,这意味着计划的作业将运行直至完成并且不会

  • 给定下表,用于计算基于优先级的抢占式调度的流程和平均等待时间。 甘特图如下: 我有以下问题: 1) 周转时间是否 = 19 个单位? 2)如何计算平均等待时间?有公式吗? 3)如果很少有进程具有相同的优先级,该怎么办? 我是操作系统的新手。我看过其他一些类似的问题,但我不知道该怎么做。

  • 假设我有两个进程等待使用抢先最短作业优先(SJF)执行。 在 Time = 2 时,两个进程的突发时间相同,即 3。SJF 排序会运行进程 2,因为它具有更高的初始突发时间,还是会运行进程,因为它们的突发时间当前相同? 谢谢:)

  • 我拿到这张桌子是为了抢先做最短工作 在G之前,它执行前有2秒,我需要包括它吗? 我在回答中用甘特图给出的表格是 我的问题是,是否可以包括F到达之前的等待时间?