【问题标题】:Does User space/Kernel Space exist in RTOS?RTOS 中是否存在用户空间/内核空间?
【发布时间】:2016-01-19 23:13:21
【问题描述】:

我从各种内核开发人员那里听说,大多数 RTOS 用户空间和内核空间之间没有任何分离,因此不需要任何上下文切换。

这是真的吗?

同时,我从其他一些人那里听说这是不正确的,VxWorks 或 Integrity 等 RTOS 已将用户模式内核模式分开。

首先,哪些假设是正确的?

其次,如果这两个假设都是正确的,那么它提出了一个问题,即 RTOS 供应商何时使用内核空间和用户空间之间的分离,何时不使用?

您能说出一些没有用户模式/内核模式分离的知名 RTOS 吗?

最后,作为一个附带问题,他们如何控制 I/O 操作并避免竞争条件?

【问题讨论】:

  • 这里的上下文切换是指用户内核空间切换还是线程/进程上下文切换?如果是先验,那么为了清楚起见,将其称为模式开关。

标签: kernel real-time rtos kernel-mode usermode


【解决方案1】:

上下文切换与用户/内核空间没有直接关系。上下文切换涉及线程/进程/中断上下文之间的切换;无论用户/内核空间或 MMU 保护的任何概念如何,这都会发生在任何 RTOS 中。

内核/用户空间概念是指特权级别,在内核空间中,您可以执行操作或访问用户空间不可用的内存或 I/O。在嵌入式系统中,这个概念可能没有多大意义,因为许多线程需要直接 I/O 访问以确保内核驱动程序切换可能无法提供的实时行为。许多实时操作系统不是完整的操作系统,而只是提供调度、IPC、同步、资源锁定和定时器服务的内核;它们通常不定义驱动程序模型或提供任何 I/O、网络或文件系统服务,因此内核空间概念没有什么价值。

而不是内核/用户空间的概念,一些运行在具有 MMU 的目标上的 RTOS 确实使用内存保护方案将内存和内存映射 I/O 分配给特定线程/进程(和内核),这样一个线程就不能不能破坏另一个或内核。另一方面,许多 RTOS 在没有 MMU 的目标上运行,因此无法提供这种安全性和稳健性。

在术语中,RTOS 仅指提供确定性行为的调度方法;没有一种设计,在方法和能力上都存在显着差异。请参阅特定 RTOS 的文档。

【讨论】:

    【解决方案2】:

    诸如 FreeRTOS 和衍生产品之类的东西可以在没有 MMU 的硬件上愉快地运行。

    如果没有 MMU,内核和用户模式之间的任何分离都有些虚幻(您可以简单地覆盖内核内存),但还是有区别的:

    通常情况下,RTOS 将配置有多个任务,每个任务都有自己的堆栈。这意味着上下文切换仍然是等式的重要组成部分,因为每当内核想要切换任务时,它必须首先保存传出任务的堆栈,然后在切换到传入任务之前交换传入任务的堆栈。

    作为 3rd 方开发人员 (ISV),您将编写代码以在任务上下文中运行,因此您可以利用任务机制使其行为类似于轻量级线程。

    不过,如果没有 MMU,在这个方案中就不会有任何“真正的”保护来防止意外弄乱内核。例如,在没有 MMU 的情况下使 RTOS 崩溃的最简单的方法是错误配置堆栈大小,然后导致堆栈溢出,意外清除内核数据/其他任务/覆盖实际程序指令...

    ...现在有了 MMU,内核可以设置页表映射,以便它可以拦截页面错误并在检测到错误的内存访问(违反预配置的内存边界)时使用它来实现段错误机制。借助芯片内置的附加安全功能,内核还可以限制允许执行何种指令任务,并与 MMU 结合实现内核和用户模式/空间之间的适当分离。

    【讨论】:

    • 感谢您的回答。因此,假设有一个 MMU,那么所有 RTOS 中都存在实际的内核空间用户空间分离,对吧?因此应用程序只能在用户模式下运行吗?
    • 取决于 RTOS 是否利用硬件。与任何此类软件一样:如果您想更确定,请参阅其文档。
    • 有时(例如 Renesas RX)嵌入式处理器带有 MPU(内存保护单元),即使它没有 MMU。 MPU 不支持虚拟内存,但它支持在每个任务(“每个进程”)的基础上分离可寻址区域。这可以保护内核免受恶意任务的攻击,并保护任务之间的相互攻击。
    【解决方案3】:

    首先,RTOS 可以支持用户和内核分离。有些人将此称为受保护的构建支持,其中用户/应用程序无法直接访问任何内核资源。

    在不支持 MMU 的 RTOS 中,通过仅通过系统调用限制用户访问来保证用户和内核分离。

    如果你不知道系统调用,你可以google一下。这是一种用户通过软件中断服务程序访问内核的机制。

    关于上下文切换,上下文切换和用户/内核分离之间没有关联。

    供应商何时支持用户和内核分离? 大多数情况下,它就像一个构建时功能。由于这会增加执行时间的开销,因此这取决于供应商在其 RTOS 背后的理念。

    【讨论】:

      【解决方案4】:

      根据作为 RTOS 的VxWorks 架构,显然它没有两个地址空间(用户和内核)。通过为每个任务提供自己的内存空间,用户服务和内核服务都将在单个地址空间中处理。此内存空间需要虚拟到物理内存映射,这仅适用于可选组件VxVMI(VxWorks 虚拟内存接口)。

      添加信息:我们使用具有单一地址空间的 RTOS,以提供非解释服务和更快的操作系统执行。 VxWorks 架构参考链接:
      https://www.google.com/url?sa=t&source=web&rct=j&url=http://www.ing.iac.es/~docs/external/vxworks.old/Programmers-Guide-5.4.pdf&ved=2ahUKEwjm3rmag5XpAhVEXn0KHSGPDYwQFjAAegQIBBAB&usg=AOvVaw0E9VEDjpd5XIvaaoDxGcCD

      【讨论】:

        猜你喜欢
        • 2017-11-16
        • 2020-12-04
        • 2012-03-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-03-28
        • 2014-01-14
        • 1970-01-01
        相关资源
        最近更新 更多