【问题标题】:In an RTOS can a process be prempted when running in kernel space在 RTOS 中,进程在内核空间中运行时可以被抢占
【发布时间】:2013-08-27 08:07:28
【问题描述】:

我了解进程在内核空间中运行时不能被抢占。 如果这是真的,在 RTOS 中如何保证响应性(如果系统调用需要更多时间来执行)?即使在内核空间中运行,也可以为进程进行上下文切换吗?

【问题讨论】:

  • RTOS = 实时操作系统?

标签: operating-system rtos context-switch


【解决方案1】:

进程能否被抢占取决于进程状态的设计。在 linux 上,您有 UNITERUPTIBLE_SLEEP 进程睡眠仍然完成了它所请求的某个服务。 (前读)。可能会发生服务从未完成且进程从未收到信号并且无限休眠(占用系统资源)的情况。

在 RTOS 的情况下,这种方法是不合理的,因为资源(Ex memory)是稀缺的。因此,进程永远不会处于 UNITERUPTILBE 状态。因此,操作系统可以过早地向休眠/等待某些服务的进程发送信号。因此操作系统对进程有更大的控制权,因此它也可以控制系统资源。

正如@Levente Kurusa 所指出的,操作系统可以在一段时间后向进程发送信号,使其要么向操作系统屈服控制,(确保良好响应时间的时间切片执行)要么在等待时终止它长期服务。

【讨论】:

    【解决方案2】:

    在 RTOS 中,每个进程都有最短的运行时间,系统调用被记录并以确保最坏情况下完成所需的最长时间的方式实现。也就是说,例如,当您调用open() 时,RTOS 的系统调用文档有一个最差时间字段。如果调用没有在 100 毫秒内完成,那么它将失败。 RTOS 的应用程序开发确实不同于一般操作系统的开发。您必须考虑每次通话的时间等。例如,在 QnX 上,您必须告诉操作系统最大响应时间。如果您的进程未在该帧中完成,它将被终止。
    注意:QnX 是适用于 x86 的 RTOS。

    【讨论】:

      【解决方案3】:

      RTOS 架构差异很大,因此无法做出一般性陈述。 内核空间的概念本身甚至可能与特定的 RTOS 无关,具体取决于其设计和运行平台。例如,没有 MMU 的目标无法真正实现这个概念,尽管一些目标具有可能被内核使用的中断或主管的特权执行模式,但这不是一回事,只涉及堆栈和寄存器集的切换和访问到某些指令而不是管理内存和 I/O 空间。

      许多 RTOS 只是简单的调度内核,仅提供任务调度、计时器、同步和 IPC,并作为静态库提供,因此最终应用程序是单片的。大多数情况下,所有线程都共享一个内存空间,并且由于未实现任务模型,因此“进程”而不是“轻量级”线程的概念。如果有“内核空间”的概念,那么通常只有操作系统调度程序本身会在该模式下运行,所有任务、线程或进程都在该“空间”之外运行。

      确实广泛使用 MMU 并使用“进程”模型的操作系统是 QNX,它使用微内核架构,因此负责调度的系统中只有很小的一部分在“内核空间”中运行,大部分操作系统并且所有用户进程都在此之外运行。

      然而,在 RTOS 中,中断要么永远不会被禁用,要么会在尽可能短的时间内被禁用,并且调度程序本身是完全确定的。

      要更好地理解 RTOS 概念,请查看 Jack Ganssle 的 this online course

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-01-17
        • 2022-09-28
        • 2021-05-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多