(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022020487
(43)【公開日】2022-02-01
(54)【発明の名称】情報処理装置、および情報処理方法、並びにプログラム
(51)【国際特許分類】
G06F 21/62 20130101AFI20220125BHJP
G06F 21/57 20130101ALI20220125BHJP
G06F 12/0891 20160101ALI20220125BHJP
G06F 9/30 20180101ALI20220125BHJP
【FI】
G06F21/62
G06F21/57 370
G06F12/0891
G06F9/30 382A
【審査請求】未請求
【請求項の数】14
【出願形態】OL
(21)【出願番号】P 2020124008
(22)【出願日】2020-07-20
(71)【出願人】
【識別番号】000002185
【氏名又は名称】ソニーグループ株式会社
(74)【代理人】
【識別番号】100093241
【弁理士】
【氏名又は名称】宮田 正昭
(74)【代理人】
【識別番号】100101801
【弁理士】
【氏名又は名称】山田 英治
(74)【代理人】
【識別番号】100086531
【弁理士】
【氏名又は名称】澤田 俊夫
(74)【代理人】
【識別番号】100095496
【弁理士】
【氏名又は名称】佐々木 榮二
(74)【代理人】
【識別番号】110000763
【氏名又は名称】特許業務法人大同特許事務所
(72)【発明者】
【氏名】粟井 昌一
【テーマコード(参考)】
5B033
5B205
【Fターム(参考)】
5B033EA00
5B033FA27
5B205JJ01
5B205JJ11
5B205MM01
(57)【要約】
【課題】セキュリティレベルを低下させることなく処理効率を向上させたシステムコール処理を実行する情報処理装置、情報処理方法を実現する。
【解決手段】システムコールの実行制御を行うデータ処理部としてのカーネルが、システムコール呼び出し主体であるアプリや、処理データの信頼性を判定し、判定結果に応じて、安全性優先型のシステムコールAと、速度優先型のシステムコールBのいずれかを選択して実行する。安全性優先型のシステムコールAでは、システムコール実行権限確認やキャッシュフラッシュを実行するが、速度優先型のシステムコールBではこれらの処理を省略する。
【選択図】
図8
【特許請求の範囲】
【請求項1】
アプリケーションからのハードウェア適用処理の実行要求であるシステムコール呼び出しに対して、システムコールの実行制御を行うデータ処理部を有し、
前記データ処理部は、前記システムコール呼び出しで指定された1つのシステムコール番号に対応付けられた複数のシステムコールから1つのシステムコールを選択して実行する情報処理装置。
【請求項2】
1つのシステムコール番号に対応付けられた複数のシステムコールには、少なくとも、
安全性優先型のデータ処理を実行するシステムコールAと、
速度優先型のデータ処理を実行するシステムコールBの2種類のシステムコールを含む請求項1に記載の情報処理装置。
【請求項3】
前記安全性優先型のデータ処理を実行するシステムコールAは、
システムコールの実行権限確認処理と、
システムコール対応処理前後のキャッシャメモリフラッシュ処理を実行する処理シーケンスを有し、
前記速度優先型のデータ処理を実行するシステムコールBは、
システムコールの実行権限確認処理、または、
システムコール対応処理前後のキャッシャメモリフラッシュ処理の少なくともいずれかを省略した処理シーケンスを有する請求項2に記載の情報処理装置。
【請求項4】
前記データ処理部は、
前記アプリケーションの信頼性に応じて実行するシステムコールを選択する構成であり、
前記アプリケーションの信頼性が低いと判定した場合は、
安全性優先型のデータ処理を実行するシステムコールAを実行し、
前記アプリケーションの信頼性が高いと判定した場合は、
速度優先型のデータ処理を実行するシステムコールBを実行する請求項1に記載の情報処理装置。
【請求項5】
前記データ処理部は、
システムコール実行時に利用するデータの信頼性、または機密性の少なくともいずれかに応じて、実行するシステムコールを選択する請求項1に記載の情報処理装置。
【請求項6】
前記データ処理部は、
システムコール実行時に利用するデータの信頼性、または機密性に応じて実行するシステムコールを選択する構成であり、
前記システムコール実行時に利用するデータの信頼性が低いと判定した場合、または前記システムコール実行時に利用するデータの機密性が高いと判定した場合は、
安全性優先型のデータ処理を実行するシステムコールAを実行し、
前記システムコール実行時に利用するデータの信頼性が高いと判定した場合、または前記システムコール実行時に利用するデータの機密性が低いと判定した場合は、
速度優先型のデータ処理を実行するシステムコールBを実行する請求項1に記載の情報処理装置。
【請求項7】
前記データ処理部は、
前記システムコール実行時に通信する通信相手の信頼度に応じて実行するシステムコールを選択する請求項1に記載の情報処理装置。
【請求項8】
前記データ処理部は、
前記システムコール実行時にアクセスするパスの信頼度に応じて実行するシステムコールを選択する請求項1に記載の情報処理装置。
【請求項9】
前記データ処理部は、
前記アプリケーションプログラムの実行累積回数に応じて実行するシステムコールを選択する請求項1に記載の情報処理装置。
【請求項10】
前記データ処理部は、
情報処理装置の状況に応じて実行するシステムコールを選択する請求項1に記載の情報処理装置。
【請求項11】
前記データ処理部は、
前記システムコール実行時の情報処理装置のCPUの処理負荷、または、情報処理装置の温度、またはバッテリ残容量の少なくともいずれかの情報処理装置状況に応じて実行するシステムコールを選択する請求項1に記載の情報処理装置。
【請求項12】
1つのシステムコール番号に対応付けられた複数のシステムコールの各々は、個別の異なる命令アドレスを格納した個別のベクタテーブルに対応付けられた構成である請求項1に記載の情報処理装置。
【請求項13】
情報処理装置において実行する情報処理方法であり、
前記情報処理装置は、アプリケーションからのハードウェア適用処理の実行要求であるシステムコール呼び出しに対して、システムコールの実行制御を行うデータ処理部を有し、
前記データ処理部が、前記システムコール呼び出しで指定された1つのシステムコール番号に対応付けられた複数のシステムコールから1つのシステムコールを選択して実行する情報処理方法。
【請求項14】
情報処理装置において情報処理を実行させるプログラムであり、
前記情報処理装置は、アプリケーションからのハードウェア適用処理の実行要求であるシステムコール呼び出しに対して、システムコールの実行制御を行うデータ処理部を有し、
前記プログラムは、前記データ処理部に、前記システムコール呼び出しで指定された1つのシステムコール番号に対応付けられた複数のシステムコールから1つのシステムコールを選択して実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本開示は、情報処理装置、および情報処理方法、並びにプログラムに関する。さらに詳細には、プロセッサによるデータ処理時のセキュリティ対策とデータ処理効率の向上を実現する情報処理装置、および情報処理方法、並びにプログラムに関する。
【背景技術】
【0002】
情報処理装置におけるデータ処理には、CPU(Central Processing Unit)等のプロセッサが用いられる。CPUは、例えば、ROM(Read Only Memory)や、記憶部に記憶されているプログラムに従って様々な処理を実行する。
【0003】
現代のCPUのアーキテクチャにおいては、演算処理性能向上のために「キャッシュメモリ」に対する処理データの一時的記憶処理や、柔軟な処理シーケンスの構築手法である「投機的実行」や「アウトオブオーダー実行」といった手法が利用されることが多い。
【0004】
「キャッシュメモリ」は、CPUがデータや命令などの情報を取得、または更新する際に主記憶装置やバスなどの遅延や低帯域を隠蔽し、処理装置と記憶装置の性能差を埋めるために用いる高速メモリである。
なお、CPUによるデータ処理に際してキャッシュメモリを利用する手法については、例えば特許文献1(国際公開WO2019/167360号公報)に記載がある。
【0005】
「投機的実行」とは、CPUの先行命令と後続命令に依存関係があり、先行命令の結果が判明するまで後続命令を実行できず、パイプラインでの高速化を果たせない場合に、この依存関係をとりあえず無視して、処理が行われそうな後続命令を推定し、先行命令の完了を待たずに後続命令のステージを進める処理である。
【0006】
推定が当たり投機に成功した場合は、そのままステージを進める。推定が外れ投機に失敗した場合には、パイプラインにハザード(事故)が発生したと呼び、「投機が無かったことにする」ためにステージを再構築(復旧)してから、ステージを再開する。しかし、ステージ再構築には余分な時間がかかる。これはペナルティ(罰金)と呼ばれる。多くのアーキテクチャ設計ではハザード発生確率を低くするための種々の工夫がなされている。
【0007】
「アウトオブオーダー実行」とは、CPUのクロックあたりの命令実行数(IPC:Instruction Per Clock)を増やして性能を上げる手法の1つである。入力された複数命令の並びを入れ替えて、処理に必要な準備ができた命令から、パイプラインに入力し、実行する手法である。
【0008】
しかし、近年、これらの「投機的実行」や「アウトオブオーダー実行」にはセキュリティ上の脆弱性があり、キャッシュメモリを利用した処理が行われた場合、プロセスが本来アクセスできないはずの他のプロセスやカーネルのメモリ領域にアクセスできるケースがあることが判明した。
このような脆弱性により、秘匿すべきデータが外部に漏洩してしまうといった問題が懸念されている。
【先行技術文献】
【特許文献】
【0009】
【特許文献1】国際公開WO2019/167360号公報
【発明の概要】
【発明が解決しようとする課題】
【0010】
本開示は、例えば上記問題点に鑑みてなされたものであり、CPU等のプロセッサによるデータ処理時のセキュリティ対策とデータ処理効率の向上を実現する情報処理装置、および情報処理方法、並びにプログラムを提供することを目的とする。
【課題を解決するための手段】
【0011】
本開示の第1の側面は、
アプリケーションからのハードウェア適用処理の実行要求であるシステムコール呼び出しに対して、システムコールの実行制御を行うデータ処理部を有し、
前記データ処理部は、前記システムコール呼び出しで指定された1つのシステムコール番号に対応付けられた複数のシステムコールから1つのシステムコールを選択して実行する情報処理装置にある。
【0012】
さらに、本開示の第2の側面は、
情報処理装置において実行する情報処理方法であり、
前記情報処理装置は、アプリケーションからのハードウェア適用処理の実行要求であるシステムコール呼び出しに対して、システムコールの実行制御を行うデータ処理部を有し、
前記データ処理部が、前記システムコール呼び出しで指定された1つのシステムコール番号に対応付けられた複数のシステムコールから1つのシステムコールを選択して実行する情報処理方法にある。
【0013】
さらに、本開示の第3の側面は、
情報処理装置において情報処理を実行させるプログラムであり、
前記情報処理装置は、アプリケーションからのハードウェア適用処理の実行要求であるシステムコール呼び出しに対して、システムコールの実行制御を行うデータ処理部を有し、
前記プログラムは、前記データ処理部に、前記システムコール呼び出しで指定された1つのシステムコール番号に対応付けられた複数のシステムコールから1つのシステムコールを選択して実行させるプログラムにある。
【0014】
なお、本開示のプログラムは、例えば、様々なプログラム・コードを実行可能な情報処理装置やコンピュータ・システムに対して、コンピュータ可読な形式で提供する記憶媒体、通信媒体によって提供可能なプログラムである。このようなプログラムをコンピュータ可読な形式で提供することにより、情報処理装置やコンピュータ・システム上でプログラムに応じた処理が実現される。
【0015】
本開示のさらに他の目的、特徴や利点は、後述する本開示の実施例や添付する図面に基づくより詳細な説明によって明らかになるであろう。なお、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【0016】
本開示の一実施例の構成によれば、セキュリティレベルを低下させることなく処理効率を向上させたシステムコール処理を実行する情報処理装置、情報処理方法が実現される。
具体的には、例えば、システムコールの実行制御を行うデータ処理部としてのカーネルが、システムコール呼び出し主体であるアプリや、処理データの信頼性を判定し、判定結果に応じて、安全性優先型のシステムコールAと、速度優先型のシステムコールBのいずれかを選択して実行する。安全性優先型のシステムコールAでは、システムコール実行権限確認やキャッシュフラッシュを実行するが、速度優先型のシステムコールBではこれらの処理を省略する。
本構成により、セキュリティレベルを低下させることなく処理効率を向上させたシステムコール処理を実行する情報処理装置、情報処理方法が実現される。
なお、本明細書に記載された効果はあくまで例示であって限定されるものではなく、また付加的な効果があってもよい。
【図面の簡単な説明】
【0017】
【
図1】情報処理装置のソフトウェアスタックの構成例について説明する図である。
【
図2】システムコール番号とそれに対応するベクタテーブルの例を示す図である。
【
図3】情報処理装置において、1つのシステムコール(システムコールn)の呼び出しが実行された場合の処理シーケンスを説明するフローチャートを示す図である。
【
図4】本開示の情報処理装置の構成例について説明する図である。
【
図5】本開示の情報処理装置のソフトウェアスタックの構成例について説明する図である。
【
図6】本開示の情報処理装置のシステムコール番号とそれに対応するベクタテーブルの例を示す図である。
【
図7】本開示の情報処理装置のOS(カーネル)が、システムコールA,B(ベクタテーブルA,B)を選択する際に参照するアプリケーション(プログラム)のパラメータと、パラメータに基づくシステムコールA,B(ベクタテーブルA,B)を選択する処理の具体例について説明する図である。
【
図8】本開示の情報処理装置が実行する処理シーケンスについて説明するフローチャートを示す図である。
【
図9】本開示の情報処理装置が実行する処理シーケンスについて説明するフローチャートを示す図である。
【
図10】本開示の情報処理装置が実行する処理シーケンスについて説明するフローチャートを示す図である。
【
図11】本開示の情報処理装置が実行する処理シーケンスについて説明するフローチャートを示す図である。
【
図12】本開示の情報処理装置が実行する処理シーケンスについて説明するフローチャートを示す図である。
【
図13】本開示の情報処理装置が実行する処理シーケンスについて説明するフローチャートを示す図である。
【
図14】本開示の情報処理装置が実行する処理シーケンスについて説明するフローチャートを示す図である。
【
図15】情報処理装置のハードウェア構成例について説明する図である。
【発明を実施するための形態】
【0018】
以下、図面を参照しながら本開示の情報処理装置、および情報処理方法、並びにプログラムの詳細について説明する。なお、説明は以下の項目に従って行なう。
1.プロセッサを利用したデータ処理の高速化手法について
2.システムコールを利用したデータ処理の概要について
3.本開示の情報処理装置の構成例について
4.本開示の情報処理装置が実行するシステムコール対応の処理について
5.本開示の情報処理装置が実行する処理のシーケンスについて
6.その他の実施例、応用例について
7.情報処理装置の構成例について
8.本開示の構成のまとめ
【0019】
[1.プロセッサを利用したデータ処理の高速化手法について]
まず、プロセッサを利用したデータ処理の高速化手法について説明する。
【0020】
前述したように、CPU(Central Processing Unit)等のプロセッサを用いたデータ処理を高速化するため、「キャッシュメモリ」や、処理シーケンスの設定手法である「投機的実行」や「アウトオブオーダー実行」といった処理手法が利用される。
【0021】
「キャッシュメモリ」は、CPUがデータや命令などの情報を取得、または更新する際に主記憶装置やバスなどの遅延や低帯域を隠蔽し、処理装置と記憶装置の性能差を埋めるために用いる高速メモリである。
【0022】
「投機的実行」とは、CPUの先行命令と後続命令に依存関係があり、先行命令の結果が判明するまで後続命令を実行できず、パイプラインでの高速化を果たせない場合に、この依存関係をとりあえず無視して、処理が行われそうな後続命令を推定し、先行命令の完了を待たずに後続命令のステージを進める処理である。
【0023】
「アウトオブオーダー実行」とは、CPUのクロックあたりの命令実行数(IPC:Instruction Per Clock)を増やして性能を上げる手法の1つである。入力された複数命令の並びを入れ替えて、処理に必要な準備ができた命令から、パイプラインに入力し、実行する手法である。
【0024】
一方、情報処理装置におけるCPU等のプロセッサを利用したデータ処理においては、暗号化されない生データを利用したデータ処理が存在する。この非暗号化データが機密性の高いデータである場合、このデータを格納したメモリやデータ処理実行部は、外部からのアクセスを排除した不可侵領域に設定しなければならない。
【0025】
具体的には、例えば、CPUの能力を活用するアーキテクチャの根本をなす部分であるOSのカーネルが、このような不可侵領域の1つの領域である。
カーネルは、例えば、アプリケーションレイヤにおいて、様々なデータ処理を実行するアプリケーション(プログラム)の実行するプロセスに対して、ハードウェア(HW)レイヤのCPUやメモリ、通信部等の様々なハードウェア(リソース)を割り当てる処理や、各プロセスの実行シーケンス等を決定するタスクスケジューラの機能を実行する。
【0026】
さらにシステムメモリの中にも、他のプロセスからアクセスできないよう慎重に隔離された不可侵領域が存在する。不可侵領域内のデータは機密性が高く、他のプロセスからアクセスできないよう強力な保護壁が設けられるのが一般的である。
【0027】
しかし、上述したデータ処理の高速化手法である「投機的実行」や「アウトオブオーダー実行」を情報処理装置において実行すると、データ漏洩の可能性があり、セキュリティ脆弱性があることが明らかになった。
具体的には、キャッシュメモリを利用したデータ処理の実行において、あるプロセスが本来アクセスできないはずの他のプロセスやカーネルのメモリ領域にアクセスして、機密データを読み取られるケースがあることが判明した。
【0028】
このような不可侵領域内の機密データに対する不正アクセス手法の代表的手法として、以下の2つの手法が明らかになっており、それぞれ次のコード名が付けられている。
(1)コード名=Spectre(スペクター)
(2)コード名=Meltdown(メルトダウン)
【0029】
これらの2つの不正アクセス手法の概要について説明する。
(1)コード名=Spectre(スペクター)
この不正アクセス手法は以下の手順に従って実行される。
(S01)あるプロセスの投機的実行段階において、読まれてはいけない情報をCPUのキャッシュメモリに読み込むように仕向ける。
(S02)別プロセスでキャッシュの情報を参照することで、本来、読まれてはいけない情報を読むことが可能となる。
【0030】
(2)コード名=Meltdown(メルトダウン)
この不正アクセス手法は以下の手順に従って実行される。
(S01)ある程度時間がかかる繰り返し処理などで、一定時間後アクセスが禁止されている領域をアクセスするような処理を、データ処理プログラム内に書いておく。
(S02)例外処理が発生すると予測される処理の後に、アクセス履歴をCPUのキャッシュ内に残すような処理をプログラム内に書いておく。
(S03)アクセスが禁止されている領域にアクセスすると、例外が発生して処理が中断される。
(S04)アウトオブオーダー実行により、例外発生前に(S02)の処理が実行される。
(S05)処理(S04)の処理時のCPUのキャッシュを読み取ることにより、物理メモリのどの場所にアクセスが禁止されている情報があるかを判断して、参照することが可能となる。
【0031】
このように、不可侵領域内の機密データに対する不正アクセス手法の代表的手法として、上記の2つの手法が明らかになっている。
【0032】
上記2つの手法におけるセキュリティ脆弱性の本質は、CPUによるデータ処理の高速化手法として利用される「投機的実行」や、「アウトオブオーダー実行」を適用することで、本来アクセスできないはずのメモリ領域のデータがキャッシュメモリ内に残ったまま、他のプロセス、すなわち、キャッシュメモリ内のデータに対するアクセスが許容されないプロセスが実行されてしまうことにある。
【0033】
これはCPUの基本的なアーキテクチャに対する脆弱性であるため、根本的に解決することは難しい。当面の対策としては、例えば、カーネルがプロセスやスレッドの切り替え時にキャッシュメモリをフラッシュして、キャッシュメモリに残存するデータを消去する処理や、様々なプロセスからのキャッシュメモリアクセスを禁止させるメモリバリアを設ける等の対策が行われている。
【0034】
しかし、キャッシュは高速演算を行うための根本的な仕組みであるため、一時的にせよ、キャッシュメモリをフラッシュして、キャッシュメモリに残存するデータを消去してしまうと、CPUによる演算速度の大きな低下を招いてしまうという弊害がある。
【0035】
[2.システムコールを利用したデータ処理の概要について]
次に、システムコールを利用したデータ処理の概要について説明する。
【0036】
情報処理装置において様々な処理を実行するアプリケーション(プログラム)は、情報処理装置のハードウェア、例えばCPU、メモリ、通信部等を利用して処理を行う。これらのハードウェアの多くは、OS(カーネル)の管理下にある。
【0037】
OS上で動作するアプリケーション(プログラム)は、アプリケーションの実行に際して、OS(カーネル)の管理するCPUや、メモリや、通信部等のハードウェア(リソース)を利用する必要がある。
OS(カーネル)は、アプリケーションによるCPU等のハードウェア利用を可能とするための機能呼び出しを行う。この機能呼び出し処理や、この機能をシステムコールと呼ぶ。
【0038】
システムコールは、具体的には、例えばOS(カーネル)による命令、関数(例えばプロセス(タスク)に対する機能提供や利用のための命令、関数)の出力処理である。アプリケーションがシステムコール呼び出しを行い、OS(カーネル)がシステムコールを実行することで、アプリケーションは、アプリケーションの実行に必要となるCPUやメモリ等のハードウェア(リソース)を、OS(カーネル)を介して利用することが可能となる。
【0039】
図1は、OS上で動作するアプリケーション(プログラム)を有する情報処理装置のソフトウェア構成(ソフトウェアスタック)を示している。
【0040】
図1に示すソフトウェア構成(ソフトウェアスタック)は、以下の各レイヤによって構成される。
(1)アプリケーションレイヤ
(2)OS(カーネル)レイヤ
(3)ハードウェア(HW)レイヤ
【0041】
アプリケーションレイヤは、例えばROMや記憶部に格納されたプログラムに従った様々な処理、すなわち複数のプロセス(タスク)を実行するアプリケーション(プログラム)によって構成されるレイヤである。
【0042】
なお、アプリケーションレイヤ上のアプリケーションの実行するプロセスには、機密性の高いデータを暗号化データに変換して処理を実行するプロセスや、機密性の高いデータを非暗号化データ(生データ)のまま処理を実行するプロセスや、機密性の少ないデータに対する処理を実行するプロセスなど、様々なプロセスが含まれる。
また、処理完了期限や処理開始時点が規定されたリアルタイムプロセスや、それ以外の非リアルタイムプロセス等、処理時間についても様々な種類の異なる多数のプロセスが含まれる。
【0043】
これらのプロセスの多くは、ハードウェア(HW)レイヤのCPU(コア)を利用して実行される。
なお、
図1に示す例は、ハードウェア(HW)レイヤに複数のCPU(コア)を有するマルチコアCPU型の装置構成である。
【0044】
OS(カーネル)レイヤは、ハードウェア(HW)レイヤのいずれかのCPU(コア)にプロセス(タスク)を割り当て、各プロセスの実行シーケンス等を決定するタスクスケジューラの機能を有する。タスクスケジューラは、プロセスを実行順に配列したキューの設定や、マルチコアCPUを構成する各CPU(コア)に対するプロセスの割り当て、さらに各コア間のプロセス(タスク)移動処理等のプロセス管理処理を実行する。
【0045】
なお、このOS(カーネル)レイヤ対応の処理は、実際には、ハードウェア(HW)レイヤのマルチコアCPUのCPU(コア)においてカーネルスレッドとして実行される。
カーネルスレッドでは、OS(オペレーティングシステム)の中核となるソフトウェアであるカーネル対応の処理であり、マルチコアCPUを構成する各CPU(コア)に対するプロセス(タスク)の割り当てや、各コア間のプロセス移動処理等の管理処理としてのタスクスケジューリング処理が実行される。
さらに、各コアにおけるタスク実行に必要となるリソースやメモリの管理、さらにプロセス切り替え等の処理も含まれる。
【0046】
図1には、OS(カーネル)レイヤに複数のシステムコール(1,2,3,4,・・・N)を示している。
前述したように、OS(カーネル)上で動作するアプリケーション(プログラム)は、アプリケーションの実行に際して、OS(カーネル)の管理下でCPUや、メモリや、通信部等のハードウェア(リソース)を利用することになる。
OS(カーネル)は、アプリケーションによるCPU等のハードウェア利用を可能とするための機能呼び出し処理としてシステムコール呼び出しを行う。
【0047】
アプリケーションによるシステムコール呼び出し処理は、例えば割り込み処理、または専用命令を用いて行われる。
このように、システムコールは特殊な命令を使うことが多く、例えばCPUは、この特殊命令に応じて、アプリによる通常のデータ処理を行うユーザレベルから、OS(カーネル)によるリソース制御を実行させるための特権レベルに遷移し、アプリに利用させるリソースの制御などを行う。
【0048】
具体的な方法はシステムに依存するが、例外や割り込みを発生させることで高い特権レベルに移行したり、特殊な分岐命令で高い特権レベルに移行したりする。このときにシステムコールの種別を示す番号や引数がレジスタやコールスタックに格納されていて、高い特権レベルのコード(カーネル)がそれを使用して処理を行う。
【0049】
いずれの場合でも、どのシステムコールが要求されたかの識別には「システムコール番号」が使われる。そして、そのシステムコール番号に対応する実際の処理プログラムを示す命令アドレスが「ベクタテーブル」として特定の場所に格納されている。つまり、システムコール番号のみが識別子であり、実際の処理コードを示す命令アドレスは従属的なものである。
【0050】
図2に、システムコール番号とそれに対応するベクタテーブルの例を示す。
図2に示すように、システムコール番号(1~N)各々に対して、対応するベクタテーブル(システムコール番号に対応する命令アドレス)が対応付けられている。
【0051】
図2には、さらに、システムコール番号(1~N)各々に対応する具体的な処理である「システムコール種別」を示している。
例えば、アプリケーションが、ハードウェア内の記憶部に格納されたファイルを開く処理、すなわち(ファイル・オープン)を行いたい場合、OS(カーネル)に対してシステムコール番号1を指定したシステムコール呼び出しを行う。
【0052】
図2に示すベクタテーブルは、例えば情報処理装置に格納された唯一のベクタテーブルであり、情報処理装置において実行されるすべてのプロセスや、プロセス内の処理単位であるスレッドは同じベクタテーブルを利用して処理を行う。
【0053】
従来は、各種システムコールに対応する一連の命令アドレスはベクタテーブルと呼ばれる静的なものであり、従ってすべてのプロセスやスレッドに対して唯一のシステムコールが存在するのみであった。
【0054】
一般的に、システムコールは、カーネル内の高い特権レベルのコードによって実行されるので、処理開始前にシステムコールの実行権限確認や、引数パラメータのチェックが厳密に行われる。このチェックで実行権限がないと判断されるか、引数パラメータが不正な値であった場合は、システムコールは実行されず、エラー戻りとなる。
【0055】
また、前述のスペクターやメルトダウンといった脆弱性問題を回避するために、プロセスやスレッドの切り替え時のキャッシュメモリをクリアすることで、プロセスやスレッドの権限を越えて、他プロセス・スレッドのメモリにアクセスできないような対策が入れられている。
【0056】
図3は、情報処理装置において、1つのシステムコール(システムコールn)の呼び出しが実行された場合の処理シーケンスを説明するフローチャートである。
以下、
図3に示すフローチャートの各ステップの処理について、順次、説明する。
【0057】
(ステップS101)
まず、アプリケーションが、1つのシステムコール番号であるシステムコールnを指定したシステムコール呼び出しを行う。
【0058】
このシステムコール呼び出しは、前述したように、例えば割り込み処理、または専用命令を用いて行われる。
【0059】
(ステップS102)
次に、システムコール呼び出し処理に応じて、ステップS102において、CPU特権レベルへの遷移処理が実行される。前述したように、CPUは、システムコール呼び出し処理に応じて、アプリによる通常のデータ処理を行うユーザレベルから、OS(カーネル)によるリソース制御を実行させるための特権レベルに遷移する。
【0060】
(ステップS103)
次に、OS(カーネル)は、ステップS103において、システムコール実行権限の確認を行う。システムコールに従った処理、すなわちハードウェアへのアクセス等の処理は、カーネル内の高い特権レベルのコードによって実行されるので、処理開始前にシステムコールの実行権限確認や、引数パラメータのチェックが厳密に行われる。
【0061】
このチェックで実行権限がないと判断されるか、引数パラメータが不正な値であった場合は、ステップS103の判定はNoとなり、ステップS104に進む。
一方、ステップS103の実行権限確認処理において、実行権限があると判断され、引数パラメータが正しい値であると判断された場合は、ステップS103の判定はYesとなり、ステップS105に進む。
【0062】
(ステップS104)
ステップS103におけるシステムコールの実行権限確認や、引数パラメータのチェックにおいて、実行権限がないと判断されるか、引数パラメータが不正な値であった場合は、ステップS103の判定はNoとなり、ステップS104に進む。
【0063】
この場合、ステップS104において、実行エラーとなる。すなわち、システムコールに従った処理は実行されず、処理が終了する。
【0064】
(ステップS105)
一方、ステップS103におけるシステムコールの実行権限確認や、引数パラメータのチェックにおいて、実行権限があり、引数パラメータが正しい値であったと判定した場合は、ステップS103の判定はYesとなり、ステップS105に進む。
【0065】
この場合、ステップS105において、まず、キャッシュフラッシュが行われる。すなわち、システムコールに従った処理、例えばファイル・オープンやファイル・リードや、ファイル・ライト等の処理のために利用するキャッシュメモリに残存するデータを消去するためのキャッシュフラッシュ処理を実行する。
【0066】
(ステップS106)
次に、キャッシュフラッシュ処理後のキャッシュを利用して、システムコールに従った処理、例えばファイル・オープンやファイル・リードや、ファイル・ライト等の処理を実行する。
【0067】
(ステップS107)
ステップS106において、システムコールに従った処理、例えばファイル・オープンやファイル・リードや、ファイル・ライト等の処理が完了すると、ステップS107において、処理に利用したキャッシュに対して、再度、キャッシュフララッシュ処理を実行する。
【0068】
この処理により、キャッシュに記録されたデータが消去されることになり、後続する他のプロセスがキャッシュからデータを読み取るといった不正処理やデータ漏洩を防止することが可能となる。
【0069】
(ステップS108)
最後に、ステップS108において、CPU特権レベルからユーザレベルへの遷移処理が実行される。このレベル遷移により、アプリによる通常のデータ処理を行うユーザレベルへの遷移が行われる。
【0070】
この
図3に示すフローに従った処理において、ステップS105やステップS107において実行するキャッシュフラッシュ処理は、キャッシュに読み込まれたデータが、前後して実行されるその他のプロセスによって不正に読み取られ、漏洩することを防止するための処理である。
【0071】
すなわち、先に説明した不可侵領域内の機密データに対する不正アクセス手法の代表的手法、すなわち、
(1)コード名=Spectre(スペクター)
(2)コード名=Meltdown(メルトダウン)
これらの手法による機密データの不正読み取りを防止するため、
図3に示すフローのステップS105やステップS107にけるキャッシュフラッシュ処理が有効な対策となる。
【0072】
しかし、このようなキャッシュフラッシュ処理を行うことにより、データ処理の処理速度が低下してしまうという問題が発生する。
以下において説明する本開示の情報処理装置は、この問題点を解決するものである。
すなわち、データ処理速度を低下させることなく、かつセキュリティの脆弱性も回避することを可能としたものである。
【0073】
[3.本開示の情報処理装置の構成例について]
次に、本開示の情報処理装置の構成例について説明する。
【0074】
本開示の情報処理装置は、上述した問題点を解決するものであり、セキュリティレベルの低下を招くことなく、CPU等のプロセッサによるデータ処理の高速化を実現するものである。
具体的には、上述したデータ処理の高速化手法である「投機的実行」や「アウトオブオーダー実行」等の処理を、機密データを漏洩させることなく安全に実行すること可能とした構成を実現する。
【0075】
本開示の情報処理装置の一構成例について説明する。
図4は、本開示の情報処理装置100の一構成例を示す図である。
図4に示すように、本開示の情報処理装置100の一実施例構成は、マルチコアCPU101を有する構成である。
マルチコアCPU(Multi-Core CPU)101には、ハードウェアとして2以上のコア(CPU)が含まれる。すなわち、マルチコアCPU101は複数のCPUを有し、各CPUがそれぞれ個別の処理(プロセス(タスク))を並列に実行することができる。
【0076】
なお、本開示の情報処理装置100は、このような複数のCPUを持つマルチコアCPU101を有することは必ずしも必須ではなく、単一CPUを持つ構成において、時系列に異なるプロセスをスレッド単位で実行する構成においても適用可能である。
【0077】
図4に示す構成は、本開示の情報処理装置の一構成例である。
図4に示す情報処理装置100は、マルチコアCPU101の他、RAM(Random Access Memory)102、ROM(Read Only Memory)103、記憶部104を有し、これら各要素がバス105によって接続された構成を有する。
【0078】
ROM(Read Only Memory)103は、マルチコアCPU101が実行するプロセスやスレッドのプログラムや、プロセスやスレッドの実行に必要となるパラメータ等の記憶領域として利用される。
RAM(Random Access Memory)102は、マルチコアCPU101が実行する処理に利用するワークエリア、パラメータ記憶領域、その他のデータの記録領域等として利用される。
【0079】
記憶部104は、例えばハードディスク、CD,DVD、フラッシュメモリ等の記憶装置であり、マルチコアCPU101が実行するプロセスやスレッドのプログラムの記憶領域、さらにマルチコアCPU101が実行するプロセスやスレッドの処理結果データ等が記録される。
【0080】
マルチコアCPU101では、例えば、ROM(Read Only Memory)103、または記憶部104に記憶されているプログラムに従った様々な処理が実行される。
【0081】
図4に示すように、マルチコアCPU101内には、ハードウェアとして2以上のコア(CPU)が含まれる。
【0082】
次に、
図5を参照して、本開示の情報処理装置100のマルチコアCPU101内のハードウェアであるコア(CPU)の実行するソフトウェア構成(ソフトウェアスタック)について説明する。
【0083】
本開示の情報処理装置100のソフトウェアスタックは、
図5に示すように、以下の各レイヤによって構成される。
(1)アプリケーションレイヤ
(2)OS(カーネル)レイヤ
(3)ハードウェア(HW)レイヤ
このレイヤの基本構成は、先に
図1を参照して説明した一般的な情報処理装置のソフトウェアスタックと同様のレイヤ構成である。
【0084】
アプリケーションレイヤは、例えばROM103、または記憶部104に記憶されているプログラムに従った様々な処理、すなわちプロセスを実行するアプリケーション(プログラム)によって構成されるレイヤである。
【0085】
なお、アプリケーションレイヤ上のアプリケーションの実行するプロセスには、機密性の高いデータを暗号化データに変換して処理を実行するプロセスや、機密性の高いデータを非暗号化データ(生データ)のまま処理を実行するプロセスや、機密性の少ないデータに対する処理を実行するプロセスなど、様々なプロセスが含まれる。
また、処理完了期限や処理開始時点が規定されたリアルタイムプロセスや、それ以外の非リアルタイムプロセス等、処理時間についても様々な種類の異なる多数のプロセスが含まれる。
これらのプロセスは、ハードウェア(HW)レイヤのマルチコアCPU101内の各CPU(コア)を利用して実行される。
【0086】
OS(カーネル)レイヤは、アプリケーションレイヤにおいて、様々なデータ処理を実行するアプリケーション(プログラム)の実行するプロセスに対して、ハードウェア(HW)レイヤのCPUやメモリ、通信部等の様々なハードウェア(リソース)を割り当てる処理を実行する。
【0087】
OS(カーネル)レイヤは、例えばハードウェア(HW)レイヤのマルチコアCPU101の各CPU(コア)にプロセスを割り当て、各プロセスの実行シーケンス等を決定するタスクスケジューラの機能を有する。タスクスケジューラは、プロセス(タスク)を実行順に配列したキューの設定や、マルチコアCPU101を構成する各CPU(コア)に対するプロセスの割り当て、さらに各コア間のプロセス(タスク)移動処理等のプロセス(タスク)管理処理を実行する。
【0088】
なお、このOS(カーネル)レイヤ対応の処理は、実際には、ハードウェア(HW)レイヤのマルチコアCPU101のCPU(コア)においてカーネルスレッドとして実行される。
カーネルスレッドでは、OS(オペレーティングシステム)の中核となるソフトウェアであるカーネル対応の処理であり、マルチコアCPU101を構成する各CPU(コア)に対するプロセス(タスク)の割り当てや、各コア間のプロセス(タスク)移動処理等の管理処理としてのタスクスケジューリング処理が実行される。
さらに、各コアにおけるタスク実行に必要となるリソースやメモリの管理、さらにプロセス(タスク)切り替え等の処理も含まれる。
【0089】
図5には、OS(カーネル)レイヤに複数のシステムコール(1A,1B,2A,2B,3A,3B・・・NA,NB)を示している。
先に、
図1を参照して説明した構成では、OS(カーネル)レイヤには、N個のシステムコール(1,2,3,4,・・・N)が示されていたが、本開示の情報処理装置のOS(カーネル)レイヤには、
図1に示すN個のシステムコールの2倍の2N個のシステムコール(1A,1B,2A,2B,3A,3B・・・NA,NB)が設定されている。
【0090】
本開示の情報処理装置は、1つのシステムコール番号(1,2,・・・N)各々に対して、2つの異なるシステムコールA,システムコールBを有する。
具体的には、システムコールAは、ベクタテーブルA(命令アドレスA)と対応付けられたシステムコールであり、ベクタテーブルA(命令アドレスA)によって取得される命令(処理)を実行する。
一方、システムコールBは、ベクタテーブルB(命令アドレスB)と対応付けられたシステムコールであり、ベクタテーブルB(命令アドレスB)によって取得される命令(処理)を実行する。
【0091】
このように、本開示の情報処理装置のOS(カーネル)レイヤは、2種類のベクタテーブルA,B(システムコール番号対応の2つの命令アドレスA,B)に対応付けられた2種類のシステムコールを有する。
【0092】
すなわち、1つのシステムコール番号(1,2,・・・N)各々に対して、2つの異なるシステムコールA,システムコールBを有し、アプリケーションから、あるシステムコール番号nを指定したシステムコール呼び出しがあった場合、そのシステムコール番号nに対応付けられたシステムコールnAとシステムコールnBの2つのシステムコールから1つのシステムコールを選択して、選択したシステムコールを実行する。
【0093】
[4.本開示の情報処理装置が実行するシステムコール対応の処理について]
次に、本開示の情報処理装置が実行するシステムコール対応の処理について説明する。
【0094】
図5を参照して説明したように、本開示の情報処理装置は、1つのシステムコール番号(1,2,・・・N)各々に対して、2つの異なるシステムコールA,システムコールBを有する。
【0095】
システムコールAは、ベクタテーブルA(命令アドレスA)によって取得される命令(処理)を実行する。
システムコールBは、ベクタテーブルB(命令アドレスB)によって取得される命令(処理)を実行する。
すなわち、2種類のベクタテーブルA,B(システムコール番号対応の2つの命令アドレスA,B)を有する構成である。
【0096】
図6に本開示の情報処理装置におけるシステムコール番号とそれに対応するベクタテーブルの例を示す。
図6に示すように、システムコール番号(1~N)各々に対して、2つのベクタテーブルA,B(2つの命令アドレスA,B)が対応付けられている。
【0097】
なお、
図6には、先に説明した
図1と同様、システムコール番号(1~N)各々に対応する具体的な処理である「システムコール種別」も示している。
例えば、アプリケーションが、ハードウェア内の記憶部に格納されたファイルを開く処理、すなわち(ファイル・オープン)を行いたい場合、OS(カーネル)に対してシステムコール番号1を指定したシステムコール呼び出しを行う。
【0098】
従来は、先に
図1を参照して説明したように、各システムコール番号(1~N)各々に対して、1つのベクタテーブル、すなわち1つの命令アドレスを対応付けた構成であった。
従って、あるシステムコールnが呼び出された場合に実行される処理は1つのベクタテーブルに定義された1つの命令アドレスによって決定される唯一の処理となる。すなわち、例えば先に説明した
図3に示すフローに従った処理が実行されることになる。
【0099】
これに対して、本開示の情報処理装置では、
図6に示すように、各システムコール番号(1~N)各々に対して、2つのシステムコールA,Bが対応付けられている。
システムコールAは、ベクタテーブルA(命令アドレスA)に対応付けられ、システムコールBは、ベクタテーブルB(命令アドレスB)に対応付けられている。
すなわち、各システムコール番号(1~N)各々に対して、2つの異なるベクタテーブルA,B(命令アドレスA,B)が対応付けられている。
【0100】
本開示の情報処理装置のOS(カーネル)は、アプリケーションから1つのシステムコール番号n(n=1~N)の呼び出しがあった場合、システムコールnに対応付けられた2つのベクタテーブル、すなわち2つの命令アドレスのいずれかを選択して実行する。
【0101】
ある1つのシステムコール番号nに対応付けられた2つのベクタテーブル、すなわち2つの命令アドレスに従って実行される処理は、基本的には同じ処理、すなわち、システムコール番号に対応付けられた処理が実行される。
【0102】
例えば、アプリケーションが、ハードウェア内の記憶部に格納されたファイルを開く処理、すなわち(ファイル・オープン)を行いたい場合、OS(カーネル)に対してシステムコール番号1を指定したシステムコール呼び出しを行う。
【0103】
OS(カーネル)は、このシステムコール番号1を指定したシステムコール呼び出しに対して、2つのシステムコールA,B(ベクタテーブルA,B)のいずれかを選択して処理を実行する。2つのシステムコールA,B(ベクタテーブルA,B)のいずれを選択した場合でも、基本的には同じ処理、すなわち、ファイル・オープン処理が実行される。
【0104】
しかし、システムコールA(ベクタテーブルA)を選択した場合のファイル・オープン処理と、システムコールB(ベクタテーブルB)を選択した場合のファイル・オープン処理では処理シーケンスが異なる。
【0105】
システムコールA(ベクタテーブルA)を選択した場合の処理は、安全性優先型処理として実行される。
一方、システムコールB(ベクタテーブルB)を選択した場合の処理は、速度優先型処理として実行される。
【0106】
システムコールA(ベクタテーブルA)を選択して実行される安全性優先型処理は、先に
図3を参照して説明したシーケンスとほぼ同様の処理であり、システムコール実行権限の確認処理ステップ(
図3のフローのステップS103)や、システムコールに従った処理の実行ステップ(
図3のフローのステップS106)の実行前後のキャッシャフラッシュ処理が実行される。
【0107】
一方、システムコールB(ベクタテーブルB)を選択して実行される速度優先型処理は、先に
図3を参照して説明したシーケンスと異なる処理となる。この場合、システムコール実行権限の確認処理ステップ(
図3のフローのステップS103)や、システムコールに従った処理の実行ステップ(
図3のフローのステップS106)の実行前後のキャッシャフラッシュ処理が省略される。
【0108】
このシステムコールB(ベクタテーブルB)を選択して実行される速度優先型処理では、システムコール実行権限確認処理や、キャッシュフラッシュ処理が省略されるため、システムコールに従ったデータ処理の処理完了までの時間が短縮される。すなわち処理速度が向上する。
【0109】
このように、OS(カーネル)は、あるシステムコール番号を指定したシステムコール呼び出しに対して、2つのシステムコールA,B(ベクタテーブルA,B)のいずれかを選択して処理を実行する。
【0110】
OS(カーネル)は、例えば、システムコール実行時に動作させるプロセスやデータの信頼性を検証し、信頼性が低いと判定される場合や、処理に利用するデータの機密性が高い場合などには、安全性優先型処理であるシステムコールA(ベクタテーブルA)を選択して実行する。
一方、動作させるプロセスやデータの信頼性が高いと判定される場合や、処理に利用するデータの機密性が低い場合などには、速度優先型処理であるシステムコールB(ベクタテーブルB)を選択して実行する。
【0111】
このような処理を行うことで、セキュリティ対策を行いつつも、CPUの高速動作を両立させる機能を実現する。
すなわち、例えばアプリケーションから1つのシステムコール番号nを指定したシステムコール呼び出しがあった場合、OS(カーネル)は、例えば動作させるプロセスやデータの信頼性や、データの機密性に応じて、
(a)安全性優先型処理であるシステムコールnA(ベクタテーブルnA)、または、
(b)速度優先型処理であるシステムコールnB(ベクタテーブルnB)、
これらのいずれかを選択して実行する。
【0112】
なお、1つのシステムコールに対する実際のシステムコールの数はA,B2つのみに限らず、3つ以上の個数としてもよい。安全性と速度のバランスを考慮した複数のシステムコールA,B,C,・・・が存在しえる。
【0113】
以下では、一例として、1つのシステムコール番号nに対して、
(a)安全性優先型処理であるシステムコールnA(ベクタテーブルnA)、
(b)速度優先型処理であるシステムコールnB(ベクタテーブルnB)、
この2種類のシステムコールが設定されている例について説明する。
【0114】
OS(カーネル)は、例えば、以下のような選択基準に従って、2つのシステムコールA,B(ベクタテーブルA,B)のいずれかを選択する。
【0115】
(基準1)システムに後から追加されたアプリケーション(プログラム)や、第三者によって提供されたプログラムからのシステムコール呼び出しに対しては、安全性優先型のシステムコールA(ベクタテーブルA)を選択する。
(基準2)例えばアプリケーション(プログラム)の実行するプロセスがシステムに組み込まれたコードであり、十分に信頼性が担保されていると判断できる場合には、速度優先型のシステムコールB(ベクタテーブルB)を選択する。
【0116】
上記は、プログラムの開発者や提供者に基づく選択基準の一例であるが、このような基準以外、例えば、アプリケーション(プログラム)が扱うデータの属性による選択処理も可能である。例えば、車載システムの場合、入力情報(自車センサ情報、車車間通信によって得られた情報、信頼できる中央サーバからの情報)による周辺環境認識、走行計画などの演算において、相手の信頼性に応じて、安全性優先型のシステムコールA(ベクタテーブルA)、または速度優先型のシステムコールB(ベクタテーブルB)のどちらを使うかを選択するといった処理も可能である。
【0117】
なお、OS(カーネル)は、アプリケーション(プログラム)から、あるシステムコール番号n(n=1~N)を指定したシステムコール呼び出しがあった場合に、そのシステムコール呼び出しに対して、2つのシステムコールA,B(ベクタテーブルA,B)のいずれを選択して実行するかについて、遂次、決定する処理を行う。
【0118】
OS(カーネル)は、システムコール呼び出しを行ったアプリケーション(プログラム)に対応する様々なパラメータを参照して、実行するシステムコールA,B(ベクタテーブルA,B)の選択処理を行う。
図7を参照して、OS(カーネル)が、システムコールA,B(ベクタテーブルA,B)を選択する際に参照するアプリケーション(プログラム)のパラメータと、パラメータに基づくシステムコールA,B(ベクタテーブルA,B)を選択する処理の具体例について説明する。
【0119】
OS(カーネル)が安全性優先型のシステムコールA(ベクタテーブルA)と、速度優先型のシステムコールB(ベクタテーブルB)のどちらを適用するかを決定する際に参照するアプリケーション(プログラム)対応のパラメータとして、
図7に示す以下のパラメータがある。
【0120】
(1)プログラム実行時のユーザ権限
(2)プログラム格納場所
(3)プログラムの署名コード
(4)ネットワーク通信を行うプログラムの場合の通信相手先のドメイン名、またはIPアドレス
(5)ファイルアクセス時のパス
(6)プロセスまたはプロセスグループの使用リソース(CPU、メモリ、ディスクI/O等)
(7)システム状態
(8)プログラムが実行された累積回数
(9)プログラム実行のタイミング
【0121】
以下、OS(カーネル)が各パラメータに基づいて、安全性優先型のシステムコールA(ベクタテーブルA)と、速度優先型のシステムコールB(ベクタテーブルB)のどちらを適用するかを決定する具体的な処理例について説明する。
【0122】
判定パラメータ=(1)プログラム実行時のユーザ権限
OS(カーネル)は、システムコール呼び出しの実行主体であるアプリケーションプログラムの実行時のユーザ権限を確認する。
【0123】
ユーザ権限が、システム以外の一般ユーザ(UNIX(登録商標)/Linux(登録商標)的にはrootユーザ以外)である場合には、安全性優先型のシステムコールA(ベクタテーブルA)を選択して実行する。
一方、ユーザ権限が、システム(UNIX(登録商標)/Linux(登録商標)的にはrootユーザ)である場合には、速度優先型のシステムコールB(ベクタテーブルB)を選択して実行する。
【0124】
判定パラメータ=(2)プログラム格納場所
OS(カーネル)は、システムコール呼び出しの実行主体であるアプリケーションプログラムの格納場所を確認する。
【0125】
格納場所に基づいて、アプリケーションプログラムが、後からプラグイン等の手段で追加されたソフトウェアであると判定された場合は、安全性優先型のシステムコールA(ベクタテーブルA)を選択して実行する。
一方、アプリケーションプログラムが、システムに最初からプリインストールされているソフトウェアである場合には、速度優先型のシステムコールB(ベクタテーブルB)を選択して実行する。
【0126】
判定パラメータ=(3)プログラムの署名コード
OS(カーネル)は、システムコール呼び出しの実行主体であるアプリケーションプログラムの開発者(ソフトウェア開発者)の署名コードを確認する。
【0127】
署名コードの確認に基づいて、アプリケーションプログラムの開発者(ソフトウェア開発者)の信頼性が確認できていないソフトウェアであると判定した場合は、安全性優先型のシステムコールA(ベクタテーブルA)を選択して実行する。
一方、アプリケーションプログラムの開発者(ソフトウェア開発者)の信頼性が確認できているソフトウェアであると判定した場合は、速度優先型のシステムコールB(ベクタテーブルB)を選択して実行する。
【0128】
判定パラメータ=(4)ネットワーク通信を行うプログラムの場合の通信相手先のドメイン名、またはIPアドレス
OS(カーネル)は、システムコール呼び出しの実行主体であるアプリケーションプログラムが、ネットワーク通信を行うプログラムの場合、通信相手先のドメイン名、またはIPアドレスを確認する。
【0129】
通信相手が、予め設定済み相手先確認等で信頼性を担保できていない通信相手であると確認された場合には、安全性優先型のシステムコールA(ベクタテーブルA)を選択して実行する。
一方、通信相手が、予め設定済み相手先確認等で信頼性を担保できている通信相手であると確認した場合には、速度優先型のシステムコールB(ベクタテーブルB)を選択して実行する。
【0130】
判定パラメータ=(5)ファイルアクセス時のパス
OS(カーネル)は、システムコール呼び出しの実行主体であるアプリケーションプログラムが利用するファイルアクセス時のパスを確認する。
【0131】
ファイルアクセス時のパスが、予め規定された特定のシステム領域の場合には、安全性優先型のシステムコールA(ベクタテーブルA)を選択して実行する。
一方、ファイルアクセス時のパスが、予め規定された特定のシステム領域以外の一般領域の場合には、速度優先型のシステムコールB(ベクタテーブルB)を選択して実行する。
【0132】
判定パラメータ=(6)プロセスまたはプロセスグループの使用リソース(CPU、メモリ、ディスクI/O等)
OS(カーネル)は、システムコール呼び出しの実行主体であるアプリケーションプログラムの実行するプロセスまたはプロセスグループの使用リソース(CPU、メモリ、ディスクI/O等)を確認する。
【0133】
OS(カーネル)は、この使用リソースの確認結果に基づいて、安全性優先型のシステムコールA(ベクタテーブルA)か、速度優先型のシステムコールB(ベクタテーブルB)のいずれかを選択して実行する。
この選択処理は、ユースケースによって異なる選択処理となる。
【0134】
例えば使用リソースが一定値以下の場合はキャッシュフラッシュなどを行う安全性優先型のシステムコールA(ベクタテーブルA)を実行する余裕がある、逆に一定値以上の場合は余裕がないために速度優先型のシステムコールB(ベクタテーブルB)を実行する。
ただし、この場合、故意にシステムリソースを占有するプログラムが動いていた場合に上記判定を行うと脆弱性が危惧される可能性があるため、逆の判定を行い、リソースが一定値以下の場合は、速度優先型のシステムコールB(ベクタテーブルB)を実行し、一定値以上の場合は安全性優先型システムコールA(ベクタテーブルA)をを実行する等、ユースケースに応じた処理を行う。
【0135】
判定パラメータ=(7)システム状態
OS(カーネル)は、システムコール呼び出しがなされた際のシステム状態を確認する。
具体的には、
CPUの処理負荷が一定値以上であるか、または一定値以下であるか、
システムの温度が一定値以上であるか、または一定値以下であるか、
システムの電源容量(バッテリ残容量)が一定値以上であるか、または一定値以下であるか、
これらを確認する。
【0136】
OS(カーネル)は、このシステム状態の確認結果に基づいて、安全性優先型のシステムコールA(ベクタテーブルA)か、速度優先型のシステムコールB(ベクタテーブルB)のいずれかを選択して実行する。
この場合の選択処理は、上記の判定パラメータ=(6)プロセスまたはプロセスグループの使用リソース(CPU、メモリ、ディスクI/O等)の場合と同様、ユースケースによって異なる選択処理となる。
【0137】
判定パラメータ=(8)プログラムが実行された累積回数
OS(カーネル)は、システムコール呼び出しの実行主体であるアプリケーションプログラムが実行された累積回数を確認する。
【0138】
累積回数が一定値以下の場合には、安全性優先型のシステムコールA(ベクタテーブルA)を選択して実行する。
一方、累積回数が一定値以上の場合には、速度優先型のシステムコールB(ベクタテーブルB)を選択して実行する。
【0139】
これは、実行累積回数が一定値以上あるプログラムが正常に動作しているということは、そのプログラムの安全性が高いと判断可能であるためである。この場合には、速度優先型のシステムコールB(ベクタテーブルB)を選択して実行する。
【0140】
判定パラメータ=(9)プログラム実行のタイミング
OS(カーネル)は、システムコール呼び出しの実行主体であるアプリケーションプログラムの実行タイミングを確認する。
【0141】
実行タイミングが乱数で生成されたタイミング期間内である場合は、安全性優先型のシステムコールA(ベクタテーブルA)を選択して実行する。
一方、実行タイミングが乱数で生成されたタイミング期間内と異なるタイミングの場合には、速度優先型のシステムコールB(ベクタテーブルB)を選択して実行する。
【0142】
この判定パラメータ=(9)プログラム実行のタイミングを利用した選択処理は、上述した判定パラメータ=(8)プログラムが実行された累積回数に基づく選択処理の補完的な判定処理として実行する。
判定パラメータ=(8)プログラムが実行された累積回数のみで判断すると、プログラム自体が回数によって悪意のあるコード実行を隠蔽して実行しない、または実行するような高度な切り替えが行われていた場合、安全性が担保できない。そのため、システム側で乱数に基づくタイミングによって実行判断を行うものである。
【0143】
以上、
図7を参照して説明したように、OS(カーネル)は、システムコール呼び出しを行ったアプリケーション(プログラム)に対応する様々なパラメータを参照して、実行するシステムコール(ベクタテーブル)の選択処理を行う。
【0144】
このように、本開示の情報処理装置は、1つのシステムコール番号に対して、2つのシステムコール(ベクタテーブル)、すなわち、
(a)安全性優先型のシステムコールA(ベクタテーブルA)、
(b)速度優先型のシステムコールB(ベクタテーブルB)、
上記(a),(b)の2種類のシステムコールを選択的に実行可能とした構成を有する。
【0145】
本開示の情報処理装置のデータ処理部、すなわちOS(カーネル)は、システムコール呼び出し元のアプリケーションプログラムの信頼性や、システムコールに従ったデータ処理に利用するデータの信頼性や機密性、あるいはシステム(情報処理装置)の状況などに応じて、
(a)安全性優先型のシステムコールA(ベクタテーブルA)、
(b)速度優先型のシステムコールB(ベクタテーブルB)、
上記(a),(b)の2種類のシステムコールのいずれかのシステムコールを選択的に実行する。
【0146】
例えば、システムコール呼び出し元のアプリケーションプログラムの信頼性や、処理に利用するデータの信頼性が低い場合や、処理に利用するデータの機密性が高い場合などには、「(a)安全性優先型のシステムコールA(ベクタテーブルA)」を選択して実行する。
【0147】
一方、システムコール呼び出し元のアプリケーションプログラムの信頼性や、処理に利用するデータの信頼性や機密性が高い場合や、処理に利用するデータの機密性が低い場合などには、には、「(b)速度優先型のシステムコールB(ベクタテーブルB)」を選択して実行する。
【0148】
なお、詳細については後段で説明するが、「(b)速度優先型のシステムコールB(ベクタテーブルB)」を実行した場合、高速処理が可能となり、処理効率を向上させることができる。
【0149】
[5.本開示の情報処理装置が実行する処理のシーケンスについて]
次に、本開示の情報処理装置が実行する処理のシーケンスについて説明する。
【0150】
図8以下に示すフローチャートを参照して、開示の情報処理装置が実行する処理のシーケンスについて説明する。
図8以下に示すフローチャートに従った処理は、情報処理装置100のデータ処理部が記憶部に格納されたプログラムに従って実行する。データ処理部とは、具体的には、主に
図5に示すOS(カーネル)レイヤである。処理を実行するハードウェアは主としてHWレイヤのCPUである。
【0151】
なお、
図8以下に示すフローチャートには、各ステップの処理を実行する際のOS(カーネル)レイヤの実行空間もフローの各ステップに並列に示している。具体的には、フロー中の各ステップの処理が、通常のアプリケーション処理であるユーザレベルの処理を実行するユーザ空間での処理であるか、特権レベルのカーネル空間で行われる処理であるかを示している。
まず、
図8に示すフローの各ステップの処理について、順次、説明する。
【0152】
(ステップS201)
まず、ステップS201において、アプリケーションレイヤで処理を実行するアプリケーション(プログラム)が1つのシステムコール番号であるシステムコールn(n=1~Nのいずれか)を指定したシステムコール呼び出しを行う。
【0153】
このシステムコール呼び出しは、前述したように、例えば割り込み処理、または専用命令を用いて行われる。
【0154】
(ステップS202)
次に、ステップS202において、OS(カーネル)は、アプリケーション(プログラム)によるシステムコール番号nを指定したシステムコールを入力し、仮想システムコールnの開始準備処理を行う。例えば、仮想システムコールnのエントリポイント設定処理等を行う。
【0155】
なお、システムコール番号nを指定した場合、実行される可能性のあるシステムコールにはシステムコールnAとシステムコールnBが含まれる。すなわち、
(a)安全性優先型のシステムコールnA(ベクタテーブルnA)、
(b)速度優先型のシステムコールnB(ベクタテーブルnB)、
これら2つのシステムコールが実行可能性のあるシステムコールとして含まれている。
【0156】
これら2つのシステムコールを含むシステムコールを仮想システムコールnとする。
この段階では、まだ、システムコールnAとシステムコールnBのいずれを実行するかが決定されていない。
【0157】
(ステップS203)
次に、OS(カーネル)は、ステップS203において、システムコールnの呼び出し元であるアプリケーションプログラムやシステム(情報処理装置)状況などのパラメータを取得する。
【0158】
このパラメータは、先に
図7を参照して説明した判定パラメータである。すなわち、OS(カーネル)が安全性優先型のシステムコールA(ベクタテーブルA)と、速度優先型のシステムコールB(ベクタテーブルB)のどちらを実行するかを決定する際に参照するアプリケーションプログラムやシステム(情報処理装置)状況などのパラメータである。
【0159】
OS(カーネル)、先に
図7を参照して説明したように、以下の各パラメータを取得する。
(1)プログラム実行時のユーザ権限
(2)プログラム格納場所
(3)プログラムの署名コード
(4)ネットワーク通信を行うプログラムの場合の通信相手先のドメイン名、またはIPアドレス
(5)ファイルアクセス時のパス
(6)プロセスまたはプロセスグループの使用リソース(CPU、メモリ、ディスクI/O等)
(7)システム状態
(8)プログラムが実行された累積回数
(9)プログラム実行のタイミング
【0160】
(ステップS204)
次に、OS(カーネル)は、ステップS204において、ステップS203で取得したパラメータに基づいて、
システムコールの実行権限の有無の確認を行い、実行権限があると確認された場合には、さらに、
(a)安全性優先型のシステムコールA(ベクタテーブルA)を実行するか、または、
(b)速度優先型のシステムコールB(ベクタテーブルB)を実行するか、
上記(a),(b)のいずれを実行するかを決定する。
【0161】
前述したように、システムコールは、カーネル内の高い特権レベルのコードによって実行されるので、処理開始前にシステムコールの実行権限確認が行われる。
なお、このステップで実行する実行権限確認処理は、システムコールnAとシステムコールnBを実行可能性のあるシステムコールとして含む仮想システムコールnの実行権限確認処理である。
仮想システムコールnの実行権限が無いと判定した場合は、ステップS205に進む。
【0162】
システムコールの実行権限ありと確認された場合に限り、OS(カーネル)は、
(a)安全性優先型のシステムコールnA(ベクタテーブルnA)を実行するか、または、
(b)速度優先型のシステムコールnB(ベクタテーブルnB)を実行するか、
上記(a),(b)のいずれを実行するかを決定する。
この決定処理は、ステップS203で取得したパラメータに基づいて実行する。
具体的な決定処理は、先に
図7を参照して説明した通りである。
【0163】
OS(カーネル)が、ステップS203で取得したパラメータに基づいて、「(a)安全性優先型のシステムコールnA(ベクタテーブルnA)を実行する」と判定した場合は、ステップS301に進む。
一方、OS(カーネル)が、ステップS203で取得したパラメータに基づいて、「(b)速度優先型のシステムコールnB(ベクタテーブルnB)を実行する」と判定した場合は、ステップS401に進む。
【0164】
(ステップS205)
ステップS204において、OS(カーネル)が、システムコールの実行権限か無いと判定した場合は、ステップS205に進む。
この場合は、実行エラーとして処理を終了する。すなわち、システムコールnAもシステムコールnBのいずれも実行されない。
【0165】
次に、ステップS204において、OS(カーネル)が、ステップS203で取得したパラメータに基づいて、「(a)安全性優先型のシステムコールnA(ベクタテーブルnA)を実行する」と判定した場合の処理、すなわち、ステップS301以降の処理について、
図9に示すフローチャートを参照して説明する。
【0166】
図9に示すフローチャートは、
(a)安全性優先型のシステムコールnA(ベクタテーブルnA)
を実行する際の処理シーケンスである。
この処理シーケンスは、基本的に、先に
図3を参照して説明した処理シーケンスと同様である。
すなわち、システムコール実行権限の確認処理ステップや、システムコールに従った処理の実行ステップの実行前後のキャッシャフラッシュ処理が実行される。
以下、
図9に示すフローチャートの各ステップの処理について、順次、説明する。
【0167】
(ステップS301)
まず、OS(カーネル)は、ステップS301において、CPU特権レベルへの遷移処理を実行する。前述したように、CPUは、システムコール呼び出し処理に応じて、アプリによる通常のデータ処理を行うユーザレベルから、OS(カーネル)によるリソース制御を実行させるための特権レベルに遷移する。
【0168】
(ステップS302)
次に、OS(カーネル)は、ステップS302において、システムコールnAの実行権限の確認を行う。
前述したように、システムコールに従った処理、すなわちハードウェアへのアクセス等の処理は、カーネル内の高い特権レベルのコードによって実行されるので、処理開始前にシステムコールの実行権限確認や、引数パラメータのチェックが厳密に行われる。
【0169】
このチェックでシステムコールnAの実行権限がないと判断されるか、引数パラメータが不正な値であった場合は、ステップS302の判定はNoとなり、ステップS303に進む。
一方、ステップS302の実行権限確認処理において、システムコールnAの実行権限があると判断され、引数パラメータが正しい値であると判断された場合は、ステップS302の判定はYesとなり、ステップS304に進む。
【0170】
(ステップS303)
ステップS302におけるシステムコールnAの実行権限確認や、引数パラメータのチェックにおいて、実行権限がないと判断されるか、引数パラメータが不正な値であった場合は、ステップS302の判定はNoとなり、ステップS303に進む。
【0171】
この場合、ステップS303において、実行エラーとなる。すなわち、システムコールnAに従った処理は実行されず、処理が終了する。
【0172】
(ステップS304)
一方、ステップS302におけるシステムコールnAの実行権限確認や、引数パラメータのチェックにおいて、実行権限があり、引数パラメータが正しい値であったと判定した場合は、ステップS302の判定はYesとなり、ステップS304に進む。
【0173】
この場合、ステップS304において、まず、キャッシュフラッシュが行われる。すなわち、システムコールnAに従った処理、例えばファイル・オープンやファイル・リードや、ファイル・ライト等の処理のために利用するキャッシュメモリに残存するデータを消去するためのキャッシュフラッシュ処理を実行する。
【0174】
(ステップS305)
次に、キャッシュフラッシュ処理後のキャッシュを利用して、システムコールnAに従った処理、すなわち、安全性優先型のシステムコールnAが実行される。例えばファイル・オープンやファイル・リードや、ファイル・ライト等の処理を実行する。
【0175】
(ステップS306)
ステップS305において、システムコールに従った処理、例えばファイル・オープンやファイル・リードや、ファイル・ライト等の処理が完了すると、ステップS306において、処理に利用したキャッシュに対して、再度、キャッシュフララッシュ処理を実行する。
【0176】
この処理により、キャッシュに記録されたデータが消去されることになり、後続する他のプロセスがキャッシュからデータを読み取るといった不正処理やデータ漏洩を防止することが可能となる。
【0177】
(ステップS307)
最後に、ステップS307において、CPU特権レベルからユーザレベルへの遷移処理が実行される。このレベル遷移により、アプリによる通常のデータ処理を行うユーザレベルへの遷移が行われる。
【0178】
この
図9に示すフローに従った処理において、ステップS304やステップS306において実行するキャッシュフラッシュ処理は、キャッシュに読み込まれたデータが、前後して実行されるその他のプロセスによって不正に読み取られ、漏洩することを防止するための処理である。
【0179】
すなわち、先に説明した不可侵領域内の機密データに対する不正アクセス手法の代表的手法、すなわち、
(1)コード名=Spectre(スペクター)
(2)コード名=Meltdown(メルトダウン)
これらの手法による機密データの不正読み取りを防止するための処理として、
図9に示すフローのステップS304やステップS306において実行するキャッシュフラッシュ処理が有効となる。
しかし、このようなキャッシュフラッシュ処理を行うことにより、処理速度の低下という問題が発生する。
【0180】
次に、
図8に示すフローチャートのステップS204において、OS(カーネル)が、ステップS203で取得したパラメータに基づいて、「(b)速度優先型のシステムコールnB(ベクタテーブルnB)を実行する」と判定した場合の処理、すなわち、ステップS401以降の処理について、
図10に示すフローチャートを参照して説明する。
【0181】
図10に示すフローチャートは、
(b)速度優先型のシステムコールnB(ベクタテーブルnB)
を実行する際の処理シーケンスである。
この処理シーケンスは、基本的に、先に
図3を参照して説明した処理シーケンスとは大きく異なる。
【0182】
すなわち、システムコール実行権限の確認処理ステップや、システムコールに従った処理の実行ステップの実行前後のキャッシャフラッシュ処理が省略される。
このような処理が省略されることでシステムコール対応のデータ処理が速く完了する。すなわち処理速度が向上する。
【0183】
以下、
図10に示すフローチャートの各ステップの処理について、順次、説明する。
(ステップS401)
まず、OS(カーネル)は、ステップS401において、CPU特権レベルへの遷移処理を実行する。前述したように、CPUは、システムコール呼び出し処理に応じて、アプリによる通常のデータ処理を行うユーザレベルから、OS(カーネル)によるリソース制御を実行させるための特権レベルに遷移する。
【0184】
(ステップS402)
次に、システムコールnBに従った処理、すなわち、速度優先型のシステムコールnBが実行される。例えばファイル・オープンやファイル・リードや、ファイル・ライト等の処理を実行する。
【0185】
(ステップS403)
最後に、ステップS403において、CPU特権レベルからユーザレベルへの遷移処理が実行される。このレベル遷移により、アプリによる通常のデータ処理を行うユーザレベルへの遷移が行われる。
【0186】
この
図10に示すフローに従った速度優先型のシステムコールnBの実行処理は、先に
図9を参照して説明した安全性優先型のシステムコールnAの処理と異なり、システムコールnBの実行権限確認処理や、システムコールnBの実行ステップであるステップS402の処理前後のキャッシュフラッシュ処理が実行されない。
従って、システムコール対応のデータ処理が速く完了し、処理速度が向上する。
【0187】
なお、
図10に示す例では、速度優先型のシステムコールnBの実行処理として、システムコールnBの実行権限確認処理と、システムコールnBの実行ステップであるステップS402の処理前後のキャッシュフラッシュ処理の双方を省略したシーケンスとしているが、この他の処理シーケンスとして実行することも可能である。
【0188】
例えば、
図11に示すフローは、
図10に示すフローに、ステップS421とステップS422を追加したフローである。
すなわち、システムコールnBの実行権限確認処理を実行し、システムコールnBの実行ステップであるステップS402の処理前後のキャッシュフラッシュ処理のみ省略したシーケンスとしている。
このような処理シーケンスを実行する設定としてもよい。
【0189】
また、
図12に示すフローは、
図10に示すフローに、ステップS431とステップS432を追加したフローである。
すなわち、システムコールnBの実行権限確認処理は省略し、システムコールnBの実行ステップであるステップS402の処理前後のキャッシュフラッシュ処理については実行するシーケンスとしている。
このような処理シーケンスを実行する設定としてもよい。
【0190】
また、
図13に示すフローは、
図10に示すフローに、ステップS441を追加したフローである。
すなわち、システムコールnBの実行権限確認処理と、システムコールnBの実行ステップであるステップS402の処理後のキャッシュフラッシュ処理を省略し、システムコールnBの実行ステップであるステップS402の処理前のキャッシュフラッシュ処理のみを実行するシーケンスとしている。
このような処理シーケンスを実行する設定としてもよい。
【0191】
また、
図14に示すフローは、
図10に示すフローに、ステップS451を追加したフローである。
すなわち、システムコールnBの実行権限確認処理と、システムコールnBの実行ステップであるステップS402の処理前のキャッシュフラッシュ処理を省略し、システムコールnBの実行ステップであるステップS402の処理後のキャッシュフラッシュ処理のみを実行するシーケンスとしている。
このような処理シーケンスを実行する設定としてもよい。
【0192】
また、上述した実施例では、システムコールを2種類、すなわち、
(a)安全性優先型のシステムコールA(ベクタテーブルA)、
(b)速度優先型のシステムコールB(ベクタテーブルB)、
上記(a),(b)の2種類のシステムコールを設定して選択的に実行する構成として説明した。
【0193】
さらに、例えば1つのシステムコール番号n(n=1~N)に対して3種類以上のシステムコール(ベクタテーブル)を対応付けて、3種類以上のシステムコールから実行するシステムコールを選択して実行する構成としてもよい。
【0194】
例えば、1つのシステムコール番号nに対応するシステムコールnに対して、6種類のシステムコールA,B,C,D,E,Fを設定する。すなわち、
システムコールnA、
システムコールnB、
システムコールnC、
システムコールnD、
システムコールnE、
システムコールnF、
1つのシステムコール番号nにこれら6種類のシステムコールを対応づける。
【0195】
OS(カーネル)はこれら6つのシステムコールから、いずれか1つを選択して実行する。
例えばシステムコールnAを選択した場合は、
図9に示すフローに従った処理を実行する。
システムコールnBを選択した場合は、
図10に示すフローに従った処理を実行する。
システムコールnCを選択した場合は、
図11に示すフローに従った処理を実行する。
システムコールnDを選択した場合は、
図12に示すフローに従った処理を実行する。
システムコールnEを選択した場合は、
図13に示すフローに従った処理を実行する。
システムコールnFを選択した場合は、
図14に示すフローに従った処理を実行する。
例えば、このような処理を行う構成としてもよい。
【0196】
[6.その他の実施例、応用例について]
次に、その他の実施例、応用例について説明する。
【0197】
上述した実施例では、1つのシステムコール番号nに対して、2つのシステムコール、すなわち、
(a)安全性優先型のシステムコールnA(ベクタテーブルnA)、
(b)速度優先型のシステムコールnB(ベクタテーブルnB)、
上記(a),(b)の2種類のシステムコールを設定し、OS(カーネル)が、システムコール呼び出し元のアプリケーションプログラムの信頼性や、処理に利用するデータの信頼性、機密性、あるいはシステム(情報処理装置)の状況などに応じて、どちらかのシステムコールを選択的に実行する構成として説明した。
【0198】
例えば、システムコール呼び出し元のアプリケーションプログラムの信頼性や、処理に利用するデータの信頼性が低い場合や、処理に利用するデータの機密性が高い場合などには、「(a)安全性優先型のシステムコールA(ベクタテーブルA)」を選択して実行する。
一方、システムコール呼び出し元のアプリケーションプログラムの信頼性や、処理に利用するデータの信頼性が高い場合や、処理に利用するデータの機密性が低い場合などには、には、「(b)速度優先型のシステムコールB(ベクタテーブルB)」を選択して実行する。
上述したように、「(b)速度優先型のシステムコールB(ベクタテーブルB)」を実行した場合、高速処理が可能となり、処理効率を向上させることができる。
【0199】
このように、上述した実施例では、OS(カーネル)が、システムコール呼び出し元のアプリケーションプログラムの信頼性や、処理に利用するデータの信頼性、機密性、あるいはシステム(情報処理装置)の状況などに応じて、2つ、または3つ以上のシステムコールから1つを選択して実行する構成として説明した。
【0200】
その他、例えば、プログラムやデータの信頼性に関して、1から100といったレベル分けを行い、レベル1を最高信頼度、レベル100を最低信頼度とする。その信頼度に応じて、段階的にシステムコールのチェック強度を変化させるといった処理を行う構成としてもよい。
【0201】
さらに、システム(情報処理装置)負荷が高くなり、演算能力が不足する可能性が出た場合、低信頼度のプログラムにおいても、一時的にシステムコールのチェックを緩和させることで、演算処理量低下を最小限にすることで、全体としての処理能力を維持する。システムの負荷が元に戻った場合、そのシステムコールの緩和も元に戻すといった処理を行う構成としてもよい。
【0202】
また、システムの負荷が高くなり、CPUの温度上昇が検出された場合、一時的にシステムコールのチェックを緩和させることで、CPU負荷を下げ、温度上昇を抑える。CPUの温度が戻った場合、そのシステムコールの緩和も元に戻すといった処理を行う構成としてもよい。
【0203】
さらに、システムのバッテリ容量低下や電力不足の傾向が検出された場合、一時的にシステムコールのチェックを緩和させることで、消費電力を下げ、電力不足を防ぐ。バッテリ容量回復や電力不足が回復した場合、そのシステムコールの緩和も元に戻すといった処理を行う構成としてもよい。
【0204】
[7.情報処理装置の構成例について]
次に、
図15を参照して上述した実施例に従った処理を実行する情報処理装置のハードウェア構成例について説明する。
【0205】
以下、
図15に示す情報処理装置300は、上述した実施例において説明した
図4に示す情報処理装置100の全体構成の一例を示す情報処理装置である。情報処理装置300を構成する各構成要素について説明する。
マルチコア301は、複数のコア(CPU:Central Processing Unit)によって構成される。マルチコア301は、
図11に示すようにコア1(CPU1)351、コア2(CPU2)352、コア3(CPU3)353等、最小でも2つ以上のコアを有する。
【0206】
これらの複数のコア(CPU)では、例えば、ROM(Read Only Memory)303、または記憶部309に記憶されているプログラムに従った様々な処理が実行される。
【0207】
ROM(Read Only Memory)303は、マルチコア301やGPU302が実行するプログラムやパラメータ等の記憶領域として利用される。
RAM(Random Access Memory)304は、マルチコア301やGPU302が実行する処理のワークエリア、パラメータ記憶領域、その他のデータの記録領域等として利用される。
これら、マルチコア301、GPU302、ROM303、およびRAM304は、バス305により相互に接続されている。
【0208】
マルチコア301やGPU302等はバス305を介して入出力インタフェース306に接続され、入出力インタフェース306には、各種スイッチ、キーボード、タッチパネル、マウス、マイクロフォン、さらに、センサ、カメラ等のデータ取得部などよりなる入力部307、モニタ等のディスプレイ、スピーカなどよりなる出力部309が接続されている。
【0209】
マルチコア301は、入力部307から入力される指令や状況データ等を入力し、各種の処理を実行し、処理結果を例えば出力部308に出力する。
入出力インタフェース306に接続されている記憶部309は、例えばハードディスク等からなり、マルチコア301が実行するプログラムや各種のデータを記憶する。通信部310は、インターネットやローカルエリアネットワークなどのネットワークを介したデータ通信の送受信部として機能し、外部の装置と通信する。
【0210】
入出力インタフェース306に接続されているドライブ311は、磁気ディスク、光ディスク、光磁気ディスク、あるいはメモリカード等の半導体メモリなどのリムーバブルメディア312を駆動し、データの記録あるいは読み取りを実行する。
【0211】
[8.本開示の構成のまとめ]
以上、特定の実施例を参照しながら、本開示の実施例について詳解してきた。しかしながら、本開示の要旨を逸脱しない範囲で当業者が実施例の修正や代用を成し得ることは自明である。すなわち、例示という形態で本発明を開示してきたのであり、限定的に解釈されるべきではない。本開示の要旨を判断するためには、特許請求の範囲の欄を参酌すべきである。
【0212】
なお、本明細書において開示した技術は、以下のような構成をとることができる。
(1) アプリケーションからのハードウェア適用処理の実行要求であるシステムコール呼び出しに対して、システムコールの実行制御を行うデータ処理部を有し、
前記データ処理部は、前記システムコール呼び出しで指定された1つのシステムコール番号に対応付けられた複数のシステムコールから1つのシステムコールを選択して実行する情報処理装置。
【0213】
(2) 1つのシステムコール番号に対応付けられた複数のシステムコールには、少なくとも、
安全性優先型のデータ処理を実行するシステムコールAと、
速度優先型のデータ処理を実行するシステムコールBの2種類のシステムコールを含む(1)に記載の情報処理装置。
【0214】
(3) 前記安全性優先型のデータ処理を実行するシステムコールAは、
システムコールの実行権限確認処理と、
システムコール対応処理前後のキャッシャメモリフラッシュ処理を実行する処理シーケンスを有し、
前記速度優先型のデータ処理を実行するシステムコールBは、
システムコールの実行権限確認処理、または、
システムコール対応処理前後のキャッシャメモリフラッシュ処理の少なくともいずれかを省略した処理シーケンスを有する(2)に記載の情報処理装置。
【0215】
(4) 前記データ処理部は、
前記アプリケーションの信頼性に応じて実行するシステムコールを選択する構成であり、
前記アプリケーションの信頼性が低いと判定した場合は、
安全性優先型のデータ処理を実行するシステムコールAを実行し、
前記アプリケーションの信頼性が高いと判定した場合は、
速度優先型のデータ処理を実行するシステムコールBを実行する(1)~(3)いずれかに記載の情報処理装置。
【0216】
(5) 前記データ処理部は、
システムコール実行時に利用するデータの信頼性、または機密性の少なくともいずれかに応じて、実行するシステムコールを選択する(1)~(4)いずれかに記載の情報処理装置。
【0217】
(6) 前記データ処理部は、
システムコール実行時に利用するデータの信頼性、または機密性に応じて実行するシステムコールを選択する構成であり、
前記システムコール実行時に利用するデータの信頼性が低いと判定した場合、または前記システムコール実行時に利用するデータの機密性が高いと判定した場合は、
安全性優先型のデータ処理を実行するシステムコールAを実行し、
前記システムコール実行時に利用するデータの信頼性が高いと判定した場合、または前記システムコール実行時に利用するデータの機密性が低いと判定した場合は、
速度優先型のデータ処理を実行するシステムコールBを実行する(1)~(5)いずれかに記載の情報処理装置。
【0218】
(7) 前記データ処理部は、
前記システムコール実行時に通信する通信相手の信頼度に応じて実行するシステムコールを選択する(1)~(6)いずれかに記載の情報処理装置。
【0219】
(8) 前記データ処理部は、
前記システムコール実行時にアクセスするパスの信頼度に応じて実行するシステムコールを選択する(1)~(7)いずれかに記載の情報処理装置。
【0220】
(9) 前記データ処理部は、
前記アプリケーションプログラムの実行累積回数に応じて実行するシステムコールを選択する(1)~(8)いずれかに記載の情報処理装置。
【0221】
(10) 前記データ処理部は、
情報処理装置の状況に応じて実行するシステムコールを選択する(1)~(9)いずれかに記載の情報処理装置。
【0222】
(11) 前記データ処理部は、
前記システムコール実行時の情報処理装置のCPUの処理負荷、または、情報処理装置の温度、またはバッテリ残容量の少なくともいずれかの情報処理装置状況に応じて実行するシステムコールを選択する(1)~(10)いずれかに記載の情報処理装置。
【0223】
(12) 1つのシステムコール番号に対応付けられた複数のシステムコールの各々は、個別の異なる命令アドレスを格納した個別のベクタテーブルに対応付けられた構成である(1)~(11)いずれかに記載の情報処理装置。
【0224】
(13) 情報処理装置において実行する情報処理方法であり、
前記情報処理装置は、アプリケーションからのハードウェア適用処理の実行要求であるシステムコール呼び出しに対して、システムコールの実行制御を行うデータ処理部を有し、
前記データ処理部が、前記システムコール呼び出しで指定された1つのシステムコール番号に対応付けられた複数のシステムコールから1つのシステムコールを選択して実行する情報処理方法。
【0225】
(14) 情報処理装置において情報処理を実行させるプログラムであり、
前記情報処理装置は、アプリケーションからのハードウェア適用処理の実行要求であるシステムコール呼び出しに対して、システムコールの実行制御を行うデータ処理部を有し、
前記プログラムは、前記データ処理部に、前記システムコール呼び出しで指定された1つのシステムコール番号に対応付けられた複数のシステムコールから1つのシステムコールを選択して実行させるプログラム。
【0226】
明細書中において説明した一連の処理はハードウェア、またはソフトウェア、あるいは両者の複合構成によって実行することが可能である。ソフトウェアによる処理を実行する場合は、処理シーケンスを記録したプログラムを、専用のハードウェアに組み込まれたコンピュータ内のメモリにインストールして実行させるか、あるいは、各種処理が実行可能な汎用コンピュータにプログラムをインストールして実行させることが可能である。例えば、プログラムは記録媒体に予め記録しておくことができる。記録媒体からコンピュータにインストールする他、LAN(Local Area Network)、インターネットといったネットワークを介してプログラムを受信し、内蔵するハードディスク等の記録媒体にインストールすることができる。
【0227】
なお、明細書に記載された各種の処理は、記載に従って時系列に実行されるのみならず、処理を実行する装置の処理能力あるいは必要に応じて並列的にあるいは個別に実行されてもよい。また、本明細書においてシステムとは、複数の装置の論理的集合構成であり、各構成の装置が同一筐体内にあるものには限らない。
【産業上の利用可能性】
【0228】
以上、説明したように、本開示の一実施例の構成によれば、セキュリティレベルを低下させることなく処理効率を向上させたシステムコール処理を実行する情報処理装置、情報処理方法が実現される。
具体的には、例えば、システムコールの実行制御を行うデータ処理部としてのカーネルが、システムコール呼び出し主体であるアプリや、処理データの信頼性を判定し、判定結果に応じて、安全性優先型のシステムコールAと、速度優先型のシステムコールBのいずれかを選択して実行する。安全性優先型のシステムコールAでは、システムコール実行権限確認やキャッシュフラッシュを実行するが、速度優先型のシステムコールBではこれらの処理を省略する。
本構成により、セキュリティレベルを低下させることなく処理効率を向上させたシステムコール処理を実行する情報処理装置、情報処理方法が実現される。
【符号の説明】
【0229】
100 情報処理装置
101 マルチコアCPU
102 RAM
103 ROM
104 記憶部
105 バス
300 情報処理装置
301 マルチコア
303 ROM
304 RAM
305 バス
306 入出力インタフェース
307 入力部
308 出力部
309 記憶部
310 通信部
311 ドライブ
312 リムーバブルメディア
351~353 コア(CPU)