為什么航天器、導(dǎo)彈喜歡用單片機(jī),而不是嵌入式系統(tǒng)?
道哥的第 029 篇原創(chuàng)
-
一、前言
-
二、關(guān)于單片機(jī)與嵌入式系統(tǒng)之間界定
-
1. 單片機(jī)
-
2. 嵌入式系統(tǒng)
-
3. 嵌入式 Linux
-
三、非實(shí)時(shí)、軟實(shí)時(shí)、硬實(shí)時(shí)
-
四、x86 Linux 系統(tǒng)的調(diào)度策略
-
1. 為什么 Linux 系統(tǒng)是軟實(shí)時(shí)?
-
2. Linux 系統(tǒng)如何改造成硬實(shí)時(shí)?
-
(1) RT-Preempt
-
(2) Xenomai
-
五、RTOS 的優(yōu)勢(shì)
-
六、總結(jié)
一、前言
前幾天和一個(gè)在某研究所的發(fā)小聊天,他說:現(xiàn)在的航空、航天和導(dǎo)彈等武器裝備中,控制系統(tǒng)幾乎都是用單片機(jī),而不是嵌入式系統(tǒng)。
二、關(guān)于單片機(jī)與嵌入式系統(tǒng)之間界定
說實(shí)話,關(guān)于它倆的區(qū)分,沒有人可以給出一個(gè)標(biāo)準(zhǔn)的、正確的答案。每個(gè)人理解的單片機(jī)與嵌入式系統(tǒng),都是略有差別的。
1. 單片機(jī)
- 單片機(jī),全稱單片微型計(jì)算機(jī)(single-chip microcomputer),又稱微控制器單元 MCU(microcontroller unit)。
- 把中央處理器、存儲(chǔ)器、定時(shí)/計(jì)數(shù)器、各種輸入輸出接口等都集成在一塊集成電路芯片上的微型計(jì)算機(jī)。
- 由于其發(fā)展非常迅速,舊的單片機(jī)的定義已不能滿足,所以在很多應(yīng)用場(chǎng)合被稱為范圍更廣的微控制器;
2. 嵌入式系統(tǒng)
- 嵌入式系統(tǒng)(Embedded System),是一種嵌入機(jī)械或電氣系統(tǒng)內(nèi)部、具有專一功能和實(shí)時(shí)計(jì)算性能的計(jì)算機(jī)系統(tǒng)。
- 嵌入式系統(tǒng)常被用于高效控制許多常見設(shè)備,被嵌入的系統(tǒng)通常是包含數(shù)字硬件和機(jī)械部件的完整設(shè)備,例如汽車的防鎖死剎車系統(tǒng)。
- 現(xiàn)代嵌入式系統(tǒng)通常是基于微控制器(如含集成內(nèi)存和/或外設(shè)接口的中央處理單元)的,但在較復(fù)雜的系統(tǒng)中普通微處理器(使用外部存儲(chǔ)芯片和外設(shè)接口電路)也很常見。
3. 嵌入式Linux
- 嵌入式Linux(英語:Embedded Linux)是一類嵌入式操作系統(tǒng)的概稱,這類型的操作系統(tǒng)皆以Linux內(nèi)核為基礎(chǔ),被設(shè)計(jì)來使用于嵌入式設(shè)備。
- 與電腦端運(yùn)行的linux系統(tǒng)本質(zhì)上是一樣的,雖然經(jīng)過了一些功能上的裁剪,但是本質(zhì)上是一樣的,主要利用 Linux 內(nèi)核中的的任務(wù)調(diào)度、內(nèi)存管理、硬件抽象等功能。
4. RTOS
- 實(shí)時(shí)操作系統(tǒng)(RTOS),又稱即時(shí)操作系統(tǒng),它會(huì)按照排序運(yùn)行、管理系統(tǒng)資源,并為開發(fā)應(yīng)用程序提供一致的基礎(chǔ)。
- 實(shí)時(shí)操作系統(tǒng)與一般的操作系統(tǒng)相比,最大的特色就是“實(shí)時(shí)性”,如果有一個(gè)任務(wù)需要執(zhí)行,實(shí)時(shí)操作系統(tǒng)會(huì)馬上(在較短時(shí)間內(nèi))執(zhí)行該任務(wù),不會(huì)有較長(zhǎng)的延時(shí)。這種特性保證了各個(gè)任務(wù)的及時(shí)執(zhí)行。
三、非實(shí)時(shí)、軟實(shí)時(shí)、硬實(shí)時(shí)
首先要明白什么叫實(shí)時(shí)性?實(shí)時(shí)性考慮的不是速度、性能、吞吐量,而是確定性,也就是說:當(dāng)一個(gè)事件發(fā)生的時(shí)候,可以確定性的保證在多長(zhǎng)時(shí)間內(nèi)得到處理,只要能滿足這個(gè)要求,就可以成為硬實(shí)時(shí)。比如:
操作系統(tǒng)1:當(dāng)中斷發(fā)生時(shí),可以保證在 1 秒內(nèi)得到這里,那么它就是硬實(shí)時(shí)系統(tǒng),雖然響應(yīng)時(shí)間長(zhǎng),但它是確定的;也看到有文章說:應(yīng)該取消軟實(shí)時(shí)這個(gè)模棱兩可的說法,要么是實(shí)時(shí),要么是非實(shí)時(shí)!
操作系統(tǒng)2:當(dāng)中斷發(fā)生時(shí),幾乎都可以在 1 毫秒內(nèi)完成,那么那就不能成為硬實(shí)系統(tǒng),雖然響應(yīng)時(shí)間短,但是它不確定。
2. 任務(wù)搶占延時(shí):當(dāng)一個(gè)高優(yōu)先級(jí)的任務(wù)準(zhǔn)備就緒時(shí),從正在執(zhí)行的低優(yōu)先級(jí)任務(wù)中搶奪 CPU 資源所經(jīng)過的時(shí)間;
四、x86 Linux 系統(tǒng)的調(diào)度策略
我們?nèi)粘J褂玫?PC 機(jī),它的主要目標(biāo)是并行執(zhí)行多任務(wù),強(qiáng)調(diào)的是吞吐率(盡可能多的執(zhí)行很多應(yīng)用程序的代碼),因此,采用的是分時(shí)操作系統(tǒng),也就是每個(gè)任務(wù)都有一個(gè)時(shí)間片,當(dāng)一個(gè)任務(wù)分配的時(shí)間片用完了,就自動(dòng)換出(調(diào)度),然后執(zhí)行下一個(gè)任務(wù)。
1. SCHED_OTHER: 系統(tǒng)默認(rèn)的調(diào)度策略,計(jì)算動(dòng)態(tài)優(yōu)先級(jí)(counter 20-nice),當(dāng)時(shí)間片用完之后放在就緒隊(duì)列尾;
2. SCHED_FIFO: 實(shí)時(shí)調(diào)度策略,根據(jù)優(yōu)先級(jí)進(jìn)行調(diào)度,一旦占用CPU就一直執(zhí)行,直到自己放棄執(zhí)行或者有更高優(yōu)先級(jí)的任務(wù)需要執(zhí)行;
3. SCHED_RR: 也是實(shí)時(shí)調(diào)度策略,在 SCHED_FIFO 的基礎(chǔ)上添加了時(shí)間片。在執(zhí)行時(shí),可以被更高優(yōu)先級(jí)的任務(wù)打斷,如果沒有更高優(yōu)先級(jí)的任務(wù),那么當(dāng)任務(wù)的執(zhí)行時(shí)間片用完之后,就會(huì)查找相同優(yōu)先級(jí)的任務(wù)來執(zhí)行。
1. 為什么 Linux 系統(tǒng)是軟實(shí)時(shí)的?
可能有小伙伴會(huì)有疑問:既然 Linux 系統(tǒng)中提供了 SCHED_FIFO 基于優(yōu)先級(jí)的調(diào)度策略,為什么仍然不能稱之為真正的硬實(shí)時(shí)操作系統(tǒng)?這就要從 Linux 的發(fā)展歷史說起了。
2. Linux 系統(tǒng)如何改成硬實(shí)時(shí)?
以上描述的幾個(gè)因素,對(duì) Linux 實(shí)現(xiàn)真正的實(shí)時(shí)性構(gòu)成了很大的障礙,但是現(xiàn)實(shí)世界又的確有很多場(chǎng)合需要 Linux 具有硬實(shí)時(shí),那么就要針對(duì)上面的每一個(gè)因素提出解決方案。
這 2 種解決方案分別有不同的實(shí)現(xiàn),從調(diào)研情況來看,RT-Preempt 和 Xenomai 是使用比較多的,下面分別來看一下他們的優(yōu)缺點(diǎn)。
- 單內(nèi)核解決方案:給 Linux 內(nèi)核打補(bǔ)丁,解決上面提到的幾個(gè)問題,例如:RT-Preempt;
- 雙內(nèi)核解決方案:在硬件抽象層之上,運(yùn)行 2 個(gè)內(nèi)核:實(shí)時(shí)內(nèi)核 Linux 內(nèi)核,它們分別向上層提供 API 函數(shù),例如:Xenomai;
(1)RT-Preempt
這種方式主要是對(duì) Linux 內(nèi)核進(jìn)行打補(bǔ)丁,解決了上面所說的幾個(gè)問題:內(nèi)核不可搶占、自旋鎖、關(guān)中斷以及終端優(yōu)先級(jí)的問題。
(2)Xenomai
Xenomai是一個(gè) Linux 內(nèi)核的實(shí)時(shí)開發(fā)框架,它希望通過無縫地集成到 Linux 環(huán)境中來給用戶空間應(yīng)用程序提供全面的,與接口無關(guān)的硬實(shí)時(shí)性能。下面是 Xenomai 的架構(gòu)圖:
五、RTOS 的優(yōu)勢(shì)
上面已經(jīng)說到,Linux 桌面系統(tǒng)的主要目標(biāo)是吞吐量,在單位時(shí)間內(nèi)執(zhí)行更多的代碼。
六、總結(jié)
關(guān)于任務(wù)調(diào)度的問題,是一個(gè)操作系統(tǒng)的重中之重,其中需要學(xué)習(xí)的內(nèi)容還有很多,最近剛買了一本陳海波老師的新書,也就是華為的鴻蒙系統(tǒng)背后的靈魂人物。
https://linuxfoundation.org/blog/intro-to-real-time-linux-for-embedded-developers/好文章,要轉(zhuǎn)發(fā);越分享,越幸運(yùn)!
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/