QNX neutrino 實時操作系統的原理

QNX_1_實時操作系統原理 (譯)

  QNX中微子RTOS的主要目標是以一種健壯的、可伸縮的形式交付開放系統POSIX API,這種形式適用於廣泛的系統——從小型的資源受限的嵌入式系統到高端的分佈式計算環境。該操作系統支持多個處理器家族,包括x86和ARM。對於任務關鍵型應用程序,健壯的體系結構也是基礎,因此OS靈活而完整地使用了MMU硬件。當然,僅僅制定這些目標並不能保證結果。我們邀請您通讀本系統架構指南,以瞭解我們的實現方法和爲實現這些目標所選擇的設計折衷。當您讀完本指南時,我們認爲您會同意QNX Neutrino是第一個真正實現了開放系統標準,並具有廣泛的可伸縮性和高可靠性的操作系統產品。

嵌入式POSIX操作系統?

  根據一個流行的神話,如果您使用POSIX操作系統,您會發現有UNIX也在其列! POSIX操作系統太大,不適合嵌入式系統。 然而,事實是POSIX不是UNIX。儘管POSIX標準植根於現有的UNIX實踐,但POSIX工作組明確地以“接口而不是實現”的方式定義了這些標準。
  感謝POSIX精確的規範,以及高可用性的POSIX 測試套件,讓非傳統的操作系統體系結構可以提供POSIX API,而不需要採用傳統的UNIX內核。
  比較任意兩個POSIX系統,它們看起來非常相似——它們有許多相同的功能、實用程序等等。但在性能或可靠性方面,它們可能有天壤之別,而架構決定了這些不同。儘管QNX中微子的體系結構肯定不是unix的,但它實現了這個標準POSIX API。通過採用微內核體系結構,QNX操作系統是以一種易於按比例縮小或者根據需要按比例增加的實時嵌入式系統的形式來交付這個API。

產品擴展

  由於只需包含或省略提供所需功能的特定進程,就可以輕鬆地擴展微內核操作系統,因此可以將單個微內核操作系統用於比實時執行更廣泛的用途。
  產品開發通常採取創建“產品線”的形式,連續的模型提供更強大的功能。通過添加文件系統、網絡、圖形用戶界面和其他技術,使用微內核操作系統的開發人員可以根據需要輕鬆地擴展系統,而不必爲產品的每個版本都強制更改操作系統。這種可擴展的方法的一些優點包括:

  • 可移植應用代碼(在產品線內)
  • 用於開發整個產品線的通用工具
  • 可移植的開發人員技能
  • 減少投入市場的時間

爲什麼是用於嵌入式的POSIX系統?

  realtime應用程序開發的一個常見問題是,每個realtime OS都傾向於配備自己的專用API。在缺乏行業標準的情況下,競爭激烈的市場演變成這種狀態並不罕見,因爲對實時市場的調查經常顯示大量使用內部專有操作系統。POSIX的出現,代表一個統一這個市場的機會的出現。在衆多POSIX標準中,嵌入式系統開發人員最感興趣的是:

  • 1003.1 -定義用於進程管理、設備I/O、文件系統I/O和基本IPC的API。這包含了UNIX操作系統的基本功能,可以作爲許多應用程序的有用標準。從C語言編程的角度來看,ANSI X3J11 C被假定爲一個起點,然後管理進程、文件和tty設備的各個方面被詳細描述,超出了ANSI C所指定的範圍。
  • Realtime擴展–定義一組對基礎1003.1標準的實時擴展。這些擴展包括信號量、按優先級排序的進程調度、信號的實時擴展、高分辨率計時器控制、增強的IPC原語、同步和異步I/O,以及對實時連續文件支持的建議。
  • 線程——進一步擴展POSIX環境,包括在給定地址空間內創建和管理多個執行線程。
  • 額外的實時擴展——定義對實時標準的進一步擴展。描述了附加中斷處理程序等功能。
  • 應用程序環境概要—定義了幾個AEP(實時AEP,嵌入式系統AEP等)的POSIX環境,以適應不同的嵌入式能力集。這些配置文件表示帶有/不帶有文件系統和其他功能的嵌入式操作系統。
    除了採用行業標準的“從衆”動機之外,將POSIX標準應用於嵌入式實時市場還有幾個特定的優勢:
  • Multiple OS sources:
      硬件製造商不願意選擇單一來源的硬件組件,因爲如果該來源中斷生產,可能會帶來風險。出於同樣的原因,製造商不應該僅僅因爲他們的應用程序源代碼不能移植到其他操作系統上,就被限制在一個單一來源的、專有的操作系統上。
    通過按照POSIX標準構建應用程序,開發人員可以使用來自多個供應商的OS。只要開發人員避免使用特定於OS的擴展,應用程序源代碼可以很容易地從一個平臺移植到另一個平臺,從一個操作系統移植到另一個操作系統。
  • Portability of development staff:
      使用嵌入式開發的通用API,擁有一個realtime操作系統經驗的程序員可以直接將他們的技能應用到涉及其他處理器和操作系統的其他項目中。此外,具有UNIX或POSIX經驗的程序員可以很容易地在嵌入式實時系統上工作,因爲實時操作系統的API的非實時部分已經很熟悉了。
  • Development environment:
      即使在跨主機的開發環境中,API在本質上也與在嵌入式系統中相同。不考慮特定的主機(Linux, Windows,…)或目標(x86, ARM),程序員不需要擔心特定於平臺的字節序、對齊或I/O問題。

