QNX system architecture 1 - QNX neutrino RTOS設計理念

開發QNX的主要目的是提供一個支持開放系統POSIX API,並且系統穩定,易於擴展爲各種應用系統:小到資源有限的嵌入式系統,大到高端的分佈式計算環境。QNX支持多個處理器家族,包括X86 ARM和powerPC

對於實時性要求高的應用系統,架構健壯也是基本要求,OS可以靈活的完全控制MMU硬件。

當然,簡單的設定這些目標並不能保證預期的結果。我們請你通讀System Architecture 指南,這樣可以對QNX實現方法,達到這些目標所採用的設計權衡。這樣,當你完成本指南,相信你會認可QNX Neutrino是第一個真正符合開放系統標準,可擴展,高度穩定的OS產品。

An embeddable POSIX OS?

如果按照當前最流行的做法來構建一個POSIX操作系統,你將會發現操作系統是UNIX,而UNIX對於嵌入式系統來說太龐大,有時並不適合。

實際POSIX並不等同於UNIX,儘管POSIX標準生根於UNIX,POSIX工作組把這個標準定義爲:接口,而非實現。因此我們可以認爲POSIX是一個實現標準,而UNIX OS是POSIX標準的一個實現。

感謝POSIX標準中的精確描述以及POSIX測試套,使得不採用傳統UNIX內核的操作系統也可以提供POSIX API,比如Linux,QNX。比較這些POSIX操作系統,我們會發現他們在外表上非常相似,有同樣的接口函數,工具集。但是當我們深窺這些系統的內部實現,性能以及穩定性,有可能千差萬別,這都歸於內部架構的不同。

儘管QNX採用non-UNIX架構,QNX實現了標準的POSIX API。通過採用微內核架構,OS發佈API的方式也變得非常靈活,可以根據需求增加和刪減API。

Product scaling

在微內核OS基礎上,可以通過包含或者排除提供功能的特定進程,定製需要的實時系統。

產品開發通常採用創建Product line的形式,一個包含全功能的OS,而不是對產品的每一個操作系統版本進行定製,開發者使用微內核可以很容易按需定製系統:增加文件系統,網絡,圖形用戶接口以及其他技術

這種擴展方法的優點包括:

  • 可移植的應用代碼
  • 公用工具可用來開發整個產品線
  • 開發團隊經驗技術可項目複用
  • 減少上市時間

Why POSIX for embedded systems?

實時應用開發面臨的一個問題:大多數實時操作系統傾向於提供私有API。由於缺乏產業標準,使用私有API反而是一個常見現象,對實時系統市場的調查顯示存在很多小作坊式私有操作系統。而POSIX提供了整合這個市場的良機。

在POSIX標準中,大部分嵌入式系統開發者感興趣的是如下標準:

  • 1003.1 定義了進程管理API,設備I/O,文件系統I/O以及基本IPC。這個標準包含了一個UNIX OS的基本功能,對於大部分應用,這是最有用的標準。從C語言開發的角度來看,ANSI X3J11 C可以看做基本點,而進程管理,文件,tty設備等方便則不在ANSI C描述之內。
  • Realtime Extensions - 在1003.1標準基礎上,定義了一組實時擴展。這些擴展包括信號量,進程調度優先級,信號實時擴展,高分辨率timer控制,增強IPCL原語,同步和異步I/O,以及實時連續文件支持建議。
  • Threads - 進一步擴展了POSIX環境,包括:給定地址空間內,多線程的創建和管理。
  • Additional Realtime Extensions - 進一步定義了實現標準。諸如attaching interrupt handlers得到了描述。
  • Application Environment Profiles - 定義了幾個POSIX環境AEPs (Realtime AEP, Embedded Systems AEP等等),適用不同的嵌入式應用場景。這些profiles定義了嵌入式OSs擁有的能力。

採用產業標準,除了趕潮流的動機,在嵌入式實時領域採用POSIX標準還有幾個特定好處:

  • Multiple OS sources

硬件製造商不願意選擇單一來源的硬件部件,因爲這種部件可能有斷貨的可能。同樣的道理,製造商不願使用封閉的私有OS,因爲這會導致他們的應用源碼無法移植到其他平臺。

而對於符合POSIX標準的應用,開發者可以受用來自多個廠商的OS,開發者可以輕易把應用移植到遵守POSIX的操作系統之上。

  • Portability of development staff

