(57)【要約】      （修正有）【課題】アプリケーションと計算機のＩＯ処理仕様が異なる場合でも、アプリケーションのソースを修正せずに、アプリケーションのＩＯ処理を計算機で実行すること。【解決手段】記憶デバイスと、演算装置と、アプリケーション管理部と、記憶デバイスに対するアクセスを制御するデバイス制御部を有し、アプリケーション管理部は、アプリケーションの命令コードから参照番地を抽出し、デバイス制御部で管理される実ＩＯ先頭論理番地と抽出した参照番地とを基に第一の実ＩＯ番地を算出し、第一の実ＩＯ番地を基に抽出した参照番地を書き換え、書き換え済みアプリケーションの命令コードから生成されるアクセス先に、デバイス制御部の実際のアクセス先を整合させるためのマップ処理を実行し、デバイス制御部は、アプリケーション管理部でマップ処理が実行されたことを条件に、書き換え済みアプリケーションの命令コードを基に記憶デバイスへのアクセスを実行する。【選択図】図１
2018151692.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションとプログラムを記憶する記憶装置と、データを記憶する記憶デバイスと、前記プログラムを基に情報を処理する演算装置とを有し、
前記プログラムは、
前記アプリケーションを管理するアプリケーション管理部と、前記記憶デバイスに対するアクセスを制御するデバイス制御部を含み、
前記アプリケーション管理部は、
前記アプリケーションの情報を読込み、前記読込んだ情報に属する命令コードのうちデータの書き込み先又は読込み先を特定する参照番地を前記命令コードから抽出し、
前記デバイス制御部のアクセス先を論理的に管理するための実ＩＯ先頭論理番地と前記抽出した参照番地とを基に、前記デバイス制御部の実際のアクセス先となる第一の実ＩＯ番地を算出し、
前記算出した第一の実ＩＯ番地を基に前記抽出した参照番地を書き換え、前記アプリケーションに代わるアプリケーションであって、前記書き換えられた参照番地を命令コードに含むアプリケーションを書き換え済みアプリケーションとして管理し、
前記書き換え済みアプリケーションに属する命令コードから生成されるアクセス先に、前記デバイス制御部の実際のアクセス先を整合させるためのマップ処理を実行し、
前記デバイス制御部は、
前記アプリケーション管理部で前記マップ処理が実行されたことを条件に、前記書き換え済みアプリケーションに属する命令コードを基に前記記憶デバイスに対するアクセスを実行することを特徴とする計算機。
【請求項２】
請求項１に記載の計算機において、
前記アプリケーション管理部は、
前記記憶装置の記憶領域の第一のメモリ番地に、前記実ＩＯ先頭論理番地の情報を保存し、前記実ＩＯ先頭論理番地の情報が保存された前記第一のメモリ番地を特定する第一の保存値に、当該第一の保存値から前記実ＩＯ先頭論理番地までの第一のオフセットを加算して第一の参照用メモリ番地を算出し、前記算出した第一の参照用メモリ番地と前記抽出した参照番地とから前記第一の実ＩＯ番地を算出することを特徴とする計算機。
【請求項３】
請求項１又は２に記載の計算機において、
前記アプリケーション管理部は、
前記マップ処理として、前記記憶装置の記憶領域のメモリ番地であって、前記書き換えられた参照番地に相当する第二のメモリ番地に、前記実ＩＯ先頭論理番地の情報を保存し、前記実ＩＯ先頭論理番地の情報が保存された前記第二のメモリ番地を特定する第二の保存値に、当該第二の保存値から前記実ＩＯ先頭論理番地までの第二のオフセットを加算して第二の参照用メモリ番地を算出し、前記算出した第二の参照用メモリ番地を基に前記デバイス制御部の実際のアクセス先となる第二の実ＩＯ番地を算出することを特徴とする計算機。
【請求項４】
請求項１〜３のうちいずれか１項に記載の計算機において、
前記記憶装置は、
前記アプリケーションを管理するためのリストであって、書き換え対象となる参照番地に関する情報を管理する変換対象命令リストを有し、
前記アプリケーション管理部は、
前記変換対象命令リストの情報と、前記アプリケーションから読込んだ情報とを比較して、前記アプリケーションの情報に属する命令コードの中から、前記書き換え対象となる参照番地を抽出することを特徴とする計算機。
【請求項５】
請求項４に記載の計算機において、
前記記憶装置は、
前記アプリケーションのアクセス先となるＩＯ空間先頭論理番地に関する情報を管理する管理テーブルを有し、
前記アプリケーション管理部は、
前記管理テーブルの情報と、前記抽出した書き換え対象となる参照番地とを比較して、前記抽出した書き換え対象となる参照番地と前記アプリケーションのアクセス先とが一致するか否かを判定することを特徴とする計算機。
【請求項６】
アプリケーションとプログラムを記憶する記憶装置と、データを記憶する記憶デバイスと、前記プログラムを基に情報を処理する演算装置とを有し、
前記プログラムは、
前記アプリケーションを管理するアプリケーション管理部と、前記記憶デバイスに対するアクセスを制御するデバイス制御部を含む計算機におけるアプリケーション管理方法であって、
前記アプリケーション管理部が、前記アプリケーションの情報を読込み、前記読込んだ情報に属する命令コードのうちデータの書き込み先又は読込み先を特定する参照番地を前記命令コードから抽出する第一のステップと、
前記アプリケーション管理部が、前記デバイス制御部のアクセス先を論理的に管理するための実ＩＯ先頭論理番地と前記第一のステップで抽出した参照番地とを基に、前記デバイス制御部の実際のアクセス先となる第一の実ＩＯ番地を算出する第二のステップと、
前記アプリケーション管理部が、前記第二のステップで算出した第一の実ＩＯ番地を基に前記第一のステップで抽出した参照番地を書き換え、前記アプリケーションに代わるアプリケーションであって、前記書き換えられた参照番地を命令コードに含むアプリケーションを書き換え済みアプリケーションとして管理する第三のステップと、
前記アプリケーション管理部が、前記書き換え済みアプリケーションに属する命令コードから生成されるアクセス先に、前記デバイス制御部の実際のアクセス先を整合させるためのマップ処理を実行する第四のステップと、
前記デバイス制御部が、前記第四のステップで前記マップ処理が実行されたことを条件に、前記書き換え済みアプリケーションに属する命令コードを基に前記記憶デバイスに対するアクセスを実行する第五のステップと、を有することを特徴とするアプリケーション管理方法。
【請求項７】
請求項６に記載のアプリケーション管理方法において、
前記アプリケーション管理部は、
前記第二のステップでは、
前記記憶装置の記憶領域の第一のメモリ番地に、前記実ＩＯ先頭論理番地の情報を保存し、前記実ＩＯ先頭論理番地の情報が保存された前記第一のメモリ番地を特定する第一の保存値に、当該第一の保存値から前記実ＩＯ先頭論理番地までの第一のオフセットを加算して第一の参照用メモリ番地を算出し、前記算出した第一の参照用メモリ番地と前記第一のステップで抽出した参照番地とから前記第一の実ＩＯ番地を算出することを特徴とするアプリケーション管理方法。
【請求項８】
請求項６又は７に記載のアプリケーション管理方法において、
前記アプリケーション管理部は、
前記第四のステップでは、
前記マップ処理として、前記記憶装置の記憶領域のメモリ番地であって、前記書き換えられた参照番地に相当する第二のメモリ番地に、前記実ＩＯ先頭論理番地の情報を保存し、前記実ＩＯ先頭論理番地の情報が保存された前記第二のメモリ番地を特定する第二の保存値に、当該第二の保存値から前記実ＩＯ先頭論理番地までの第二のオフセットを加算して第二の参照用メモリ番地を算出し、前記算出した第二の参照用メモリ番地を基に前記デバイス制御部の実際のアクセス先となる第二の実ＩＯ番地を算出することを特徴とするアプリケーション管理方法。
【請求項９】
請求項６〜８のうちいずれか１項に記載のアプリケーション管理方法において、
前記記憶装置は、
前記アプリケーションを管理するためのリストであって、書き換え対象となる参照番地に関する情報を管理する変換対象命令リストを有し、
前記アプリケーション管理部は、
前記第一のステップでは、
前記変換対象命令リストの情報と、前記アプリケーションから読込んだ情報とを比較して、前記アプリケーションの情報に属する命令コードの中から、前記書き換え対象となる参照番地を抽出することを特徴とするアプリケーション管理方法。
【請求項１０】
請求項９に記載のアプリケーション管理方法において、
前記記憶装置は、
前記アプリケーションのアクセス先となるＩＯ空間先頭論理番地に関する情報を管理する管理テーブルを有し、
前記アプリケーション管理部は、
前記第一のステップでは、
前記管理テーブルの情報と、前記抽出した書き換え対象となる参照番地とを比較して、前記抽出した書き換え対象となる参照番地と前記アプリケーションのアクセス先とが一致するか否かを判定することを特徴とするアプリケーション管理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、記憶デバイスをアクセスするためのアプリケーションを管理する計算機及びアプリケーション管理方法に関する。
【背景技術】
【０００２】
制御システムは、２０年以上の長期安定稼動が要求される。しかし、制御システムを構成する計算機の寿命は５〜１０年のため、計算機のリプレースは必須である。また、その計算機上で動作するアプリケーションもリプレースされる新計算機へ移行が必要となる。一方、近年、制御システムの低コスト化の要求が高く、制御システムにおいても汎用計算機の導入が拡大されている。汎用計算機を使う場合、リプレースされる新計算機がリプレース前の計算機の仕様と同じであることが保証できなくなる。新計算機へアプリケーションを移行する場合、使用されるＯＳ（Operating System）によってはアプリケーションの修正も必要である。特に、ＯＳによってＩＯ（Input Output）デバイスへのアクセスの仕方が変わる場合が多く、ＩＯアクセス処理箇所の修正は余儀なくされる。
【０００３】
このようなアプリケーション新開発のコストを防ぐために、アプリケーションソースを変更せずに新計算機へ移行する手段が要求される。多くの制御システム向けのアプリケーションは制御向け専用ＯＳが管理する固定メモリマップの前提で開発される。例えば、アプリケーションのイメージロード番地空間、ＩＯ番地空間、共有メモリ番地空間のように計算機メモリの番地を目的別に領域わけを行い、アプリケーションへ提供している。特に、固定メモリマップ前提の制御システム向けアプリケーションのＩＯアクセス処理の場合、割り当てられたＩＯ番地空間上の特定番地をそのまま使用し、その特定番地で保存されたデータの読み書きを実施しＩＯ処理をする。
【０００４】
しかし、汎用計算機上で動作するＯＳの場合、アプリケーションが使用可能な番地空間に制限を設け、直接ＩＯ番地にアクセスすることを禁じることが多い。アプリケーションがＩＯ処理を行うためには、ＯＳ上にそのＩＯを制御するデバイスドライバを設け、アプリケーションはそのデバイスドライバの呼び出しＩＯ制御を間接に行う必要がある。そのため、固定メモリマップ前提のアプリケーションのＩＯアクセス処理においてソースの修正は避けられない。
【０００５】
その課題の解決策として、ＩＯマップ変換用のハードウェアを設ける方法がある。特許文献１では、計算機とＩＯデバイスの間で、ＩＯアクセスのための番地生成ハードウェアを設け、ＯＳでマップした番地と、番地生成ハードウェアでマップした番地を比較する検証方法を提案している。その検証方法では修正に必要な処理を特定できるが、該当アプリケーションのソース修正は依然として必要となる。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開2013-156859号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
新計算機へ制御システムのアプリケーションを移行する際に、ＩＯ処理の仕方が従来の計算機と異なる場合が多く、アプリケーションのソースの修正が必要である。アプリケーションのソース修正は、新規開発コストと同様な投資が必要であるため、アプリケーションのソースの修正を行わずに、アプリケーションを新計算機へ移行でき、低コストで制御システムの長期安定稼動を保証したい。
【０００８】
本発明の目的は、アプリケーションのＩＯ処理の仕様と計算機におけるＩＯ処理の仕様が異なる場合でも、アプリケーションのソースを修正することなく、アプリケーションで指定されたＩＯ処理を計算機で実行することにある。
【課題を解決するための手段】
【０００９】
前記課題を解決するために、本発明は、アプリケーションとプログラムを記憶する記憶装置と、データを記憶する記憶デバイスと、前記プログラムを基に情報を処理する演算装置とを有し、前記プログラムは、前記アプリケーションを管理するアプリケーション管理部と、前記記憶デバイスに対するアクセスを制御するデバイス制御部を含み、前記アプリケーション管理部は、前記アプリケーションの情報を読込み、前記読込んだ情報に属する命令コードのうちデータの書き込み先又は読込み先を特定する参照番地を前記命令コードから抽出し、前記デバイス制御部のアクセス先を論理的に管理するための実ＩＯ先頭論理番地と前記抽出した参照番地とを基に、前記デバイス制御部の実際のアクセス先となる第一の実ＩＯ番地を算出し、前記算出した第一の実ＩＯ番地を基に前記抽出した参照番地を書き換え、前記アプリケーションに代わるアプリケーションであって、前記書き換えられた参照番地を命令コードに含むアプリケーションを書き換え済みアプリケーションとして管理し、前記書き換え済みアプリケーションに属する命令コードから生成されるアクセス先に、前記デバイス制御部の実際のアクセス先を整合させるためのマップ処理を実行し、前記デバイス制御部は、前記アプリケーション管理部で前記マップ処理が実行されたことを条件に、前記書き換え済みアプリケーションに属する命令コードを基に前記記憶デバイスに対するアクセスを実行することを特徴とする。
【発明の効果】
【００１０】
本発明によれば、アプリケーションのＩＯ処理の仕様と計算機におけるＩＯ処理の仕様が異なる場合でも、アプリケーションのソースを修正することなく、アプリケーションで指定されたＩＯ処理を計算機で実行することができる。
【図面の簡単な説明】
【００１１】
【図１】本発明の実施形態におけるハードウェア及びソフトウェアプログラムの構成図である。
【図２】本発明の実施形態におけるＩＯマップテーブルの構成図である。
【図３】本発明の実施形態におけるＩＯ変換対象命令リストの構成図である。
【図４】本発明の実施形態におけるＡＰロード処理部のバイナリ構造図である。
【図５】本発明の実施形態におけるＩＯ番地書換え処理部の処理を示すフローチャートである。
【図６】本発明の実施形態におけるＩＯ番地書換え処理を示すフローチャートである。
【図７】本発明の実施形態におけるＡＰ実行部の処理を示すフローチャートである。
【図８】本発明の実施形態における実ＩＯマップ処理部の処理を示すフローチャートである。
【図９】本発明の実施形態におけるＡＰロード処理部の処理を示すフローチャートである。
【発明を実施するための形態】
【００１２】
［実施形態１］
本実施形態は、アプリケーションの情報に属する命令コードの中から、データの書き込み先又は読込み先を特定する参照番地を抽出し、抽出した参照番地を、記憶デバイスの記憶領域を実際にアクセスするための実ＩＯ番地で書き換え、書き換えられた参照番地を命令コードに含むアプリケーションを書き換え済みアプリケーションとして管理する静的解析フェーズと、書き換え済みアプリケーションに属する命令コードから生成されるアクセス先に、記憶デバイスに対する実際のアクセス先を整合させるためのマップ処理を実行し、その後、書き換え済みアプリケーションに属する命令コードを基に記憶デバイスに対するアクセスを実行する実行フェーズと、を含む２つのフェーズの構成で、新計算機（ＩＯ処理の仕様がアプリケーションと異なる計算機）へのアプリケーションの移行を可能とするものである。
【００１３】
図１は、本発明の実施形態におけるハードウェア及びソフトウェアプログラムの構成図である。図１において、計算機は、ＯＳを含むソフトウェアプログラムを実行する演算装置１１と、ソフトウェアプログラムおよびその実行で制御する複数のＩＯデバイス（記憶デバイス）１２と、ソフトウェアプログラム及びその実行に必要なデータを格納する記憶装置１３を備える。演算装置１１と、ＩＯデバイス１２及び記憶装置１３は、無線又は有線で互いに接続される。ここで記憶装置１３は、例えばＲＡＭやハードディスクなどである。演算装置１１は２つ以上のＣＰＵ（Central Processing Unit）１１−Ａ（プロセッサ）で構成される。
【００１４】
本実施形態においては、ソフトウェアプログラム構成例を説明する。ＯＳ２１は、ＩＯデバイス１２を制御するＩＯ制御デバイスドライバ２２を備えている。ＩＯ制御デバイスドライバ２２は、ＩＯデバイス１２の管理元として、ＩＯデバイス１２を制御する際に必要なレジスタやメモリ領域を実ＩＯ番地として管理し、ＯＳ２１上で実行されるソフトウェアプログラムがアクセス可能な論理番地にマップする機能を備え、実ＩＯ番地に基にＩＯデバイス１２の記憶領域に実際にアクセスするデバイス制御部として構成される。ＩＯデバイス１２をＩＯアクセス（データの書き込み又は読込みを行うアクセス、以下、単にアクセスと称することがある。）するためのアプリケーション（以下、アプリと称する）５１は、少なくとも１つ以上存在し、演算装置１１が実行可能な命令コードからなるバイナリ（２進数のデータを含む情報）である。アプリ５１は、ＩＯデバイス１２に対して実ＩＯ番地でアクセスし、その実ＩＯ番地にＩＯ命令を書き込むことでＩＯ命令実行処理を行う。その実ＩＯ番地は、ＩＯ制御デバイスドライバ２２が管理している実ＩＯ番地と異なる。そのため、アプリ５１は、そのままでは、ＯＳ２１上では正常に動作しない。アプリ５２の情報は、後述するＩＯ番地変換部３１によってアプリ５１のＩＯ命令実行処理のバイナリを、ＩＯ制御デバイスドライバ２２が管理している実ＩＯ番地に正しくアクセスするための命令コードに書き換えたバイナリで構成される。
【００１５】
記憶装置１３には、アプリ５１とアプリ５２を管理するソフトウェアプログラム（アプリケーション管理部）として、ＩＯ番地変換部３１とＡＰ（アプリケーション）実行部４１が格納される。この際、アプリ５２は、アプリ５１に代わるアプリであって、アプリ５１で用いる参照番地のうち書き換え対象の参照番地が書き換えられた参照番地を命令コードに含む書き換え済みアプリとして管理される。
【００１６】
ＩＯ番地変換部３１は、アプリ５１のＩＯ命令実行で使用した実ＩＯ番地をＩＯ制御デバイスドライバ２２が管理している実ＩＯ番地に変換するためのＩＯマップテーブル（管理テーブル）３２と、アプリ５１のＩＯ番地アクセスの処理のための命令コードをリストしたＩＯ変換対象命令リスト３３を有し、さらに、ＩＯマップテーブル３２とＩＯ変換対象命令リスト３３を用いてアプリ５１のＩＯ番地アクセスの処理のための命令コードを、ＩＯ制御デバイスドライバ２２が管理している実ＩＯ番地でＩＯデバイス１２をアクセスするための命令コードに書き換えるＩＯ番地書換え処理部３４を備えている。また、ＩＯ番地変換部３１は、記憶装置１３の記憶領域で構成される記憶部として、アプリ５１の命令コードの中でＩＯ番地書換え処理が必要な命令コードか判定するために必要な情報として、アプリ５１がＩＯデバイス１２をアクセスするための論理的番地である、ＩＯ空間先頭論理番地を保存するＩＯ空間先頭論理番地記憶部３５と、ＩＯ番地書換え処理部３４がＩＯマップテーブル３２の情報を読込むためのメモリ番地を保存するＩＯマップテーブル読込先論理番地記憶部３６とを有する。
【００１７】
ＡＰ実行部４１は、アプリ５２を実行する。ＡＰ実行部４１は、メイン処理としてアプリ５２を実行するＡＰロード処理部４３と、ＡＰロード処理部４３のメイン処理を実行する前に実行される実ＩＯマップ処理部４２とを有する。ＡＰロード処理部４３は、Ｌｉｎｕｘ（登録商標）等の汎用ＯＳの実行ファイル形式のＥＬＦ（Executable and Linkable Format）の構造を持ち、図４に示すように、前処理部４３−Ａと、メイン処理部４３−Ｂと、処理データやスタックデータが保存されるデータ部４３−Ｃで構成される。実ＩＯマップ処理部４２は、前処理部４３−Ａを処理する前に処理されるように、ＡＰ実行部４１によって前処理部４３−Ａに追記される。
【００１８】
図２は、ＩＯマップテーブル３２の構成図である。ＩＯマップテーブル３２は、記憶装置１３に記憶される管理テーブルであって、アプリ５１がＩＯデバイス１２をアクセスするための論理的番地である、ＩＯ空間先頭論理番地３２−Ａと、ＩＯ制御デバイスドライバ２２が管理しているＩＯデバイス１２の実ＩＯ番地を、ＡＰ実行部４１がアクセス可能な論理番地にマップする実ＩＯ先頭論理番地３２−Ｂで構成される。
【００１９】
図３は、ＩＯ変換対象命令リスト３３の構成図である。ＩＯ変換対象命令リスト３３は、記憶装置１３に記憶されるリストであって、アプリ５１のＩＯ命令実行処理で用いる可能性が高い命令コードをリスト化したものである。ＩＯ変換対象命令リスト３３は、命令コードの種類３３−Ａと、命令セット３３−Ｂから構成される。命令コードの種類３３−Ａには、命令コードがデータの書き込みである場合、「STORE」の情報が格納され、命令コードがデータの読込みである場合、「LOAD」の情報が格納される。命令セット３３−Ｂには、アプリ５１の処理内容を示す命令やデータの書き込み先又は読込み先を特定するための参照番地に関する情報が格納される。
【００２０】
ここで、アプリ５１がＩＯデバイス１２をＩＯ番地でアクセスする際に問題となるのは、アプリ５１のアクセス先となるメモリ領域と、アプリ５１のバイナリが保存されているメモリ領域とが異なることである。即ち、後者のメモリ領域へアクセスする場合、プログラムカウンタ（ＰＣ）相対番地を使用するメモリロード／ストア命令コードを用いることができない。また、レジスタを経由せずに直接ロード／ストアするメモリ番地を指定するメモリロード／ストア命令コードも用いることができない。このため、ＩＯ変換対象命令リスト３３には、アプリ５１の命令コードの中でＩＯ番地アクセスの可能性が高い（アプリ５１のＩＯ命令実行処理で用いる可能性が高い）命令コードであって、レジスタ経由の間接メモリ番地でのメモリロード／ストア命令コードがリスト化されている。ＩＯ変換対象命令リスト３３に記録された情報を用いることで、ＩＯ番地書換え処理部３４が、命令コードを書き換える処理を最小限にできる。なお、命令セット３３−Ｂに保存される命令コードは、バイナリコードでもアセンブリコードでもよい。
【００２１】
図５は、ＩＯ番地書換え処理部３４の処理を示すフローチャートである。この処理は、ＣＰＵ１１−Ａが、ソフトウェアプログラムであるＩＯ番地書換え処理部３４を起動することによって開始される。
【００２２】
ステップ１０１：ＩＯ番地書換え処理部３４は、ＩＯマップテーブル３２の情報を読込み、読込したメモリ番地を、ＩＯマップテーブル読込先論理番地記憶部３６に保存する。保存された論理番地は、後述するＡＰロード処理部４３の前処理段階で実ＩＯマップ処理部４２によって使われる論理番地であり、この論理番地にＩＯマップテーブル３２の情報を読込むためである。即ち、ＡＰロード処理部４３によって実行されるアプリ５２が、ＩＯアクセスに必要な実ＩＯ番地を算出するためには、ステップ１０１で保存された論理番地と同じ論理番地（同論理番地）にＩＯマップテーブル３２を読込む必要がある。また、アプリ５２は、ＡＰロード処理部４３とＯＳ２１が管理するプロセス空間を共有するため、アプリ５２でも同じ論理番地（同論理番地）を用いて、ＩＯマップテーブル３２へのアクセスが可能である。
【００２３】
ステップ１０２：ＩＯ番地書換え処理部３４は、ＩＯ空間先頭論理番地３２−Ａを読込み、ＩＯ空間先頭論理番地３２−Ａの情報をＩＯ空間先頭論理番地記憶部３５に保存する。
【００２４】
ステップ１０３：ＩＯ番地書換え処理部３４は、ＩＯ変換対象命令リスト３３の情報を読込む。
【００２５】
ステップ１０４：ＩＯ番地書換え処理部３４は、アプリ（ＡＰ）５１のバイナリを読込む。
【００２６】
ステップ１０５：ＩＯ番地書換え処理部３４は、アプリ５１のバイナリを逆アセンブルする（アプリ５１のバイナリから命令コードを構成する種類と命令セットの情報を生成する）。
【００２７】
ステップ１０６：ＩＯ番地書換え処理部３４は、逆アセンブルした命令コードを１行読込む。
【００２８】
ステップ１０７：ＩＯ番地書換え処理部３４は、命令コードは終了か否かを判定する。即ち、ファイル終端で処理する行がないか確認し、あればステップ１０８に進み（Ｎ）、なければステップ１０９に進む（Ｙ）。
【００２９】
ステップ１０８：ＩＯ番地書換え処理部３４は、ＩＯ番地書換え処理を実行し、ステップ１０６へ戻る。
【００３０】
ステップ１０９：ＩＯ番地書換え処理部３４は、書換え済みのバイナリを、アプリ（ＡＰ）５２として作成し、作成したアプリ５２を記憶装置１３に格納し、このルーチンでの処理を終了する。
【００３１】
図６は、ステップ１０８のＩＯ番地書換え処理の詳細を示すフローチャートである。
【００３２】
ステップ２０１：ＩＯ番地書換え処理部３４は、ステップ１０６で読込んだ命令コードが分岐命令か確認し、分岐命令であれば（Ｙ）ステップ２０２に進む。分岐命令でなければ（Ｎ）、ステップ２１１へ進む。
【００３３】
ステップ２０２：ＩＯ番地書換え処理部３４は、分岐先のメモリ番地に対して、分岐先レベール（LABEL）を作成し、作成したレベールに置き換える。後述する正しいＩＯアクセス先の番地を算出するコードを追加する場合、分岐先のメモリ番地がずれていくため、本ＩＯ書換え処理は、分岐命令がない範囲で実施する。分岐先のメモリ番地は、作成したレベールに置換え、シンボルへの分岐とする。
【００３４】
ステップ２１１：ＩＯ番地書換え処理部３４は、ステップ１０６で読込んだ命令コードがＩＯ対象命令リスト３３の命令セット３３−Ｂに存在する命令コードか確認し、存在する命令コードであれば書換え箇所と判断する。
【００３５】
ステップ２１２：ＩＯ番地書換え処理部３４は、ステップ２１１の確認結果、書換え箇所であれば（Ｙ）ステップ２１３へ進み、書換え箇所でなければ（Ｎ）、このルーチンでの処理を終了する。読込んだ命令コードがＩＯ対象命令リスト３３の命令セット３３−Ｂに存在する命令コードであるかを確認することで、命令コードのうち、書き換え対象となる命令コード（ＩＯアクセス命令コード）を絞り込むことができる。それによってＩＯアクセスに関連のない命令コードに、後述するＩＯ書換えで追加するコードを実行するオーバーヘッドの削減が可能であり、性能が必要な制御システムにおいては有効である。
【００３６】
ＩＯ番地書換え処理部３４は、ステップ１０６で読込んだ命令コードのうち書き換え対象となる命令コードを次のステップ２１３〜ステップ２１５で書き換える。
【００３７】
ステップ２１３：ＩＯ番地書換え処理部３４は、ステップ１０６で読込んだ命令コードの参照メモリ番地が、ＩＯ空間先頭論理番地記憶部３５で保存した論地番地と比較するコードを追加する。ＩＯ対象命令リスト３３を参照して、絞り込んだ命令コード（ＩＯアクセス命令コード）の中には、実際にＩＯアクセスコードでないものが存在する場合があるため、本ステップにて確認を行う。本ステップで追加するコードは、演算装置１１のＣＰＵ１１−Ａで実行する場合１サイクル消費することになる‘cmp’命令コードになる。具体的には、「cmp ‘参照番地’ ‘ＩＯ空間先頭論理番地記憶部３５に保存した論地番地’」となる。‘参照番地’は、命令コードの種類３３−Ａが、「STORE」であれば、データ書き込み先のメモリ番地で、「LOAD」であれば、データ読込先のメモリ番地である。
【００３８】
ステップ２１４：ＩＯ番地書換え処理部３４は、ＩＯマップテーブル３２の実ＩＯ先頭論理番地３２−Ｂを参照するコードを追加する。具体的には、ＩＯマップテーブル読込先論理番地記憶部３６の保存値であれば、ＩＯマップテーブル３２が読込まれたメモリ番地に、実ＩＯ先頭論理番地３２−Ｂが読込まれたメモリ番地までのオフセット（OFFSET）を加算した番地を、演算装置１１のＣＰＵ１１−Ａの汎用レジスタ（Rn）に書き込む命令である。これにより、実ＩＯ先頭論理番地３２−Ｂの内容（0x40000000）が参照できるメモリ番地が得られる。
【００３９】
ステップ２１５：ＩＯ番地書換え処理部３４は、実ＩＯ先頭論理番地３２−Ｂの内容（0x40000000）が参照できるメモリ番地の内容（0x40000000）を読込み、読込んだメモリ番地に、ステップ２１３の‘参照番地’を加算し、ＩＯ制御デバイスドライバ２２が管理する実ＩＯ番地（ＩＯ制御デバイスドライバ２２がＩＯデバイス１２の記憶領域を実際にアクセスするための実ＩＯ番地）を算出するコードを追加する。
【００４０】
上述したように、ＩＯ番地変換部３１は、アプリ５１の情報を読込み、読込んだ情報に属する命令コードのうちデータの書き込み先又は読込み先を特定する参照番地を命令コードから抽出し、ＩＯ制御デバイスドライバ２２のアクセス先を論理的に管理するための実ＩＯ先頭論理番地と抽出した参照番地とを基に、ＩＯ制御デバイスドライバ２２の実際のアクセス先となる実ＩＯ番地（第一の実ＩＯ番地）を算出し、算出した実ＩＯ番地を基に抽出した参照番地を書き換え、アプリ５１に代わるアプリであって、書き換えられた参照番地を命令コードに含むアプリ５２を書き換え済みアプリとして管理することになる。
【００４１】
この際、ＩＯ番地変換部３１は、記憶装置１３の記憶領域のメモリ番地（第一のメモリ番地）に、実ＩＯ先頭論理番地３２−Ｂの情報を保存し、実ＩＯ先頭論理番地３２−Ｂの情報が保存されたメモリ番地を特定する保存値（第一の保存値）に、この保存値から実ＩＯ先頭論理番地３２−Ｂまでのオフセット（第一のオフセット）を加算して参照用メモリ番地（第一の参照用メモリ番地）を算出し、参照用メモリ番地と抽出した参照番地とから実ＩＯ番地（第一の実ＩＯ番地）を算出する。
【００４２】
図７は、ＡＰ実行部４１の処理を示すフローチャートである。この処理は、ＣＰＵ１１−Ａが、ソフトウェアプログラムであるＡＰ実行部４１を起動することによって開始される。
【００４３】
ステップ３０１：ＡＰ実行部４１は、ＡＰロード処理部４３のバイナリを読込む。
【００４４】
ステップ３０２：ＡＰ実行部４１は、ＡＰロード処理部の前処理部４３−Ａに実ＩＯマップ処理部４２を呼び出すコードを追加する。ＡＰロード処理部４３は、ｇｃｃのような通常のコンパイラで作成された実行可能なバイナリで、そのコンパイラによって前処理部４３−ＡはＡＰロード処理部４３に追加される。本ステップでは、その前処理部４３−Ａをフックし、実ＩＯマップ処理部４２を呼び出すコードを実行するように修正を加える。
【００４５】
ステップ３０３：ＡＰ実行部４１は、ＡＰロード処理部４３を起動する。ＡＰロード処理部４３が起動されると、前処理部４３−Ａの処理が先に行われる。そのため、ＡＰロード処理部４３のメイン処理部４３−Ｂを実行する前に、実ＩＯマップ処理部４２が実行される。
【００４６】
図８は、実ＩＯマップ処理部４２の処理の詳細を示すフローチャートである。この処理は、ＣＰＵ１１−Ａが、ソフトウェアプログラムである実ＩＯマップ処理部４２を起動することによって開始される。
【００４７】
ステップ４０１：実ＩＯマップ処理部４２は、ＩＯマップテーブル３２の情報を、ＩＯマップテーブル読込先論理番地記憶部３６に保存されているメモリ番地へ読込む。このメモリ番地は、ステップ１０８で作成したアプリ５２が、ＩＯデバイス１２をアクセスする際の実ＩＯ番地を算出するために用いるメモリ番地であって、ステップ２１３〜ステップ２１５で追加した命令コードが参照するメモリ番地と同じメモリ番地になる必要がある。
【００４８】
ステップ４０２：実ＩＯマップ処理部４２は、実ＩＯ先頭論理番地３２−Ｂを読込む。
【００４９】
ステップ４０３：実ＩＯマップ処理部４２は、ＩＯ制御デバイスドライバ２２を呼び出し、ＩＯ制御デバイスドライバ２２が管理している実ＩＯ番地を、Ｓ４０２で読込んだ実ＩＯ先頭論理番地３２−Ｂにマップする。実ＩＯ番地がマップされた論理番地は、ＡＰロード処理部４３が生成するプロセスであればアクセス可能となる。Ｌｉｎｕｘ（登録商標）のような通常の汎用ＯＳであれば、プロセスを生成する生成元のプロセスメモリ空間のアクセスが可能であるためである。この処理をＡＰロード処理部４３の前処理部４３−Ａで実行する理由は、ＡＰロード処理部４３のメイン処理部４３−Ｂが実行される場合、メイン処理部４３−Ｂが、ステップ４０２で読込んだ実ＩＯ先頭論理番地３２−Ｂを先に使用してしまうことを防ぐためである。
【００５０】
図９は、ＡＰロード処理部４３の処理を示すフローチャートである。この処理は、ＣＰＵ１１−Ａが、ソフトウェアプログラムであるＡＰロード処理部４３を起動することによって開始される。
【００５１】
ステップ５０１：ＡＰロード処理部４３は、実ＩＯマップ処理部４２を実行し、ＩＯマップテーブル３２と、ＩＯ制御デバイスドライバ２２が管理する実ＩＯ番地を、それぞれＩＯマップテーブル読込先論理番地記憶部３６の保存値と、実ＩＯ先頭論理番地３２−Ｂが指定しているメモリ番地へマップする。
【００５２】
ステップ５０２：ＡＰロード処理部４３は、アプリ（ＡＰ）５２のバイナリを実行するプロセスを生成し、アプリ（ＡＰ）５２を実行する。その際に、ＩＯアクセス命令コード（ＩＯアクセスによる命令コード）を実行する場合、ステップ２１３〜ステップ２１５で追加した命令コード（アプリ５１の命令コードのうち書き換え対象の命令コードが書き換えられた命令コードに相当する命令コード）が実行され、ＩＯ制御デバイスドライバ２２が管理している実ＩＯ番地へアクセスとなる。
【００５３】
上述したように、ＡＰ実行部４１は、アプリ５２に属する命令コードから生成されるアクセス先に、ＩＯ制御デバイスドライバ２２の実際のアクセス先を整合させるためのマップ処理を実行し、ＩＯ制御デバイスドライバ２２は、ＡＰ実行部４１でマップ処理が実行されたことを条件に、アプリ５２に属する命令コードを基にＩＯデバイス１２に対するアクセスを実行することになる。
【００５４】
この際、ＡＰ実行部４１は、マップ処理として、記憶装置１３の記憶領域のメモリ番地であって、書き換えられた参照番地に相当するメモリ番地（第二のメモリ番地）に、実ＩＯ先頭論理番地３２−Ｂの情報を保存し、実ＩＯ先頭論理番地３２−Ｂの情報が保存されたメモリ番地を特定する保存値（第二の保存値）に、この保存値から実ＩＯ先頭論理番地３２−Ｂまでのオフセット（第二のオフセット）を加算して参照用メモリ番地（第二の参照用メモリ番地）を算出し、算出した参照用メモリ番地を基にＩＯ制御デバイスドライバ２２の実際のアクセス先となる実ＩＯ番地（第二の実ＩＯ番地）を算出することになる。
【００５５】
本実施形態によれば、アプリ５１のＩＯ処理の仕様と計算機におけるＩＯ処理の仕様が異なる場合でも、アプリ５１のソースを修正することなく、アプリ５１で指定されたＩＯ処理を計算機で実行することができる。即ち、アプリ５１のソースを修正することなく、アプリ５１を新計算機へ移行することが可能となる。
【００５６】
また、制御システムのテストの効率化のため、近年クラウド上でシステムのエミュレーション環境を構築するテスト環境が普及している。エミュレーション環境を提供する計算機及びＯＳは汎用ＯＳが多く、その環境でもアプリケーションのソースレベルを修正なしで、アプリケーションを動作させることが可能である。
【００５７】
なお、本発明は、上記した実施形態に限定されるものではなく、様々な変形例が含まれる。例えば、上記した実施形態は本発明を分かりやすく説明するために詳細に説明したものであり、必ずしも説明した全ての構成を備えるものに限定されるものではない。実施形態の構成の一部について、他の構成の追加・削除・置換をすることが可能である。
【符号の説明】
【００５８】
１１…演算装置、１１−Ａ…ＣＰＵ、１２…ＩＯデバイス、１３…記憶装置、２１…ＯＳ、２２…ＩＯ制御デバイスドライバ、３１…ＩＯ番地変換部、３２…ＩＯマップテーブル、３３…ＩＯ変換対象命令リスト、３４…ＩＯ番地書換え処理部、３５…ＩＯ空間先頭論理番地記憶部、３６…ＩＯマップテーブル読込先論理番地記憶部、４１…ＡＰ実行部、４２…実ＩＯマップ処理部、４３…ＡＰロード処理部、５１…アプリ（既存ＡＰ）、５２…アプリ（バイナリ書換えアプリ）
【図１】
2018151692.tif 000003
【図２】
2018151692.tif 000004
【図３】
2018151692.tif 000005
【図４】
2018151692.tif 000006
【図５】
2018151692.tif 000007
【図６】
2018151692.tif 000008
【図７】
2018151692.tif 000009
【図８】
2018151692.tif 000010
【図９】
2018151692.tif 000011