IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

2023-547345複数のオペレーティングシステムを実行するコンピューターシステム
<>
  • -複数のオペレーティングシステムを実行するコンピューターシステム 図1
  • -複数のオペレーティングシステムを実行するコンピューターシステム 図2A
  • -複数のオペレーティングシステムを実行するコンピューターシステム 図2B
  • -複数のオペレーティングシステムを実行するコンピューターシステム 図3
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公表特許公報(A)
(11)【公表番号】
(43)【公表日】2023-11-10
(54)【発明の名称】複数のオペレーティングシステムを実行するコンピューターシステム
(51)【国際特許分類】
   G06F 9/455 20180101AFI20231102BHJP
【FI】
G06F9/455 150
【審査請求】未請求
【予備審査請求】未請求
(21)【出願番号】P 2023522353
(86)(22)【出願日】2021-10-28
(85)【翻訳文提出日】2023-04-06
(86)【国際出願番号】 FI2021050731
(87)【国際公開番号】W WO2022090631
(87)【国際公開日】2022-05-05
(31)【優先権主張番号】20204596.9
(32)【優先日】2020-10-29
(33)【優先権主張国・地域又は機関】EP
(81)【指定国・地域】
(71)【出願人】
【識別番号】523128715
【氏名又は名称】ヨーラ リミテッド
【氏名又は名称原語表記】JOLLA LTD.
【住所又は居所原語表記】Polttimonkatu 3 33210 Tampere Finland
(74)【代理人】
【識別番号】100127188
【弁理士】
【氏名又は名称】川守田 光紀
(72)【発明者】
【氏名】ハイダー フランツ-ヨセフ
(72)【発明者】
【氏名】サウッコ マルコ
(57)【要約】
第1のオペレーティングシステム(204)及び第2のオペレーティングシステム(206)はコンピューティングデバイス(202)のプロセッサによって実行される。第1のオペレーティングシステムは、第1のユーザ空間ドライバ(210)が実行される第1のユーザ空間(208)を有する。第2のオペレーティングシステム(206)は、第2のユーザ空間ドライバ(214)が実行される第2のユーザ空間(212)を有する。共通カーネルドライバ(226)は共通カーネル(224)上で実行され、どのユーザ空間ドライバが共通カーネルドライバに関数呼び出しを行ったかの判定に基づいて、当該関数呼び出しを対応するハードウェア固有の呼び出しに変換する。共通カーネルドライバは、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバがコンピューティングデバイスのコンピュータハードウェア(228)に同時にアクセスすることを可能にする。
【選択図】図2A
【特許請求の範囲】
【請求項1】
コンピューティングデバイスであって、
コンピュータ実行可能な命令が格納されたメモリと;
前記メモリに組み合わされるプロセッサと;
を備え、前記コンピュータ実行可能な命令は、前記プロセッサで実行されると、前記プロセッサに、
・ 第1のユーザ空間を有する第1のオペレーティングシステムと、第2のユーザ空間を有する第2のオペレーティングシステムとを実行すること、ただし前記第1のオペレーティングシステムと前記第2のオペレーティングシステムとは、両者の間で共有される共通カーネルを有する、前記実行することと;
・ 前記第1のユーザ空間で第1のユーザ空間ドライバを実行し、前記第2のユーザ空間で第2のユーザ空間ドライバを実行することと;
・ 前記共通カーネルで共通カーネルドライバを実行することと;
・ 前記第1のユーザ空間ドライバと前記第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに対して所定の関数呼び出しを行ったかを判定することと;
・ 前記第1のユーザ空間ドライバと前記第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに対して所定の関数呼び出しを行ったかの判定に基づいて、前記所定の関数呼び出しを、対応するハードウェア固有の呼び出しに変換し、それによって、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバのうちの前記所定の関数呼び出しを行った方が、前記コンピューティングデバイスのコンピュータハードウェアにアクセスすることを可能にすることと;
を遂行させるように構成され、前記共通カーネルドライバは、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバが前記コンピュータハードウェアに同時にアクセスすることを可能にする、コンピューティングデバイス。
【請求項2】
前記第1のオペレーティングシステム及び前記第2のオペレーティングシステムは既存のオペレーティングシステムであり、
前記共通カーネルドライバは、第1のカーネルドライバの機能と第2のカーネルドライバの機能とをマージすることによって生成され、
前記第1のカーネルドライバ及び前記第2のカーネルドライバは、それぞれ、前記第1のオペレーティングシステム及び前記第2のオペレーティングシステムにおいて使用されることが知られている既存のカーネルドライバである、
請求項1に記載のコンピューティングデバイス。
【請求項3】
前記共通カーネルドライバは、前記第2のカーネルドライバの機能を含むように前記第1のカーネルドライバを修正することによって生成される、請求項2に記載のコンピューティングデバイス。
【請求項4】
前記第1のカーネルドライバの機能は、前記第1のカーネルドライバ及び前記第2のカーネルドライバにおいて行われる関数呼び出しにおいて使用されることが知られている呼び出し規約のレベルで、前記第2のカーネルドライバの機能とマージされる、請求項2又は3に記載のコンピューティングデバイス。
【請求項5】
前記コンピュータ実行可能な命令は、実行されると、前記プロセッサに、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに所与の関数呼び出しを行ったかを決定するために、前記共通カーネルドライバのハンドラを採用させ、ただし前記決定は、第1のパラメータの属性及び第2のパラメータの属性の違いに基づいてなされ、また前記決定は、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバが同じパスを介して前記共通カーネルドライバにアクセスする際になされ、前記第1のパラメータ及び前記第2のパラメータは、それぞれ、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバによって前記共通カーネルドライバに渡される、請求項1から4のいずれかに記載のコンピューティングデバイス。
【請求項6】
前記第1のパラメータの属性及び前記第2のパラメータの属性は、データサイズ、データ型、データ順序の少なくとも1つを有する、請求項5に記載のコンピューティングデバイス。
【請求項7】
前記コンピュータ実行可能な命令は、実行されると、前記プロセッサに、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに所与の関数呼び出しを行ったかを決定するために、前記共通カーネルドライバのハンドラを採用させ、ただし前記決定は、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバが、それぞれ第1のパス及び第2のパスを介して前記共通カーネルドライバにアクセスするときに、パスに設けられた少なくとも1つのシンボリックリンク又はバインドマウントに基づいて行われる、請求項1から6のいずれかに記載のコンピューティングデバイス。
【請求項8】
前記コンピュータ実行可能な命令は、実行されると、前記プロセッサに、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに所与の関数呼び出しを行ったかを決定するために、前記共通カーネルドライバのハンドラを採用させ、ただし前記決定は、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバがそれぞれ採用する第1のドライバ構成と第2のドライバ構成の間の差に基づいて行われる、請求項1から7のいずれかに記載のコンピューティングデバイス。
【請求項9】
第1のユーザ空間を有する第1のオペレーティングシステムと、第2のユーザ空間を有する第2のオペレーティングシステムとを、コンピューティングデバイスで実行すること、ただし前記第1のオペレーティングシステムと前記第2のオペレーティングシステムとは、両者の間で共有される共通カーネルを有する、前記実行することと;
前記第1のユーザ空間で第1のユーザ空間ドライバを実行し、前記第2のユーザ空間で第2のユーザ空間ドライバを実行することと;
前記共通カーネルで共通カーネルドライバを実行することと;
前記第1のユーザ空間ドライバと前記第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに対して所定の関数呼び出しを行ったかを判定することと;
前記第1のユーザ空間ドライバと前記第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに対して所定の関数呼び出しを行ったかの判定に基づいて、前記所定の関数呼び出しを、対応するハードウェア固有の呼び出しに変換し、それによって、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバのうちの前記所定の関数呼び出しを行った方が、前記コンピューティングデバイスのコンピュータハードウェアにアクセスすることを可能にすることと;
を含み、前記共通カーネルドライバは、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバが前記コンピュータハードウェアに同時にアクセスすることを可能にする、方法。
【請求項10】
前記第1のオペレーティングシステム及び前記第2のオペレーティングシステムは既存のオペレーティングシステムであり、
前記共通カーネルドライバは、第1のカーネルドライバの機能と第2のカーネルドライバの機能とをマージすることによって生成され、
前記第1のカーネルドライバ及び前記第2のカーネルドライバは、それぞれ、前記第1のオペレーティングシステム及び前記第2のオペレーティングシステムにおいて使用されることが知られている既存のカーネルドライバである、
請求項9に記載の方法。
【請求項11】
前記共通カーネルドライバは、前記第1のカーネルドライバの機能を含むように前記第1のカーネルドライバを修正することによって生成される、請求項10に記載の方法。
【請求項12】
前記第1のカーネルドライバの機能は、前記第1のカーネルドライバ及び前記第2のカーネルドライバにおいて行われる関数呼び出しにおいて使用されることが知られている呼び出し規約のレベルで、前記第2のカーネルドライバの機能とマージされる、請求項10又は11に記載の方法。
【請求項13】
前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに所与の関数呼び出しを行ったかを決定するために、前記共通カーネルドライバのハンドラを採用することを含み、ただし前記決定は、第1のパラメータの属性及び第2のパラメータの属性の違いに基づいてなされ、また前記決定は、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバが同じパスを介して前記共通カーネルドライバにアクセスする際になされ、前記第1のパラメータ及び前記第2のパラメータは、それぞれ、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバによって前記共通カーネルドライバに渡される、請求項9から12のいずれかに記載の方法。
【請求項14】
前記第1のパラメータの属性及び前記第2のパラメータの属性は、データサイズ、データ型、データ順序の少なくとも1つを有する、請求項13に記載の方法。
【請求項15】
前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに所与の関数呼び出しを行ったかを決定するために、前記共通カーネルドライバのハンドラを採用することを含み、ただし前記決定は、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバが、それぞれ第1のパス及び第2のパスを介して前記共通カーネルドライバにアクセスするときに、パスに設けられた少なくとも1つのシンボリックリンク又はバインドマウントに基づいて行われる、請求項9から14のいずれかに記載の方法。
【請求項16】
前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに所与の関数呼び出しを行ったかを決定するために、前記共通カーネルドライバのハンドラを採用することを含み、ただし前記決定は、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバがそれぞれ採用する第1のドライバ構成と第2のドライバ構成の間の差に基づいて行われる、請求項9から15のいずれかに記載の方法。
【発明の詳細な説明】
【技術分野】
【0001】
本明細書の開示事項は、複数のオペレーティングシステムを実行するコンピューティングデバイスに関連する。また本明細書の開示事項は、同一のコンピューティングデバイス上で複数のオペレーティングシステムを同時実行することを容易にする方法にも関する。
【背景】
【0002】
オペレーティングシステムは、コンピュータリソースの制御と管理を担当するシステムソフトウェアである。一般的に、オペレーティングシステムは、アプリケーションソフトウェアと、コンピューティングデバイスのコンピュータハードウェアとの間の通信を可能にする。具体的には、オペレーティングシステムは、アプリケーションソフトウェアがコンピュータハードウェアにアクセスして、ディスクアクセス、メモリ管理、タスクスケジューリング、ユーザとのやり取りなどの、コンピューティングデバイスの基本システム操作を実行することを可能にする。またオペレーティングシステムは、ネットワーク接続を提供する役割を担っている。
【0003】
注目すべきは、どのオペレーティングシステムにも特有の特徴と欠点があることである。あるオペレーティングシステムは、豊富な機能を持ち、フル機能であるかもしれないし、他のオペレーティングシステムは、高速な処理が可能であるかもしれない。また、あるオペレーティングシステムで実行するために書かれた様々なアプリケーションが、他のオペレーティングシステムではサポートされていない場合がある。このような機能の多様性のため、ユーザは同じコンピュータハードウェア上で2つ以上のオペレーティングシステムの機能にアクセスしたいと思うかもしれない。
【0004】
図1(先行技術)は、コンピューティングデバイス102上で2つのオペレーティングシステム、すなわち第1のオペレーティングシステム104及び第2のオペレーティングシステム106を実行する従来の手法を示すブロック図である。ここで第1のオペレーティングシステム104は第1のユーザ空間108と第1のカーネル116を有し、第1のユーザ空間108は第1のユーザ空間ドライバ110を有し、第1のカーネル116は第1のカーネルドライバ118を有する。同様に、第2のオペレーティングシステム106は第2のユーザ空間112と第2のカーネル120を有し、第2のユーザ空間112は第2のユーザ空間ドライバ114を有し、第2のカーネル120は第2のカーネルドライバ122を有している。第1のカーネルドライバ118は、第1のユーザ空間ドライバ110に、コンピューティングデバイス102に関連付けられたコンピュータハードウェア124へのアクセスを提供するように構成される。第2のカーネルドライバ122は、第2のユーザ空間ドライバ114に、コンピューティングデバイス102に関連付けられたコンピュータハードウェア124へのアクセスを提供するように構成される。注目すべきは、第1のユーザ空間108や第2のユーザ空間112などのユーザ空間は、それぞれ、第1のカーネル116や第2のカーネル120と通信することである。ユーザ空間ドライバ及びカーネル空間ドライバは、特定のオペレーティングシステムに固有のものであり、他のオペレーティングシステムのドライバと互換性がないことが理解されよう。例えば、第1のカーネルドライバ118は第2のユーザ空間ドライバ114と互換性がなく、第2のカーネルドライバ122は第1のユーザ空間ドライバ110と互換性がない。
【0005】
これまで、同一のコンピュータハードウェア上で2つ以上のオペレーティングシステムの機能にアクセスするために、デュアルブート、仮想マシン、エミュレータ、コンテナなどの技術が使用されてきた。しかし、このような従来の技術は、ハードウェア機能を複数のオペレーティングシステムに同時にアクセスさせるものの、ハードウェアアクセラレーションをサポートするものではない。更に、デュアルブートのような技術は、1つのコンピュータハードウェア上で2つのオペレーティングシステムが動作することを可能とするが、両方のオペレーティングシステムへの同時アクセスは提供しない。ホスト仮想マシンを採用するコンピューティングデバイスでは、ゲストオペレーティングシステムがホストオペレーティングシステム内の仮想マシン上で動作し、それによって、コンピュータハードウェアから両方のオペレーティングシステムへの同時アクセスが可能になる。しかし、ゲストオペレーティングシステムのためのハードウェアリソースの仮想化により、ホストされた仮想マシンを使用するコンピューティングデバイスの性能は著しく低下する。複数のオペレーティングシステムにコンピュータハードウェアへのアクセスを提供する別の方法には、ラッパー(wrapper)や、ドライバ間のプロセス間通信(IPC)を使用することがある。しかし、多くのユーザ空間ドライバがバイナリ形式でしか利用できず、また変更できないため、上記の方法は複雑さを著しく増やし、性能がしばしば大幅に低下する。
【0006】
このような議論に鑑みると、同じコンピュータハードウェア上の2つ以上のオペレーティングシステムの機能にアクセスする従来の方法に関連する前述の欠点を克服する必要性が存在するのである。
【摘要】
【0007】
本願の開示事項は、複数のオペレーティングシステムの同時実行を容易にするコンピューティングデバイスを提供しようとするものである。本願の開示事項はまた、同一のコンピューティングデバイス上での複数のオペレーティングシステムの同時実行を容易にする方法を提供しようとするものである。本願の開示事項は、同一のコンピューティングデバイス上で複数のオペレーティングシステムを使用する従来の解決策における、ドライバの非互換性、制限されたハードウェアアクセス、著しい性能オーバーヘッドという既存の問題に対する解決策を提供しようとするものである。本開示の目的は、従来技術で直面する問題を少なくとも部分的に克服する解決策を提供することである。
【0008】
第1の捉え方において、本願に開示されるものの実施形態は、次のようなコンピューティングデバイスを提供する。このコンピューティングデバイスは、
コンピュータ実行可能な命令が格納されたメモリと;
前記メモリに組み合わされるプロセッサと;
を備え、前記コンピュータ実行可能な命令は、前記プロセッサで実行されると、前記プロセッサに、
・ 第1のユーザ空間を有する第1のオペレーティングシステムと、第2のユーザ空間を有する第2のオペレーティングシステムとを実行すること、ただし前記第1のオペレーティングシステムと前記第2のオペレーティングシステムとは、両者の間で共有される共通カーネルを有する、前記実行することと;
・ 前記第1のユーザ空間で第1のユーザ空間ドライバを実行し、前記第2のユーザ空間で第2のユーザ空間ドライバを実行することと;
・ 前記共通カーネルで共通カーネルドライバを実行することと;
・ 前記第1のユーザ空間ドライバと前記第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに対して所定の関数呼び出しを行ったかを判定することと;
・ 前記第1のユーザ空間ドライバと前記第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに対して所定の関数呼び出しを行ったかの判定に基づいて、前記所定の関数呼び出しを、対応するハードウェア固有の呼び出しに変換し、それによって、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバのうちの前記所定の関数呼び出しを行った方が、前記コンピューティングデバイスのコンピュータハードウェアにアクセスすることを可能にすることと;
を遂行させるように構成され、
前記共通カーネルドライバは、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバが前記コンピュータハードウェアに同時にアクセスすることを可能にする。
【0009】
第2の捉え方によれば、本願に開示されるものの実施形態は、次のような方法を提供する。この方法は、
・ 第1のユーザ空間を有する第1のオペレーティングシステムと、第2のユーザ空間を有する第2のオペレーティングシステムとを、コンピューティングデバイスで実行すること、ただし前記第1のオペレーティングシステムと前記第2のオペレーティングシステムとは、両者の間で共有される共通カーネルを有する、前記実行することと;
・ 前記第1のユーザ空間で第1のユーザ空間ドライバを実行し、前記第2のユーザ空間で第2のユーザ空間ドライバを実行することと;
・ 前記共通カーネルで共通カーネルドライバを実行することと;
・ 前記第1のユーザ空間ドライバと前記第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに対して所定の関数呼び出しを行ったかを判定することと;
・ 前記第1のユーザ空間ドライバと前記第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに対して所定の関数呼び出しを行ったかの判定に基づいて、前記所定の関数呼び出しを、対応するハードウェア固有の呼び出しに変換し、それによって、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバのうちの前記所定の関数呼び出しを行った方が、前記コンピューティングデバイスのコンピュータハードウェアにアクセスすることを可能にすることと;
を含み、
前記共通カーネルドライバは、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバが前記コンピュータハードウェアに同時にアクセスすることを可能にする。
【0010】
本願に開示されるものの実施形態は、先行技術における前述の問題を実質的に除去するか、又は少なくとも部分的に対処し、同一のコンピューティングデバイス上での複数のオペレーティングシステムの同時実行を可能にし、かなりの性能ペナルティなしに、前述のオペレーティングシステムの異なるユーザ空間ドライバへのコンピューティングデバイスのコンピュータハードウェアの同時アクセスを容易にする。
【0011】
本願に開示されるものの更なる側面や利点、特徴及び目的は、添付の特許請求の範囲と共に解釈される、添付図面及び例示的実施形態の詳細説明によって明らかにされよう。
【0012】
当然ながら、本願に開示されるものの特徴は、添付の特許請求の範囲に定義されるように、本願の開示の範囲から逸脱することなく様々に組み合わせることができる。
【図面の簡単な説明】
【0013】
次に、本開示の実施形態を、一例として次の図面を参照しながら説明する。
図1】コンピューティングデバイス上で2つのオペレーティングシステムを実行する従来の手法を示すブロック図である。
図2A】コンピューティングデバイスを示すブロック図である。
図2B】本開示の実施形態による、第1のカーネルドライバの機能と第2のカーネルドライバの機能とのマージを示すブロック図である。
図3】本開示の一実施形態による、同一のコンピューティングデバイス上での複数のオペレーティングシステムの同時実行を容易にする方法のステップを示すフローチャートである。
【実施形態の詳細説明】
【0014】
前述した概要と以下の例示的実施形態の詳細説明は、添付の図面と合わせて読むことでより理解されることになる。本願に開示されるものを説明する目的で、本願に開示されるもの(以下、本開示という)の例示的構成を図面に示す。ただし、本開示はここで記載される特定の方法及び手段に限定されるものではない。また、当業者であれば、図面は正確な縮尺率で描かれていないことも理解されよう。同じ構成要素は可能な限り同一番号で示すようにした。
【0015】
添付の図面において、下線付きの番号は、その番号が書かれている場所のアイテム又はその番号に隣接するアイテムを表わすのに使用される。下線無しの番号は、その番号を繋ぐ線によって特定されるアイテムに関連付けられる。番号に下線が無く矢印を伴って書かれている場合、その番号は矢印が示す汎用アイテムを特定するのに使用される。
【0016】
以下、本願の開示事項の例示的実施形態とそれを実装し得る方法を詳述していく。本開示を実行する幾つかの方法が説明されているが、本開示を実行又は遂行する他の実施形態も可能であることは、当業者には理解されよう。
【0017】
第1の捉え方において、本願に開示されるものの実施形態は、次のようなコンピューティングデバイスを提供する。このコンピューティングデバイスは、
コンピュータ実行可能な命令が格納されたメモリと;
前記メモリに組み合わされるプロセッサと;
を備え、前記コンピュータ実行可能な命令は、前記プロセッサで実行されると、前記プロセッサに、
・ 第1のユーザ空間を有する第1のオペレーティングシステムと、第2のユーザ空間を有する第2のオペレーティングシステムとを実行すること、ただし前記第1のオペレーティングシステムと前記第2のオペレーティングシステムとは、両者の間で共有される共通カーネルを有する、前記実行することと;
・ 前記第1のユーザ空間で第1のユーザ空間ドライバを実行し、前記第2のユーザ空間で第2のユーザ空間ドライバを実行することと;
・ 前記共通カーネルで共通カーネルドライバを実行することと;
・ 前記第1のユーザ空間ドライバと前記第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに対して所定の関数呼び出しを行ったかを判定することと;
・ 前記第1のユーザ空間ドライバと前記第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに対して所定の関数呼び出しを行ったかの判定に基づいて、前記所定の関数呼び出しを、対応するハードウェア固有の呼び出しに変換し、それによって、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバのうちの前記所定の関数呼び出しを行った方が、前記コンピューティングデバイスのコンピュータハードウェアにアクセスすることを可能にすることと;
を遂行させるように構成され、
前記共通カーネルドライバは、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバが前記コンピュータハードウェアに同時にアクセスすることを可能にする。
【0018】
第2の捉え方によれば、本願に開示されるものの実施形態は、次のような方法を提供する。この方法は、
・ 第1のユーザ空間を有する第1のオペレーティングシステムと、第2のユーザ空間を有する第2のオペレーティングシステムとを、コンピューティングデバイスで実行すること、ただし前記第1のオペレーティングシステムと前記第2のオペレーティングシステムとは、両者の間で共有される共通カーネルを有する、前記実行することと;
・ 前記第1のユーザ空間で第1のユーザ空間ドライバを実行し、前記第2のユーザ空間で第2のユーザ空間ドライバを実行することと;
・ 前記共通カーネルで共通カーネルドライバを実行することと;
・ 前記第1のユーザ空間ドライバと前記第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに対して所定の関数呼び出しを行ったかを判定することと;
・ 前記第1のユーザ空間ドライバと前記第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに対して所定の関数呼び出しを行ったかの判定に基づいて、前記所定の関数呼び出しを、対応するハードウェア固有の呼び出しに変換し、それによって、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバのうちの前記所定の関数呼び出しを行った方が、前記コンピューティングデバイスのコンピュータハードウェアにアクセスすることを可能にすることと;
を含み、
前記共通カーネルドライバは、前記第1のユーザ空間ドライバ及び前記第2のユーザ空間ドライバが前記コンピュータハードウェアに同時にアクセスすることを可能にする。
【0019】
第1のユーザ空間ドライバによってなされる関数呼び出しと第2のユーザ空間ドライバによってなされる関数呼び出しとを判断し変換することは、共通カーネルドライバが、第1のユーザ空間ドライバと第2のユーザ空間ドライバとにコンピュータハードウェアへの同時アクセスを提供することを可能にする。このようにして、共通カーネルドライバは、前述のコンピューティング装置が複数のオペレーティングシステム(第1のオペレーティングシステム及び第2のオペレーティングシステムなど)を同時に(すなわち、並行して)実行することを可能にする。本開示の実施形態に従って、ユーザは、第1のオペレーティングシステムと第2のオペレーティングシステムとの間をオンザフライで切り替えることができる。更に、共通カーネルドライバは、第1のオペレーティングシステム及び第2のオペレーティングシステムに、さほどの性能ペナルティなしに、コンピュータハードウェアへのアクセスを提供する。更に、共通カーネルドライバは、コンピュータハードウェアの仮想化を必要とせず、既存のコンピュータハードウェアドライバの上にラッパーを採用する必要なく、コンピュータハードウェアへのアクセスを提供する。
【0020】
更に、共通カーネルドライバは、所定のオペレーティングシステムの所定の機能にハードウェアアクセラレータを用いたアクセスを提供し、それにより所定の機能をコンピュータハードウェア上に実装する。この所定の機能は、ハードウェア固有の機能であり得る。このようなハードウェア固有の機能の例としては、グラフィックス処理、オーディオ処理、通信の促進、入力の取得、出力の提供などがあるが、これらに限定されるものではない。このような、ハードウェアアクセラレータを用いたアクセスを提供することにより、レイテンシが減少し、コンピューティングデバイスの性能が向上する。
【0021】
実装形態によっては、第1のオペレーティングシステム及び第2のオペレーティングシステムは、既存のオペレーティングシステムである。そのような実装形態では、共通カーネルドライバは、第1のカーネルドライバの機能と第2のカーネルドライバの機能とをマージ(結合)することによって生成される。ここで、第1のカーネルドライバ及び第2のカーネルドライバは、それぞれ、第1のオペレーティングシステム及び第2のオペレーティングシステムにおいて使用されることが知られている、既存のカーネルドライバである。言い換えれば、第1のカーネルドライバ及び第2のカーネルドライバは、本開示によって提供される解決策なしに、第1のオペレーティングシステム及び第2のオペレーティングシステムで使用されることが知られている既存のカーネルドライバである。第1のカーネルドライバと第2のカーネルドライバとは、異なるドライバアプリケーションプログラミングインターフェース(API)を有する。従って、共通カーネルドライバは、第1カーネルドライバ及び第2カーネルドライバそれぞれのドライバAPIと互換性のあるドライバAPIとして実装される。
【0022】
本開示を通じて、用語「共通カーネル」は、第1のオペレーティングシステムと第2のオペレーティングシステムの間で共有されるカーネルを表し、用語「共通カーネルドライバ」は、共通カーネル上で実行され、第1のユーザ空間ドライバと第2のユーザ空間ドライバの間で共有されてハードウェアアクセス機能を提供するカーネルドライバを指す。
【0023】
本開示の実施形態に従って、コンピューティングデバイスのシステムメモリは、第1のユーザ空間と、第2のユーザ空間と、共通カーネルとの間で分割される。本開示によって提供される解決策がなければ、システムメモリは、第1のオペレーティングシステムと第2のオペレーティングシステムとの間で分割されなければならず、第1のユーザ空間と第2のユーザ空間とは別に、第1のオペレーティングシステムのカーネルと、それとは異なる第2のオペレーティングシステムのために、システムメモリの別々の部分がそれぞれ利用されなければならないであろう。
【0024】
共通カーネルドライバが第1のユーザ空間ドライバ及び第2のユーザ空間ドライバの両方と互換性があるように、第1のカーネルドライバの機能と第2のカーネルドライバの機能とが、共通カーネルドライバを生成するように効果的にマージされる。実施形態によっては、第1のカーネルドライバの機能は、第1のカーネルドライバ及び第2のカーネルドライバにおいて行われる関数呼び出しにおいて使用されることが知られている呼び出し規約のレベルで、第2のカーネルドライバの機能とマージされる。「呼び出し規約のレベルで機能をマージする」とは、共通カーネルドライバが、第1のユーザ空間ドライバによって行われる関数呼び出しと第2のユーザ空間ドライバによって行われる関数呼び出しとを理解し区別して、それに応じて第1のユーザ空間ドライバ及び第2のユーザ空間ドライバにサービスを提供するように構成されていることを意味する。
【0025】
ハードウェアアクセスを提供するために変換される必要がある関数呼び出しとは別に、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバは、コンピュータハードウェアに即時の影響を与えない他の関数呼び出しをカーネルドライバに対して行うことができることが理解されるであろう。当該他の関数呼び出しは、例えば、共通カーネルのパラメータを設定するために行われてもよく、その後に共通カーネルドライバに行われる更なる関数呼び出しで使用されてもよい。
【0026】
更に、実施形態によっては、共通カーネルドライバは、第2のカーネルドライバの機能を含むように第1のカーネルドライバを修正することによって生成される。別のカーネルドライバの機能を含むように既存の(従来から知られている)カーネルドライバを修正することは、共通カーネルドライバをゼロから生成することと比較して、共通カーネルドライバを生成する容易な方法であることが理解されよう。
【0027】
本開示の実施形態に従うと、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバは、修正されることを要求されない。第1のユーザ空間ドライバ及び第2のユーザ空間ドライバは、本願の解決策がなければ第1のカーネルドライバ及び第2のカーネルドライバに対して行っていたであろう従来方法と同様の方法で、共通カーネルドライバに対して関数呼び出しを行う。
【0028】
第1のユーザ空間ドライバ及び第2のユーザ空間ドライバは、典型的にはバイナリ形式で利用可能であり、修正できないことが理解されよう。しかしながら、カーネルドライバによっては、当該カーネルドライバのソフトウェアコードにアクセスできる開発者によって修正され得る。オープンソースのオペレーティングシステムでは、カーネルドライバのソフトウェアコードも自由に利用できるため、誰でも修正することができる。一方、クローズドソースのオペレーティングシステムでは、カーネルドライバのソフトウェアコードは自由に利用できないため、ソフトウェアコードにアクセスして修正することを許可されたソフトウェア開発者のみが修正可能である。
【0029】
本開示を通じて「コンピューティングデバイス」という用語は、データを処理することができる電子デバイスを指す。コンピューティングデバイスは、携帯可能であってもよいし、携帯可能でなくてもよい。コンピューティングデバイスの例としては、デスクトップコンピュータ、ラップトップコンピュータ、タブレットコンピュータ、ファブレットコンピュータ、パーソナルデジタルアシスタント、スマートフォン、及びスマートデバイス(例えば、スマートウォッチ、スマートロック、スマートテレビなど)が挙げられるが、これらに限定されるものではない。
【0030】
コンピューティングデバイスは、第1のオペレーティングシステム及び第2のオペレーティングシステムを記憶する少なくとも1つの記憶媒体を含んでいてもよい。当該記憶媒体は不揮発性記憶媒体であってもよい。実施形態によっては、少なくとも1つの記憶媒体は、コンピューティングデバイスのハードディスクドライブとして実装される。いくつかの実施形態では、ハードディスクドライブは、コンピューティングデバイスの内部コンポーネントとして装備され、一方、他の実施形態では、ハードディスクドライブは、コンピューティングデバイスの外部コンポーネントとして装備される。
【0031】
本開示を通じて「コンピュータハードウェア」という用語は、コンピューティングデバイスのハードウェアコンポーネントを指す。コンピュータハードウェアの例としては、グラフィックカード、サウンドカード、スピーカー、モニタ、入力装置(例えば、マウス、キーボード、スタイラスなど)、コンピュータデータストレージ(例えば、ディスクドライブ、ユニバーサルシリアルバス(USB)ドライブ、メモリカードなど)、電源装置、プリンタなどのうち少なくとも1つがあるが、それだけに限定されるものではない。
【0032】
本開示を通じて「オペレーティングシステム」という用語は、ユーザがコンピューティングデバイス上でアプリケーションを実行することを可能にするソフトウェアを指す。オペレーティングシステムによっては、ファイル管理、デバイス管理、メモリ管理、プロセス管理などのタスクを実行することによって、コンピューティングデバイス上のハードウェア、ソフトウェア、及びアプリケーションを管理する。オペレーティングシステムによっては、ユーザとコンピュータハードウェアの間のインタフェースとして機能する。
【0033】
本開示の実施形態に従うと、第1のオペレーティングシステム及び第2のオペレーティングシステムは、完全なPOSIX準拠又はほぼPOSIX準拠のいずれかであってもよい。ここでPOSIXは、Portable Operating System Interface(POSIX)の略である。そのようなオペレーティングシステムのいくつかの例は、Microsoft Windows(登録商標)オペレーティングシステム、Apple Macintosh(登録商標)オペレーティングシステム(macOS(登録商標))、Linux(登録商標)オペレーティングシステム、Linux(登録商標)ベースのオペレーティングシステム、Android(登録商標)オペレーティングシステム、及びApple iOS(登録商標)オペレーティングシステムである。
【0034】
本明細書を通じて、「第1のオペレーティングシステム」及び「第2のオペレーティングシステム」という用語は、コンピューティングデバイス上で実行される別々のオペレーティングシステムを区別するために使用される。実装形態によっては、これら別々のオペレーティングシステムは、アプリケーションバイナリインターフェース(ABI)非互換である。実施態様によっては、上記別々のオペレーティングシステムは、特定のオペレーティングシステムの異なるダウンストリームバージョンを含み得る。たとえば、第1のオペレーティングシステムは、カーネルドライバAが実行される第1のダウンストリームLinux(登録商標)カーネルを備えるものであってもよく、第2のオペレーティングシステムは、カーネルドライバBが実行される第2のダウンストリームLinux(登録商標)カーネルを備えるものであってもよい。この場合、共通カーネルは、第1ダウンストリームLinux(登録商標)カーネル又は第2ダウンストリームLinux(登録商標)カーネルとして実装することができ、共通カーネルドライバは、カーネルドライバAをカーネルドライバBにマージすることで生成される。
【0035】
別の例として、第1のオペレーティングシステムは、Linux(登録商標)ベースのオペレーティングシステム(例えば、Sailfishオペレーティングシステムなど)であってもよく、一方、第2のオペレーティングシステムは、Android(登録商標)オペレーティングシステムであってもよい。このような例では、共通カーネルによって、同じコンピューティングデバイス上でAndroid(登録商標)アプリケーションとSailfishアプリケーションの両方を使用することが可能になる。このように、コンピューティングデバイスは、複数のオペレーティングシステム上のソフトウェアアプリケーションのプロトタイピング及びデモンストレーションのために有益に採用され得るものである。
【0036】
実施形態によっては、前記コンピュータ実行可能な命令は、実行されると、前記プロセッサに、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに所与の関数呼び出しを行ったかを決定するために、前記共通カーネルドライバのハンドラを採用させる。ここで前記決定は、第1のパラメータの属性及び第2のパラメータの属性の違いに基づいてなされる。また前記決定は、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバが同じパスを介して共通カーネルドライバにアクセスする際になされる。前記第1のパラメータ及び前記第2のパラメータは、それぞれ、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバによって共通カーネルドライバに渡される。
【0037】
ここで「ハンドラ」とは、あるタスクに特化したソフトウェアルーチンを意味する。共通カーネルのハンドラは、例えば、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバからそれぞれ関数呼び出しを受けたときに、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバから渡されるパラメータを選択するイベントハンドラであってもよい。このような関数呼び出しは、第1のユーザ空間及び第2のユーザ空間で実行されるアプリケーションが、共通カーネルドライバにサービスを要求するインタフェースとして機能する。
【0038】
第1のユーザ空間ドライバと第2のユーザ空間ドライバとが同じパスを介して共通カーネルドライバにアクセスする場合、関数呼び出しは、典型的には、デバイス管理サービスに関係する。このようなデバイス管理サービスは、例えば、ハードウェアリソースの要求、特定の方法でのハードウェアリソースの操作などのハードウェア管理サービスを包含する。実施形態によっては、第1のユーザ空間ドライバと第2のユーザ空間ドライバの両方が、所定のユーザ空間パス(/dev/driverパス)を介して、共通カーネルドライバにアクセスする。
【0039】
第1のユーザ空間ドライバから共通カーネルドライバに渡される第1のパラメータの属性と、第2のユーザ空間ドライバから共通カーネルドライバに渡される第2のパラメータの属性は異なることが多い。このため、ハンドラが、第1のユーザ空間ドライバからの関数呼び出しと第2のユーザ空間ドライバからの関数呼び出しを容易に区別できることは理解できるだろう。
【0040】
実施形態によっては、第1のパラメータの属性と第2のパラメータの属性は、データサイズ、データ型、データ順序の少なくとも1つを有する。
【0041】
パラメータのデータサイズは、例えば、4ビット、8ビット、16ビット、32ビット、64ビット、又はそれに類するものとすることができる。一例として、第1のパラメータのデータサイズは16ビットであり、一方、第2のパラメータのデータサイズは32ビットであることができる。この場合、第1のパラメータのデータサイズと第2のパラメータのデータサイズの違いにより、ハンドラは、第1のユーザ空間ドライバと第2のユーザ空間ドライバのどちらが関数呼び出しを行ったかを判断することができる。
【0042】
同様に、ハンドラは、データ型の違いにより、第1のユーザ空間ドライバと第2のユーザ空間ドライバのどちらが関数呼び出しを行ったかを判断することができる。パラメータのデータ型は、基本(basic)データ型又は複合(composite)データ型のいずれかであることができる。基本データ型の例としては、整数データ型、浮動小数点データ型、文字データ型が挙げられる。が、これらに限定されるものではない。複合データ型の例としては、ポインタデータ型、配列(array)データ型、構造体(structure)データ型、共用体(union)データ型、関数(function)データ型が挙げられるが、これらに限定されない。
【0043】
更に、第1のユーザ空間ドライバによって第1のパラメータが渡される順序は、第2のユーザ空間ドライバによって第2のパラメータが渡される順序と異なっていてもよい。この場合、ハンドラは、データ順序の違いにより、第1のユーザ空間ドライバと第2のユーザ空間ドライバのどちらが関数呼び出しを行ったかを判断することができる。例えば、第1のユーザ空間ドライバは、共通カーネルドライバにパラメータA,BをA,Bの順で渡すことができる。しかし、第2のユーザ空間ドライバも同じパラメータA,Bを共通カーネルドライバに渡すかもしれないが、その順番はB,Aである。この場合、第1のユーザ空間ドライバが渡すパラメータのデータ順と、第2のユーザ空間ドライバが渡すパラメータのデータ順は異なる。この場合、システムスタックからパラメータA,Bをどのようにポップするかは、ハンドラによるパラメータの選択次第である。ハンドラが、第1のユーザ空間ドライバから渡されたパラメータA及びBを選択すると、当該パラメータは、システムスタックからA,Bの順にポップされる。(すなわちA,Bの順にシステムスタックから取り出される。)そうでない場合、ハンドラが第2のユーザ空間ドライバから渡されたパラメータA,Bを選択すると、当該パラメータはシステムスタックからB,Aの順でポップされる。(すなわちB,Aの順にシステムスタックから取り出される。)
【0044】
実施形態によっては、前記コンピュータ実行可能な命令は、実行されると、前記プロセッサに、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに所与の関数呼び出しを行ったかを決定するために、前記共通カーネルドライバのハンドラを採用させるが、この決定は、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバが、それぞれ第1のパス及び第2のパスを介して共通カーネルドライバにアクセスするときに、パスに設けられた少なくとも1つのシンボリックリンク又はバインドマウント(bind mount)に基づいて行われる。
【0045】
第1のパスと第2のパスが異なる場合、ハンドラは、パスの中の所定のシンボリックリンク又は所定のバインドマウントにより、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバのどちらが関数呼び出しを行ったかを判断することができる。すなわち、第1のユーザ空間ドライバと第2のユーザ空間ドライバは、異なるパスを通じて共通カーネルドライバにアクセスするように登録される。注目すべきは、少なくとも1つのシンボリックリンク又はバインドマウントが、第1のユーザ空間の第1のユーザ空間ドライバから共通カーネルの共通カーネルドライバへのリンクと、第2ユーザ空間の第2ユーザ空間ドライバから共通カーネルの共通カーネルドライバへのリンクとの、いずれかを示していることである。すなわち、少なくとも1つのシンボリックリンク又はバインドマウントが、異なるユーザ空間(第1のユーザ空間及び第2のユーザ空間など)を共通カーネルとリンクさせるために採用される。
【0046】
一例として、プライマリデバイスノードとセカンダリデバイスノードが、それぞれ第1のユーザ空間ドライバと第2のユーザ空間ドライバからエクスポーズされている場合を挙げる。第1のユーザ空間ドライバがプライマリデバイスノードを使用する間、第2のユーザ空間ドライバは、シンボリックリンク又はバインドマウントすることにより、セカンダリデバイスノードを使用する。
【0047】
別の例として、共通カーネルドライバは、例えば、/dev/driver及び/dev/driver_u2のような2つの異なるインタフェースを、それぞれ、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバに提供する。第1のユーザ空間ドライバは、当初の意図通りに共通カーネルドライバから一次インタフェース/dev/driverにアクセスする。一方第2のユーザ空間ドライバは、バインドマウント又はシンボリックリンクを介して、二次インタフェース/dev/driver_u2にアクセスする。このとき第2のユーザ空間ドライバへの変更は必要ない。そして共通カーネルドライバは、2つのインタフェース(すなわち、/dev/driver又は/dev/driver_u2)のどちらが、第1のユーザペースドライバ又は第2のユーザペースドライバによって呼び出されているかを確認することによって、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバのどちらが共通カーネルドライバの関数呼び出しを行ったかを判断する。
【0048】
実施形態によっては、前記コンピュータ実行可能な命令は、実行されると、前記プロセッサに、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに所与の関数呼び出しを行ったかを決定するために、前記共通カーネルドライバのハンドラを採用させるが、この決定は、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバがそれぞれ採用する第1のドライバ構成と第2のドライバ構成の間の差に基づいて行われる。この点、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバは、それぞれ、第1のドライバ構成及び第2のドライバ構成を変更することなく、これらのドライバ構成を通じてデバイスノードを選択することをサポートする。
【0049】
本開示はまた、上述のような方法に関する。前述の第1の捉え方に関して、上に開示された様々な実施形態及び変形例は、方法に準用される。
【0050】
実施形態によっては、そのような方法において、第1のオペレーティングシステム及び第2のオペレーティングシステムは既存のオペレーティングシステムであり、
【0051】
共通カーネルドライバは、第1のカーネルドライバの機能と第2のカーネルドライバの機能とをマージすることによって生成される。ここで、第1のカーネルドライバ及び第2のカーネルドライバは、それぞれ、第1のオペレーティングシステム及び第2のオペレーティングシステムにおいて使用されることが知られている、既存のカーネルドライバである。
【0052】
実施形態によっては、前記方法において、共通カーネルドライバは、第2のカーネルドライバの機能を含むように第1のカーネルドライバを修正することによって生成される。
【0053】
更に実施形態によっては、第1のカーネルドライバの機能は、第1のカーネルドライバ及び第2のカーネルドライバにおいて行われる関数呼び出しにおいて使用されることが知られている呼び出し規約のレベルで、第2のカーネルドライバの機能とマージされる。
【0054】
実施形態によっては、前記方法は、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに所与の関数呼び出しを行ったかを決定するために、前記共通カーネルドライバのハンドラを採用することを含む。 ここで前記決定は、第1のパラメータの属性及び第2のパラメータの属性の違いに基づいてなされる。また前記決定は、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバが同じパスを介して共通カーネルドライバにアクセスする際になされる。前記第1のパラメータ及び前記第2のパラメータは、それぞれ、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバによって共通カーネルドライバに渡される。
【0055】
この点につき、実施形態によっては、第1のパラメータの属性と第2のパラメータの属性は、データサイズ、データ型、データ順序の少なくとも1つを有する。
【0056】
実施形態によっては、前記方法は、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに所与の関数呼び出しを行ったかを決定するために、前記共通カーネルドライバのハンドラを採用することを含むが、この決定は、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバが、それぞれ第1のパス及び第2のパスを介して共通カーネルドライバにアクセスするときに、パスに設けられた少なくとも1つのシンボリックリンク又はバインドマウントに基づいて行われる。
【0057】
実施形態によっては、前記方法は、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバのどちらが前記共通カーネルドライバに所与の関数呼び出しを行ったかを決定するために、前記共通カーネルドライバのハンドラを採用することを含むが、この決定は、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバがそれぞれ採用する第1のドライバ構成と第2のドライバ構成の間の差に基づいて行われる。
【例】
【0058】
〔例1〕以下、第1のユーザ空間ドライバと第2のユーザ空間ドライバが同じパスを通じて共通カーネルドライバにアクセスする実施形態に従う例示的なプログラム(Cプログラミング言語)が提供される。
// K1 (第1のカーネルモジュールの機能について)
struct userspace_type_KD1 {
// データ型は単なる例である
u32 var1;
u64 var2;
void *var3;
...
};

