JP2018206233A - 情報処理装置、プロセス切り替え方法及びプログラム - Google Patents

情報処理装置、プロセス切り替え方法及びプログラム Download PDF

Info

Publication number
JP2018206233A
JP2018206233A JP2017113275A JP2017113275A JP2018206233A JP 2018206233 A JP2018206233 A JP 2018206233A JP 2017113275 A JP2017113275 A JP 2017113275A JP 2017113275 A JP2017113275 A JP 2017113275A JP 2018206233 A JP2018206233 A JP 2018206233A
Authority
JP
Japan
Prior art keywords
thread
entity
memory space
stack
data
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
Application number
JP2017113275A
Other languages
English (en)
Inventor
悟志 梶本
Satoshi Kajimoto
悟志 梶本
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2017113275A priority Critical patent/JP2018206233A/ja
Publication of JP2018206233A publication Critical patent/JP2018206233A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Retry When Errors Occur (AREA)
  • Debugging And Monitoring (AREA)

Abstract

【課題】ソフトウェアの信頼性を向上させる情報処理装置を提供する。【解決手段】情報処理装置は、メモリと演算装置を備え、オペレーティングシステムに従って動作する。オペレーティングシステムは、予め定められた処理を行う実体プロセスと、実体プロセスと対となるスタックプロセスと、を生成する。情報処理装置では、実体プロセスに割り当てられた第1のメモリ空間にデータが書き込まれたことに応じて、当該書き込まれたデータは対となるスタックプロセスに割り当てられた第2のメモリ空間に複製される。オペレーティングシステムは、実体プロセスに障害が発生した場合に、スタックプロセスを新たな実体プロセスとして実行する。【選択図】図1

Description

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

Claims (10)

  1. メモリと演算装置を備え、オペレーティングシステムに従って動作する情報処理装置であって、
    前記オペレーティングシステムは、予め定められた処理を行う実体プロセスと、前記実体プロセスと対となるスタックプロセスと、を生成し、
    前記実体プロセスに割り当てられた第1のメモリ空間にデータが書き込まれたことに応じて、前記書き込まれたデータは前記対となるスタックプロセスに割り当てられた第2のメモリ空間に複製され、
    前記オペレーティングシステムは、
    前記実体プロセスに障害が発生した場合に、前記スタックプロセスを新たな前記実体プロセスとして実行する、
    情報処理装置。
  2. 前記オペレーティングシステムは、
    前記実体プロセスに前記演算装置における実行単位である第1のスレッドを生成すると共に、前記スタックプロセスに前記第1のスレッドと対となる第2のスレッドを生成し、
    前記第1のスレッドが前記第1のメモリ空間にデータを書き込んだことに応じて、前記書き込まれたデータは前記第2のメモリ空間に複製される、請求項1の情報処理装置。
  3. 前記オペレーティングシステムは、
    前記実体プロセスに前記第1のメモリ空間を管理する第1の管理スレッドを生成すると共に、前記スタックプロセスに前記第2のメモリ空間を管理する第2の管理スレッドを生成し、
    前記第1の管理スレッドから前記第2の管理スレッドに、前記第1のスレッドが前記第1のメモリ空間に書き込んだデータが少なくとも通知され、
    前記第2の管理スレッドは、前記通知されたデータを前記第2のメモリ空間に複製する、請求項2の情報処理装置。
  4. 前記第1の管理スレッドは、前記第1のスレッドが前記第1のメモリ空間にデータを書き込んだ際に、少なくとも前記書き込まれたデータを前記第2の管理スレッドに通知する、請求項3の情報処理装置。
  5. 前記第1の管理スレッドは、前記第1のスレッドが前記第1のメモリ空間にデータを書き込んだ際、前記書き込まれたデータに加え、実行命令の番地を管理する走行ポイントを前記第2の管理スレッドに通知し、
    前記第2の管理スレッドは、前記通知された走行ポイントを前記第2のメモリ空間に複製する、請求項4の情報処理装置。
  6. 前記第1の管理スレッドは、前記第1のメモリ空間に書き込まれたデータを、所定の周期で前記第2の管理スレッドに通知する、請求項3の情報処理装置。
  7. 前記第1の管理スレッドは、前記第1のメモリ空間を走査し、前記第1のメモリ空間に更新データが存在する場合に、前記更新データを前記第2の管理スレッドに通知する、請求項3の情報処理装置。
  8. 前記第1のスレッドは、演算結果を前記第1のメモリ空間に書き込んだ際、前記書き込まれたデータを前記第2のスレッドに通知し、
    前記第2のスレッドは、前記通知されたデータを前記第2のメモリ空間に複製する、請求項2の情報処理装置。
  9. メモリと演算装置を備え、オペレーティングシステムに従って動作する情報処理装置において、
    予め定められた処理を行う実体プロセスと、前記実体プロセスと対となるスタックプロセスと、を生成するステップと、
    前記実体プロセスに割り当てられた第1のメモリ空間にデータが書き込まれたことに応じて、前記書き込まれたデータを前記対となるスタックプロセスに割り当てられた第2のメモリ空間に複製するステップと、
    前記実体プロセスに障害が発生した場合に、前記スタックプロセスを新たな前記実体プロセスとして実行するステップと、
    を含む、プロセス切り替え方法。
  10. 情報処理装置に搭載されたコンピュータに実行させるプログラムであって、
    予め定められた処理を行う実体プロセスと、前記実体プロセスと対となるスタックプロセスと、を生成する処理と、
    前記実体プロセスに割り当てられた第1のメモリ空間にデータが書き込まれたことに応じて、前記書き込まれたデータを前記対となるスタックプロセスに割り当てられた第2のメモリ空間に複製する処理と、
    前記実体プロセスに障害が発生した場合に、前記スタックプロセスを新たな前記実体プロセスとして実行する処理と、
    を実行させるプログラム。
