(57)【要約】【課題】整合性を持つロールバックプロトコルを有する通信システムの提供。【解決手段】通信装置は、現在稼働中の第１のプロセスを第２のプロセスにロールバックするために前記第２のプロセスを作成するロールバック制御部と、前記第１のプロセスおよび前記第２のプロセスによって共有される状態を記憶し、前記第２のプロセスが、前記記憶されている１つ以上の状態を引き継ぐことを可能にする記憶部と、バッファと、ロールバックのタイミングを制御するタイミング制御部とを備える。前記ロールバック制御部は、前記第１のプロセスの処理中に受信された、前記第１のプロセス宛の１つ以上のイベントのすべてを前記バッファに格納するようにイベントバッファリングを開始し、前記第１のプロセスによる前記イベントの処理が完了すると、前記ロールバック制御部は、前記第１のプロセスから前記第２のプロセスへの稼働中のプロセスの切り替えを行い、前記イベントバッファリングの開始から前記バッファに格納された前記１つ以上のイベントを前記第２のプロセスに送信し、前記イベントバッファリングを終了する。【選択図】図１
2019522436.tif 000002
【特許請求の範囲】
【請求項１】
現在稼働中の第１のプロセスを第２のプロセスにロールバックするために前記第２のプロセスを作成するロールバック制御部と、
前記第１のプロセスおよび前記第２のプロセスによって共有される１つ以上の状態を記憶し、前記第２のプロセスが、前記記憶されている１つ以上の状態を引き継ぐことを可能にする記憶部と、
バッファと、
ロールバックのタイミングを制御するように構成されたタイミング制御部と、
を備え、
前記ロールバック制御部は、前記第１のプロセスが前記ロールバック中にイベントを処理している場合、前記第１のプロセス宛に送信された１つ以上の受信イベントのすべてを格納するような前記バッファの設定でイベントバッファリングが開始するように制御し、
前記ロールバック制御部は、前記タイミング制御部の制御の下、前記第１のプロセスによる前記イベントの処理が完了すると、前記第１のプロセスから前記第２のプロセスへの稼働中のプロセスの切り替えを行い、
前記ロールバック制御部は、前記イベントバッファリングの開始から前記バッファに格納された前記１つ以上のイベントのすべてを、前記第１のプロセスから切り換えられた前記第２のプロセスに送信し、前記イベントバッファリングを終了するように制御する、ことを特徴とする通信装置。
【請求項２】
マッチ条件と前記マッチ条件に対応する受信信号がディスパッチされる対象プロセスとの間の対応関係を定義するディスパッチルールに基づいて、対応するプロセスに、受信した信号をディスパッチするディスパッチャをさらに備える、ことを特徴とする請求項１記載の通信装置。
【請求項３】
前記イベントバッファリングにおいて、前記ロールバック制御部は、前記第１のプロセスが前記イベントを処理している間に受信され、前記第１のプロセスにディスパッチされるべき１つ以上のパケットのすべてを、前記ディスパッチャが前記バッファに提供するように制御し、前記１つ以上のパケットは前記１つ以上のイベントに対応し、前記バッファは、自身に提供される前記１つ以上のパケットを格納し、
前記ロールバック制御部は、前記第１のプロセスによる前記イベントの処理が完了すると、前記ディスパッチャが、前記ディスパッチルールにおいて前記対象プロセスとして定義されている前記第１のプロセスを、前記第１のプロセスから切り替えた前記第２のプロセスに変更するよう制御する、ことを特徴とする請求項２記載の通信装置。
【請求項４】
前記第１と第２のプロセスはスイッチプロセスであり、前記スイッチプロセスは、前記ディスパッチャにより自身にディスパッチされたパケットを受信すると、前記パケットのヘッダフィールド情報をフローの処理について前記スイッチプロセスのフローエントリと照合し、照合結果に基づき前記パケットを処理し、
前記スイッチプロセスのフローエントリは、受信したパケットのヘッダフィールド情報と照合されるマッチフィールドと、マッチするパケットの処理を定義するアクションフィールドとを含む、ことを特徴とする請求項２記載の通信装置。
【請求項５】
前記第１と第２のプロセスはコントローラプロセスであり、前記コントローラプロセスは、スイッチからのメッセージを受信すると、フローの経路上の各スイッチに適用される前記フローを処理するためのフローエントリを生成し、前記フローエントリは、前記スイッチが受信したパケットのヘッダフィールド情報と照合されるマッチフィールドと、マッチするパケットの前記スイッチによる処理を定義するアクションフィールドと、を含み、
前記生成されたルールを前記フローの経路上の各スイッチに送信する、ことを特徴とする請求項１乃至３のいずれか１項に記載の通信装置。
【請求項６】
前記第１および第２のプロセスは、それぞれに割り当てられた隔離された環境で実行されるように構成され、
前記第１および第２のプロセスのそれぞれのために配置された前記隔離された環境は、他の少なくとも１つのプロセスのために配置された少なくとも１つの環境のそれぞれから隔離される、ことを特徴とする請求項１乃至５のいずれか１項に記載の通信装置。
【請求項７】
フローベースのパケット転送用に適合されたスイッチ装置であって、
現在稼働中の第１のスイッチプロセスを第２のスイッチプロセスにロールバックするために前記第２のスイッチプロセスを作成するロールバック制御部と、
前記第１のスイッチプロセスおよび前記第２のスイッチプロセスによって共有される１つ以上の状態を記憶し、前記第２のスイッチプロセスが、前記記憶されている１つ以上の状態を引き継ぐことを可能にする記憶部と、
バッファと、
ロールバックのタイミングを制御するタイミング制御部と、
ネットワークに接続されるように適合されたネットワークインターフェースと、
マッチ条件と前記マッチ条件に対応する受信パケットがディスパッチされる対象スイッチプロセスとの間の対応関係を定義するディスパッチルールに基づいて、対応するスイッチプロセスに、受信したパケット又はメッセージをディスパッチするディスパッチャと、
を備え、
前記第２のスイッチプロセスを作成した後に、前記ロールバック制御部は、前記第１のスイッチプロセスが、受信したパケットに関連するイベントを処理中であると判断した場合、前記第１のスイッチプロセスが前記イベントを処理している間に受信され、前記ディスパッチャによって前記第１のスイッチプロセスにディスパッチされるべき１つ以上のパケットのすべてを格納するような前記バッファの設定でバッファリングが開始するように制御し、
前記ロールバック制御部は、前記タイミング制御部の制御の下、前記第１のスイッチプロセスによる前記イベントの処理が完了すると、前記第１のスイッチプロセスから前記第２のスイッチプロセスへの稼働中のプロセスの切り替えを行い、
前記ロールバック制御部は、前記バッファリングの開始から前記バッファに格納された前記１つ以上のパケットのすべてを、前記第１のスイッチプロセスから切り換えられた前記第２のスイッチプロセスに送信し、前記バッファリングを終了するように制御する、ことを特徴とするスイッチ装置。
【請求項８】
前記バッファリングの開始時に、前記ロールバック制御部は、前記第１のスイッチプロセスが前記イベントを処理している間に受信され、前記第１のスイッチプロセスにディスパッチされるべき１つ以上のパケットのすべてを、前記ディスパッチャが前記バッファに提供するように制御し、前記バッファは、自身に提供される前記１つ以上のパケットすべてを格納し、
前記ロールバック制御部は、前記第１のスイッチプロセスによる前記イベントの処理が完了すると、前記ディスパッチャが、前記ディスパッチルールにおいて対象スイッチプロセスとして定義されている前記第１のスイッチプロセスを、前記第１のスイッチプロセスから切り替えられた前記第２のスイッチプロセスに変更するよう制御する、ことを特徴とする請求項７記載のスイッチ装置。
【請求項９】
前記第１および第２のスイッチプロセスは、それぞれに割り当てられた隔離された環境で実行されるように構成され、前記第１および第２のスイッチプロセスのそれぞれのために配置された前記隔離された環境は、他の少なくとも１つのプロセスのために配置された少なくとも１つの環境のそれぞれから隔離される、ことを特徴とする請求項７又は８記載のスイッチ装置。
【請求項１０】
フローベースのパケット転送を実行するようにそれぞれ適合された１つ以上のスイッチを制御するコントローラ装置であって、
現在稼働中の第１のコントローラプロセスを第２のコントローラプロセスにロールバックするために前記第２のコントローラプロセスを作成するロールバック制御部と、
前記第１のコントローラプロセスおよび前記第２のコントローラプロセスによって共有される状態を記憶し、前記第２のコントローラプロセスが、前記記憶されている１つ以上の状態を引き継ぐことを可能にする記憶部と、
バッファと、
ロールバックのタイミングを制御するタイミング制御部と、
前記スイッチに接続されるように適合されたネットワークインターフェースと、
マッチ条件と前記マッチ条件に対応する受信パケットがディスパッチされる対象コントローラプロセスとの間の対応関係を定義するディスパッチルールに基づいて、対応するコントローラプロセスに、受信したパケットをディスパッチするディスパッチャと、
を備え、
前記第２のコントローラプロセスを作成した後に、前記ロールバック制御部は、前記第１のコントローラプロセスが、受信したパケットに関連するイベントを処理中であると判断した場合、前記第１のコントローラプロセスが前記イベントを処理している間に受信され、前記ディスパッチャによって前記第１のコントローラプロセスにディスパッチされるべき１つ以上のパケットのすべてを格納するような前記バッファの設定でバッファリングが開始するように制御し、
前記ロールバック制御部は、前記タイミング制御部の制御の下、前記第１のコントローラプロセスによる前記イベントの処理が完了すると、前記第１のコントローラプロセスから前記第２のコントローラプロセスへの稼働中のプロセスの切り替えを行い、
前記ロールバック制御部は、前記バッファリングの開始から前記バッファに格納された前記１つ以上のパケットのすべてを、前記第１のコントローラプロセスから切り換えられた前記第２のコントローラプロセスに送信し、前記バッファリングを終了するように制御する、ことを特徴とするコントローラ装置。
【請求項１１】
前記バッファリングの開始時に、前記ロールバック制御部は、前記第１のコントローラプロセスが前記イベントを処理している間に受信され、前記第１のコントローラプロセスにディスパッチされるべき１つ以上のパケットのすべてを、前記ディスパッチャが前記バッファに提供するように制御し、前記バッファは、自身に提供される前記１つ以上のパケットすべてを格納し、
前記ロールバック制御部は、前記第１のコントローラプロセスによる前記イベントの処理が完了すると、前記ディスパッチャが、前記ディスパッチルールにおいて対象プロセスとして定義されている前記第１のコントローラプロセスを、前記第１のコントローラプロセスから切り替えられた前記第２のコントローラプロセスに変更するよう制御する、ことを特徴とする請求項１０記載のコントローラ装置。
【請求項１２】
前記第１および第２のコントローラプロセスは、それぞれに割り当てられた隔離された環境で実行されるように構成され、前記第１および第２のコントローラプロセスのそれぞれのために配置された前記隔離された環境は、他の少なくとも１つのプロセスのために配置された少なくとも１つの環境のそれぞれから隔離される、ことを特徴とする請求項１０又は１１記載のコントローラ装置。
【請求項１３】
フローベースのパケット転送を実行するためにそれぞれ適合された１つ以上のスイッチと、
前記１つ以上のスイッチを制御するコントローラと、
を備え、
前記スイッチは、
現在稼働中の第１のスイッチプロセスを第２のスイッチプロセスにロールバックするために前記第２のスイッチプロセスを作成するロールバック制御部と、
前記第１のスイッチプロセスおよび前記第２のスイッチプロセスによって共有される状態を記憶し、前記第２のスイッチプロセスが、前記記憶されている１つ以上の状態を引き継ぐことを可能にする記憶部と、
バッファと、
ロールバックのタイミングを制御するタイミング制御部と、
ネットワークに接続されるように適合されたネットワークインターフェースと、
マッチ条件と前記マッチ条件に対応する受信パケットがディスパッチされる対象スイッチプロセスとの間の対応関係を定義するディスパッチルールに基づいて、対応するスイッチプロセスに、受信したパケット又はメッセージをディスパッチするディスパッチャと、
を備え、
前記第２のスイッチプロセスを作成した後に、前記ロールバック制御部は、前記第１のスイッチプロセスが、受信したパケットに関連するイベントを処理中であると判断した場合、前記第１のスイッチプロセスが前記イベントを処理している間に受信され、前記ディスパッチャによって前記第１のスイッチプロセスにディスパッチされるべき１つ以上のパケットのすべてを格納するような前記バッファの設定でバッファリングが開始するように制御し、
前記ロールバック制御部は、前記タイミング制御部の制御の下、前記第１のスイッチプロセスによる前記イベントの処理が完了すると、前記第１のスイッチプロセスから前記第２のスイッチプロセスへの稼働中のプロセスの切り替えを行い、
前記ロールバック制御部は、前記バッファリングの開始から前記バッファに格納された前記１つ以上のパケットのすべてを、前記第１のスイッチプロセスから切り換えられた前記第２のスイッチプロセスに送信し、前記バッファリングを終了するように制御する、ことを特徴とする通信システム。
【請求項１４】
前記バッファリングの開始時に、前記ロールバック制御部は、前記第１のスイッチプロセスが前記イベントを処理している間に受信され、前記第１のスイッチプロセスにディスパッチされるべき１つ以上のパケットのすべてを、前記ディスパッチャが前記バッファに提供するように制御し、前記バッファは、自身に提供される前記１つ以上のパケットすべてを格納し、
前記ロールバック制御部は、前記第１のスイッチプロセスによる前記イベントの処理が完了すると、前記ディスパッチャが、前記ディスパッチルールにおいて前記対象スイッチプロセスとして定義されている前記第１のスイッチプロセスを、前記第１のスイッチプロセスから切り替えられた前記第２のスイッチプロセスに変更するよう制御する、ことを特徴とする請求項１３記載の通信システム。
【請求項１５】
前記スイッチにおける前記第１および第２のスイッチプロセスは、それぞれに割り当てられた隔離された環境で実行されるように構成され、前記第１および第２のプロセスのそれぞれのために配置された前記隔離された環境は、他の少なくとも１つのプロセスのために配置された少なくとも１つの環境のそれぞれから隔離される、ことを特徴とする請求項１３又は１４記載の通信システム。
【請求項１６】
前記コントローラは、
現在稼働中の第１のコントローラプロセスを第２のコントローラプロセスにロールバックするために前記第２のコントローラプロセスを作成するロールバック制御部と、
前記第１のコントローラプロセスおよび前記第２のコントローラプロセスによって共有される状態を記憶し、前記第２のコントローラプロセスが、前記記憶されている１つ以上の状態を引き継ぐことを可能にする記憶部と、
バッファと、
ロールバックのタイミングを制御するタイミング制御部と、
前記１つ以上のスイッチに接続されるように適合されたネットワークインターフェースと、
マッチ条件と前記マッチ条件に対応する受信パケットがディスパッチされる対象コントローラプロセスとの間の対応関係を定義するディスパッチルールに基づいて、対応するコントローラプロセスに、受信したパケットをディスパッチするディスパッチャと、
を備え、
前記第２のコントローラプロセスを作成した後に、前記ロールバック制御部は、前記第１のコントローラプロセスが、受信したパケットに関連するイベントを処理中であると判断した場合、前記第１のコントローラプロセスが前記イベントを処理している間に受信され、前記ディスパッチャによって前記第１のコントローラプロセスにディスパッチされるべき１つ以上のパケットのすべてを格納するような前記バッファの設定でバッファリングが開始するように制御し、
前記ロールバック制御部は、前記タイミング制御部の制御の下、前記第１のコントローラプロセスによる前記イベントの処理が完了すると、前記第１のコントローラプロセスから前記第２のコントローラプロセスへの稼働中のプロセスの切り替えを行い、
前記ロールバック制御部は、前記バッファリングの開始から前記バッファに格納された前記１つ以上のパケットのすべてを、前記第１のコントローラプロセスから切り換えられた前記第２のコントローラプロセスに送信し、前記バッファリングを終了するように制御する、ことを特徴とする請求項１３乃至１５のいずれか１項に記載の通信システム。
【請求項１７】
前記バッファリングの開始時に、前記コントローラの前記ロールバック制御部は、前記第１のコントローラプロセスが前記イベントを処理している間に受信され、前記第１のコントローラプロセスにディスパッチされるべき１つ以上のパケットのすべてを、前記コントローラの前記ディスパッチャが前記コントローラの前記バッファに提供するように制御し、前記コントローラの前記バッファは、自身に提供される前記１つ以上のパケットすべてを格納し、
前記コントローラの前記ロールバック制御部は、前記第１のコントローラプロセスによる前記イベントの処理が完了すると、前記コントローラの前記ディスパッチャが、前記ディスパッチルールにおいて前記対象コントローラプロセスとして定義されている前記第１のコントローラプロセスを、前記第１のコントローラプロセスから切り替えられた前記第２のコントローラプロセスに変更するよう制御する、ことを特徴とする請求項１６に記載の通信システム。
【請求項１８】
前記第１および第２のコントローラプロセスは、それぞれに割り当てられた隔離された環境で実行されるように構成され、前記第１および第２のコントローラプロセスのそれぞれのために配置された前記隔離された環境は、他の少なくとも１つのプロセスのために配置された少なくとも１つの環境のそれぞれから隔離される、ことを特徴とする請求項１６又は１７記載の通信システム。
【請求項１９】
各コントローラプロセスおよび各スイッチプロセスは、テナントに関連するネットワークを構成し、前記コントローラの前記ディスパッチャは、前記スイッチから受信した前記パケットをテナントに関連付けられたコントローラプロセスにディスパッチする、ことを特徴とする請求項１６乃至１８のいずれか１項に記載の通信システム。
【請求項２０】
現在稼働中の第１のプロセスを第２のプロセスにロールバックするために前記第２のプロセスを作成し、
前記第１のプロセスおよび前記第２のプロセスが記憶部に記憶されている状態を共有し、前記第２のプロセスは、前記記憶部に記憶されている前記１つ以上の状態を引き継ぐことが可能であり、
前記第１のプロセスがイベントを処理している場合、前記第２のプロセスが作成された後、前記ロールバック中に受信された、前記第１のプロセス宛の１つ以上のイベントのすべてをバッファに格納するようにイベントバッファリングを開始し、
前記第１のプロセスによる前記イベントの処理が完了すると、前記第１のプロセスから前記第２のプロセスへ稼働中のプロセスの切り替えを行い、
前記イベントバッファリングの開始から前記バッファに格納された前記１つ以上のイベントのすべてを、前記第１のプロセスから切り換えられた前記第２のプロセスに送信し、前記イベントバッファリングを終了する、ことを特徴とするロールバック方法。
【請求項２１】
マッチ条件と前記マッチ条件に対応する受信信号がディスパッチされる対象プロセスとの間の対応関係を定義するディスパッチルールに基づいて、ディスパッチャにより、対応するプロセスに対して受信した信号をディスパッチする、ことを特徴とする請求項２０記載のロールバック方法。
【請求項２２】
前記イベントバッファリングにおいて、前記ディスパッチャは、前記第１のプロセスが前記イベントを処理している間に受信され、前記第１のプロセスにディスパッチされるべき１つ以上のパケットのすべてを前記バッファに提供し、前記１つ以上のパケットは前記１つ以上のイベントに対応し、前記バッファは、自身に提供される前記１つ以上のパケットを格納し、
前記第１のプロセスによる前記イベントの処理が完了すると、前記ディスパッチルールにおけるパケットの宛先を、前記第１のプロセスから切り替えた前記第２のプロセスに変更する、ことを特徴とする請求項２１記載のロールバック方法。
【請求項２３】
前記第１および第２のプロセスは、それぞれに割り当てられた隔離された環境で実行されるように構成され、前記第１および第２のプロセスのそれぞれのために配置された前記隔離された環境は、他の少なくとも１つのプロセスのために配置された少なくとも１つの環境のそれぞれから隔離される、ことを特徴とする請求項２１又は２２記載のロールバック方法。
【請求項２４】
現在稼働中の第１のプロセスを第２のプロセスにロールバックするために前記第２のプロセスを作成し、
前記第１のプロセスおよび前記第２のプロセスが記憶部に記憶されている１つ以上の状態を共有し、前記第２のプロセスは、前記記憶部に記憶されている前記１つ以上の状態を引き継ぐことが可能であり、
マッチ条件と前記マッチ条件に対応する受信パケットがディスパッチされる対象プロセスとの間の対応関係を定義するディスパッチルールに基づいて、対応するプロセスに対して受信したパケットをディスパッチし、
前記第２のプロセスが作成された後、前記第１のプロセスが、受信したパケットに関連するイベントを処理中であると判断した場合、前記第１のプロセスが前記イベントを処理している間に受信された、前記第１のプロセスにディスパッチされるべき１つ以上のパケットのすべてをバッファに格納するようにバッファリングを開始し、
前記第１のプロセスによる前記イベントの処理が完了すると、前記第１のプロセスから前記第２のプロセスへ稼働中のプロセスの切り替えを行い、
前記バッファリングの開始から前記バッファに格納された前記１つ以上のパケットのすべてを、前記第１のプロセスから切り換えられた前記第２のプロセスに送信し、前記バッファリングを終了すること、を含む処理をコンピュータに実行させるプログラム。
【請求項２５】
前記第１のプロセスによる前記イベントの処理が完了すると、前記ディスパッチルールにおいて前記対象プロセスとして定義されている前記第１のプロセスを、前記第１のプロセスから切り替えた前記第２のプロセスに変更する、ことを特徴とする請求項２４記載のプログラム。
【請求項２６】
前記第１および第２のプロセスは、それぞれに割り当てられた隔離された環境で実行されるように構成され、前記第１および第２のプロセスのそれぞれのために配置された前記隔離された環境は、他の少なくとも１つのプロセスのために配置された少なくとも１つの環境のそれぞれから隔離される、ことを特徴とする請求項２４又は２５記載のプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、通信装置、システム、ロールバック方法及びプログラムに関する。
【背景技術】
【０００２】
ＳＤＮ（Ｓｏｆｔｗａｒｅ  Ｄｅｆｉｎｅｄ  Ｎｅｔｗｏｒｋ）アーキテクチャでは、コントロールプレーンとデータプレーンが分離され、ネットワークインテリジェンスとその状態が論理的に集中化され、基盤となるネットワークインフラストラクチャがアプリケーションから抽象化される。その結果、これ迄にないプログラマビリティ、自動化、ネットワーク制御が提供され、通信事業者は、例えば、変化する環境やニーズに容易に適応できる、高度にスケーラブルで柔軟なネットワークが構築可能である（非特許文献１）。図１６に示されるように、ＳＤＮアーキテクチャは、通常、ＳＤＮコントローラ１と、ＳＤＮノースバウンドインターフェース４を介してＳＤＮコントローラ１に接続されたＳＤＮアプリケーション２と、ＳＤＮコントロールデータプレーンインターフェース（ＳＤＮサウスバウンドインターフェース５）を介してＳＤＮコントローラ１に接続されたネットワーク要素３とを含む。ＳＤＮコントローラ１は、ＳＤＮノースバウンドインターフェース５を介してＳＤＮアプリケーション２（ノースバウンドアプリケーション）から指示、または要件を受信し、受信した指示または要件を、ＳＤＮサウスバウンドインターフェース５を介してネットワーク要素３に中継する。また、ＳＤＮコントローラ１は、ネットワーク要素３のネットワーク状態に関する情報を抽出し、管理する。ネットワーク要素３は、パケットデータの転送および処理の機能を実行するスイッチを含んでもよい。以下にＳＤＮの１つの例として、オープンフロー（ＯｐｅｎＦｌｏｗ）の概要を示す。なお、オープンフローは、ＳＤＮで利用可能な唯一のプロトコルではない。
【０００３】
図１６のネットワーク要素３に対応するスイッチ（ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ（ＯＦＳ）とも称される）は、少なくとも１つのフローエントリを含むフローテーブルを備える。各フローエントリは、受信パケットのヘッダフィールド情報と照合されるマッチフィールドと、受信パケット数や受信バイト数などの統計情報を含むカウンタフィールドと、ヘッダーフィールド情報がマッチフィールドと一致する受信パケットをどのように処理すべきかスイッチに指示する、ゼロ又はそれ以上のアクションを示すアクションフィールドとを含む。パケットを受信すると、スイッチは、受信パケットのヘッダフィールド情報を用いて、自らのフローテーブルを検索する。ミスヒット（不一致）の場合、スイッチは、セキュアチャネルを介して、Ｐａｃｋｅｔ−Ｉｎメッセージを用いて受信パケット（第１のパケット）をコントローラ（ＳＤＮコントローラ）に送信する。
【０００４】
Ｐａｃｋｅｔ−Ｉｎメッセージを受信すると、コントローラ（図１６のＳＤＮコントローラに対応）は、第１のパケットの送信元と宛先の情報に基づき、ネットワークトポロジ情報を参照してパケットの経路を算出する。当該経路に基づき、コントローラは経路上に配置された各スイッチに対してフローエントリを生成し、フロー変更（Ｆｌｏｗ−Ｍｏｄ）メッセージを経路上に配置された各スイッチに送信することにより、生成されたフローエントリをそれぞれのスイッチに対して設定する。コントローラにより設定されたフローエントリのマッチフィールドに一致するヘッダを有する、第１のパケットに続く少なくとも１つのパケットを受信すると、経路上の各スイッチは、上記少なくとも１つのパケットを、例えば、フローエントリのアクションフィールドに定義されているように、次のノードに転送する。オープンフローの詳細は、以下の非特許文献２に記載されている。
【０００５】
特許文献１には、第１のコントローラが、制御情報の送信タイミングで第２のコントローラに制御情報を送信するための送信ポリシーに基づいて制御情報を選別し、第２のコントローラが、受信した制御情報から受信ポリシー制御情報に基づいて選別し、選別した制御情報を記憶部に格納する構成が開示されている。
【０００６】
特許文献２には、スイッチのフローエントリに異常が見つかった場合、コントローラは、他のスイッチの関連するフローテーブル（フローエントリ）をロールバックするように制御する構成が開示されている。
【０００７】
ＳＤＮアーキテクチャとは関係はなく、冗長化システムに関するものだが、特許文献３には、稼働中のプログラムが実行するフィールドデバイスの監視や制御を妨げないようなタイミングで、上記稼働中のプログラムの代替プログラムへの切り替えが可能な構成が開示されている。稼働中のプログラムが、高精度なリアルタイム処理を実行している場合には、そのリアルタイム処理が完了するまで、代替プログラムへの切り替えタイミングを遅らせる。
【先行技術文献】
【特許文献】
【０００８】
【特許文献１】国際公開第２０１４／１５７２４１号
【特許文献２】特表２０１３−５４５３２１号公報
【特許文献３】国際公開第２０１５／０３７１１６号
【非特許文献】
【０００９】
【非特許文献１】“Software-Defined Networking: The New Norm for Networks,” ONF White Paper April 13, 2012 Internet ＜URL:https://www.opennetworking.org/images/stories/downloads/sdn-resources/white-papers/wp-sdn-newnorm.pdf＞
【非特許文献２】“OpenFlow Switch Specification Version 1.5.0 (Protocol version 0x06),” December 19, 2014, Internet ＜URL:https://www.opennetworking.org/images/stories/downloads/sdn-resources/onf-specifications/openflow/openflow-switch-v1.5.0.noipr.pdf＞
【非特許文献３】Naga Katta, Haoyu Zhang, Michael Freedman, and Jennifer Rexford, “Ravana: controller fault-tolerance in software-defined networking,” Proceedings of the 1st ACM SIGCOMM Symposium on Software Defined Networking Research (SOSR '15), June 17-18, 2015
【発明の概要】
【発明が解決しようとする課題】
【００１０】
上記特許文献１−３及び非特許文献１−３の全開示内容は、引用をもって本明細書に組み込み記載されているものとする。
【００１１】
以下の分析は、本発明の発明者によってなされたものである。
【００１２】
ＳＤＮでは、スイッチプロセスやコントローラプロセスなどの処理が持続的に実行される。
【００１３】
プロセスがマルウェアなどによって侵害されると、その損害は時間が経過しても残る。非特許文献１や２のような関連技術では、異常が生じた要素またはプロセスの回復を可能にする仕組みが何も提供されていない。したがって、ある要素や、スイッチ、コントローラなどのネットワークノードが侵害されると、損害がネットワーク全体にさらに広がる可能性がある。
【００１４】
スイッチプロセス又はコントローラプロセスを、以前に保存したバージョンに後進復帰するロールバックを使用して、プロセスを元の状態に戻すことができる。しかし、実施形態で後述するように、プロセスのロールバックにおいてイベント損失および／またはイベントの順序の逆転など、不一致が生じることがある。
【００１５】
非特許文献３には、アプリケーションを制御するための無欠陥の集中コントローラの抽象化を提供する、Ｒａｖａｎａと称される耐障害性（フォールトトレラント：ｆａｕｌｔ−ｔｏｌｅｒａｎｔ）のＳＤＮコントローラプラットフォームが開示されている。物理的に分離されたコントローラ間のフェールオーバーを前提とするＲａｖａｎａは、不一致を防ぐために以下の仕組みを展開する。
−  スイッチイベントのバッファリングと再送信（スイッチイベントは失われない）
−  ログにおけるイベントＩＤとフィルタリング（イベントは２回以上処理されない）
−  マスタは、イベントを共有ログにシリアル化する（複製はイベントを同じ順序で処理する）
−  イベントログの２段階レプリケーションと決定論的再実行（複製は同じ内部状態を構築する）
−  スイッチからのＲＰＣ（Ｒｅｍｏｔｅ  Ｐｒｏｃｅｄｕｒｅ  Ｃａｌｌ（遠隔手続き呼出））確認応答（コントローラコマンドは失われない）
−  スイッチにおいてのコマンドＩＤとフィルタリング（コマンドは繰り返し実行されない）
Ｒａｖａｎａは、トランザクションが全ての複製において全体的に順序付けされ、システム全体で厳密に一度だけ実行されることを保証する。また、Ｒａｖａｎａは、ロールバックやコマンドの繰り返し実行に頼らずに、スイッチの状態を正しく処理できる。
【００１６】
しかし、上記のＲａｖａｎａの仕組みは複雑すぎる。
【００１７】
本発明者らは、プロセスを元の状態に戻すためのロールバックにおける問題に対する解決策を考案した。
【００１８】
従って、本発明は、安全なネットワーキングを確保するための、プロセスのロールバックにおける不一致の発生を防止することが可能なシステム、装置、方法及びプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１９】
本発明の第１の視点によれば、現在稼働中の第１のプロセスを第２のプロセスにロールバックするために前記第２のプロセスを作成するロールバック制御部と、
前記第１のプロセスおよび前記第２のプロセスによって共有される１つ以上の状態を記憶し、前記第２のプロセスが、前記記憶されている１つ以上の状態を引き継ぐことを可能にする記憶部と、
バッファと、
ロールバックのタイミングを制御するように構成されたタイミング制御部と、
を備え、
前記ロールバック制御部は、前記第１のプロセスが前記ロールバック中にイベントを処理している場合、前記第１のプロセス宛に送信された１つ以上の受信イベントのすべてを格納するような前記バッファの設定でイベントバッファリングが開始するように制御し、
前記ロールバック制御部は、前記タイミング制御部の制御の下、前記第１のプロセスによる前記イベントの処理が完了すると、前記第１のプロセスから前記第２のプロセスへの稼働中のプロセスの切り替えを行い、
前記ロールバック制御部は、前記イベントバッファリングの開始から前記バッファに格納された前記１つ以上のイベントのすべてを、前記第１のプロセスから切り換えられた前記第２のプロセスに送信し、前記イベントバッファリングを終了するように制御する、通信装置が提供される。
【００２０】
本発明の第２の視点によれば、フローベースのパケット転送用に適合されたスイッチ装置であって、
現在稼働中の第１のスイッチプロセスを第２のスイッチプロセスにロールバックするために前記第２のスイッチプロセスを作成するロールバック制御部と、
前記第１のスイッチプロセスおよび前記第２のスイッチプロセスによって共有される１つ以上の状態を記憶し、前記第２のスイッチプロセスが、前記記憶されている１つ以上の状態を引き継ぐことを可能にする記憶部と、
バッファと、
ロールバックのタイミングを制御するタイミング制御部と、
ネットワークに接続されるように適合されたネットワークインターフェースと、
マッチ条件と前記マッチ条件に対応する受信パケットがディスパッチされるスイッチプロセスとの間の対応関係を定義するディスパッチルールに基づいて、対応するスイッチプロセスに、パケット又はメッセージをディスパッチするディスパッチャと、
を備え、
前記第２のスイッチプロセスを作成した後に、前記ロールバック制御部は、前記第１のスイッチプロセスが、受信したパケットに関連するイベントを処理中であると判断した場合、前記第１のスイッチプロセスが前記イベントを処理している間に受信され、前記ディスパッチャによって前記第１のスイッチプロセスにディスパッチされるべき１つ以上のパケットのすべてを格納するような前記バッファの設定でバッファリングが開始するように制御し、
前記ロールバック制御部は、前記タイミング制御部の制御の下、前記第１のスイッチプロセスによる前記イベントの処理が完了すると、前記第１のスイッチプロセスから前記第２のスイッチプロセスへの稼働中のプロセスの切り替えを行い、
前記ロールバック制御部は、前記バッファリングの開始から前記バッファに格納された前記１つ以上のパケットのすべてを、前記第１のスイッチプロセスから切り換えられた前記第２のスイッチプロセスに送信し、前記バッファリングを終了するように制御する、スイッチ装置が提供される。
【００２１】
本発明の第３の視点によれば、１つ以上のスイッチを制御するコントローラ装置であって、
現在稼働中の第１のコントローラプロセスを第２のコントローラプロセスにロールバックするために前記第２のコントローラプロセスを作成するロールバック制御部と、
前記第１のコントローラプロセスおよび前記第２のコントローラプロセスによって共有される状態を記憶し、前記第２のコントローラプロセスが、前記記憶されている１つ以上の状態を引き継ぐことを可能にする記憶部と、
バッファと、
ロールバックのタイミングを制御するタイミング制御部と、
前記スイッチに接続されるように適合されたネットワークインターフェースと、
マッチ条件と前記マッチ条件に対応する受信パケットがディスパッチされるコントローラプロセスとの間の対応関係を定義するディスパッチルールに基づいて、対応するコントローラプロセスに、受信したパケット又はメッセージをディスパッチするディスパッチャと、
を備え、
前記第２のコントローラプロセスを作成した後に、前記ロールバック制御部は、前記第１のコントローラプロセスが、受信したパケットに関連するイベントを処理中であると判断した場合、前記第１のコントローラプロセスが前記イベントを処理している間に受信され、前記ディスパッチャによって前記第１のコントローラプロセスにディスパッチされるべき１つ以上のパケットのすべてを格納するような前記バッファの設定でバッファリングが開始するように制御し、
前記ロールバック制御部は、前記タイミング制御部の制御の下、前記第１のコントローラプロセスによる前記イベントの処理が完了すると、前記第１のコントローラプロセスから前記第２のコントローラプロセスへの稼働中のプロセスの切り替えを行い、
前記ロールバック制御部は、前記バッファリングの開始から前記バッファに格納された前記１つ以上のパケットのすべてを、前記第１のコントローラプロセスから切り換えられた前記第２のコントローラプロセスに送信し、前記バッファリングを終了するように制御する、コントローラ装置が提供される。
【００２２】
本発明の第４の視点によれば、
フローベースのパケット転送にそれぞれ適合された１つ以上のスイッチと、
前記１つ以上のスイッチを制御するコントローラと、
を備え、
前記スイッチは、
現在稼働中の第１のスイッチプロセスを第２のスイッチプロセスにロールバックするために前記第２のプロセスを作成するロールバック制御部と、
前記第１のスイッチプロセスおよび前記第２のスイッチプロセスによって共有される状態を記憶し、前記第２のスイッチプロセスが、前記記憶されている１つ以上の状態を引き継ぐことを可能にする記憶部と、
バッファと、
ロールバックのタイミングを制御するタイミング制御部と、
ネットワークに接続されるように適合されたネットワークインターフェースと、
マッチ条件と前記マッチ条件に対応する受信パケットがディスパッチされるスイッチプロセスとの間の対応関係を定義するディスパッチルールに基づいて、対応するスイッチプロセスに、受信したパケット又はメッセージをディスパッチするディスパッチャと、
を備え、
前記第２のスイッチプロセスを作成した後に、前記ロールバック制御部は、前記第１のスイッチプロセスが、受信したパケットに関連するイベントを処理中であると判断した場合、前記第１のスイッチプロセスが前記イベントを処理している間に受信され、前記ディスパッチャによって前記第１のスイッチプロセスにディスパッチされるべき１つ以上のパケットのすべてを格納するような前記バッファの設定でバッファリングが開始するように制御し、
前記ロールバック制御部は、前記タイミング制御部の制御の下、前記第１のスイッチプロセスによる前記イベントの処理が完了すると、前記第１のスイッチプロセスから前記第２のスイッチプロセスへの稼働中のプロセスの切り替えを行い、
前記ロールバック制御部は、前記バッファリングの開始から前記バッファに格納された前記１つ以上のパケットのすべてを、前記第１のスイッチプロセスから切り換えられた前記第２のスイッチプロセスに送信し、前記バッファリングを終了するように制御する、通信システムが提供される。
【００２３】
本発明の第５の視点によれば、
現在稼働中の第１のプロセスを第２のプロセスにロールバックするために前記第２のプロセスを作成し、
前記第１のプロセスおよび前記第２のプロセスが記憶部に記憶されている状態を共有し、前記第２のプロセスは、前記記憶部に記憶されている前記１つ以上の状態を引き継ぐことが可能であり、
前記第１のプロセスがイベントを処理している場合、前記第２のプロセスが作成された後、前記ロールバック中に受信された、前記第１のプロセス宛の１つ以上のイベントのすべてをバッファに格納するようにイベントバッファリングを開始し、
前記第１のプロセスによる前記イベントの処理が完了すると、前記第１のプロセスから前記第２のプロセスへ稼働中のプロセスの切り替えを行い、
前記イベントバッファリングの開始から前記バッファに格納された前記１つ以上のイベントのすべてを、前記第１のプロセスから切り換えられた前記第２のプロセスに送信し、前記イベントバッファリングを終了する、ロールバック方法が提供される。
【００２４】
本発明の第６の視点によれば、
現在稼働中の第１のプロセスを第２のプロセスにロールバックするために前記第２のプロセスを作成し、
前記第１のプロセスおよび前記第２のプロセスが記憶部に記憶されている状態を共有し、前記第２のプロセスは、前記記憶部に記憶されている前記１つ以上の状態を引き継ぐことが可能であり、
マッチ条件と前記マッチ条件に対応する受信パケットがディスパッチされる対象プロセスとの間の対応関係を定義するディスパッチルールに基づいて、対応するプロセスに対して受信したパケットをディスパッチし、
前記第２のプロセスが作成された後、前記第１のプロセスが、受信したパケットに関連するイベントを処理中であると判断した場合、前記第１のプロセスが前記イベントを処理している間に受信された、前記第１のプロセスにディスパッチされるべき１つ以上のパケットのすべてをバッファに格納するようにバッファリングを開始し、
前記第１のプロセスによる前記イベントの処理が完了すると、前記第１のプロセスから前記第２のプロセスへ稼働中のプロセスの切り替えを行い、
前記バッファリングの開始から前記バッファに格納された前記１つ以上のパケットのすべてを、前記第１のプロセスから切り換えられた前記第２のプロセスに送信し、前記バッファリングを終了すること、を含む処理をコンピュータに実行させるプログラムが提供される。本発明の第７の視点によれば、本発明の第６の視点によるプログラムが記憶されている、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、又はＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、又はＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  ａｎｄ  Ｅｒａｓａｂｌｅ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ハードディスクドライブ（ＨＤＤ）、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ）又はＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）などの半導体記憶装置のようなコンピュータが読み取り可能な記録媒体または非一時的な記録媒体が提供される。
【００２５】
本発明によれば、安全なネットワーキングを確保するための、プロセスのロールバックにおける不一致の発生を防止することが可能になる。
本発明のさらに他の特徴及び利点は、本発明を実施することが企図されている最良の形態の単なる例示により、本発明の実施形態のみを図示及び説明した添付の図面と併せて以下の詳細な説明から当業者には容易に明らかになるであろう。理解されるように、本発明は、他の異なる実施形態が可能であり、そのいくつかの詳細は、本発明から逸脱することなく、様々な明白な点において変更可能である。従って、図面及び説明は、本質的に例示的であるとみなされるべきであり、限定的ではないとみなされるべきである。
【図面の簡単な説明】
【００２６】
【図１】本発明の第１の実施形態における通信装置の構成を示す図である。
【図２】本発明の第１の実施形態におけるロールバックを示す図である。
【図３Ａ】本発明の第１の実施形態におけるロールバック動作の一例を示すフローチャートである。
【図３Ｂ】図３Ａの動作を示す図である。
【図４】本発明の第２の実施形態におけるコントローラの構成を示す図である。
【図５】本発明の第２の実施形態におけるスイッチの構成を示す図である。
【図６】本発明の第２の実施形態におけるロールバックを示す図である。
【図７】本発明の第２の実施形態のロールバックにおけるイベントバッファリングを示す図である。
【図８】本発明の第２の実施形態におけるロールバック制御部（ハイパーバイザ）の構成を示す図である。
【図９】本発明の第２の実施形態におけるロールバック動作を示す図である。
【図１０】第２の実施形態におけるスイッチのディスパッチテーブルを示す図である。
【図１１】本発明の第３の実施形態におけるコントローラを示す図である。
【図１２】本発明の第３の実施形態におけるスイッチの構成を示す図である。
【図１３】本発明の第３の実施形態におけるテナントベースのネットワークを示す図である。
【図１４Ａ】本発明の実施形態におけるメモリアイソレーションを示す図である。
【図１４Ｂ】ページングを示す図である。
【図１５】サーバコンピュータを示す図である。
【図１６】ＳＤＮアーキテクチャを示す図である。
【発明を実施するための形態】
【００２７】
以下、本発明の実施形態について説明する。
【００２８】
［第１の実施形態］
図１は、第１の実施形態による通信装置（ネットワークノード）を示す図である。図１を参照すると、通信装置１０は、記憶部１３と、ロールバック制御部１５と、バッファ１６と、タイミング制御部１４と、ネットワークインターフェースカード（ＮＩＣ）（ネットワークインターフェースコントローラ）１７とを備えている。
【００２９】
ロールバック制御部１５は、ロールバックされる第１のプロセス１１を、以前に保存されたプロセスイメージではなく、新規に作成された第２のプロセス１２にロールバックする制御を実行するように構成されている。第２のプロセス１２の機能および動作は、第１のプロセス１１の機能および動作と同じである。
【００３０】
本発明の実施形態において、プロセスのロールバックは、ロールバックされる第１のプロセス１１から、新規に作成された第２のプロセス１２への、稼働中のプロセスの切り替えとして実施されてもよい。
【００３１】
ロールバック制御部１５は、第１のプロセス１１から第２のプロセス１２に、稼働中のプロセスを切り替えた後、第１のプロセス１１を終了させる制御を行う。第１のプロセス１１を、以下では、「旧プロセス１１」と表示または称することができる。第１のプロセス１１をロールバックするために新たに作成された第２のプロセス１２を、以下では「新プロセス１２」と表示し、称することができる。
【００３２】
旧プロセス１１と新プロセス１２とは、記憶部１３を共有する。具体的には、旧プロセス１１から新プロセス１２に稼働中のプロセスを切り替えるまで、旧プロセス１１が記憶部１３のネットワーク状態などの状態を読み込み、更新（書き込み）し、新プロセス１２の作成から、旧プロセス１１から新プロセス１２への稼働中プロセスの切り替えまでの期間は、新プロセス１２は、記憶部１３に記憶された状態の読み取りアクセス権のみを有するようにしてもよい。新プロセス１２の作成から、旧プロセス１１から新プロセス１２への切り替えまでの期間中、記憶部１３に格納された状態は、新プロセス１２と旧プロセス１１とで共有することができる。
【００３３】
このように、記憶部１３は、旧プロセス１１により記憶部１３に格納された状態を新プロセス１２に引き継がせるための状態共有メカニズムとして機能する。即ち、旧プロセス１１から新プロセス１２に稼働中のプロセスを切り替える前に、新プロセス１２は記憶部１３に格納されている状態の最新の更新情報を取得することが可能である。旧プロセス１１から新プロセス１２に稼働中のプロセスを切り替えた後、新プロセス１２は、記憶部１３内のネットワーク状態などの状態を読み出し、書き込む（更新）ことができる。
【００３４】
タイミング制御部１４は、ロールバック制御部１５によるロールバック動作のタイミングを制御するように構成されている。タイミング制御部１４は、例えば、トランザクションをアトミックにするために、旧プロセス１１によるイベント処理の完了を待つように制御する。旧プロセス１１から新プロセス１２への稼働中のプロセスの切り替えは、旧プロセス１１によるイベント処理が完了する時点までタイミング制御部１４により延期される。
【００３５】
バッファ１６は、ロールバック制御部１５により有効／無効に制御されるイベントバッファリングの機能を有する。バッファ１６は、ロールバックされる旧プロセス１１がイベントを処理中の場合、ＮＩＣ１７によって受信され、旧プロセス１１を宛先とする、少なくとも１つのイベント（パケット）を格納できる。
【００３６】
より具体的には、新プロセスの作成後、旧プロセス１１が受信したパケットに関連するイベントを処理中の場合、ロールバック制御部１５は、旧プロセス１１が上記イベントを処理している間に受信した、旧プロセス１１宛ての、１つ以上のパケットの全てをバッファ１６に格納するような設定でイベントバッファリングを開始する。バッファ１６は、着信イベント（パケット）をＦＩＦＯ（Ｆｉｒｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ（先入れ先出し））方式で格納し、イベントの着信順序を保持するように構成されてもよい。
【００３７】
上述の通り開始されたイベントバッファリングは、以下のように終了できる。
旧プロセス１１によるイベントの処理が完了すると、タイミング制御部１４の制御の下、ロールバック制御部１５は、旧プロセス１１から新プロセス１２へ稼働中のプロセスの切り替えを行い、ロールバック制御部１５は、イベントバッファリングの開始時から記憶部１３に記憶されている１つ以上のイベントの全てを、旧プロセス１１から切り替えられた新プロセス１２に送信するように制御し、ロールバック制御部１５はバッファ１６を制御してイベントバッファリングを停止させる。その後、ＮＩＣ１７が受信した、旧プロセス１１宛のイベントは、バッファ１６に格納されずに、現在稼働中の新プロセス１２に転送される。
【００３８】
通信装置１０は、図１６を参照して説明したＳＤＮアーキテクチャにおいて、ＳＤＮコントローラ又はネットワーク要素（スイッチ、ロードバランサ、またはファイアウォール）として構成することができるが、これに限定されない。
【００３９】
図１に示す構成は、プロセスのロールバックにおける不一致の発生を防止する。ロールバックにおける不一致は、例えば、ノード間の不一致、または後述のようにノード内の状態と実際の状態との間の不一致を含む。
【００４０】
旧プロセス１１によるイベント処理（例えば、Ｐａｃｋｅｔ−Ｉｎメッセージ）の実行中に、旧プロセス１１が新プロセス１２にロールバックされた場合、旧プロセス１１によるイベント処理は完了せず、そのイベントは失われる。
【００４１】
また、ロールバック中に、プロセスが当該プロセス宛のイベントを受信できない場合、イベント損失が発生することもある。
【００４２】
本発明の実施形態によるイベントバッファリングの仕組みは、イベントの順序を保持し、イベント損失の発生を防止して、ロールバック動作においてイベントの一致を保証する働きをする。
【００４３】
ロールバックの別のタイプの不一致として、状態の不一致が生じる可能性がある。例えば、ネットワーク状態などの状態が、ロールバック動作中に旧プロセス１１により行われた更新を反映していない、最後に保存された状態にロールバックされると、新プロセス１２は、更新を反映していない最後に保存された状態に基づいて処理を実行することになり、誤った処理や誤動作の原因となる。
【００４４】
本発明の実施形態によれば、状態共有メカニズムは、これらの欠点の回避に寄与することができる。ロールバック中に、新プロセス１２が、旧プロセス１１により更新された、記憶部１３内の最新の状態を引き継ぐことを可能にする状態共有メカニズムは、旧プロセス１１の状態と新プロセス１２の状態との間の不一致の発生を防止する役割を果たす。
【００４５】
旧プロセス１１から新プロセス１２に切り替えた後、記憶部１３を用いて旧プロセス１１から状態（ネットワーク状態）を引き継ぐ新プロセス１２は、状態を遅らせて又は徐々に更新してもよい。旧プロセス１１から新プロセス１２に切り替える前に、旧プロセス１１により記憶部１３に記憶され、引き継がれた状態に異常が生じていた場合、その状態は、新プロセス１２によって徐々に復元されてもよい。例えば、新しいフローへの応答として、クリーンな新しい状態が生成された場合、新プロセス１２は、異常の生じた状態をこの新しいネットワーク状態（クリーン）で更新してもよい。新プロセス１２は、旧プロセス１１から引き継いだ状態を、新プロセス１２がその状態を使用する前に更新してもよい。新プロセス１２は、旧プロセス１１から引き継いだ状態を確率的に更新してもよい。乱数（整数）を生成することによって、新プロセス１２は、乱数が所定の範囲内にあるとき、又は乱数が所定の整数に一致するときに旧プロセス１１から引き継いだ状態を更新してもよい。新プロセス１２は、アイドル状態において、旧プロセス１１から引き継いだ状態を更新してもよい。図１において、通信装置１０は、不図示のメモリに格納されたコンピュータプログラムの指示をフェッチし実行することにより処理を行うプロセッサを備えていてもよい。旧プロセス１１及び新プロセス１２はそれぞれ、そのプロセッサ上で動作するプロセスであってもよい。ロールバック制御部１５及びタイミング制御部１４は、プロセッサによって実行されるコンピュータプログラムによって実現されてもよい。通信装置１０は、サーバ仮想化環境を提供するハイパーバイザなどの仮想化メカニズムを備えたサーバとして実現されてもよく、旧プロセス１１及び新プロセス１２は、仮想マシン（ＶＭ）上で動作するように構成されてもよい。
【００４６】
図２は、図１のロールバック動作を模式的に示す図である。記憶部１３の状態（ネットワーク状態など）は、上述の通り旧プロセス１１と新プロセス１２とで共有される。旧プロセス１１によって更新された最新のネットワーク状態は、新プロセス１２の作成後、新プロセス１２によって引き継がれる。旧プロセス１１のプロセスイメージは、新プロセス１２のプロセスイメージへのプロセス切り替えにより、ロールバックされる。仮想メモリにプロセスとして割り当てられたプロセスイメージは、例えば、以下を含んでもよい。
−  プログラムコード（実行される指示）
−  プログラムデータ
−  スタック（ユーザスタックとカーネルスタック）
−  プロセス制御ブロック（プロセスを管理するためにオペレーティングシステムが必要とする情報）。
旧プロセス１１及び新プロセス１２は、冗長構成と見なしてもよく、旧プロセス１１がアクティブなプロセス、新プロセス１２が待機プロセスであるシステムを、新プロセス１２がアクティブなプロセス、旧プロセス１１が待機プロセスになるシステムに切り替える。
【００４７】
図３Ａは、図１のロールバック制御部の動作を示す図である。図３Ｂは、図３Ａのステップを時間順に模式的に示す。
【００４８】
ロールバック制御部１５は、新プロセス１２を作成する（Ｓ１０１）（図３ＢのタイミングＴ０）。
【００４９】
旧プロセス１１と新プロセス１２とで、ネットワーク状態などの状態を共有する（Ｓ１０２）。旧プロセス１１が１つ以上の状態を作成または更新する場合、旧プロセス１１は上記１つ以上の状態を記憶部１３に格納し、新プロセス１２は上記１つ以上の状態を読み出すことができる。
【００５０】
旧プロセス１１が、稼働中のプロセスとしてイベント処理を実行中である場合、ロールバック制御部１５はイベントバッファリングを開始する（Ｓ１０３）（図３ＢのタイミングＴ１）。タイミングＴ１は、タイミングＴ０と同じでもよい。旧プロセス１１宛の、１つ以上の受信パケットは、バッファ１６にバッファリングされる。
【００５１】
ロールバック制御部１５は、タイミング制御部１４からの指示に従って、旧プロセス１１によるイベント処理の完了を待つ（Ｓ１０４）。
【００５２】
旧プロセス１１がイベント処理を完了すると、ロールバック制御部１５は、旧プロセス１１から新プロセス１２に切り替える（Ｓ１０５）（図３ＢのタイミングＴ３）。
【００５３】
ロールバック制御部１５は、イベントバッファリングを終了し、受信したイベントを新プロセス１２に送る（Ｓ１０６）。
【００５４】
図１５は、図１を参照して説明したコンピュータ装置の機能を実現するコンピュータシステムを示す図である。サーバシステムなどのコンピュータシステム３００は、プロセッサ３０１と、プログラムを記憶するランダムアクセスメモリ、ハードディスクドライブ（ＨＤＤ）、ＳＳＤ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）、ＣＤ（Ｃｏｍｐａｃｔ  Ｄｉｓｋ）、ＤＶＤ（Ｄｉｇｉｔａｌ  Ｖｅｒｓａｔｉｌｅ  Ｄｉｓｋ）、又はＥＥＰＲＯＭ（Ｅｌｅｃｔｒｉｃａｌｌｙ  Ｅｒａｓａｂｌｅ  ａｎｄ  Ｐｒｏｇｒａｍｍａｂｌｅ  Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）の少なくとも１つを含むストレージ３０２と、通信インターフェース３０３とを含む。図１のバッファ１６と記憶部１３は、ストレージ３０２により実現されてもよい。プロセッサ３０１は、コンピュータシステム３００を図１の通信装置１０として機能させるために、ロールバック制御部１５と、タイミング制御部１４と、旧プロセス１１と、新プロセス１２との機能を実現する、ストレージ３０２に格納されたプログラムを実行する。
【００５５】
［第２の実施形態］
図４は、第２の実施形態による、ＳＤＮアーキテクチャにおけるコントローラの構成を示す図である。第２の実施形態では、図１の通信装置１０をＳＤＮコントローラに適用する。図４を参照すると、ＳＤＮコントローラ１００は、サーバコンピュータなどのコンピュータシステム上に構成されてもよく、旧コントローラプロセス１０１（第１のコントローラプロセス）と、新コントローラプロセス１０２（第２のコントローラプロセス）と、旧コントローラプロセス１０１と新コントローラプロセス１０２とが共有するネットワーク状態などの状態を記憶する記憶部１０３とを含む。図４において、旧コントローラプロセス１０１、新コントローラプロセス１０２、記憶部１０３、バッファ１０６は、それぞれ、図１の旧プロセス１１、新プロセス１２、記憶部１３、バッファ１６に対応してもよい。タイミング制御部１０４、ハイパーバイザ１０５、ＮＩＣ１０７は、それぞれ、タイミング制御部１４、ロールバック制御部１５、ＮＩＣ１７に対応してもよい。記憶部１０３に記憶され、旧コントローラプロセス１０１と新コントローラプロセス１０２とが共有する状態は、ネットワークトポロジと、フローエントリと、ホスト位置情報とを含むが、これに限定されない。
【００５６】
ＳＤＮコントローラ１００はさらに、仮想マシン（ＶＭ）にハードウェア仮想化を提供するためのサーバ仮想化インフラストラクチャを実現するハイパーバイザ１０５（仮想マシンモニタ）を含む。ハイパーバイザ１０５は、コンピュータソフトウェア、ファームウェア又はハードウェアを含み、ハードウェア資源を制御するように構成されている。これに限定されるものではないが、ハイパーバイザ１０５は、このようなサーバ仮想化への適用において、仮想化ハードウェア資源と、ゲストＯＳと、アプリケーションとを含む仮想マシン（ＶＭ）を制御してもよく、仮想化ハードウェア資源は、例えば、仮想ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、仮想化ストレージと、仮想化ネットワークとを含む。
【００５７】
旧コントローラプロセス１０１及び新コントローラプロセス１０２は、それぞれハイパーバイザ１０５によって作成された仮想マシン（ＶＭ）上で実行される。ハイパーバイザ１０５は、少なくとも１つの仮想ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、仮想ストレージと、仮想ネットワークとを仮想マシンに割り当てる。
【００５８】
仮想マシン上で動作するように構成されたコントローラプロセスは、仮想ＳＤＮコントローラとして機能してもよい。コントローラプロセスは、例えば、スイッチ２００（ＯｐｅｎＦｌｏｗ  Ｓｗｉｔｃｈ：ＯＦＳ）からＰａｃｋｅｔ−Ｉｎメッセージを受信すると、関連するパケットの経路を計算し、経路上の各スイッチ２００に対してフローエントリを生成し、Ｆｌｏｗ−Ｍｏｄメッセージを用いて経路上の各スイッチ２００について生成されたフローエントリを設定する。
【００５９】
ＳＤＮコントローラ１００はさらに、ディスパッチルールテーブル１１０に格納されたディスパッチルールに基づいて、スイッチ２００から受信したパケット又はオープンフローメッセージを対象のコントローラプロセスにディスパッチするディスパッチャ１０８を含む。コントローラプロセスは、ネットワーク制御モジュールのネットワーク制御プロキシとして機能してもよい。この場合、対象のコントローラプロセスを選択するディスパッチャ１０８は、ネットワーク制御のプロキシとして機能する。
【００６０】
ディスパッチルールテーブル１１０のディスパッチルールは、受信パケットのマッチ条件（フロー情報の項目）と、当該マッチ条件に対応する受信パケット又はメッセージのディスパッチ先の対象コントローラプロセスとの対応関係（マッピング）を定義する。ディスパッチャ１０８は、受信したパケットのヘッダフィールド情報と、ディスパッチルールのマッチ条件（フロー情報の項目）を比較し、受信パケットのヘッダフィールド情報が一致するマッチ条件に関連付けられた対象コントローラプロセスに受信パケットをディスパッチする。ディスパッチルールにおいて、対象コントローラプロセスにマッピングされるマッチ条件は、以下を含んでもよい。
宛先または送信元ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレス
宛先または送信元ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレス
ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ）／ＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）宛先または送信元ポート番号、又は
上記の内、少なくとも２つの組み合わせ、又は
パケットを受信したコントローラ１００の物理ポート番号
【００６１】
コントローラプロセスは仮想マシン（ＶＭ）上で動作するため、仮想マシン（ＶＭ）に仮想的に割り当てられた仮想ＩＰアドレス又は仮想ＭＡＣアドレスが使用される。ディスパッチャ１０８は、ディスパッチルールテーブルにおいて、受信したパケットのヘッダフィールド情報を検索し、マッチ条件が受信パケットのヘッダフィールド情報と一致するディスパッチルールが見つかった場合、ディスパッチャ１０８は、受信パケットを対応する対象コントローラプロセスに転送する。マッチ条件が受信パケットのヘッダフィールド情報と一致するディスパッチルールが見つからない場合、ディスパッチャ１０８は、受信パケットを破棄するか、あるいは、例えば、不図示の維持管理端末により、受信パケットのために新しいディスパッチルールを作成するようにしてもよい。
【００６２】
ディスパッチャ１０８は、複数の入力ポート（不図示）および複数の出力ポート（不図示）を含んでもよく、受信したパケットのマッチ条件と当該マッチ条件に対応する受信パケットのディスパッチ先であるコントローラプロセスとの対応関係を定義するディスパッチルールに基づき、自身の入力ポートで受信したパケットを自身の対象出力ポートに転送する。ディスパッチャ１０８は、コントローラを有するハードウェアスイッチによって構成されてもよいし、ソフトウェアによって実現される仮想スイッチによって構成されてもよい。なお、図４において、ディスパッチャ１０８は、ハイパーバイザ１０５の前段に配置されているが、ディスパッチャ１０８が、ハイパーバイザ１０５に制御される仮想スイッチとして構成され、ハイパーバイザ１０５と、仮想マシン上で動作するコントローラプロセスとの間に配置される別の構成もあり得る。ディスパッチャ１０８は、ソケット（Ｕｎｉｘ（登録商標）ソケット、ネットワークソケット）、ＰＩＰＥ、共有メモリなどのプロセス間通信を用いて、パケット又はメッセージを中継してもよい。
【００６３】
ＳＤＮコントローラ１００は、ディスパッチャ１０８に接続されたバッファ１０６をさらに含む。バッファ１０６は、旧コントローラプロセス１０１がロールバック中にイベントの処理を実行している場合、スイッチ２００から受信され、旧コントローラプロセス１０１にディスパッチされる少なくとも１つのイベント（例えば、少なくとも１つのオープンフローメッセージ）を格納する。旧コントローラプロセス１０１が処理中の処理を完了すると、これまでバッファ１０６にバッファリングされていた上記少なくとも１つのイベントが取り出され、ディスパッチャ１０８により新コントローラプロセス１０２にディスパッチされる。バッファ１０６は、ＦＩＦＯ（Ｆｉｒｓｔ−Ｉｎ  Ｆｉｒｓｔ−Ｏｕｔ）メモリを含んでもよい。図４では、バッファ１０６はディスパッチャ１０８に接続されているが、バッファ１０６は、パケットがイベントバッファリングモードでディスパッチされる前に上記パケットを格納するようにディスパッチャ１０８内に構成されてもよい。
【００６４】
ＳＤＮコントローラ１００は、タイミング制御部１０４と、管理制御部１０９とをさらに備える。タイミング制御部１０４は、旧コントローラプロセス１０１がロールバック中にイベントの処理を実行している場合、スイッチ２００から受信したイベントをバッファ１０６にバッファリングするタイミングを制御し、ロールバック時に旧コントローラプロセス１０１から新コントローラプロセス１０２に切り替えるタイミングも制御する。
【００６５】
管理制御部１０９は、ハイパーバイザ１０５を介してコントローラプロセスを管理する。管理制御部１０９は、タイミング制御部１０４と、ハイパーバイザ１０５と、ディスパッチャ１０８とに接続されている。管理制御部１０９は、仮想マシンとコントローラプロセスに対して、例えば、リソース予約や解放などのリソース管理、インスタンシエーション、起動、終了などのライフサイクル管理、スケールアップ／スケールダウン又はスケールイン／スケールアウトなどのパフォーマンス管理を行う。また、管理制御部１０９は、スイッチ２００内の管理制御部に接続されている。
【００６６】
スイッチ２００との間でメッセージを送受信するために、少なくとも１つのスイッチと通信するＮＩＣ１０７が提供される。
【００６７】
また、バッファ１１２を有するノースバウンドＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）ディスパッチャ１１１が提供される。ノースバウンドアプリケーション（図１６の２）は、ノースバウンドＡＰＩを介してノード間のトポロジを操作することができる。ノースバウンドＡＰＩは、スイッチに接続されたホスト情報を参照するためのＡＰＩと、フローエントリの直接操作のためのＡＰＩと、スイッチデバイス情報を参照するためのＡＰＩなどを含んでもよいが、これに限定されるものではない。ノースバウンドＡＰＩディスパッチャ１１１は、ノースバウンドＡＰＩ要求を、不図示のノースバウンドＡＰＩを含むコントローラプロセスにディスパッチする。ノースバウンドＡＰＩは、コントローラプロセスとノースバウンドＡＰＩディスパッチャ１１１との間に配置されてもよい。ノースバウンドＡＰＩディスパッチャ１１１は、ＳＤＮアプリケーションなどＳＤＮコントローラモジュールへのプロキシとして機能してもよい。
【００６８】
バッファ１１２は、旧コントローラプロセス１０１がロールバック中にイベント処理を実行している場合、ＦＩＦＯ方式で旧コントローラプロセス１０１にディスパッチされる、少なくとも１つのノースバウンドＡＰＩ要求を一時的に格納する。旧コントローラプロセス１０１が処理を完了すると、バッファ１１２にバッファリングされていた上記少なくとも１つのノースバウンドＡＰＩ要求は、ノースバウンドＡＰＩディスパッチャ１１１により取り出され、新コントローラプロセス１０２へ転送される。
【００６９】
ハイパーバイザ１０５は、ロールバックを制御する。図１のロールバック制御部１５は、ハイパーバイザ１０５内のコントローラとして実現されてもよい。ロールバックにおいて、ハイパーバイザ１０５が新コントローラプロセス１０２を作成し起動する。記憶部１０３内の状態は、旧コントローラプロセス１０１と新コントローラプロセス１０２とで共有される。状態には、例えば、フローエントリと、ネットワークトポロジと、ホスト位置情報とが含まれるが、これに限定されない。
【００７０】
旧コントローラプロセス１０１がロールバック中にイベントを処理している場合、ディスパッチャ１０８は、スイッチから受信し、旧コントローラプロセス１０１宛に送信されたＰａｃｋｅｔ−Ｉｎメッセージ又はＦｌｏｗ−Ｒｅｍｏｖｅｄメッセージ（スイッチ内のフローエントリのライフサイクルが期限切れしたことをコントローラに通知するためのメッセージ）などのオープンフローメッセージ（イベント）の少なくとも１つの着信パケットをディスパッチせず、上記少なくとも１つの着信パケットを一時的にバッファ１０６に格納する。この場合、ノースバウンドアプリケーションから旧コントローラプロセス１０１宛の少なくとも１つの着信ノースバウンドＡＰＩ要求も、一時的にバッファ１１２に格納される。
【００７１】
タイミング制御部１０４の制御の下、旧コントローラプロセス１０１がイベントの処理を終了すると、ハイパーバイザ１０５は旧コントローラプロセス１０１を終了する。
【００７２】
ディスパッチャ１０８は、バッファ１０６に格納されている上記少なくとも１つのオープンフローメッセージ（イベント）を新コントローラプロセス１０２に転送する。また、バッファ１１２に格納された上記少なくとも１つのノースバウンドＡＰＩ要求も、新コントローラプロセス１０２に転送される。
【００７３】
ディスパッチャ１０８は、パケットのマッチ条件と当該マッチ条件に対応する受信パケットのディスパッチ先であるコントローラプロセスとの対応関係を定義する、ディスパッチルールテーブル１１０内のディスパッチルールの内容を更新する。ディスパッチャ１０８は、ディスパッチルールテーブル１１０において対象コントローラプロセスとして定義されていた旧コントローラプロセス１０１を新コントローラプロセス１０２に変更する。
【００７４】
ハイパーバイザ１０５は、以下のタイミングでコントローラプロセスのロールバックを実行してもよい。
−  コントローラプロセスがスイッチからの要求を処理した後
−  １つの操作を処理した後
−  定期的に、又は
−  ロールバックの契機となる所定のイベントの発生に応答して。ロールバックの契機となるイベントの例は、完全性チェックを用いたコントローラプロセスの異常の検出などである。
【００７５】
図５は、第２の実施形態によるスイッチの構成を示す図である。図５のスイッチ２００は、スイッチ２００（オープンフロースイッチ）に対応する。図５を参照すると、スイッチ２００は、サーバコンピュータ上に構成され、旧スイッチプロセス２０１（第１のスイッチプロセス）と、新スイッチプロセス２０２（第２のスイッチプロセス）と、旧スイッチプロセス２０１と新スイッチプロセス２０２とで共有される状態を記憶する記憶部２０３とを含む。図５において、旧スイッチプロセス２０１、新スイッチプロセス２０２、記憶部２０３、バッファ２０６は、それぞれ、図１の旧プロセス１１、新プロセス１２、記憶部１３、バッファ１６に対応してもよい。タイミング制御部２０４、ハイパーバイザ２０５、ＮＩＣ／パケット転送エンジン２０７のＮＩＣは、それぞれ、タイミング制御部１４、ロールバック制御部１５、ＮＩＣ１７に対応してもよい。記憶部２０３に記憶され、旧スイッチプロセス２０１と新スイッチプロセス２０２とで共有される状態は、フローエントリを含む。
【００７６】
スイッチ２００は、ハイパーバイザ２０５（仮想マシンモニタ）を含む。旧スイッチプロセス２０１と新スイッチプロセス２０２は、ハイパーバイザ２０５によって作成された仮想マシン（ＶＭ）上でそれぞれ実行されてもよい。ハイパーバイザ２０５は、少なくとも１つの仮想ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、仮想ストレージと、仮想ネットワークとを仮想マシンに割り当ててもよい。仮想マシン上で動作するスイッチプロセスは、上述のオープンフロースイッチとして機能する。
【００７７】
スイッチ２００は、（別のスイッチ又はネットワークノードからの）パケット、又は（ＮＩＣ／パケット転送エンジン２０７からの）オープンフローメッセージをディスパッチするディスパッチャ２０８をさらに含む。さらに、ディスパッチャ２０８は、ディスパッチルールテーブル２１０に格納されたディスパッチルールに基づき、コントローラから受信したＰａｃｋｅｔ−ＯｕｔメッセージやＦｌｏｗ−Ｍｏｄメッセージなどのオープンフローメッセージを対象スイッチプロセスにディスパッチする。ディスパッチルールテーブル２１０のディスパッチルールは、マッチ条件（フロー情報の項目）と、上記マッチ条件（フロー情報の項目）に対応する受信パケット又はメッセージのディスパッチ先である対象スイッチプロセスとの対応関係（マッピング）を定義する。ディスパッチャ２０８は、受信したパケットのヘッダフィールド情報と、ディスパッチルールのマッチ条件（フロー情報の項目）を比較し、受信パケットのヘッダフィールド情報が一致するマッチ条件に関連付けられた対象スイッチプロセスに受信パケットをディスパッチする。ディスパッチルールにおいて、対象スイッチプロセスにマッピングされるマッチ条件は、以下を含んでもよい。
宛先または送信元ＩＰ（Ｉｎｔｅｒｎｅｔ  Ｐｒｏｔｏｃｏｌ）アドレス
宛先または送信元ＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）アドレス
ＴＣＰ（Ｔｒａｎｓｍｉｓｓｉｏｎ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ  ）／ＵＤＰ（Ｕｓｅｒ  Ｄａｔａｇｒａｍ  Ｐｒｏｔｏｃｏｌ）宛先または送信元ポート番号、又は
上記の内、少なくとも２つの組み合わせ、又は
パケットを受信したスイッチ２００の物理ポート番号
【００７８】
スイッチプロセスは仮想マシン（ＶＭ）上で動作するため、仮想マシン（ＶＭ）に仮想的に割り当てられた仮想ＩＰアドレス又は仮想ＭＡＣアドレスが使用される。ディスパッチャ２０８は、ディスパッチルールテーブル２１０において、受信したパケットのヘッダフィールド情報を検索し、マッチ条件が受信パケットのヘッダフィールド情報と一致するディスパッチルールが見つかった場合、ディスパッチャ２０８は、受信パケットを、ディスパッチルールにおいて定義されている、対応する対象スイッチプロセスに転送する。なお、図５において、ディスパッチャ２０８は、ハイパーバイザ２０５の前段に配置されているが、ハイパーバイザ２０５が、ディスパッチャ２０８を仮想スイッチなどの仮想ハードウェア資源として提供する構成も採用可能である。ディスパッチャ２０８は、ソケット（Ｕｎｉｘ（登録商標）ソケット、ネットワークソケット）、ＰＩＰＥ、共有メモリなどのプロセス間通信を用いて、パケット又はメッセージを中継してもよい。
【００７９】
ディスパッチャ２０８は、コントローラを有するハードウェアスイッチによって構成されてもよいし、ソフトウェアによって実現される仮想スイッチによって構成されてもよい。なお、図５において、ディスパッチャ２０８は、ＮＩＣ／パケット転送エンジン２０７とハイパーバイザ２０５の間に配置されているが、ディスパッチャ２０８が、ハイパーバイザ２０５に制御される仮想スイッチとして構成され、ハイパーバイザ２０５とコントローラプロセスとの間に配置される別の構成もあり得る。
【００８０】
スイッチ２００は、ディスパッチャ２０８に接続されたバッファ２０６をさらに含む。バッファ２０６は、旧スイッチプロセス２０１がロールバック中にイベントの処理を実行している場合、スイッチから受信され、旧スイッチプロセス２０１にディスパッチされる少なくとも１つのイベント（例えばオープンフローメッセージ）を、ＦＩＦＯ方式でイベント順序を保持するように格納する。旧スイッチプロセス２０１が処理中の処理を完了すると、これまでバッファ２０６にバッファリングされていた上記少なくとも１つのイベントが取り出され、ディスパッチャ２０８により新スイッチプロセス２０２にディスパッチされる。
【００８１】
スイッチ２００は、タイミング制御部２０４と、管理制御部２０９とをさらに備える。タイミング制御部２０４は、旧スイッチプロセス２０１がロールバック中にイベントの処理を実行している場合、スイッチから受信したイベント（パケット）をバッファ２０６にバッファリングするタイミングを制御し、ロールバック時に旧スイッチプロセス２０１から新スイッチプロセス２０２に切り替えるタイミングも制御する。
【００８２】
管理制御部２０９は、ハイパーバイザ２０５を介してコントローラプロセスを管理する。管理制御部２０９は、タイミング制御部２０４と、ハイパーバイザ２０５と、ディスパッチャ２０８とに接続されている。管理制御部２０９は、仮想マシンとコントローラプロセスに対して、例えば、リソース予約や解放などのリソース管理、インスタンシエーション、起動、終了などのライフサイクル管理、スケールアップ／スケールダウン又はスケールイン／スケールアウトなどのパフォーマンス管理を行う。また、管理制御部２０９は、スイッチ内の管理制御部に接続されている。
【００８３】
図５において、ＮＩＣ／パケット転送エンジン２０７は、他のスイッチやＳＤＮコントローラとのメッセージ及びパケットの送受信のため、他のスイッチ及びＳＤＮコントローラと通信する。パケット転送エンジンは、フローエントリに基づくパケットのパケット転送処理に指定されたエンジンである。ＮＩＣは、複数の単一ポートＮＩＣとして、又はマルチポートＮＩＣとして構成することができる。
【００８４】
図１のロールバック制御部１５は、コントローラとしてハイパーバイザ２０５に実装されてもよい。ハイパーバイザ２０５はロールバックを以下のように制御する。
【００８５】
ロールバック処理において、ハイパーバイザ２０５が新スイッチプロセス２０２を作成し開始（起動）する。記憶部２０３内の状態は、旧スイッチプロセス２０１と新スイッチプロセス２０２とで共有される。状態には、例えば、フローエントリが含まれるが、これに限定されない。
【００８６】
旧スイッチプロセス２０１がロールバック中にイベントを処理している場合、ディスパッチャ２０８は、別のスイッチ又はＳＤＮコントローラから受信し、旧スイッチプロセス２０１宛に送信された少なくとも１つの着信オープンフローメッセージ（イベント）を転送せず、上記少なくとも１つの着信オープンフローメッセージ（イベント）を一時的にバッファ２０６に格納する。バッファ２０６には、別のスイッチから転送されたパケットと、ＳＤＮコントローラから送信されたＦｌｏｗ−Ｍｏｄメッセージなどのオープンフローメッセージとが、旧スイッチプロセスによるイベント処理が完了するまで一時的に格納される。
【００８７】
旧スイッチプロセス２０１がイベントの処理を終了すると、タイミング制御部２０４の制御の下、ハイパーバイザ２０５は旧スイッチプロセス２０１を終了する。
【００８８】
ディスパッチャ２０８は、バッファ２０６に格納されている上記少なくとも１つのオープンフローメッセージ（イベント）を新スイッチプロセス２０２に転送する。
【００８９】
ディスパッチャ２０８は、図１０に示す通り、ディスパッチルールテーブル２１０内のディスパッチルールの内容を更新する。ディスパッチャ２０８は、ディスパッチルールテーブル２１０内のディスパッチルールを、宛先ＩＰアドレスＸ→旧スイッチプロセス２０１から、宛先ＩＰアドレスＸ→新スイッチプロセス２０２に変更する。パケットヘッダの宛先ＩＰアドレスフィールドがＸであるパケットが受信されると、当該パケットは新スイッチプロセス２０２にディスパッチされる。図１０を参照すると、スイッチプロセス２０１は、ディスパッチャ２０８により自身にディスパッチされたパケットを受信すると、パケットのヘッダフィールド情報を、スイッチプロセス２０１のフローテーブル２０３のフローエントリと照合する。スイッチプロセス２０１のフローテーブル２０３のフローエントリは、受信したパケットのヘッダフィールド情報と照合されるマッチフィールドと、マッチするパケットの処理を定義するアクションフィールドとを含む。図１０のフローエントリは、受信パケットのヘッダの宛先ＩＰアドレスがＸである場合、スイッチプロセス２０１はアクション１を実行するというルールを定義する。ディスパッチルールテーブル２１０のディスパッチルールにおけるマッチ条件は、受信パケットのヘッダの宛先ＩＰアドレスに限定されないことは勿論である。ディスパッチルールにおけるマッチ条件は、宛先／送信元ＩＰアドレス、宛先／送信元ＭＡＣアドレス、ＴＣＰ／ＵＤＰ宛先または送信元ポート番号、または上記のうち少なくとも２つの項目の組み合わせを含むように構成されてもよい。フローテーブル２０３のフローエントリのマッチフィールドについても同様である。ディスパッチルールのマッチ条件は、パケットを受信したスイッチ２００のポート番号を含んでもよい。ディスパッチャ２０８がＮＩＣ／パケット転送エンジン２０７によって引き渡されたＰａｃｋｅｔ−Ｉｎメッセージを受信した場合、Ｐａｃｋｅｔ−Ｉｎメッセージは最初のパケットを含むため、ディスパッチャ２０８は、最初のパケットのヘッダフィールド情報を参照してＰａｃｋｅｔ−Ｉｎメッセージを対象スイッチプロセスにディスパッチし、対象スイッチプロセスは、Ｐａｃｋｅｔ−Ｉｎメッセージをコントローラに転送する。
【００９０】
ハイパーバイザ２０５は、以下のタイミングでコントローラプロセスのロールバックを実行してもよい。
−  スイッチプロセスがＳＤＮコントローラからのメッセージを処理した後
−  １つの操作を処理した後
−  定期的に、又は
−  ロールバックの契機となる所定のイベントの発生に応答して。ロールバックの契機となるイベントの例は、完全性チェックを用いたスイッチプロセスの異常の検出などである。ハイパーバイザ２０５は、スイッチプロセスが１つ又はＮ個のフローを処理するたびに（Ｎは２以上の所定の整数）、又は、ロールバックの契機となる所定のイベントの発生に応じて、スイッチプロセスのロールバックを実行してもよい。図５のハイパーバイザ２０５の制御の下、仮想マシン上で動作するスイッチプロセスと、図４のハイパーバイザ１０５の制御の下、仮想マシン上で動作するコントローラプロセスは、ハイパーバイザ２０５及びハイパーバイザ１０５が統一ハイパーバイザとして実装された同じサーバコンピュータ上に設けられてもよい。
【００９１】
図６は、図４のコントローラにおけるロールバックを示す図である。イベントの結果をアトミックにするために、ロールバック（旧コントローラプロセス１０１から新コントローラプロセス１０２への切り替え）は、旧コントローラプロセス１０１がイベント処理を終了したときに実行される。また、旧プロセス１１は、旧プロセス１１がイベント処理を完了した後に終了する。図６の例では、オープンフローメッセージ（イベント１）が、旧コントローラプロセス１０１にディスパッチされ、旧コントローラプロセス１１は、オープンフローメッセージのイベント処理の完了と共に応答（２）を返す。イベント処理が完了すると、新しいイベント（３）が新コントローラプロセス１２にディスパッチされる。
【００９２】
図７は、本実施形態によるロールバックにおけるイベントバッファリングを示す図である。ロールバック中のイベント損失を防止するために、イベントバッファリングのためのバッファ１０６が設けられている。イベントバッファリングは、イベントが旧プロセス１１により処理されている間に実行される。
【００９３】
図７の例では、イベント１が旧プロセス１１により処理されている間に受信されたイベント２がバッファ１０６にバッファリングされる。イベント１の処理が完了した後、即ち、旧プロセス１１によるイベント１の処理の応答が出力されると、バッファリングされたイベント２は新プロセス１２に送られる。このようにして、イベントの損失を防ぐことができる。バッファ１０６は、ＦＩＦＯ型バッファとして構成されてもよい。図７のイベントバッファリングの仕組みを、図５を参照して説明したスイッチ２００に適用できるのは勿論である。
【００９４】
図８は、図４のＳＤＮコントローラ１００のハイパーバイザ１０５に実装されたロールバック制御部１０５０の一例を示す図である。図８を参照すると、ロールバック制御部１０５０は、新プロセス作成部１０５１と、プロセス制御部１０５２と、旧プロセス終了部１０５３と、イベントバッファリング開始部１０５４と、イベントバッファリング停止部１０５５とを備える。図５のスイッチ２００のハイパーバイザ２０５は、図８に示す構成と同じように構成されたロールバック制御部を含んでもよい。
【００９５】
図９は、図８のハイパーバイザ１０５に実装されたロールバック制御部の動作を説明するための図である。図９を参照すると、ロールバックが開始されたとき、新プロセス作成部１０５１は、新コントローラプロセス１０２を作成する（Ｓ２０１）。ハイパーバイザ１０５は、システム完全性の測定に基づいて、旧コントローラプロセス１０１の異常の検出時にロールバックを開始するように構成されてもよい。あるいは、ハイパーバイザ１０５は、ＳＤＮコントローラに接続された維持管理端末（不図示）から発行されたコマンドに基づいてロールバックを開始するように構成されてもよい。これに限定されないが、旧コントローラプロセス１０１が現在稼働中のプロセスである一方、新プロセス作成部１０５１は、待機プロセスとして新コントローラプロセス１０２を作成してもよい。
即ち、旧コントローラプロセス１０１がアクティブ状態（実行状態）にある間、新コントローラプロセス１０２は、処理遷移図において待機状態に保たれてもよい。
【００９６】
旧コントローラプロセス１０１と新コントローラプロセス１０２は、ネットワークトポロジ、スイッチのフローエントリ、ホスト位置情報（スイッチのポートに接続されたホストに関する情報）などの状態が格納されている記憶部１０３を共有する（Ｓ２０２）。新コントローラプロセス１０２は、稼働中のプロセスを新コントローラプロセス１０２へ切り替える前に、即ち、新コントローラプロセス１０２の状態が処理状態遷移図のアクティブ状態（実行状態）に遷移する前に、記憶部１０３に記憶された最新の状態を引き継ぐことが可能である。
【００９７】
旧コントローラプロセス１０１がイベント処理を行っていない場合（Ｓ２０３の「Ｎｏ」分岐）、旧プロセス終了部１０５３は旧プロセスを終了し、新コントローラプロセス１０２が稼働中のプロセスとなる。
【００９８】
旧コントローラプロセス１０１がイベント処理中であると判断された場合（Ｓ２０３、「Ｙｅｓ」分岐）、イベントバッファリング開始部１０５４は、イベントバッファリングを開始する（Ｓ２０５）。
【００９９】
タイミング制御部１０４の制御の下、旧コントローラプロセス１０１によるイベント処理の完了を待つ（Ｓ２０６−Ｓ２０７）。
【０１００】
旧コントローラプロセス１０１によるイベント処理が完了すると、旧プロセス終了部１０５３は旧プロセスを終了し、新コントローラプロセス１０２が稼働中のプロセスとなる（Ｓ２０８）。
【０１０１】
イベントバッファリング停止部１０５５は、ディスパッチャ１０８に、イベントバッファリングの開始から受信し、バッファ１０６に格納されていた旧コントローラプロセス１０１宛ての少なくとも１つのイベントを新コントローラプロセス１０２へ送信させる制御を行い、その後イベントバッファリングを停止する（Ｓ２０９）。
【０１０２】
ディスパッチャ１０８は、ディスパッチルールのマッチ条件に関連する対象コントローラプロセスフィールドを、旧コントローラプロセス１０１から新コントローラプロセス１０２に変更する（Ｓ２１０）。これ以降、受信したイベントはディスパッチャ１０８によって新コントローラプロセス１０２にディスパッチされる。
【０１０３】
図５のスイッチ２００のハイパーバイザ２０５は、図９に示す方法と同じ方法で動作するように構成されてもよい。
【０１０４】
［第３の実施形態］
図１１は、第３の実施形態によるＳＤＮコントローラ１００を示す図である。図１１において、ハイパーバイザ１０５は、隔離された環境１２１及び１２２を制御および管理し（隔離された環境１２１及び１２２の作成など）、隔離された環境１２１及び１２２で実行されるコントローラプロセスを管理する（旧コントローラプロセス１０１及び新コントローラプロセス１０２の作成および終了）。ディスパッチャ１０８は、ハイパーバイザ１０５と隔離された環境との間に配置される。図１１では、これに限定されるものではないが、テナント毎にコントローラプロセスが割り当てられているものとする。即ち、例えば、テナントＡとキャリア（通信事業者）との契約に基づいて、少なくとも１つのコントローラプロセスＡがテナントＡに割り当てられる。ディスパッチャ１０８は、テナントのためにネットワークチャネル制御への制御プロキシの役割を果たすオープンフローチャネルプロキシとして機能する。
【０１０５】
ディスパッチャ１０８は、テナントネットワークと対象コントローラプロセスとの対応関係を定義するディスパッチルールテーブルに基づき、テナントＡネットワークに属するスイッチから、テナントＡに割り当てられたコントローラプロセスにオープンフローメッセージをディスパッチする。コントローラプロセスが隔離された環境で実行される以外のＳＤＮコントローラの特徴は、第２の実施形態のＳＤＮコントローラと同様である。
【０１０６】
図１２は、第３の実施形態におけるスイッチを示す図である。ハイパーバイザ２０５は、隔離された環境２２１及び２２２を提供し、隔離された環境２２１及び２２２においてそれぞれ実行されるスイッチプロセス（旧スイッチプロセス２０１、新スイッチプロセス２０２）を作成／終了する制御を行ってもよい。スイッチプロセスは、図５に示すように、テナントごとに割り当てられてもよい。即ち、テナントＡとキャリアとの契約に基づいて、少なくとも１つのスイッチプロセスが、テナントＡなどのテナントネットワークに割り当てられる。
【０１０７】
ディスパッチャ２０８は、ハイパーバイザ２０５を介して、フロー（ＮＩＣ／パケット転送エンジン２０７の１つから受信したパケット）を対応するスイッチプロセス２０１にディスパッチする。また、ディスパッチャ２０８は、スイッチプロセス２０１から受信したパケットを、対応するＮＩＣ／パケット転送エンジン２０７にディスパッチして、上記パケットをネットワークに出力する。スイッチプロセスが隔離された環境で実行される以外のスイッチの特徴は、第２の実施形態におけるスイッチと同様である。
【０１０８】
隔離技術は、隔離された環境でプロセスが実行される技術である。隔離技術では、システム全体に影響を与えないようにマルウェアを動作させる封じ込め環境を提供する。
【０１０９】
図１３は、図１１に示すＳＤＮコントローラを使用するテナントベースのネットワークを示す図である。なお、図１３では、説明の便宜上、３つのスイッチプロセス２００Ａ−２００Ｃが設けられているが、スイッチプロセスの数は勿論３つに限定されず、１以上の任意の整数でよい。
【０１１０】
図１３を参照すると、例えば、マルウェア１２４による被害が隔離された環境１２１Ｃに封じ込められているとする。即ち、コントローラプロセス１０１Ｃがマルウェア１２４により侵害されたとしても、マルウェア１２４は隔離された環境１２１Ｃ及びテナントＣのネットワークに封じ込められており、他のフロー又はテナントネットワークＡおよびＢに影響を及ぼすことはできない。この場合、コントローラプロセス１０１Ｃは、上記実施形態で説明した動作に応じて、新コントローラプロセス１０２Ｃにロールバックされる。
【０１１１】
以下、本実施形態による隔離された環境について説明する。
【０１１２】
本実施形態では、これに限定されないが、ハイパーバイザ１０５がメモリアイソレーションを提供する。隔離された環境１２１Ａのコントローラプロセス１０１Ａに割り当てられたメモリ領域（隔離された領域）は、他の隔離された環境１２１Ｂ及び１２１Ｃの他のコントローラプロセス１０１Ｂ及び１０１Ｃに割り当てられた他のメモリ領域（隔離された領域）から隔離されており、コントローラプロセスおよびＯＳによって共有される共有領域を除いて、ＯＳ／ハイパーバイザ又はデバイスドライバ（不図示）に割り当てられたメモリ領域からも隔離されている。
【０１１３】
図１４Ａは、ハイパーバイザ又はハードウェアベースのメモリ保護の例を示す図である。図１４Ａに示すように、プロセス４１１、４１２にそれぞれ割り当てられた隔離された領域４２１及び４２２は、メモリ４２０内の別々のメモリ領域である。ＯＳ（ハイパーバイザ）に割り当てられたＯＳ／ハイパーバイザ領域４２３は、プロセス４１１及び４１２に割り当てられた隔離された領域４２１及び４２２とは別であり、したがって、ＯＳ（ハイパーバイザ）は、プロセス４１１、４１２から保護されている。プロセス４１１及び４１２によってアドレス指定されるメモリ空間は別々であるので、プロセス４１１及び４１２のそれぞれは、他のプロセスの隔離された領域へのメモリアクセスを有することができない。
【０１１４】
これに限定されないが、ハイパーバイザやハードウェアベースのＭＭＵ（Ｍｅｍｏｒｙ  Ｍａｎａｇｅｍｅｎｔ  Ｕｎｉｔ）は、プロセスのメモリ空間のベースアドレスが設定されたリロケーションレジスタ（不図示）を用いて、各プロセスの論理（仮想）アドレスから物理アドレスへのアドレス変換を行ってもよい。リロケーションレジスタのベースアドレスと論理アドレスを加算して物理アドレスが生成される。また、ＭＭＵは、生成された物理アドレスが、プロセスのベースアドレスとリミットアドレスによって定義された範囲内にあるか否かチェックする。これはメモリ保護の仕組みとして機能する。ＭＭＵは、故障処理によるメモリアクセス違反の発生を検出すると（例えば、プロセスがアクセス権を持たないメモリ空間へのアクセス、又は、ベースアドレスにより定義された範囲やプロセスに割り当てられた制限外のアクセスを検出した場合）、故障処理は、例外処理によりアドレス指定エラーを通知されるか、アドレス指定エラーの通知で中断される。
【０１１５】
ＭＭＵベースのメモリ保護は、図１４Ｂに示すページテーブルによって実現されてもよい。なお、ＭＭＵは、ページベースのＭＭＵに限定されず、例えば、セグメントベースのメモリ保護が採用されてもよい。ページは固定長の連続ブロックである（例えば、４ＫＢ（Ｋｉｌｏ  Ｂｙｔｅｓ））。プロセスから発行される論理アドレス（仮想アドレス）４３０は、ページ番号フィールド（ｎ−ｍビット）及びオフセットフィールド（ｍビット）を含む。この場合、ページサイズは２＾ｍであり、＾はべき乗演算子を表し、プロセスのメモリアドレス空間は２＾ｎである。論理アドレス４３０のページ番号Ｘ（上位ｎ−ｍビット）が抽出され、インデックス（ページエントリ）としてページテーブル４３１に供給される。ページテーブル４３１のＸ番目のエントリに格納されている値Ｚ（ｐビット）が、ページテーブル４３１から読み出される。即ち、ページテーブル４３１は、ＸからＺへのページ変換を行う。一般的に、Ｚのビット長ｐはＸのビット長ｐよりも長い。Ｚは、上位ビットとして、論理アドレス４３０の下位ｍビットＹと組み合わされ、メモリ（マシンメモリ）４３３に供給する物理アドレス４３２が生成される。この場合、メモリ４３３のＺページのオフセットアドレスＹがアクセスされる。
【０１１６】
図１１乃至図１３を参照すると、ハイパーバイザ１０５又は２０５は、それぞれのメモリ領域に、各スイッチプロセスのページテーブルを保持するように構成されてもよく、これにより、プロセスがページ変換を改ざんすることが防止される。スイッチプロセス及びＯＳ／ハイパーバイザによって共有される共有メモリ領域に対して、ＯＳ／ハイパーバイザのみが共有領域への書き込み操作を実行することができるように、アクセス制御情報に基づいて、スイッチプロセスから共有領域への読み取り／書き込みアクセスを制御するアクセスコントローラが設けられてもよい。
【０１１７】
ハイパーバイザ１０５及び２０５は、コンピュータソフトウェア、ファームウェア又はハードウェアを含み、ハードウェア資源を制御するように構成されてもよい。これに限定されるものではないが、ハイパーバイザ１０５及び２０５は、サーバ仮想化への適用において、仮想化ハードウェア資源と、ゲストＯＳと、アプリケーションとを含む仮想マシン（ＶＭ）を制御してもよく、仮想化ハードウェア資源は、例えば、仮想ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、仮想化ストレージと、仮想化ネットワークとを含む。
【０１１８】
上述した実施形態では、仮想マシン上で動作するプロセスをハイパーバイザが制御する構成について説明したが、実施形態の概念は、ハイパーバイザやサーバ仮想化を使用しないプロセッサ上で動作するプロセスに適用してもよい。また、上記実施形態では、隔離された環境で仮想マシン上のプロセスの実行をハイパーバイザによって制御する構成について説明したが、実施形態の概念は、ハイパーバイザを使用しないメモリアイソレーションなどにより、隔離された環境をプロセスへ提供できるように構成されたプロセッサ上で動作するプロセスに適用してもよい。
【０１１９】
また、上記実施形態では、スイッチやコントローラへの適用例について説明したが、本発明の適用はオープンフローネットワークに限定されないことは勿論である。
【０１２０】
上記の特許文献１−３および非特許文献１−３の各開示を、本書に引用をもって繰り込むものとする。本発明の全開示（請求の範囲を含む）の枠内において、さらにその基本的技術思想に基づいて、実施形態ないし実施例の変更・調整が可能である。また、本発明の請求の範囲内において種々の開示要素（各補足の各要素、各例の各要素、各図面の各要素等を含む）の多様な組み合わせ、ないし選択が可能である。即ち、本発明は、請求の範囲を含む全開示、技術的思想にしたがって当業者であればなし得るであろう各種変形、修正を含むことは勿論である。
【符号の説明】
【０１２１】
１  ＳＤＮコントローラ
２  ＳＤＮアプリケーション
３  ネットワーク要素
４  ＳＤＮノースバウンドインターフェース
５  ＳＤＮサウスバウンドインターフェース
１０  通信装置（ノード）
１１  旧プロセス（第１のプロセス）
１２  新プロセス（第２のプロセス）
１３  記憶部（共有される状態）
１４  タイミング制御部
１５  ロールバック制御部
１６  バッファ
１７  ＮＩＣ（ネットワークインターフェースカード）
１００  ＳＤＮコントローラ
１０１、１０１Ａ、１０１Ｂ、１０１Ｃ  旧コントローラプロセス（第１のコントローラプロセス）
１０２、１０２Ｃ  新コントローラプロセス（第２のコントローラプロセス）
１０３  記憶部
１０４  タイミング制御部
１０５  ハイパーバイザ
１０６  バッファ
１０７  ＮＩＣ
１０８  ディスパッチャ
１０９  管理制御部
１１０  ディスパッチルールテーブル
１１１  ノースバウンドＡＰＩディスパッチャ
１１２  バッファ
１２１、１２１Ａ、１２１Ｂ、１２１Ｃ、１２２  隔離された環境
１２４  マルウェア
２００  スイッチ
２０１  旧スイッチプロセス（第１のスイッチプロセス）
２０２  新スイッチプロセス（第２のスイッチプロセス）
２０３  記憶部
２０４  タイミング制御部
２０５  ハイパーバイザ
２０６  バッファ
２０７  ＮＩＣ／パケット転送エンジン
２０８  ディスパッチャ
２０９  管理制御部
２１０  ディスパッチルールテーブル
２２１、２２２  隔離された環境
３００  コンピュータシステム
３０１  プロセッサ
３０２  ストレージ（メモリ）
３０３  通信インターフェース
４１１  プロセス（プロセス１）
４１２  プロセス（プロセス２）
４２０  メモリ
４２１  隔離された領域（隔離された領域１）
４２２  隔離された領域（隔離された領域２）
４２３  ＯＳ／ハイパーバイザ領域
４３０  論理アドレス（仮想アドレス）
４３１  ページテーブル
４３２  物理アドレス
４３３  メモリ
１０５０  ロールバック制御部
１０５１  新プロセス作成部
１０５２  プロセス制御部
１０５３  旧プロセス終了部
１０５４  イベントバッファリング開始部
１０５５  イベントバッファリング停止部
【図１】
2019522436.tif 000003
【図２】
2019522436.tif 000004
【図３Ａ】
2019522436.tif 000005
【図３Ｂ】
2019522436.tif 000006
【図４】
2019522436.tif 000007
【図５】
2019522436.tif 000008
【図６】
2019522436.tif 000009
【図７】
2019522436.tif 000010
【図８】
2019522436.tif 000011
【図９】
2019522436.tif 000012
【図１０】
2019522436.tif 000013
【図１１】
2019522436.tif 000014
【図１２】
2019522436.tif 000015
【図１３】
2019522436.tif 000016
【図１４Ａ】
2019522436.tif 000017
【図１４Ｂ】
2019522436.tif 000018
【図１５】
2019522436.tif 000019
【図１６】
2019522436.tif 000020
【国際調査報告】
2019522436.tif 000021
2019522436.tif 000022