为什么航天器、导弹喜欢用单片机,而不是嵌入式系统?
扫描二维码
随时随地手机看文章
道哥的第 029 篇原创
-
一、前言
-
二、关于单片机与嵌入式系统之间界定
-
1. 单片机
-
2. 嵌入式系统
-
3. 嵌入式 Linux
-
三、非实时、软实时、硬实时
-
四、x86 Linux 系统的调度策略
-
1. 为什么 Linux 系统是软实时?
-
2. Linux 系统如何改造成硬实时?
-
(1) RT-Preempt
-
(2) Xenomai
-
五、RTOS 的优势
-
六、总结
一、前言
前几天和一个在某研究所的发小聊天,他说:现在的航空、航天和导弹等武器装备中,控制系统几乎都是用单片机,而不是嵌入式系统。
二、关于单片机与嵌入式系统之间界定
说实话,关于它俩的区分,没有人可以给出一个标准的、正确的答案。每个人理解的单片机与嵌入式系统,都是略有差别的。
1. 单片机
- 单片机,全称单片微型计算机(single-chip microcomputer),又称微控制器单元 MCU(microcontroller unit)。
- 把中央处理器、存储器、定时/计数器、各种输入输出接口等都集成在一块集成电路芯片上的微型计算机。
- 由于其发展非常迅速,旧的单片机的定义已不能满足,所以在很多应用场合被称为范围更广的微控制器;
2. 嵌入式系统
- 嵌入式系统(Embedded System),是一种嵌入机械或电气系统内部、具有专一功能和实时计算性能的计算机系统。
- 嵌入式系统常被用于高效控制许多常见设备,被嵌入的系统通常是包含数字硬件和机械部件的完整设备,例如汽车的防锁死刹车系统。
- 现代嵌入式系统通常是基于微控制器(如含集成内存和/或外设接口的中央处理单元)的,但在较复杂的系统中普通微处理器(使用外部存储芯片和外设接口电路)也很常见。
3. 嵌入式Linux
- 嵌入式Linux(英语:Embedded Linux)是一类嵌入式操作系统的概称,这类型的操作系统皆以Linux内核为基础,被设计来使用于嵌入式设备。
- 与电脑端运行的linux系统本质上是一样的,虽然经过了一些功能上的裁剪,但是本质上是一样的,主要利用 Linux 内核中的的任务调度、内存管理、硬件抽象等功能。
4. RTOS
- 实时操作系统(RTOS),又称即时操作系统,它会按照排序运行、管理系统资源,并为开发应用程序提供一致的基础。
- 实时操作系统与一般的操作系统相比,最大的特色就是“实时性”,如果有一个任务需要执行,实时操作系统会马上(在较短时间内)执行该任务,不会有较长的延时。这种特性保证了各个任务的及时执行。
三、非实时、软实时、硬实时
首先要明白什么叫实时性?实时性考虑的不是速度、性能、吞吐量,而是确定性,也就是说:当一个事件发生的时候,可以确定性的保证在多长时间内得到处理,只要能满足这个要求,就可以成为硬实时。比如:
操作系统1:当中断发生时,可以保证在 1 秒内得到这里,那么它就是硬实时系统,虽然响应时间长,但它是确定的;也看到有文章说:应该取消软实时这个模棱两可的说法,要么是实时,要么是非实时!
操作系统2:当中断发生时,几乎都可以在 1 毫秒内完成,那么那就不能成为硬实系统,虽然响应时间短,但是它不确定。
2. 任务抢占延时:当一个高优先级的任务准备就绪时,从正在执行的低优先级任务中抢夺 CPU 资源所经过的时间;
四、x86 Linux 系统的调度策略
我们日常使用的 PC 机,它的主要目标是并行执行多任务,强调的是吞吐率(尽可能多的执行很多应用程序的代码),因此,采用的是分时操作系统,也就是每个任务都有一个时间片,当一个任务分配的时间片用完了,就自动换出(调度),然后执行下一个任务。
1. SCHED_OTHER: 系统默认的调度策略,计算动态优先级(counter 20-nice),当时间片用完之后放在就绪队列尾;
2. SCHED_FIFO: 实时调度策略,根据优先级进行调度,一旦占用CPU就一直执行,直到自己放弃执行或者有更高优先级的任务需要执行;
3. SCHED_RR: 也是实时调度策略,在 SCHED_FIFO 的基础上添加了时间片。在执行时,可以被更高优先级的任务打断,如果没有更高优先级的任务,那么当任务的执行时间片用完之后,就会查找相同优先级的任务来执行。
1. 为什么 Linux 系统是软实时的?
可能有小伙伴会有疑问:既然 Linux 系统中提供了 SCHED_FIFO 基于优先级的调度策略,为什么仍然不能称之为真正的硬实时操作系统?这就要从 Linux 的发展历史说起了。
2. Linux 系统如何改成硬实时?
以上描述的几个因素,对 Linux 实现真正的实时性构成了很大的障碍,但是现实世界又的确有很多场合需要 Linux 具有硬实时,那么就要针对上面的每一个因素提出解决方案。
这 2 种解决方案分别有不同的实现,从调研情况来看,RT-Preempt 和 Xenomai 是使用比较多的,下面分别来看一下他们的优缺点。
- 单内核解决方案:给 Linux 内核打补丁,解决上面提到的几个问题,例如:RT-Preempt;
- 双内核解决方案:在硬件抽象层之上,运行 2 个内核:实时内核 Linux 内核,它们分别向上层提供 API 函数,例如:Xenomai;
(1)RT-Preempt
这种方式主要是对 Linux 内核进行打补丁,解决了上面所说的几个问题:内核不可抢占、自旋锁、关中断以及终端优先级的问题。
(2)Xenomai
Xenomai是一个 Linux 内核的实时开发框架,它希望通过无缝地集成到 Linux 环境中来给用户空间应用程序提供全面的,与接口无关的硬实时性能。下面是 Xenomai 的架构图:
五、RTOS 的优势
上面已经说到,Linux 桌面系统的主要目标是吞吐量,在单位时间内执行更多的代码。
六、总结
关于任务调度的问题,是一个操作系统的重中之重,其中需要学习的内容还有很多,最近刚买了一本陈海波老师的新书,也就是华为的鸿蒙系统背后的灵魂人物。
https://linuxfoundation.org/blog/intro-to-real-time-linux-for-embedded-developers/好文章,要转发;越分享,越幸运!
https://wiki.archlinux.org/index.php/Realtime_kernel_patchset
http://www.faqs.org/faqs/realtime-computing/faq/
https://xenomai.org/documentation/xenomai-3/html/README.INSTALL/