爲什麼說QNX neutrino是嵌入式操作系統?

   操作系統的主要職責是管理計算機的資源。系統中的所有活動,包括調度應用程序、將文件寫入磁盤、通過網絡發送數據等等,都應該儘可能無縫、透明地協同工作。有些環境需要比其他環境更嚴格的資源管理和調度。例如,實時應用程序依賴於操作系統來處理多個事件,並確保系統在可預測的時間限制內響應這些事件。操作系統的響應越快,實時應用程序必須在最後期限前完成的時間就越多。QNX中微子RTOS是嵌入式實時應用程序的理想選擇。
  它可以擴展到非常小的規模,並提供多任務處理、線程、優先級驅動的搶佔式調度和快速上下文切換,這些都是嵌入式實時系統的基本組成部分。此外,OS通過posix標準API提供了這些功能;沒有必要爲了實現一個小系統而放棄標準。QNX中微子也非常靈活。開發人員可以輕鬆地定製操作系統來滿足他們的應用程序的需求。從只有幾個小模塊的最基本的微內核配置,到爲數百個用戶提供服務的成熟的網絡系統,您可以自由地設置您的系統,只使用您需要的資源來處理手頭的工作。QNX中微子通過兩個基本原理實現了其獨特的效率、模塊化和簡單性。

  • 微內核
  • 基於消息的進程間通信

微內核架構

  流行語有時流行,有時不流行。供應商傾向於熱情地將當今的流行語應用到他們的產品上,不管這些術語是否真的適用。術語“微內核”已經變得流行。儘管許多新的操作系統被認爲是微內核(甚至是納米級),但是如果沒有一個明確的定義,這個術語可能就沒有什麼意義了。我們來定義一下這
個術語。微內核操作系統的結構是一個很小的內核,它提供可選的協作進程團隊所使用的最小服務,而這些進程又提供更高級別的操作系統功能。微內核本身缺乏文件系統和許多其他操作系統通常需要的服務;這些服務由可選流程提供。設計一個微內核操作系統的真正目標不是簡單地讓它變小。微內核操作系統體現了交付操作系統功能的方法的根本變化。模塊化是關鍵,大小隻是一個副作用。僅僅因爲一個內核很小就稱它爲微內核是完全沒有意義的。由於微內核提供的IPC服務用於將操作系統本身粘合在一起,所以這些服務的性能和靈活性決定了最終操作系統的性能。除了那些IPC服務之外,微內核在提供的服務和它們的實時性能方面與實時執行程序大致相當。
  微內核與executive的不同之處在於如何使用IPC服務來擴展內核的功能,並提供額外的服務流程。由於操作系統是作爲一組由微內核管理的協作進程實現的,所以用戶編寫的進程既可以作爲應用程序,也可以作爲擴展特定於行業的應用程序的底層操作系統功能的進程。操作系統本身變得開放且易於擴展。此外,用戶編寫的操作系統擴展不會影響核心操作系統的基本可靠性。許多實時執行人員實現POSIX 1003.1標準的一個困難是,他們的運行時環境通常是一個單進程、多線程模型,線程之間沒有保護內存。這樣的環境只是POSIX假設的多進程模型的一個子集;它不能支持fork()函數。相反,QNX中微子充分利用MMU在受保護的環境中提供完整的POSIX過程模型。如下圖所示,真正的微內核不僅爲用戶應用程序,而且爲操作系統組件(設備驅動程序、文件系統等)提供完整的內存保護。
