即時作業系統 (Real-time Operating System)

即時作業系統 (Real-time Operating System)

即時作業系統 (Real-time Operating System)


資料來源:https://sls.weco.net/node/21340


定義:    

    即時作業系統(Real-time operating system,RTOS),是指作業系統要在一個固定時間內,做出正確反應,以及對時序及穩定度的要求十分嚴格,它會按照排序執行、管理系統資源,並為開發應用程式提供一致的基礎。 

    即時作業系統相較一般的作業系統,最大的特色就在於「即時性」,也就是說,如有一個 process 需執行,即時作業系統會在最短時間內執行該 process ,不會有較長的延遲。這種特性保證了各個 process 的即時執行。通常都具備有最基礎的 kernel,以及外加上去的模組,像是檔案系統、網路協定堆疊和應用、裝置驅動程式……等模組。RTOS 的核心通常包括,排程器、物件、服務程式。 

    衡量一個即時作業系統堅固性的重要指標,是他從接收一個 process,到完成該 process 所需的時間,其時間的變化稱為 jitter。硬即時作業系統比軟即時作業系統有更少的 jitter。設計即時作業系統的首要標的不是高的 throughput,而是保證 process 在特定時間內完成。 

    即時作業系統可分類為「軟式(Soft)」與「硬式(Hard)」。硬即時作業系統,是指系統從命令起始到執行動作之間的中斷延遲回應特性。一般像是 Win CE 這種的軟即時作業系統,其反應時間約為 1~2ms,要達到硬即時性能的要求,其反應時間必須要在 150μs 以內;軟即時系統通常指超過期限後,系統的公用程式可容忍某段誤差時間。舉例來說,當行動電話來電時,則必須在按下按鈕時即建立連結。然而,此限制時間並非絕對,亦可有些許的延遲。 

    硬即時作業系統必須使 process 在確定的時間內完成,而軟即時作業系統能讓絕大多數 process 在確定時間內完成。

