JP2014110012A - 情報処理システム - Google Patents
情報処理システム Download PDFInfo
- Publication number
- JP2014110012A JP2014110012A JP2012265571A JP2012265571A JP2014110012A JP 2014110012 A JP2014110012 A JP 2014110012A JP 2012265571 A JP2012265571 A JP 2012265571A JP 2012265571 A JP2012265571 A JP 2012265571A JP 2014110012 A JP2014110012 A JP 2014110012A
- Authority
- JP
- Japan
- Prior art keywords
- cpu
- intermediate code
- instruction
- program
- information processing
- 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.)
- Pending
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
【課題】複数のOSを起動するシステムにおいて、OSの起動準備プログラムを格納するROM容量を削減する。
【解決手段】ROM101には、OSの改ざん検知を行う起動準備プログラムが、中間コードの形で格納される。命令変換部105(106)は、実行時に中間コードのプログラムを、CPU103(104)が実行可能な命令に変換する。CPU103(104)は、変換された命令により起動準備プログラムを実行し、改ざんが検知されなければ、CPU103(104)で実行されるOS109(110)を起動する。
【選択図】図1
【解決手段】ROM101には、OSの改ざん検知を行う起動準備プログラムが、中間コードの形で格納される。命令変換部105(106)は、実行時に中間コードのプログラムを、CPU103(104)が実行可能な命令に変換する。CPU103(104)は、変換された命令により起動準備プログラムを実行し、改ざんが検知されなければ、CPU103(104)で実行されるOS109(110)を起動する。
【選択図】図1
Description
本発明は、複数のOSを起動する情報処理システムに関する。
従来、正当なプログラムのみを実行させるために、書き換え不可能な不揮発メモリ(ROM)を使って、その中のプログラムから開始する手法や、複数のCPUを持つシステムにおいて、まず1つのCPUのみを動作させて、他のCPUが動作できるような環境を作った後に、他のCPUを起動させる手法がある(例えば、特許文献1を参照)。
また、異なる命令を実行するCPUにおいて、中間コードをメモリに保持しておき、実行時に各CPUの命令に変換しながら実行する手法(JavaのJITコンパイルなど)もある。
複数のOSを安全に起動するためには、それぞれのOSの起動準備(起動対象の改ざんのチェックなど)を行う必要がある。しかし、異なる命令を実行するCPU上で、複数のOSを起動する場合、CPUに合わせた複数のOSの起動準備プログラムを必要とするため、ROM容量のサイズが大きくなる問題がある。
本発明は上記した課題に鑑みてなされたもので、
本発明の目的は、複数のOSを起動するシステムにおいて、OSの起動準備プログラムを格納するROM容量を削減した情報処理システムを提供することにある。
本発明の目的は、複数のOSを起動するシステムにおいて、OSの起動準備プログラムを格納するROM容量を削減した情報処理システムを提供することにある。
本発明は、異なる命令を実行する複数の処理手段と、前記各処理手段により実行されるそれぞれ異なる制御プログラムを格納した第1の記憶手段と、前記複数の処理手段が共通に使用する起動準備プログラムを中間コードで格納した第2の記憶手段と、前記中間コードを前記各処理手段の命令に変換する変換手段を備え、前記各処理手段は前記変換された命令を実行し、所定の条件を満たしたとき、前記各処理手段により実行される制御プログラムを起動することを最も主要な特徴とする。
本発明によれば、複数のCPUが共通に使用するOSの起動準備プログラムを中間コードでROMに格納しているので、少ないROM容量でOSの起動準備とOSの起動を行うことができる。
以下、発明の実施の形態について図面により詳細に説明する。本発明では、OSの起動準備を行うプログラムを中間コードとしてROMに格納しておき、複数のCPUを持つシステムにおいて、各CPUで実行できる命令に変換して、2次記憶のOSの起動準備を行い、複数のOSを起動する。
図1は、本発明の実施例に係る情報処理システムの構成を示す。図1において、101はROM(記憶手段)、102はOSの起動準備プログラム、103は第1のCPU(処理手段)、104は第2のCPU(処理手段)、105、106は命令変換部、107はRAM、108は2次記憶部、109は第1のCPU103で実行されるOS(制御プログラム)、110は第2のCPU104で実行されるOS(制御プログラム)である。
ROM101には、CPU103とCPU104のリセットベクタを割り当て、情報処理システムはパワーオンリセットでROM101から起動する。ただし、各CPUは直接ROM101へはアクセスできず、命令変換部105、106を介してアクセスする。
CPU103、104が共通に使用するOSの起動準備(実施例では、チェックサムによる検証)プログラム102は、CPU103、104に依存しない中間コードでROM101上に配置される。中間コードについては後述する。CPU103、CPU104は実行する命令セットが異なるもので構成する。命令変換部105、106は、中間コードをCPU103とCPU104が実行可能な命令に変換する。
RAM107は、プログラム実行時に使用するメモリである。各CPUから見えるメモリマップについては後述する。2次記憶部108には、改ざんのチェックを行う対象となるプログラムが配置されている。プログラムの配置場所は2次記憶の先頭から配置される。各CPUから見えるメモリマップについては後述する。
CPU103で実行されるOS109は、CPU103の命令形式で格納されるOSであり、CPU104で実行されるOS110は、CPU104の命令形式で格納されるOSである。
図2は、メモリマップを示す。メモリマップにある各CPUのアドレス配置をCPU103とCPU104で、CPUからのバスの接続をずらして設定する(各CPU用のRAMを配置する)ことにより、RAM領域を各CPUで競合なく使用できる。また、改ざん検知プログラムは、ROM上では中間コードの形で配置されるが、各CPUからアクセスすると変換されたプログラムとして読み出させる。
図3は、本発明の処理フローチャートを示す。ステップ1において、CPU103とCPU104は、リセットベクタが0x0000_0000に配置して、パワーオンリセット時に改ざん検知プログラムが動作するようにしておく。
ステップ2において、改ざん検知プログラムを実行する際には、CPU103では命令変換部105によって変換された命令を実行する。中間コードの変換方法は後述する。
ステップ3において、改ざん検知プログラムが2次記憶部108のプログラムの改ざん検知を行うが、メモリマップ上ではCPU103とCPU104では同じメモリアドレス上に配置するようにする。プログラムとしては同一アドレスになるため、アドレス変換なしで実行が可能である。改ざんの検知方法としては、本実施例では後述するように、チェックサムを用いる。
ステップ4において、ステップ3の改ざん検知プログラムが所定の条件として満たしたとき、つまり、改ざんが検知されなければ、2次記憶部108の対応するOSを起動する。
中間コードを各CPUの命令へ変換する方法を、図4(a)を用いて説明する。起動では、使用する命令が少ないことから、中間コードで使用する命令数を限定することで変換を効率化する。起動時では、浮動小数点演算などの高度な命令は必要とされず、基本的な命令である下記の命令を中間コードとして定義する。
・加算命令(減算は2の補数を用いて実現可能なので、加算のみで十分である)
・コピー命令(ハードウエアレジスタの書き込みや、RAMの初期化に用いる)
・論理演算(and,or,xor)(レジスタの初期化を行う際に、特定のビットを操作するために用いる)。
・加算命令(減算は2の補数を用いて実現可能なので、加算のみで十分である)
・コピー命令(ハードウエアレジスタの書き込みや、RAMの初期化に用いる)
・論理演算(and,or,xor)(レジスタの初期化を行う際に、特定のビットを操作するために用いる)。
中間コード201を、命令変換部105、106を用いて、対象のCPU103、104で実行可能な命令202に変換する。図4(b)は、中間コードをCPUの命令へ変換する方法を示す。変換方法としては、中間コードに対応する変換命令をルックアップテーブル105aで保持しておき、CPU103からのROM101へのアクセスによって、アクセス対象の中間コードをROM101から読み出し、読み出された中間コードを、ルックアップテーブル105aを参照してCPU103の命令へ変換し、内部RAM105bに展開し、変換後の命令をCPU103に返す。
図5は、第1のCPU用の中間コードの命令変換テーブルを示し、図6は、第2のCPU用の中間コードの命令変換テーブルを示す。実施例では、1つの中間コードを16ワード(1ワード=4バイト)のCPUの命令に変換する。CPUの命令は固定長サイズで変換することで、分岐などの対応が可能となる。変換後の命令が16ワードに満たない場合には、処理実行後に次命令へのジャンプ命令を挿入する。
図7(a)、(b)は、中間コードの書式を示す。図7(c)は、オペランドの書式を示す。1語の長さは64ビット、オペコードは4ビット、オペランド1は30ビット、オペランド2は30ビットである。先に示した中間コードでは、オペランドで2種類のデータを指定できるものがある。そのため、各オペランドを30ビットずつとして、すべての命令を表現できるビット幅とする。
32ビットアーキテクチャでは、メモリ空間が4GBとなるが、30ビットでは全領域をカバーすることができない。しかし、起動においては、必要なアドレスへのアクセスができればよいが、ROMやRAMのアドレスが連続しているとは限らない。そのため、typeに2ビットを割り当て、28ビットの領域を4つ指定することで、起動に必要なメモリ空間へのアクセスを行う。typeには、メモリマップ上の領域タイプを指定し、各ベースアドレスからのオフセットを定数で指定する。
・00:ROM_DATA相対
・01:RAM_DATA相対
・10:STORAGE_DATA相対
上記のメモリ領域タイプと28ビットのオフセットで、領域タイプごとに256MBまでのアドレス領域を確保する。
・01:RAM_DATA相対
・10:STORAGE_DATA相対
上記のメモリ領域タイプと28ビットのオフセットで、領域タイプごとに256MBまでのアドレス領域を確保する。
図8は、本発明の起動準備方法の処理フローチャートを示す。上記した中間コードを用いて、チェックサムを用いた起動準備方法の例を示す。図3の処理フローチャートで示したステップ3の位置に該当する。
プログラムの開始アドレスを取得し(ステップ10)、読み出し完了サイズ、チェックサム値を初期化し(ステップ11、12)、起動対象のOSを32bit単位で桁上げなしで加算し(ステップ13)、その結果を比較する(ステップ16)。すなわち、STORAGE_DATAに予め計算したチェックサム値を格納しておき、起動準備の実行でチェックサムを計算した結果と比較する(ステップ16)。予め計算したチェックサム値と同じであれば、対象のOSにジャンプして起動する(ステップ17)。一致しなければエラーとなり、対象のOSを起動しない(ステップ18)。
図9は、データ配置と中間コードのプログラムを示す。図9に示す中間コードプログラムを、図7(a)、(b)に示す中間コード書式でROM101上に保持し、各CPUの命令へ変換して実行する。
以上説明したように、本発明では、異なる命令を実行する複数のCPUを持つシステムにおいて、安全に複数のOSを起動することができる。起動時のROMには、起動準備(改ざん検知など)プログラムが中間コードの形式で1つだけ格納される。中間コードの改ざん検知プログラムを、実行時に各CPUで実行可能な命令に変換することで、1つの起動準備プログラムにより複数のOSを起動させることができる。
なお、上記した実施例では、改ざんの検知として、チェックサムを用いたが、署名検証を用いてもよい。これにより、安全な改ざん検知を行うことができる。また、CPUが中間コードを直接実行できる構成を採るように変更することも可能である。これにより、命令変換部がCPU内にあるため、より少ないコストでシステムを構成できる。また、OSも中間コードで記述し、命令変換部を経由して実行される構成を採るように変更することも可能である。これにより、同一のOSを異なる命令セットを実行する複数のCPU上でも動作でき、より少ない2次記憶で構成できる。さらに、OSを記憶する記憶手段として、OSの起動準備プログラムと同じROMに配置するように構成してもよい。これにより、2次記憶部を使用せずに、より小さな構成により複数のCPUを起動することができる。
101 ROM
102 起動準備プログラム
103、104 CPU
105、106 命令変換部
107 RAM
108 2次記憶
109、110 OS
102 起動準備プログラム
103、104 CPU
105、106 命令変換部
107 RAM
108 2次記憶
109、110 OS
Claims (7)
- 異なる命令を実行する複数の処理手段と、前記各処理手段により実行されるそれぞれ異なる制御プログラムを格納した第1の記憶手段と、前記複数の処理手段が共通に使用する起動準備プログラムを中間コードで格納した第2の記憶手段と、前記中間コードを前記各処理手段の命令に変換する変換手段を備え、前記各処理手段は前記変換された命令を実行し、所定の条件を満たしたとき、前記各処理手段により実行される制御プログラムを起動することを特徴とする情報処理システム。
- 前記起動準備プログラムは、前記制御プログラムの改ざんを検知するプログラムであり、前記改ざんが検知されないことを前記所定の条件として満たしたとき、前記制御プログラムを起動することを特徴とする請求項1記載の情報処理システム。
- 前記改ざんの検知として、チェックサムを用いることを特徴とする請求項2記載の情報処理システム。
- 前記改ざんの検知として、署名検証を用いることを特徴とする請求項2記載の情報処理システム。
- 前記各処理手段は、前記中間コードを直接実行することを特徴とする請求項1記載の情報処理システム。
- 前記各処理手段により実行される前記制御プログラムを前記中間コードで記述することを特徴とする請求項1記載の情報処理システム。
- 前記各処理手段により実行される前記制御プログラムを前記第2の記憶手段に格納することを特徴とする請求項1記載の情報処理システム。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012265571A JP2014110012A (ja) | 2012-12-04 | 2012-12-04 | 情報処理システム |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012265571A JP2014110012A (ja) | 2012-12-04 | 2012-12-04 | 情報処理システム |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2014110012A true JP2014110012A (ja) | 2014-06-12 |
Family
ID=51030583
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2012265571A Pending JP2014110012A (ja) | 2012-12-04 | 2012-12-04 | 情報処理システム |
Country Status (1)
Country | Link |
---|---|
JP (1) | JP2014110012A (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2019203293A (ja) * | 2018-05-22 | 2019-11-28 | サンコーテクノ株式会社 | 金属拡張アンカー |
-
2012
- 2012-12-04 JP JP2012265571A patent/JP2014110012A/ja active Pending
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2019203293A (ja) * | 2018-05-22 | 2019-11-28 | サンコーテクノ株式会社 | 金属拡張アンカー |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103093150B (zh) | 一种基于可信芯片的动态完整性保护方法 | |
TWI578221B (zh) | 確認虛擬位址轉譯 | |
RU2629442C2 (ru) | Системы и способы предотвращения несанкционированного перемещения стека | |
TWI590096B (zh) | 來自程序的返回目標限制返回指令、處理器、方法、及系統 | |
US10146938B2 (en) | Method, apparatus and virtual machine for detecting malicious program | |
US20200326945A1 (en) | Fine grained control flow enforcement to mitigate malicious call/jump oriented programming | |
JP5307196B2 (ja) | シリコンに一体化されたコードのシステムへの提供 | |
US20160180095A1 (en) | Measured boot capability | |
US9652375B2 (en) | Multiple chunk support for memory corruption detection architectures | |
WO2009114961A1 (zh) | 一种支持x86虚拟机的risc处理器装置及方法 | |
US20100115202A1 (en) | Methods and systems for microcode patching | |
JP5703378B2 (ja) | アラインメント制御 | |
Tang et al. | Exploring control flow guard in windows 10 | |
BR112015022683B1 (pt) | Sistema de processamento e método de realização de uma operação de manipulação de dados | |
CN109271789B (zh) | 恶意进程检测方法、装置、电子设备及存储介质 | |
CN103793651A (zh) | 基于Xen虚拟化的内核完整性检测方法 | |
US7774587B2 (en) | Dynamic redundancy checker against fault injection | |
CN112685101B (zh) | 面向可信执行环境的***调用处理方法及装置 | |
JP2007206933A (ja) | 情報処理装置、情報処理装置におけるブートローダ生成方法およびプログラム転送方法 | |
US8621194B2 (en) | Processor NAND flash boot system and method | |
WO2018014687A1 (zh) | 一种参数传递方法、装置及计算机存储介质 | |
KR20220027965A (ko) | 펌웨어 롤백 방지 | |
JP2014110012A (ja) | 情報処理システム | |
KR101844095B1 (ko) | 부트로더 실행 방법 및 장치 | |
CN115994348A (zh) | 程序流水线的控制方法、处理装置和存储介质 |