void handler_kd1(userspace_input) {
userspace_type_KD1 data;
copy userspace_input into data;
process data
}

// K2 (第2のカーネルモジュールの機能について)
struct userspace_type_KD2 {
// データ型は単なる例である
u64 var1;
u64 var2;
void *var3;
...
};
void handler_kd2(userspace_input) {
userspace_type_KD2 data;
copy userspace_input into data;
process data
}

// K3 (機能統合された共通カーネルドライバ)
// ユーザ空間データ型userspace_type_KD1とuserspace_type_KD2の両方を有する
void handler_kd1_kd2(userspace_input) {
userspace_type_KD1 data1;
userspace_type_KD2 data2;
if input_size == sizeof (userspace_type_KD1)
copy userspace_input into data1;
if input_size == sizeof (userspace_type_KD2)
copy userspace_input into data2;

process data1 or data2 depending on input_size
}
【0059】
〔例2〕以下、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバが、それぞれ第1のパス及び第2のパスを介して共通カーネルドライバにアクセスする実施形態に従う例示的プログラム(Cプログラミング言語)が提供される。
// K1 (第1のカーネルモジュールの機能について)
struct userspace_type_KD1 {
// データ型は単なる例である
u32 var1;
u64 var2;
void *var3;
...
};

void init_kd1()
{
register_userspace_device("device_kd1");
}

