JP2008510238A - オペレーティングシステム - Google Patents

オペレーティングシステム Download PDF

Info

Publication number
JP2008510238A
JP2008510238A JP2007526392A JP2007526392A JP2008510238A JP 2008510238 A JP2008510238 A JP 2008510238A JP 2007526392 A JP2007526392 A JP 2007526392A JP 2007526392 A JP2007526392 A JP 2007526392A JP 2008510238 A JP2008510238 A JP 2008510238A
Authority
JP
Japan
Prior art keywords
operating system
nanokernel
interrupt
exception
virtual
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
JP2007526392A
Other languages
English (en)
Inventor
ジルズ メイン,
グエナディ マスロヴ,
Original Assignee
ジャルナ エスアー
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by ジャルナ エスアー filed Critical ジャルナ エスアー
Publication of JP2008510238A publication Critical patent/JP2008510238A/ja
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/4555Para-virtualisation, i.e. guest operating system has to be modified
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B82NANOTECHNOLOGY
    • B82YSPECIFIC USES OR APPLICATIONS OF NANOSTRUCTURES; MEASUREMENT OR ANALYSIS OF NANOSTRUCTURES; MANUFACTURE OR TREATMENT OF NANOSTRUCTURES
    • B82Y10/00Nanotechnology for information processing, storage or transmission, e.g. quantum computing or single electron logic
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • G06F2212/7201Logical to physical mapping or translation of blocks or pages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Hardware Redundancy (AREA)

Abstract

相対的に高い優先順位を有するように第1のオペレーティングシステム(C5などのリアルタイムオペレーティングシステム)を選択するステップと、相対的に低い優先順位を有するように少なくとも1つの第2のオペレーティングシステム(Linuxなどの汎用オペレーティングシステム)を選択するステップと、所定の条件の下で、前記オペレーティングシステム間で切り替えるように構成された共通プログラム(ナノカーネルに類似したハードウェアリソースディスパッチャ)を提供するステップと、前記第1および第2のオペレーティングシステムが前記共通プログラムによって制御できるようにするために、それらに対する修正を提供するステップとを含む、複数の異なるオペレーティングシステムが同じRISC(たとえばARM)コンピュータ上で同時に実行できるようにする方法。
【選択図】図1

Description

