(57)【要約】【課題】ソフトウェアの信頼性を向上させる情報処理装置を提供する。【解決手段】情報処理装置は、メモリと演算装置を備え、オペレーティングシステムに従って動作する。オペレーティングシステムは、予め定められた処理を行う実体プロセスと、実体プロセスと対となるプロセスであって、実体プロセスの動作を監視するスタックプロセスと、を生成する。また、オペレーティングシステムは、スタックプロセスが実体プロセスの障害を検知した場合に、スタックプロセスに割り当てられたメモリ空間に、実体プロセスに割り当てられたメモリ空間の値を複製し、メモリ空間に値が複製されたスタックプロセスを新たな前記実体プロセスとして実行する。【選択図】図１
2017182115.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）
２０、２１  オペレーティングシステム
３０ａ、３０ｂ、３１ａ、３１ｂ、５０ａ〜５０ｃ、７０、７１  プロセス
３０ａ−１ａ〜３０ａ−４ａ、３０ａ−１ｂ〜３０ａ−４ｂ、３１ａ−１ａ〜３１ａ−４ａ、３１ａ−１ｂ〜３１ａ−４ｂ、４０ａ−１〜４０ａ−４、４０ｂ−１〜４０ｂ−４、５０ａ−１ａ〜５０ａ−４ａ、５０ａ−１ｂ〜５０ａ−４ｂ、５０ｂ−１ａ〜５０ｂ−４ａ、５０ｂ−１ｂ〜５０ｂ−４ｂ、５０ｃ−１ａ〜５０ｃ−４ａ、５０ｃ−１ｂ〜５０ｃ−４ｂ、５０ａ−１ｃ、７０−１〜７０−４、７１−１〜７１−４  スレッド
４０ａ  実体プロセス
４０ｂ  スタックプロセス
４０ａ−５、４０ｂ−５  監視スレッド
【図１】
2017182115.tif 000003
【図２】
2017182115.tif 000004
【図３】
2017182115.tif 000005
【図４】
2017182115.tif 000006
【図５】
2017182115.tif 000007
【図６】
2017182115.tif 000008
【図７】
2017182115.tif 000009
【図８】
2017182115.tif 000010