1

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

这是真的?

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

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

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

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

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

4

4 回答 4

4

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

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

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

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

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

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

于 2016-01-19T23:27:27.113 回答
2

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

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

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

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

于 2016-01-20T20:36:38.683 回答
1

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

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

如果你不了解系统调用,你可以谷歌它。这是一种用户通过软件中断服务程序访问内核的机制。

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

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

于 2016-01-21T10:15:58.200 回答
0

根据VxWorks作为 RTOS 的体系结构,很明显,它没有两个地址空间(用户和内核)。通过为每个任务提供自己的内存空间,用户服务和内核服务都将在单个地址空间中处理。此内存空间需要虚拟到物理内存映射,这仅适用于可选组件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

于 2020-05-02T11:08:46.303 回答