void handler_kd1(userspace_input) {
userspace_type_KD1 data;
copy userspace_input into data;
process data
}

// K2 (第2のカーネルモジュールの機能について)
struct userspace_type_KD2 {
// データ型は単なる例である
u64 var1;
u64 var2;
void *var3;
...
};

void init_kd2()
{
register_userspace_device("device_kd2");
}

void handler_kd2(userspace_input) {
userspace_type_KD2 data;
copy userspace_input into data;
process data
}

// K3 (機能統合された共通カーネルドライバ)
// ここでは両方のユーザ空間データ型を有する
void init_kd1_kd2()
{
register_userspace_device("device_kd1");
register_userspace_device("device_kd2");
}

void dispatch()
{
if input from "device_kd1" call handler_kd1
if input from "device_kd2" call handler_kd2
}
【図面の詳細説明】
【0060】
図2Aを参照すると、本開示の一実施形態による、コンピューティングデバイス202を示すブロック図が示されている。第1のオペレーティングシステム204及び第2のオペレーティングシステム206は、コンピューティングデバイス202のプロセッサによって実行される。第1のオペレーティングシステム204は、第1のユーザ空間ドライバ210が実行される第1のユーザ空間208を有する。第2のオペレーティングシステム206は、第2のユーザ空間ドライバ214が実行される第2のユーザ空間212を有する。共通カーネルドライバ226は、
・ 第1のユーザ空間ドライバ210と第2のユーザ空間ドライバ214のどちらが共通カーネルドライバ226に対して関数呼び出しを行ったかを判定することと;
・ 第1のユーザ空間ドライバ210と第2のユーザ空間ドライバ214のどちらが共通カーネルドライバ226に対して関数呼び出しを行ったかの判定に基づいて、この関数呼び出しを対応するハードウェア固有の呼び出しに変換し、それによって、第1のユーザ空間ドライバ210及び第2のユーザ空間ドライバ214のうち関数呼び出しを行った方が、コンピューティングデバイス202のコンピュータハードウェア228にアクセスすることを可能にすることと;
を遂行するために、共通カーネル224上で実行される。
【0061】
このようにして、共通カーネルドライバ226は、第1のユーザ空間ドライバ210及び第2のユーザ空間ドライバ214がコンピュータハードウェア228に同時にアクセスすることを可能にする。
【0062】
図2Bを参照すると、第1のオペレーティングシステム204及び第2のオペレーティングシステム206が既存のオペレーティングシステムである実装例が図示されている。共通カーネルドライバ226は、第1のカーネルドライバ218の機能と第2のカーネルドライバ222の機能とをマージすることによって生成される。ここで、第1のカーネルドライバ218及び第2のカーネルドライバ222は、それぞれ、第1のオペレーティングシステム204及び第2のオペレーティングシステム206において使用されることが知られている、既存のカーネルドライバである。共通カーネル224は、第1のオペレーティングシステム204及び第2のオペレーティングシステム206でそれぞれ使用されることが他に知られている既存のカーネルである第1のカーネル216及び第2のカーネル220のいずれかとすることができる。
【0063】
図3を参照すると、本開示の一実施形態による、同一のコンピューティングデバイス上での複数のオペレーティングシステムの同時実行を容易にする方法のステップを示すフローチャートが描かれている。ステップ302において、第1のユーザ空間を有する第1のオペレーティングシステムと、第2のユーザ空間を有する第2のオペレーティングシステムとが、コンピューティングデバイスで実行される。ここで第1のオペレーティングシステムと第2のオペレーティングシステムとは、両者の間で共有される共通カーネルを有する。ステップ304において、第1のユーザ空間で第1のユーザ空間ドライバが実行され、第2のユーザ空間で第2のユーザ空間ドライバが実行される。ステップ306において、共通カーネル上で共通カーネルドライバが実行される。ステップ306において、関数コールが共通カーネルドライバに受けとられると、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバのいずれが当該関数コールを行ったかが判断される。続いて、第1のユーザ空間ドライバと第2のユーザ空間ドライバのどちらが共通カーネルドライバに対して当該関数呼び出しを行ったかの判定に基づいて、当該関数呼び出しを、対応するハードウェア固有の呼び出しに変換する。それによって、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバのうち前記関数呼び出しを行った方は、コンピューティングデバイスのコンピュータハードウェアにアクセスすることを可能にされる。このようにして、共通カーネルドライバは、第1のユーザ空間ドライバ及び第2のユーザ空間ドライバがコンピュータハードウェアに同時にアクセスすることを可能にする。
【0064】
ステップ302,304,306は単なる例示であって、他の選択肢も提供することができる。すなわち、添付の特許請求の範囲から逸脱することなく、1つ又は複数のステップを加えたり、1つ又は複数のステップを除いたり、1つ又は複数のステップを別の順序で実行したりすることができる。
【0065】
前述した本開示の実施形態の変更は、添付の特許請求の範囲に定義される開示範囲から逸脱しない限り可能である。本開示を記述及び請求するのに使用される「含む」、「備える」、「組み込む」、「有する」、「在る」等の表現は、非限定的に解釈されることを意図したものであり、明示されない項目や部品、要素等が存在してもよい。単数表現もまた、複数に関連するものと解釈されるべきものである。
図1
図2A
図2B
図3
【国際調査報告】