(58)【調査した分野】(Int.Cl.,DB名)
オペレーティングシステムと、周辺装置用の現ドライバと、前記オペレーティングシステム搭載前における周辺装置用の旧ドライバを介して周辺装置にアクセスするための各呼出処理を有する既存アプリケーションとを有する情報処理装置における周辺装置アクセスシステムであって、
前記既存アプリケーションの前記各呼出処理は、前記周辺装置にアクセスする為の前記旧ドライバの各処理をそれぞれ呼び出す処理であり、
前記各呼出処理に応じた各仲介処理を有すると共に、前記周辺装置へのアクセスに関する排他制御を行うアプリ実行手段を有し、
該アプリ実行手段は、任意の前記呼出処理がある毎に、該呼出処理に対応する前記仲介処理によって前記現ドライバの該当処理を呼出して実行させることで、前記周辺装置へのアクセスを行うことを特徴とする周辺装置アクセスシステム。
前記オペレーティングシステムはリアルタイムオペレーティングシステムであり、前記既存アプリケーションは組込みソフトウェアであることを特徴とする請求項1〜4の何れかに記載の周辺装置アクセスシステム。
【背景技術】
【0002】
情報処理装置上で動作するアプリケーションソフトウェア(以下、アプリケーション)には、フラッシュメモリ等の周辺装置にアクセスするために、周辺装置用のドライバ(デバイスドライバ等;以下、単にドライバと記す場合もある)を介して周辺装置にアクセスすることが、一般に実施されている。
【0003】
上記周辺装置は、例えば記憶装置であり、一例がフラッシュメモリであるが、この例に限らない。
情報処理装置に関する技術の進歩に伴い、アプリケーションを実行するベースとなる環境は変化している。一例として、従来では、例えば時間制約が厳しい情報処理装置にはオペレーティングシステム(以下、OS)は搭載しないケースが多かった。これは、OSの使用による時間的なオーバヘッド等の問題があるからである。OSが搭載されていない情報処理装置においては、各アプリケーションが、直接、周辺装置用のドライバを制御して周辺装置へのアクセスを行うことになる。
【0004】
しかしながら近年では、情報処理装置に関する技術の進歩に伴い、OSの使用による時間的なオーバヘッドは小さくなり、時間制約が厳しい情報処理装置に対しても、OSを搭載して使用可能になりつつある。
【0005】
例えば上記アプリケーションとしての“組込みソフトウェア”が搭載された情報処理装置(組込み機器や組込みシステム等と呼ばれる)が知られている。この様な情報処理装置では、OSが搭載されていないケースが多かったが、近年、OSが搭載されるケースが増えている。このOSは、例えばRTOS(リアルタイムOS)等である。これに伴って、既存の(OSが搭載されていない)情報処理装置に対して、後から、OSを搭載するケースがある。
【0006】
OSを搭載・使用する場合、タスクごとのスタック、およびメモリプール等のため、OSを搭載していない既存の情報処理装置と比べ、多くのデータ領域が必要である。また、タスク切り替え等のOS処理に伴い、プログラムサイズも増加する。このため、OSを搭載していない既存の情報処理装置に対して後からOSを搭載・使用する場合は、フラッシュメモリ等のハードウェアを変更しなければならないことが多い。この場合、周辺装置用のドライバは再度作成する必要があり、通常はOS上で動作するドライバとして作成する。
【0007】
上記のようにOSが搭載されていない情報処理装置においては、各アプリケーションが、直接、周辺装置用のドライバを制御して周辺装置へのアクセスを行うことになる。この様な周辺装置へのアクセス処理の一例を
図12に示す。
【0008】
図12は、OS未搭載の情報処理装置における周辺装置へのアクセス処理例を示す図である。
図12に示す情報処理装置100がOS未搭載の情報処理装置である。この情報処理装置100には、上記周辺装置の一例であるフラッシュメモリ120が設けられており、このフラッシュメモリ120用のドライバ110が、情報処理装置100内に搭載されている。
【0009】
このドライバ110には、フラッシュメモリ120にアクセスする為の所定の関数(処理コード)が、予め用意されている。図示の例では、ドライバ110は、「読出開始(関数名;startRead)」111、「読出完了確認(関数名;checkReadEnd)」112、「書込開始(関数名;startWrite)」113、「書込完了確認(関数名;checkWriteEnd)」114、「ドライバメイン関数(関数名;mainDriver)」115の各処理(関数)を有している。
【0010】
全体のメイン関数102は、各アプリケーション101やドライバメイン関数115の管理制御(定期的な起動や、優先度に応じた割込み等)を行う。尚、全体のメイン関数102は、例えばアプリケーション作成者等が作成する。これは、OS未搭載である為にOSの機能(タスクディスパッチャ等)を利用できないので作成するものである。
【0011】
各アプリケーション101は、様々な処理を行うものであってよいが、ここではフラッシュメモリ120へのアクセスに係わる処理だけを図示・説明する。
各アプリケーション101は、上記ドライバ110の各関数名を用いて任意の関数を呼び出して処理実行させることで、ドライバ110を介したフラッシュメモリ120へのアクセスを実現する。ここで、例えばフラッシュメモリ120からのデータリードを行う場合には、アプリケーション101は、まず「読出開始」111を呼出し、その後、「読出完了確認」112を呼出す。その際、プロセッサの実行権を逐一解放しながら動作する必要がある。これは、ドライバ110中の処理(ドライバメイン関数115)を実行させるためにはアプリケーション101が持つ実行権を解放する必要があるためである。
【0012】
同様に、データライトの場合には、まず「書込開始」113を呼出し、その後、「書込完了確認」114を呼出す必要がある。
尚、アプリケーション101は、「読出開始」111または「書込開始」113の呼出しの際には、アクセス先のアドレスやファイル名等を引数として渡す。
【0013】
上記呼び出された「読出開始」111や「書込開始」113は、例えばドライバ110内の状態変数(例えば不図示の各種フラグ)を変えること等で、ドライバメイン関数115にフラッシュメモリ120へのアクセス処理を実行させる。
【0014】
すなわち、例えば、上記呼び出された「読出開始」111は、ドライバ110内に格納されている読出開始フラグ(不図示)をオンすると共に、ドライバ110内の所定の記憶領域に上記アクセス先のアドレスやファイル名を格納する。ドライバメイン関数115は、これらフラグや所定の記憶領域を参照して、例えば読出開始フラグがオンであれば所定の記憶領域に格納されているアドレスやファイル名を用いてフラッシュメモリ120にアクセスする(データリードする)。
【0015】
同様に、上記呼び出された「書込開始」113は、ドライバ110内に格納されている書込開始フラグ(不図示)をオンすると共に、ドライバ110内の所定の記憶領域に上記アクセス先のアドレスやファイル名を格納する。ドライバメイン関数115は、これらフラグや所定の記憶領域を参照して、例えば書込開始フラグがオンであれば所定の記憶領域に格納されているアドレスやファイル名を用いてフラッシュメモリ120にアクセスする(データライトする)。
【0016】
一方、OSが搭載された情報処理装置上で動作するアプリケーション(不図示)は、上記ドライバ110の機能に応じた複数の処理(「読出開始」と「読出完了確認」)を呼び出す必要もなければ、プロセッサの実行権を逐一解放する必要も無い(この様な処理は、OSが行う)。これにより、アプリケーションの処理を簡素にすることが可能になるため(例えば周辺装置へのアクセス処理を、例えば単純に「読出」(read)や「書込」(write)等とすることができる)、アプリケーションの開発効率が(OS未搭載の場合と比べて)向上する。
【0017】
また、例えば特許文献1に記載の従来技術が知られている。
特許文献1には、OSが異なる場合であっても、アプリケーションを変更することなく実行可能なシステムが開示されている。
【0018】
特許文献1には、例えばその従来技術に、あるCPU(A)用のOS(B)に対応して書かれたアプリケーションを、異種のCPU(C)用のOS(D)上でも動作させる方法として、OS(D)上に、CPU(A)の命令をシミュレートするシミュレート部を設けると共に、このシミュレート部上でOS(B)を実行し、このOS(B)上でアプリケーションを実行する方法が記載されている。
【0019】
特許文献1の発明では、アプリケーションソフトウェアのソースプログラムは、プログラム本体中に記述された手続、関数、論理を、仮想実行環境が実現される既存OSの種別毎に他の手続、関数、論理に置き換える情報を記述した置換情報記述部を有する。そして、プログラム本体と、置換情報記述部に記述された置換情報を、既存OS用コンパイラを利用して、仮想実行環境上で実行可能な実行可能プログラムに翻訳する翻訳部を有する。更に、上記既存OSを利用して上記実行可能プログラムが実行する命令を実行する実行部を備える。
【発明を実施するための形態】
【0030】
以下、図面を参照して本発明の実施の形態について説明する。
図1は、本例の情報処理装置10のハード構成例である。
図示の例の情報処理装置10は、プロセッサ11、RAM12、フラッシュメモリ13等を有する。ここでは、上記周辺装置の一例としてフラッシュメモリ13を示している。尚、図示の構成以外の構成もあってもよい。例えば、ROMやハードディスク等の不図示の記憶装置があってよく、記憶装置に予め記憶されている所定のプログラムをプロセッサ11が読出・実行することにより、後述する各種フローチャートの処理が実現されるものであってもよい。
【0031】
また、周辺装置はフラッシュメモリ13に限らないが、ここではフラッシュメモリ13を例にして図示・説明するものとする。
尚、プロセッサ11は、例えばCPU、MPU等である。
【0032】
図2は、上記情報処理装置10におけるフラッシュメモリ13へのアクセス動作例を示す図である。
図示の例の情報処理装置10は、タスクディスパッチャ1、既存アプリケーション2、新規アプリケーション3、読出用セマフォ4、書込用セマフォ5、アプリ実行部20、ドライバ30(デバイスドライバ等)を有する。
【0033】
これら既存アプリケーション2、新規アプリケーション3等の各種アプリケーションプログラムや、タスクディスパッチャ1、アプリ実行部20、ドライバ30の後述する各種処理機能を実現するプログラムは、予め例えば上記不図示の記憶装置に記憶されている。上記CPU/MPU等であるプロセッサ11が、この記憶装置からこれらの各種プログラムを読出し実行することにより、後述する各種処理機能が実現される(例えば、
図3〜
図10の各フローチャート図に示す処理機能が実現される)。
【0034】
概略的には、後述するOSの機能の一部であるタスクディスパッチャ1が、各既存アプリケーション2、各新規アプリケーション3、ドライバ30の後述するドライバタスク35等の各タスクの実行制御を行う。任意の既存アプリケーション2または新規アプリケーション3を実行中にフラッシュメモリ13へのアクセス処理が発生した場合には、例えばAPI等であるアプリ実行部20によって、読出用セマフォ4または書込用セマフォ5による排他制御を行いつつ、ドライバ30を介してフラッシュメモリ13にアクセスすることになる。
【0035】
尚、アプリ実行部20やドライバ30は、OS(オペレーティングシステム)の機能を利用するものであるが、最初からOSに組み込まれているものではなく、例えばアプリケーション2,3等を作成するメーカ側で作成する。
【0036】
ここで、
図1、
図2に示す情報処理装置10は、典型的な一例としては、上記
図12の情報処理装置100に対して、OS(例えば上記リアルタイムOS)を追加・搭載したものである。このOS自体については、特に図示・説明等しないが、上述した通り、OSの追加搭載に伴って、フラッシュメモリやそのドライバの変更が行われる場合がある。すなわち、
図12のフラッシュメモリ120とそのドライバ110が、
図2に示すフラッシュメモリ13とそのドライバ30へと変更されている。フラッシュメモリ13は、例えば単に記憶容量が増えたものである。但し、この例に限らず、フラッシュメモリについては変更無しであってもよい(但し、この場合でも、ドライバは、OS搭載環境に応じたものへと変更する)。
【0037】
ドライバ110は、OS搭載前の(未搭載の)環境下における周辺装置用(ここではフラッシュメモリ13用)のドライバであり、旧ドライバと言える。一方、ドライバ30は、OS搭載後に作成された、当該OS搭載の環境下における(現在の環境下における)周辺装置用のドライバであり、現ドライバと言える。また、既存アプリケーション2は、上記OS未搭載の環境下に応じて作成され、上記旧ドライバを介して周辺装置にアクセスするための各呼出処理を有するものと言える。当該既存アプリケーション2の各呼出処理は、例えば、周辺装置へのアクセスの為の上記旧ドライバの各処理(一連の処理など)をそれぞれ(順次)呼び出して実行させる処理である。
【0038】
そして、上記アプリ実行部20は、情報処理装置がOS未搭載からOS搭載へと変わった場合でも、既存アプリケーション2を変更/修正することなく上記現ドライバを介した周辺装置へのアクセスを実現させる処理機能を有する。つまり、アプリ実行部20は、上記各呼出処理に応じた各仲介処理を有すると共に、周辺装置へのアクセスに関する排他制御を行う。アプリ実行部20は、既存アプリケーション2から任意の呼出処理がある毎に、該呼出処理に対応する仲介処理によって上記現ドライバの該当処理を呼出して実行させることで、周辺装置へのアクセスを実現させるものである。これについては、後に、詳しく説明する。
【0039】
ドライバ30は、基本的には上記ドライバ110と略同様の処理を行うものであってよいが、関数名が変わっている点や、「ドライバメイン関数」115が、タスクディスパッチャ1でタスク管理されると共に「読出開始」処理31等との間のやりとりをOSの機能を利用してメッセージ通信で行う点等で、ドライバ110と異なる。
【0040】
ここで、本手法によれは、上記OS未搭載の環境に応じた上記アプリケーション101は、OS搭載があっても変更する必要はなく、これが
図2に示す既存アプリケーション2であってもよい。換言すれば、典型的な例としては、既存アプリケーション2は、上記情報処理装置100のアプリケーション101そのものである。これより、ここでは、既存アプリケーション2は、従来のアプリケーション101と同様に、上記“startRead”、“checkReadEnd”、“startWrite”、“checkWriteEnd”の各関数名を用いた関数呼び出しを行うものとする。
【0041】
一方、ドライバ30は、「読出開始」処理31、「読出完了確認」処理32、「書込開始」処理33、「書込完了確認」処理34、「ドライバタスク」処理35の各処理(関数)を有しており、これらは基本的には上記「読出開始」111、「読出完了確認」112、「書込開始」113、「書込完了確認」114、「ドライバメイン関数」115に相当する処理を行うが、図示のように処理名(関数名)が異なっている。これは、例えばドライバ30の作成時にその作成者が意図的に異なる関数名等を付与するものである。
【0042】
従って、上記、既存アプリケーション2が上記“startRead”、“checkReadEnd”、“startWrite”、“checkWriteEnd”の各関数名を用いた関数呼び出し(各呼出処理)を行っても、ドライバ30の処理(関数)が呼び出されることはない。
【0043】
その一方で、これらの関数名はアプリ実行部20で用いるようにしている。すなわち、アプリ実行部20の図示の各関数のうち、「読出開始」21、「読出完了確認」23、「書込開始」24、「書込完了確認」26の各処理(上記仲介処理に相当)の名称を、上記“startRead”、“checkReadEnd”、“startWrite”、“checkWriteEnd”としている。これは、アプリ実行部20の作成時にその作成者が意図的に、上記既存アプリケーション2の各呼出処理に用いるものと同じ名称(関数名)を付与するものである。
【0044】
これより、既存アプリケーション2(101)は、フラッシュメモリ13のアクセスの際には、アプリ実行部20の「読出開始」21、「読出完了確認」23、「書込開始」24、「書込完了確認」26の何れかの仲介処理を呼び出すことになる。これは、データリード時には「読出開始」21を呼出し、その後、「読出完了確認」23を呼び出す。データライド時には、「書込開始」24を呼出し、その後、「書込完了確認」26を呼び出す。
【0045】
そして、アプリ実行部20の「読出開始」21、「読出完了確認」23、「書込開始」24、「書込完了確認」26の各処理は、OSの機能を用いた排他制御(読出用セマフォ4や書込用セマフォ5を用いた、フラッシュメモリ13へのアクセスに関する排他制御)を行うと共に、上記ドライバ30の「読出開始」処理31、「読出完了確認」処理32、「書込開始」処理33、「書込完了確認」処理34を呼び出す処理を行う。例えば、「読出開始」21は、ドライバ30の「読出開始」処理31を呼び出して実行させる。これより、既存アプリケーション2が例えば上記“startRead”の呼出し処理を行うと、結果的に、上記「読出開始」111に相当する処理である「読出開始」21が呼び出されて処理実行されることになる。
【0046】
尚、「読出完了確認」23は、呼び出されると、ドライバ30の「読出完了確認」処理32を呼び出して実行させる。上記「書込開始」24は、呼び出されると、ドライバ30の「書込開始」処理33を呼出して実行させる。上記「書込完了確認」26は、呼び出されると、ドライバ30の「書込完了確認」処理34を呼び出して実行させる。
【0047】
上記呼び出された「読出開始」処理31、「読出完了確認」処理32、「書込開始」処理33、「書込完了確認」処理34は、何れも、OS(例えばRTOS)の機能を利用してドライバタスク35との間でメッセージ通信を行う。これより、ドライバタスク35がフラッシュメモリ13へのアクセス処理を実行する(フラッシュメモリ13へのアクセス処理自体は、従来のドライバメイン関数115と略同様であってよい)。
【0048】
また、上記の通り、上記アプリ実行部20の「読出開始」21、「読出」22、「読出完了確認」23、「書込開始」24、「書込」25、「書込完了確認」26の各処理機能を実行する際には、セマフォによる排他制御も行われる。すなわち、アプリ実行部20は、フラッシュメモリ13の読出に関する排他制御のための読出用セマフォ4、および、フラッシュメモリ13の書込に関する排他制御のための書込用セマフォ5を使用する。
【0049】
尚、従来のOS未搭載の環境下では、排他制御は出来ない為、例えば各既存アプリケーションのフラッシュメモリのアクセス領域が相互に異なるようにすること等が、既存アプリケーションのプログラマに要求されていた。この為、プログラマは、この様な制約の元で既存アプリケーションを作成する手間が掛かっていたが、新規アプリケーションを作成する際には、この様な制約を気にする必要はなくなる。
【0050】
本手法の特徴の1つは、既存アプリケーション2を変更しないで済むようにすることであり、各既存アプリケーション2は、それぞれOSが搭載される前と同様にして上記“startRead”、“checkReadEnd”、“startWrite”、“checkWriteEnd”の各関数名を用いて関数呼出しを行うが、上記アプリ実行部20やドライバ30の構成・動作によって、何等問題なくドライバ30のアクセス処理が行われることになる。
【0051】
更に、OS未搭載の環境下では排他制御が困難であるため、アプリケーション作成者は、複数のアプリケーションが同じファイルや同一の記憶領域にアクセスすることが無い様に、アプリケーション101を作成する必要があった。
【0052】
これに対して、OS搭載することで容易に排他制御が実現できるので、新規アプリケーション3は、既存アプリケーション2や他の新規アプリケーション3と同じファイルや同一の記憶領域にアクセスするように作成される場合も有り得る。この場合、もし、既存アプリケーション2が直接的にドライバ30の関数を呼び出す構成とした場合、排他制御が実現できず、既存アプリケーション2と新規アプリケーション3とで同時期に同じファイルや同一の記憶領域にアクセスする可能性があった。これに対して、本手法では、新規アプリケーション3だけでなく既存アプリケーション2の実行の際にも、アプリ実行部20を介してアクセスするので、この様な問題を解消できる。
【0053】
ここで、上記新規アプリケーション3は、OSが搭載された後に作成されたアプリケーションであり、OS(そのAPI等)の機能を利用してフラッシュメモリ13にアクセスする。つまり、新規アプリケーション3は、フラッシュメモリ13のアクセスの際には、データリード時には「読出」22を呼び出し、データライト時には「書込」25を呼び出すように作成されている。
【0054】
これら「読出」22や「書込」25の各処理機能自体は、既存の一般的なAPI等の機能と略同様と見做してもよい。「読出」22は、呼び出されると、まず、ドライバ30の「読出開始」処理31を呼出して実行させ、その後、ドライバ30の「読出完了確認」処理32を呼び出して実行させる。同様に、「書込」25は、呼び出されると、まず、ドライバ30の「書込開始」処理33を呼出して実行させ、その後、ドライバ30の「書込完了確認」処理34を呼び出して実行させる。
【0055】
これより、新規アプリケーション3の作成者は、OS搭載前のようなドライバ制御(読出開始と、その後の読出完了確認)を意識する必要はなく、単に「読出」(関数名;read)または「書込」(関数名;write)を指定すれば済むようになる。この様な利便性向上が、OS搭載のメリットの1つであるが、上述したように既存アプリケーション2に関して問題が生じるが、上記の通り本手法ではこの問題を解消できる。
【0056】
尚、本例では周辺装置は記憶装置であり、記憶装置の一例がフラッシュメモリ13である。記憶装置であるので、アクセス処理は基本的にデータリードとデータライトである。ドライバ30を介してアクセスする記憶装置は、情報処理装置10内蔵のものであってもよいし、外付けハードディスク等のように情報処理装置10に接続するものであってもよいし、他の情報処理装置内の記憶装置であってもよい。他の情報処理装置内の記憶装置である場合には、通信線を介してアクセスするものとなる。
【0057】
上述した各関数/処理の処理について、
図3〜
図10の各フローチャート図に示す。
以下、
図3〜
図10の各フローチャート図の処理について説明する。
まず、
図3(a)、(b)は、アプリ実行部20の「読出開始」21、「書込開始」24の処理フローチャート図である。
【0058】
図3(a)に示すように、上記アプリ実行部20の「読出開始」21は、既存アプリケーション2から呼び出されると、読出用セマフォ4から資源を獲得したら(ステップS11)、ドライバ30の「読出開始」処理31を呼び出す(ステップS12)。
【0059】
尚、図には示していないが、当然、読出用セマフォ4から資源を獲得出来なかった場合には、ステップS12の処理を実行することなく、例えばエラーを呼出し元の既存アプリケーション2に返す。
【0060】
尚、セマフォによる資源獲得は、既存の一般的な技術であり、特に詳細には説明しないが、例えばアクセス禁止の記憶領域(アドレス)や、他のアプリケーション等によってアクセス中の記憶領域(アドレス)やファイル等に対するアクセス要求があった場合には、資源(アクセス権といってもよい)は獲得出来ないことになる。
【0061】
尚、既存アプリケーション2は、「読出開始」21や「書込開始」24の呼出しの際には、アクセス要求する記憶領域(アドレス/アドレス範囲)やファイル名等を例えばパラメータとして渡している。これは、新規アプリケーション3による「読出」22や「書込」25の呼出しの際も同様である。
【0062】
また、
図3(b)に示すように、上記アプリ実行部20の「書込開始」24は、既存アプリケーション2から呼び出されると、書込用セマフォ5から資源を獲得したら(ステップS15)、ドライバ30の「書込開始」処理33を呼び出す(ステップS16)。
【0063】
尚、図示していないが、この場合も、書込用セマフォ5から資源を獲得出来なかった場合には、ステップS16の処理を実行することなく、例えばエラーを呼出し元の既存アプリケーション2に返す。
【0064】
なお、フラッシュメモリ13が読出と書込が同時にできない場合に対応するため、読出用セマフォ4と書込用セマフォ5とに分けるのではなく、1つのセマフォ(アクセス用セマフォと呼ぶものとする)にしてもよい。この場合には、ステップS11とS15の処理は、何れも、アクセス用セマフォから資源を獲得することになる。
【0065】
図4(a)、(b)は、アプリ実行部20の「読出完了確認」23、「書込完了確認」26の処理フローチャート図である。
図4(a)に示すように、上記アプリ実行部20の「読出完了確認」23は、既存アプリケーション2から呼び出されると、ドライバ30の「読出完了確認」処理32を呼び出す(ステップS21)。そして、「読出完了確認」処理32からの返信(“処理完了”の通知)を待ち、“処理完了”の返信があった場合には(ステップS22,YES)、読出用セマフォ4に資源を返却して(ステップS23)、本処理を終了する。
【0066】
一方、例えば所定の待ち時間内に“処理完了”の返信が無かった場合には(ステップS22,NO)、そのまま本処理を終了する。尚、その後、例えば所定時間後に再び本処理を実行するようにしてもよいが、この例に限らない。
【0067】
また、
図4(b)に示すように、上記アプリ実行部20の「書込完了確認」26は、既存アプリケーション2から呼び出されると、ドライバ30の「書込完了確認」処理34を呼び出す(ステップS25)。そして、「書込完了確認」処理34からの返信(“処理完了”の通知)を待ち、“処理完了”の返信があった場合には(ステップS26,YES)、書込用セマフォ5に資源を返却して(ステップS27)、本処理を終了する。
【0068】
一方、例えば所定の待ち時間内に“処理完了”の返信が無かった場合には(ステップS26,NO)、そのまま本処理を終了する。尚、その後、例えば所定時間後に再び本処理を実行するようにしてもよいが、この例に限らない。
【0069】
また、
図5(a)、(b)は、アプリ実行部20の「読出」22、「書込」25の処理フローチャート図である。尚、「読出」22、「書込」25とも、パラメータにはタイムアウト時間が含まれる。
【0070】
図5(a)に示すように、上記アプリ実行部20の「読出」22は、新規アプリケーション3から呼び出されると、まず、読出用セマフォ4から資源を獲得したら(ステップS31)、ドライバ30の「読出開始」処理31を呼び出す(ステップS32)。
【0071】
尚、図には示していないが、読出用セマフォ4から資源を獲得出来なかった場合には、例えば、ステップS32以降の処理を実行することなく、例えばエラーを呼出し元の新規アプリケーション3に返して、本処理を終了する。
【0072】
その後、「読出」22は、パラメータとして指定されたタイムアウト時間が経過するまで(若しくはステップS35の判定がYESとなるまで)、下記のステップS34〜S36のループ処理を繰り返し実行する(ステップS23)。
【0073】
・ドライバ30の「読出完了確認」処理32を呼び出す(ステップS34)。
・「読出完了確認」処理32からの返信を待ち、“処理完了”が返信された場合には(ステップS35,YES)、ループ処理を抜けてステップS37へ移行する。
【0074】
・“処理完了”が返信されない場合には(ステップS35,NO)、一定時間休止する(ステップS36)。そして、一定時間経過後、再びステップS34から処理実行する。
ステップS35の判定がYESとなることなくタイムアウト時間経過した場合も、ループ処理を抜けてステップS37へ移行する。
【0075】
ステップS37では、読出用セマフォ4に資源を返却する。そして、本処理を終了する。
尚、ステップS36における休止時間は、フラッシュメモリ13の特性、および情報処理装置10の性能要件を考慮して予め任意に決定されて設定されている。
【0076】
また、
図5(b)に示すように、上記アプリ実行部20の「書込」25は、新規アプリケーション3から呼び出されると、まず、書込用セマフォ5から資源を獲得したら(ステップS41)、ドライバ30の「書込開始」処理33を呼び出す(ステップS42)。
【0077】
尚、図には示していないが、書込用セマフォ5から資源を獲得出来なかった場合には、例えば、ステップS42以降の処理を実行することなく、例えばエラーを呼出し元の新規アプリケーション3に返して、本処理を終了する。
【0078】
その後、「書込」25は、パラメータとして指定されたタイムアウト時間が経過するまで(若しくはステップS45の判定がYESとなるまで)、下記のステップS44〜S46のループ処理を繰り返し実行する(ステップS43)。
【0079】
・ドライバ30の「書込完了確認」処理34を呼び出す(ステップS44)。
・「書込完了確認」処理34からの返信を待ち、“処理完了”が返信された場合には(ステップS45,YES)、ループ処理を抜けてステップS47へ移行する。
【0080】
・“処理完了”が返信されない場合には(ステップS45,NO)、一定時間休止する(ステップS46)。そして、一定時間経過後、再びステップS44から処理実行する。
ステップS45の判定がYESとなることなくタイムアウト時間経過した場合も、ループ処理を抜けてステップS47へ移行する。
【0081】
ステップS47では、書込用セマフォ5に資源を返却する。そして、本処理を終了する。
図6〜
図8は、ドライバ30の各関数の処理例を示すフローチャート図である。
【0082】
図6(a),(b)は、ドライバ30の「読出開始」処理31、「書込開始」処理33の処理フローチャート図である。
まず、
図6(a)に示す「読出開始」処理31は、上記メッセージ通信によってドライバタスク35に対してフラッシュメモリ13からのデータ読出しを依頼する(ステップS51)。尚、その際、アクセス先アドレスやファイル名等(「読出開始」21または「読出」22から、当該「読出開始」処理31の呼び出しの際に渡されている)を、ドライバタスク35に渡す。
【0083】
また、
図6(b)に示す「書込開始」処理33では、上記メッセージ通信によってドライバタスク35に対してフラッシュメモリ13へのデータ書込みを依頼する(ステップS55)。尚、その際、データとアクセス先アドレスやファイル名等(「書込開始」24または「書込」25から、当該「書込開始」処理33の呼び出しの際に渡されている)をドライバタスク35に渡す。
【0084】
図7(a),(b)は、ドライバ30の「読出完了確認」処理32、「書込完了確認」処理34の処理フローチャート図である。
ドライバ30の「読出完了確認」処理32は、上記ステップS51の処理後に、上記ステップS21やS34の処理によって上記「読出完了確認」23や「読出」22から呼び出されることで、
図7(a)の処理を実行することになる。
【0085】
すなわち、「読出完了確認」処理32は、ドライバタスク35が後述するステップS74の処理によって“読出完了”を通知してくるのを待つ(ステップS61)。そして、特に図示しないが、“読出完了”通知があったら、上記「読出完了確認」23や「読出」22に“処理完了”を返信する(これによって上記ステップS22やS35がYESとなる)。尚、上記ステップS61の待ち時間は、「読出完了確認」処理32の呼出時に呼出し元等が指定する。
【0086】
ドライバ30の「書込完了確認」処理34は、上記ステップS55の処理後に、上記ステップS25やS44の処理によって上記「書込完了確認」26や「書込」25から呼び出されることで、
図7(b)の処理を実行することになる。
【0087】
すなわち、「書込完了確認」処理34は、ドライバタスク35が後述するステップS76の処理によって“書込完了”を通知してくるのを待つ(ステップS65)。そして、特に図示しないが、“書込完了”通知があったら、上記「書込完了確認」26や「書込」25に“処理完了”を返信する(これによって上記ステップS26やS45がYESとなる)。
【0088】
図8は、ドライバタスク35の処理フローチャート図である。
ドライバタスク35は、例えば通常時は、「読出開始」処理31からの読出依頼、または「書込開始」処理33からの書込依頼の待ち状態となっている(ステップS71)。そして、任意の依頼があると、読出依頼、書込依頼の何れであるかを判定し(ステップS72)、読出依頼であればステップS73へ移行し、書込依頼であればステップS75へ移行する。
【0089】
すなわち、「読出開始」処理31からの読出依頼を受けた場合には、フラッシュメモリ13にアクセスしてデータを読み出す処理を実行する(ステップS73)。勿論、これは、上記渡されたアドレスやファイル名等を用いてアクセスする。そして、データ読出し完了したら、「読出完了確認」処理32に上記“読出完了”をメッセージ通信で通知する(ステップS74)。
【0090】
一方、「書込開始」処理33からの読出依頼を受けた場合には、フラッシュメモリ13にアクセスしてデータを書き込む処理を実行する(ステップS75)。勿論、これは、上記渡されたアドレスやファイル名等を用いてアクセスする。そして、データ書込み完了したら、「書込完了確認」処理34に上記“書込完了”をメッセージ通信で通知する(ステップS76)。
【0091】
図9は、既存アプリケーション2の処理動作例である。
尚、
図9には読出し処理を示すが、特に図示・説明しないが、書込み処理も読出し処理と略同様と考えてよい。
【0092】
ここで、
図9に示す「現在の状態」とは、アプリケーションがプロセッサの実行権を解放しながら動作する際、次に実行するべき処理を記録するための変数である。図示のステップS81では、この変数(現在の状態)を参照することで、ステップS82,S85,S87,S90の何れかの処理に分岐する。
【0093】
すなわち、ステップS81において、「現在の状態」が“前処理”であった場合には、ステップS82へ移行する。この場合には、前処理を実行し(ステップS82)、前処理が終了したならば(ステップS83,YES)、上記「現在の状態」を“読出開始”へと変更する(ステップS84)。
【0094】
そして、本処理を終了することで、プロセッサの実行権を解放する。これによって、プロセッサの実行権は、例えばドライバタスク35等が有することになり、その後、再び当該アプリケーションが実行開始されると、今度はステップS81において「現在の状態」が“読出開始”であることになり、ステップS85へと移行することになる。この場合には、上述した「読出開始」21を呼び出す処理を実行し(ステップS85)、上記「現在の状態」を“読出完了確認”へと変更する(ステップS86)。そして、本処理を終了する。
【0095】
これによって、次に
図9の処理を実行するときには、ステップS81において「現在の状態」が“読出完了確認”であることになり、ステップS87へと移行することになる。この場合には、上述した「読出完了確認」23を呼び出す処理を実行し(ステップS87)、上述した“処理完了”が返信されてくるのを待つ。そして、上述した“処理完了”が返信されると(ステップS88,YES)、上記「現在の状態」を“後処理”へと変更する(ステップS89)。そして、本処理を終了する。
【0096】
これによって、次に
図9の処理を実行するときには、ステップS81において「現在の状態」が“後処理”であることになり、ステップS90へと移行する。この場合には、後処理を実行し(ステップS90)、後処理が終了したならば(ステップS91,YES)、上記「現在の状態」を“完了”へと変更する(ステップS92)。尚、ステップS92の処理を、上記「現在の状態」を“前処理”へと変更する処理としてもよい。
【0097】
尚、上記前処理は、読出し処理の場合には必ずしも実行するものではないが、書込み処理の場合であれば書込みデータの生成処理等である。また、上記後処理は、例えば書込み処理の場合であれば書込み完了を他のアプリケーションに通知する処理等であるが、この例に限らない。
【0098】
尚、
図9の処理には、上記従来の説明における逐一“プロセッサの実行権を解放する”ことも含まれている。すなわち、
図9の処理は、
図10のように前処理から後処理までの一連の処理を連続して実行するのではなく、例えば前処理を実行完了したら(完了しなくてもステップS83がNOであれば)上記の通り一旦処理終了となる。これは、上記の通り、読出開始、読出完了確認、後処理についても同様である。この様に一連の処理を一旦終了させることが上記“プロセッサの実行権を逐一解放する”ことに相当する。
【0099】
この様に、
図9のアプリケーション処理を逐一中断することで、他のアプリケーション等の処理を実行可能となる。そして、中断後に再開したときに、どこまで処理実行したのか分かるようにする為に、上記のように「現在の状態」に記録している。
【0100】
一方、OSが搭載された環境下では、後述する
図10の新規アプリケーション3の処理のように、逐一“プロセッサの実行権を解放する”ことは必要なくなる。しかし、本手法では既存アプリケーション2(101)を修正等することなくそのまま実行可能とするものであるので、既存アプリケーション2はOS未搭載のときのまま上記
図9の処理を実行することになる。
【0101】
図10は、新規アプリケーション3の処理動作例である。
図示の例では、新規アプリケーション3は、上記前処理を実行した後(ステップS101)、アプリ実行部20の上述した「読出」22を呼び出して処理実行させる(ステップS102)。「読出」22の処理によってフラッシュメモリ13からの読出データを得たら、例えばこの読出データを使用して書込データを作成する等の処理を行う(ステップS103)。この例に限らないが、任意の書込データが発生したら、アプリ実行部20の上述した「書込」25を呼び出して処理実行させる(ステップS104)。そして、上述した“処理完了”の返信などによって書込み完了したことを確認したら、上記後処理を実行する(ステップS105)。
【0102】
上記
図9、
図10は、単に、OS未搭載の環境に応じたアプリケーションと、OS搭載の環境に応じたアプリケーションとの比較の為に示したものであり、
図9、
図10の処理自体は一般的なものである。
【0103】
図9と
図10とを比較すれば明らかなように、例えばデータリード処理に関しては、新規アプリケーション3の場合は「読出」22を呼び出せば済み、既存アプリケーション2の場合(「読出開始」21と「読出完了確認」23の呼出しが必要、且つ変数「現在の状態」による状態管理や“プロセッサの実行権を逐一解放する”こと等も必要)に比べて、アプリケーション中の処理呼出回数を少なくすることができる、状態管理が不要等、処理負荷が大幅に軽減できる。この点自体は、OS搭載による一般的なメリットであるが、既存アプリケーション2の処理を新規アプリケーション3のように変更することは、手間が掛かることは明らかである。この為、本手法では、既存アプリケーション2を変更しなくて済むようにしている。
【0104】
その為に、例えば、既存アプリケーション2が、ドライバ30ではなくアプリ実行部20中の処理機能を呼び出すようにするため、アプリ実行部20中の上記「読出開始」21、「読出完了確認」23、「書込開始」24、「書込完了確認」26の各処理機能の名称(処理名というものとする;C言語であれば関数名であるので、上記説明では関数名としたが、この例に限らない)は、OS搭載前の情報処理装置10のドライバ(ドライバ20に相当)における各処理の処理名と同一にする(換言すれば、既存アプリケーション2中に記述された呼出し先名称(関数名など)と同一とする)。
【0105】
そのうえで、アプリ実行部20中の上記各処理の処理内容は、ドライバ30中の対応する処理(関数/処理コード等)を呼び出す処理としている。
図11に、本例の情報処理装置10におけるタスク管理制御の一例を示す。
【0106】
図2に示すように、本例の情報処理装置10では、新旧アプリケーション(既存アプリケーション2と新規アプリケーション3)が混在する状態となる。この様な状況で新旧アプリケーションの動作を管理する為に、例えば
図11(a)に示すようにする。
【0107】
ここで、
図11では、既存アプリケーション2としてアプリケーションA、アプリケーションBがあり、新規アプリケーション3としてアプリケーションCがあるものとする。図示のA,B,C,が、それぞれ、アプリケーションA,B,Cを意味する。
【0108】
そして、複数の既存アプリケーションA,Bに関しては、
図11(a)に示すように、タスクαによって管理制御する。図示の通り、タスクαは、アプリケーションAとアプリケーションBとを順次繰り返し実行させるものである。これより、例えば、まずアプリケーションAについて上記前処理に係る一連の処理(例えばステップS82,S83,S84)を実行して“終了”したら、続いて、アプリケーションBについても上記前処理に係る一連の処理(例えばステップS82,S83,S84)を実行して“終了”したら、続いて、アプリケーションAについて上記読出開始に係る一連の処理(ステップS85等)を実行させることになる。
【0109】
一方、新規アプリケーションCについては、図示のように、タスクβによって管理制御する。
そして、タスクディスパッチャ1が、これら複数のタスクα、βを管理制御する。この管理制御方法は任意でよいが、例えば
図11(b)に示すように、優先度に応じて制御してもよい。尚、優先度は、予め各アプリケーション毎に任意に設定される。優先度に応じたタスク管理自体は、既存のタスク管理手法であるので、ここではこれ以上詳細には説明しない。
【0110】
尚、特に図示しないが、タスクディスパッチャ1は、更に、上記ドライバタスク35等も管理制御する。
上記情報処理装置10は、具体例としては、例えば、電源装置、UPS(無停電電源装置)、インバータ、各種家電製品(エアコン等)である。換言すれば、情報処理装置10は、一例としては、“組込みソフトウェア”の搭載機器(組込み機器、組込みシステムなど)と考えても良い。つまり、この例の場合、上記既存アプリケーション2(101)は“組込みソフトウェア”であることになる。また、この例の場合、上記新規アプリケーション3も“組込みソフトウェア”であってもよい。
【0111】
“組込みソフトウェア”の搭載機器としては、例えば、洗濯機、炊飯器、エアコン、テレビ、ビデオ、DVDプレイヤー、デジタルカメラ、プリンタ、コピー機、携帯電話、自動車、カーナビゲーションシステム、信号機、エレベーター、自動販売機、券売機、リモコン等が知られているが、これらの例に限らない。
【0112】
“組込みソフトウェア”搭載機器は、従来では基本的にはOSが無いものであったが、近年ではOS搭載するものが増えてきている。例えば、従来のOS未搭載の“組込みソフトウェア”搭載機器における“組込みソフトウェア”が既存アプリケーション2(101)に相当し、近年のOS搭載型の“組込みソフトウェア”搭載機器における“組込みソフトウェア”が新規アプリケーション3に相当すると見做すこともできる。
【0113】
この様に、例えば“組込みソフトウェア”搭載機器等について、OS未搭載の状態からOS搭載の状態へと変更した場合に、上述した既存アプリケーション2(101)に関する問題が生じるが、本手法ではこの問題を解決できる。
【0114】
すなわち、本手法では、上述したように、オペレーティングシステムが実装されていない環境で動作する各アプリケーション(各既存アプリケーション2)全てを、何ら手を加えることなく(修正等を行う必要なく)、オペレーティングシステムが実装されていない環境で動作させることができ、既存アプリケーション2の修正等に係わる作業負担を軽減できる。これは特に、既存アプリケーション2が多数ある場合には、作業負担を大幅に軽減することができる。