1
2
3

  QNX操作系統的第一個版本在1981年發佈。在每一次後續的產品修訂中,我們都將以前產品的經驗應用到最新的版本中,這是我們迄今爲止最強大、可伸縮的操作系統。我們相信,正是這種經過時間考驗的經驗使QNX中微子RTOS能夠利用它所消耗的有限資源來交付它所做的功能。

The OS as a team of processes

  QNX中微子RTOS由小微核組成,管理一組相互協作的進程。如下圖所示,該結構看起來更像一個團隊,而不是一個個層級,像幾個等級相同的“玩家”之間通過微內核進行互動。
4
QNX中微子作爲一種“軟件總線”,可以讓你根據需要動態地插入/出操作系統模塊

A true kernel

  內核是任何操作系統的核心。在某些系統中,“內核”包含如此多的功能,以至於它實際上就是整個操作系統!但是我們的微內核是真正的內核。
  首先,就像實時執行的內核一樣,它非常小。其次,它只提供一些基本服務:

  • thread services 通過POSIX線程創建原語實現
  • signal services 通過POSIX signal 原語實現
  • message-passing services :微內核處理整個系統中所有線程之間的所有消息的路由。
  • synchronization services 通過POSIX線程同步原語。
  • scheduling services:微內核使用各種POSIX實時調度策略執行線程調度。
  • timer services :微內核提供了豐富的POSIX定時器服務集。
  • process management services:微內核和進程管理器一起組成一個單元(稱爲procnto)。進程管理器部分負責管理進程、內存和路徑名空間。與線程不同的是,微內核本身從來不調度執行。處理器僅在顯式內核調用、異常或響應硬件中斷時才執行微內核中的代碼。

系統進程

  除了託管微內核的/進程管理器模塊(procnto)提供的服務外,所有OS服務都是通過標準進程處理的。一個配置豐富的系統可以包括以下內容:

  • 文件系統管理filesystem managers
  • 字符設備管理charactor device managers
  • 本地網絡管理native network managers
  • TCP/IP

系統進程 vs 用戶自定義進程

  系統進程本質上與任何用戶編寫的程序沒有什麼區別,它們使用的公共API和內核服務對任何(適當特權的)用戶進程都是可用的。正是這種架構賦予了QNX中微子RTOS無與倫比的擴展性。由於大多數操作系統服務是由標準的系統流程提供的,所以擴展操作系統本身非常簡單:只需編寫新程序來提供新的操作系統服務。實際上,操作系統和應用程序之間的邊界可能變得非常模糊。系統服務和應用程序之間的惟一真正區別是,OS服務爲客戶管理資源。假設您已經編寫了一個數據庫服務器,那麼應該如何對這樣的進程進行分類呢?正如文件系統接受打開文件和讀寫數據的請求(通過消息)一樣,數據庫服務器也會接受請求。儘管對數據庫服務器的請求可能更加複雜,但這兩個服務器在提供API(由消息實現)方面非常相似,客戶機可以使用該API訪問資源。它們都是獨立的流程,可以由最終用戶編寫,並根據需要啓動和停止。一個數據庫服務器在一個安裝時可能被認爲是一個系統進程,而在另一個安裝時則被認爲是一個應用程序。真的沒關係!重要的一點是,操作系統允許乾淨地實現這些過程,而不需要修改操作系統本身的標準組件。對於創建自定
義嵌入式系統的開發人員來說,這提供了靈活性,可以將操作系統擴展到對他們的應用程序特別有用的方向,而不需要訪問操作系統源代碼。

設備驅動

  設備驅動程序允許操作系統和應用程序以通用的方式使用底層硬件(例如,磁盤驅動器、網絡接口)。雖然大多數OS要求設備驅動程序與操作系統本身緊密綁定,但QNX中微子的設備驅動程序可以作爲標準進程啓動和停止。因此,添加設備驅動程序不會影響os驅動程序的任何其他部分,可以像其他應用程序一樣開發和調試。