JP2017113275A 2017-06-08 2017-06-08 情報処理装置、プロセス切り替え方法及びプログラム Pending JP2018206233A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2017113275A JP2018206233A (ja) 2017-06-08 2017-06-08 情報処理装置、プロセス切り替え方法及びプログラム

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2017113275A JP2018206233A (ja) 2017-06-08 2017-06-08 情報処理装置、プロセス切り替え方法及びプログラム

Publications (1)

Publication Number Publication Date
JP2018206233A true JP2018206233A (ja) 2018-12-27

Family

ID=64957331

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017113275A Pending JP2018206233A (ja) 2017-06-08 2017-06-08 情報処理装置、プロセス切り替え方法及びプログラム

Country Status (1)

Country Link
JP (1) JP2018206233A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220247819A1 (en) * 2020-07-21 2022-08-04 Cisco Technology, Inc. Reuse of execution environments while guaranteeing isolation in serverless computing

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20220247819A1 (en) * 2020-07-21 2022-08-04 Cisco Technology, Inc. Reuse of execution environments while guaranteeing isolation in serverless computing
US11558462B2 (en) * 2020-07-21 2023-01-17 Cisco Technology, Inc. Reuse of execution environments while guaranteeing isolation in serverless computing
US20230137181A1 (en) * 2020-07-21 2023-05-04 Cisco Technology, Inc. Reuse of execution environments while guaranteeing isolation in serverless computing
US11882184B2 (en) * 2020-07-21 2024-01-23 Cisco Technology, Inc. Reuse of execution environments while guaranteeing isolation in serverless computing

Similar Documents

Publication Publication Date Title
US10073739B2 (en) Methods, apparatus and system for selective duplication of subtasks
US8990617B2 (en) Fault-tolerant computer system, fault-tolerant computer system control method and recording medium storing control program for fault-tolerant computer system
US8341455B2 (en) Management method and system for managing replication by taking into account cluster storage accessibility to a host computer
US9251002B2 (en) System and method for writing checkpointing data
US20150278046A1 (en) Methods and systems to hot-swap a virtual machine
JP6123388B2 (ja) フォールトトレラントサーバ
US10176035B2 (en) System, information processing device, and non-transitory medium for storing program for migration of virtual machine
JPWO2013121502A1 (ja) プロセッサシステム
JP5287974B2 (ja) 演算処理システム、再同期方法、およびファームプログラム
CN112395050B (zh) 一种虚拟机备份方法、装置、电子设备及可读存储介质
CN113934571A (zh) 用于页高速缓存管理的方法和装置
CN105808391A (zh) 一种热替换cpu节点的方法及装置
JP2018206233A (ja) 情報処理装置、プロセス切り替え方法及びプログラム
CN111158955B (zh) 一种基于卷复制的高可用系统以及多服务器数据同步方法
JP2012198651A (ja) クラスタシステム、仮想マシンサーバ、仮想マシンのフェイルオーバ方法、仮想マシンのフェイルオーバプログラム
JP6335336B2 (ja) ストレージシステムおよびその制御方法
JP6819061B2 (ja) 情報処理装置、プロセス切り替え方法及びプログラム
US7243257B2 (en) Computer system for preventing inter-node fault propagation
JP2010231295A (ja) 解析システム
JP5335150B2 (ja) 計算機装置及びプログラム
JP6464704B2 (ja) フォールトトレラントシステム、稼働系装置、待機系装置、フェイルオーバー方法、および、フェイルオーバープログラム
JP2017041110A (ja) マルチコンピュータシステム,管理装置および管理プログラム
WO2018179739A1 (ja) 情報処理装置、情報処理方法及びプログラム
JP2007334717A (ja) 分散オブジェクトの高信頼化方式
US20120233420A1 (en) Fault-tolerant system, memory control method, and computer-readable recording medium storing programs