(57)【要約】【課題】ソフトウェアの信頼性を向上させる情報処理装置を提供する。【解決手段】情報処理装置は、メモリと演算装置を備え、オペレーティングシステムに従って動作する。オペレーティングシステムは、予め定められた処理を行う実体プロセスと、実体プロセスと対となるスタックプロセスと、を生成する。情報処理装置では、実体プロセスに割り当てられた第１のメモリ空間にデータが書き込まれたことに応じて、当該書き込まれたデータは対となるスタックプロセスに割り当てられた第２のメモリ空間に複製される。オペレーティングシステムは、実体プロセスに障害が発生した場合に、スタックプロセスを新たな実体プロセスとして実行する。【選択図】図１
2018206233.tif 000002
【特許請求の範囲】
【請求項１】
メモリと演算装置を備え、オペレーティングシステムに従って動作する情報処理装置であって、
前記オペレーティングシステムは、予め定められた処理を行う実体プロセスと、前記実体プロセスと対となるスタックプロセスと、を生成し、
前記実体プロセスに割り当てられた第１のメモリ空間にデータが書き込まれたことに応じて、前記書き込まれたデータは前記対となるスタックプロセスに割り当てられた第２のメモリ空間に複製され、
前記オペレーティングシステムは、
前記実体プロセスに障害が発生した場合に、前記スタックプロセスを新たな前記実体プロセスとして実行する、
情報処理装置。
【請求項２】
前記オペレーティングシステムは、
前記実体プロセスに前記演算装置における実行単位である第１のスレッドを生成すると共に、前記スタックプロセスに前記第１のスレッドと対となる第２のスレッドを生成し、
前記第１のスレッドが前記第１のメモリ空間にデータを書き込んだことに応じて、前記書き込まれたデータは前記第２のメモリ空間に複製される、請求項１の情報処理装置。
【請求項３】
前記オペレーティングシステムは、
前記実体プロセスに前記第１のメモリ空間を管理する第１の管理スレッドを生成すると共に、前記スタックプロセスに前記第２のメモリ空間を管理する第２の管理スレッドを生成し、
前記第１の管理スレッドから前記第２の管理スレッドに、前記第１のスレッドが前記第１のメモリ空間に書き込んだデータが少なくとも通知され、
前記第２の管理スレッドは、前記通知されたデータを前記第２のメモリ空間に複製する、請求項２の情報処理装置。
【請求項４】
前記第１の管理スレッドは、前記第１のスレッドが前記第１のメモリ空間にデータを書き込んだ際に、少なくとも前記書き込まれたデータを前記第２の管理スレッドに通知する、請求項３の情報処理装置。
【請求項５】
前記第１の管理スレッドは、前記第１のスレッドが前記第１のメモリ空間にデータを書き込んだ際、前記書き込まれたデータに加え、実行命令の番地を管理する走行ポイントを前記第２の管理スレッドに通知し、
前記第２の管理スレッドは、前記通知された走行ポイントを前記第２のメモリ空間に複製する、請求項４の情報処理装置。
【請求項６】
前記第１の管理スレッドは、前記第１のメモリ空間に書き込まれたデータを、所定の周期で前記第２の管理スレッドに通知する、請求項３の情報処理装置。
【請求項７】
前記第１の管理スレッドは、前記第１のメモリ空間を走査し、前記第１のメモリ空間に更新データが存在する場合に、前記更新データを前記第２の管理スレッドに通知する、請求項３の情報処理装置。
【請求項８】
前記第１のスレッドは、演算結果を前記第１のメモリ空間に書き込んだ際、前記書き込まれたデータを前記第２のスレッドに通知し、
前記第２のスレッドは、前記通知されたデータを前記第２のメモリ空間に複製する、請求項２の情報処理装置。
【請求項９】
メモリと演算装置を備え、オペレーティングシステムに従って動作する情報処理装置において、
予め定められた処理を行う実体プロセスと、前記実体プロセスと対となるスタックプロセスと、を生成するステップと、
前記実体プロセスに割り当てられた第１のメモリ空間にデータが書き込まれたことに応じて、前記書き込まれたデータを前記対となるスタックプロセスに割り当てられた第２のメモリ空間に複製するステップと、
前記実体プロセスに障害が発生した場合に、前記スタックプロセスを新たな前記実体プロセスとして実行するステップと、
を含む、プロセス切り替え方法。
【請求項１０】
情報処理装置に搭載されたコンピュータに実行させるプログラムであって、
予め定められた処理を行う実体プロセスと、前記実体プロセスと対となるスタックプロセスと、を生成する処理と、
前記実体プロセスに割り当てられた第１のメモリ空間にデータが書き込まれたことに応じて、前記書き込まれたデータを前記対となるスタックプロセスに割り当てられた第２のメモリ空間に複製する処理と、
前記実体プロセスに障害が発生した場合に、前記スタックプロセスを新たな前記実体プロセスとして実行する処理と、
を実行させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、プロセス切り替え方法及びプログラムに関する。
【背景技術】
【０００２】
情報処理装置、電子機器、システム等は、演算装置（ＣＰＵ；Central Processing Unit）にプログラムを実行させ、必要な機能を実現する。近年の情報処理装置等において、当該装置等に組み込まれたプログラム（組み込みソフトウェア）は必要不可欠なものとなり、その比重が年々増加している。ソフトウェアの比重が増加する要因の１つとして、ＣＰＵの能力が向上していることが挙げられる。つまり、近年、情報処理装置の処理高速化や低コスト化を目的とし、必要な機能の大半をソフトウェアにて実現する傾向が顕著となってきている。そのため、ソフトウェアの不具合による装置、システムの停止が多大な影響を及ぼすようになってきた。
【０００３】
多くの装置、システム等にて用いられているソフトウェアは、オペレーティングシステム（ＯＳ；Operating System）と、当該ＯＳ上で動作するアプリケーションプログラムにより構成される。通常の情報処理装置等では、図８に示すように、オペレーティングシステム２１上に、プロセスと当該プロセス内にスレッドが生成される。図８では、オペレーティングシステム２１が、２つのプロセス７０、７１を生成する。さらに、オペレーティングシステム２１は、プロセス７０内に４つのスレッド７０−１〜７０−４を生成し、プロセス７１内に４つのスレッド７１−１〜７１−４を生成する。
【０００４】
なお、プロセスはプログラムの実行単位であり、スレッドはＣＰＵの割り当て実行単位である。１つのプロセスには、少なくとも１以上のスレッドが含まれ、当該スレッドがＣＰＵにて実行される単位となる。換言するならば、ソフトウェアを構成する機能ブロック（アプリケーション）がプロセスに相当し、プロセス内の処理ブロックがスレッドに相当する。図８に示すソフトウェア構造では、オペレーティングシステム２１により生成されたプロセス７０、７１及びスレッドは共に実体となる。
【０００５】
装置やシステムに組み込まれたプログラムによる不具合がシステム等に多大な影響を与えることを説明したが、ハードウェアによる不具合もシステム等に多大な影響を与える。特許文献１において、システム障害を回避するための冗長化されたハードウェアが開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平０８−６９１０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
なお、上記先行技術文献の開示を、本書に引用をもって繰り込むものとする。以下の分析は、本発明者らによってなされたものである。
【０００８】
図８に示すソフトウェア構造では、図示したプロセス、スレッドのうち、いずれか１つでも停止すると、ソフトウェア動作に影響を与え、システムに多大な影響を与える（システムが停止し、復旧作業が必要となる）。例えば、図８に示すソフトウェア構造により、ある機器の動作（機能）が実現されているとすると、プロセス７０が停止することにより、当該動作（機能）の維持ができない。図８に示すようなソフトウェア構造では、必要な機能を単一のプロセス、スレッドにより生成し、処理する方式が採用されているためである。
【０００９】
本発明は、ソフトウェアの信頼性を向上させることに寄与する、情報処理装置、プロセス切り替え方法及びプログラムを提供することを目的とする。
【００１０】
なお、特許文献１が開示する技術は、ハードウェア的にプロセスを冗長化（例えば、特許文献１の図３を参照）するものであり、１つのオペレーティングシステム上に生成されたプロセスの不具合によるシステムへの影響を回避することとは無関係である。
【課題を解決するための手段】
【００１１】
本発明の第１の視点によれば、メモリと演算装置を備え、オペレーティングシステムに従って動作する情報処理装置であって、前記オペレーティングシステムは、予め定められた処理を行う実体プロセスと、前記実体プロセスと対となるスタックプロセスと、を生成し、前記実体プロセスに割り当てられた第１のメモリ空間にデータが書き込まれたことに応じて、前記書き込まれたデータは前記対となるスタックプロセスに割り当てられた第２のメモリ空間に複製され、前記オペレーティングシステムは、前記実体プロセスに障害が発生した場合に、前記スタックプロセスを新たな前記実体プロセスとして実行する、情報処理装置が提供される。
【００１２】
本発明の第２の視点によれば、メモリと演算装置を備え、オペレーティングシステムに従って動作する情報処理装置において、予め定められた処理を行う実体プロセスと、前記実体プロセスと対となるスタックプロセスと、を生成するステップと、前記実体プロセスに割り当てられた第１のメモリ空間にデータが書き込まれたことに応じて、前記書き込まれたデータを前記対となるスタックプロセスに割り当てられた第２のメモリ空間に複製するステップと、前記実体プロセスに障害が発生した場合に、前記スタックプロセスを新たな前記実体プロセスとして実行するステップと、を含む、プロセス切り替え方法が提供される。
【００１３】
本発明の第３の視点によれば、情報処理装置に搭載されたコンピュータに実行させるプログラムであって、予め定められた処理を行う実体プロセスと、前記実体プロセスと対となるスタックプロセスと、を生成する処理と、前記実体プロセスに割り当てられた第１のメモリ空間にデータが書き込まれたことに応じて、前記書き込まれたデータを前記対となるスタックプロセスに割り当てられた第２のメモリ空間に複製する処理と、前記実体プロセスに障害が発生した場合に、前記スタックプロセスを新たな前記実体プロセスとして実行する処理と、を実行させるプログラムが提供される。
なお、このプログラムは、コンピュータが読み取り可能な記憶媒体に記録することができる。記憶媒体は、半導体メモリ、ハードディスク、磁気記録媒体、光記録媒体等の非トランジェント（non-transient）なものとすることができる。本発明は、コンピュータプログラム製品として具現することも可能である。
【発明の効果】
【００１４】
本発明の各視点によれば、ソフトウェアの信頼性を向上させることに寄与する、情報処理装置、プロセス切り替え方法及びプログラムが、提供される。
【図面の簡単な説明】
【００１５】
【図１】一実施形態の概要を説明するための図である。
【図２】第１の実施形態に係る情報処理装置のハードウェア構成の一例を示す図である。
【図３】第１の実施形態に係るソフトウェア構造の一例を示す図である。
【図４】実体プロセスとスタックプロセスを説明するための図である。
【図５】第１の実施形態に係る情報処理装置の動作の一例を示すフローチャートである。
【図６】第１の実施形態に係る情報処理装置の動作を説明するための図である。
【図７】第１の実施形態に係る情報処理装置の動作を説明するための図である。
【図８】ソフトウェア構造を説明するための図である。
【図９】第２の実施形態における実体プロセスとスタックプロセスを説明するための図である。
【発明を実施するための形態】
【００１６】
初めに、一実施形態の概要について説明する。なお、この概要に付記した図面参照符号は、理解を助けるための一例として各要素に便宜上付記したものであり、この概要の記載はなんらの限定を意図するものではない。
【００１７】
一実施形態に係る情報処理装置１００は、メモリと演算装置を備え、オペレーティングシステムに従って動作する（図１参照）。オペレーティングシステムは、予め定められた処理を行う実体プロセスと、実体プロセスと対となるスタックプロセスと、を生成する。情報処理装置１００では、実体プロセスに割り当てられた第１のメモリ空間にデータが書き込まれたことに応じて、当該書き込まれたデータは対となるスタックプロセスに割り当てられた第２のメモリ空間に複製される。オペレーティングシステムは、実体プロセスに障害が発生した場合に、スタックプロセスを新たな実体プロセスとして実行する。
【００１８】
一実施形態に係る情報処理装置１００は、本来であればソフトウェア動作が停止してしまう状況である、実体プロセスに障害が発生するとプロセスの切り替えを実行する。その結果、ソフトウェア動作が継続され、ソフトウェアの信頼性を向上させることができる。また、新たな実体プロセス（プロセス切替前のスタックプロセス）が必要とするデータは、実体プロセスの演算に応じてリアルタイムにスタックプロセスに割り当てられた第２のメモリ空間に複製されるため、実体プロセスからスタックプロセスへ短時間で切り替えることが可能となる。即ち、ソフトウェアが停止している期間を短くすることができる。
【００１９】
以下に具体的な実施の形態について、図面を参照してさらに詳しく説明する。なお、各実施形態において同一構成要素には同一の符号を付し、その説明を省略する。
【００２０】
［第１の実施形態］
第１の実施形態について、図面を用いてより詳細に説明する。
【００２１】
図２は、第１の実施形態に係る情報処理装置１０のハードウェア構成の一例を示す図である。図２を参照すると、情報処理装置１０は、ＣＰＵ（Central Processing Unit）１１と、ＲＡＭ（Random Access Memory）１２と、ＨＤＤ（Hard Disk Drive）１３と、を含んで構成される。
【００２２】
ＣＰＵ１１は、ＨＤＤ１３やＲＯＭ（Read Only Memory；図示せず）に格納されたプログラムに基づいて、情報処理装置１０に含まれる各種デバイスを制御する。
【００２３】
ＲＡＭ１２は、ＣＰＵ１１のワーク領域、データ退避領域、プログラムのロード領域等を有する。
【００２４】
ＨＤＤ１３は、ＣＰＵ１１にて実行されるプログラムやアプリケーションデータ等を記憶する。
【００２５】
ＣＰＵ１１、ＲＡＭ１２及びＨＤＤ１３は、内部バスにより相互に接続される。
【００２６】
なお、図２に示す構成は、情報処理装置１０のハードウェア構成を限定する趣旨ではない。情報処理装置１０は、図示しないハードウェアを含んでもよい。あるいは、情報処理装置１０に含まれるＣＰＵ等の数も図２の例示に限定する趣旨ではなく、例えば、複数のＣＰＵが情報処理装置１０に含まれていてもよい。
【００２７】
情報処理装置１０は、メモリ（ＲＡＭ１２）と演算装置（ＣＰＵ１１）を備え、オペレーティングシステムに従って動作する。
【００２８】
ＣＰＵ１１では、オペレーティングシステム（ＯＳ）が動作する。オペレーティングシステムは、プロセス、スレッドを生成し、当該プロセス等により各種機能が実現される。情報処理装置１０の機能（アプリケーション）は、実現しようとする機能、要件に応じて複数の処理に分割されて構成される。オペレーティングシステム上に生成されるプロセスは、複数、生成され得る。同様に、スレッドに関しても、各プロセス内に複数、生成され得る。
【００２９】
上述のようにプロセスは、オペレーティングシステムにより生成され、その必要資源としてメモリ空間の割り当てが行われる。オペレーティングシステムにより割り当てられたメモリ空間は、プロセス単位にて保護される。即ち、異なるプロセスへ割り当てられたメモリ空間へ、他のプロセスがアクセスすることはできない。
【００３０】
スレッドに関しても、プロセスと同様、オペレーティングシステムにより生成されるが、スレッドはプロセス内に生成されるものである。プロセス内に生成される複数のスレッドのそれぞれは、プロセスに対して割り当てられたメモリ空間を共有し、相互に利用することが可能である。
【００３１】
次に、図面を参照しつつ、第１の実施形態に係るソフトウェア構造を説明する。
【００３２】
図３は、第１の実施形態に係るソフトウェア構造の一例を示す図である。図３を参照すると、例えば、オペレーティングシステム２０は、４つのプロセスを生成する。さらに、オペレーティングシステム２０は、例えば、各プロセス内に８つのスレッドを生成する。なお、図３に示す構造は例示であって、オペレーティングシステム２０が生成するプロセスやスレッドの数を限定する趣旨ではない。
【００３３】
オペレーティングシステム２０が生成する４つのプロセスのうち、プロセス３０ａとプロセス３０ｂが１つの組をなし、プロセス３１ａとプロセス３１ｂが１つの組をなす。プロセス３０ａ、プロセス３１ａは、実際の処理を行う実体となるプロセスとして生成される。一方、プロセス３０ｂ及びプロセス３１ｂは、対となるプロセス３０ａ及び３１ａの予備となるプロセスとして生成される。
【００３４】
以降の説明において、実際の処理を行うプロセスを「実体プロセス」と表記し、実体プロセスの予備となるプロセスを「スタックプロセス」と表記する。
【００３５】
各プロセス内に生成されるスレッドもプロセスと同様に、２つのスレッドがそれぞれ組となって生成される。例えば、図３に示すプロセス３０ａには、スレッド３０ａ−１ａ〜３０ａ−４ａとスレッド３０ａ−１ｂ〜３０ａ−４ｂという８つのスレッドが生成される。生成される８つのスレッドのうち、スレッド３０ａ−１ａとスレッド３０ａ−１ｂが組となって生成される。他のスレッドも同様に、スレッド３０ａ−２ａとスレッド３０ａ−２ｂ、スレッド３０ａ−３ａとスレッド３０ａ−３ｂ、スレッド３０ａ−４ａとスレッド３０ａ−４ｂがそれぞれ１組として生成される。
【００３６】
オペレーティングシステム２０が、各プロセス内に生成するスレッドに関してもプロセスと同様に、実際の処理を行うスレッドと、当該スレッドの予備として生成されるスレッドの２種が存在する。図３では、スレッド３０ａ−１ａ〜３０ａ−４ａが実際の処理を行うスレッドであり、スレッド３０ａ−１ｂ〜３０ａ−４ｂがその予備となるスレッドである。
【００３７】
スレッドに関しても、プロセスと同様に、実際の処理を行うスレッドを「実体スレッド」と表記し、実体スレッドの予備となるスレッドを「スタックスレッド」と表記する。
【００３８】
スタックプロセスにおいても実体プロセスと同様に、８つのスレッドが生成される。なお、スタックプロセスにおけるスレッド生成に関し、図３では、スタックプロセス（プロセス３０ｂ、３１ｂ）に含まれるスレッドに関する符号の表記を省略している。また、図３以降の図面において、実体プロセス、実体スレッド等の何らかの処理を行うプロセス、スレッド（待機状態ではないプロセス、スレッド）は白色領域にて表記し、スタックプロセス、スタックスレッドは灰色領域にて表記する。また、スタックプロセス内に生成されるスレッドに関しては、スタックプロセス自体が待機状態となるため、「実体プロセス」や「スタックプロセス」といった概念が生じ得ないが、説明の便宜上、スタックプロセス内のスレッドはスタックスレッドと扱う。そのため、スタックプロセス内のスレッドは、灰色領域により図示される。
【００３９】
上記説明したように、プロセス３０ａとプロセス３０ｂは組となってオペレーティングシステム２０により生成されるプロセスであり、同一の機能を実現するためのプロセスである。しかし、機能実現を担う実体はプロセス３０ａであり、通常の動作（通常のソフトウェア動作）では、スタックプロセスであるプロセス３０ｂは動作しない。実体プロセスが通常動作している間は、スタックプロセスは、実体プロセスの動作を監視する機能（スレッド）を除き待機状態となる。
【００４０】
実体プロセスとスタックプロセスの動作に関する関係を図示すると、図４のようになる。オペレーティングシステム２０は、例えば、実体プロセス４０ａとスタックプロセス４０ｂを図４のとおり生成したとする。なお、図４では、実体プロセス４０ａの実体スレッド４０ａ−１〜４０ａ−１と、対応するスタックプロセス４０ｂのスレッド４０ｂ−１〜４０ｂ−４を図示している。
【００４１】
実体プロセス４０ａに含まれる５つのスレッドのうち、スレッド４０ａ−１〜４０ａ−４は通常動作のスレッドとして動作する。対して、スタックプロセス４０ｂに含まれる５つのスレッドのうち、スレッド４０ｂ−１〜４０ｂ−４は実体プロセス４０が通常動作している間は動作せず、監視スレッド４０ｂ−５だけが動作する。
【００４２】
上記の実現のため、オペレーティングシステム２０は、実体プロセス４０ａを実行する際には、当該プロセスに含まれるスレッドを実行待ち行列に登録するなどして、実行する。その際、オペレーティングシステム２０は、スタックプロセス４０ｂの監視スレッド４０ｂ−５も実行待ち行列に登録するなどして実行する。このようなオペレーティングシステム２０の動作により、実体プロセス４０ａの運用状態（実行状態）をスタックプロセス４０ｂが監視できるようになる。
【００４３】
上記実体プロセスとスタックプロセスの関係は、実体スレッドとスタックスレッドにも当てはまる。つまり、スレッドにおいても、実体プロセスに生成されたスレッドのうち、実体スレッドが通常のソフトウェア動作を行い、スタックスレッドは通常動作を行わない。スタックスレッドは、スタックプロセスと同様に、対となる実体スレッドの動作を監視する機能だけが有効となる。より具体的には、オペレーティングシステム２０は、対となる実体スレッドとスタックスレッドを実行するが、実体スレッドが動作している間は、スタックスレッドにおいて、当該実体スレッドの動作を監視する機能（関数、モジュール）だけが動作する。
【００４４】
なお、スタックプロセス、スタックスレッドによる実体プロセス、実体スレッドの監視には、タイマ（所謂、ウォッチドックタイマ）の利用が考えられる。例えば、図４を参照すると、実体プロセス４０ａに含まれる監視スレッド４０ａ−５は、スタックプロセス４０ｂの監視スレッド４０ｂ−５に向けてメッセージを送信する。一方、監視スレッド４０ｂ−５は、所定期間以内に、上記メッセージを受信できない場合に、実体プロセス４０ａに障害が発生していると判定する。
【００４５】
あるいは、監視スレッド４０ａ−５と監視スレッド４０ｂ−５が相互にメッセージのやり取りを行い、監視スレッド４０ｂ−５にて当該メッセージを受信できない場合に、スタックプロセス４０ｂは、実体プロセス４０ａの障害発生を検知してもよい。
【００４６】
スタックスレッドによる実体スレッドの監視も同様に、タイマやメッセージの送受信により監視対象の障害発生を検知する。
【００４７】
また、スタックプロセス、スタックスレッドは共に、監視対象の実体プロセス、実体スレッドにおける障害発生を検知した場合には、当該事実をオペレーティングシステム２０に通知する。当該通知を受けたオペレーティングシステム２０は、実体プロセス、実体スレッドと、スタックプロセス、スタックスレッドを切り替える（入れ替える）動作を行う。さらに、オペレーティングシステム２０は、上記切り替え動作後に、新たなスタックプロセス、スタックスレッドを生成し、再実行する（スタックプロセス等の監視機能を有効とする）。
【００４８】
上記説明したように、情報処理装置１０は、主に、既存のオペレーティングシステムに対し、対となるプロセス（スレッド）を生成する機能、障害発生時に実体プロセス（実体スレッド）とスタックプロセス（スタックスレッド）を切り替える機能、新たなスタックプロセス（スタックスレッド）を生成する機能等を追加することで実現できる。
【００４９】
次に、図５及び図６を参照しつつ、情報処理装置１０の動作を説明する。ここでは、オペレーティングシステム２０によるプロセスの生成と、プロセス障害によるスタックプロセスを実体プロセスに切り替える動作について説明する。
【００５０】
オペレーティングシステム２０は、情報処理装置１０が起動すると（電源が投入されると）又は外部からのユーザ指示等により、実体プロセスとスタックプロセスの組を生成する（ステップＳ１０１）。即ち、オペレーティングシステム２０は、１つの機能を実現するため、予め定められた処理を行う実体プロセスと、実体プロセスと対となるプロセスであって、実体プロセスの動作を監視するスタックプロセスと、を生成する。例えば、図６の上段に示すように、オペレーティングシステム２０は、プロセス５０ａを実体プロセス、プロセス５０ｂをスタックプロセスとして生成する。
【００５１】
次に、オペレーティングシステム２０は、各プロセス内にスレッドを生成する（ステップＳ１０２）。例えば、図６の上段に示すように、オペレーティングシステム２０は、プロセス５０ａの内部に、スレッド５０ａ−１ａ〜５０ａ−４ａを実体スレッドとして生成し、スレッド５０ａ−１ｂ〜５０ａ−４ｂを各実体スレッドと対となるスタックスレッドとして生成する。なお、オペレーティングシステム２０が生成する上記スレッドの中には、監視用のスレッド（図６にて図示せず）も含まれる。プロセス５０ｂに関しても同様に、オペレーティングシステム２０は、８つのスレッドと１つの監視用スレッドを生成する。
【００５２】
オペレーティングシステム２０は、プロセス５０ａとプロセス５０ｂをそれぞれ異なるプロセスとして生成するが、各プロセス内は同一の機能として生成される。通常のソフトウェア動作では、実体プロセスであるプロセス５０ａ及び実体スレッドであるスレッド５０ａ−１ａ〜５０ａ−４ａが実際の処理を行い、対となるプロセス５０ｂ及びプロセス５０ａ内のスレッド５０ａ−１ｂ〜５０ａ−４ｂは待機状態となる。但し、スタックプロセス及びスタックスレッドにおいて、監視機能は動作する。即ち、スタックプロセスであるプロセス５０ｂは、実体プロセスであるプロセス５０ａの運用状態を監視する。
【００５３】
このような状態（通常動作状態）にて、プロセス５０ａに障害が発生した場合を考える。
【００５４】
実体プロセスの動作が停止すると、当該実体プロセスの動作停止をスタックプロセスが検出し、オペレーティングシステム２０に通知する（ステップＳ１０３）。図６の例では、スタックプロセスであるプロセス５０ｂが、実体プロセスであるプロセス５０ａの動作停止を検出し、その旨をオペレーティングシステム２０に通知する。
【００５５】
その後、ステップＳ１０４において、オペレーティングシステム２０は、実体プロセスに割り当てられたメモリをスタックプロセスのメモリ空間へ複製する（コピーする）。つまり、オペレーティングシステム２０は、スタックプロセスが実体プロセスの障害を検知した場合に、スタックプロセスに割り当てられたメモリ空間に、実体プロセスに割り当てられたメモリ空間に書き込まれた値（データ）を複製する。
【００５６】
メモリの複製が完了すると、オペレーティングシステム２０は、メモリが複製されたスタックプロセスを新たな実体プロセスとして実行する（ステップＳ１０５）。その際、オペレーティングシステム２０は、スタックプロセスに含まれる通常動作用のスレッドを実行待ち行列に登録する。その結果、図６の例では、プロセス５０ｂが実体プロセスとなり、当該実体プロセスに含まれるスレッドにソフトウェア処理が引き継がれ、通常動作が継続する。
【００５７】
プロセスの切り替え後、オペレーティングシステム２０は、動作が停止しているプロセス（先の実体プロセス）を削除し（ステップＳ１０６）、新たな実体プロセスに対応した新たなスタックプロセスを生成し、再実行する（ステップＳ１０７）。図６の例では、図６の下段に示すプロセス５０ｃが新たなスタックプロセスとして生成され、実行される。その結果、先のスタックプロセスであるプロセス５０ｂは新たな実体プロセスとして動作し、新たに生成されたプロセス５０ｃは当該実体プロセスの運用状態を監視する。
【００５８】
次に、図７を参照しつつ、実体スレッドに障害が発生した際の動作を説明する。
【００５９】
図７では、実体プロセス内のスレッド障害に関し、スタックスレッドに切り替わる動作を説明する。
【００６０】
オペレーティングシステム２０は、図７の上段に示すように、２つのプロセス５０ａとプロセス５０ｂを生成する。オペレーティングシステム２０は、各プロセス内に８つのスレッドを生成する。プロセス５０ａ内のスレッド５０ａ−１ａ〜５０ａ−４ａが通常のソフトウェア動作時に動作する実体スレッドであり、他のスレッド５０ａ−１ｂ〜５０ａ−４ｂがスタックスレッドとなる。
【００６１】
上述のように、スタックスレッドであるスレッド５０ａ−１ｂ〜５０ａ−４ｂは、対となる実体スレッド（図７の例ではスレッド５０ａ−１ａ〜５０ａ−４ａ）の動作状態を監視する他は、待機状態となる。
【００６２】
このような状況のもと、実体プロセスであるプロセス５０ａのスレッド５０ａ−１ａに障害が発生し、そのソフトウェア動作が停止したものとする。実体スレッドであるスレッド５０ａ−１ａの動作が停止すると、そのスタックスレッドであるスレッド５０ａ−１ｂの監視機能により、スレッド５０ａ−１ａの動作停止を検出する。
【００６３】
その後、スレッド５０ａ−１ｂは、スレッド５０ａ−１ａに替わり、実体スレッドとして動作を継続する。具体的には、スレッド５０ａ−１ｂの内部で動作していた実体スレッド監視用のモジュールから通常動作用のモジュールに切り替える。上述のように、スレッドは、プロセス内にてメモリ共有が可能であり、スタックスレッドから実体スレッドへの切り替えに際し、メモリ空間の複製は不要となる。つまり、実体スレッドとスタックスレッドは、同一のプロセス内においてメモリを共有しており、スタックスレッドは、実体スレッドの障害を検知した場合に、当該共有されたメモリを使用して実体スレッドの動作を継続する。
【００６４】
また、スレッドの切り替えに際し、オペレーティングシステム２０は、動作が停止しているスレッド５０ａ−１ａを削除（消滅）し、新たなスタックスレッドとしてスレッド５０ａ−１ｃを生成し、当該スレッドを実行する。
【００６５】
その結果、スレッド５０ａ−１ｂが実体スレッドとして動作すると共に、新たに生成されたスレッド５０ａ−１ｃがスタックスレッドとして機能し、実体スレッドの運用状態を監視する。
【００６６】
上記説明したように、第１の実施形態では、ソフトウェア構造それ自体を冗長化、２重化することにより、ソフトウェア構造が強化され、情報処理装置及び当該装置を含むシステムの信頼性を向上させることができる。つまり、スタック構造により高い信頼性を備えたプログラムの実現が可能となる。より具体的には、本来であれば、ソフトウェア動作が停止してしまう状況である、プロセス又はスレッドの停止を、スタックプロセス及び／又はスタックスレッドとして生成されたプロセス又はスレッドが監視する。その後、プロセス等が停止した際には、スタックプロセスと実体プロセスを切り替え、ソフトウェア動作を継続する。また、スタックプロセス、スタックスレッドは、ソフトウェアの通常処理時は、待機状態とすることで、通常処理に影響を与えず、運用することが可能となる。
【００６７】
また、プロセスには、オペレーティングシステムによりアクセス可能なメモリ領域が割り当てられ、プロセス単位で保護されている。そのため、スタックプロセスに処理の実体を移動させる際は、メモリの複製を行ったうえで、プロセスの切り替えを行い、ソフトウェア動作を継続させる。スタックプロセスへの切り替えが完了すると、動作が停止したプロセスをオペレーティングシステム上から削除する。
【００６８】
また、特定のスレッドが停止し、動作不能となった場合であっても、スタックスレッドが動作を継続する。スレッドは、メモリ空間を共有することが可能な構造であるため、処理の実体が実体スレッドから、スタックスレッドに切り替わるだけで、メモリ空間の複製動作は不要となる。スタックスレッドへの切り替え後、動作が停止したスレッドはプロセス上から削除される。つまり、第１の実施形態では、スレッド間でのメモリの共有利用が可能となる利点を生かして、信頼性の高いソフトウェアの提供を可能としている。
【００６９】
以上のように、プログラム生成時のプロセス、スレッドをスタック構造で生成することにより、処理の実体であるプロセス、スレッドが停止した場合、システムの再起動を必要としていたものが、システムの再起動をせず、ソフトウェア動作を継続することができる。また、停止したプロセス、スレッドだけを再起動させ、再度スタックプロセス、スタックスレッドとして動作させることにより、ソフトウェアの信頼性を向上させることが可能となる。
【００７０】
さらに、第１の実施形態に係る情報処理装置１０は、プロセスを実行するハードウェアは１つで良いので、特許文献１に開示されるような技術と比較して、ソフトウェアによる障害発生要因に対して容易に対処できる。その理由は、１つのハードウェア（ＣＰＵ）内で処理が完結するためであり、ハードウェア間の連携を必要としないためである。また、第１の実施形態に係る情報処理装置１０の障害復旧は、特許文献１に開示された技術よりも高速に実行可能である。プロセス、スレッドの切り替えによりソフトウェア処理が継続されるためである。
【００７１】
さらに、特許文献１に開示された技術では、ハードウェア自体を切り替える必要があるが、第１の実施形態に係る情報処理装置１０では、そのような切り替えは不要であり、ソフトウェア上での切り替え処理により障害の復旧が可能である。
【００７２】
［第２の実施形態］
第１の実施形態では、実体プロセスの動作が停止すると、当該実体プロセスの動作停止をスタックプロセスが検出し、オペレーティングシステム２０に通知する。当該通知を受けたオペレーティングシステム２０は、実体プロセスに割り当てられたメモリ空間に書き込まれたデータをスタックプロセスに割り当てられたメモリ空間に複製している。その後、オペレーティングシステム２０は、スタックプロセスを新たな実体プロセスとして実行することで、スタックプロセスによるソフトウェア処理の継続を実現している。
【００７３】
第２の実施形態では、実体プロセスに割り当てられたメモリ空間にデータが書き込まれたことに応じて、当該書き込まれたデータは対となるスタックプロセスに割り当てられたメモリ空間に複製される場合について説明する。つまり、第２の実施形態では、実体プロセスが、各処理（各実体スレッド）の演算結果及びその関連情報を、スタックプロセス側のスタックスレッドに引き渡す場合について説明する。
【００７４】
第２の実施形態では、各スタックスレッドは、実体スレッドによる演算結果（メモリ空間に書き込まれたデータ）をリアルタイムに取得する。即ち、第２の実施形態では、メモリ情報の同期をリアルタイムにて実行することで、実体プロセスの停止時におけるプロセス間でのメモリコピーを不要とし、プロセス切替えによるソフトウェアの停止期間を短縮する。
【００７５】
なお、第２の実施形態に係る情報処理装置１０のハードウェア構成は、第１の実施形態に係る情報処理装置１０のハードウェア構成と同一とすることができるので、図２に相当する説明を省略する。また、第１及び第２の実施形態においてソフトウェア構造も同一とすることができるので、図３に相当する説明を省略する。第２の実施形態においても、オペレーティングシステム２０は、実体プロセスに演算装置における実行単位である実体スレッドを生成すると共に、スタックプロセスに実体スレッドと対となるスレッドを生成する。
【００７６】
第２の実施形態では、例えば、図９に示すように、オペレーティングシステム２０が、実体プロセス８０ａと、実体プロセス８０ａと対となるスタックプロセス８０ｂと、を生成するものとする。実体プロセス８０ａとスタックプロセス８０ｂは対となるプロセスであり、同一の機能を実現する。また、第１の実施形態と同様に、各プロセス内には、８つのスレッド（４つの実体スレッド、４つのスタックスレッド）が生成される。なお、図９には、実体プロセス８０ａに生成される４つの実体スレッド８０ａ−１〜８０ａ−４と、当該４つの実体スレッドに対応する、スタックプロセス８０ｂのスレッド８０ｂ−１〜８０ｂ−４を図示している。
【００７７】
さらに、第２の実施形態では、オペレーティングシステム２０は、管理スレッド８０ａ−６、８０ｂ−６を、実体プロセス８０ａ及びスタックプロセス８０ｂのそれぞれに生成する。管理スレッド８０ａ−６は、実体プロセス８０ａに割り当てられたメモリ空間を管理する。同様に、管理スレッド８０ｂ−６は、スタックプロセス８０ｂに割り当てられたメモリ空間を管理する。当該管理スレッド８０ａ−６及び８０ｂ−６は、対となって動作する。つまり、スタックプロセス８０ｂでは、待機中であっても、管理スレッド８０ｂ−６が動作する。
【００７８】
第２の実施形態では、例えば、実体スレッド８０ａ−１が実体プロセス８０ａに割り当てられたメモリ空間にデータを書き込んだことに応じて、当該書き込まれたデータはスタックプロセス８０ｂに割り当てられたメモリ空間に複製される。以下、その詳細を説明する。
【００７９】
実体プロセスに含まれる各実体スレッド８０ａ−１〜８０ａ−４は、演算結果をメモリに書き込むタイミングにて、演算結果（書込アドレス、書込データ）、実行命令の番地を管理する走行ポイント（所謂、プログラムカウンタ）を管理スレッドに通知する（図９のステップＳ２０１；データ書込通知）。
【００８０】
管理スレッド８０ａ−６は、各実体スレッドから上記通知を受信すると、当該受信した内容（演算結果、走行ポイント）を、対となるスタックプロセス８０ｂの管理スレッド８０ｂ−６に通知する（図９のステップＳ２０２）。つまり、管理スレッド８０ａ−６は、実体スレッドがメモリ空間にデータを書き込んだ際に、少なくとも書き込まれたデータ（演算結果）を管理スレッド８０ｂ−６に通知する。なお、以降の説明では、管理スレッド８０ａ−６から管理スレッド８０ｂ−６への上記通知を「メモリ更新通知」と表記する。
【００８１】
スタックプロセス８０ｂの管理スレッド８０ｂ−６は、メモリ更新通知を取得すると、当該通知に含まれる演算結果（アドレス、書込データ）及び走行ポイント（プログラムカウンタ）をスタックプロセス８０ｂに割り当てられたメモリ空間に反映する。即ち、管理スレッド８０ｂ−６は、取得した演算結果（通知されたデータ）及び走行ポイントを、自身に割り当てられたメモリ空間に複製する（図９のステップＳ２０３）。
【００８２】
第２の実施形態に係る実体プロセス８０ａとスタックプロセス８０ｂの管理スレッド８０ａ−６及び８０ｂ−６は、実体スレッドが演算を行い、その結果をメモリに書き込むたびに上記動作を繰り返す。その結果、実体プロセス８０ａに割り当てられたメモリ空間の内容が、スタックプロセス８０ｂに割り当てられたメモリ空間に複製（コピー）される。
【００８３】
オペレーティングシステム２０は、実体プロセス８０ａにて障害発生を検知すると、スタックプロセス８０ｂを新たな実体プロセスとして実行する。その際、スタックプロセス８０ｂに割り当てられたメモリ空間には、実体プロセス８０ａに割り当てられたメモリ空間の内容が複製されているので、当該新たな実体プロセスによるソフトウェア処理が迅速に引き継がれることになる。
【００８４】
上記第２の実施形態における説明は例示であって、種々の変形が可能である。
【００８５】
例えば、上記第２の実施形態では、管理スレッド８０ａ−６、８０ｂ−６を介して、実体プロセス８０ａに割り当てられたメモリ空間を、スタックプロセス８０ｂに割り当てられたメモリ空間に複製しているが、スレッド間で情報のやり取りを直接行っても良い。例えば、実体スレッド８０ａ−１が、メモリに演算結果を書き込むたびに、スタックプロセス８０ｂの対応するスレッド８０ｂ−１に対し、演算結果（書込アドレス、書込データ）及び走行ポイントに係る情報を通知してもよい。この場合、スタックプロセス８０ｂの各スレッドは、データの受信処理と当該受信データの保存処理（メモリへの書込処理）を行うことになる。このように、実体スレッドは、演算結果をメモリ空間に書き込んだ際、当該書き込まれたデータをスタックプロセス８０ｂ内のスレッドに通知し、当該通知を受信したスレッドは、通知されたデータを第２のメモリ空間に複製してもよい。
【００８６】
第２の実施形態では、走行ポイント（プログラムカウンタ）をメモリ更新通知に含めているが、プログラムカウンタに係る情報がなくとも、スタックプロセス８０ｂの各スレッドにて処理が正常に行える場合（プログラムコードの先頭から実行してもよい場合）、走行ポイントの通知は不要となる。
【００８７】
第２の実施形態では、実体スレッドがメモリに演算結果を書き込むたびに、管理スレッド８０ａ−６が、メモリ更新通知を発行している。しかし、管理スレッド８０ａ−６が、実体プロセス８０ａに割り当てられたメモリ空間を走査（スキャン）し、更新データを検出した場合に、メモリ更新通知を発行してもよい。つまり、管理スレッド８０ａ−６は、実体プロセス８０ａに割り当てられたメモリ空間を走査し、当該メモリ空間に更新データが存在する場合に、当該更新データを管理スレッド８０ｂ−６に通知してもよい。
【００８８】
あるいは、管理スレッド８０ａ−６は、実体プロセス８０ａに割り当てられたメモリ空間に書き込まれたデータを、所定の周期で管理スレッド８０ｂ−６に通知してもよい。即ち、管理スレッド８０ａ−６は、所定の間隔でメモリ空間の内容を含むメモリ更新通知を発行してもよい。即ち、予め決まったデッドラインに基づく周期にて、実体プロセス８０ａに割り当てられたメモリ空間の内容がスタックプロセス８０ｂのメモリ空間に複製されるようにしてもよい。この場合、実体プロセス８０ａのメモリ空間に変更がない場合であっても、先のメモリ更新通知と同じ内容の通知がスタックプロセス８０ｂに送信されることになる。
【００８９】
以上のように、第２の実施形態では、第１の実施形態と同様に、実体プロセス及び実体スレッドが処理の実体を担い、スタックプロセス及びスタックスレッドは、ソフトウェアの通常処理時は、待機状態とさせておくことで、通常処理への影響は与えず、信頼性の高いソフトウェアの運用が可能となる。また、第２の実施形態では、処理の実体となる実体プロセス内の実体スレッドは、実行した処理結果がメモリ上に出力されるたびに、プログラムの走行ポイントと、実行結果をスタックプロセスの内のスレッドに通知する。スタックプロセス内のスレッドは、実体となるスレッドから走行ポイントと、実行結果を自スレッド内のメモリ上に記憶する。このように、実体スレッド側から走行ポイントと実行結果をスタックプロセス側へ受け渡すことで、プロセスが停止した場合のソフトウェアの停止動作を抑止するとともに、実体のプロセスから、スタックプロセスへの切替え期間を短縮し、ソフトウェア停止期間を短縮することが可能となる。
【００９０】
第１の実施形態では、通常処理を行っている実体のプロセスが停止したことを契機にメモリ情報のコピーを行い、プロセス切替えにより処理の継続を行っていた。第２の実施形態では、実体のプロセスが動作しているタイミングで、処理結果、走行ポイント情報をスタックプロセス及びその内部のスレッドに通知することにより、実体プロセスが停止した際のコピー処理による一時的な処理の中断をなくすことができる。また、走行ポイント（プログラムカウンタ）も演算結果と共にスタックプロセス側に通知されるので、スタックプロセス側では、どの命令から実行を再開すればよいか正確に判断することができる。
【００９１】
上記の説明により、本発明の産業上の利用可能性は明らかであるが、本発明は、機器、システムの停止が多大な影響を及ぼすネットワークインフラ設備、サーバー設備、通信システム機器などに好適に適用可能である。
【００９２】
上記の実施形態の一部又は全部は、以下の付記のようにも記載され得るが、以下には限られない。
［付記１］
上述の第１の視点に係る情報処理装置のとおりである。
［付記２］
前記オペレーティングシステムは、
前記実体プロセスに前記演算装置における実行単位である第１のスレッドを生成すると共に、前記スタックプロセスに前記第１のスレッドと対となる第２のスレッドを生成し、
前記第１のスレッドが前記第１のメモリ空間にデータを書き込んだことに応じて、前記書き込まれたデータは前記第２のメモリ空間に複製される、好ましくは付記１の情報処理装置。
［付記３］
前記オペレーティングシステムは、
前記実体プロセスに前記第１のメモリ空間を管理する第１の管理スレッドを生成すると共に、前記スタックプロセスに前記第２のメモリ空間を管理する第２の管理スレッドを生成し、
前記第１の管理スレッドから前記第２の管理スレッドに、前記第１のスレッドが前記第１のメモリ空間に書き込んだデータが少なくとも通知され、
前記第２の管理スレッドは、前記通知されたデータを前記第２のメモリ空間に複製する、好ましくは付記２の情報処理装置。
［付記４］
前記第１の管理スレッドは、前記第１のスレッドが前記第１のメモリ空間にデータを書き込んだ際に、少なくとも前記書き込まれたデータを前記第２の管理スレッドに通知する、好ましくは付記３の情報処理装置。
［付記５］
前記第１の管理スレッドは、前記第１のスレッドが前記第１のメモリ空間にデータを書き込んだ際、前記書き込まれたデータに加え、実行命令の番地を管理する走行ポイントを前記第２の管理スレッドに通知し、
前記第２の管理スレッドは、前記通知された走行ポイントを前記第２のメモリ空間に複製する、好ましくは付記４の情報処理装置。
［付記６］
前記第１の管理スレッドは、前記第１のメモリ空間に書き込まれたデータを、所定の周期で前記第２の管理スレッドに通知する、好ましくは付記３の情報処理装置。
［付記７］
前記第１の管理スレッドは、前記第１のメモリ空間を走査し、前記第１のメモリ空間に更新データが存在する場合に、前記更新データを前記第２の管理スレッドに通知する、好ましくは付記３の情報処理装置。
［付記８］
前記第１のスレッドは、演算結果を前記第１のメモリ空間に書き込んだ際、前記書き込まれたデータを前記第２のスレッドに通知し、
前記第２のスレッドは、前記通知されたデータを前記第２のメモリ空間に複製する、好ましくは付記２の情報処理装置。
［付記９］
上述の第２の視点に係るプロセス切り替え方法のとおりである。
［付記１０］
上述の第３の視点に係るプログラムのとおりである。
なお、付記９及び付記１０の形態は、付記１の形態と同様に、付記２の形態〜付記８の形態に展開することが可能である。
【００９３】
なお、引用した上記の特許文献の開示は、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の全開示の枠内において種々の開示要素（各請求項の各要素、各実施形態ないし実施例の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし、選択が可能である。すなわち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。特に、本書に記載した数値範囲については、当該範囲内に含まれる任意の数値ないし小範囲が、別段の記載のない場合でも具体的に記載されているものと解釈されるべきである。
【符号の説明】
【００９４】
１０、１００  情報処理装置
１１  ＣＰＵ（Central Processing Unit）
１２  ＲＡＭ（Random Access Memory）
１３  ＨＤＤ（Hard Disk Drive）
２０、２１  オペレーティングシステム
３０ａ、３０ｂ、３１ａ、３１ｂ、５０ａ〜５０ｃ、７０、７１  プロセス
３０ａ−１ａ〜３０ａ−４ａ、３０ａ−１ｂ〜３０ａ−４ｂ、３１ａ−１ａ〜３１ａ−４ａ、３１ａ−１ｂ〜３１ａ−４ｂ、４０ａ−１〜４０ａ−４、４０ｂ−１〜４０ｂ−４、５０ａ−１ａ〜５０ａ−４ａ、５０ａ−１ｂ〜５０ａ−４ｂ、５０ｂ−１ａ〜５０ｂ−４ａ、５０ｂ−１ｂ〜５０ｂ−４ｂ、５０ｃ−１ａ〜５０ｃ−４ａ、５０ｃ−１ｂ〜５０ｃ−４ｂ、５０ａ−１ｃ、７０−１〜７０−４、７１−１〜７１−４、８０ａ−１〜８０ａ−４、８０ｂ−１〜８０ｂ−４  スレッド
４０ａ、８０ａ  実体プロセス
４０ｂ、８０ｂ  スタックプロセス
４０ａ−５、４０ｂ−５、８０ａ−５、８０ｂ−５  監視スレッド
８０ａ−６、８０ｂ−６  管理スレッド
【図１】
2018206233.tif 000003
【図２】
2018206233.tif 000004
【図３】
2018206233.tif 000005
【図４】
2018206233.tif 000006
【図５】
2018206233.tif 000007
【図６】
2018206233.tif 000008
【図７】
2018206233.tif 000009
【図８】
2018206233.tif 000010
【図９】
2018206233.tif 000011