在嵌入式開發過程中,使用通用API,編程人員的一個實時系統經驗可以運用到其他項目中,即便使用不同的處理器和操作系統。此外,有UNIX和POSIX經驗的程序員可以很容易轉到嵌入式實時系統,因爲他們對實時系統API的非實時部分已經非常熟悉了。

  • Development environment

即便在交叉編譯環境中,API也和嵌入式系統保持一致。無論host使用什麼操作系統(Linux, Windows, ...)或者target是什麼平臺(x86, ARM),程序員不需要擔心平臺特定的endian,對齊和IO問題。

Why QNX Neutrino for embedded systems?

操作系統的主要責任是管理計算機資源,系統中的所有活動:調度應用程序,寫文件到磁盤,發送數據到網絡等,都應儘可能無縫的和透明的執行。

某些環境下要求嚴格的資源管理和調度請求。比如實時應用場景,需要操作系統能夠處理多個事件,並且確保操作系統能夠在指定時間內對事件作出響應。OS響應越好,留給應用在deadlines時間越多。

QNX Neutrino實時系統對於嵌入式實時應用是一個理想選擇。QNX可以被裁剪到很小的尺寸,並且提供多任務,線程,優先級驅動的進程剝奪,以及快速的上下文切換 - 一個實時操作系統必須具備的特質。此外,OS用標準POSIX API提供這些能力,並沒有爲了達到一個小系統而放棄POSIX標準。

QNX Neutrino也非常靈活。開發者很容易定製OS滿足他們的應用。從幾乎空架子的微內核配置加幾個小模塊,到全功能的網絡系統服務數百個用戶,自由的定製系統,僅使用哪些需要的功能

QNX Neutrino通過兩個基本原則,達到了獨一無二的有效,模塊和簡潔。

  • 微內核構架
  • 基於消息的進程鍵通信

Microkernel architecture

時髦詞通常從流行到不流行,開發商熱衷於使用時下的時髦詞來命名他們的產品,而不管這個詞是否適合產品

術語microkernel已經變得很流行,儘管很多新操作系統聲稱是"microkernels"(甚至號稱nanokernels),這個術語光從字面並不算是很清晰的定義。

讓我們嘗試定義下microkernel。一個microkernel OS是一個小的內核,提供了最小集和的服務,最小服務集被一些可選的進程使用。可選進程提供的更高級別的OS功能。microkernel本身並不包含文件系統和其他傳統OS包含的服務;QNX通過可選進程提供這些服務。

設計一個microkernel OS並不是簡單的讓OS變小。一個microkernel OS應該包含OS方法調用的變化。模塊化是關鍵特點,尺寸反而不重要,如果僅僅因爲一個kernel尺寸比較小就稱之爲microkernel,顯然不復合這個特點。

microkernel提供的IPC服務用來把OS粘合在一起,這些服務的性能和靈活性決定了OS整體的性能。除了這些IPC服務,microkernel幾乎是實時執行的,不管是提供的服務還是他們的實時性能。

microkernel把一個執行劃分爲IPC services和服務提供進程。OS是由一組microkernel管理的線程實現的,用戶程序可以作爲普通應用程序,也可以是OS的功能擴展,供其他應用程序使用。OS本身就變得開放可擴展的。此外,用戶實現的OS擴展並不會影響core OS的穩定性。

某些實時系統在實現POSIX 1003.1標準遇到一個困難是,這些實時系統使用單進程,多線程模型,線程之間沒有內存保護機制。這樣的實時系統僅僅是POSIX多進程模型的一個子集,不能支持fork()函數調用。而QNX neutrino則完全利用MMU,完整的實現了POSIX進程模型。

下圖顯示了一個真正的microkernel提供的完全內存保護,不僅僅是用戶態應用,而且包括了OS components(device drivers, filesystems等)。


Figure 1. Conventional executives offer no memory protection.


Figure 2. In a monolithic OS, system processes have no protection.


Figure 3. A microkernel provides complete memory protection

QNX OS的第一個版本在1981年上市,....以上省略100字吹牛逼。

The OS as a team of processes

QNX neutrino RTOS包含了一個microkernel,以及被microkernel管理的一組合作進程。

像下圖所示,OS結構看起來更像一個team,而不是hierarchy,


Figure 1. The QNX Neutrino RTOS architecture.

QNX Nentrino做爲一個軟件總線,使得用戶可以動態加載和移除 OS模塊。

A true kernel

內核是操作系統的心臟。在某些系統中,kernel包含了很多功能,幾乎就是整個操作系統的實現。