進程間通信

  當多個線程同時運行時,就像在典型的實時多任務環境中一樣,操作系統必須提供允許它們彼此通信的機制。進程間通信(IPC)是將應用程序設計爲一組協作進程的關鍵,其中每個進程處理整體中定義良好的一部分。該操作系統提供了一組簡單但功能強大的IPC功能,極大地簡化了由協作流程組成的應用程序的開發工作。有關更多信息,請參見進程間通信(IPC)一章。

QNX Neutino作爲一個消息傳遞操作系統

  QNX中微子是第一個利用消息傳遞作爲IPC基本手段的商業操作系統。操作系統的強大、簡單和優雅在很大程度上歸功於整個系統中消息傳遞方法的完整集成。在QNX中微子中,消息是一個字節包,從一個進程傳遞到另一個進程。操作系統對消息的內容沒有特殊的意義,消息中的數據對消息的發送方和接收方都有意義,但對其他任何人都沒有意義。消息傳遞不僅允許進程彼此傳遞數據,而且還提供了同步多個進程執行的方法。在發送、接收和回覆消息時,進程會經歷各種狀態變化,這些變化會影響它們的運行時間和持續時間。知道它們的狀態和優先級後,微內核就可以儘可能高效地調度所有進程,從而最大限度地利用可用的CPU資源。因此,這種單一的、一致的方法消息傳遞在整個系統中都是持續有效的。Realtime和其他任務關鍵型應用程序通常需要一種可靠的IPC形式,因爲組成這些應用程序的過程是緊密相關的。QNX中微子傳遞信息的設計原則有助於爲應用程序帶來秩序和更大的可靠性。

網絡分佈式內核

  最簡單的形式是,局域網提供了一種在幾個相互連接的計算機之間共享文件和外圍設備的機制。QNX中微子遠遠超出了這個簡單的概念,它將整個網絡集成到一個單一的、同質的資源集合中。網絡中任何機器上的任何線程都可以直接使用任何其他機器上的任何資源。從應用程序的角度來看,本地資源和遠程資源之間沒有區別,不需要在應用程序中構建特殊的設施來允許它們使用遠程資源。用戶可以在網絡上的任何地方訪問文件,利用任何外圍設備,並在網絡上的任何機器上運行應用程序(只要他們具有適當的權限)。進程可以在整個網絡的任何地方以相同的方式進行通信。同樣,操作系統無處不在的消息傳
遞IPC解釋了這種流動的、透明的網絡。

Single-computer model

  QNX中微子被設計成一個網絡範圍的操作系統。在某些方面,一個本地的QNX中微子網絡更像是一臺大型計算機,而不是一組單獨的微處理器。用戶只知道可供任何應用程序使用的大量資源。但是與大型機不同,QNX中微子提供了一個高度響應的環境,因爲可以在每個節點上提供適當數量的計算能力來滿足每個用戶的需求。例如,在任務關鍵型環境中,控制實時I/O設備的應用程序可能比其他不太關鍵的應用程序(如web瀏覽器)要求更高的性能。網絡的響應能力足以同時支持這兩種類型的應用程序,操作系統允許您在需要的地方和需要的時候將計算能力集中在硬實時系統中的設備上,而不會犧牲與桌面的併發連接。此外,實時計算的關鍵方面,如優先級繼承,可以在QNX中微子網絡上無縫運行,而不管使用的物理介質是什麼(交換結構、串行等)。

彈性網絡

  QNX中微子網絡可以使用各種硬件和行業標準協議組合在一起。由於這些對於應用程序和用戶是完全透明的,所以可以在任何時候引入新的網絡體系結構,而不會影響操作系統。網絡中的每個節點都被分配一個唯一的名稱作爲其標識符。此名稱是確定操作系統是作爲網絡運行還是作爲獨立操作系統運行的
惟一可見方法。
  這種程度的透明性是QNX中微子消息傳遞架構的獨特功能的又一個例子。在許多系統中,諸如網絡、IPC甚至消息傳遞等重要功能都構建在操作系統之上,而不是直接集成到其核心中。結果往往是一個笨拙、低效的雙重標準接口,進程之間的通信是一回事,而穿透神祕的單片內核的私有接口則完全是另一回事。與單片系統相比,QNX中微子的基礎是有效的通訊是有效運作的關鍵。因此,消息傳遞形成了我們的微內核體系結構的基石,並提高了整個系統中所有進程之間的所有事務的效率,無論是跨PC底板還是跨一英里長的雙絞線。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章