4 thoughts on “即時作業系統 (Real-time Operating System)

  1. http://www.programmer-club.com.tw/ShowSameTitleN/embedded/73.html

    以下概略列舉業界流行的 free RTOS 優缺點:

    1. embedded Linux, ucLinux

    優點: 系統完整, 功能強大, 支援各種 file system, TCP/IP stack, communication protocol stack, 發展工具齊全(GNU toolchain), 網路上高手多, 有熱情的專家們定期更新版本, 書籍資料多, 看都看不完.

    缺點: 是否歸類於 RTOS 仍有爭議, 只支援 32-bit CPU, 複雜度高, device driver 架構稍大, 移植難度較大, 編譯後的 file footprint (kernel + application) 過大, 新手較難維護, scheduling mode 較少, hard-real time scheduling 的支援度待改進.

    2. e-Cos

    優點: 發展工具齊全(GNU toolchain), 模組化程度非常好, 支援的 CPU 架構多, 複雜度較低, device driver 架構比較簡單, 移植容易, 編譯後的 file footprint 小, 有專門的公司定期更新版本.

    缺點: 支援的 file system, TCP/IP stack 和 communication protocol 較少, scheduling mode 較少, 網路上高手較少, 出問題要找專人解決時的顧問費用不低.

    3. uc/OS-II

    優點: 支援的 CPU 架構多, 系統單純, 學習容易, 書籍內容精彩, device driver 發展容易, 移植容易, 編譯後的 file footprint 非常小, 有專門的公司維護版本.

    缺點: 發展工具少( borland C/C++ only. 但可改用 GNU toolchain). 沒有 file system 和 TCP/IP stack (要自己解決), scheduling mode 較少, 網路上高手較少. 商用授權費不低.

    學習 RTOS 和評估使用那一個 RTOS 是兩回事. 以學習 RTOS 來說, 初學者先得瞭解什麼是 real-time system, 她和 PC/Server 有何不同. 再瞭解 programming for RTOS 和一般 programming 的差異, 她的 multi-tasking scheduling 的方式, task 間彼此 synchronize/communication 的方式等等. 以鍛鍊上述基本功夫來說, uC/OS-II 確實是一個理想的學習工具. 她夠單純, 但 RTOS 該有的基本機制她都有. 她和藹可親, 初學者很快就可以與她打成一片. 她身材纖細苗條, 只要 32K bytes 的 flash 就可以存放了.

    至於如何為產品選擇 RTOS, 則需要對專案有全局的瞭解才能挑出適用之材, 例如產品規格需求, 軟硬體發展時程, 預算多寡, 人員訓練等等. 因為許多時候 RTOS 是產品成敗的關鍵. 舉個例子, 如 linux, 有些公司只著眼在她是免費的, 忽略了客戶 real-time 的需求, 或是用了 uc/OS-II 才發現需要 file system 或 TCP/IP stack, 導致專案延誤甚至取消.

  2. 非實時、軟實時、硬實時(即時) (software real-time VS hardware real-time)

    資料來源: https://mp.weixin.qq.com/s?__biz=MzA3MzAwODYyNQ%3D%3D&mid=2247484519&idx=1&sn=453f30ead847474e7e121584ca4298a4&scene=45#wechat_redirect

    首先要明白什麼叫實時性?實時性考慮的不是速度、性能、吞吐量,而是確定性,也就是說:當一個事件發生的時候,可以確定性的保證在多長時間內得到處理,只要能滿足這個要求,就可以成為硬實時。

    衡量實時性的指標就是:

    1.中斷延時:一個外部事件引發的中斷發生時,到相應的中斷處理程序第一條指令被執行時,所經過的時間;
    2.任務搶占延時:當一個高優先級的任務準備就緒時,從正在執行的低優先級任務中搶奪CPU資源所經過的時間;

    不同的操作系統,其任務調度機制也是不一樣的,而這個調度機制的策略,又是與實際的使用場景相關的。因此,並不存在哪個好、哪個不好這樣的說法,合適的就是最好的!

    比如:我們的桌面系統,需要考慮的是多任務、並發,需要同時執行多個程序,哪個程序慢一點,用戶無所謂,甚至覺察不到;但是對於一個導彈控制系統,當一個外部傳感器輸入信號,觸發一個事件時,對應的處理必須立刻執行,否則耽擱1毫秒,結果可能就是差之千里!

  3. RTOS系统与Linux系统的区别

    https://blog.csdn.net/xi_gua_gua/article/details/53934161

    實時操作系統
      英文稱Real Time Operating System,簡稱RTOS。
    1.實時操作系統定義   
    實時操作系統(RTOS)是指當外界事件或數據產生時,能夠接受並以足夠快的速度予以處理,其處理的結果又能在規定的時間之內來控制生產過程或對處理系統作出快速響應,並控制所有實時任務協調一致運行的操作系統。
    因而,提供及時響應和高可靠性是其主要特點。
    實時操作系統有硬實時和軟實時之分,硬實時要求在規定的時間內必須完成操作,這是在操作系統設計時保證的;軟實時則只要按照任務的優先級,盡可能快地完成操作即可。我們通常使用的操作系統在經過一定改變之後就可以變成實時操作系統。  
    實時操作系統是保證在一定時間限制內完成特定功能的操作系統。例如,可以為確保生產線上的機器人能獲取某個物體而設計一個操作系統。在“硬”實時操作系統中,如果不能在允許時間內完成使物體可達的計算,操作系統將因錯誤結束。在“軟”實時操作系統中,生產線仍然能繼續工作,但產品的輸出會因產品不能在允許時間內到達而減慢,這使機器人有短暫的不生產現象。一些實時操作系統是為特定的應用設計的,另一些是通用的。一些通用目的的操作系統稱自己為實時操作系統。但某種程度上,大部分通用目的的操作系統,如微軟的Windows NT或IBM的OS/390有實時系統的特徵。這就是說,即使一個操作系統不是嚴格的實時系統,它們也能解決一部分實時應用問題。2.實時操作系統的特徵  1)多任務;  2)有線程優先級  3)多種中斷級別  小的嵌入式操作系統經常需要實時操作系統,內核要滿足實時操作系統的要求。3.實時操作系統的相關概念 
      (1)基本概念
      代碼臨界段:指處理時不可分割的代碼。一旦這部分代碼開始執行則不允許中斷打入;
      資源:任何為任務所佔用的實體;
      共享資源:可以被一個以上任務使用的資源;
      任務:也稱作一個線程,是一個簡單的程序。每個任務被賦予一定的優先級,有它自己的一套CPU寄存器和自己的棧空間。典型地,每個任務都是一個無限的循環,每個任務都處在以下五個狀態下:休眠態,就緒態,運行態,掛起態,被中斷態;
      任務切換:將正在運行任務的當前狀態(CPU寄存器中的全部內容)保存在任務自己的棧區,然後把下一個將要運行的任務的當前狀態從該任務的棧中重新裝入CPU的寄存器,並開始下一個任務的運行;
      內核:負責管理各個任務,為每個任務分配CPU時間,並負責任務之間通訊。分為不可剝奪型內核於可剝奪型內核;
      調度:內核的主要職責之一,決定輪到哪個任務運行。一般基於優先級調度法;
      (2)關於優先級的問題
      任務優先級:分為優先級不可改變的靜態優先級和優先級可改變的動態優先級;
      優先級反轉:優先級反轉問題是實時系統中出現最多的問題。共享資源的分配可導致優先級低的任務先運行,優先級高的任務後運行。解決的辦法是使用“優先級繼承”算法來臨時改變任務優先級,以遏制優先級反轉。
      (3)互斥
      雖然共享數據區簡化了任務之間的信息交換,但是必須保證每個任務在處理共享共享數據時的排他性。使之滿足互斥條件的一般方法有:關中斷,使用測試並置位指令(TAS),禁止做任務切換,利用信號量。
      因為採用實時操作系統的意義就在於能夠及時處理各種突發的事件,即處理各種中斷,因而衡量嵌入式實時操作系統的最主要、最具有代表性的性能指標參數無疑應該是中斷響應時間了。中斷響應時間通常被定義為:
      中斷響應時間=中斷延遲時間+保存CPU狀態的時間+該內核的ISR進入函數的執行時間[2]。
      中斷延遲時間=MAX(關中斷的最長時間,最長指令時間) +開始執行ISR的第一條指令的時間[2]。

    分時操作系統  
      英文:Time-sharing Operating System
       釋義:使一台計算機同時為幾個、幾十個甚至幾百個用戶服務的一種操作系統。把計算機與許多終端用戶連接起來,分時操作系統將系統處理機時間與內存空間按一定的時間間隔,輪流地切換給各終端用戶的程序使用。由於時間間隔很短,每個用戶的感覺就像他獨占計算機一樣。分時操作系統的特點是可有效增加資源的使用率。
    例如UNIX系統就採用剝奪式動態優先的CPU調度,有力地支持分時操作。
      產生分時系統是為了滿足用戶需求所形成的一種新型OS 。
    它與多道批處理系統之間,有著截然不同的性能差別。用戶的需求具體表現在以下幾個方面:人—機交互共享主機便於用戶上機
      分時系統的基本思想
      時間片:是把計算機的系統資源(尤其是CPU時間)進行時間上的分割,每個時間段稱為一個時間片,每個用戶依次輪流使用時間片。
      分時技術:把處理機的運行時間分為很短的時間片,按時間片輪流把處理機分給各聯機作業使用。
      分時操作系統:是一種聯機的多用戶交互式的操作系統。一般採用時間片輪轉的方式使一台計算機為多個終端服務。對每個用戶能保證足夠快的響應時間,並提供交互會話能力。
      設計目標:對用戶的請求及時響應,並在可能條件下盡量提高系統資源的利用率。
      工作方式:
      一台主機連接了若干個終端;每個終端有一個用戶在使用;交互式地向系統提出命令請求;系統接受每個用戶的命令;採用時間片輪轉方式處理服務請求;並通過交互方式在終端上向用戶顯示結果;用戶根據上步結果發出下道命令
      分時系統實現中的關鍵問題:及時接收。及時處理。
      特徵:
      交互性:用戶與系統進行人機對話。
      多路性:多用戶同時在各自終端上使用同一CPU。
      獨立性:用戶可彼此獨立操作,互不干擾,互不混淆。
      及時性:用戶在短時間內可得到系統的及時回答。
      影響響應時間的因素:終端數目多少、時間片的大小、信息交換量、信息交換速度。

    例子:

    分時——現在流行的PC,服務器都是採用這種運行模式,即把CPU的運行分成若干時間片分別處理不同的運算請求
    實時——一般用於單片機上,比如電梯的上下控制中,對於按鍵等動作要求進行實時處理

    以下對四種實時操作系統(RTOS)特性進行分析和比較。它們是:Lynx實時系統公司的LynxOS、QNX軟件系統有限公司的QNX以及兩種具有代表性的實時Linux–新墨西哥工學院的RT-Linux和堪薩斯大學的KURT-Linux。

      近年來,實時操作系統在多媒體通信、在線事務處理、生產過程控制、交通控制等各個領域得到廣泛的應用,因而越來越引起人們的重視。

      1、基本特徵概述

      QNX是一個分佈式、嵌入式、可規模擴展的實時操作系統。它遵循POSIX.1、(程序接口)和POSIX.2(Shell和工具)、部分遵循POSIX.1b(實時擴展)。它最早開發於1980年,到現在已相當成熟。
      LynxOS是一個分佈式、嵌入式、可規模擴展的實時操作系統,它遵循POSIX.1a、POSIX.1b和POSIX.1c標準。它最早開發於1988年。
      RT-Linux是一個嵌入式硬實時操作系統,它部分支持POSIX.1b標準。
      KURT-Linux不是為嵌入式應用設計的,不同於硬(hard)實時/軟(soft)實時應用,他們提出”嚴格(firm)”實時應用的概念,如一些多媒體應用和ATM網絡應用,KURT是為這樣一些應用設計的”嚴格的”實時系統。

      2、體系結構異同

      實時系統的實現多為微內核體系結構,這使得核心小巧而可靠,易於ROM固化,並可模塊化擴展。微內核結構系統中,OS服務模塊在獨立的地址空間運行,所以,不同模塊的內存錯誤便被隔離開來。但它也有弱點,進程間通信和上下文切換的開銷大大增加。相對於大型集成化內核系統來說,它必須靠更多地進行系統調用來完成相同的任務。

      QNX是一個微內核實時操作系統,其核心僅提供4種服務:進程調度、進程間通信、底層網絡通信和中斷處理,其進程在獨立的地址空間運行。所有其它OS服務,都實現為協作的用戶進程,因此QNX核心非常小巧(QNX4.x大約為12Kb)而且運行速度極快。

      LynxOS目前還不是一個微內核結構的操作系統,但它計劃使用所謂的”Galaxy”技術將其從大型集成化內核改造成微內核,這一技術將在LynxOS 3.0中引入。新的28Kb微內核提供以下服務:核心啟動和停止、底層內存管理、出錯處理、中斷處理、多任務、底層同步和互斥支持。

      RT-Linux實現了一個小的實時核心,僅支持底層任務創建、中斷服務例程的裝入、底層任務通信隊列、中斷服務例程(ISR)和Linux進程。原來的非實時Linux核心作為一個可搶先的任務運行於這個小核心之上,所有的任務都在核心地址空間運行。它不同於微內核和大型內核,屬於實時EXE(realtime executive)體系結構。其可靠性和可維護性對電信服務系統來說都不夠理想。

      KURT-Linux核心包括兩個部分:內核和實時模塊。內核負責實時事件的調度,實時模塊為用戶進程提供特定的實時服務。它不屬於微內核結構。

      3、調度策略分析

      任務調度策略是直接影響實時性能的因素。儘管調度算法多種多樣,但大多由單調率算法(RM)和最早期限優先算法(EDF)變化而來。前者主要用於靜態週期任務的調度,後者主要用於動態調度,在不同的系統狀態下兩種算法各有優劣。在商業產品中採用的實際策略常常是各種因素的折中。

      QNX提供POSIX.1b標准進程調度:
      32個進程優先級;
      搶占式的、基於優先級的正文切換;
      可選調度策略:FIFO、輪轉策略、適應性策略。
      LynxOS其調度策略為:
      LynxOS支持線程概念,提供256個全局用戶線程優先級;
      硬實時優先級調度:在每個優先級上實現了輪轉調度、定量調度和FIFO調度策略;
      快速正文切換和阻塞時間短;
      搶占式的RTOS核心。

      RT-Linux
      在操作系統之下實現了一個簡單的實時核心,Linux本身作為一個可搶占的任務在核內運行,優先級最低,隨時會被高優先級任務搶占。
      用戶可自行編寫調度程序,它們可實現為可加載的核心模塊;
      已實現的調度程序有:基於優先級的搶占式調度和EDF調度;
      基於優先級的調度使用”單調率算法”,它直接支持週期任務。

      KURT-Linux
      可運行在兩種狀態之下:通常狀態和實時狀態。在通常狀態下,所有進程都可以運行,但某些核心服務將帶來中斷屏蔽的不可預期性。實時模式只允許實時進程運行。
      支持FIFO調度策略、輪轉調度策略和UNIX分時調度策略;
      增加了SCHED-KURT調度策略,這是一種靜態調度策略,使用一個特殊的調度文件記錄預先定義好的待調度進程的參數。

      從以上簡略描述可以看出,前三種調度策略實現較規範,特別是兩種商業RTOS,遵循或部分遵循POSIX.1b實時調度標準。

     4、操作系統服務比較

      4.1 QNX的系統服務:

      多種資源管理器,包括各種文件系統和設備管理,支持多個文件系統同時運行,包括提供完全POSIX.1及UNIX語法的POSIX文件系統,支持多種閃存設備的嵌入式文件系統,支持對多種文件服務器(如Windows NT/95、LAN Manager等)的透明訪問的SMB文件系統、DOS文件系統、CDROM文件系統等。
      設備管理。在進程和終端設備間提供大吞吐量、低開銷接口服務。
      圖形/窗口支持。包括QNX Windows、X Window System for QNX、對MS Windows NT/95和X Window系統的遠程圖形連接。
      TCP/IP for QNX。
      高性能、容錯型QNX網絡–FLEET,使得所有連入網絡的計算機變成一個邏輯上的超級計算機。
      透明的分佈式處理。FLEET網絡處理與消息傳遞和進程管理原語的集成,將本地和網絡IPC統一起來,使得網絡對IPC而言是透明的。

      4.2 LynxOS的系統服務:

      網絡和通信。由於使用UNIX/POSIX API,Lynx很適合於數據通信和Internet應用。又由於系統的開放性,網絡軟件很容易移植到Lynx上。同樣,Lynx亦提供關鍵的電話通信協議,使之適用於電信系統的基礎架構、操作和多媒體應用。
      TCP/IP協議棧。Lynx自帶優化的TCP/IP協議棧,提供高性能服務,如TCP頭預測、高級路由算法、IP級多址廣播和鏈路級高速緩衝。
      Internet工具。包括,Telnet、Ftp、tftp、PPP、SLIP、實時調度的嵌入式Java虛擬機、嵌入式HTTP server、bootp、ARP/RARP、DNS域名服務、電子郵件、Perl、電話通信協議等。
      SVR3流。LynxOS流機制為開發和移植基於流的驅動程序和應用提供了核心支持。
      文件系統。實時的類UNIX層次結構文件系統:連續結構文件、帶緩衝/不帶緩衝、原始分區和原始設備訪問。
      基於Motif的圖形用戶接口。
      分佈式計算資源。SCMP與VME總線上的多處理結合,PCI橋服務、CompactPCI Hot-swap Services、Lynx/HA-DDS分佈式數據系統。

      4.3 Linux的系統服務:

      近來,很多基於Linux的實時應用被開發出來,它具有成熟和豐富的資源。

      UNIX用戶的開發工具和應用軟件都被移植到Linux上。
      TCP/IP網絡協議。
      各種Internet客戶/服務端軟件。
      X Window。
      C/C++、Java等語言編譯器。

      上述系統的共同點是都提供了圖形界面、各種網絡支持等必要工具。QNX是一個更加符合傳統”分佈式”概念的操作系統,目標是把整個局域網變成一個大的超級計算機,使得網絡的存在對用戶透明,文件系統提供的服務也很豐富。但是,分佈式的程度越高也意味著系統開銷的增大。LynxOS則著意於提供豐富的網絡服務,而Linux的最大優勢則是經濟,還可以通過新聞組或mailing

      5、系統開放性對比

      對於很多大、中型系統來說,大多數軟件都是為UNIX平台編寫的,因此RTOS是否提供POSIX/UNIX API就顯得很重要。

      5.1 QNX的開放性

      QNX的POSIX兼容性和其提供的UNIX特色的編譯器、調試器、X Window和TCP/IP都是UNIX程序員所熟悉的。
      支持多種CPU:AMD ElanSC300/310/400/410、Am386 DE/SE、Cyrix MediaGX、x86處理器(386以上)、Pentium系列、STMicroelectronics的STPC。
      多種總線:CompactPCI、EISA、ISA 、MPE (RadiSys)、STD、STD 32、PC/104、PC/104-Plus、PCI、PCMCIA、VESA、VME。
      各種外設:多種SCSI設備、IDE/EIDE驅動器、10M/100M以太網卡、Token Ring網卡、FDDI接口卡、多種PCMCIA設備、閃存、聲卡等等。

      5.2 LynxOS的開放性

      POSIX.1a、1b、1c及BSD4.4等兼容性,使得遵循POSIX 1003或用於UNIX的程序很容易移植到LynxOS上。
      支持多種CPU主板:包括CompactPCI(6U/3U)和標準PCI、VME/Eurobus、PC/104和PC/AT硬件等。
      各種外設適配器:10/100BaseT Ethernet、SCSI接口、單/多通道串行控制器、單/雙工並行口、時鐘、計時器、IDE接口、高分辨率顯示適配器等。

      5.3 Linux的開放性

      用戶可得到UNIX的全部開發工具。
      可使用市場上便宜又常見的硬件。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *