「QNX」の版間の差分
m ロボットによる 追加: sk:QNX |
m →歴史 |
||
(27人の利用者による、間の38版が非表示) | |||
1行目: | 1行目: | ||
{{出典の明記|date=2020年12月}} |
|||
{{Infobox_OS | |
|||
{{Infobox OS |
|||
name = QNX | |
|||
| name = QNX |
|||
screenshot = | |
|||
| logo = QNX 201x logo.svg |
|||
caption = | |
|||
| logo_size = 140px |
|||
developer = QNX Software Systems | |
|||
<!-- |
|||
family = UNIX系、リアルタイム | |
|||
| screenshot = QNX_6.4.1_screenshot.png |
|||
source_model = [[クローズドソース]]及び[[オープンソース]] | |
|||
| screenshot_size = 280 |
|||
latest_release_version = 6.4.0| |
|||
| caption = QNX 6.4.1上でのデスクトップ画面。(デフォルト状態) |
|||
latest_release_date = [[2008年]]10月| |
|||
--> |
|||
kernel_type = [[マイクロカーネル]] | |
|||
| developer = QNXソフトウェアシステムズ / [[ブラックベリー (企業)|ブラックベリー]] |
|||
working_state = 開発進行中 | |
|||
| source_model = [[クローズドソース]]及び[[オープンソース]](非商用利用のみ) |
|||
license = プロプライエタリ | |
|||
| kernel_type = リアルタイム・[[マイクロカーネル]] |
|||
website = [http://www.qnx.com www.qnx.com] | |
|||
| supported_platforms = [[Intel 8088|8088]], [[x86]], [[MIPSアーキテクチャ|MIPS]], [[PowerPC]], [[SuperH|SH-4]], [[ARMアーキテクチャ|ARM]], [[StrongARM]], [[XScale]] |
|||
| ui = |
|||
| family = [[Unix系]] |
|||
| released = {{Start date and age|1982}} |
|||
| latest_release_version = 7.0 |
|||
| latest_release_date = {{Start date and age|2017|03}} |
|||
| latest_test_version = |
|||
| latest_test_date = |
|||
| marketing_target = [[組み込みシステム]] |
|||
| programmed_in = |
|||
| prog_language = |
|||
| language = |
|||
| updatemodel = |
|||
| package_manager = [[NetBSD]]の[[pkgsrc]]フレームワークを利用可能 |
|||
| working_state = 開発進行中 |
|||
| license = [[プロプライエタリソフトウェア|プロプライエタリ]] |
|||
| website = {{URL|https://blackberry.qnx.com/en | Blackberry.qnx}} |
|||
}} |
}} |
||
'''QNX'''(キューエヌエックス、またはキューニックスと発音)は商用の |
'''QNX'''︵キューエヌエックス、またはキューニックスと発音︶は商用の[[リアルタイムオペレーティングシステム|リアルタイム]][[Unix系|Unix系オペレーティングシステム]]であり、[[POSIX]]と[[POSIX 1003.1b]]に対応している。主に[[組み込みシステム]]向けに販売されている。元々はカナダの企業QNXソフトウェアシステムズが開発していたが、同社は後にリサーチ・イン・モーション︵現[[ブラックベリー (企業)|ブラックベリー]]︶が取得した。
|
||
== 詳細 == |
== 詳細 == |
||
マイクロカーネルOSとして、QNXではOSのほとんどが﹁サーバ﹂と呼ばれる小さなタスクとして動作する。この点は従来からのモノリシックな[[カーネル]]を採用したOSと大きく異なる。[[モノリシックカーネル]]OSでは機能の大部分はひとつの大きなプログラムに含まれ、例えば不要な機能をOFFにしたい時などにはOS自体を変更︵再[[リンク]]など︶する必要がある。それに対しQNXではユーザや開発者はサーバを停止させることで簡単に不要な機能をOFFにすることができる。
|
[[マイクロカーネル]]OSとして、QNXではOSのほとんどが﹁サーバ﹂と呼ばれる小さなタスクとして動作する。この点は従来からのモノリシックな[[カーネル]]を採用したOSと大きく異なる。[[モノリシックカーネル]]OSでは機能の大部分はひとつの大きなプログラムに含まれ、例えば不要な機能をOFFにしたい時などにはOS自体を変更︵再[[リンク]]など︶する必要がある。それに対しQNXではユーザや開発者はサーバを停止させることで簡単に不要な機能をOFFにすることができる。
|
||
QNXのシステムは非常に小さく、[[フロッピーディスク]]1枚に納ま |
QNXのシステムは非常に小さく、[[フロッピーディスク]]1枚に納まるシステムでGUIが使えウェブがブラウズできるというデモシステムすらある<ref>{{Cite web|url= http://www.openqnx.com/Article259.html|title=QNX4 Demo Disk: An Expounding Look|date= 2004-03-24|accessdate=2009-03-13|author=Samuel Sidler|publisher=OpenQNX}}</ref>。そして非常に高速であり機能的にも完備されている。
|
||
[[2001年]]にリリースされた QNX Neutrino |
[[2001年]]にリリースされた QNX Neutrinoは現在組み込み市場で使われているほとんどの[[CPU]]で動作する。例えば、[[x86]]ファミリ、[[MIPSアーキテクチャ|MIPS]]、[[PowerPC]]、[[SuperH|SH-4]]、[[ARMアーキテクチャ|ARM]]、[[StrongARM]]、[[XScale]]などである。 |
||
2007年9月12日、非商用利用のためのライセンスも用意するようになった。 |
|||
QNXを現在所有しているのは[[ブラックベリー (企業)|ブラックベリー]]であり、同社の[[タブレット (コンピュータ)|タブレットコンピュータ]]用[[モバイルオペレーティングシステム|モバイルOS]]の[[BlackBerry Tablet OS]]および[[BlackBerry 10]]はQNXベースである。 |
|||
== 歴史 == |
== 歴史 == |
||
[[1980年]]、[[ウォータールー大学]]の学生だった |
[[1980年]]、[[ウォータールー大学]]の学生だったGordon BellとDan Dodgeは一般[[計算機科学]]課程でオペレーティングシステム設計を学び、その中で基本的なリアルタイムカーネルを作成した。彼らは、このようなシステムに需要があると考え、同年 ''Quantum Software Systems'' 社を設立した。[[1982年]]、最初のQNXを[[Intel 8088|8088]][[マイクロプロセッサ]]向けにリリースした。 |
||
最初にQNXが広く使われたのは組み込みシステムではなく、[[オンタリオ州]]の教育システムに採用された [[ユニシス|Unisys]] ICON のOSとしてである。当時としては、44KバイトのOSは組み込みシステムには大きすぎたため、もっと大きなシステムで主に使われたのである。このシステムは信頼性が高いと評判が良く、いくつかの工業アプリケーションに採用されるようになっていった。 |
最初にQNXが広く使われたのは組み込みシステムではなく、[[オンタリオ州]]の教育システムに採用された [[ユニシス|Unisys]] [[:en:Unisys ICON|ICON]] のOSとしてである。当時としては、44KバイトのOSは組み込みシステムには大きすぎたため、もっと大きなシステムで主に使われたのである。このシステムは信頼性が高いと評判が良く、いくつかの工業アプリケーションに採用されるようになっていった。
|
||
[[ |
[[1980年代]]末、Quantum社は市場が[[POSIX]]モデルに素早く移行しつつあるのを見て、カーネルの互換性を高めるための書き換えを決定した。そしてリリースされたのが QNX 4 である。このころインターンとして働いていた Patrick Hayden と正社員だった Robin Burgener が新たなコンセプトのウィンドウシステムを開発︵{{US patent|5745759}}︶。それを製品に生かして、組み込み可能な[[グラフィカルユーザインタフェース|GUI]]であるPhoton microGUIがOSに加えられた。同時に QNX 用の [[X Window System]] も用意された。QNX 4では[[POSIX]]準拠で[[UNIX]]や[[Berkeley Software Distribution|BSD]]用ソフトウェアの移植が容易となった。
|
||
Quantum Software Systemsは1990年代初期にQNXソフトウェアシステムズと改称して[[ハードディスクドライブ|ハードディスク]]企業の[[クアンタム (企業)|クアンタム]]と混同されないようにした。1990年代末 QNX RTOS の全面的な書き換えを行い、[[対称型マルチプロセッシング|SMP]]対応し、マイクロカーネルを維持しつつ既存の [[POSIX]] [[アプリケーションプログラミングインタフェース|API]] を全てサポートし、新たな POSIX API にもいち早く対応。その結果、2001年に QNX Neutrino RTOS をリリースすることになった。 |
|||
1990年代末までに彼らはマイクロカーネルを維持しつつ[[Linux]]に可能な限り近づけることを決めた。これによって2001年に '''QNX Neutrino''' がリリースされた。これに基本的に同梱されたのが Momentics という[[Eclipse (統合開発環境)|Eclipse IDE]] をベースとした[[統合開発環境]] (IDE)、様々な[[GNU]]ツール、Voyager [[ウェブブラウザ]]/サーバなどの[[インターネット]]ソフトウェアである。また会社は1990年代初期に '''QNX Software Systems''' と改称して[[ハードディスク]]企業の[[クアンタム (企業)|クアンタム]]と混同されないようにした。 |
|||
Neutrino カーネルと同時にQNXソフトウェアシステムズは開発ツールの充実にも熱心に取り組み、[[Eclipse (統合開発環境)|Eclipse]]コンソーシアムの創立メンバーにもなった。2002年、Eclipseワークベンチと関連プラグインをまとめたQNX Momentics Tool Suiteをリリース。 |
|||
[[2004年]]末、同社は Harman International社に売却されることとなった。これに関連して QNX のフリー版が無くなった。 |
|||
[[2004年]]末、同社は[[ハーマン・インターナショナル]]に売却されることとなった。QNXは既に自動車業界で[[テレマティクス]]システム向けに広く使われていた。ハーマンに買収されると、200以上の車種やモデルの[[自動車]]向けに設計を行い、テレマティクスだけでなく情報娯楽用途やナビゲーション用途でも使われるようになっていった。2011年中ごろ時点で、2000万台の自動車でQNX CAR Application Platformが動作している<ref>[http://www.qnx.com/products/qnxcar/ QNX CAR Application Platform]</ref>。また、QNX Aviage Multimedia Suite、QNX Aviage Acoustic Processing Suite、QNX HMI Suiteといった[[ミドルウェア]]製品もいくつかリリースしてきた。 |
|||
[[シスコシステムズ|Cisco]] の IOS-XR (IOSの新バージョン)は QNXベースである。 |
|||
2007年9月、ソースコードの一部を公開することを発表<ref>QNX Press Releases: [http://www.qnx.com/news/pr_2471_1.html source code availability]</ref>。 |
|||
2010年4月9日、ハーマン・インターナショナルからリサーチ・イン・モーションへの譲渡に両社が合意したと発表<ref name="QNXtoRIM">{{Cite news| url = http://www.theglobeandmail.com/news/technology/rim-to-buy-qnx-software/article1528911/ | title = RIM to buy QNX Software | agency = The Canadian Press | publisher = [[グローブ・アンド・メール|The Globe and Mail]] | date = 2010-04-09 | accessdate = 2010-04-09}}</ref>。同日、QNXのソースコードへのアクセスが制限されるようになった<ref name="restrictedsource">[http://community.qnx.com/sf/wiki/do/viewPage/projects.community/wiki/UpdatedQNXSourceAccessPolicyFAQ wiki4376: UpdatedQNXSourceAccessPolicyFAQ]</ref>。2010年9月、[[タブレット (コンピュータ)|タブレットコンピュータ]] [[BlackBerry PlayBook]] とQNXをベースとするそのOS (BlackBerry Tablet OS) を発表<ref name="playbook_pressrelease">[http://www.marketwire.com/press-release/RIM-Unveils-The-BlackBerry-PlayBook-NASDAQ-RIMM-1325727.htm RIM Unveils The BlackBerry PlayBook], official press release, September 27, 2010</ref>。 |
|||
[[シスコシステムズ]]が2004年から2005年ごろに開発したIOS-XR([[Cisco Internetworking Operating System|IOS]]の超高稼動版)<ref name="QNXDel">{{Cite web| url = http://www.qnx.com/news/pr_1074_1.html | title = QNX Delivers Extremely Reliable Microkernel for Massively Scalable Routing System | author = QNX Staff | date = 2004-08-17 | accessdate = 2012-03-16}}</ref>はQNXベースである<ref>[http://www.cisco.com/en/US/products/ps5763/products_tech_note09186a0080772675.shtml#a2 CRS-1 and IOS XR Operational Best Practices]</ref>。また、2006年に登場したIOS Software Modularityも同様である<ref name="IOSSM">{{Cite web| url = http://www.velocityreviews.com/forums/t372212-which-os-is-behind-ios.html | title = Which OS is behind IOS? | author = Brad Reese- BradReese.Com | date = 2006-09-26 | accessdate = 2012-03-16}}</ref>。 |
|||
== 技術 == |
== 技術 == |
||
QNX |
QNXカーネルには、CPU[[スケジューリング]]、[[プロセス間通信]]、[[割り込み (コンピュータ)|割り込み]]処理、タイマーだけが含まれる。その他はユーザープロセスとして実装され、例えばプロセス生成、[[メモリ管理]]を管轄する '''proc''' という特殊なプロセスはマイクロカーネルと協調して動作する。これを可能にしているのは、[[サブルーチン]]呼び出し型のプロセス間通信と、[[ブート|ブートローダ]]がカーネルだけでなく複数のユーザープログラムや[[ライブラリ|共有ライブラリ]]を含めたイメージをロードできる機能があるからである。カーネル内には[[デバイスドライバ]]が存在しない。通信プロトコルスタックは[[NetBSD]]のコードをベースとしている<ref>Core Networking 6.4: Neutrino’s Next Gen Networking Stack and Foundry27 [http://community.qnx.com/sf/docman/do/downloadDocument/projects.networking/docman.root/doc1280]</ref>。独自開発のドライバ群、古い ''io-net manager'' サーバ向けに書かれたドライバ群、NetBSDから移植したドライバ群をサポートしている<ref>[http://community.qnx.com/sf/wiki/do/viewPage/projects.networking/wiki/Drivers_wiki_page Foundry27: Project Networking - Driver wiki page]</ref>。
|
||
QNX |
QNXのプロセス間通信は、プロセスからプロセスにメッセージを送り、応答を待つ。メッセージはカーネルが送信側の[[アドレス空間]]から受信側プロセスのアドレス空間にコピーする。受信プロセスがメッセージを待っていた場合、同時に受信側プロセスにCPUの制御が渡され、この際にスケジューラを経由しない。従って、メッセージを送信して返事を待つまで、全く無駄な点がない。このようなメッセージパッシングとCPUスケジューリングの密接な結合が鍵となって、QNXのメッセージパッシングが強力となっているのである。[[UNIX]]や[[Linux]]の多くのプロセス間通信は、このような強力な機能ではない。LinuxにはQNX風のメッセージング機能を実装した例がある<ref>[http://sourceforge.net/projects/simpl/ SIMPL-Synchronous Interprocess Messaging]</ref>。この点の設計がまずいことが、初期の[[Mach]]など多くのマイクロカーネルの性能が期待はずれとなっている原因である{{要出典|date=2012年1月}}。
|
||
マイクロカーネルアーキテクチャであるため、QNX |
[[マイクロカーネル]]アーキテクチャであるため、QNXは[[分散オペレーティングシステム|分散OS]]でもある。Dan Dodge と Peter van der Veen の[http://patft.uspto.gov/netacgi/nph-Parser?Sect1=PTO1&Sect2=HITOFF&d=PALL&p=1&u=%2Fnetahtml%2FPTO%2Fsrchnum.htm&r=1&f=G&l=50&s1=6,697,876.PN.&OS=PN/6,697,876&RS=PN/6,697,876 特許] は QNX の分散処理機能に関するものであり、マーケティング上は[[#透過分散処理|透過分散処理]] (Transpatrent Distributed Processing, TDP) と呼ばれている。
|
||
全ての入出力、ファイルシステム操作、ネットワーク操作は、 |
全ての入出力、ファイルシステム操作、ネットワーク操作は、上記の手段を使ってデータのやり取りを行っており、メッセージパッシングの際にコピーされている。性能強化のため、QNXは途中のバージョンから一部プロセスの統合を行い、[[プロトコルスタック]]の統合や他の機能ブロックの統合をしている。
|
||
メッセージ処理は[[スレッド (コンピュータ)|スレッド]]の優先度に従って優先順位付けされる。入出力もメッセージ処理を使っているため、優先度の高いスレッドが入出力の結果を受け取るのも優先される傾向がある([[リアルタイムシステム]]なのでそれが基本である)。 |
メッセージ処理は[[スレッド (コンピュータ)|スレッド]]の優先度に従って優先順位付けされる。入出力もメッセージ処理を使っているため、優先度の高いスレッドが入出力の結果を受け取るのも優先される傾向がある([[リアルタイムシステム]]なのでそれが基本である)。 |
||
ブートローダも重要なシステムの一部である。ユーザープログラムをブートイメージに含めることができ、デバイスドライバ群や各種ライブラリを |
ブートローダも重要なシステムの一部である。ユーザープログラムをブートイメージに含めることができ、カーネルの他にデバイスドライバ群や各種ライブラリをブートイメージに含めることが多い。また、ブートイメージを[[Read Only Memory|ROM]]に格納することでディスクのない組み込みシステムでも利用可能となっている。 |
||
Neutrinoは[[プロセッサ親和性]]を考慮した[[対称型マルチプロセッシング]]をサポートしており、QNXの用語ではこれを「限定型マルチプロセッシング (BMP, bound multiprocessing)」と呼ぶ。BMPはマルチプロセッサ対応でないアプリケーションを容易にマルチプロセッサのハードウェアに移行でき、キャッシュヒット率も高く維持できる。 |
|||
Neutrinoは厳密に優先度に基づくプリエンプティブ・スケジューリングを行い、アダプティブ・パーティション・スケジューリング (APS) をサポートしている。APSは、他に多くの高い優先度のパーティション(スレッド群のグループ)があったとしても、全てのパーティションに最小限のCPUを割り当てることを保証する。高負荷であっても[[リソーススタベーション]]に陥らず、重要なスレッドが厳密にリアルタイムで動作できるようにしている。 |
|||
=== 透過分散処理 === |
|||
透過分散処理 (TDP, Transparent Distributed Processing) は、QNXのネットワーク分散アーキテクチャの名称である。[[マイクロカーネル]]であるため本質的にネットワーク分散が可能であり、TDPとは言ってみればQNXのネットワークスタックに[[通信プロトコル]]モジュールをプラグインする仕組みである。qnetと呼ばれるプロトコルモジュールがネットワーク上の複数の[[マイクロカーネル]]間をリンクすると、実際にどのノードにあるかを気にせずにOSサービスにアクセスできるようになる<ref>[http://www.patentstorm.us/patents/5745759-fulltext.html U.S. Patent 5,745,759]</ref>。 |
|||
== Foundry27 == |
|||
Foundry27は同社がQNXコミュニティ向けに作ったウェブサイトである。QNX Neutrino開発に関するハブとなっており、開発者が登録でき、ライセンスを選択でき、ソースコードや関連ツールキットを取得できる<ref>QNX Press Releases: [http://www.qnx.com/news/pr_2471_2.html Foundry27]</ref>。2010年4月9日にリサーチ・イン・モーションに取得されると、QNXのソースコード全体が自由に入手できるという状態ではなくなった<ref>Updated QNX Source Access Policy FAQ: [http://community.qnx.com/sf/wiki/do/viewPage/projects.community/wiki/UpdatedQNXSourceAccessPolicyFAQ]</ref>。 |
|||
== 競合OS == |
== 競合OS == |
||
組み込み市場での主な競合OSは、 |
組み込み市場での主な競合OSは、 |
||
* POSIXリアルタイムOS |
|||
** [[LynxOS]] |
|||
* 組み込み(にも使われる)Unix系OS |
|||
** Linux |
|||
* その他リアルタイムOS |
|||
** [[VxWorks]], [[THEOS]], [[OS-9]], [[SCIOPTA]], [[ITRON]] |
|||
* その他組み込みOS |
|||
** [[Windows CE]] |
|||
である。 |
|||
== 競合OSの比較 == |
== 競合OSの比較 == |
||
分散処理、MMUの強化を図る場合、メッセージパッシング方式のリアルタイムOSである必要性がある。するとSCIOPTA,OSEなどが同じコンセプトのアーキテクチャである。 |
分散処理、MMUの強化を図る場合、メッセージパッシング方式のリアルタイムOSである必要性がある。するとSCIOPTA, OSEなどが同じコンセプトのアーキテクチャである。 |
||
== 脚注 == |
|||
{{脚注ヘルプ}} |
|||
{{Reflist}} |
|||
== 参考文献 == |
== 参考文献 == |
||
* {{cite journal | author= Dan Hildebrand |title=An Architectural Overview of QNX | journal = Proceedings of the Workshop on Micro-kernels and Other Kernel Architectures | page=113 - 126 | year=1992 |
* {{cite journal | author= Dan Hildebrand |title=An Architectural Overview of QNX | journal = Proceedings of the Workshop on Micro-kernels and Other Kernel Architectures | page=113 - 126 | year=1992 |id=ISBN 1-880446-42-1 | url = http://portal.acm.org/citation.cfm?id=759105&dl=ACM&coll=&CFID=15151515&CFTOKEN=6184618 }} |
||
==外部リンク== |
== 外部リンク == |
||
*[http://www.qnx.co.jp/ QNX |
* [http://www.qnx.co.jp/ QNX日本語公式サイト]{{リンク切れ|date=2024年1月}} |
||
* [https://community.qnx.com/sf/sfmain/do/home Foundry27] |
|||
*[http://www.openqnx.com/ QNX User Community(英語)] |
|||
*[http://www. |
* [http://www.openqnx.com/ QNX User Community(英語)] |
||
*[http://www. |
* [http://www.sf.net/projects/openqnx Open source applications(英語)] |
||
* [http://www.aresluna.org/guidebook/guis/qnx GUIdebook > GUIs > QNX] |
|||
*[http://www.itbusiness.ca/it/client/en/CDN/News.asp?id=40793 QNX used for Canadian Nuclear Power Plants] |
|||
* [http://www.itbusiness.ca/it/client/en/CDN/News.asp?id=40793 QNX used for Canadian Nuclear Power Plants] |
|||
[[Category:Unix系オペレーティングシステム]] |
|||
[[Category:組み込みOSの製品]] |
|||
{{Unix-like}} |
{{Unix-like}} |
||
{{Normdaten}} |
|||
[[ar:كيو إن إكس]] |
|||
[[Category:Unix系オペレーティングシステム]] |
|||
[[ca:QNX]] |
|||
[[Category:リアルタイムオペレーティングシステム]] |
|||
[[cs:QNX]] |
|||
[[Category:組み込みオペレーティングシステム]] |
|||
[[de:QNX]] |
|||
[[Category:モバイルオペレーティングシステム]] |
|||
[[en:QNX]] |
|||
[[Category:1982年のソフトウェア]] |
|||
[[es:QNX]] |
|||
[[Category:分散オペレーティングシステム]] |
|||
[[fi:QNX]] |
|||
[[fr:QNX]] |
|||
[[hu:QNX]] |
|||
[[it:QNX]] |
|||
[[ko:QNX]] |
|||
[[lt:QNX]] |
|||
[[nl:QNX]] |
|||
[[no:QNX]] |
|||
[[pl:QNX]] |
|||
[[pt:QNX]] |
|||
[[ru:QNX]] |
|||
[[sk:QNX]] |
|||
[[sv:QNX (operativsystem)]] |
|||
[[uk:QNX]] |
|||
[[zh:QNX]] |
2024年2月21日 (水) 17:43時点における最新版
![]() |
![]() | |
開発者 | QNXソフトウェアシステムズ / ブラックベリー |
---|---|
OSの系統 | Unix系 |
開発状況 | 開発進行中 |
ソースモデル | クローズドソース及びオープンソース(非商用利用のみ) |
初版 | 1982年 |
最新安定版 | 7.0 / 2017年3月 |
対象市場 | 組み込みシステム |
パッケージ管理 | NetBSDのpkgsrcフレームワークを利用可能 |
プラットフォーム | 8088, x86, MIPS, PowerPC, SH-4, ARM, StrongARM, XScale |
カーネル種別 | リアルタイム・マイクロカーネル |
ライセンス | プロプライエタリ |
ウェブサイト | Blackberry.qnx |
詳細[編集]
マイクロカーネルOSとして、QNXではOSのほとんどが﹁サーバ﹂と呼ばれる小さなタスクとして動作する。この点は従来からのモノリシックなカーネルを採用したOSと大きく異なる。モノリシックカーネルOSでは機能の大部分はひとつの大きなプログラムに含まれ、例えば不要な機能をOFFにしたい時などにはOS自体を変更︵再リンクなど︶する必要がある。それに対しQNXではユーザや開発者はサーバを停止させることで簡単に不要な機能をOFFにすることができる。 QNXのシステムは非常に小さく、フロッピーディスク1枚に納まるシステムでGUIが使えウェブがブラウズできるというデモシステムすらある[1]。そして非常に高速であり機能的にも完備されている。 2001年にリリースされた QNX Neutrinoは現在組み込み市場で使われているほとんどのCPUで動作する。例えば、x86ファミリ、MIPS、PowerPC、SH-4、ARM、StrongARM、XScaleなどである。 2007年9月12日、非商用利用のためのライセンスも用意するようになった。 QNXを現在所有しているのはブラックベリーであり、同社のタブレットコンピュータ用モバイルOSのBlackBerry Tablet OSおよびBlackBerry 10はQNXベースである。歴史[編集]
1980年、ウォータールー大学の学生だったGordon BellとDan Dodgeは一般計算機科学課程でオペレーティングシステム設計を学び、その中で基本的なリアルタイムカーネルを作成した。彼らは、このようなシステムに需要があると考え、同年 Quantum Software Systems 社を設立した。1982年、最初のQNXを8088マイクロプロセッサ向けにリリースした。 最初にQNXが広く使われたのは組み込みシステムではなく、オンタリオ州の教育システムに採用された Unisys ICON のOSとしてである。当時としては、44KバイトのOSは組み込みシステムには大きすぎたため、もっと大きなシステムで主に使われたのである。このシステムは信頼性が高いと評判が良く、いくつかの工業アプリケーションに採用されるようになっていった。 1980年代末、Quantum社は市場がPOSIXモデルに素早く移行しつつあるのを見て、カーネルの互換性を高めるための書き換えを決定した。そしてリリースされたのが QNX 4 である。このころインターンとして働いていた Patrick Hayden と正社員だった Robin Burgener が新たなコンセプトのウィンドウシステムを開発︵アメリカ合衆国特許第 5,745,759号︶。それを製品に生かして、組み込み可能なGUIであるPhoton microGUIがOSに加えられた。同時に QNX 用の X Window System も用意された。QNX 4ではPOSIX準拠でUNIXやBSD用ソフトウェアの移植が容易となった。 Quantum Software Systemsは1990年代初期にQNXソフトウェアシステムズと改称してハードディスク企業のクアンタムと混同されないようにした。1990年代末 QNX RTOS の全面的な書き換えを行い、SMP対応し、マイクロカーネルを維持しつつ既存の POSIX API を全てサポートし、新たな POSIX API にもいち早く対応。その結果、2001年に QNX Neutrino RTOS をリリースすることになった。 Neutrino カーネルと同時にQNXソフトウェアシステムズは開発ツールの充実にも熱心に取り組み、Eclipseコンソーシアムの創立メンバーにもなった。2002年、Eclipseワークベンチと関連プラグインをまとめたQNX Momentics Tool Suiteをリリース。 2004年末、同社はハーマン・インターナショナルに売却されることとなった。QNXは既に自動車業界でテレマティクスシステム向けに広く使われていた。ハーマンに買収されると、200以上の車種やモデルの自動車向けに設計を行い、テレマティクスだけでなく情報娯楽用途やナビゲーション用途でも使われるようになっていった。2011年中ごろ時点で、2000万台の自動車でQNX CAR Application Platformが動作している[2]。また、QNX Aviage Multimedia Suite、QNX Aviage Acoustic Processing Suite、QNX HMI Suiteといったミドルウェア製品もいくつかリリースしてきた。 2007年9月、ソースコードの一部を公開することを発表[3]。 2010年4月9日、ハーマン・インターナショナルからリサーチ・イン・モーションへの譲渡に両社が合意したと発表[4]。同日、QNXのソースコードへのアクセスが制限されるようになった[5]。2010年9月、タブレットコンピュータ BlackBerry PlayBook とQNXをベースとするそのOS (BlackBerry Tablet OS) を発表[6]。 シスコシステムズが2004年から2005年ごろに開発したIOS-XR︵IOSの超高稼動版︶[7]はQNXベースである[8]。また、2006年に登場したIOS Software Modularityも同様である[9]。技術[編集]
QNXカーネルには、CPUスケジューリング、プロセス間通信、割り込み処理、タイマーだけが含まれる。その他はユーザープロセスとして実装され、例えばプロセス生成、メモリ管理を管轄する proc という特殊なプロセスはマイクロカーネルと協調して動作する。これを可能にしているのは、サブルーチン呼び出し型のプロセス間通信と、ブートローダがカーネルだけでなく複数のユーザープログラムや共有ライブラリを含めたイメージをロードできる機能があるからである。カーネル内にはデバイスドライバが存在しない。通信プロトコルスタックはNetBSDのコードをベースとしている[10]。独自開発のドライバ群、古い io-net manager サーバ向けに書かれたドライバ群、NetBSDから移植したドライバ群をサポートしている[11]。 QNXのプロセス間通信は、プロセスからプロセスにメッセージを送り、応答を待つ。メッセージはカーネルが送信側のアドレス空間から受信側プロセスのアドレス空間にコピーする。受信プロセスがメッセージを待っていた場合、同時に受信側プロセスにCPUの制御が渡され、この際にスケジューラを経由しない。従って、メッセージを送信して返事を待つまで、全く無駄な点がない。このようなメッセージパッシングとCPUスケジューリングの密接な結合が鍵となって、QNXのメッセージパッシングが強力となっているのである。UNIXやLinuxの多くのプロセス間通信は、このような強力な機能ではない。LinuxにはQNX風のメッセージング機能を実装した例がある[12]。この点の設計がまずいことが、初期のMachなど多くのマイクロカーネルの性能が期待はずれとなっている原因である[要出典]。 マイクロカーネルアーキテクチャであるため、QNXは分散OSでもある。Dan Dodge と Peter van der Veen の特許 は QNX の分散処理機能に関するものであり、マーケティング上は透過分散処理 (Transpatrent Distributed Processing, TDP) と呼ばれている。 全ての入出力、ファイルシステム操作、ネットワーク操作は、上記の手段を使ってデータのやり取りを行っており、メッセージパッシングの際にコピーされている。性能強化のため、QNXは途中のバージョンから一部プロセスの統合を行い、プロトコルスタックの統合や他の機能ブロックの統合をしている。 メッセージ処理はスレッドの優先度に従って優先順位付けされる。入出力もメッセージ処理を使っているため、優先度の高いスレッドが入出力の結果を受け取るのも優先される傾向がある︵リアルタイムシステムなのでそれが基本である︶。 ブートローダも重要なシステムの一部である。ユーザープログラムをブートイメージに含めることができ、カーネルの他にデバイスドライバ群や各種ライブラリをブートイメージに含めることが多い。また、ブートイメージをROMに格納することでディスクのない組み込みシステムでも利用可能となっている。 Neutrinoはプロセッサ親和性を考慮した対称型マルチプロセッシングをサポートしており、QNXの用語ではこれを﹁限定型マルチプロセッシング (BMP, bound multiprocessing)﹂と呼ぶ。BMPはマルチプロセッサ対応でないアプリケーションを容易にマルチプロセッサのハードウェアに移行でき、キャッシュヒット率も高く維持できる。 Neutrinoは厳密に優先度に基づくプリエンプティブ・スケジューリングを行い、アダプティブ・パーティション・スケジューリング (APS) をサポートしている。APSは、他に多くの高い優先度のパーティション︵スレッド群のグループ︶があったとしても、全てのパーティションに最小限のCPUを割り当てることを保証する。高負荷であってもリソーススタベーションに陥らず、重要なスレッドが厳密にリアルタイムで動作できるようにしている。透過分散処理[編集]
透過分散処理 (TDP, Transparent Distributed Processing) は、QNXのネットワーク分散アーキテクチャの名称である。マイクロカーネルであるため本質的にネットワーク分散が可能であり、TDPとは言ってみればQNXのネットワークスタックに通信プロトコルモジュールをプラグインする仕組みである。qnetと呼ばれるプロトコルモジュールがネットワーク上の複数のマイクロカーネル間をリンクすると、実際にどのノードにあるかを気にせずにOSサービスにアクセスできるようになる[13]。Foundry27[編集]
Foundry27は同社がQNXコミュニティ向けに作ったウェブサイトである。QNX Neutrino開発に関するハブとなっており、開発者が登録でき、ライセンスを選択でき、ソースコードや関連ツールキットを取得できる[14]。2010年4月9日にリサーチ・イン・モーションに取得されると、QNXのソースコード全体が自由に入手できるという状態ではなくなった[15]。競合OS[編集]
組み込み市場での主な競合OSは、 ●POSIXリアルタイムOS ●LynxOS ●組み込み︵にも使われる︶Unix系OS ●Linux ●その他リアルタイムOS ●VxWorks, THEOS, OS-9, SCIOPTA, ITRON ●その他組み込みOS ●Windows CE である。競合OSの比較[編集]
分散処理、MMUの強化を図る場合、メッセージパッシング方式のリアルタイムOSである必要性がある。するとSCIOPTA, OSEなどが同じコンセプトのアーキテクチャである。脚注[編集]
参考文献[編集]
- Dan Hildebrand (1992). “An Architectural Overview of QNX”. Proceedings of the Workshop on Micro-kernels and Other Kernel Architectures: 113 - 126. ISBN 1-880446-42-1 .