RTOS中是否存在用户空间/内核空间?

问题描述 投票:1回答:4

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

这是真的吗?

同时,我从其他人那里听说这是不正确的,并且诸如VxWorks或Integrity之类的RTOS已将用户模式内核模式分开。

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

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

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

最后,作为附带的问题,他们如何控制I / O操作并避免竞争状况?

kernel real-time rtos kernel-mode usermode
4个回答
3
投票
没有MMU,内核和用户模式之间的任何分隔都有些虚幻(您可以简单地覆盖内核内存),但是仍然存在区别:

通常,RTOS将配置有许多任务,每个任务都有自己的堆栈。这意味着上下文切换仍然是等式中的很大一部分,因为无论何时内核要切换任务,它都必须先保存传出任务的堆栈,然后在传入任务的堆栈中进行交换,然后再移交给传入任务。

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

仍然,如果没有MMU,在这种方案中将不会有任何“真正的”保护措施,以防止偶然地与内核发生冲突。例如,在没有MMU的情况下使RTOS崩溃的最简单的方法是错误地配置堆栈大小,然后导致堆栈溢出,意外清除内核数据/其他任务/覆盖实际程序指令...

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


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

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

在内部,RTOS仅指提供确定性行为的调度方法;没有一种设计,而且在方法和功能上都有很大差异。请参阅特定RTOS的文档。


1
投票
在不支持MMU的RTOS中,通过仅通过syscall限制用户访问来保证用户和内核的分离。

如果您不了解syscall,则可以对其进行Google搜索。这是一种机制,用户可以通过软件中断服务例程来访问任何内核。

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

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


0
投票
© www.soinside.com 2019 - 2024. All rights reserved.