発明の詳細な説明
本発明は、オペレーティングシステムに関する。より具体的には、本発明は、複数のオペレーティングシステムを同時に実行させるためのシステム、方法、およびコンピュータプログラムに関する。
一部のコンピュータプログラムでは、プログラム内の諸ステップが、定義された時間間隔内または定義された時点で実行されることが重要である。こうしたプログラムの例が、携帯電話を作動させるため、あるいは構内交換機(PBX)またはセルラ式基地局を作動させるための、制御プログラムである。通常、プログラムは、イベント後のある時点で、またはある時点内に、外部イベントまたは状態の変化に継続的に応答しなければならない。これが、「リアルタイム」での動作と呼ばれる。
しかしながら、多くの他のプログラムでは、プログラムの実行にかかる時間は重要ではない。これは、スプレッドシートプログラム、ワードプロセッシングプログラム、給与計算パッケージ、および一般的な報告または分析プログラムを含む、ほとんどの一般的なコンピュータプログラムに適用される。他方で、こうしたプログラムにかかる正確な時間は重要でないが、ほとんどの場合、ユーザは可能なより迅速な実行を好む。
アプリケーションプログラムは、オペレーティングシステムを介してそれが実行されるコンピュータと対話する。オペレーティングシステムのアプリケーションプログラミングインターフェース(API)を使用することによって、アプリケーションプログラムは移植可能な様式で作成できるため、異なるハードウェアリソースを使用して異なるコンピュータ上で実行可能である。加えて、LinuxまたはWindowsなどの一般的なオペレーティングシステムはマルチタスキングを提供し、言い換えれば、いくつかのプログラムを同時に動作させることができる。そのためにはスケジューリングを提供し、言い換えれば、異なるプログラム間でコンピュータリソースの使用を共有し、スケジューリングアルゴリズムに従ってそれぞれに時間を割り振る。この種のオペレーティングシステムはかなり広範に使用されているが、一般には、リアルタイムアプリケーションの実行には備えられていないため、多くの制御または通信タスクには好適でない。
したがって、こうしたタスクのためのリアルタイムオペレーティングシステムが開発されてきており、その一例がChorusOS(Chorusとしても知られる)およびその派生である。Chorusは、http://www.experimentalstuff.com/Technologies/ChorusOS/index.htmlおよびhttp://www.jaluna.com/のJalunaから、オープンソースソフトウェアとして入手可能である。
これについては、http://www.jaluna.com/developer/papers/COSDESPERF.pdfから入手可能な、2001年8月、Francois Armandによる「ChorusOS Features and Architecture overview」という名称のSun Techinical Report、222ページに記載されている。
これらのオペレーティングシステムは、他のタイプのプログラムを実行するためにも使用可能であった。しかしながら、当然のことながらユーザは、WindowsまたはLinuxなどの汎用オペレーティングシステムのために作成された大量の「レガシー」プログラムが、リアルタイムオペレーティングシステム上で実行するように書き直す必要なしに実行できることを望む。
「デュアルブート」システムを提供すると、ユーザが一方または他方のオペレーティングシステムのいずれかを実行できるようにすることが可能であるが、多くの場合、リアルタイムプログラムを実行しながら同時に「レガシー」プログラムを実行できることが望ましい。たとえば、通信ネットワークインフラストラクチャ機器、第3世代携帯電話および他の高機能電話、ならびに高機能電子ゲーム機器は、リアルタイムアプリケーション(たとえばゲームプレイグラフィックス)および非リアルタイムアプリケーション(ゲームダウンロード)の両方を必要とする可能性がある。
米国特許第5903752号および米国特許第5721922号では、非リアルタイムオペレーティングシステム(Windowsなど)の割り込み処理環境においてリアルタイムのマルチタスキングカーネルを提供することによって、リアルタイム環境を非リアルタイムオペレーティングシステムに組み込むことが試みられている。
広範囲に使用される手法の1つが「エミュレーション」である。通常、リアルタイムオペレーティングシステムの下で実行するために、汎用オペレーティングシステム用に作成されたプログラムの各命令を解釈し、対応する一連の命令をリアルタイムオペレーティングシステムの下で実行する、エミュレータプログラムが作成される。しかしながら、1つの命令が常に多くの命令に置き換えられるため、エミュレーションはコンピュータにより多くの負荷をかけ、その結果、性能速度が低下する。仮想マシン(たとえばJava(商標)仮想マシンなど)の提供に基づいた手法でも、同様の問題が生じる。仮想マシン実施の例は、欧州特許第1059582号、米国特許第5499379号、および米国特許第4764864号である。
他の同様の技法は、米国特許第5995745号(Yodaiken)に記載されている。Yodaikenは、マルチタスキングのリアルタイムオペレーティングシステムが汎用オペレーティングシステムをそのタスクのうちの1つとして実行し、リアルタイムタスクを実行するために必要に応じてそれをプリエンプト(pre−empt)するシステムについて、説明している。
他の手法は、たとえば欧州特許第0360135号および1990年9月の論文「Merging real−time processing and UNIX V」(Gosch)、ELECTRONICS、62ページに記載されているように、汎用オペレーティングシステムのモジュールとしてリアルタイムオペレーティングシステムを実行することである。この場合、ハードウェア割り込みは、汎用オペレーティングシステムに関する割り込みはリアルタイムオペレーティングシステムをプリエンプトしないものとする意図で、選択的にマスクされる。
他の手法は、http://opersys.com/ftp/pub/Adeos/adeos.pdfの白書に記載されたADEOS(Adaptive Domain Environment for Operating Systems)の手法である。
ADEOSは、Linuxのみで実施されてきたように思われるが、中でも、複数のオペレーティングシステム実行向けのナノカーネルを提供する。ADEOSの提案される用途の1つは、http://www.aero.polimi.it/~rtai/applications/にあるように、ADEOSがRTAI(Realtime Application Interface for Linux)への割り込みを分配できるようにすることであった。
欧州特許第1054332号では、「切替え装置」(これについては、完全に理解できるように詳細には説明しない)がリアルタイムおよび汎用のオペレーティングシステムを実行するシステムについて説明している。ハードウェア割り込みは、一般的な割り込みハンドラによって処理され、一部の実施形態では、リアルタイムオペレーティングシステムによって処理され、その後、このシステムは、2次オペレーティングシステムでルーチンによって処理される優先度レベルの低いソフトウェア割り込みを生成する。
本発明の目的は、たとえ複数のオペレーティングシステムが様々な目的用に設計されている場合であっても、それらのシステムを同時に実行するための、改善されたシステム、方法、およびコンピュータプログラムを提供することである。具体的に言えば、本発明は、オペレーティングシステムのうちの1つ(たとえばリアルタイムオペレーティングシステム)が妨害なしに実行可能であり、その他(たとえば汎用オペレーティングシステム)がコンピュータの残りのリソースを使用して実行可能であることを目標としている。より具体的に言えば、本発明は、ARMプロセッサを使用するなどの、縮小命令セットコンピュータ(RISC)で使用可能なこうしたシステムを提供することを意図している。
したがって、本発明の諸態様は特許請求の範囲で定義される。本説明は、参照により、本発明者等が以前に出願した、2003年4月9日出願の欧州特許第03290894.9号、2004年4月7日にEPOで出願のPCT/EP04/003731号、および2003年10月1日出願の欧州特許第03292428.4号を組み込んでいる。
ARMプロセッサに基づく多くのアーキテクチャに関する特定の問題の1つが、キャッシュメモリユニットが仮想アドレッシングモードを使用することである。複数のオペレーティングシステムがそれぞれそれ自体のメモリスペース内で実行中の場合、それぞれが、物理メモリアドレスへの仮想メモリの異なるマッピングを使用する。これにより、結果として、他のオペレーティングシステムへの切り替え後、誤ったデータがキャッシュから取り出されることになる。これを解決する方法の1つが、キャッシュメモリのコンテンツを各オペレーティングシステムスイッチ上にフラッシュすることである。しかしながら、リアルタイムアプリケーションの場合、これは、第1に切り替えにおける遅延を増加させるため、および第2にキャッシュをフラッシュした後の最初のメモリアクセスを遅らせるため、望ましくないことがわかっている。したがって、本発明の一態様では、オペレーティングシステムすべてに同じカーネル仮想マッピングを使用させる。
他の問題は、ARMプロセッサがいくつか(ほとんどのプロセッサに見られる一般的な「ユーザ」および「スーパバイザ」モードとは対照的に5つまたは6つ)の追加の実行モードを有することである。したがって、オペレーティングシステムを変更することには、実行モードを変更することも含まれる可能性がある。これを可能にするためには、オペレーティングシステムの切り替えごとにすべてのレジスタの状態を(たとえばスタックに)保存することが含まれることになる。そのため、こうした切り替えは速度が低下することになる。したがって本発明の一態様では、すべてのオペレーティングシステムが、関連するレジスタ(たとえばレジスタ13から15)を「スクラッチ」モードで使用する必要があり、その結果、レジスタがどのように見つけられるかまたは残されるかは問題にならない。本発明者等の観察では、どのような方法にしてもこのように実行されることが多く、他のケースではオペレーティングシステムの一部を書き直さなければならない場合がある。その後、オペレーティングシステムは「スーパバイザ」モードに戻り、結果として、ナノカーネルへの(したがって、他のオペレーティングシステムへの)すべての変換はスーパバイザモードからのみ実行される。したがって、オペレーティングシステムが(たとえば、動作を完了した場合にアイドルタスクを呼び出すことによって)他のオペレーティングシステムに切り替えられる場合、これらのレジスタ状態を保存する必要はない。
本発明の一態様では、通常、オペレーティングシステムはより高位のモードを非常に短いコードセグメントに対してのみ使用することがわかったため、本発明者等は、こうしたモードの場合オペレーティングシステムをプリエンプト不可能としている。
対応する利点を備えた他の態様、実施形態、および好ましい特徴は、以下の説明、特許請求の範囲、および図面から明らかとなろう。
次に、本発明の諸実施形態について、添付の図面を参照しながら単なる例として説明する。
はじめに
システムハードウェア
システムが適用可能なコンピュータシステム100は、システムバス104(制御バス、データバス、およびアドレスバスを含む)を介して読み取り専用メモリ(ROM)チップ106に結合された、ARM Ltd(www.arm.com)から入手可能であり、http://www.arm.com/documentation/ARMProcessor_Cores/index.htmlの技術マニュアルおよびデータシートに記載されたような、ARMプロセッサなどの中央処理装置(CPU)102と、1つまたは複数バンクのランダムアクセスメモリ(RAM)チップ(108)と、ディスクコントローラデバイス110(たとえば、フロッピィディスクドライブ、ハードディスクドライブ、およびDVDドライブなどの追加の取り外し可能メディアドライブに接続された、IDEまたはSCSIコントローラ)と、1つまたは複数の入力/出力ポート(112)(たとえば、プリンタなどへの接続用の、1つまたは複数のUSBポートコントローラおよび/またはパラレルポートコントローラ)と、外部または内部の周辺デバイスへのバス接続用の拡張バス114(たとえばPCIバス)と、他のシステムチップ116(たとえば、グラフィックスおよびサウンドデバイス)とを備える。この種のコンピュータの例が、パーソナルコンピュータ(PC)およびワークステーションである。しかしながら、本発明を、メインフレーム、コントロールシステム内の埋め込み型マイクロコンピュータ、およびPDA(この場合、ディスクドライブコントローラなどの示されたデバイスの一部はなくてもよい)などの、他のコンピューティングデバイスに適用することも、本明細書で開示する。
ソフトウェアの管理
図2aを参照すると、図1のコンピュータ100は、使用時に、(図1に示された他のデバイスへのCPUによるアクセスを可能にする出力ルーチンを提供する)オペレーティングシステムカーネル202と、オペレーティングシステムユーザインターフェースまたはプレゼンテーション層204(X Windowsなど)と、ミドルウェア層206(ネットワーキングソフトウェアおよびたとえばTCP/IPスタックなどのプロトコルを提供する)と、オペレーティングシステムカーネル202を形成するAPIルーチンを呼び出すことによって実行されるアプリケーション208a、208bとを備えた、常駐プログラムを実行する。
オペレーティングシステムカーネルは、具体的には以下のような、いくつかのタスクを有する。
・スケジューリング(すなわち、実行中の異なるアプリケーション間でのCPUおよび関連するリソースの共有)
・メモリ管理(すなわち、各タスクへのメモリの割り振り、および必要な場合は、アドオンメモリからのデータおよびプログラムのディスクドライブへのスワッピング)
・ファイルシステムの提供
・デバイスへのアクセスの提供(通常は、ドライバを介する)
・割り込み処理
・アプリケーションがシステムリソースおよびユーザと対話できるようにする、アプリケーションプログラミングインターフェースの提供
カーネルは、Unixに関しては、いわゆる「モノリシックカーネル」とすることが可能であり、この場合、デバイスドライバはカーネルそれ自体の一部を形成する。別の方法では、Chorusに関しては「マイクロカーネル」とすることが可能であり、この場合、デバイスドライバはカーネルとは別である。
使用時には、コンピュータ100が開始されると、ROM 106に格納されたブートストラッププログラムがディスクコントローラ110にアクセスして、ディスク上の永続ストレージからオペレーティングシステムのファイル処理部分をRAM 108へと読み取り、その後、オペレーティングシステムの残りの部分をRAM 108のある領域にロードする。その後、オペレーティングシステムは、ディスクコントローラ110を介してディスクドライブから任意のアプリケーションを読み取り、それぞれについてRAM 108内のスペースを割り振り、その割り振られたメモリスペースに各アプリケーションを格納する。
アプリケーションの動作時に、オペレーティングシステムのスケジューラ部分が異なるアプリケーション間でCPUの使用量を分割し、それによってスケジューリングポリシーに従ったプロセッサ上でのそれぞれの時間の共有を可能にする。また、アプリケーションまたはデータによって稀に使用される「スワップアウト」(すなわち、スペースを解放するためにそれらをRAM 108から除去して、それらをディスクに格納すること)により、メモリリソースの使用量も管理する。
最終的に、入力および出力などの機能を実行するために、アプリケーションプログラミングインターフェース(API)を構成するルーチンがアプリケーションから呼び出され、オペレーティングシステムの割り込み処理ルーチンが割り込みおよびイベントに応答する。
好ましい実施形態の原理の概要
好ましい実施形態では、コンピュータ100で使用されることになる各オペレーティングシステム201、202がわずかに書き直され、新しい低水準プログラム400(本明細書では「ハードウェアリソースディスパッチャ」と呼び、オペレーティングシステムのカーネルではないが、時には「ナノカーネル」と呼ばれる)が作成される。ハードウェアリソースディスパッチャ400はプロセッサと対話するため、特定タイプのCPU 102に特有のものである。修正されたオペレーティングシステム201、202のバージョンは、以下で明らかとなる理由から、ハードウェアに特有のものでもある。
ハードウェアリソースディスパッチャ400それ自体はオペレーティングシステムではない。アプリケーションプログラムとはまったく対話せず、非常に限られた機能を有する。また、仮想マシンまたはエミュレータでもなく、たとえプロセッサ上でネイティブコードを実行しているオペレーティングシステム自体にほとんどの処理をまかせたままであっても、協働するようにオペレーティングシステムを修正する必要がある。
以下の基本機能を実行する。
・複数のオペレーティングシステムそれぞれをロードおよび開始すること
・メモリおよび他のシステムリソースをそれぞれのオペレーティングシステムに割り振ること
・異なるオペレーティングシステムの動作をスケジューリングする(すなわち、それらの間でCPU時間を分割し、それらの間での変更を管理する)こと
・オペレーティングシステムによる共有が必要なそれらのシステムデバイスへの間接アクセスの「仮想化デバイス」方法を提供すること(デバイスの「仮想化」)
・異なるオペレーティングシステム上で実行中のアプリケーションが互いに通信できるようにするために、オペレーティングシステム間に通信リンクを提供すること
オペレーティングシステムは、実施形態によって等しく扱われない。その代わりに、オペレーティングシステムのうちの1つが「クリティカル(critical)」オペレーティングシステム(これがリアルタイムオペレーティングシステムとなる)として選択され、他のオペレーティングシステムまたはそのそれぞれが、「非クリティカル」または「2次」オペレーティングシステム(これは、Linuxなどの汎用オペレーティングシステムまたはそのそれぞれとなる)として扱われる。
ハードウェアリソースディスパッチャが設計される場合、できる限り多くのシステムデバイスを1つまたは他のオペレーティングシステム専用に静的に割り振ることができるように、使用可能なシステムリソース(すなわちデバイスおよびメモリ)をリストするデータ構造(たとえばテーブル)が提供される。
たとえば、プリンタ出力の生成が必要となるアプリケーションをしばしば実行することになる汎用オペレーティングシステム202に、パラレルプリンタポートを静的に割り振ることができる。他方で、通信用のリアルタイムオペレーティングシステム201に、ISDNデジタル回線アダプタポートを永続的に割り振ることができる。このデバイスの静的割り振りが可能な場合はどこでも、各オペレーティングシステムがその既存のドライバを使用して、ハードウェアリソースディスパッチャを呼び出す必要なしに、静的に割り振られたデバイスにアクセスできることを意味する。したがって、こうしたデバイスにアクセスする際に(仮想マシンまたはエミュレータとして動作した場合には存在するような)実行速度の損失がない。
共有しなければならないシステムデバイスの場合、ハードウェアリソースディスパッチャは、非クリティカルオペレーティングシステムによるデバイスの使用を仮想化し、クリティカルオペレーティングシステムに供給されたドライバを使用してアクセスを実行する。同様に、割り込み処理の場合、割り込みはクリティカルオペレーティングシステムの割り込み処理ルーチンに渡され、これが割り込みを処理する(クリティカルオペレーティングシステム向けであった場合)か、または、非クリティカルオペレーティングシステムに転送するためにハードウェアリソースディスパッチャを介して割り込みを戻す(宛先に決められていた場合)。
ブート時には、ハードウェアリソースディスパッチャが第1にロードされ、その後、それぞれのオペレーティングシステムを所定の順序で、すなわちクリティカルオペレーティングシステムから始まり、続いて2次オペレーティングシステムまたはそのそれぞれを順番にロードする。クリティカルオペレーティングシステムには、テーブルから必要なリソースが割り振られ、その中で動作する固定メモリスペースが与えられる。その後、それぞれの2次オペレーティングシステムに、使用可能な残りのリソースから、必要なリソースおよびメモリスペースが順番に割り振られる。
このようにして、実施形態に従い、それぞれにそれ自体のメモリスペースを割り振ることによって、およびオペレーティングシステム専用のデバイスの静的割り振りを提供することによって、オペレーティングシステムによって使用される物理的にできる限り多くのリソースが分離され、共有が不可欠なデバイスのみが共有される。
動作時には、ハードウェアリソースディスパッチャのスケジューラはクリティカルオペレーティングシステムがそのタスクを完了するまで動作できるようにし、その後、次の割り込みまたはイベントが発生するまで、コントロールをそれぞれの非クリティカルオペレーティングシステムに順番に渡す。
したがって、この実施形態は、クリティカルオペレーティングシステムの動作が(そのオリジナルドライバを使用し、任意の割り込みおよびイベント処理への第1のアクセスを有するため)ほとんど変化しない、複数のオペレーティングシステム環境を可能にする。2次オペレーティングシステムは、ほとんどの場合、それら自体のネイティブドライバを使用することになり、多くのシステムデバイスへの排他的アクセスを有することになるため、残りのプロセッサ時間内で効率良く動作することが可能である。最終的に、ハードウェアリソースディスパッチャそれ自体は制限された機能のみを処理するため、小規模プログラムとすることが可能であり、その結果、システムリソースが節約される。
好ましい実施形態は、すでに特定のコンピュータ100に適合された標準の市販のオペレーティングシステムを限定的に変更するだけでよいため、作成および維持するのにも経済的である。さらに、オペレーティングシステムへの変更は、割り込み処理などのアーキテクチャ特有のファイル処理、および、特定タイプのコンピュータ100とインターフェースし、残りのオペレーティングシステムほど頻繁に変更される可能性のない、初期設定時の構成に限定されるため、同じオペレーティングシステムの新しいバージョンを複数のオペレーティングシステム様式で動作するように適合させる際に、ほとんど、あるいはまったく作業の必要がない可能性がある。
好ましい実施形態の詳細な説明
この実施形態では、コンピュータ100はIntel 386ファミリプロセッサ(たとえば、Pentiumプロセッサ)およびMotorola PowerPC 750(縮小命令セットコンピュータまたは「RISC」)コンピュータであった(ステップ302)。クリティカルオペレーティングシステム201はC5オペレーティングシステム(http://www.jaluna.comからオープンソースで無料ダウンロードできる、第5世代ChorusOSシステムのオープンソースバージョン、Jaluna−1のリアルタイムマイクロカーネル)であった。
ステップ306では、ChorusOSオペレーティングシステムカーネル201は、新しいプラットフォームへの移植(すなわち、同じCPUであるが異なるシステムデバイスを備えた新しいコンピュータ上で実行できるように、新しいBoard Support Packageを書き込むこと)と同じ方法で扱われる、複数のオペレーティングシステムモードで動作するように修正される。ブートおよび初期設定シーケンスは、リアルタイムオペレーティングシステムが、それ自体を開始するのではなく、その割り振られたメモリスペース内でハードウェアリソースディスパッチャによって開始されるように修正される。初期設定シーケンスのハードウェアプローブ段階は、クリティカルオペレーティングシステムが、他の2次システムに割り当てられたハードウェアリソースにアクセスしないように修正される。この段階では、使用可能なデバイスを検出するために、ハードウェアリソースディスパッチャから静的ハードウェア割り振りテーブルを読み取る。
状態を検出し、これに応答して何らかのアクションを要求するために、トラップ呼び出し2012がクリティカルオペレーティングシステムに追加される。ここでトラップ呼び出しとは、プロセッサに現在のコンテキスト(たとえばレジスタの状態)を保存させ、新しいコンテキストをロードさせる、呼び出しを意味する。したがって、仮想メモリアドレッシングが使用されている場合、アドレスポインタが変更される。
たとえば、リアルタイムオペレーティングシステム201がエンドポイントに達する(および、プロセッサリソースを必要としなくなる)と、コントロールをハードウェアリソースディスパッチャに戻して、「アイドル」トラップ呼び出しを発行し、2次オペレーティングシステムを開始することができる。多くのプロセッサは「停止」命令を有する。場合によっては、スーパバイザレベルのコード(たとえばアプリケーションではなくオペレーティングシステム)のみが、こうした「停止」命令を含むことができる。この実施形態では、すべてのオペレーティングシステムが、「停止」命令を除去し、呼び出されると「アイドル」トラップ呼び出しを発行する「アイドル」ルーチン(たとえば実行スレッド)にそれらを置き換えるように、書き直される。
Board Support Packageの一部のドライバは、共有デバイスを2次オペレーティングシステム用に仮想化する際にハードウェアリソースディスパッチャを支援するように、特別に適合される。
入力/出力(I/O)バスへのアクセスを提供し、バスにデータを書き込めるようにするものと思われる、追加の「仮想」ドライバ2014が、オペレーティングシステムに加えられる。実際には、仮想バスドライバ2014はメモリを通信媒体として使用し、何らかの専用メモリをエクスポートして(入力データ用)、他のシステムによってエクスポートされたメモリをインポートする(出力データ用)。この方法では、オペレーティングシステム201(またはオペレーティングシステム上で実行中のアプリケーション)は、実際のI/Oバスによって接続された別々のマシン上で実行中の2つのオペレーティングシステムであるかのように、他のオペレーティングシステム(またはその上で実行中のアプリケーション)にデータを渡すことができる。
2次オペレーティングシステム202は、カーネルバージョン2.4.18を有するLinuxとして選択された(ステップ308)。
ステップ310では、2次オペレーティングシステムカーネル202が、新しいハードウェアアーキテクチャとして扱われる複数のオペレーティングシステム環境で機能できるように修正される。ステップ306と同様に、ブートおよび初期設定シーケンスは、2次オペレーティングシステムがハードウェアリソースディスパッチャによって開始できるように、および、ハードウェアリソースディスパッチャテーブルに指定されたような他のシステムに割り当てられたハードウェアリソースにアクセスしないように、修正される。ステップ306と同様に、ハードウェアリソースディスパッチャに制御を渡すために、トラップ呼び出し2022が追加される。
共有システムデバイス用のネイティブドライバは、ハードウェアリソースディスパッチャによって仮想化されてきたデバイス(割り込みコントローラ、I/Oバスブリッジ、システムタイマ、およびリアルタイムクロック)に対応する新しいドライバ2028に置き換えられる。これらのドライバは、コンピュータ100のそれぞれのデバイス上で何らかの動作を実行するために、ハードウェアリソースディスパッチャの仮想デバイスハンドラ416への呼び出しを実行する。ハードウェアリソースディスパッチャのこうした仮想デバイスハンドラ416はそれぞれ、システムデバイスと直接対話するように構成された、クリティカルオペレーティングシステム内の「ピア」ドライバルーチンとペアにされる。したがって、仮想デバイスハンドラへの呼び出しは、実際のデバイスにアクセスするために、その仮想デバイス用のクリティカルシステム内のピアドライバまでリレーされる。ステップ306と同様に、オペレーティングシステム間通信を可能にするために、仮想I/Oバス用の読み取り/書き込みドライバ2024が提供される。
2次オペレーティングシステムの割り込みサービスルーチンは、それぞれがそれぞれの仮想割り込みに(ハードウェアリソースディスパッチャの割り込みハンドラルーチン412によって発行される呼び出しの形で)応答し、実際の割り込みまたはイベントには応答しない、仮想割り込みサービスルーチン2026を提供するように修正される。2次オペレーティングシステムのルーチン(割り込みサービスルーチンを含む)も、(少なくともすべての例外クリティカル動作において)ハードウェア割り込みのマスキングを除去するように修正される。したがってこの方法では、2次オペレーティングシステム202、...は、クリティカルオペレーティングシステム201によってプリエンプト可能であり、言い換えれば、仮想割り込みへの2次オペレーティングシステム応答自体が、クリティカルオペレーティングシステム201に対する実際の割り込みによって、割り込まれることが可能である。これには通常、以下の動作が含まれる。
・イベントのマスキング/マスキング解除(プロセッサレベルでの割り込み)
・イベントのマスク状況の保存/復元
・割り込みソース(割り込みコントローラデバイス)の識別
・ソースレベル(割り込みコントローラデバイス)での割り込みのマスキング/マスキング解除
共有ハードウェアデバイス(I/Oバスブリッジ、システムコンソール、システムタイマ、およびリアルタイムクロック)にアクセスするために、新しい仮想デバイスドライバ2028が追加される。これらのドライバは、コンピュータ100のそれぞれのデバイスにデータを書き込むため、またはこれらからデータを読み取るために、ハードウェアリソースディスパッチャの仮想デバイスハンドラ416への呼び出しを実行する。
この実施形態では、これを実行するために、少数の修正済みファイルを備えた新しい仮想ハードウェアリソースディスパッチャのアーキテクチャサブツリー(I−386およびPowerPCの変形ではnk−i386およびnk−ppc)を追加することによって、Linuxカーネル207が修正される。未変更ファイルは、それらの既存の形で再使用される。オリジナルのサブツリーは維持されるが使用されない。
ステップ312では、ハードウェアリソースディスパッチャ400が書き込まれる。ハードウェアリソースディスパッチャは、(図4に示されるように)以下の機能に関するルーチンを提供するコードを備える。
・それ自体をブートおよび初期設定すること(402)
・ハードウェアリソース(ポートなどのデバイス)のリストおよび各リソースがどのオペレーティングシステムに独自に割り当てられるかを示す割り振りエントリを格納するテーブル(403)を格納すること
・ハードウェアリソースディスパッチャ割り振りテーブルを完了する、クリティカルオペレーティングシステムをブートおよび初期設定すること(404)
・2次オペレーティングシステムをブートおよび初期設定すること(406)
・オペレーティングシステム間で切り替えること(408)
・オペレーティングシステム間でスケジューリングすること(410)
・割り込みを処理すること(リアルタイムオペレーティングシステムの割り込みサービスルーチンを使用し、必要であれば、2次オペレーティングシステムの仮想割り込みサービスルーチンにデータを供給する)(412)
・それぞれのオペレーティングシステムからのトラップ呼び出しを処理すること(414)
・2次オペレーティングシステムから共有デバイスへのアクセスを処理すること(416)
・仮想I/Oバス上でのオペレーティングシステム間通信を処理すること(418)
他の諸実施形態(以下で説明)では、システムデバッグフレームワークも提供することができる。
オペレーティングシステムスイッチャ408
あるオペレーティングシステムから他のオペレーティングシステムに切り替えるために、オペレーティングシステムスイッチャ408は、現在実行中のオペレーティングシステムの「コンテキスト」、すなわちレジスタ値などの状態変数のセットの現在の値を保存するように、他のオペレーティングシステムの格納済みコンテキストを復元するように、および、他のオペレーティングシステムを呼び出して中止した実行を再始動するように、構成される。プロセッサがメモリのセグメントおよび仮想または間接的なアドレッシング技法を使用する場合、現在のメモリスペースを指すポインタを格納するレジスタまたはデータ構造がこのようにスワップされる。たとえば、オペレーティングシステムはそれぞれ、こうしたメモリスペースを指すポインタ値を含むコンテキストによって定義された、異なるこうしたメモリスペース内で動作する。
詳細には、スイッチャは以下の機能を提供する。
・現在のオペレーティングシステムがアイドル状態になった場合、現在実行中のオペレーティングシステムから、次にスケジューリングされたオペレーティングシステムへと、明示的に切り替える(たとえばトラップ呼び出し)
・ハードウェア割り込みが発生した場合、2次オペレーティングシステムからクリティカルオペレーティングシステムへと暗黙的に切り替える
切り替えは、以下で説明するように、トラップ呼び出し、あるいは実際または仮想の割り込み時に発生する可能性がある。
スケジューラ410
スケジューラ410は、既存の他のオペレーティングシステムの次に、どの2次オペレーティングシステムが切り替えられることになるか(複数存在する場合)を選択することによって、使用可能な処理時間の一部をそれぞれのオペレーティングシステムに割り振る。この実施形態では、固定の優先順位スケジューリングに基づいてそれぞれ選択される。本明細書では、タイムシェアリング、またはプロセッサ時間の最低保証比率に基づく指定が可能な、他の実施形態も企図される。しかしながらそれぞれのケースで、クリティカルオペレーティングシステムは、アイドル状態の場合にのみプリエンプトされる。
他の実施形態では、すべての2次オペレーティングシステムがCPUにアクセスして優先順位の高いタスクを実行することが可能であり、その後そのタスクがクリティカルシステム内で依然として実行中であるように、クリティカルオペレーティングシステムは、いつプリエンプト可能であるかを明示的にスケジューラ410に通知する。したがって、一例では、クリティカルオペレーティングシステムの割り込みサービスルーチンがプリエンプトできないため、クリティカルオペレーティングシステムは、常に外部イベントまたはリアルタイムクロックからのタイミング信号に応答して、リアルタイム動作を維持することができる。
仮想化されたプロセッサ例外の処理
ハードウェアリソースディスパッチャは、以下のように、プロセッサ例外(たとえば、CPU割り込みまたはコプロセッサ割り込み)を処理するためのメカニズムを提供するように構成される。
・第1に、クリティカルオペレーティングシステムを介してプロセッサ例外を遮断する
・第2に、対応する仮想例外を1つまたは複数の2次オペレーティングシステムに通知し、そのデータを格納し、次にスケジューラがその2次オペレーティングシステムを呼び出した場合は、2次オペレーティングシステム内の対応する仮想割り込みサービスルーチン2026を呼び出す
・第3に、2次オペレーティングシステム内から任意の保留中の仮想例外をマスキングまたはマスキング解除する
仮想化された例外は、通常、以下の2つの異なる目的に使用される
・第1に、ハードウェアデバイス割り込み(非同期プロセッサ例外として送達される)を2次オペレーティングシステムに転送するため
・第2に、オペレーティングシステム間で相互割り込み、すなわち1つのシステムによって他の割り込み用に生成された割り込み(同期例外として送達される)を実施するため
トラップ呼び出しハンドラ414
トラップ呼び出しハンドラの動作は、以下の説明から明らかとなろう。その主な目的は、第1のオペレーティングシステムが停止した(したがって、CPUリソースを必要としない)場合に、スケジューラおよびスイッチャが他のオペレーティングシステムに変更できるようにすることである。追加の役割は、以下の諸実施形態に関して論じられるようなデバッグで使用するために、システムコンソールなどのハードウェアリソースディスパッチャサービスを起動することである。
仮想化デバイス416
前述のように、各共有デバイス(たとえば割り込みコントローラ、バスブリッジ、システムタイマ、リアルタイムクロック)について、各オペレーティングシステムは、そのデバイス用にピアレベルドライバのセットを形成するデバイスドライバを提供する。リアルタイムオペレーティングシステムは、実際にデバイスにアクセスするために使用されるドライバを提供し、その他は仮想デバイスドライバを提供する。
ハードウェアリソースディスパッチャの共有デバイスハンドラ416は、各デバイスに対して、そのデバイスのすべてのピアデバイスドライバによるアクセスのために、ストアドデータ構造を提供する。デバイスにアクセスしようとするか、またはアクセスした場合、デバイスドライバは、対応するデータ構造に格納されたデータをアクセスの詳細によって更新する。ピアドライバは、(前述のような)相互割り込みを使用してイベントを知らせる信号を発信し、データ構造が更新されたばかりであることを他のピアドライバに通知する。
割り込みコントローラデバイスにアクセスするためのドライバは、前述の仮想化例外メカニズムを使用して、以下のようにハードウェア割り込みを処理する。
・クリティカルオペレーティングシステムのデバイスドライバは、ハードウェア割り込みを処理し、それらを仮想化例外として2次ピアドライバに転送する
・2次オペレーティングシステムは、前述の仮想化例外マスキングおよびマスキング解除ルーチンを使用することによって、割り込みを使用可能および使用不可にする
I/Oバスおよびそれらのブリッジは、それらに接続されたデバイスがすべて同じオペレーティングシステムに割り振られていない場合にのみ、共有されなければならない。したがってデバイスを割り振る場合、可能な範囲内で、同じI/Oバスに接続されたデバイスは同じオペレーティングシステムに割り振られる。共有が必要な場合、リソース割り振りテーブル404は、どのオペレーティングシステムがどのリソースを有するかを示すために、(スペース、割り込みラインおよびI/Oポートをアドレスする)バス上のリソースの割り振りを示す記述子データを格納する。
実施形態の実施
最終的に、ステップ314で、ハードウェアリソースディスパッチャおよびオペレーティングシステム用のコードが、コンピュータ100で供給するための配布可能2進コンピュータプログラム製品としてコンパイルされる。
本発明の態様に従って供給可能な製品は、ユーザが、使用されることになる異なるオペレーティングシステムを選択し、各オペレーティングシステムについて異なるアプリケーションを構築および選択し、アプリケーションおよびオペレーティングシステムを配布可能製品に埋め込み、オペレーティングシステムのブートおよびアプリケーションの実行可能バイナリの起動に備えることができるようにする、コンピュータプログラムを備えた開発環境製品である。これは、www.jaluna.comから入手可能なC5開発環境に基づき、これに類似している。
ブートおよび初期設定中の実施形態の動作
図5を参照すると、この実施形態に従ったブートおよび初期設定プロセスは以下のように実行される。
ROM 106に格納されたブートストラッププログラム(「トランポリン」)4022は、最初に電源が投入された時点で実行され、これによって、残りのハードウェアリソースディスパッチャプログラム400をメモリにインストールし、これを開始し、システムイメージ構成を記述して(以下で説明するように)引数としてデータ構造を渡す、プログラム4024が開始される。
ハードウェアリソースディスパッチャは、システムコンソール用に使用可能なシリアルラインを初期設定する。その後、各オペレーティングシステムに対して、クリティカルオペレーティングシステムから順番にメモリスペース(オペレーティングシステム環境)を割り振る。したがって、ハードウェアリソースディスパッチャは第2レベルシステムのカーネルブートローダとして働く。
その後、各オペレーティングシステムカーネルは、その独自の初期設定段階を実行し、リソース割り振りテーブル404内に残るリソース内でそのオペレーティングシステム専用となるリソースを選択し、その初期のサービスおよびアプリケーションを開始する。
図6は、システムイメージを形成するメモリアドレス割り振りの一例を示す。ハードウェアリソースディスパッチャおよびオペレーティングシステムがコンパイルされる場合、メモリ内のあるポジションが割り振られる。図6に示されるように、メモリ内のこれらポジションのセットがシステムイメージを定義する。システムイメージは、ハードウェアリソースディスパッチャが配置されたメモリの第1のバンク602と、リアルタイムオペレーティングシステムが配置されたメモリの第2のバンク604と、2次オペレーティングシステムが配置されたメモリの第3のバンク606と、この実施形態では、2次オペレーティングシステム(Linux)のルートファイルシステムを含むRAMディスクが配置されたメモリの第4のバンク608を備える。
このシステムイメージは、永続ストレージ(たとえば、携帯電話またはPBXなどの典型的なリアルタイムデバイス用の読み取り専用メモリ)に格納される。メモリの残りのバンクは、ロードおよびアプリケーションの実行が可能なその環境として各オペレーティングシステムに割り振りするために使用可能である。
オペレーティングシステムコンテキストに関するメモリの割り振り
ブートされる間に、各オペレーティングシステムは、それ自体の構成に必要な合計サイズを満たすためにメモリの補助部片を割り振る。オペレーティングシステムに割り振られると、メモリのバンクは、オペレーティングシステム自体の物理メモリ管理方式を使用して管理される。オペレーティングシステムは他のすべてのメモリを無視する。
仮想メモリの割り振り
オペレーティングシステムが相互に、またはハードウェアリソースディスパッチャを妨害できないことを保証するために、各オペレーティングシステムには別々の仮想メモリスペースが割り振られる。それぞれのオペレーティングシステムのユーザアドレススペース(すなわち範囲)およびスーパバイザアドレススペース(すなわち範囲)には、重複するアドレスを有する異なる仮想メモリスペースの分化を可能にする、異なるメモリ管理ユニット(MMU)コンテキスト識別子(ID)がそれぞれ割り振られる。MMUコンテキストIDは、コンパイル時(図3のステップ314)に各オペレーティングシステムに割り当てられる。
このソリューションにより、異なるオペレーティングシステム間でハードウェアリソースディスパッチャが切り替えられる場合、追加の時間を要する変換キャッシュ(TLB)のフラッシュを実行する必要がない。その代わりに、異なるオペレーティングシステム間での切り替えは、現在機能しているオペレーティングシステムのMMUコンテキストIDを格納すること、および、切り替えられる2つのオペレーティングシステムの以前に格納されたMMUコンテキストIDを再呼び出しすることによって、実施される。
入力/出力デバイスの割り振り
前述のように、割り振りテーブル404は、どのデバイスが各オペレーティングシステムに独自に割り振られるかを示す。加えてテーブル404は、どの入力/出力リソース(直接メモリアクセス(DMA)デバイス、入力/出力ポート、割り込み、など)がこうしたデバイスに排他的に割り振られるかを示すため、いかなる競合もなしにこれらのリソースを直接使用することができる。通常、多くのデバイスは重複しているため、この方法で潜在的な競合を大幅に削減することが可能である。
配布は、オペレーティングシステムの構成方式(たとえば、C5の場合、デバイスツリーで指定されたデバイス)に基づいている。それらはブート時に、ブート順に、オペレーティングシステムに割り振られるため、クリティカルオペレーティングシステムはテーブル404内にある使用可能デバイスの第1の選択権を有し、2次オペレーティングシステムは残りの中から順番に割り振りを受け取る。各オペレーティングシステムは、初期設定されるとこれらのデバイスの存在を検出し、ハードウェアリソースディスパッチャからの対話なしにそれらに関するネイティブドライバを使用する。
2次オペレーティングシステムの「ホット」リブート
本実施形態によれば、他のオペレーティングシステムが実行を継続している間に、(たとえばクラッシュが原因で)2次オペレーティングシステムをリブートすることができる。システムリソースの分離により、2次オペレーティングシステムにおけるクラッシュがクリティカルオペレーティングシステム(または他の2次オペレーティングシステム)の動作の進行を妨害することはなく、その2次オペレーティングシステムのリブートが妨害することもない。
実施形態では、ハードウェアリソースディスパッチャへのシステムの「停止」および「開始」トラップ呼び出しが、クリティカルオペレーティングシステム内からの2次オペレーティングシステムのシャットダウンおよび再始動を支援する。加えて、ハードウェアリソースディスパッチャはブート時に、オリジナルシステムイメージのコピーをハードウェアリソースディスパッチャ割り振りメモリ内の永続メモリに保存する。一例として、この実施形態におけるホット再始動は以下のように管理される。
初期のブートアップ時に、ハードウェアリソースディスパッチャは2次オペレーティングシステムのメモリイメージのコピーを保存する。
クリティカルオペレーティングシステムは、2次オペレーティングシステムの機能を定期的に監視する(たとえば、タイムアウトを設定し、継続動作をチェックするために2次オペレーティングシステム内で実行するピアドライバによってイベントがトリガされるのを待機することによって)ためのソフトウェアウォッチドッグ(watchdog)ドライバルーチンを含む。
クリティカルオペレーティングシステムは、2次オペレーティングシステムに障害が発生するかまたは停止したことを検出した場合、ハードウェアリソースディスパッチャへの(2次オペレーティングシステムの)「停止」およびその後の「開始」トラップ呼び出しをトリガする。
その後ハードウェアリソースディスパッチャは、2次オペレーティングシステムイメージの保存されたコピーを復元し、再始動するためにこれをメモリからリブートする。実施形態のテストで、Linux2次オペレーティングシステムはロックアップから数秒でリブート可能であることがわかった。
他の点では、ホット再始動は、たとえば、http://www.jaluna.com/developer/papers/CSI-TR-96-34.pdfから入手可能な、1996年8月、Abrossimov、F.Hermann、J.C.Hugly等による「Fast Error Recovery in CHORUS/OS.The Hot−Restart Technology」と題するChorus Systems Inc.Technical Report、14ページに記載されるような、Chorusオペレーティングシステムで使用可能な内容に基づく。
ランタイム動作
次に、実施形態のインストールおよびブート後の動作について、詳細に説明する。
ブートおよび初期設定されると、リアルタイムオペレーティングシステムは1つまたは複数のアプリケーション207(たとえばUDP/IPスタック−−UDP/IPはUniversal Datagram Protocol/Internet Protocolを表す)を実行中であり、2次オペレーティングシステムはいくつかのアプリケーション208a、208b(たとえばワードプロセッサおよびスプレッドシート)を実行中である。リアルタイムオペレーティングシステムのマイクロカーネル201および2次オペレーティングシステムのカーネル202は、以下を備えるハードウェアリソースディスパッチャインターフェースを介して、ハードウェアリソースディスパッチャと通信する。
・オペレーティングシステムコンテキスト(すなわち、オペレーティングシステムに切り替えるために保存および復元する必要のある状態変数のセット)およびハードウェアリポジトリを表す、データ構造
・オペレーティングシステム環境で実行する機能セット
・ハードウェアリソースディスパッチャ環境で実行するトラップ呼び出しルーチンのセット
どちらのオペレーティングシステムもプロセッサ時間を必要としない(たとえば、どちらも「待機」状態に達している)場合、ハードウェアリソースディスパッチャ400はクリティカルオペレーティングシステムのアイドルスレッドに切り替え、割り込みまたはイベントに備えて待機する。したがって割り込みは、最初にクリティカルオペレーティングシステムに切り替える必要なしに、クリティカルオペレーティングシステムのサービスルーチンによって即時に処理することができる。
ある地点で、割り込みまたはイベントが発生する。たとえば、データポートでパケットが受け取られ、UDP/IPスタックを実行するリアルタイムオペレーティングシステムによってこれを処理できるようにするための割り込みを発生させることができる。別の方法として、ユーザがキーボードまたはマウスを操作して、ワードプロセッシングアプリケーション208との対話のために2次オペレーティングシステム202のGUIを動作するための割り込みを発生させることができる。別の方法として、システムクロックは、所定の時間が経過したこと、およびアプリケーションが再実行を開始すべきであるか、またはオペレーティングシステム機能を実行すべきであることを、示すことができる。
クリティカルオペレーティングシステムのサービスルーチンは、以下に示すように割り込みを処理する。
割り込みおよびイベントの処理
まだクリティカルオペレーティングシステムでない場合、ハードウェアリソースディスパッチャ割り込みハンドラ412は、オペレーティングシステムスイッチャ408を呼び出してクリティカルオペレーティングシステムに切り替え、その後、割り込みハンドラルーチン412はクリティカルオペレーティングシステム201内の割り込みサービスルーチン(ISR)を呼び出す。割り込みが、クリティカルオペレーティングシステムに独自に割り当てられたデバイスからであるため、または共有デバイスからであり、ある所定の値を有するために、クリティカルオペレーティングシステム向けである場合、クリティカルオペレーティングシステムISRは、割り込みを処理するために必要なアクションを実行する。そうでない場合、制御はハードウェアリソースディスパッチャに戻される。
クリティカルから2次へのオペレーティングシステムの切り替え
図7を参照すると、この例の場合、システムはクリティカルオペレーティングシステム201上で実行中のアプリケーション207aのスレッド702を実行している。
割り込みが発生した場合、クリティカルオペレーティングシステムの割り込みサービスルーチン704は割り込みサービスを実行する。終了すると、制御は、スレッド702およびクリティカルオペレーティングシステム201のスケジューラによって実行された任意のその他のスレッドに戻される。すべてのスレッドの処理が完了すると、クリティカルオペレーティングシステムは実行を終了し、その「アイドル」スレッドをスケジューリングする。これに応じて、クリティカルオペレーティングシステム内の「アイドル」トラップルーチンは、ハードウェアリソースディスパッチャ400に「アイドル」トラップ呼び出しを発行する。その後、ハードウェアリソースディスパッチャは、以下の動作を行うルーチンを実行する。
・割り込みハンドラ412が現時点でいくつかの格納済み仮想割り込みを有する場合、これらは割り込みハンドラ412によって2次オペレーティングシステムに転送される。
・ハードウェアリソースディスパッチャのオペレーティングシステムスケジューラ410は、実行する2次オペレーティングシステム202を選択する。次に、OSスイッチャ408は、現在のコンテキスト(通常は、プロセッサMMUおよび状況レジスタ、命令、およびスタックポインタ)をクリティカルOSコンテキストストレージ領域706に保存する。次に、2次オペレーティングシステム202に関する格納済みの実行コンテキスト708を取り出し、それらを関係するレジスタに書き込む。
・関係する2次OSに関する仮想割り込みが存在する場合、割り込みハンドラ412は、2次オペレーティングシステム内の関連割り込みサービスルーチン710を呼び出し、これが割り込みを処理した後、完了すると、中止した2次オペレーティングシステムのスレッド712の実行に戻る。
割り込みハンドラ412が現時点で保留中の割り込みを有していない場合、ハードウェアリソースディスパッチャのオペレーティングスイッチャ408は、復元されたオペレーティングシステムコンテキスト内のストアドプログラムのカウンタ値を使用し、このケースではスレッド712で、2次オペレーティングシステムに中止した実行を再開させる。
このようにして、クリティカルオペレーティングシステム201が何らかの機能(それ独自のアプリケーションまたはサービスを処理するか、または他のオペレーティングシステム向けの割り込みを処理する)を実行した後、ハードウェアリソースディスパッチャは、スケジューラ410によって決定されたように、次の2次オペレーティングシステム202に制御を戻す。
割り込み時の2次からクリティカルへのオペレーティングシステムの切り替え
次に、図8を参照しながら、2次オペレーティングシステムからクリティカルオペレーティングシステムへの転送プロセスについて開示する。このケースでは、システムは、クリティカルオペレーティングシステム202で実行中のアプリケーション208aのスレッド712を実行している。
ハードウェア割り込みが発生すると、ハードウェアリソースディスパッチャは、2次オペレーティングシステムコンテキストをコンテキストストレージ領域708内に保存するためのOSスイッチャを始動する。その後、1次オペレーティングシステム201に切り替え、コンテキストストレージ領域706から状態変数の値を復元して、1次オペレーティングシステム201の割り込みサービスルーチン704を呼び出す。割り込みを処理した後、1次オペレーティングシステム201のスケジューラは、ISR 704から、以前に実行されていた任意のスレッド704(または実行されることになるスレッド)に制御を戻すことができる。
ISRおよびすべてのスレッドが処理されると、1次オペレーティングシステム201は、1次オペレーティングシステム201から切り替える(コンテキストストレージ706に状態変数を保存)ハードウェアリソースディスパッチャに制御を戻し、図7を参照しながら上記で論じた方法で、選択された2次オペレーティングシステム201に切り替える(コンテキストストレージ708から状態変数を取り出す)。
オペレーティングシステム間通信−−仮想バス418
仮想バスルーチンは、各オペレーティングシステム内の仮想バスドライバと協働する。cPCIバックプレーンにプラグインされたCompact PCI(cPCI)ボードと同様に、オペレーティングシステムを接続している物理バスをエミュレートする。各オペレーティングシステムに、この仮想バス上の仮想バスブリッジデバイス向けのドライバルーチンが提供されることで、オペレーティングシステムおよびそれらのアプリケーションは、任意の所望のプロトコルによって生データ転送から全IPプロトコルスタックへの通信が可能となる。
ハードウェアリソースディスパッチャの仮想バスは、前述の共有メモリおよびシステムの相互割り込み原理に基づいている。詳細には、仮想バスルーチン418は、仮想バスブリッジ共有デバイスを定義するC5 buscom DDI:syscomをエミュレートすることで、仮想バスを横切るメモリのエクスポート(共有)、および他のオペレーティングシステムへの相互割り込みのトリガを可能にする。
各2次オペレーティングシステムにおける各仮想バスドライバは、始動時に、ハードウェアリソースディスパッチャのハードウェアリポジトリ内にこうした仮想バスブリッジを作成する。このように実行することによって、その専用メモリの範囲をエクスポート(共有)し、そのホストシステム内で割り込みを発生させる方法を提供する。
したがって、第1のオペレーティングシステムの仮想バスドライバは、以下のように実行することによって、第2のオペレーティングシステムにデータを送信する。
・第2のオペレーティングシステムのピア仮想バスドライバによってエクスポートされたメモリに書き込む
・第2のオペレーティングシステム内のピアバスドライバがデータを使用可能である旨を通知するために、相互割り込みをトリガする
逆(着信)方向では、仮想バスドライバは、着信データがそれ自体のエクスポートされたメモリ範囲内に格納されたことを示す相互割り込みを受け取った場合、こうしたデータを(対象とされたアプリケーションまたはルーチンが使用するために)アップストリームに伝播する。
図9(a)を参照すると、同じオペレーティングシステム202上で実行中の他の208bと通信しようとするアプリケーション208aは、そのオペレーティングシステムを介してこれを実行することができる。異なるオペレーティングシステム202上で実行中の他の208bと通信しようとする、一方のオペレーティングシステム201上で実行中のアプリケーション207bは、仮想バスドライバルーチンを使用して他方のオペレーティングシステム202にデータを渡し、これをその仮想バスドライバからアプリケーション208bに伝播する、それ自体のオペレーティングシステムのAPIを使用して仮想バスにデータを書き込むことによってそのように実行する。
図9(b)を参照すると、この構成を、第1および第2のオペレーティングシステムが異なるコンピュータ100、101上で実行される構成に移行するために必要な変更はわずかであり、オペレーティングシステムが使用するドライバを変更するだけでよいため、仮想バスドライバではなくリアルバス103用のドライバを使用する。したがってシステムは、システムが動作するハードウェアと、より無関係になる。
ハードウェアリソースディスパッチャの仮想バスを横切る通信をアプリケーションが使用できるが、オペレーティングシステムカーネルが内部的に使用することも可能であるため、それらは複数のオペレーティングシステム間で分散されるサービスの実施において協働することができる。この種の「スマート」分散型サービスは、システムのホット再始動に使用される(上記で論じた)ソフトウェアウォッチドッグ、または分散型ネットワークプロトコルスタックを含む。
欧州特許第1054332号は、セマフォロックを使用して、共通通信メモリへのアクセスを同期化する。こうしたロックにより、RTとGPのオペレーティングシステム間に特別な依存関係が生じる。本実施形態では、ロックなし通信プロトコルを使用してこれが回避される。
デバッグ
好ましい実施形態では、ハードウェアリソースディスパッチャは、デバッグエージェントとして動作する第2の動作モードを有する。
この実施形態によれば、第2のモードで、ハードウェアリソースディスパッチャは、シリアル通信ラインを介して他のマシン(「ホスト」マシン)上で実行中のデバッグソフトウェアツールと通信することができる。
こうしたデバッグツールは、ハードウェアリソースディスパッチャをリモートに制御するために、高水準のグラフィカルユーザインターフェース(GUI)を提供する。ハードウェアリソースディスパッチャ仮想化例外メカニズムを使用して、定義された例外が遮断される。その後ユーザは、プロセッサ例外の場合に、ハードウェアリソースディスパッチャがどのように挙動するかを構成および制御することが可能であり、さらに、コードまたは他のシステムのエラーまたは問題を診断できるように、マシンおよびシステムの状態を表示することもできる。
ユーザは、1つまたは複数のこうしたプロセッサ例外を、オペレーティングシステムからハードウェアリソースディスパッチャへのトラップ呼び出しのための基本として選択することができる。選択された例外に基づいて、実行時に例外またはそれぞれの例外が発生した場合、オペレーティングシステムは停止し、ハードウェアリソースディスパッチャへのトラップ呼び出しを実行した後、現在のコンテキストを保存して、ホスト上のデバッグツールとの対話を可能にする。その後ユーザは、状態変数(スタックポインタ、プログラム、およびアドレスカウンタなど)の現在の状態、および/またはメモリの選択されたブロックのコンテンツを表示させることができる。ユーザは、所与のタイプの例外がデバッグされることになる特定のオペレーティングシステム内でトラップされるべきであること、またはそれらが任意のオペレーティングシステム内で発生した場合は必ずトラップされるべきであること、のいずれかを指定することができる。これに応答して、トラップ呼び出しは、1つのオペレーティングシステム内のみで、またはすべてのオペレーティングシステム内で、実施される。ユーザは、実行を再始動するかまたは単に無視した場合に、通常は所与のタイプの例外がシステムに転送されるかどうかも指定することができる。
ハードウェアリソースディスパッチャはそれ自体の環境内で実行するため、オペレーティングシステムのデバッグが、そのシステム内から実行できるよりも多く実行できる。重要なことに、デバッグエージェントとして動作するハードウェアリソースディスパッチャと、デバッグされるシステムとの間では、コードが共有されない。これにより、たとえば例外ベクトルまたは割り込みサービスルーチンなどの、カーネルの低レベルコードのデバッグが可能となる。
この実施形態によれば、デバッグアーキテクチャ全体(ホスト/ターゲット)の他のいくつかの態様は、http://www.jaluna.com/doc/c5/html/DebugGuide/book1.htmlから入手可能な、Jalunaによって発行された文書「C5 1.0 Debugging Guide」に記載された、ChorusおよびC5のデバッグシステムに関する態様と同様である。
セキュアなアーキテクチャ
前述の諸実施形態が、セキュアなアーキテクチャのための確固たる基盤を与えることは明らかであろう。これは、ユーザが通常セキュアでないアプリケーションを実行することになる2次オペレーティングシステムが、指定されたシステムリソースから隔離され、ハードウェアリソースディスパッチャ(および1次オペレーティングシステムのドライバ)を介してのみ、それらにアクセスするためである。したがって、たとえば暗号化/復号を実行し、暗号化されたファイルへのアクセスを可能にし、パスワードおよび他のアクセス情報を管理、格納、および供給し、著作権資料のアクセスおよび複写を管理およびログ記録する、セキュリティアプリケーションを、1次オペレーティングシステム上で実行することができる。2次オペレーティングシステム上で実行中のアプリケーションは、そのオペレーティングシステムに割り振られていないシステムリソースにアクセスすることはできず、オペレーティングシステムが異なるメモリコンテキストで実行する(すなわち異なるスペースを指す異なるアドレッシングポインタを使用する)場合、2次オペレーティングシステム上で実行中のアプリケーションを使用して、1次システム上で動作するアプリケーションを妨害してその動作のセキュリティを弱めることはできない。
次に、特に好ましい実施形態について説明する。
1.はじめに
本書は、ARMアーキテクチャでのJalunaナノカーネル環境について説明する。Jalunaナノカーネル設計の一般的な原理については、すでに当発明者等の以前の文書、Jaluna−2:A Multi−System Programming Environment(JL/TR−02−80.0.3)で説明している。むしろ本書では、ナノカーネル実施のARM特有の態様、特に、ナノカーネル環境の隅石であるナノカーネルエグゼクティブ(executive)に焦点を当てる。
本書では、中央処理装置(CPU)ならびにメモリ管理ユニット(MMU)を共有する複数の独立したオペレーティングシステムを、これらのオペレーティングシステムを横切って同時に実行できる、ナノカーネルエグゼクティブを実施するために、ARMプロセッサアーキテクチャがどのように使用されるかについて説明する。
本書では、ナノカーネルエグゼクティブがハードウェア割り込みをどのように処理するかについても説明する。具体的に言えば、ハードウェア割り込みを遮断して、これらを1次オペレーティングシステムに向けて転送するために使用されるメカニズム、および2次オペレーティングシステムに提供されるソフトウェア割り込みメカニズムについて説明する。
本書では、ナノカーネルがユニプロセッサコンピュータ上で実行中であると想定するため、対称型マルチプロセッサ(SMP)アーキテクチャに関する諸態様はここでは対象とされないことに留意されたい。
2.概要
2.1 仮想アドレススペース
MMUが所与のARMアーキテクチャの実施上に存在する場合、すべてのオペレーティングシステムおよびナノカーネルは常に仮想アドレススペース内で実行し、言い換えれば、MMUは常に使用可能である。内部でナノカーネルコードが実行中のメモリコンテキストは、時間の経過と共に変化する可能性があることに留意されたい。他方で、ナノカーネルはMMUを必要とせず、MMUなしのARMプロセッサもサポートする。この場合、すべてのオペレーティングシステムおよびナノカーネルは物理アドレススペースで実行する。
この説明では、メモリコンテキストという用語は、ルートディレクトリテーブルがシステム制御コプロセッサ(CP15)の変換テーブルベースレジスタによって指定される、ハードウェアアドレス変換ツリーを示す。
通常、ユーザモード保護をサポートするオペレーティングシステムは、専用のユーザ仮想アドレススペースを処理できるように、複数のメモリコンテキスト(1ユーザプロセスについて1つ)を作成する。カーネルは、1つのユーザプロセスから他のユーザプロセスへと切り替えるごとに、メモリコンテキストを変更する。他方で、オペレーティングシステムカーネルは、ユーザアドレススペースと共に、すべてのメモリコンテキスト内で複製される固有のスーパバイザアドレススペースも処理する。ユーザ仮想アドレスおよびスーパバイザ仮想アドレスは、ARMアーキテクチャ上で決して重複することはない。
MMUが存在しない場合、オペレーティングシステムはすべてのプロセッサ間で同じアドレススペースを共有しないため、メモリコンテキストの切り替えは不要である。この場合、オペレーティングシステムはスーパバイザスペースに対して1つのメモリコンテキストのみを使用することがわかっている。
スーパバイザアドレススペースのマッピングは、静的または動的のいずれであってもよい。静的マッピングはシステムの初期設定時に作成され、通常は使用可能な物理メモリを(全体または部分的に)マッピングする。こうしたマッピングは1対1またはカーネル仮想(KV)マッピングとも呼ばれる。具体的に言えば、KVマッピングは通常、オペレーティングシステムカーネルのコード、データ、およびbssセクションをカバーする。動的マッピングは、動的にロードされたカーネルモジュールまたは動的に割り振られた(非連続)メモリチャンクにアクセスするために、ランタイム時に作成される。
必然的に、ナノカーネルが新しいオペレーティングシステムをCPU上で実行するようにスケジューリングした場合、メモリコンテキスト(変換テーブルベースレジスタ)は切り替えられるべきである。ARMアーキテクチャが仮想キャッシュのみをサポートすることから、キャッシュエイリアシング(aliasing)のために必要な可能性のある、メモリコンテキスト切り替え時の非常に費用のかかるキャッシュフラッシュを避けるために、すべてのKVマッピングが同じ変換公式を使用する必要があるものと決定された。言い換えれば、すべてのオペレーティングシステムに関するすべてのKVマッピングで、物理メモリ位置のスーパバイザアドレスは同じであるものとする。同じアクセスおよびキャッシュ属性を使用するものとする。すべてのオペレーティングシステムは同じスーパバイザアドレススペース(異なる可能性のある変換ツリーではない)を共有すると言える。各オペレーティングシステムは、このスーパバイザスペース内の専用スロットで実行する。説明した要件は、MMUが存在しない場合も当然当てはまることに留意されたい。
ナノカーネル環境では、1次コンテキスト、2次コンテキスト、およびナノカーネルコンテキストの、3種類のメモリコンテキストが見分けられる。
1次メモリコンテキストとは、1次オペレーティングシステムカーネルによって現在使用されているメモリコンテキストである。1次オペレーティングシステムがユーザアドレススペースをサポートしている場合、1次カーネルによって使用される複数のメモリコンテキストが存在する可能性があるが、すでに上記で述べたように、スーパバイザアドレススペースはすべてのこうしたコンテキスト内で同一であることに留意されたい。ナノカーネルはユーザスペースマッピングとは無関係であるため、1次メモリコンテキストはナノカーネルの観点から見れば固有であり、1次カーネルによって確立された静的および動的なスーパバイザマッピングからなる。
2次メモリコンテキストとは、2次オペレーティングシステムカーネルによって現在使用されているメモリコンテキストである。これは、1次メモリコンテキストと同様である。ナノカーネルの観点から見れば(所与の2次カーネルについて)固有であり、2次カーネルによって確立された静的および動的なスーパバイザマッピングからなる。
すべてのオペレーティングシステムがナノカーネルによって所有される物理メモリをマッピングする必要があるため、ナノカーネルを直接(セクション2.2を参照すればわかるように、すなわち、実行モードおよびメモリコンテキストを変更するトラップまたは他の特別な命令なしに)呼び出すことができる。このように、ナノカーネルによってエクスポートされたデータ構造(オペレーティングシステムコンテキスト、セクション2.3を参照のこと)にもアクセスすることができる。
あらゆるオペレーティングシステムは、通信メカニズム実施からの対応する要求時に、他のオペレーティングシステムによって所有される何らかの物理メモリをマッピングできるものとする。
ナノカーネルメモリコンテキストは、ナノカーネル自体によって構築される。このコンテキストは、すべてのオペレーティングシステム、ならびに組み合わされたシステムイメージによって所有されるすべてのメモリバンクをマッピングする。これは、ほとんどがナノカーネル初期設定段階で使用される。
対象とされるすべてのメモリコンテキストが同じ変換公式を使用するものであることに留意されたい。
図1は、1次、2次、およびナノカーネルの、メモリコンテキストの例を示す。この例では、物理メモリサイズは128メガバイトである。すべてのオペレーティングシステムおよびナノカーネルは、(Linuxカーネルと同様に)0xc0000000から始まるシフト1対1(KV)マッピングを使用する。
2.2 ナノカーネルの起動およびプリエンプト
ナノカーネルは、機能呼び出しを介して明示的に、または割り込み/例外ハンドラを介して暗黙的に起動される。前者の場合、オペレーティングシステムカーネルはナノカーネルを起動すると言える。後者の場合、ナノカーネルはオペレーティングシステムをプリエンプトすると言える。ナノカーネルは常に、スーパバイザアドレススペースで実行中の特権オペレーティングシステムコードから起動されることを明確に示すことが重要である。他方で、ナノカーネルはオペレーティングシステムカーネル自体、ならびにカーネル制御の下で実行中のユーザプロセスをプリエンプトすることができる。
組み合わされたシステムイメージがブートされると、ナノカーネルが第1に活動化され、1次および2次のオペレーティングシステムカーネルの実行を開始する。初期設定段階が完了すると、ナノカーネルは受動的な役割を演じる。これは、ナノカーネル内で実行されるコードが、ナノカーネルを起動する1次および2次のカーネルによって明示的に、あるいは外部で生成された同期(すなわち例外)および非同期(すなわち割り込み)イベントによって、駆動されることを意味する。
ARMアーキテクチャでは、ナノカーネルの起動に使用されるメカニズムは、1次および2次のオペレーティングシステムからのものとほぼ同じである。どちらの場合も、これは間接的機能呼び出しである。他方で、ナノカーネルは、1次および2次のオペレーティングシステムを異なる方法でプリエンプトする。
実行環境に関して、ナノカーネルは1次オペレーティングシステムカーネルにかなり近い。しばしば同じメモリコンテキストを使用し、時には同じスーパバイザスタックを使用する。したがって、ナノカーネルは、1次オペレーティングシステムと概ね同じ可用度を有する。他方で、2次オペレーティングシステムとナノカーネルとの間には、2次カーネルの誤作動に対して何らかの保護を提供する障壁がある。しかしながら、こうした保護は絶対ではなく、2次カーネルは依然として1次カーネルならびにナノカーネルをクラッシュさせる可能性があることに留意されたい。
2.2.1 1次起動
1次オペレーティングシステムカーネルは、単純な間接呼び出しによってナノカーネルを起動する。この起動によってメモリコンテキストは切り替えられない。
2.2.2 1次プリエンプト
実際に、ARMアーキテクチャ上でのナノカーネルの現在の実施は、決して1次オペレーティングシステムをプリエンプトしない。1次オペレーティングシステムのプリエンプトは、オペレーティングシステム間でFPUを共有するための遅延(lazy)ポリシーを実施するために使用することができる。
2.2.3 2次起動
2次オペレーティングシステムカーネルは、単純な間接呼び出しによってナノカーネルを起動する。ナノカーネルそれ自体が、必要であればメモリコンテキストおよび実行スタックを切り替える。
2.2.4 2次プリエンプト
2次オペレーティングシステムをプリエンプトできるように、ナノカーネルはそれ自体の低レベルハンドラをプロセッサ例外テーブルにインストールする。2次オペレーティングシステムが割り込みによってプリエンプトされると、これらの低レベルハンドラはナノカーネルコードにジャンプする。ナノカーネルが他のオペレーティングシステムをCPU上で実行するようにスケジューリングした場合、明示的な切り替えが実行されるまでメモリコンテキストは変更されないままであることに留意されたい。
2.3 オペレーティングシステムコンテキスト
ナノカーネルデータは、グローバルデータおよびオペレーティングシステムごとのデータ(per operating system data)という、2つのカテゴリで分割することができる。グローバルデータは、グローバルなナノカーネル状態(たとえば、ナノカーネル変換ツリー)を維持し、オペレーティングシステムごとのデータは所与の1次または2次のオペレーティングシステムカーネルに関連して状態を維持する。オペレーティングシステムごとのデータは、オペレーティングシステムコンテキストとも呼ばれる。
実際に、ナノカーネルはオペレーティングシステムごとに2つのデータ構造を維持する。第1のデータ構造はオペレーティングシステムコンテキストそれ自体である。これは公開され、任意のオペレーティングシステムから可視であり、ナノカーネルインターフェースに関与している。すべてのオペレーティングシステムコンテキストは、ナノカーネルによって所有される専用メモリバンクに配置される。オペレーティングシステムコンテキストについては、ナノカーネルインターフェースに関する他のセクションで詳細に説明する。
第2のデータ構造は、ナノカーネルに提供される。これには、ナノカーネルエグゼクティブによって内部的に使用されるオペレーティングシステムごとの情報が含まれる。
3.ナノカーネルエグゼクティブインターフェース
本章では、1次および2次のオペレーティングシステムカーネルにエクスポートされたナノカーネルエグゼクティブインターフェースについて説明する。こうしたインターフェースは、カーネルとナノカーネルとの間のデータ共有(すなわち可視オペレーティングシステムコンテキスト)ならびにナノカーネルメソッドに存在する。ナノカーネルインターフェースはオペレーティングシステムの役割特有であり、(厳密に言えば)1次カーネルと2次カーネルでは異なることに留意されたい。他方で、オペレーティングシステムの役割とは無関係に説明できるこれら2つのインターフェースの間には、非常に重要な交差部分がある。
3.1 オペレーティングシステムコンテキスト
図11は、オペレーティングシステムコンテキストを示す。
すべてのオペレーティングシステムコンテキスト(1次ならびに2次)は固定長であり、オペレーティングシステムidで索引付けされたテーブルに入れられる。オペレーティングシステムコンテキストでは、すべての外部参照が物理アドレスを介して作成されることに留意されたい。オペレーティングシステムは、参照されたデータ構造にアクセスするために、こうした物理アドレスを(KVマッピングからの)仮想アドレスに変換しなければならない。図は、1次および2次の2つのカーネルのみを備えた構成を示す。
pending VEXおよびenabled VEXフィールドは、仮想例外(VEX)の現在の状態を示す。仮想化例外メカニズムについては、2次オペレーティングシステムカーネルの例外モデルと共に、本書でより詳細に説明する。
tagフィールドは、いわゆるタグリストである。これには、ブートローダによって与えられるブート情報が含まれる。ナノカーネル環境では、タグリストは仮想化され、すべてのオペレーティングシステムコンテキストで複製されることに留意されたい。他のタグの中でも、タグリスト構造は、ブート時間パラメータを指定するブートコマンドラインを含む。こうしたパラメータは、ブートローダによって与えられるか、またはナノカーネル環境変数を介して渡される。コマンドラインはオペレーティングシステム特有である。ナノカーネルは、オペレーティングシステムに関するパラメータのみを含むオペレーティングシステム特有のコマンドラインを作成するために、初期のコマンドラインを解析する。
RAM infoフィールドは、RAM記述テーブルを指す。RAM記述テーブルは、すべてのオペレーティングシステムカーネルによって共有されるグローバルデータ構造である。RAMリソースがそれらの中でどのように分散されるかを記述する。
dev infoフィールドは、ターゲットボード上に提示されるデバイス記述子のリストを指す。1次オペレーティングシステムによって作成および管理される。オペレーティングシステム間でデバイスがどのように分散されるかを記述する(デバイスは異なるオペレーティングシステムによって共有することはできない)。2次オペレーティングシステムは、このリストを使用して、2次オペレーティングシステムの再始動時に呼び出すことが可能なシャットダウン機能を登録する。
VILフィールドは、保留中のハードウェア割り込みのFIFOリストである。各エントリは、小さい整数の割り込みidを含む。通常、ARMベースのボードは大きい数の異なる割り込みソース(しばしば>64)を使用する。したがって、保留中の割り込みセットは、ビットマスクとしてではなくリストとして表すことが決められた。実際には、このフィールドをナノカーネル自体が使用することは決してない。このフィールドは、1次および2次のオペレーティングシステムにおける割り込み管理コードを簡略化するためにここに入れられたものである。ナノカーネルは、pending VEXおよびenabled VEXフィールド内のinterrupt VEXビットのみを割り込み管理の目的で使用する。
pending XIRQフィールドは、保留中の相互割り込みのテーブルへの参照である。このテーブルは、オペレーティングシステムidによって索引付けされる。各エントリは、1オペレーティングシステムあたり32の可能な相互割り込みに対応する。ナノカーネル自体はこのテーブルを使用しない。このフィールドは、相互割り込み交換で1次および2次のオペレーティングシステムを支援するために、コンテキスト構造によって参照される。相互割り込みの送達専用の仮想例外は、cross interrupt VEXの1つだけである。pending XIRQテーブルは、相互割り込みの数を32まで拡張することができる(1相互割り込みソースあたり1ビット)。相互割り込みビットは、ソースオペレーティングシステム(すなわち、相互割り込みを送信するオペレーティングシステムカーネル)によってセットされ、宛先オペレーティングシステム(すなわち、相互割り込みを受信するオペレーティングシステムカーネル)によってリセットされる。
IDフィールドは、固有のオペレーティングシステム識別子を含む。このフィールドは読み取り専用である。識別子0はナノカーネル自体に割り当てられ、識別子1は1次オペレーティングシステムカーネルに割り当てられる。オペレーティングシステム識別子は、ナノカーネルインターフェース内のオペレーティングシステムを指定する。たとえば、オペレーティングシステム識別子は、所与のカーネルに割り当てられたリソース(たとえば、RAM記述テーブル内のメモリチャンク)にタグを付けるために使用される。
オペレーティングシステムコンテキストの最後の部分は、ナノカーネルインターフェースメソッドのアドレスを指定する。これらはKVマッピング内のアドレスであるため、いかなる追加の変換もなしにナノカーネルを呼び出すために使用できる。すべてのKVマッピングは同じアドレス変換公式を使用するものとすることに留意されたい。
ナノカーネルは、1次および2次のオペレーティングシステムに対して、異なる機能をエクスポートすることに留意されたい。たとえば、1次および2次のオペレーティングシステムがアイドルメソッドを起動する場合、それらは実際には2つの異なるナノカーネル機能を呼び出す。
3.2 ナノカーネルメソッド
ナノカーネルは、コンソールI/Oオペレーションおよびエグゼクティブオペレーションという、2つのメソッドグループを提供する。コンソールI/Oグループは、カーネルがナノカーネルコンソールシリアルラインへ文字を送信すること、およびここから文字を受信することができるようにする。本書は、多少とも一般的であるコンソールI/Oメソッドを特に対象とはせず、むしろ、ARMアーキテクチャ特有のエグゼクティブメソッドに焦点を当てる。
3.2.1 例外ハンドラのインストール
ARMアーキテクチャでは、例外テーブルは固有であり、アドレス0x00000000またはアドレス0xffff0000に配置される。ナノカーネル環境では、この例外テーブルが仮想化されるため、オペレーティングシステムは例外ベクトルをARM例外テーブル内に直接インストールするのではなく、このナノカーネルメソッドを起動するものとする。例外番号(すなわち、未定義命令、プリフェッチ打ち切り、データ打ち切り、またはソフトウェア割り込み)ならびに例外ハンドラアドレスが、パラメータとして渡される。
例外ハンドラアドレスは、オペレーティングシステムコンテキストに格納される。ナノカーネルは後にこれを使用して、追加の間接呼び出しオーバヘッドが最低のオペレーティングシステムに対応する例外を、直接生成することができる。
ARMアーキテクチャでは、例外テーブルは例外ハンドラのアドレスは含まないが、一例外あたり1つのプロセッサ命令を含む。この命令は、実際の例外ハンドラへジャンプするために使用される。ナノカーネル環境では、ナノカーネル自体によって提供される非常に小さなプロローグ(prologue)コードにジャンプする。これが、現在のオペレーティングシステムコンテキストから例外ハンドラアドレスを読み取り、そこへジャンプする。現在のオペレーティングコンテキストポインタは、プロローグコードが容易にアクセスできるグローバル変数内に維持される。ナノカーネルは、新しいオペレーティングシステムカーネルがCPU上で実行されるようにスケジューリングされるごとに、この変数を更新する。
このように、例外ハンドラは、ネイティブのケースと同じ例外環境(実行モードおよびレジスタコンテンツ)で呼び出される。バンクスタックポインタレジスタは、未定義命令、プリフェッチ打ち切り、およびデータ打ち切りのハンドラの場合、ナノカーネルプロローグコードによってスクラッチされることに留意されたい。ソフトウェア割り込みハンドラ用のバンクスタックポインタレジスタは、そのままで維持される。
3.2.2 割り込みハンドラのインストール
このナノカーネルメソッドは、直接および間接のinterrupt VEXハンドラをインストールするために使用される。それらのアドレスはパラメータとして渡される。
直接割り込みハンドラは、例外ハンドラと同様である。これらは、ハードウェア割り込みを処理するために、CPU上で実行中の1次オペレーティングシステムによってのみ使用される。直接割り込みハンドラは、ネイティブのケースと同じ実行環境(実行モードおよびレジスタコンテンツ)で呼び出される。
間接割り込みハンドラは、他のオペレーティングシステムカーネルによって転送された割り込みを処理するために、ナノカーネルによって起動される。これらは、直接割り込みハンドラに比べてわずかに異なる実行環境で呼び出される。これらについては、本書でさらに詳細に論じる。
3.2.3 相互割り込みハンドラのインストール
ナノカーネルは、実際のCPU上には存在しない追加の仮想例外をサポートする。これは相互割り込みVEXである。オペレーティングシステム間通信の隅石である。相互割り込みは通常の割り込みとほとんど同様であるが、ハードウェアデバイスではなくオペレーティングシステムによって生成される。
このナノカーネルメソッドは、対応する相互割り込みハンドラを記憶させるために使用される。間接割り込みハンドラと同じ実行環境(実行モードおよびレジスタコンテンツ)で呼び出されることになる。
3.2.4 相互割り込みの通知
このナノカーネルメソッドは、宛先オペレーティングシステム上にcross interrupt VEXを生成するために使用される。pending XIRQテーブル内に対応するビットもセットする。宛先オペレーティングシステムidおよび相互割り込み番号が、パラメータとして渡される。
3.2.5 アイドル
ナノカーネルは、オペレーティングシステムカーネルがアイドルループ内で呼び出さなければならないアイドルメソッドを提供する。このメソッドは、呼び出し側オペレーティングシステムカーネルが次の割り込みまで何も実行することがない旨を、ナノカーネルに通知する。
アイドルメソッドを起動すると、結果としてシステムが、2次オペレーティングカーネル(あれば)を実行する準備のできている次のシステムに切り替えられるか、またはすべての2次オペレーティングシステムカーネルがアイドルの場合、1次アイドルメソッドから戻る。
ナノカーネルは、1次アイドルメソッドに対して、ステートレス(stateless)およびステートフル(statefull)という2つの異なる実施を提供する。ステートレスアイドルメソッドから戻る場合、すべてのレジスタはスクラッチされる。ステートフルアイドルメソッドから戻る場合、永続レジスタ(r4〜r13)が保持される。
アイドルメソッドの正しい実施は、1次オペレーティングシステムのアイドルループ実施に依存し、対応する構成.xmlファイル内で選択することが可能である。
3.2.6 再始動
ナノカーネルは、2次オペレーティングシステムカーネルを再始動するために、1次ならびに2次のオペレーティングシステムによって呼び出し可能な再始動メソッドを提供する。再始動されるオペレーティングシステムのidは、パラメータとして渡される。
ナノカーネルは宛先オペレーティングシステムの実行を停止し、オペレーティングシステムカーネルのイメージをそのコピーから復元し、最終的に、初期エントリポイントでオペレーティングシステムカーネルの実行を開始する。
3.2.7 2次停止
ナノカーネルによって、停止メソッドが2次オペレーティングシステムに提供される。ナノカーネルは、ナノカーネルスケジューラによって切り替えられるのを避けるために、呼び出し元オペレーティングを非実行状態にする。
停止されたオペレーティングシステムは、前述のナノカーネル再始動メソッドによって、再度開始することができる。
4.1次実行環境
基本的に、1次オペレーティングシステムカーネルはネイティブ実行環境で実行される。ARMプロセッサ上のナノカーネル実施は、1次オペレーティングシステム特徴(性能、割り込み待ち時間、プリエンプト待ち時間)に対するナノカーネル環境の影響を最小限にするように努める。1次オペレーティングシステムは、通常、リアルタイムオペレーティングシステムであるため、たとえ、同じプロセッサ上で他の(2次)オペレーティングシステムが同時に実行されている場合であっても、1次カーネルの挙動を未変更のまま維持することが重要である。
4.1 初期設定
1次オペレーティングシステムは、パワーアッププロセッサ初期設定を実行し、RAM内にナノカーネルデータ(必要であれば)をインストールし、初期変換ツリーを作成し、MMU(存在すれば)を使用可能にし、ナノカーネルエントリポイントにジャンプする、小規模なトランポリンプログラムを提供する。初期変換ツリーは、トランポリンプログラムおよびナノカーネルをマッピングするものとする。実行モードはスーパバイザモードであり、すべてのハードウェア割り込みが使用不可となる。
今度はナノカーネルが、オペレーティングシステムのメモリバンクをRAMにインストールし、オペレーティングシステムコンテキストを初期設定して、使用可能とされたMMU(存在すれば)および使用不可とされたハードウェア割り込みとを備える1次エントリポイントにジャンプする。実行モードはスーパバイザモードのままである。
ナノカーネル初期設定コードは、そのデータセクションに配置された静的ナノカーネルスタックを使用して実行される。1次オペレーティングシステムカーネルにジャンプした場合、このスタックは依然として有効である。それにもかかわらず、1次オペレーティングシステムカーネルをそれ自体のスタックに可能な限り迅速に切り替えなければならず、このナノカーネルスタックを今後一切使用してはならない。ナノカーネルスタックは、初期設定段階のみならず、次の章で説明するように2次起動およびプリエンプトを処理するために、ランタイム時にも使用される。
1次オペレーティングシステムカーネルにジャンプする場合、スーパバイザモードのバンクスタックポインタレジスタは、1次オペレーティングシステムコンテキストを指す。プロセッサ割り込みは、1次初期設定段階のはじめに使用不可となる。1次オペレーティングシステムカーネルは、通常、クリティカル初期設定段階が終了すると、割り込みを使用可能にする。
初期設定段階中に、1次オペレーティングシステムカーネルは、通常、例外ハンドラおよび割り込みハンドラをセットアップするために、ナノカーネルメソッドを起動する。最終的に、1次カーネルはアイドルループに入り、ナノカーネルアイドルメソッドを起動する。
アイドルメソッドが最初に呼び出された場合、ナノカーネルは、1次オペレーティングシステムカーネルがその実行環境を完全に初期設定したものとみなし、初期設定後の段階に進む。
こうした初期設定後の段階で、ナノカーネルはナノカーネルメモリコンテキストを完了する。使用可能なすべての物理メモリを発見し、RAM infoフィールドによって示された対応する記述子に登録することは、1次オペレーティングシステムの仕事であるため、ナノカーネルはそのメモリコンテキストを完了できることに留意されたい。初期設定後が終了すると、ナノカーネルは、2次カーネル実行準備完了(ready to run)に切り替えるか、または、すべての2次カーネルがアイドルの場合、1次アイドルメソッドから戻るために、スケジューラを呼び出す。
ナノカーネルは、グローバルに共有されたデータ構造であるRAM記述子およびデバイスリストを初期設定するように、1次オペレーティングシステムカーネルに要求する。こうした初期設定は、アイドルメソッドが呼び出される前に実行しなければならない。この時点を過ぎると2次カーネルはグローバルに共有されたデータ構造にアクセスできるため、この要件は当然である。
具体的に言えば、1次カーネルは、ボード上で使用可能な物理メモリを検出すること、および空き物理メモリチャンクをRAM記述子に登録することを担当している。
1次Board Support Package(BSP)に従って、1次カーネルは、ナノカーネル対応ドライバ、特に割り込みコントローラドライバを始動するべきである。
4.2 1次例外
基本的に、ナノカーネルは、1次オペレーティングシステムがプロセッサ上で実行中の場合に生じる例外を遮断しない。すべてのプログラミング例外は、ネイティブ1次ハンドラによって処理される。ナノカーネルは、対応する例外ハンドラにジャンプするために、小さなプロローグコードのみを実行する。ARMナノカーネルアーキテクチャへ移植する場合、1次低レベルハンドラを修正する必要はない。
バンクスタックポインタレジスタは、未定義命令、プリフェッチ打ち切り、およびデータ打ち切りのハンドラの場合、ナノカーネルプロローグコードによってスクラッチされることに留意されたい。ソフトウェア割り込みハンドラ用のバンクスタックポインタレジスタは、そのままで維持される。
4.3 1次割り込み
1次オペレーティングシステムがCPU上で実行中に割り込みが発生した場合、ナノカーネルによって追加のコードが導入されることなしに、ネイティブの低レベル(直接)割り込みハンドラが起動される。バンクスタックポインタレジスタはそのままである。
4.4 転送済み割り込み
2次オペレーティングシステムがプロセッサ上で実行中に割り込みが発生した場合、その割り込みは1次オペレーティングシステムに転送される。こうした割り込み転送プロセスは、以下の主要なステップで進行する。
・割り込みがナノカーネルによって遮断される
・プリエンプトされた2次オペレーティングシステムカーネルの実行が中断され、ナノカーネルは1次実行環境に切り替える
・ナノカーネルが対応する1次オペレーティングシステムカーネルへの割り込みをトリガする
このような場合、割り込みを処理するために、対応する1次低レベル間接割り込みハンドラが(1次実行環境において)起動される。割り込みが処理されると、1次オペレーティングシステムカーネルはナノカーネルに戻る。
1次間接割り込みハンドラから戻った後、ナノカーネルは次に実行する2次オペレーティングシステムを決定するために、そのスケジューラを呼び出す。プリエンプトされた2次システムは、割り込み後も続行される必要のないことに留意されたい。他の(優先順位の高い)2次システムは、割り込みによって実行準備が完了する場合がある。
ARMアーキテクチャでは、CPUは、ユーザ、システム、スーパバイザ、未定義、打ち切り、割り込み、および高速割り込みの、7つの異なる実行モードで実行することができる。そのうちの5つは、それらのprived/バンクのr13およびr14レジスタを有する。したがって理論上は、ナノカーネルが1つのオペレーティングシステムカーネルから他のオペレーティングシステムカーネルに切り替えられた場合、すべてのバンクレジスタも切り替えられるべきである。オペレーティングシステムの切り替えおよび割り込みの転送の速度を上げるために、スーパバイザレジスタを除くすべてのバンクレジスタをスクラッチとみなすことに決定し、こうした切り替えを常にスーパバイザモードで実行することも決定した。
2次システムがユーザモードで実行中に割り込みが発生した場合、割り込みハンドラが常に前の状態を保持することから、対応するバンクスタックレジスタは割り込みハンドラによって保持されることに留意されたい。2次システムがスーパバイザモードで実行中に割り込みが発生した場合、ユーザモードバンクレジスタは、すでにオペレーティングシステム自体によって保存されている。
本発明者等の要件を満たすための最も容易な方法は、2次オペレーティングシステム例外ハンドラを修正することである。それらは常にバンクスタックポインタレジスタを事前に定義された値にセットし、できる限り迅速にスーパバイザモードに切り替えるべきである。ハードウェア割り込みは、スーパバイザモードへの切り替えが完了した場合にのみ、使用可能となるものとする。
1次オペレーティングシステムが実行している間、こうした状況ではオペレーティングシステムの切り替えが実行できないことから、CPUの実行モードに関する制約はない。
ナノカーネルは1次オペレーティングシステムカーネルに割り込みを転送する場合、1次間接割り込みハンドラを起動する。これは、r10〜r15レジスタおよびcpsrレジスタがすでにオペレーティングシステムコンテキストに保存された状態で、スーパバイザモードで起動される。r10はこのコンテキストへのポインタを含む。構造により、1次オペレーティングシステムは、ナノカーネルがこれに割り込みを転送する場合、常に非アクティブ状態(すなわち、アイドルナノカーネルメソッドと呼ばれる)であることに留意されたい。
間接割り込みハンドラ実行の結果として、1次オペレーティングシステムは新しいタスクをスケジューリングすることが可能であるため、ステートレスアイドルループを実施する場合(割り込みハンドラがアイドル状態で呼び出された場合にすべてのレジスタを保持することを要求しないか、またはアイドルループレジスタを保存せずに単に新しいタスクに切り替える場合)、ナノカーネルはすべてのレジスタ(およびr10〜r15のみ)をオペレーティングシステムコンテキストに保存すべきである。それらは、ナノカーネルが再度2次オペレーティングシステムに切り替えられると復元されることになる。
1次オペレーティングシステムがステートフルアイドルループを実施した場合(たとえば、アイドルループが通常の最低優先順位タスクとして実施され、オペレーティングシステムスケジューラが割り込み処理の終わりに直接呼び出された場合)、r0〜r9レジスタは1次オペレーティングシステムによって保持されることになるため、それらの保存を据え置く(defer)ことができる。ナノカーネルは、異なる2次オペレーティングシステムをスケジューリングする場合にのみ、それらを保存/復元する必要がある。ナノカーネル環境において2つのオペレーティングシステム(1つは1次、1つは2次)のみを実行する場合、r0〜r9レジスタ保存は完全に回避することができる。
ナノカーネルは、一般的な(最適化されない)割り込み転送(間接割り込みハンドラ起動に先立ってすべてのレジスタが保存された場合)と、最適化された割り込み転送の、両方をサポートする。正しい実施は、1次オペレーティングシステムに依存し、対応する構成.xmlファイル内で選択することが可能である。
5.2次実行環境
基本的に2次オペレーティングシステムカーネル実行環境は、割り込み管理を除いて、ネイティブなものにかなり近い。ナノカーネル環境は、2次オペレーティングシステムを他のオペレーティングシステムによって完全にプリエンプトできるようにするために、割り込み管理のネイティブメカニズムを修正する。ナノカーネルアーキテクチャに移植された2次オペレーティングシステムカーネルは、もはやプロセッサレベルでの割り込みを使用不可とせず、むしろナノカーネルによって提供されるソフトウェア割り込みメカニズムを使用する(すなわち仮想例外)。割り込みは、もはやこうした2次オペレーティングシステムカーネルによって直接処理されず、むしろナノカーネルによって遮断され、1次オペレーティングシステムカーネルに転送される。必要であれば、今度は1次オペレーティングシステムが、2次オペレーティングシステムに関するinterrupt VEXを生成することになる。このinterrupt VEXは、マスキング解除された場合は2次間接割り込みハンドラによって即時に処理され、マスキングされた場合は据え置かれることになる。
5.1 初期設定
ナノカーネルは、初期設定時に2次メモリバンクを1次バンクと共にインストールする。他方で、2次カーネルの最終的な初期設定は、初期設定後の段階まで据え置かれる。
この段階で、ナノカーネルは、2次メモリバンクのコピーを維持するためにメモリを割り振る。その後、こうしたコピーを使用して、再始動時に2次システムの初期イメージを復元する。しかしながら2次システムの再始動はオプションであり、物理メモリの消費を削減するために使用不可とされる可能性がある。
1次カーネルと同様に、オペレーティングシステムコンテキストがスーパバイザモードでバンクスタックポインタレジスタに渡される。他方で、1次カーネルとは異なり、たとえ2次カーネル初期設定段階であっても、ハードウェア割り込みは使用可能とされる。明らかに、対応する2次interrupt VEXは使用不可とされる。2次カーネル初期設定コードでさえも、1次システムによって完全にプリエンプト可能であることに留意されたい。これは、2次オペレーティングシステムが再始動された場合に1次オペレーティングシステムを妨害しないために、特に重要である。
ハードウェア割り込みが使用可能とされたにもかかわらず、2次カーネルが開始された場合、仮想例外(ハードウェア割り込みに対応する)は使用不可である。したがって、割り込みは、クリティカル初期設定段階の終わりにカーネルによって明示的に使用可能化されるまで、ナノカーネルによって送達されない。(仮想例外に基づく)ソフトウェア割り込みマスキングメカニズムについて、本書でさらに詳細に説明する。
2次オペレーティングシステムは、MMUの使用可能化で開始される。ナノカーネルコンテキストは、初期メモリコンテキストとして使用される。こうした初期の1対1マッピングは、一時的に2次カーネルに提供される。このマッピングは修正されないか、または初期設定コードによって永続的に使用されるべきであり、代わりに、2次カーネルがそれ自体のKVマッピングを構築し、可能な限り迅速にこれに切り替えるべきであることに留意されたい。
通常、2次カーネルは、初期設定コードを実行するためにデータセクションに配置された静的な初期スタックを使用する。
1次カーネルと同様、通常、初期設定段階中に、2次カーネルは例外ハンドラおよび割り込みハンドラをインストールするためにナノカーネルを起動する。最終的に、2次カーネルはアイドルループに入り、ナノカーネルアイドルトラップを起動する。
5.2 2次例外
基本的に、ナノカーネルは、2次オペレーティングシステムがプロセッサ上で実行中の場合に生じる例外を遮断しない。すべてのプログラミング例外は、ネイティブ2次例外ハンドラによって処理される。ナノカーネルは、対応する例外ハンドラにジャンプするために、小さなプロローグコードのみを実行する。ARMナノカーネルアーキテクチャへ移植する場合、2次低レベルハンドラを修正する必要はない。
バンクスタックポインタレジスタは、未定義命令、プリフェッチ打ち切り、およびデータ打ち切りのハンドラの場合、ナノカーネルプロローグコードによってスクラッチされることに留意されたい。ソフトウェア割り込みハンドラ用のバンクスタックポインタレジスタは、そのままで維持される。
5.3 仮想例外
仮想例外(VEX)は、オペレーティングシステムカーネルが例外をオペレーティングシステムカーネルに通知し、これを据え置かれた方法で送達できるようにする、ナノカーネルによって提供されるメカニズムである。具体的に言えば、VEXメカニズムは、ハードウェア割り込みを2次オペレーティングシステムカーネルに関するソフトウェア割り込みに置き換えるために、ARMナノカーネルアーキテクチャで使用される。
VEXインターフェースは、カーネルコンテキスト内に配置された、pendingおよびenabledという2つのフィールドからなる。これらのフィールドは、2次オペレーティングシステムコンテキストにとってのみ有意であるが、1次と2次、両方のオペレーティングシステムカーネルによってアクセスされる。
すべての仮想例外は、本来、pending(またはenabled)フィールド内のビット位置によって列挙される。したがって、ARMアーキテクチャ上には合計32の可能な仮想例外が存在する(pendingおよびenabledフィールドは32ビットの整数値である)。
ARMアーキテクチャ上でナノカーネルによってサポートされる仮想例外は、割り込み、高速割り込み、相互割り込み、および「実行中」の4つのみである。
以下の表は、仮想例外が実際の例外にどのようにマッピングされるかを示す。
Figure 2008510238
仮想例外「実行中」はいかなる実際の例外にも対応せず、実際は、カーネルがアイドルであるかどうかを検出するためにナノカーネルによって内部的に使用される擬似仮想例外である。こうした擬似仮想例外がどのような働きをするかについて、本書でさらに詳細に説明する。
複数の仮想例外を同時に保留できるが、一度に処理できるのはそれらのうちの1つのみであるため、すべての仮想例外はその番号に従って優先順位付けされる。最高の優先順位は高速割り込みVEXに割り当てられ、最低の優先順位は「実行中」VEXに割り当てられる。
2次コンテキストのpending VEXフィールドは、通常、割り込みコントローラにドライバを提供する1次カーネルによって更新される。こうしたドライバは、通常、pending VEXフィールドに適切なビットを設定することによって、仮想例外を2次カーネルに通知する。
enabled VEXフィールドは、仮想例外を使用可能または使用不可にするために、2次カーネルによって更新される。所与の仮想例外は、対応するビットがenabled VEXフィールドに設定された場合、使用可能とされる。enabled VEXフィールドを使用して、2次カーネルは、割り込みに対して保護されたクリティカルセクションを実施する。言い換えれば、2次カーネルは、プロセッサ割り込みを使用不可/使用可能とするために、それ以上CPSRレジスタを操作せず、むしろそのカーネルコンテキストのenabled VEXフィールドを修正する。
所与の仮想例外は、同時に保留および使用可能化された場合、ナノカーネルによって送達される。ナノカーネルは、VEXハンドラにジャンプする直前に、対応する保留ビットをリセットする。
すべてのVEXハンドラが、実際には間接ハンドラであることに留意されたい。それらは、r10〜r15レジスタおよびcpsrレジスタがすでにオペレーティングシステムコンテキストに保存された状態で、スーパバイザモードでナノカーネルによって起動される。r10は、このコンテキストへのポインタを含む。
2次カーネルをARMナノカーネルアーキテクチャ上に移植する場合、ハードウェア割り込みを置き換えるソフトウェア割り込みマスキングメカニズムを考慮するために、低レベル例外ハンドラを依然として修正しなければならない。割り込みハンドラを呼び出す場合、ナノカーネルは、すべての仮想例外が対応する値をenabledフィールドに書き込むのを使用不可にするだけである。ハードウェア割り込みは、2次オペレーティングシステムを実行している場合、プロセッサレベルで常に使用可能とされるため、低レベル割り込みハンドラ内部であっても1次オペレーティングシステムによってプリエンプトすることができる。このような方法では、ナノカーネル環境において、2次オペレーティングシステムは1次オペレーティングシステムによって完全にプリエンプト可能になる。
仮想例外は、使用不可状態にある間、1次オペレーティングシステムカーネルによって通知可能である。この場合、例外は2次オペレーティングシステムカーネルに送達されず、むしろ仮想例外が再度使用可能になるまで保留されたままである。したがって、仮想例外が2次オペレーティングシステムカーネルによって再度使用可能になった場合、保留中の仮想例外が存在するかどうかをチェックすべきである。チェックが肯定である場合、2次オペレーティングシステムカーネルは、こうした保留中の仮想例外を処理するために、ナノカーネルを起動すべきである。
一般に2次カーネルは、以下の2つの場合に、仮想例外を再度使用可能にする。
・コードのクリティカルセクションを保護するために、仮想例外が2次カーネルによってあらかじめ使用不可とされている場合
・間接的な割り込みハンドラの起動の結果として、仮想例外がナノカーネルによって使用不可とされている場合
5.4 ナノカーネルの再入力
ナノカーネルコードは、ほとんどの場合、ナノカーネルへの再入力を防ぐようにプロセッサレベルで割り込みを使用不可とした状態で実行される。他方で、一部のナノカーネルの起動は長時間かかる場合があるため、1次割り込みの待ち時間を短く維持するために、こうした長い動作を実行する場合、ナノカーネルは割り込みを使用可能にしなければならない。
長いナノカーネルの動作には、以下の2種類がある。
・同期コンソール出力
動作の持続時間は、シリアルライン速度に依存する。たとえば、9600ボーレートラインでは、単一文字の出力に最高で1ミリ秒かかる場合がある。
・2次カーネル再始動
動作の持続時間は、コピーから復元されるカーネルイメージサイズに依存する。
上記に列挙したすべての動作について、ナノカーネルは、割り込み、したがって1次カーネルからの再入力を使用可能にする。他方で、割り込みが使用可能な間、1次割り込みハンドラから戻る場合に他の2次カーネルがスケジューリングされるのを防ぐために、ナノカーネルスケジューラは使用不可となる。言い換えれば、ナノカーネルは(割り込みの結果として)1次カーネルのみによってプリエンプトすることが可能であるが、2次カーネルからの再入力は禁止される。こうした制約により、ナノカーネルは、2次実行環境のためにグローバルリソースを使用することができるようになる。
2次カーネルから発行される長い動作の中には、1次メモリコンテキストで実行可能なものがある。言い換えれば、こうした動作を実行する前に、ナノカーネルは1次実行コンテキストに切り替えて、割り込みを使用可能にする。動作が完了すると、ナノカーネルは割り込みを使用不可にし、ナノカーネルスケジューラを介して呼び出し元の2次カーネルに戻る。
1次実行環境への、または1次実行環境からの切り替えによって導入される、余分なオーバヘッドを避けるために、ナノカーネルメモリコンテキストで頻繁に使用されるナノカーネルメソッドを実行することが(たとえ1次メモリコンテキストでも実行可能な場合であっても)好ましいことにも留意されたい。こうした頻繁な動作の典型的な例が、ナノカーネルコンソール上での同期出力である。
6.スケジューラ
オペレーティングシステムスケジューラの主な役割は、次に実行するタスクを選択することである。ナノカーネルがオペレーティングシステムの実行を制御するため、ナノカーネルスケジューラは次に実行する2次オペレーティングシステムを選択する。言い換えれば、ナノカーネルはシステム全体に特別なスケジューリングレベルを追加する。
ナノカーネルアーキテクチャでは、1次オペレーティングシステムが、2次システムに対して高い優先順位レベルを有し、1次システムがアイドルループにある場合にのみCPUが2次システムに与えられることに留意されたい。1次カーネルはプリエンプト可能ではなく、アイドルループと呼ばれるアイドルメソッドを介してナノカーネルスケジューラを明示的に起動するということが言える。2次システム実行中に割り込みが発生すると、1次カーネル割り込みハンドラが起動される。1次カーネルの観点から見れば、こうした割り込みはアイドルループを実行している背景スレッドをプリエンプトする。割り込みが処理され、すべての関係タスクが実行されると、1次カーネルはナノカーネルに戻り、ナノカーネルは次に実行する2次システムを決定するためにナノカーネルスケジューラを起動する。1次カーネルの観点から見れば、カーネルは割り込みによってプリエンプトされた背景スレッドに戻るだけである。2次アクティビティは1次カーネルに対してトランスペアレントであり、1次システムの挙動を変更することはない。
ナノカーネルは異なるスケジューリングポリシーを実施することができる。しかしながら、デフォルトでは、優先順位に基づくアルゴリズムが使用される。同じ優先順位レベルでは、ナノカーネルはラウンドロビンスケジューリングポリシーを使用することに留意されたい。所与の2次カーネルの優先順位は、システムイメージの構築時に静的に構成される。
どのようなスケジューリングポリシーが実施されても、スケジューラは所与の2次システムの実行準備が完了しているかどうかを検出しなければならない。この条件は、カーネルコンテキストのpending VEXフィールドとenabled VEXフィールドの間のビット単位論理および演算として計算される。非ゼロの結果は、システムの実行準備が完了していることを示す。
前述のように、pending VEXとenabled VEXのペアにおける各ビットは、仮想例外を表す。実行準備完了の基準を言い換えると、少なくとも1つのマスキングされていない保留中の仮想例外がある場合、2次システムは実行準備完了状態にあると言える。
通常はハードウェアおよびソフトウェアの(相互)割り込みにマッピングされるすべての仮想例外の中に、カーネルが現在アイドルであるかどうかを示す特別な仮想例外(running)が存在する。
runningビットは2次カーネルがアイドルメソッドを起動するごとにpending VEXフィールド内で消去され、runningビットは仮想例外が2次カーネルに送達されるごとにpending VEXフィールド内でセットされる。
runningビットは、通常は、実行中の2次カーネルについてenabled VEXフィールド内で常にセットされる。ナノカーネルは、2次カーネルが開始された場合にこのビットをセットし、2次カーネルが停止された場合にこのビットをリセットする。2次カーネルは、マスキング/マスキング解除割り込みが仮想例外にマッピングされた場合、runningビットを消去すべきではない。
外部エージェントは、そのカーネルコンテキスト内のenabled VEXフィールドを消去/復元することによって、2次カーネルの例外を中断/再開できることに留意されたい。この機能は、1次カーネルタスクとして、スケジューリングポリシーエージェントがナノカーネル外部で実施されることになる可能性をオープンする。加えて、2次カーネル用のデバッグエージェントを1次カーネルに加えられるタスクとしても実行できるようにする。こうした2次デバッグエージェントの利点は、1次オペレーティングシステムによって提供されるすべてのサービスがデバッグ(たとえばネットワーキングスタック)に使用できるようになること、および2次カーネルのデバッグが1次オペレーティングシステム上で実行中のクリティカルタスクと同時に実行できることである。
7.相互割り込み
本セクションでは、ナノカーネル相互割り込みメカニズムに関する(前述のセクションですでに説明した)情報をほぼ統合する。
ここでは、以下の2種類の相互割り込みについて考察する。
・2次オペレーティングシステムカーネルに送信される相互割り込み
・1次オペレーティングシステムカーネルに送信される相互割り込み
相互割り込みを宛先2次オペレーティングシステムに送信するために、ソースオペレーティングシステムカーネルは第1に、オペレーティングシステムコンテキストのpending XIRQフィールドによって示される相互割り込みテーブルに対応するビットをセットする。その後、ソースオペレーティングシステムカーネルは、宛先オペレーティングシステムコンテキストのpending VEXフィールドに対応するビットをセットしている宛先オペレーティングシステムに、cross interrupt VEXを通知する。相互割り込みハンドラはナノカーネルによって呼び出されると、pending XIRQフィールドをチェックし、保留中の相互割り込みソースに対応するビットを消去し、最終的にこのソースに接続されたハンドラを起動する。ソースと宛先のどちらのオペレーティングシステムカーネルも、アトミック命令を使用してpending XIRQフィールドを更新する。1次および2次のどちらのタイプのソースオペレーティングシステムカーネルも、同じアルゴリズムを使用することに留意されたい。
相互割り込みを1次オペレーティングシステムに送信するために、2次オペレーティングシステムカーネルは第1に、オペレーティングシステムコンテキストのpending XIRQフィールドによって示される相互割り込みテーブルに対応するビットをセットする。ナノカーネルは、2次オペレーティングシステムを即時にプリエンプトして、1次低レベル相互割り込みハンドラを起動し、これがpending XIRQフィールドをチェックし、保留中の相互割り込みソースに対応するビットを消去し、最終的にこのソースに接続されたハンドラを起動する。
オペレーティングシステムカーネルは、相互割り込み番号ゼロを使用してはならない。この割り込みは、停止されたオペレーティングシステムが開始されたこと、または実行中のオペレーティングシステムが停止されたことを、ナノカーネルがオペレーティングシステムに通知するために予約される。言い換えれば、相互割り込み番号ゼロは、実行中のオペレーティングシステムに、グローバルシステムの構成が変更されたことを通知する。これは、オペレーティングシステムコンテキスト内のrunningフィールドの状態が変更されるごとに、すべての実行中のオペレーティングシステムにブロードキャストされる。
他の態様および実施形態
前述の内容から、前述の諸実施形態が単なる例であること、および多くの他の実施形態が可能であることが明らかとなろう。前述のオペレーティングシステム、プラットフォーム、およびプログラミングの技法は、すべて自由に変更することができる。当業者にとって明らかとなるであろう任意の他の修正形態、置換形態、および変形形態は、特許請求の範囲でカバーされているか否かにかかわらず、本発明の範囲内にあるものとみなされるべきである。疑いを避けるために、本明細書に開示された任意およびすべての新規な主題およびそれらの組合せに対する保護が求められる。
本発明が実行可能なコンピュータシステムの要素を示すブロック図である。 従来技術におけるソフトウェアの構成を示す図である。 本発明に従ったソフトウェアの構成を示す対応図である。 図1のコンピュータ向けに図2bのソフトウェアを作成する際の段階を示す流れ図である。 図2bの一部を構成するハードウェアリソースディスパッチャの構成要素を示す図である。 ブートおよび初期設定シーケンスで使用されるプログラムを示す図である。 ブートおよび初期設定プロセスで使用されるシステムメモリイメージを示す図である。 1次オペレーティングシステムから2次オペレーティングシステムへの移行を示す図である。 2次オペレーティングシステムから1次オペレーティングシステムへの移行を示す図である。 (a)は本発明に従った、異なるオペレーティングシステム上で実行するアプリケーション間での通信を示す図であり、(b)は本発明に従った、異なるコンピュータ上の異なるオペレーティングシステム上で実行するアプリケーション間での通信を示す図である。 オペレーティングシステムによって使用されるメモリマッピングを示す図である。 ナノカーネルとオペレーティングシステムとの間のインターフェースを示す図である。

Claims (36)

  1. 複数の異なるオペレーティングシステムが同じコンピュータ上で同時に実行できるようにする方法であって、
    相対的に高い優先順位を有するように第1のオペレーティングシステムを選択するステップと、
    相対的に低い優先順位を有するように少なくとも1つの第2のオペレーティングシステムを選択するステップと、
    所定の条件の下で、前記オペレーティングシステム間で切り替えるように構成された共通プログラムを提供するステップと、
    前記第1および第2のオペレーティングシステムが前記共通プログラムによって制御できるようにするために、それらに対する修正を提供するステップと
    を含む方法。
  2. 前記第1のオペレーティングシステムがリアルタイムオペレーティングシステムである、請求項1に記載の方法。
  3. 前記第2のオペレーティングシステムが非リアルタイムの汎用オペレーティングシステムである、請求項1に記載の方法。
  4. 前記第2のオペレーティングシステムがLinux、あるいはそのバージョンまたは変形である、請求項1に記載の方法。
  5. 前記共通プログラムが、前記オペレーティングシステム間で切り替えるために必要なプロセッサ状態を保存するように、および保存されたバージョンから復元するように構成された、請求項1に記載の方法。
  6. 前記第2のオペレーティングシステムに関するプロセッサ例外が、前記共通プログラムによって仮想様式で処理される、請求項1に記載の方法。
  7. 前記共通プログラムが、何らかのプロセッサ例外を遮断するように、および前記第1のオペレーティングシステムの例外処理ルーチンを処理するために呼び出すように構成された、請求項1に記載の方法。
  8. 前記第2のオペレーティングシステムに関する前記プロセッサ例外が仮想例外として通知される、請求項7に記載の方法。
  9. 前記共通プログラムが、保留中の前記仮想例外に対応する前記第2のオペレーティングシステムの例外処理ルーチンを呼び出すように構成された、請求項8に記載の方法。
  10. それぞれが排他的に動作可能な別々のメモリスペースを備えた前記オペレーティングシステムのそれぞれを提供するステップをさらに含む、請求項1に記載の方法。
  11. それぞれが排他的アクセスを有する対象である前記コンピュータの第1の入力および/または出力デバイスを備えた、前記オペレーティングシステムのそれぞれを提供するステップをさらに含む、請求項1に記載の方法。
  12. 各オペレーティングシステムが、ほぼ未修正のネイティブルーチンを使用して前記第1の入力および/または出力デバイスにアクセスする、請求項11に記載の方法。
  13. それぞれが共有アクセスを有する対象である前記コンピュータの第2の入力および/または出力デバイスへのアクセスを備えた、前記オペレーティングシステムのそれぞれを提供するステップをさらに含む、請求項1に記載の方法。
  14. すべてのオペレーティングシステムが、前記第1のオペレーティングシステムの前記ルーチンを使用して前記第2の入力および/または出力デバイスにアクセスする、請求項13に記載の方法。
  15. 前記第1の、または前記共通プログラムの動作に割り込むことなく、前記第2のオペレーティングシステムを再始動するための再始動ルーチンを提供するステップをさらに含む、請求項1に記載の方法。
  16. 前記共通プログラムが、前記第2のオペレーティングシステムの前記動作を制御するためのトラップ呼び出しメカニズム、および/または、前記第2のオペレーティングシステム内の状況変化を前記第1のオペレーティングシステムに通知するためのイベントメカニズムを提供する、請求項15に記載の方法。
  17. 前記共通プログラムが、前記第2のオペレーティングシステムのカーネルのシステムイメージのコピーを格納し、このような保存されたコピーから前記第2のオペレーティングシステムの前記カーネルを復元するように構成された、請求項15に記載の方法。
  18. 前記第1のオペレーティングシステムが、前記第2のオペレーティングシステムのクラッシュを検出できるように、前記第2のオペレーティングシステムの連続する動作を監視できるようにするための協働ルーチンを、前記第1および第2のオペレーティングシステムが有する、請求項15に記載の方法。
  19. 前記オペレーティングシステムの前記動作において事前に定義された条件が発生すると、前記共通プログラムがマシン状態変数の状態を出力するように構成された、デバッグルーチンを提供するステップをさらに含む、請求項1に記載の方法。
  20. 前記オペレーティングシステムと共通プログラムとを単一のコード製品に組み合わせるステップをさらに含む、請求項1に記載の方法。
  21. 前記オペレーティングシステムと共通プログラムとをコンピュータ製品上の永続メモリに埋め込むステップをさらに含む、請求項1に記載の方法。
  22. 前記共通プログラムが、前記第1および第2のオペレーティングシステム、および/またはそれらの上で実行中のアプリケーションの間での通信を可能にする、オペレーティングシステム間通信メカニズムを提供するように構成された、請求項1に記載の方法。
  23. 前記共通プログラムが、通信バスブリッジに対応する仮想入力および/または出力デバイスを定義するため、結果として前記オペレーティングシステムがあたかも通信バスを介するように通信可能である、請求項22に記載の方法。
  24. 前記オペレーティングシステムを修正する前記ステップが、前記仮想バスブリッジデバイスを管理するドライバルーチンを追加するステップを含む、請求項23に記載の方法。
  25. 請求項1に記載のステップを実行するためのコードを備える、開発キットコンピュータプログラム製品。
  26. 請求項20に従って組み合わせられたコードを備える、コンピュータプログラム製品。
  27. 請求項24に従ってプログラムが埋め込まれた永続メモリをその中に格納させる、CPU、メモリデバイス、および入力/出力デバイスを備える、埋め込み型コンピュータシステム。
  28. CPU、メモリデバイス、および入力/出力デバイスを備える、コンピュータシステムであって、
    相対的に高い優先順位を有する第1のオペレーティングシステムと、
    相対的に低い優先順位を有する第2のオペレーティングシステムと、
    所定の条件の下で、前記オペレーティングシステム間で切り替えることによって、前記オペレーティングシステムを同時に実行するように構成された共通プログラムと、
    を備えるコンピュータコードをその上で実行させる、コンピュータシステム。
  29. 請求項1〜24のいずれかに記載の方法を使用して前記第1および第2のオペレーティングシステムを同時に実行するように構成された、請求項28に記載のコンピュータシステム。
  30. 前記オペレーティングシステムのそれぞれに、前記共通プログラムに制御を渡すアイドルルーチンが提供された、請求項1に記載の方法。
  31. 前記アイドルルーチンがプロセッサ停止命令の代用を務める、請求項30に記載の方法。
  32. 実行オペレーティングシステムの実行中にプロセッサ例外が発生すると、
    (a)前記共通プログラムはそれらを処理するために前記第1のオペレーティングシステムの例外処理ルーチンを呼び出すように構成され、
    (b)前記実行が所定の第2のオペレーティングシステム向けである場合、仮想例外が作成され、
    (c)前記プロセッサ例外が前記第1のオペレーティングシステムによって処理された後、前記共通プログラムは前記実行オペレーティングシステムの実行に戻るように構成され、
    (d)前記共通プログラムが次に前記所定の第2のオペレーティングシステムに切り替えられた場合、保留中の前記仮想例外が前記所定の第2のオペレーティングシステムに通知され、
    前記仮想例外に対応する前記所定の第2のオペレーティングシステムの例外処理ルーチンが、これを処理するために呼び出される、
    請求項1に記載の方法。
  33. 前記第2のオペレーティングシステムが割り込みをマスキングしないように修正される、請求項1に記載の方法。
  34. すべてのハードウェア割り込みは前記第1のオペレーティングシステムによって初期に処理され、第2のオペレーティングシステム向けの割り込みは、その第2のオペレーティングシステムが次に前記共通プログラムによってスケジューリングされるまで仮想化および据え置かれ、その時点でその第2のオペレーティングシステムによって処理される、請求項1に記載の方法。
  35. 前記共通プログラムは、2次オペレーティングシステムまたはそれぞれの2次オペレーティングシステムが、前記2次システムを前記1次システムによって完全にプリエンプト可能にするために、前記2次オペレーティングシステム内のハードウェア例外マスキングコードを置き換えるように、仮想例外をマスキングするための手段を提供するように構成された、請求項8に記載の方法。
  36. 前記第2の仮想例外がマスキングされない、請求項9に記載の方法。
JP2007526392A 2004-08-18 2005-08-18 オペレーティングシステム Withdrawn JP2008510238A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
EP04292063 2004-08-18
PCT/EP2005/008968 WO2006018307A2 (en) 2004-08-18 2005-08-18 Operating systems

Publications (1)

Publication Number Publication Date
JP2008510238A true JP2008510238A (ja) 2008-04-03

Family

ID=35902116

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007526392A Withdrawn JP2008510238A (ja) 2004-08-18 2005-08-18 オペレーティングシステム

Country Status (7)

Country Link
US (1) US9619279B2 (ja)
EP (2) EP1805609A2 (ja)
JP (1) JP2008510238A (ja)
KR (1) KR20070083569A (ja)
CN (1) CN101052949A (ja)
CA (1) CA2577493A1 (ja)
WO (1) WO2006018307A2 (ja)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7765137B1 (en) 2005-05-05 2010-07-27 Archipelago Holdings, Inc. Method and system for maintaining an order on a selected market center
US7873544B2 (en) 2005-05-05 2011-01-18 Archipelago Holdings, Inc. Anti-internalization order modifier
WO2014196083A1 (ja) * 2013-06-07 2014-12-11 三菱電機株式会社 計算機システム及び制御方法
US9846909B2 (en) 2005-09-23 2017-12-19 Nyse Group, Inc. Directed order
US10614520B2 (en) 2005-05-05 2020-04-07 Nyse Group, Inc. Tracking liquidity order
US10885582B2 (en) 2005-05-05 2021-01-05 Nyse Group, Inc. Unpriced order auction and routing

Families Citing this family (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7962746B2 (en) * 2005-06-01 2011-06-14 Panasonic Corporation Computer system and program creating device
JP4597032B2 (ja) * 2005-10-24 2010-12-15 株式会社ソニー・コンピュータエンタテインメント コンピュータシステム、それにおける基本プログラムの起動方法、及びローダプログラム
US9176713B2 (en) * 2005-11-30 2015-11-03 International Business Machines Corporation Method, apparatus and program storage device that provides a user mode device interface
US20070168694A1 (en) * 2006-01-18 2007-07-19 Phil Maddaloni System and method for identifying and removing pestware using a secondary operating system
US7950020B2 (en) * 2006-03-16 2011-05-24 Ntt Docomo, Inc. Secure operating system switching
JP4342576B2 (ja) 2006-07-25 2009-10-14 株式会社エヌ・ティ・ティ・ドコモ 複数オペレーティングシステム切替制御装置及びコンピュータシステム
EP1892625B1 (en) 2006-08-09 2018-07-11 Red Bend Software Finer grained operating system scheduling
US8032899B2 (en) * 2006-10-26 2011-10-04 International Business Machines Corporation Providing policy-based operating system services in a hypervisor on a computing system
US8875159B1 (en) * 2006-12-12 2014-10-28 Oracle America, Inc. System for defining non-native operating environments
DE102007015507B4 (de) * 2007-03-30 2010-09-02 Advanced Micro Devices, Inc., Sunnyvale Prozessor mit einem ersten und einem zweiten Betriebsmodus und Verfahren zu seinem Betrieb
EP1997531B1 (en) * 2007-06-01 2012-12-26 Nucletron Operations B.V. Brachytherapy treatment system for effecting radiation treatment
US9454384B2 (en) * 2007-07-05 2016-09-27 Microsoft Technology Licensing, Llc Custom operating system via a web-service
KR100928866B1 (ko) * 2007-09-10 2009-11-30 주식회사 안철수연구소 가상 환경에서의 어플리케이션 실행 장치 및 방법
KR100881386B1 (ko) * 2008-01-24 2009-02-02 주식회사 파수닷컴 프로세스 분리 실행을 통한 drm 클라이언트 충돌 방지 방법
JP4970479B2 (ja) * 2009-03-03 2012-07-04 ソニー株式会社 情報処理システム
US8112620B2 (en) * 2009-03-13 2012-02-07 Oracle America, Inc. Method and system for discovery of a root file system
US9348633B2 (en) * 2009-07-20 2016-05-24 Google Technology Holdings LLC Multi-environment operating system
KR101610828B1 (ko) * 2009-09-23 2016-04-08 삼성전자주식회사 멀티코어 프로세서의 인터럽트 온/오프 관리 장치와 방법
KR101024305B1 (ko) * 2010-01-07 2011-03-29 한국과학기술연구원 상태 동기화 시스템 및 방법
US8893143B2 (en) * 2010-01-13 2014-11-18 Marvell World Trade Ltd. Hardware virtualization for media processing
CN101894045A (zh) * 2010-06-18 2010-11-24 阳坚 一种实时Linux操作系统
KR101719559B1 (ko) * 2010-06-22 2017-03-24 삼성전자주식회사 방송수신장치 및 그의 스케줄링 방법
TWI452517B (zh) * 2011-09-09 2014-09-11 Novatek Microelectronics Corp 軟體執行方法及其電子裝置
CN103294501A (zh) * 2012-03-05 2013-09-11 联想(北京)有限公司 一种数据接口配置方法及电子设备
KR101216581B1 (ko) * 2012-04-05 2012-12-31 ㈜ 엘케이컴즈 듀얼 os를 이용한 보안 시스템 및 그 방법
US9842091B2 (en) * 2013-03-15 2017-12-12 Google Llc Switching to and from native web applications
JP6081300B2 (ja) * 2013-06-18 2017-02-15 株式会社東芝 情報処理装置及びプログラム
US9934047B2 (en) 2014-03-20 2018-04-03 Intel Corporation Techniques for switching between operating systems
US10775875B2 (en) * 2014-06-11 2020-09-15 Mediatek Singapore Pte. Ltd. Devices and methods for switching and communication among multiple operating systems and application management methods thereof
CN105204931B (zh) * 2014-06-11 2019-03-15 联发科技(新加坡)私人有限公司 低功耗可穿戴设备及其多操作系统切换、通信及管理方法
US9928079B2 (en) * 2014-09-23 2018-03-27 Dialog Semiconductor (Uk) Limited Conditional processor auto boot with no boot loader when coupled with a nonvolatile memory
WO2016154807A1 (en) * 2015-03-27 2016-10-06 Intel Corporation Dynamic cache allocation
US10754931B2 (en) * 2015-06-05 2020-08-25 Apple Inc. Methods for configuring security restrictions of a data processing system
KR102513961B1 (ko) * 2015-11-11 2023-03-27 삼성전자주식회사 멀티 운영시스템을 지닌 전자장치 및 이의 동적 메모리 관리 방법
CN105353989B (zh) * 2015-11-19 2018-12-28 华为技术有限公司 存储数据访问方法及相关的控制器、设备、主机和系统
US10152351B2 (en) * 2016-02-01 2018-12-11 Microsoft Technology Licensing, Llc Proxy object system
CN105786607B (zh) * 2016-03-24 2019-11-12 宇龙计算机通信科技(深圳)有限公司 一种多系统的冻结与唤醒方法及装置
CN106371809B (zh) * 2016-08-31 2019-03-01 北京奇虎科技有限公司 线程处理器及线程处理方法
CN106778365B (zh) * 2016-12-01 2019-10-18 杭州中天微系统有限公司 实现延时压栈的装置及处理器
CN106598655B (zh) * 2016-12-05 2020-02-14 腾讯科技(深圳)有限公司 应用程序页面处理方法和装置
KR102490614B1 (ko) * 2018-03-16 2023-01-19 현대모비스 주식회사 가상 운영체제를 이용한 제어기기의 표시 제어 장치 및 방법
CN108804927B (zh) * 2018-06-15 2021-08-10 郑州信大壹密科技有限公司 基于国产自主双系统架构的可信计算机平台
CN110399174B (zh) * 2019-07-29 2023-05-02 普华基础软件股份有限公司 一种设备管理系统及方法
TWI791929B (zh) * 2019-11-28 2023-02-11 瑞昱半導體股份有限公司 通用分析裝置與方法
CN114911538B (zh) * 2022-05-17 2024-07-19 武汉深之度科技有限公司 一种运行系统的启动方法及计算设备
CN115958600A (zh) * 2022-12-28 2023-04-14 上海新时达机器人有限公司 一种机器人控制系统
US20240241779A1 (en) * 2023-01-17 2024-07-18 Vmware, Inc. Signaling host kernel crashes to dpu

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4764864A (en) 1985-04-04 1988-08-16 Nec Corporation Circuit arrangement capable of improving overhead of a control program on interrupting into a virtual machine
JP2629278B2 (ja) 1988-06-30 1997-07-09 株式会社日立製作所 仮想計算機システム
DE3831048A1 (de) 1988-09-12 1990-03-15 Nixdorf Computer Ag Betriebsprogramm fuer eine datenverarbeitungsanlage
US5179691A (en) * 1989-04-12 1993-01-12 Unisys Corporation N-byte stack-oriented CPU using a byte-selecting control for enhancing a dual-operation with an M-byte instruction word user program where M<N<2M
US5721922A (en) 1994-10-13 1998-02-24 Intel Corporation Embedding a real-time multi-tasking kernel in a non-real-time operating system
US5903752A (en) 1994-10-13 1999-05-11 Intel Corporation Method and apparatus for embedding a real-time multi-tasking kernel in a non-real-time operating system
US5995745A (en) 1996-12-23 1999-11-30 Yodaiken; Victor J. Adding real-time support to general purpose operating systems
US6075938A (en) * 1997-06-10 2000-06-13 The Board Of Trustees Of The Leland Stanford Junior University Virtual machine monitors for scalable multiprocessors
US6772419B1 (en) * 1997-09-12 2004-08-03 Hitachi, Ltd. Multi OS configuration system having an interrupt process program executes independently of operation of the multi OS
FI108478B (fi) * 1998-01-21 2002-01-31 Nokia Corp Sulautettu jõrjestelmõ
US6314501B1 (en) * 1998-07-23 2001-11-06 Unisys Corporation Computer system and method for operating multiple operating systems in different partitions of the computer system and for allowing the different partitions to communicate with one another through shared memory
JP4072271B2 (ja) 1999-02-19 2008-04-09 株式会社日立製作所 複数のオペレーティングシステムを実行する計算機
FR2793906B1 (fr) 1999-05-19 2001-08-10 Bull Sa Systeme et procede de gestion d'attributs dans un environnement oriente objet
JP3659062B2 (ja) * 1999-05-21 2005-06-15 株式会社日立製作所 計算機システム
JP2000347883A (ja) 1999-06-03 2000-12-15 Matsushita Electric Ind Co Ltd 仮想計算機装置
US6715016B1 (en) * 2000-06-01 2004-03-30 Hitachi, Ltd. Multiple operating system control method
EP1162536A1 (en) * 2000-06-09 2001-12-12 Hitachi, Ltd. Multiple operating system control method
JP2003036174A (ja) * 2001-07-25 2003-02-07 Hitachi Ltd 車載端末装置
US7191440B2 (en) * 2001-08-15 2007-03-13 Intel Corporation Tracking operating system process and thread execution and virtual machine execution in hardware or in a virtual machine monitor
JP4582682B2 (ja) * 2002-07-08 2010-11-17 株式会社日立製作所 セキュリティウォールシステム
WO2004046924A1 (en) * 2002-11-18 2004-06-03 Arm Limited Processor switching between secure and non-secure modes
GB0226874D0 (en) * 2002-11-18 2002-12-24 Advanced Risc Mach Ltd Switching between secure and non-secure processing modes
US7441240B2 (en) * 2003-01-07 2008-10-21 Matsushita Electric Industrial Co., Ltd. Process scheduling apparatus, process scheduling method, program for process scheduling, and storage medium recording a program for process scheduling
US20060112212A1 (en) * 2004-11-23 2006-05-25 Hob Gmbh & Co. Kg Virtual machine computer system for running guest operating system on a central processing means virtualized by a host system using region ID virtual memory option

Cited By (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7765137B1 (en) 2005-05-05 2010-07-27 Archipelago Holdings, Inc. Method and system for maintaining an order on a selected market center
US11615471B2 (en) 2005-05-05 2023-03-28 Nyse Group, Inc. Unpriced order auction and routing
US12073467B2 (en) 2005-05-05 2024-08-27 Nyse Group, Inc. Tracking liquidity order
US12067623B2 (en) 2005-05-05 2024-08-20 Nyse Group, Inc. Unpriced order auction and routing
US11935121B2 (en) 2005-05-05 2024-03-19 Nyse Group, Inc. Unpriced order auction and routing
US11922503B2 (en) 2005-05-05 2024-03-05 Nyse Group, Inc. Tracking liquidity order
US7873544B2 (en) 2005-05-05 2011-01-18 Archipelago Holdings, Inc. Anti-internalization order modifier
US11748812B2 (en) 2005-05-05 2023-09-05 Nyse Group, Inc. Tracking liquidity order
US11455687B2 (en) 2005-05-05 2022-09-27 Nyse Group, Inc. Unpriced order auction and routing
US10614520B2 (en) 2005-05-05 2020-04-07 Nyse Group, Inc. Tracking liquidity order
US10885582B2 (en) 2005-05-05 2021-01-05 Nyse Group, Inc. Unpriced order auction and routing
US10997659B2 (en) 2005-05-05 2021-05-04 Archipelogo Holdings, Inc. Unpriced order auction and routing
US11615472B2 (en) 2005-05-05 2023-03-28 Nyse Group, Inc. Tracking liquidity order
US11216881B2 (en) 2005-05-05 2022-01-04 Nyse Group, Inc. Tracking liquidity order
US11455688B2 (en) 2005-05-05 2022-09-27 Nyse Group, Inc. Tracking liquidity order
US9898783B2 (en) 2005-09-23 2018-02-20 Nyse Group, Inc. Directed order
US11436678B2 (en) 2005-09-23 2022-09-06 Nyse Group, Inc. Directed order
US11132746B2 (en) 2005-09-23 2021-09-28 Nyse Group, Inc. Directed order
US10540716B2 (en) 2005-09-23 2020-01-21 Nyse Group, Inc. Directed order
US10475120B2 (en) 2005-09-23 2019-11-12 Nyse Group, Inc. Directed order
US9846909B2 (en) 2005-09-23 2017-12-19 Nyse Group, Inc. Directed order
US9880888B2 (en) 2013-06-07 2018-01-30 Mitsubishi Electric Corporation Executing an operating system in a multiprocessor computer system
JP5996110B2 (ja) * 2013-06-07 2016-09-21 三菱電機株式会社 計算機システム及び制御方法
WO2014196083A1 (ja) * 2013-06-07 2014-12-11 三菱電機株式会社 計算機システム及び制御方法

Also Published As

Publication number Publication date
CA2577493A1 (en) 2006-02-23
KR20070083569A (ko) 2007-08-24
EP2296089A2 (en) 2011-03-16
EP1805609A2 (en) 2007-07-11
EP2296089A3 (en) 2012-06-27
WO2006018307A3 (en) 2006-10-19
US20080155542A1 (en) 2008-06-26
CN101052949A (zh) 2007-10-10
WO2006018307A2 (en) 2006-02-23
EP2296089B1 (en) 2019-07-03
US9619279B2 (en) 2017-04-11

Similar Documents

Publication Publication Date Title
JP2008510238A (ja) オペレーティングシステム
US7434224B2 (en) Plural operating systems having interrupts for all operating systems processed by the highest priority operating system
US8024742B2 (en) Common program for switching between operation systems is executed in context of the high priority operating system when invoked by the high priority OS
US8612992B2 (en) Operating systems
US8589940B2 (en) On-line replacement and changing of virtualization software
JP2007507779A (ja) オペレーティングシステム
Hazzah Writing Windows VxDs and Device Drivers
Kanda et al. SIGMA system: A multi-OS environment for embedded systems
EP1616257B1 (en) Operating systems
EP1673697B1 (en) Operating systems
Tan et al. How Low Can You Go? Practical cold-start performance limits in FaaS
Lackorzynski L4Linux porting optimizations
Coffing An x86 protected mode virtual machine monitor for the mit exokernel
EP1673693B1 (en) Operating systems
Mishra et al. Virtualization on ARM embedded platform codezero hypervisor-a case study
LeVasseur Device driver reuse via virtual machines
Charles An x86 protected mode virtual machine monitor for the mit exokernel
Blattmann Universität Karlsruhe (TH)

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080811

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20100122

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100122