但是我們的微內核是一個真正的內核,首先像一個實時執行kernel,尺寸非常小;其次,它僅僅包含非常少的基本功能:

  • thread services - 實現POSIX 線程創建原語
  • signal services - 實現POSIX signal原語
  • message-passing services - 處理整個系統中所有系統間的message
  • synchronization services - 實現POSIX thread-synchronization原語
  • scheduling services - microkernel使用各種POSIX實時調度算法,調度線程執行。
  • timer services - microkernel提供了豐富的POSIX timer服務
  • process management services - microkernel和進程管理組成一個單元(稱爲procnto)。進程管理

和進程不同,Microkernel本身從來不會調度執行。當一個kernel調用,異常或者硬件中斷髮生時,處理器執行微內核代碼。

system processes

所有的OS服務(除了由microkernel/process manager module),是通過standard processes處理的。

一個配置較全的系統可以包括如下系統進程:

  • filesystem managers
  • character device managers
  • native network manager
  • TCP/IP

System process vs user-write processes

系統進程本質上很難和用戶程序區分,他們使用相同的public API和kernel 服務。

正是這個架構給了QNX空前的可擴展性。因爲大部分OS services是以標準系統進程的方式提供,所以只需寫新程序即可提供新的OS服務。

實時上,操作系統和應用程序的邊界已經變得非常模糊,系統服務和應用之間的唯一區別就是系統服務管理資源給client應用

比如你寫了一個database server, 那麼如何劃分這個database server呢?

如同filesystem接收open read write(via message)請求一樣,database server從客戶端接收到數據庫訪問請求。filesystem和database server都向客戶端提供了訪問資源API。並且都是獨立的進程,可以由客戶端用戶實現,以及按需啓動和停止。

因此,一個database server可以被看做一個system process,也可以被看做一個application。不過真的無所謂了!重要的是OS允許修改OS標準部件前提下,實現該進程。對於定製嵌入式系統的開發者來說,可以不訪問OS源碼,就能擴展OS的功能給他們的特定應用。

device drivers

設備驅動允許OS和應用程序以一致的方式訪問底層硬件。

大多數OSs需要設備驅動緊緊綁定到OS內,QNX neutrino設備驅動以像標準進程一樣啓動和停止。因此,增加設備驅動並不會影響OS的其他部分,驅動本身可以像其他應用一樣開發和調試。


Interprocess communication

當即個線程並行運行時,如同典型的實時多任務環境,OS必須提供機制,使得這些進程可以彼此通信。

interprocess communication(IPC),一個應用可以由多個進程組成,每個進程負責處理其中部分工作,IPC是這種設計的關鍵因素。

OS提供簡單 強大的一組IPC能力,可以簡化應用的協同進程的開發工作。

QNX as a message-passing operating system

QNX Neutrino是第一個用消息傳送實現IPC的商用操作系統,OS擁有的能力,簡潔以及優雅歸功於消息傳遞方法集成到整個系統。

在QNX Neutrino,一個消息是從一個進程傳送到另外進程的bytes包。OS本身並沒有賦予消息任何特定的含義,只有消息的發送者和接收者理解消息中數據的含義。

消息傳遞不僅允許進程間傳送數據,而且也提供了進程執行的一種同步方式。當進程發送,接收和響應消息時,進程經歷了各種狀態變化,這影響了進程何時運行,以及運行多久。知道他們的狀態和優先級,microkernel可以有效的調度所有進程,充分利用CPU資源。信息傳遞這個簡單,一致性的方法因此持續的影響整個系統運行。

實時和其他關鍵任務應用,通常需要一個可信賴的IPC,因爲構成這些應用的進程是強相關的。

QNX Neutrino消息傳遞施加的規則使得應用程序更可靠。

Network distribution of kernel

最簡單的形式,本地局域網爲幾個內部互聯計算機,提供了共享文件和外設的機制。QNX Neutrino遠不止這個簡單概念,它集成整個網絡到一個單一的,同質資源集合。

網絡中任意機器的任意線程可以直接使用其他任何機器的任何資源。從應用程序的角度,本地和遠程資源並沒有區別。因此應用程序也不需要特別處理來使用遠程資源。

用戶可以在網絡上任意位置訪問文件,使用任意的設備,在網絡上任意機器上運行應用程序。處理器可以使用一致的方法和網絡中的設備通信。OS中無處不在的消息傳遞IPC機制保證流暢,透明的網絡。

Single-computer model

Flexible networking






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