JP5516747B2 - マルチコアプロセッサシステム、監視制御方法、および監視制御プログラム - Google Patents

マルチコアプロセッサシステム、監視制御方法、および監視制御プログラム Download PDF

Info

Publication number
JP5516747B2
JP5516747B2 JP2012537511A JP2012537511A JP5516747B2 JP 5516747 B2 JP5516747 B2 JP 5516747B2 JP 2012537511 A JP2012537511 A JP 2012537511A JP 2012537511 A JP2012537511 A JP 2012537511A JP 5516747 B2 JP5516747 B2 JP 5516747B2
Authority
JP
Japan
Prior art keywords
thread
cpu
core
monitoring
monitoring thread
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.)
Expired - Fee Related
Application number
JP2012537511A
Other languages
English (en)
Other versions
JPWO2012046302A1 (ja
Inventor
貴久 鈴木
浩一郎 山下
宏真 山内
康志 栗原
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.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
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 Fujitsu Ltd filed Critical Fujitsu Ltd
Publication of JPWO2012046302A1 publication Critical patent/JPWO2012046302A1/ja
Application granted granted Critical
Publication of JP5516747B2 publication Critical patent/JP5516747B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1438Restarting or rejuvenating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/0703Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation
    • G06F11/0706Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment
    • G06F11/0721Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment within a central processing unit [CPU]
    • G06F11/0724Error or fault processing not based on redundancy, i.e. by taking additional measures to deal with the error or fault not making use of redundancy in operation, in hardware, or in data representation the processing taking place on a specific hardware platform or in a specific software environment within a central processing unit [CPU] in a multiprocessor or a multi-core unit
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1405Saving, restoring, recovering or retrying at machine instruction level
    • G06F11/1407Checkpointing the instruction stream
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/3009Thread control instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3842Speculative instruction execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/30Monitoring
    • G06F11/3003Monitoring arrangements specially adapted to the computing system or computing system component being monitored
    • G06F11/3017Monitoring arrangements specially adapted to the computing system or computing system component being monitored where the computing system is implementing multitasking
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/40Data acquisition and logging
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/865Monitoring of software
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/5018Thread allocation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Description

本発明は、装置に対する監視を制御するマルチコアプロセッサシステム、監視制御方法、および監視制御プログラムに関する。
従来から、コンピュータシステムの信頼性を向上させる技術の一つとして、チェックポイント−リスタートという技術が開示されている(たとえば、下記非特許文献1を参照。)。この技術は、定期的に個々のアプリケーションもしくはシステム全体の状態情報をバックアップし、障害発生時にシステムの状態をバックアップした時点に巻き戻して実行を再開する手法である。ここで状態情報とは、メモリの内容やプロセッサ内のレジスタ情報を含んだ情報である。
非特許文献1の技術は、大型機の分野で計算に数日かかるような高度なシミュレーション処理中に障害が発生した場合に、処理を一から再実行しなくても済むように考案された技術である。したがって同時に稼働しているアプリケーションプログラムは一つであり、個々のアプリケーションに対してチェックポイント−リスタートにより高信頼化を行っていた。近年では、組込システムにおいても、自動車の制御のような高度な信頼性が求められる処理を行っており、このようなシステムは障害発生時に長時間制御不能な状態を避けるために、非特許文献1の技術によって障害発生後即座に処理に復帰できるようにしている。
非特許文献1の技術を組込システムに適用する場合、組込システムでは複数のアプリケーションが連携して動作するため、連携している全てのアプリケーションに対してチェックポイント−リスタートを行うように設定することになるため、開発効率が低下する。また、組込システムは大型機に比べCPU数、メモリ量が少ないため、非特許文献1の技術を組込システムに適用する場合は、OS等により、組込システム全体に対してチェックポイント−リスタートを行っている。
また、複数のCPUを搭載するマルチコアプロセッサシステムにおける障害発生時の技術としては、たとえば、スレッドの実行情報をメモリに格納し、あるCPUで障害が発生した場合に、他のCPUで処理を代替するという技術が開示されている(たとえば、下記特許文献1を参照。)。また、別の技術として、実行されている各処理の状態を、監視装置にて一括で監視するという技術が開示されている(たとえば、下記特許文献2を参照。)。
非特許文献1の技術と特許文献2の技術とを用いてマルチコアプロセッサシステムの障害発生時の復元処理に適用すると、特定のCPUが、マルチコアプロセッサシステム全体の状態情報を保存する処理を行う技術となる(以下、「従来技術1」と称する。)。従来技術1を適用することで、マルチコアプロセッサシステムは、障害発生時、保存された状態情報を用いて、状態を復元することができる。
特開2006−139621号公報 特開2008−310632号公報
「A Survey of Checkpoint/Restart Implementations」[online]、2010年8月24日検索、インターネット<URL:https://ftg.lbl.gov/CheckpointRestart/Pubs/checkpointSurvey−020724b.pdf>
しかしながら、上述した従来技術において、従来技術1にかかる技術では、状態情報を保存する際に、状態を変更しないよう処理を停止させなければならず、停止した結果、何も処理を行えないために、CPUの処理能力が無駄となってしまうという問題があった。
具体的には、組込システムがCPUを一つ搭載するシングルコアプロセッサであれば、同時に一つの処理しか行えないため、状態情報の保存中にはアプリケーションを実行することができないため、CPUの処理能力には空きが存在しなかった。しかし、組込システムがマルチコアプロセッサであれば、1つのCPUが状態情報の保存を行う間、他のCPUはアプリケーションを継続できず何も処理を行えないため、処理能力が無駄となってしまうという問題があった。
本発明は、上述した従来技術による問題点を解消するため、特定のコアが状態情報を保存する間、他のコアは処理を継続できるマルチコアプロセッサシステム、監視制御方法、および監視制御プログラムを提供することを目的とする。
上述した課題を解決し、目的を達成するため、開示のマルチコアプロセッサシステムは、複数のコアにて、プロセスが実行されることが検出された場合、プロセスの実行状態とプロセス内の各監視対象スレッドの実行状態とを示す状態情報を保存する特定のスレッドを生成する。
本マルチコアプロセッサシステム、監視制御方法、および監視制御プログラムによれば、特定のコアが状態情報を保存する間、他のコアは処理を継続でき、処理能力が向上し、無停止動作を実現することができるという効果を奏する。
実施の形態にかかるマルチコアプロセッサシステム100のハードウェアを示すブロック図である。 本実施の形態における各CPUとプロセスの実行状態の概要を示す説明図である。 マルチコアプロセッサシステム100の機能を示すブロック図である。 正常時における監視スレッドによる状態情報の保存が行われるタイミングを示す説明図である。 障害発生時におけるマルチコアプロセッサシステム100の動作を示す説明図である。 障害発生時に継続可能なプロセスの概要を示す説明図である。 監視スレッド211による状態情報215の保存の概要を示す説明図である。 監視スレッド211による状態情報215を用いた状態の復元の概要を示す説明図である。 OS内部の機能を示す説明図である。 プロセス用領域の記憶内容の生成例を示す説明図である。 OSによるイベント処理を示すフローチャート(その1)である。 OSによるイベント処理を示すフローチャート(その2)である。 監視スレッドの動作を示すフローチャート(その1)である。 監視スレッドの動作を示すフローチャート(その2)である。
以下に添付図面を参照して、本発明にかかるマルチコアプロセッサシステム、監視制御方法、および監視制御プログラムの好適な実施の形態を詳細に説明する。
(マルチコアプロセッサシステム100のハードウェア)
図1は、実施の形態にかかるマルチコアプロセッサシステム100のハードウェアを示すブロック図である。図1において、マルチコアプロセッサシステム100は、CPUを複数搭載するCPUs101と、ROM(Read‐Only Memory)102と、RAM(Random Access Memory)103と、を含む。また、マルチコアプロセッサシステム100は、フラッシュROM104と、フラッシュROMコントローラ105と、フラッシュROM106と、を含む。また、マルチコアプロセッサシステム100は、ユーザやその他の機器との入出力装置として、ディスプレイ107と、I/F(Interface)108と、キーボード109と、を含む。また、各部はバス110によってそれぞれ接続されている。
ここで、CPUs101は、マルチコアプロセッサシステム100の全体の制御を司る。CPUs101は、シングルコアのプロセッサを並列して接続した全てのCPUを指している。CPUs101は、CPU#0〜CPU#3を含む。また、CPUs101は、少なくとも2つ以上のCPUを含んでいてもよい。CPU#0〜CPU#3は、それぞれ専用のキャッシュメモリを有する。また、マルチコアプロセッサシステムとは、コアが複数搭載されたプロセッサを含むコンピュータのシステムである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、シングルコアのプロセッサであるCPUが並列されている形態を例にあげて説明する。
ROM102は、ブートプログラムなどのプログラムを記憶している。RAM103は、CPUs101のワークエリアとして使用される。フラッシュROM104は、OS(Operating System)などのシステムソフトウェアやアプリケーションソフトウェアなどを記憶している。たとえば、OSを更新する場合、マルチコアプロセッサシステム100は、I/F108によって新しいOSを受信し、フラッシュROM104に格納されている古いOSを、受信した新しいOSに更新する。
フラッシュROMコントローラ105は、CPUs101の制御に従ってフラッシュROM106に対するデータのリード/ライトを制御する。フラッシュROM106は、フラッシュROMコントローラ105の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム100を使用するユーザがI/F108を通して取得した画像データ、映像データなどである。フラッシュROM106は、たとえば、メモリカード、SDカードなどを採用することができる。
ディスプレイ107は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。このディスプレイ107は、たとえば、TFT液晶ディスプレイなどを採用することができる。
I/F108は、通信回線を通じてLAN(Local Area Network)、WAN(Wide Area Network)、インターネットなどのネットワーク111に接続され、ネットワーク111を介して他の装置に接続される。そして、I/F108は、ネットワーク111と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F108には、たとえばモデムやLANアダプタなどを採用することができる。
キーボード109は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード109は、タッチパネル式の入力パッドやテンキーなどであってもよい。
図2は、本実施の形態における各CPUとプロセスの実行状態の概要を示す説明図である。図2に示すマルチコアプロセッサシステム100は、プロセス210、プロセス220、プロセス230という3つのプロセスを実行している。プロセス210〜プロセス230は、特定のサービスをユーザに提供する。たとえば、プロセス210がWebサービスを提供するWebブラウザプロセスであり、プロセス220がストリーミング動画を再生する動画再生プロセスである。
プロセス210〜プロセス230は、特定のサービスをユーザに提供するために、プログラムの実行単位となるスレッドごとに機能を分割して、1つのサービスを提供する。たとえば、Webブラウザプロセスは、以下3つのスレッドを有する。1つ目のスレッドが、HTTP(HyperText Transfer Protocol)プロトコルに従ってデータを送受信するスレッドである。続けて、2つ目のスレッドが、受信したHTML(HyperText Markup Language)データを解析するスレッドである。最後に、3つ目のスレッドが、解析した結果を用いてHTMLデータを表示するスレッドである。
スレッドの状態には、実行状態、実行可能状態、待ち状態とがあり、以下、実行状態と実行可能状態を合わせて稼働状態と呼称する。OSは、稼働状態にあるスレッドを、時分割、または優先度順といったOSのスケジューリングポリシーに基づいて、CPUに割り当てるスレッドを選択する機能を有し、CPUに割り当ててスレッドを実行させる。実行されたスレッドが実行状態のスレッドであり、CPUに割り当てられなかったスレッドが実行可能状態のスレッドである。
また、待ち状態のスレッドは、I/Oの応答待ち、または、OSの待機命令であるsleepコマンドの実行、など、何らかの理由により一時的に実行できない状態のスレッドである。待ち状態のスレッドにおいて、実行できない状態が解消され、待ち状態から稼働状態に遷移することを起床という。
また、プロセスとは、OSにおける管理単位で、一つのプロセスには複数のスレッドが属することができる。同一のプロセスに属するスレッドは、メモリなどのOSが管理する計算機資源を共有することができる。一方で、異なるプロセスに属するスレッド同士は資源を共有しておらず、たとえば異なるプロセスのメモリの内容を参照することはできない。このように、プロセスごとに計算機資源が独立しているため、プロセスごとに状態情報を保存することができる。
また、プロセス210〜プロセス230は、本実施の形態の特徴である監視スレッドを有する。具体的には、プロセス210は、監視スレッド211と、スレッド212〜スレッド214を含む。プロセス220は、監視スレッド221と、スレッド222、スレッド223を含む。プロセス230は、監視スレッド231と、スレッド232〜スレッド235を含む。また、CPU#0〜CPU#3におけるプロセス210〜プロセス230のスレッドの割り当てとして、CPU#0には、監視スレッド211、スレッド222、スレッド232が割り当てられている。そしてCPU#0は、OS#0の機能により、割り当てられたスレッドの優先度に従って監視スレッド211、スレッド222、スレッド232を実行する。
同様に、CPU#1には、スレッド212、監視スレッド221、スレッド233が割り当てられている。CPU#2には、スレッド213、スレッド234、スレッド235が割り当てられている。CPU#3には、スレッド214、スレッド223、監視スレッド231が割り当てられている。このように、マルチコアプロセッサシステム100は、監視スレッドが割り当てられているCPUには同一プロセス内の他のスレッドを割り当てない。
なお、監視スレッドは、プロセス生成時にプロセスを生成するCPUによって生成される。監視スレッドは、定期的に実行され、自身が属するプロセス内の監視スレッド以外のスレッドを監視対象スレッドとして、監視対象スレッドの状態情報をRAM103に保存する。なお、監視対象スレッドは、自身が属するプロセス内の監視スレッド以外の全てのスレッドであってもよいし、一部のスレッドであってもよい。以下、単にスレッドと記述した場合、そのスレッドは監視対象スレッドである。
たとえば、監視スレッド211は、プロセス210用領域内に状態情報215を生成してRAM103に保存する。同様に、監視スレッド221は、プロセス220用領域内に状態情報224を生成してRAM103に保存する。同様に、図2では図示していないが、監視スレッド231も、プロセス230用領域内に状態情報を生成してRAM103に保存する。
状態情報は、具体的には、スレッドの実行状態として、初期データから変更のあったデータと、データのアドレスとが含まれたデータである。また、スレッド実行中におけるCPUのレジスタの値も、状態情報に含める。さらに、プロセスの実行状態として、プロセス全体の状態が変更した場合も、状態情報に含める。
プロセス全体の状態が変更される場合として、たとえば、プロセスの優先度、プロセスが確保しているメモリ量、等が変更した場合に、状態情報に含める。監視スレッド211が状態情報215をRAM103に保存することで、プロセス210の状態と、スレッド212〜スレッド214の状態を保存することになる。同様に、監視スレッド221が状態情報224をRAM103に保存することで、プロセス220の状態と、スレッド222、スレッド223の状態を保存することになる。
(マルチコアプロセッサシステム100の機能)
次に、マルチコアプロセッサシステム100の機能について説明する。図3は、マルチコアプロセッサシステム100の機能を示すブロック図である。図3では、監視スレッドに関する機能について説明を行う。マルチコアプロセッサシステム100は、検出部301、生成部302と、設定部303と、通知部304と、保存部305と、復元部306と、保存部307と、復元部308と、を含む。この制御部となる機能(検出部301〜復元部308)は、記憶装置に記憶されたプログラムをCPU#0〜CPU#3のいずれかのCPUが実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図1に示したROM102、RAM103、フラッシュROM104、フラッシュROM106などである。
また、図3では、検出部301〜復元部306は、CPU#0の機能として図示されているが、CPU#1〜CPU#3の機能であってもよい。たとえば、CPU#1が実行するプロセスにてプロセス220の起動要求が発生した場合、CPU#1がプロセス220を生成し、検出部301はCPU#1の機能として実行される。また、保存部305と復元部306は、監視スレッド211に含まれる機能であり、CPU#0以外の他のCPUで監視スレッドが実行される場合、他のCPUの機能であってもよい。たとえば、保存部307と復元部308は、CPU#1で実行されている監視スレッド221に含まれる機能である。
検出部301は、複数のコアにて、プロセスが実行されることを検出する機能を有する。プロセスが実行される場合として、たとえば、検出部301は、プロセスが生成され、実行される場合を検出してもよい。または、生成されたプロセスが実行され、ユーザ等により状態情報の保存開始要求を受けた後、再び実行開始する場合に、プロセスが実行される場合として検出してもよい。具体的には、検出部301は、プロセス210が実行されることを検出する。なお、検出されたという情報は、検出部301が機能したCPUのレジスタ、キャッシュメモリ、RAM103などの記憶領域に記憶される。
生成部302は、検出部301によってプロセスが実行されることが検出された場合、プロセスの実行状態とプロセス内の各監視対象スレッドの実行状態とを示す状態情報を保存する特定のスレッドを生成する機能を有する。特定のスレッドとは監視スレッドのことである。たとえば、生成部302は、プロセス210が実行されることが検出された場合、プロセス210の実行状態と監視対象スレッドとなるスレッド212〜スレッド214の実行状態とを示す状態情報215を保存する監視スレッド211を生成する。なお、監視スレッドが生成されたという情報は、生成部302が機能したCPUのレジスタ、キャッシュメモリ、RAM103などの記憶領域に記憶される。
設定部303は、生成部302によって生成された特定のスレッドを実行するコアを、監視対象スレッドを実行するコアとは異なるコアに設定する機能を有する。たとえば、設定部303は、監視スレッド211を実行するCPUを、スレッド212〜スレッド214を実行するCPU#1〜CPU#3とは異なるCPU#0に設定する。
また、設定部303は、監視スレッドが生成される時点で全てのCPUで監視対象スレッドが実行されている場合、いくつかの監視対象スレッドをマイグレーションし、監視対象スレッドが実行されていないCPUを用意してもよい。なお、監視スレッドを実行するCPUの情報は、設定部303が機能したCPU、または監視スレッドを実行するCPUのレジスタ、キャッシュメモリ、RAM103などの記憶領域に記憶される。
通知部304は、再起動を完了したコアを検出したコアから、複数のコアのうち再起動が完了したコアを除く他のコアに、プロセスおよび各監視対象スレッドを状態情報が保存された時点の状態への復元要求を通知する機能を有する。また、通知部304は、複数のコアのうちいずれかのコアが再起動を完了した場合に実行される。なお、再起動を完了したコアを検出したコアは、再起動を完了したコア自身であってもよいし、再起動を完了したコア以外のコアであってもよい。
たとえば、通知部304は、CPU#1で再起動を完了した場合、CPU#1を除くCPU#0、CPU#2、CPU#3に、プロセス210およびスレッド212〜スレッド214を状態情報215が保存された時点の状態への復元要求を通知する。なお、復元要求を受けたCPU#0、CPU#2、CPU#3のうち、復元を行うのは監視スレッドを実行しているCPU#0となる。
また、通知部304は、再起動が完了したコアにて再起動する要因となった障害が発生したことを検出したコアから、複数のコアのうち少なくとも障害が発生したコアを除く他のコアに、各監視対象スレッドの停止要求を通知してもよい。たとえば、通知部304は、CPU#1にて障害が発生したことを検出したCPU#0から、少なくともCPU#0、CPU#2、CPU#3に、スレッド212〜スレッド214の停止要求を通知する。
また、通知部304は、あるCPUが再起動完了したことをCPUs101のうち再起動が完了したCPU以外の他のCPUに通知してもよい。他のCPUで実行している監視スレッドは、再起動完了の通知を受けた場合にプロセスおよび監視対象スレッドの状態を復元してもよい。同様に、通知部304は、あるCPUが障害発生したことをCPUs101のうち少なくとも障害が発生したCPU以外の他のCPUに通知してもよい。他のCPUで実行している監視スレッドは、障害発生の通知を受けた場合に監視対象スレッドの停止を行ってもよい。
保存部305、保存部307は、プロセスの実行状態とプロセス内の各監視対象スレッドの実行状態とを示す状態情報を保存する機能を有する。たとえば、保存部305は、プロセス210の実行状態と監視対象スレッドとなるスレッド212〜スレッド214の実行状態とを示す状態情報215を保存する。なお、保存部305、保存部307は、監視スレッドが定期的に起床された場合に機能する。
復元部306、復元部308は、通知部304によって復元要求が通知された場合に、プロセスおよび各監視対象スレッドを状態情報が保存された時点の状態に復元する機能を有する。たとえば、復元部306は、プロセス210と監視対象スレッドとなるスレッド212〜スレッド214を状態情報215が保存された状態に復元する。また、復元部306、復元部308は、通知部304によって停止要求および復元要求が通知された場合に、復元してもよい。
図4は、正常時における監視スレッドによる状態情報の保存が行われるタイミングを示す説明図である。時刻t0から時刻t1にかけて、CPU#0がスレッド222を実行し、CPU#1がスレッド212とスレッド233を実行し、CPU#2がスレッド213を実行し、CPU#3がスレッド223とスレッド214を実行する。時刻t1の時点で、CPU#0が監視スレッド211を実行すると、監視スレッド211の機能によりCPU#0は、CPU#2で実行中のスレッド213とCPU#3で実行中のスレッド214を停止させる。スレッド213とスレッド214の停止後、監視スレッド211の機能によりCPU#0は、時刻t0から時刻t1にかけて実行されたプロセス210内のスレッド212〜スレッド214が書き込んだデータの差分を取得し、保存する。
また、時刻t1から時刻t2にかけて、CPU#0が、監視スレッド211を実行し、CPU#1がスレッド233を実行し、CPU#2がスレッド234を実行し、CPU#3がスレッド223を実行する。時刻t2の時点で、CPU#3が監視スレッド231を実行すると、監視スレッド231の機能によりCPU#3は、CPU#1で実行中のスレッド233とCPU#2で実行中のスレッド234を停止させる。スレッド233とスレッド234の停止後、監視スレッド231の機能によりCPU#3は、時刻t0から時刻t2にかけて実行されたプロセス230内のスレッド233、スレッド234が書き込んだデータの差分を取得し、保存する。
また、時刻t2から時刻t3にかけて、CPU#0が、スレッド222を実行し、CPU#1がスレッド212を実行し、CPU#2がスレッド213を実行し、CPU#3が監視スレッド231を実行する。時刻t3の時点で、CPU#1が監視スレッド221を実行すると、監視スレッド221の機能によりCPU#1は、CPU#0で実行中のスレッド222を停止させる。スレッド222の停止後、監視スレッド221の機能によりCPU#1は、時刻t0から時刻t3にかけて実行されたプロセス220内のスレッド222、スレッド223が書き込んだデータの差分を取得し、保存する。
また、時刻t3から時刻t4にかけて、CPU#0が、スレッド232とスレッド222を実行し、CPU#1が監視スレッド221とスレッド212とスレッド233を実行する。さらに、CPU#2がスレッド213とスレッド235を実行し、CPU#3がスレッド214とスレッド223を実行する。時刻t4の時点で、CPU#0が監視スレッド211を実行すると、監視スレッド211の機能によりCPU#0は、CPU#3で実行中のスレッド214を停止させる。スレッド214の停止後、監視スレッド211の機能によりCPU#0は、時刻t2から時刻t4にかけて実行されたプロセス210内のスレッド212〜スレッド214が書き込んだデータの差分を取得し、保存する。
同様に、時刻t5の時点で、監視スレッド231の機能によりCPU#3は、時刻t3から時刻t5にかけて実行されたプロセス230内のスレッド232、スレッド233、スレッド235が書き込んだデータの差分を取得し、保存する。また、時刻t6の時点で、監視スレッド221の機能によりCPU#1は、時刻t3から時刻t5にかけて実行されたプロセス220内のスレッド222、スレッド223が書き込んだデータの差分を取得し、保存する。
このように、監視スレッドが保存中であっても、他のプロセス内のスレッドは実行可能であるため、CPUの処理能力を有効活用することができる。また、監視スレッドは、OSによって自動的に挿入されるため、各プロセスのプログラムを改変しなくてよい。
図5は、障害発生時におけるマルチコアプロセッサシステム100の動作を示す説明図である。図5に示すマルチコアプロセッサシステム100では、図4の時刻t1にてCPU#1に障害が発生した場合を想定している。時刻t1にてCPU#1に障害が発生すると、CPU#0は、障害発生の通知を受けた監視スレッド211によって、スレッド213、スレッド214を停止させる。さらに、CPU#3が監視スレッド231によって、スレッド232〜スレッド235を停止させる。なお、障害発生時のスレッド停止の概要については、図6にて後述する。
時刻t1からCPU#1が再起動完了する時刻t2にかけて、CPU#0は、スレッド222を実行し、CPU#3は、スレッド223を実行する。CPU#2は、実行可能なスレッドが存在しないため、休止する。時刻t2にて、CPU#1の再起動が完了すると、再起動完了モードにて起床された監視スレッド211、監視スレッド231によってプロセス210、プロセス230の復元を行う。具体的には、監視スレッド211が、スレッド212〜スレッド214の復元を行い、監視スレッド231が、スレッド232〜スレッド235の復元を行う。
また、障害発生したCPU#1は、他のOSの管理情報を参照し、現在稼働しているプロセスと、他のOSに割り当てられている監視スレッドのリストから、プロセス220に監視スレッドが存在しないことを判断し、監視スレッド221を生成する。また、時刻t3にて、CPU#0は、監視スレッド211の復元処理よりスレッド222の優先度が高いことを検出すると、監視スレッド211を退避し、スレッド222を実行する。このように、スレッドの優先度が高ければ復元処理に割り込むことも可能である。
時刻t4にてプロセス230の復元が完了すると、スレッド232〜スレッド235が実行可能になる。CPU#0〜CPU#3は、スレッド232〜スレッド235と他の実行可能なスレッドのうち、優先度等に基づいてスレッドを実行する。具体的には、CPU#0は、時刻t3から引き続きスレッド222を実行し、CPU#1は、スレッド233を実行し、CPU#2は、スレッド234を実行し、CPU#3は、スレッド223を実行する。
続けて、時刻t5にてプロセス210の復元が完了すると、スレッド212〜スレッド214が実行可能になる。CPU#0〜CPU#3は、スレッド212〜スレッド214と他の実行可能なスレッドのうち、優先度等に基づいてスレッドを実行する。具体的には、CPU#0は、スレッド232を実行し、CPU#2は、時刻t4から引き続きスレッド234を実行し、CPU#3は、時刻t4から引き続きスレッド223を実行する。
また、図5では、プロセス210の復元処理を監視スレッド211を実行するCPU#0が行い、プロセス230の復元処理を監視スレッド231を実行するCPU#3が行っている。このように、マルチコアプロセッサシステム100は、監視スレッドを割り当てるCPUを分散していれば、障害発生時の復元処理を一つのCPUに集中させず、各CPUに分散させることが可能である。
図6は、障害発生時に継続可能なプロセスの概要を示す説明図である。図6では、CPU#1にて障害が発生した場合を想定している。CPU#1にて障害が発生すると、プロセス内の監視スレッドは他のスレッドを停止させる。続けて、CPU#1の再起動完了後、監視スレッドは、復元処理を行う。具体的には、CPU#0が監視スレッド211によって、スレッド213、スレッド214を停止させる。さらに、CPU#3が監視スレッド231によって、スレッド232、スレッド234、スレッド235を停止させる。プロセス220のスレッド222とスレッド223は、復元処理を行わなくてよく、継続可能である。
このように、一部のプロセスが復元動作を行わずに動作継続可能となる。一部のプロセスとは、障害が発生したCPUにて監視スレッドが割り当てられていたプロセスである。たとえば、図6で示した例とは別の例として、CPU#0で障害が発生した場合は、プロセス210のスレッド212〜スレッド214が動作継続可能となる。
図7は、監視スレッド211による状態情報215の保存の概要を示す説明図である。ROM102には、OS#0がアクセスする管理情報初期値701と、プロセス210用ロードモジュールが格納されている。プロセス210用ロードモジュールの内部には、プロセス210の初期データ702が格納されている。なお、管理情報初期値701とプロセス210用ロードモジュールはRAM103、フラッシュROM104等に格納されていてもよい。
続けて、RAM103には、プロセス210用領域が確保されており、プロセス210用領域の内部には、OS管理情報703、データ704、状態情報215が格納されている。OS管理情報703は、OS#1が管理するプロセスの管理情報、スレッドの管理情報が格納されている。データ704は、スレッド212〜スレッド214がアクセスするデータが格納されている。なお、管理情報初期値701〜データ704については、図10にて詳細に記述する。
監視スレッド211の機能によりCPU#0は、管理情報初期値701と初期データ702とOS管理情報703とデータ704を参照して、状態情報215を出力し、RAM103に格納する。具体的には、CPU#0は、初期データ702とデータ704を比較し、データ704が初期データ702から変更されていた場合に、状態情報215に出力する。同様に、CPU#0は、管理情報初期値701とOS管理情報703を比較し、OS管理情報703が管理情報初期値701から変更されていた場合に状態情報215に出力する。
図8は、監視スレッド211による状態情報215を用いた状態の復元の概要を示す説明図である。CPU#0を除くCPU#1〜CPU#3のいずれかのCPUで障害が発生し、障害が発生したCPUの再起動が完了した場合を想定する。この時、監視スレッド211の機能によりCPU#0は、管理情報初期値701と初期データ702と状態情報215を参照して、OS管理情報703とデータ704を更新する。
具体的には、CPU#0は、初期データ702と状態情報215から、スレッド212〜スレッド214がアクセスしていたデータ704を、状態情報215が格納された時点の状態にロールバックする。同様に、CPU#0は、管理情報初期値701と状態情報215からプロセス210の状態を、状態情報215が格納された時点の状態にロールバックする。
なお、図7と図8で説明した、プロセスの管理情報およびスレッドの管理情報の取得、復元には、特別な権限が要求される場合もある。このような場合、マルチコアプロセッサシステム100は、監視スレッドの生成される際に、特別な権限を監視スレッドに付与しておく。
図9は、OS内部の機能を示す説明図である。図9では、OS#0を例にあげて説明する。OS#0以外のOS#1〜OS#3も、同様の機能を有する。図3では、監視スレッドに関わる機能に対して説明を行ったが、図9では、プロセスとスレッド全体に関わる機能について説明を行う。OS#0は、プロセス生成部901、プロセス管理部902、監視スレッド機能部903、メインスレッド生成部904、スレッド生成部905、スレッド管理部906、スケジューリング部907を含む。また、監視スレッド機能部903は、検出部301、生成部302、管理部908、設定部303を含み、さらに管理部908は、通知部304を含む。
また、RAM103には、OS#0用領域と、プロセス210〜プロセス230用の領域が確保されている。図9では、プロセス210〜プロセス230用の領域のうち、プロセス210用領域を代表して表示している。OS#0用領域は、プロセスリスト909、スレッドリスト910、監視スレッドリスト911を格納している。プロセス210用領域は、図7で示したように、OS管理情報703と、データ704と、状態情報215を格納している。さらに、OS管理情報703は、プロセス管理情報912と、スレッド管理情報913を格納している。
プロセス生成部901は、ユーザやプロセスからの要求を受け付けて、新たにプロセスを生成する機能を有する。たとえば、OS#0がLinux(登録商標)である場合、プロセス生成部901は、initプロセスからの要求によりプロセスを生成する。なお、生成されたプロセスは、プロセスリスト909に格納される。また、プロセス生成部901は、生成されたプロセス用のデータ領域をRAM103上に確保する。
プロセス管理部902は、プロセス生成部901によって生成されたプロセスを管理する機能を有する。具体的には、プロセス管理部902は、プロセスの優先度、プロセスが確保するメモリサイズ、生成されたプロセスへの引数等の情報を、プロセス管理情報912に格納する。
監視スレッド機能部903は、監視スレッドに対する機能群である。具体的には、監視スレッド機能部903は、検出部301によりプロセスが生成されたことを検出し、監視スレッドを生成する。続けて、監視スレッド機能部903は、設定部303により監視スレッドの割当先CPUを設定し、通知部304により監視スレッドに指示を通知する。
メインスレッド生成部904は、プロセス生成部901によってプロセスが生成された場合に、プログラムコードの開始位置からメインスレッドを生成する機能を有する。プログラムコードの開始位置に存在するのは、たとえば、main()関数の先頭である。または、Windows(登録商標)であれば、WinMain()関数の先頭である。メインスレッド生成部904は、前述の関数からメインスレッドの実行を開始するように設定する。
スレッド生成部905は、スレッドを生成する機能を有する。たとえば、スレッド生成部905は、メインスレッドから新たなスレッドの生成要求が発行された場合に、スレッドを生成する。なお、監視スレッド機能部903の生成部302、メインスレッド生成部904、スレッド生成部905にて生成されたスレッドは、スレッドリスト910に格納される。
スレッド管理部906は、生成されたスレッドを管理する機能を有する。たとえば、スレッド管理部906は、生成されたスレッドがどのプロセスに属するかを判断し、該当するプロセス用データ領域内のスレッド管理情報913に生成されたスレッドを格納する。具体的に管理する情報として、スレッド管理部906は、スレッドが稼働状態か待ち状態かという値、スレッドの優先度、スレッドが確保するメモリサイズ、生成されたスレッドへの引数等の情報を、スレッド管理情報913に格納する。
スケジューリング部907は、割当先CPUが設定されたスレッド群を、優先度、時分割等に基づいてCPUに割り当てる機能を有する。具体的には、スケジューリング部907は、CPU#0に割り当てられると設定された監視スレッド211、スレッド222、スレッド232を、優先度、時分割等に基づいてCPUに順次割り当てる。
管理部908は、監視スレッドを管理する機能を有する。具体的には、管理部908は、生成部302によって生成された監視スレッドを監視スレッドリスト911に格納する。さらに、管理部908は、監視スレッドリスト911に格納された監視スレッドに対し、通知部304によって状態情報の復元の指示を通知する。
プロセスリスト909、スレッドリスト910、監視スレッドリスト911、はそれぞれ、プロセス、スレッド、監視スレッドを格納するリストである。具体的には、プロセス、スレッド、監視スレッドへのポインタが格納されている。
プロセス管理情報912は、プロセスの優先度、プロセスが確保するメモリサイズ、生成されたプロセスへの引数等の情報である。これらの情報は、プロセスが実行している途中で変更されることもあり得る。たとえば、プロセス210がWebサービスを提供するWebブラウザプロセスであり、利用者等によって、複数のWebページの閲覧要求が行われ、事前に確保してあったメモリ容量では複数のWebページを閲覧できない場合を想定する。この時、マルチコアプロセッサシステム100は、プロセス210のメモリ容量を拡張する。メモリ容量の拡張に成功した場合、マルチコアプロセッサシステム100は、拡張されたメモリサイズをプロセス管理情報912に書き込む。
スレッド管理情報913は、スレッドが稼働状態か待ち状態かという値、スレッドの優先度、スレッドが確保するメモリサイズ、生成されたスレッドへの引数等の情報である。これらの情報は、プロセス管理情報912と同様に、実行時に変更される。たとえば、スレッドの優先度、確保するメモリサイズが変更された場合に、マルチコアプロセッサシステム100は、変更された値をスレッド管理情報913に書き込む。
図10は、プロセス用領域の記憶内容の生成例を示す説明図である。図10では、プロセス210用領域が生成される様子を示している。プロセス210用ロードモジュールは、実行することでプロセスを生成する実行ファイルである。プロセス210用ロードモジュールには、図7で示した初期データ702以外に、プロセス情報1001、プログラムコード1002が格納されている。
プロセス情報1001には、メモリサイズ、領域配置情報、プログラム開始位置等が含まれる。プログラムコード1002には、プログラムソースを機械語に変換したコードが格納される。たとえば、プロセス210用ロードモジュールがELF(Executable and Linkable Format)形式であれば、プロセス情報1001はELFヘッダ等のヘッダ部分に格納される。同様に、プログラムコード1002は.textセクションに、初期データ702は.dataセクションに格納される。
また、ROM102には、OS用データの一部として、監視スレッド用ロードモジュールが格納されている。監視スレッド用ロードモジュールは、各プロセスから利用可能な共有ライブラリとなる。監視スレッド用ロードモジュールには、共有ライブラリ情報1003、監視スレッドプログラムコード1004、監視スレッド初期データ1005が格納されている。共有ライブラリ情報1003に格納される内容は、プロセス情報1001と等しい。
具体的には、共有ライブラリ情報1003には、監視スレッドのメモリサイズ、領域配置情報、プログラム開始位置等が格納される。監視スレッドプログラムコード1004には、監視スレッドに対応するプログラムソースを機械語に変換したコードが格納される。監視スレッド初期データ1005には、監視スレッドの初期値が格納されている。なお、共有ライブラリ用ロードモジュールも前述のELF形式であれば、共有ライブラリ情報1003はELFヘッダ等のヘッダ部分に格納される。同様に、監視スレッドプログラムコード1004は.textセクションに、監視スレッド初期データ1005は.dataセクションに格納される。
初期データ702、プロセス情報1001〜監視スレッド初期データ1005を参照して、プロセス生成部901は、プロセス210用領域に展開する。具体的には、プロセス生成部901は、プログラムコード1002をRAM103上のプログラムコード1006に展開し、初期データ702をRAM103上のデータ704に展開する。同様に、プロセス生成部901は、監視スレッドプログラムコード1004をRAM103上の監視スレッドプログラムコード1007に展開し、監視スレッド初期データ1005をRAM103上の監視スレッドデータ1008に展開する。監視スレッドデータ1008の内部には、状態情報215を保存する保存領域1009が確保される。
図9に示した機能群と図10に示したプロセス用領域を使用して、マルチコアプロセッサシステム100は、状態情報の保存処理と復元処理を行う。図11、図12にてOSによるイベント処理を示し、図13、図14にて監視スレッドによる保存処理と復元処理の説明を行う。監視スレッドによる保存処理と復元処理は、OSによるイベント処理内部の監視スレッドへの通知により実行される。
図11は、OSによるイベント処理を示すフローチャート(その1)である。OSによるイベント処理は、CPU#0〜CPU#3のいずれのCPUでも実行されるが、図11、図12では、OS#0の機能によりCPU#0にて実行されることを想定する。また、図11では、OSによるイベント処理のうち、新規プロセス生成のイベントと、スレッド割当先CPU設定のイベントについて説明を行う。
CPU#0は、発生したイベント種別を確認する(ステップS1101)。たとえば、CPU#0は、イベントキューに格納されたメッセージから、最古のメッセージを取得する。イベントが新規プロセス生成である場合(ステップS1101:新規プロセス生成)、CPU#0は、メインスレッドを生成する(ステップS1102)。メインスレッドを生成後、CPU#0は、監視スレッドを生成する(ステップS1103)。監視スレッドを生成後、CPU#0は、監視スレッドの割当先CPUを設定する(ステップS1104)。
たとえば、CPU#0は、生成された監視スレッドへのポインタとスレッド割当先CPU設定を示すイベントIDとを含むメッセージを生成し、イベントキューに格納する。格納されたメッセージが取得された結果、CPU#0によってステップS1106〜ステップS1108の処理が実行されることにより、監視スレッドの割当先CPUを設定することができる。
続けて、CPU#0は、メインスレッドの割当先CPUを設定し(ステップS1105)、ステップS1101の処理に移行する。なお、割当先CPUが設定されたメインスレッドと監視スレッドは、それぞれのプログラムの開始位置から実行を開始するように設定され、稼働状態となる。同時に、監視スレッドの割宛先CPUは、自身のOS内の監視スレッドリストに監視スレッドの識別情報、たとえば、監視スレッドへのポインタを登録する。なお、監視スレッドの動作の詳細については、図13、図14にて後述する。
イベントがスレッド割当先CPU設定である場合(ステップS1101:スレッド割当先CPU設定)、CPU#0は、割当先CPUを設定するスレッドが監視スレッドか否かを判断する(ステップS1106)。監視スレッドである場合(ステップS1106:Yes)、CPU#0は、全CPU、すなわちCPU#0〜CPU#3から、割当先CPUを設定する(ステップS1107)。なお、ステップS1107の処理にて、CPU#0は、全CPUのうち、監視スレッドの割当数が最も少ないCPUに監視スレッドを割り当てると設定してもよい。これにより、マルチコアプロセッサシステム100は、障害発生後の復元処理を各CPUに分散して実行させることができる。
監視スレッドでない場合(ステップS1106:No)、CPU#0は、同プロセスの監視スレッドの割当先CPU以外から割当先CPUを設定する(ステップS1108)。ステップS1107、ステップS1108の終了後、CPU#0は、ステップS1101の処理に移行する。
図12は、OSによるイベント処理を示すフローチャート(その2)である。図12では、OSによるイベント処理のうち、障害発生検出のイベントと、復帰通知のイベントについて説明を行う。さらに、図12では、障害発生検出に伴う、障害発生したCPUでの監視スレッドの復帰処理も併せて説明を行う。
イベントが障害発生検出である場合(ステップS1101:障害発生検出)、CPU#0は、障害発生したCPU#Nをリブートし(ステップS1201)、障害発生の検出を障害発生していないCPUに通知する(ステップS1202)。なお、Nは0〜3までの整数である。
また、ステップS1202にて、CPU#0は、障害発生の検出を、障害発生したCPU#Nを含めたCPU#0〜CPU#3全てに通知してもよい。CPU#Nに通知を行っても、CPU#Nは障害発生中で通知を受け取れず破棄されるため、動作に影響を及ぼさない。障害発生していないCPUに通知する方法をとれば、マルチコアプロセッサシステム100は、無駄な通信を発生させなくて済むという効果がある。また、全てのCPUに通知する方法をとれば、マルチコアプロセッサシステム100は、通知先のCPU群を設定する際に、全てのCPUから障害発生したCPU#Nを除くという処理を行わなくてよいという効果がある。
なお、障害発生の検出方法としては、たとえば、ソフトエラーに対してはCPU内の演算回路を冗長化し、それぞれの回路から出力される結果が異なる場合を障害発生として検出する方法が存在する。また、別の方法として、プログラムの不具合に関してはOSから定期的にプロセス、スレッドに対して生存確認信号を送付して、プロセスやスレッドから応答が無ければ障害発生として検出する方法が存在する。
また、前述の障害検出方法は、それぞれの方法によって、障害発生したCPUが検出する場合、2つのCPUが互いに障害を監視し検出する場合、複数のCPUのうち1つのCPUが代表して検出する場合、等がある。いずれの障害検出方法であっても、障害発生を検出したCPUは、ステップS1201の処理にて、障害発生したCPUをリブートする。
通知後、CPU#0は、自CPUに割り当てられた全監視スレッドを障害発生モードで起床し(ステップS1203)、ステップS1101の処理に移行する。なお、自CPUに割り当てられた全監視スレッドとは、監視スレッドリスト911に登録されているスレッドである。また、障害発生の検出を受けたCPUも、監視スレッドリスト911に登録された全監視スレッドを障害発生モードで起床する。なお、障害発生モードで起床した監視スレッドの動作については、図13にて後述する。
障害発生していたCPU#Nは、CPU#0からのリブート指示により再起動し、再起動完了後、他のCPUに復帰通知を送信する(ステップS1204)。送信後、CPU#Nは、監視スレッドが無いプロセスが存在するかを判断する(ステップS1205)。具体的には、CPU#Nは、他のOSの管理情報を参照し、現在稼働しているプロセスと、他のOSに割り当てられている監視スレッドリスト911を取得することで、監視スレッドが無いプロセスが存在するかを判断することができる。
監視スレッドが無いプロセスが存在する場合(ステップS1205:Yes)、CPU#Nは、監視スレッドを生成し、CPU#Nに割り当てる(ステップS1206)。監視スレッドが無いプロセスが存在しない場合(ステップS1205:No)、またはステップS1206の処理を終了後、CPU#Nは、復帰処理を終了する。
イベントが復帰通知である場合(ステップS1101:復帰通知)、CPU#0は、自CPUに割り当てられた全監視スレッドを再起動完了モードで起床する(ステップS1207)。なお、復帰通知のイベントは、ステップS1204の処理にて、CPU#Nが他のCPUに復帰通知を送信したことにより発生する。また、再起動完了モードで起床した監視スレッドの動作については、図14にて後述する。
このとき、障害発生を検出したCPU、または障害発生の検出を受けたCPUは、監視スレッドによる復元の代わりに、停止していないスレッドを実行してもよい。障害発生時に停止していないスレッドは、監視スレッドによって停止させられていないことを意味しており、監視スレッドが障害発生したCPUで実行されていたことを示している。監視スレッドは復元を行わなくてよいため、障害発生したCPUで監視スレッドを実行していたプロセスに属するスレッドは、復元を行わずに処理を継続することができる。たとえば、CPU#0は、再起動完了モードで起床した監視スレッドの優先度より、復元を行わない継続可能なスレッドの優先度が高い場合は、継続可能なプロセスのスレッドを優先して処理してもよい。
図13は、監視スレッドの動作を示すフローチャート(その1)である。監視スレッドは、CPU#0〜CPU#3のいずれのCPUでも実行されるが、図13、図14では、CPU#0にて実行されることを想定する。また、図13では、監視スレッドの障害発生時の動作、スリープのタイマ満了時の動作、再起動完了時の動作のうち、障害発生時の動作について説明を行う。なお、監視スレッドの各動作の判別方法について、CPU#0は、スリープから復帰したときの復帰値を参照することで、判別することができる。
CPU#0は、監視スレッドを起動する(ステップS1301)。以下、CPU#0は、監視スレッドのプログラムコードに基づいて処理を実行する。続けて、CPU#0は、監視スレッドが属するプロセス用領域から、初期データ702を取得する(ステップS1302)。初期データ702を取得後、CPU#0は、保存領域1009を確保する(ステップS1303)。具体的には、CPU#0は、初期データ702が全て保存可能なサイズにて、保存領域1009を確保する。確保後、CPU#0は、スリープの満了時間を通常の時間に設定し(ステップS1304)、スリープする(ステップS1305)。
続けて、CPU#0は、スリープから起床されると、障害発生モードでの起床か否かを判断する(ステップS1306)。障害発生モードでの起床である場合(ステップS1306:Yes)、CPU#0は、プロセス内の監視スレッドを除いた全スレッドを停止させる(ステップS1307)。続けて、CPU#0は、スリープの満了時間を「無期限」に設定し(ステップS1308)、ステップS1305の処理に移行する。なお、満了時間を無期限にすることで、タイマ満了による起床が発生しなくなる。障害発生モードでの起床でない場合(ステップS1306:No)についての動作は、図14にて後述する。
図14は、監視スレッドの動作を示すフローチャート(その2)である。図14では、監視スレッドの動作のうち、タイマ満了時の動作と、再起動完了時の動作について説明を行う。なお、タイマ満了時の動作が状態保存の処理となり、再起動完了時の動作が状態復元の処理となる。
障害発生モードでの起床でない場合(ステップS1306:No)、CPU#0は、再起動完了モードでの起床か否かを判断する(ステップS1401)。ステップS1304の処理にて設定したタイマ満了による起床の場合(ステップS1401:No)、CPU#0は、プロセスの全スレッドを取得する(ステップS1402)。続けて、CPU#0は、プロセス内の監視スレッドを除いた全スレッドを停止させる(ステップS1403)。スレッドを停止させた後、CPU#0は、プロセスが現在使用しているプロセス用領域を取得する(ステップS1404)。
取得後、CPU#0は、取得したデータ領域が保存領域1009に収まるか否かを判断する(ステップS1405)。保存領域1009に収まらない場合(ステップS1405:No)、CPU#0は、拡張した保存領域1009を確保する(ステップS1406)。なお、保存領域1009に収まらない場合としては、監視対象スレッドの内部でメモリ確保命令が実行され、メモリ領域が増加して状態情報の対象となる場合、または、初期値を持たない変数に、値が設定され、状態情報の対象となる場合、等が存在する。初期値を持たない変数の具体例としては、前述のELF形式であれば、.bssセクションに格納された変数である。
保存領域1009に収まる場合(ステップS1405:Yes)、またはステップS1406の処理終了後、CPU#0は、プロセスのデータ704の差分を保存領域1009に保存する(ステップS1407)。続けて、CPU#0は、プロセス管理情報912の差分、スレッド管理情報913の差分を保存領域1009に保存する(ステップS1408)。
なお、ステップS1402〜ステップS1408までの状態保存処理の間に、CPU#1〜CPU#3のいずれかのCPUで障害が発生し、ステップS1203によるOS#0から障害発生モードによる起床命令が実行された場合を想定する。この場合、少なくても状態保存時には、ステップS1403によって該当プロセスのスレッドは停止中で障害の影響は無いため、CPU#0は、障害発生モードによる起床命令をペンディングしたまま状態保存処理が継続される。ステップS1408の終了後、ステップS1305の処理にて監視スレッドがスリープした際に、すぐに障害発生モードによる起床が処理される。
再起動完了モードでの起床である場合(ステップS1401:Yes)、CPU#0は、プロセスの全スレッドを取得する(ステップS1409)。なお、プロセス内の監視スレッドを除いた全スレッドは、障害発生モードでの起床時に、ステップS1307の処理によって停止している。なお、CPU#0は、ステップS1307の時点でスレッドを停止させず、ステップS1409の後に、スレッドを停止させてもよい。
取得後、CPU#0は、プロセスが使用していたプロセス用領域を取得し(ステップS1410)、取得したプロセス用領域内の保存領域1009からプロセス管理情報912、スレッド管理情報913を復元する(ステップS1411)。続けて、CPU#0は、保存領域1009からプロセスのデータ704を復元する(ステップS1412)。なお、データ704の復元の際、初期データを持たない変数について、CPU#0は、保存領域1009に保存されていたデータをそのままデータ704にコピーする。
ステップS1408、またはステップS1412の処理後、CPU#0は、停止していたスレッドの動作を再開し(ステップS1413)、ステップS1304の処理に移行する。
以上説明したように、マルチコアプロセッサシステム、監視制御方法、および監視制御プログラムによれば、プロセス内に生成された監視スレッドが自身のプロセスと内部の監視対象スレッドとの状態を保存する。これにより、マルチコアプロセッサシステムは、プロセスごとに状態保存を行うため、特定のコアが状態を保存する間、他のコアは処理を継続でき、コアの処理能力を有効に活用することができる。
また、マルチコアプロセッサシステムは、監視スレッドを実行するコアを、監視対象スレッドを実行するコアとは異なるコアに設定してもよい。これにより、マルチコアプロセッサシステムは、監視スレッドが割り当てられていたコアが障害発生を起こした場合に、監視スレッドが属していたプロセスを継続することができる。したがって、障害発生を起こし、コアが再起動中であっても、他のコアによって継続可能なプロセスを実行することで、コアの処理能力を有効に活用することができる。
また、従来技術1による技術では、障害発生したコアが再起動し、再起動完了してから復元処理を行っていた。したがって、障害発生していない稼働状態であるコアは復元処理も行えず、アプリケーションの処理も行えなかった。本実施の形態にかかる技術によれば、障害発生したコアが再起動中であっても、継続可能なプロセスを実行でき、無停止動作を実現することができる。
また、マルチコアプロセッサシステムは、いずれかのコアが再起動が完了した場合、プロセスと監視対象スレッドを状態情報が保存された状態への復元要求を、再起動を完了したコアを検出したコアから再起動が完了したコア以外の他のコアに通知してもよい。これにより、マルチコアプロセッサシステムは、再起動が完了し、復元が可能となった段階で、復元処理と、継続可能なプロセスを実行することができる。
なお、継続可能なプロセスの監視スレッドは、再起動が完了したコアで実行されるため、復元要求を行わない。したがって、再起動が完了したコア以外の他のコアは、どのスレッドが継続可能であるかという判断を行わなくてよく、監視スレッドによる復元処理と、復元要求を受けていない継続可能なスレッドと、をスレッドの優先度等に基づいて実行することができる。
また、マルチコアプロセッサシステムは、復元要求が通知された場合、監視スレッドを実行するコアによって、プロセスおよび各監視対象スレッドを状態情報が保存された時点の状態に復元してもよい。これにより、各プロセスの復元をコアごとに実行できるため、たとえば、複数の監視スレッドを各コアに分散して割り当てることで、障害発生後の復元処理を分散して実行することができる。復元処理を各コアで分散して実行することで、マルチコアプロセッサシステムは、障害発生前の状態に高速に復元することができる。
また、マルチコアプロセッサシステムは、障害発生したコアを検出した場合、監視対象スレッドの停止要求を、少なくとも障害発生したコア以外の他のコアに通知し、停止要求および復元要求の通知後に、プロセスおよび各監視対象スレッドを復元してもよい。これにより、マルチコアプロセッサシステムは、障害発生したコアが再起動中であっても、継続可能なプロセスを実行することができる。さらに、継続可能なプロセスの監視スレッドは、障害発生したコアで実行されていたため、停止要求を行わない。したがって、障害発生したコア以外の他のコアは、どのスレッドが継続可能であるかという判断を行わなくてよく、停止されていないスレッドをそのまま継続可能なスレッドとして実行することができる。
また、障害発生し、再起動が完了した段階で、継続可能でないスレッドは、状態情報が保存された時点に復元される。したがって、障害発生後から再起動完了まで処理を行っても、その間の処理結果は残らず、無駄となる。また、処理結果は、障害発生し、停止したスレッドがあるために、正しい処理結果とならない可能性がある。したがって、マルチコアプロセッサシステムは、障害発生した段階で継続可能でないスレッドを停止させることで、余計な処理を行わずに済み、省電力効果を生む。
また、マルチコアプロセッサシステムの状態保存、状態復元を行う処理を特定のコアによる実行からスレッドによる実行にすることにより、スレッドの特徴を生かして状態保存、状態復元を行うことができる。具体的には、マルチコアプロセッサシステムは、スレッドの優先度を用いて、特定のプロセスの状態保存を行っている間に、特定のプロセスより優先度の高いプロセスの処理を割り込ませることができる。状態復元も同様に、特定のプロセスの状態復元を行っている間に、特定のプロセスより優先度の高いプロセスの処理を割り込ませることができる。また、復元するプロセスが複数存在する場合にも、より優先度の高いプロセスの状態復元を先行させることができる。
また、自身のスレッドにて優先度が変更可能であるOSであれば、監視スレッドは、状態復元を行う際に自身の優先度を通常より高めてもよい。たとえば、あるコアにて障害発生し、別のコアにて2つの監視スレッドがそれぞれのプロセスの復元処理を行う場合を想定する。このとき、一方の監視スレッドの復元処理が完了すると優先度が通常に戻り、まだ復元処理が完了していない監視スレッドの優先度が高いままとなり、復元処理を実行中の監視スレッドが優先して実行されるようになる。このように、マルチコアプロセッサシステムは、スレッドの特徴を生かし、復元処理を行うときに優先度を高めることで、復元処理を優先して実行させることも可能である。
なお、本実施の形態で説明した監視制御方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本監視制御プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本監視制御プログラムは、インターネット等のネットワークを介して配布してもよい。
#0、#1 CPU
100 マルチコアプロセッサシステム
103 RAM
110 バス
210、220 プロセス
211、221 監視スレッド
212、222 スレッド
215、224 状態情報
301 検出部
302 生成部
303 設定部
304 通知部
305、307 保存部
306、308 復元部

Claims (6)

  1. 複数のスレッドを有するプロセスを実行する複数のコアと、
    前記複数のコアからアクセスされる記憶部と
    を有するマルチコアプロセッサシステムであって、前記複数のコアのうちの第1のコアは、
    前記第1のコアを除く第2のコアで前記プロセスが実行される、前記プロセスの実行状態を含む状態情報を前記記憶部に記憶させる監視スレッドを生成し、前記監視スレッドを実行する前に、前記第2のコアに前記プロセスの実行を停止させる
    ルチコアプロセッサシステム。
  2. 前記複数のコアのうち再起動を完了したコアを検出したコアは、
    前記複数のコアのうち前記再起動が完了したコアを除く他のコアに、前記プロセスを前記状態情報が保存された時点の状態への復元要求を通知する請求項1に記載のマルチコアプロセッサシステム。
  3. 前記第1のコアは、
    前記復元要求が通知された場合、前記監視スレッドによって、前記プロセスを前記状態情報が保存された時点の状態に復元する請求項2に記載のマルチコアプロセッサシステム。
  4. 前記再起動が完了したコアにて再起動する要因となった障害が発生したことを検出したコアは、
    前記複数のコアのうち少なくとも前記他のコアに、前記プロセスの停止要求を通知し、
    前記第1のコアは、
    前記停止要求および前記復元要求が通知された場合、前記監視スレッドによって、前記プロセスを前記状態情報が保存された時点の状態に復元する請求項3に記載のマルチコアプロセッサシステム。
  5. 複数のスレッドを有するプロセスを実行する複数のコアと、前記複数のコアからアクセスされる記憶部とを有するマルチコアプロセッサシステムの監視制御方法であって、前記複数のコアのうちの第1のコアが、
    前記第1のコアを除く第2のコアで前記プロセスが実行される場合に、前記プロセスの実行状態を含む状態情報を前記記憶部に記憶させる監視スレッドを生成し、前記監視スレッドを実行する前に、前記第2のコアに前記プロセスの実行を停止させる
    処理を実行する監視制御方法。
  6. 複数のスレッドを有するプロセスを実行する複数のコアと、前記複数のコアからアクセスされる記憶部とを有するマルチコアプロセッサシステムの監視制御プログラムであって、前記複数のコアのうちの第1のコアに、
    前記第1のコアを除く第2のコアで前記プロセスが実行される場合に、前記プロセスの実行状態を含む状態情報を前記記憶部に記憶させる監視スレッドを生成し、前記監視スレッドを実行する前に、前記第2のコアに前記プロセスの実行を停止させる
    処理を実行させる監視制御プログラム。
JP2012537511A 2010-10-05 2010-10-05 マルチコアプロセッサシステム、監視制御方法、および監視制御プログラム Expired - Fee Related JP5516747B2 (ja)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/JP2010/067469 WO2012046302A1 (ja) 2010-10-05 2010-10-05 マルチコアプロセッサシステム、監視制御方法、および監視制御プログラム

Publications (2)

Publication Number Publication Date
JPWO2012046302A1 JPWO2012046302A1 (ja) 2014-02-24
JP5516747B2 true JP5516747B2 (ja) 2014-06-11

Family

ID=45927322

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012537511A Expired - Fee Related JP5516747B2 (ja) 2010-10-05 2010-10-05 マルチコアプロセッサシステム、監視制御方法、および監視制御プログラム

Country Status (5)

Country Link
US (1) US9335998B2 (ja)
EP (1) EP2626786B1 (ja)
JP (1) JP5516747B2 (ja)
CN (1) CN103154893B (ja)
WO (1) WO2012046302A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101715759B1 (ko) * 2015-09-22 2017-03-15 한국전자통신연구원 멀티코어 환경에서의 악성코드 분석 장치 및 방법

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2518671A (en) * 2013-09-30 2015-04-01 St Microelectronics Res & Dev Multiple Processor System
TWI625622B (zh) * 2013-10-31 2018-06-01 聯想企業解決方案(新加坡)有限公司 在多核心處理器系統與運作多核心處理器系統的電腦實施方法
FR3025627B1 (fr) * 2014-09-10 2018-03-23 Bull Sas Mecanisme haute performance pour generation d'informations de journalisation d'un processus informatique
CN105446933B (zh) * 2014-09-26 2018-04-24 扬智科技股份有限公司 多核心处理器的调试系统与调试方法
CN104298563B (zh) * 2014-10-13 2018-08-21 中国外汇交易中心 一种用于管理进程的方法及系统
US9404970B2 (en) * 2014-11-14 2016-08-02 Cavium, Inc. Debug interface for multiple CPU cores
EP3286974B1 (en) * 2015-04-24 2022-04-06 Nokia Technologies Oy Common random access channel resource based coordinated random access
DE102016200777A1 (de) * 2016-01-21 2017-07-27 Robert Bosch Gmbh Verfahren und Vorrichtung zum Überwachen und Kontrollieren quasi-paralleler Ausführungsstränge in einem ereignisorientierten Betriebssystem
JP6819061B2 (ja) * 2016-03-28 2021-01-27 日本電気株式会社 情報処理装置、プロセス切り替え方法及びプログラム
JP2018092571A (ja) * 2016-04-20 2018-06-14 株式会社リコー 電子装置、再起動方法およびプログラム
US10591976B2 (en) * 2016-11-10 2020-03-17 Apple Inc. Methods and apparatus for providing peripheral sub-system stability
US20190243698A1 (en) * 2018-02-02 2019-08-08 Robert Bosch Gmbh Electronic Control Unit for Flexible Replacement of Replaceable Components in a Vehicle
JP7087420B2 (ja) 2018-02-02 2022-06-21 富士通株式会社 処理プログラム、およびイベント処理方法
US11055366B2 (en) * 2018-06-04 2021-07-06 Genetec Inc. Electronic evidence transfer
JP2020009015A (ja) * 2018-07-04 2020-01-16 日本電産サンキョー株式会社 情報処理システム、情報処理装置、及び情報処理方法
DE102020205146A1 (de) * 2020-04-23 2021-10-28 Robert Bosch Gesellschaft mit beschränkter Haftung Vorrichtung und Verfahren zur Steuerung eines technischen Systems
CN113032207A (zh) * 2021-03-02 2021-06-25 广州虎牙科技有限公司 应用进程的监控方法、装置、电子设备及存储介质
JP7270278B2 (ja) * 2021-05-19 2023-05-10 株式会社ユニバーサルエンターテインメント 遊技機
CN115017004B (zh) * 2021-12-27 2023-07-07 荣耀终端有限公司 进程监控方法及电子设备
CN117112486A (zh) * 2023-08-09 2023-11-24 协创芯片(上海)有限公司 一种低功耗Soc芯片

Family Cites Families (27)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3253883B2 (ja) * 1997-01-31 2002-02-04 株式会社東芝 プロセスリスタート方法及びプロセス監視装置
JP2001331330A (ja) * 2000-05-19 2001-11-30 Fujitsu Ltd プロセス異常検知及び復旧システム
US7373548B2 (en) * 2003-08-29 2008-05-13 Intel Corporation Hardware recovery in a multi-threaded architecture
US9189230B2 (en) * 2004-03-31 2015-11-17 Intel Corporation Method and system to provide concurrent user-level, non-privileged shared resource thread creation and execution
US9038070B2 (en) * 2004-09-14 2015-05-19 Synopsys, Inc. Debug in a multicore architecture
JP2006139621A (ja) 2004-11-12 2006-06-01 Nec Electronics Corp マルチプロセッシングシステム及びマルチプロセッシング方法
US7472266B2 (en) * 2005-12-30 2008-12-30 Intel Corporation Fault resilient boot in multi-processor systems
JP2008003691A (ja) * 2006-06-20 2008-01-10 Hitachi Ltd 計算機のプロセス回復方法、チェックポイントリスタートシステム
JP4689572B2 (ja) * 2006-10-13 2011-05-25 日本電信電話株式会社 サーバ再開方法、サーバ再開装置、サーバ再開プログラム
JP5098456B2 (ja) 2007-06-15 2012-12-12 村田機械株式会社 プロセス状態監視装置
US7516365B2 (en) * 2007-07-27 2009-04-07 Sun Microsystems, Inc. System and method for split hardware transactions
US20100274972A1 (en) * 2008-11-24 2010-10-28 Boris Babayan Systems, methods, and apparatuses for parallel computing
US8881157B2 (en) * 2009-09-11 2014-11-04 Empire Technology Development Llc Allocating threads to cores based on threads falling behind thread completion target deadline
US8832663B2 (en) * 2009-11-23 2014-09-09 International Business Machines Corporation Thread serialization and disablement tool
US8549523B2 (en) * 2009-11-23 2013-10-01 International Business Machines Corporation Performing runtime analysis and control of folding identified threads by assuming context of another thread and executing in lieu of another thread folding tool
US20110161961A1 (en) * 2009-12-29 2011-06-30 Nokia Corporation Method and apparatus for optimized information transmission using dedicated threads
US8612730B2 (en) * 2010-06-08 2013-12-17 International Business Machines Corporation Hardware assist thread for dynamic performance profiling
US8464104B2 (en) * 2010-09-10 2013-06-11 International Business Machines Corporation Mobility of versioned workload partitions
US8589922B2 (en) * 2010-10-08 2013-11-19 International Business Machines Corporation Performance monitor design for counting events generated by thread groups
WO2012124077A1 (ja) * 2011-03-16 2012-09-20 富士通株式会社 マルチコアプロセッサシステムおよびスケジューリング方法
US9152510B2 (en) * 2012-07-13 2015-10-06 International Business Machines Corporation Hardware recovery in multi-threaded processor
US9063906B2 (en) * 2012-09-27 2015-06-23 International Business Machines Corporation Thread sparing between cores in a multi-threaded processor
US9280388B2 (en) * 2013-01-22 2016-03-08 Oracle International Corporation Method and apparatus for efficient scheduling of multithreaded programs
US9495159B2 (en) * 2013-09-27 2016-11-15 Intel Corporation Two level re-order buffer
US9678851B2 (en) * 2013-10-14 2017-06-13 International Business Machines Corporation Continuous monitoring and analysis of software events
KR101671372B1 (ko) * 2014-01-16 2016-11-16 한국전자통신연구원 멀티코어 기반 병렬 프로그램의 경합 탐지를 위한 확장적 감시 장치 및 방법
US9652247B2 (en) * 2014-01-24 2017-05-16 Nec Corporation Capturing snapshots of offload applications on many-core coprocessors

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101715759B1 (ko) * 2015-09-22 2017-03-15 한국전자통신연구원 멀티코어 환경에서의 악성코드 분석 장치 및 방법
US9965631B2 (en) 2015-09-22 2018-05-08 Electronics And Telecommunications Research Institute Apparatus and method for analyzing malicious code in multi-core environment using a program flow tracer

Also Published As

Publication number Publication date
EP2626786B1 (en) 2016-04-20
EP2626786A1 (en) 2013-08-14
US9335998B2 (en) 2016-05-10
EP2626786A4 (en) 2015-04-01
WO2012046302A1 (ja) 2012-04-12
JPWO2012046302A1 (ja) 2014-02-24
CN103154893B (zh) 2016-05-04
US20130238882A1 (en) 2013-09-12
CN103154893A (zh) 2013-06-12

Similar Documents

Publication Publication Date Title
JP5516747B2 (ja) マルチコアプロセッサシステム、監視制御方法、および監視制御プログラム
US8990617B2 (en) Fault-tolerant computer system, fault-tolerant computer system control method and recording medium storing control program for fault-tolerant computer system
JP5966927B2 (ja) 分散処理装置及び分散処理システム
WO2012093488A1 (ja) スケジューリング方法、およびマルチコアプロセッサシステム
JP5780292B2 (ja) 同期方法、マルチコアプロセッサシステム、および同期システム
US20140298333A1 (en) Migration processing program, migration method, and cloud computing system
CN112395050B (zh) 一种虚拟机备份方法、装置、电子设备及可读存储介质
JP6123626B2 (ja) 処理再開方法、処理再開プログラムおよび情報処理システム
CN111400086B (zh) 虚拟机容错的实现方法和系统
Chen et al. Replication-based fault-tolerance for large-scale graph processing
US10795708B1 (en) Transparent disk caching for virtual machines and applications
JP4992740B2 (ja) マルチプロセッサシステム、障害検出方法および障害検出プログラム
JP5708450B2 (ja) マルチコアプロセッサシステム、レジスタ利用方法、およびレジスタ利用プログラム
JP6677021B2 (ja) 情報処理装置、情報処理方法、プログラム
JP5780296B2 (ja) スレッド処理方法、およびスレッド処理システム
CN114756355B (zh) 一种计算机操作系统的进程自动快速恢复的方法和装置
JP5704176B2 (ja) プロセッサ処理方法、およびプロセッサシステム
JP2010231295A (ja) 解析システム
JP5867630B2 (ja) マルチコアプロセッサシステム、マルチコアプロセッサシステムの制御方法、およびマルチコアプロセッサシステムの制御プログラム
CN107315624B (zh) 信息处理方法及虚拟化管理器
JP2010231296A (ja) 並列計算システム
JP2003330737A (ja) 計算機システム
JP2020129329A (ja) 情報処理実行制御装置、情報処理実行制御システム、情報処理実行制御方法、及び、情報処理実行制御プログラム
JP5731665B2 (ja) 計算機システム及び複製制御方法
JP2009116885A (ja) コンピュータ及び制御方法

Legal Events

Date Code Title Description
TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140304

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140317

R150 Certificate of patent or registration of utility model

Ref document number: 5516747

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees