为什么shell不是RTOS代码的一部分?

时间:2015-12-17 08:39:14

标签: shell rtos

我看到许多RTOS(Ex Nuttx)将shell作为应用程序。

RTOS中是否只是将不太重要的代码保存在RTOS之外以最小化代码大小? 在Linux中,OS不是shell的一部分吗? 为什么shell不应该作为内存管理器等模块在OS代码中? 如果我将RTOS中的shell代码移动到RTOS& inited&像任何其他RTOS模块一样启动,会有任何问题吗?

1 个答案:

答案 0 :(得分:2)

  

在RTOS中保留不那么重要的代码只是一种惯例吗?   外部RTOS以最小化代码大小?

这不是惯例,也不是"重要性"。 RTOS供应商/作者几乎无法确定嵌入式应用程序中的重要内容。 RTOS通常不是真正的"完整的操作系统",但它只是具有IPC,定时和同步服务的确定性实时线程或进程调度程序。他们做得很好,其他一切都归功于应用程序开发人员。此外,大多数RTOS只不过是用于构建单个多线程应用程序的静态链接库,而不是可以动态加载,执行和终止进程的操作系统。因此,在这个意义上,所提供的任何shell都不是您建议的单独应用程序,而是一个单独的库组件,并且在运行时是一个单独的线程或任务。

此外,典型的嵌入式应用程序通常在严格的内存限制下运行在自定义硬件上,因此RTOS通常必须是最小的或可扩展的,以便它只包含嵌入式应用程序所需的内容,仅此而已。中"中间件"例如文件系统,网络,USB,命令shell等是必需的,它们通常由第三方库或附加组件提供,并作为线程而不是内核运行;因为同样是应用程序开发人员确定哪些任务是实时关键,必须抢先任何其他操作。所以它也是关于完整的调度控制。

  

Linux中的操作系统是不是shell的一部分?

它不是Linux 内核的一部分(Linux不是RTOS)。大多数Linux发行版都包含一个shell,Linux的本质是某些形式的shell是必需的,或者至少方便调试,配置和维护。但Linux难以比拟;最小的"轻量级"分发需要大约4Mb的ROM和16Mb的RAM来勉强启动,而典型的RTOS内核需要< 4Kb ROM和非常少的RAM。

  

为什么不应该将shell作为内存管理器等模块放在OS代码中?   如果我将RTOS中的shell代码移动到RTOS& inited&像任何其他RTOS模块一样启动,会有任何问题吗?

您不清楚RTOS"内部的含义,以及您在任何特定情况下可以执行的操作都将特定于该产品。如果RTOS是静态库,RTOS内部或外部都没有,它就是一个应用程序。在RTOS 内核 - 执行调度的部分 - 这没什么意义。

以上所有内容都描述了典型的RTOS。它们所包含的产品差异很大,但大多数产品具有高度可扩展性。例如,FreeRTOS或uC / OS-II等产品不再是调度内核,而eCOS,QNX和VxWorks在不同程度上包括更完整的操作系统,包括文件系统,shell,网络组件,在某些情况下还有明确的设备驱动程序架构,甚至在某些情况下是POSIX API。

相关问题