JP4507875B2 - 多重化装置及びレガシーデバイス多重化方法 - Google Patents

多重化装置及びレガシーデバイス多重化方法 Download PDF

Info

Publication number
JP4507875B2
JP4507875B2 JP2004370255A JP2004370255A JP4507875B2 JP 4507875 B2 JP4507875 B2 JP 4507875B2 JP 2004370255 A JP2004370255 A JP 2004370255A JP 2004370255 A JP2004370255 A JP 2004370255A JP 4507875 B2 JP4507875 B2 JP 4507875B2
Authority
JP
Japan
Prior art keywords
response
legacy device
request
pseudo
cpu
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
JP2004370255A
Other languages
English (en)
Other versions
JP2006178688A (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.)
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 JP2004370255A priority Critical patent/JP4507875B2/ja
Priority to CA002531269A priority patent/CA2531269A1/en
Priority to US11/311,283 priority patent/US7668837B2/en
Priority to EP05112591A priority patent/EP1691295A2/en
Priority to AU2005246988A priority patent/AU2005246988A1/en
Priority to CNA2005101338196A priority patent/CN1794188A/zh
Publication of JP2006178688A publication Critical patent/JP2006178688A/ja
Application granted granted Critical
Publication of JP4507875B2 publication Critical patent/JP4507875B2/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
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • G06F13/385Information transfer, e.g. on bus using universal interface adapter for adaptation of a particular data processing system to different peripheral devices
    • 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/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1629Error detection by comparing the output of redundant processing systems
    • G06F11/1633Error detection by comparing the output of redundant processing systems using mutual exchange of the output between the redundant processing components
    • 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/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1629Error detection by comparing the output of redundant processing systems
    • G06F11/165Error detection by comparing the output of redundant processing systems with continued operation after detection of the error
    • 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/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • 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/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant

Description

本発明は、多重化装置及びレガシーデバイス多重化方法に関し、特に擬似レガシーデバイスを用いてレガシーデバイスを多重化する多重化装置及びレガシーデバイス多重化方法に関する。
近年、コンピュータシステムのオープン化が甚だしく進展している。従来は専用オペレーティングシステムと専用ハードウェアにより構築されてきた多重化システムも、汎用オペレーティングシステムと汎用ハードウェアにより構築されるようになりつつある。
しかし、汎用オペレーティングシステムは必ずしも多重化システムを意識して設計されていない。そのため、多重化システムを構築する際にはいくつかの問題が発生する。このうち、特に問題となるのがレガシーデバイスの多重化方法である。レガシーデバイスは、デバイスのアドレスが固定されており、システム内に1つしか存在しないことが前提となっている。そのため、オペレーティングシステムはレガシーデバイスの障害を検出すると、以降の動作を停止させてしまう場合もある。従って、多重化システムではレガシーデバイスに障害が発生した場合でも、その障害をオペレーティングシステムに気付かれないようにしなければならない。
従来は、レガシーデバイスのフェイルオーバを実現する方法として、レガシーデバイスに対するアクセスを行っているオペレーティングシステム(以下「OS」と記す)のモジュールを、他のモジュールに置き換える方法が用いられてきた。この方法では、置き換えられたモジュールが、OSからレガシーデバイスに対して発行されるリクエストをトラップする。これにより、レガシーデバイスから不正なレスポンスが返却された場合にも、そのレスポンスをオペレーティングシステムに通知することなく処理を継続することが出来る。しかし、この方法にはいくつかの問題点がある。
1つ目の問題点は、通常、OSのベンダーはソースコードを公開していないため、モジュールを置き換える為にはOSのベンダーからソースコードの提供を受ける必要がある点である。従って、ソースコードの提供を受けることの出来ないOSには対応することが出来ない。すなわち、フェイルオーバを実現できるオペレーティングシステムに制限が生じていた。
2つ目の問題点としては、OSのモジュールを置き換えることにより、以降の保守性を著しく低下させる点である。オペレーティングシステムのベンダーは、出荷後に発見されたセキュリティホールに対するセキュリティパッチ等を随時リリースする。しかし、パッチを適用する前に、これらのパッチが置き換えられたモジュールに与える影響を考慮する必要がある。そのため、ユーザ側でのパッチ適用が困難になる。すなわち、オペレーティングシステムのモジュールを変更することにより、以降の保守性を大幅に低下させていた。
関連する技術として特開平11−232206号公報に入出力制御回路が開示されている。この入出力制御回路は、マイクロプロセッサと入出力回路との間に位置し、上記マイクロプロセッサと上記入出力回路との間で行われる情報の伝達を制御する。ここでマイクロプロセッサは、メモリ制御線を介して所定のアクセスタイミングでアクセス動作を完了するメモリをアクセスする。この入出力制御回路は、(a)メモリインタフェース部、(b)エミュレート部を備えることを特徴とする。メモリインタフェース部は、上記メモリ制御線に接続され、上記メモリ制御線より上記マイクロプロセッサから出力されるアクセス要求を入力する。エミュレート部は、上記メモリインタフェース部より入力したアクセス要求に対して、上記所定のアクセスタイミングと同じアクセスタイミングで上記マイクロプロセッサに応答を行う。
関連する技術として特開平9−146853号公報に二重化計算機及びその障害系復旧方法が開示されている。この二重化計算機は、二重化した処理装置(CPU)、二重化した入出力装置(I/O)、これらを互いに接続する二重化したシステムバス、I/Oバスからなる。二重化したCPUは同期動作する。二重化したI/Oは各々非同期に動作する。一方の系のCPU又はI/Oに障害が発生した時は他系のCPU及びI/Oが稼働状態を継続する。障害が発生した系のCPU及びI/Oの保守交換、再組込みが可能である。二重化計算機は、二重化計算機のそれぞれの系が自系の状態を記憶する状態記憶手段と、自系CPUと自系I/O又は他系I/Oとの接続を選択するI/Oバス接続選択手段を備える。保守交換時は各系において自系CPUと自系I/Oのみの接続が選択される。
特開平11−232206号 特開平9−146853号
従って、本発明の目的は、オペレーティングシステムのモジュールを変更することなく、レガシーデバイスの多重化を実施することが可能な多重化装置及びレガシーデバイス多重化方法を提供することにある。
また、本発明の他の目的は、オペレーティングシステムのモジュールを変更することなく、タイマーのフェイルオーバを実施することが可能な多重化装置及びレガシーデバイス多重化方法を提供することにある。
以下に、発明を実施するための最良の形態で使用される番号・符号を用いて、課題を解決するための手段を説明する。これらの番号・符号は、特許請求の範囲の記載と発明を実施するための最良の形態との対応関係を明らかにするために括弧付きで付加されたものである。ただし、それらの番号・符号を、特許請求の範囲に記載されている発明の技術的範囲の解釈に用いてはならない。
従って、上記課題を解決するために、本発明の多重化装置は、複数のシステム(10、20)を具備する。複数のシステム(10、20)の各々(10)は、CPU(1000)と、CPU(1000)と通信可能に接続された擬似レガシーデバイス(1300)と、擬似レガシーデバイス(1300)と通信可能に接続されたレガシーデバイス(1600)とを備える。擬似レガシーデバイス(1300)は、リクエストバッファ(1303)と、擬似動作部(1304)とを含む。リクエストバッファ(1303)は、CPU(1000)が擬似レガシーデバイス(1300)を介してレガシーデバイス(1600)へリクエストを送信するとき、そのリクエストを記憶する。擬似動作部(1304)は、そのリクエストに基づいてレガシーデバイス(1600)に関するエミュレーションを実行して、そのエミュレーション結果としてのレガシーデバイス(1600)の内部状態を記憶する。
リクエストに対してエミュレーションを行い内部状態を保持することで、フェイルオーバを行う際に必要となる情報を常に保持し、更新することができる。これにより、オペレーティングシステムのモジュールを変更することなく、レガシーデバイスの多重化を実施することが可能となる。
上記の多重化装置において、擬似レガシーデバイス(1300)は、レスポンスバッファ(1305)と、比較エラー検出部(1306)と、動作部(1309+1307)とを更に含むことが好ましい。その場合、レスポンスバッファ(1305)は、レガシーデバイス(1600)からのレスポンスを記憶する。比較エラー検出部(1306)は、擬似動作部(1304)から出力されたそのエミュレーションにより得られるそのリクエストに対するレガシーデバイス(1600)の期待値と、レスポンスバッファ(1305)から出力されたそのレスポンスとを比較する。動作部(1309+1307)は、その比較結果に基づいて、その期待値とそのレスポンスとが一致しない場合、その期待値をレスポンスとしてCPU(1000)へ出力する。
リクエストと期待値とが一致しない場合、障害が発生していることになるが、期待値をレスポンスとして返すことにより、オペレーティングシステムにレガシーデバイスの障害を通知することなく(システムを中断させること無く)、処理を一時的に継続することができる。
上記の多重化装置において、受信した割込み通知に基づいて、CPU(1000)へ割込みを出力する割込みコントローラ(1400)を更に備えることが好ましい。その場合、動作部(1309+1307)は、その比較結果に基づいて、その期待値とそのレスポンスとが一致しない場合、割込みコントローラ(1400)へ割込み通知を行う。
アクセス対象となるレガシーデバイスの障害を検出したとき、割込みを発生させることでレガシーデバイスのフェイルオーバを実現することができる。
上記の多重化装置において、擬似レガシーデバイス(1300)は、レスポンスバッファ(1305)と、タイムアウト検出部(1308)と、動作部(1309+1307)とを更に含むことが好ましい。その場合、レスポンスバッファ(1305)は、レガシーデバイス(1600)からのレスポンスを記憶する。タイムアウト検出部(1308)は、そのリクエストをリクエストバッファ(1303)で受信してから予め設定された時間以内に、そのレスポンスをレスポンスバッファ(1305)受信できないタイムアウトを検出する。動作部(1309+1307)は、そのタイムアウトに基づいて、擬似動作部(1304)から出力されたそのエミュレーションにより得られるそのリクエストに対するレガシーデバイス(1600)の期待値を、レスポンスとしてCPU(1000)へ出力する。
タイムアウトが発生している場合、障害が発生していることになるが、期待値をレスポンスとして返すことにより、オペレーティングシステムにレガシーデバイスの障害を通知することなく(システムを中断させること無く)、処理を一時的に継続することができる。
上記の多重化装置において、受信した割込み通知に基づいて、CPU(1000)へ割込みを出力する割込みコントローラ(1400)を更に備えることが好ましい。擬似レガシーデバイス(1300)は、レスポンスバッファ(1305)と、比較エラー検出部(1306)とを更に含むことが好ましい。その場合、レスポンスバッファ(1305)は、レガシーデバイス(1600)からのレスポンスを記憶する。比較エラー検出部(1306)は、擬似動作部(1304)から出力されたそのエミュレーションにより得られるそのリクエストに対するレガシーデバイス(1600)の期待値と、レスポンスバッファ(1305)から出力されたそのレスポンスとを比較する。動作部(1309+1307)は、その比較結果に基づいて、その期待値とそのレスポンスとが一致しない場合、割込みコントローラ(1400)へ割込み通知を行う。
アクセス対象となるレガシーデバイスの障害を検出したとき、割込みを発生させることでレガシーデバイスのフェイルオーバを実現することができる。
上記の多重化装置において、擬似レガシーデバイス(1300)は、動作部(1309+1307)は、そのタイムアウトに基づいて、割込みコントローラ(1400)へ割込み通知を行うことが好ましい。
アクセス対象となるレガシーデバイスの障害を検出したとき、割込みを発生させることでレガシーデバイスのフェイルオーバを実現することができる。
上記の多重化装置において、レガシーデバイス(1600)は、タイマー(3600)である。擬似レガシーデバイス(1300)は、擬似タイマー(3300)であることが好ましい。
アクセス対象となるタイマーの障害を検出した場合には、オペレーティングシステムに透過なシステム管理割込みを発行し、以降では擬似タイマーが擬似レスポンスを返す。システム管理割込みのハンドラは、擬似タイマーに格納されたフェイルオーバ元のタイマーの状態を元に、フェイルオーバ先のタイマーの設定を行うことにより、オペレーティングシステムにタイマーの障害を感知させること無く、処理を継続させることが出来る。
上記課題を解決するために、本発明の多重化装置におけるレガシーデバイス多重化方法は、(a)CPU(1000)が擬似レガシーデバイス(1300)を介してレガシーデバイス(1600)へリクエストを送信するとき、そのリクエストを記憶するステップと、(b)そのリクエストに基づいてレガシーデバイス(1600)に関するエミュレーションを実行するステップと、(c)そのエミュレーション結果としてのレガシーデバイス(1600)の内部状態を記憶するステップとを具備する。ここで、多重化装置は、複数のシステム(10、20)を備える。複数のシステム(10、20)の各々(10)は、CPU(1000)と、CPU(1000)と通信可能に接続された擬似レガシーデバイス(1300)と、擬似レガシーデバイス(1300)と通信可能に接続されたレガシーデバイス(1600)とを含む。
上記の多重化装置におけるレガシーデバイス多重化方法において、(d)レガシーデバイス(1600)からのレスポンスを記憶するステップと、(e)そのエミュレーションにより得られるそのリクエストに対するレガシーデバイス(1600)の期待値と、記憶されたそのレスポンスとを比較するステップと、(f)その比較結果に基づいて、その期待値とそのレスポンスとが一致しない場合、その期待値をレスポンスとしてCPU(1000)へ出力するステップとを更に具備する。
上記のレガシーデバイス多重化方法において、(g)その比較結果に基づいて、その期待値とそのレスポンスとが一致しない場合、割込みコントローラ(1400)へ割込み通知を行うステップを更に具備する。
上記のレガシーデバイス多重化方法において、(h)そのリクエストを記憶してから予め設定された時間以内に、レガシーデバイス(1600)からのレスポンスを受信できないタイムアウトを検出するステップと、(i)そのタイムアウトに基づいて、そのエミュレーションにより得られるそのリクエストに対するレガシーデバイス(1600)の期待値を、レスポンスとしてCPU(1000)へ出力するステップとを更に具備する。
上記のレガシーデバイス多重化方法において、(j)レガシーデバイス(1600)からのレスポンスを記憶するステップと、(k)そのエミュレーションにより得られるそのリクエストに対するレガシーデバイス(1600)の期待値と、記憶されたそのレスポンスとを比較するステップと、(l)その比較結果に基づいて、その期待値とそのレスポンスとが一致しない場合、割込みコントローラ(1400)へ割込み通知を行うステップとを更に具備する。
上記のレガシーデバイス多重化方法において、(m)そのタイムアウトに基づいて、割込みコントローラ(1400)へ割込み通知を行うステップを更に具備する。
上記のレガシーデバイス多重化方法において、レガシーデバイス(1600)は、タイマー(3600)である。擬似レガシーデバイス(1300)は、擬似タイマー(3300)である。
本発明により、オペレーティングシステムのモジュールを変更することなく、レガシーデバイスの多重化を実施することができる。オペレーティングシステムのモジュールを変更することなく、タイマーのフェイルオーバを実施することが可能となる。
(第1の実施の形態)
本発明の多重化装置及びレガシーデバイス多重化方法の第1の実施の形態について、添付図面を参照して説明する。
まず、本発明の多重化装置の第1の実施の形態の構成について説明する。
図1は、本発明の多重化装置の第1の実施の形態の構成を示すブロック図である。多重化装置は、第1システム10及び第2システム20を具備し、二重化(多重化の一例)されたコンピュータシステムに例示される。第1システム10は、CPU1000、メモリコントローラ1100、メモリ1200、擬似レガシーデバイス1300、割込みコントローラ1400、I/Oコントローラ1500、レガシーデバイス1600を備える。同様に、第2システム20は、CPU2000、メモリコントローラ2100、メモリ2200、擬似レガシーデバイス2300、割込みコントローラ2400、I/Oコントローラ2500、レガシーデバイス2600を備える。
ここでは、ロックステップ方式による多重化装置を基本として説明する。すなわち、図1においてCPU1000とCPU2000、メモリコントローラ1100とメモリコントローラ2100、メモリ1200とメモリ2200、擬似レガシーデバイス1300と擬似レガシーデバイス2300、割込みコントローラ1400と割込みコントローラ2400はロックステップ動作を行っている。レガシーデバイス1600とレガシーデバイス2600は、どちらか一方がアクティブ状態で動作しており、他方はスタンバイ状態で待機している。以下、第1システム10について説明するが、第2システム20についても同様である(ただし、符号は2000番台)。
通常動作時には、CPU1000では、オペレーティングシステム(以下「OS」と記す)が動作している。OSは、メモリ1200、I/Oコントローラ1500、I/Oコントローラ2500配下のI/Oデバイスにアクセスを行う。また、システム管理割込み(SMI)が通知されると、CPU1000は、しばらく後にBIOS(図示されず)内部のシステム管理割込みハンドラに動作を切り替える。システム管理割込みハンドラの処理が終わると、CPU1000は、OSに動作を切り替える。
メモリコントローラ1100は、CPU1000で動作しているOS又はBIOSからレガシーデバイスに対するリクエストが発行された場合、そのリクエストを擬似レガシーデバイス1300に対して送信する。そして、そのリクエストに対するレスポンスを擬似レガシーデバイス1300から受信する。また、レガシーデバイス1600以外に対するリクエストの場合には、そのリクエストをI/Oコントローラ1500に対して送信する。そして、そのリクエストに対するレスポンスをI/Oコントローラ1500から受信する。
擬似レガシーデバイス1300は、上位I/F部1301、下位I/F部1302、リクエストバッファ1303、擬似動作部1304、レスポンスバッファ1305、比較エラー検出部1306、レスポンスセレクタ1307、タイムアウト検出部1308、動作制御部1309を備える。
上位I/F部1301は、レガシーデバイス1600に対するリクエストを受信し、そのリクエストをリクエストバッファ1303に送信する。また、レスポンスセレクタ1307経由でリクエストに対応するレスポンスを受信して、メモリコントローラ1100へ送信する。
リクエストバッファ1303は、上位I/F部1301から送信されてきたリクエストを保持する。それとともに、下位I/F部1302に対してそのリクエストを送信する。
下位I/F部1302は、リクエストバッファ1303から送信されたリクエストをI/Oコントローラ1500に送信する。それと共に、I/Oコントローラ1500からのレスポンスを受信し、受信したレスポンスをレスポンスバッファ1305に受け渡す。
レスポンスバッファ1305は、I/Oコントローラ1500から送信されたレスポンスを受け取ると、レスポンスを受信したことを擬似動作部1304に通知する。
擬似動作部1304は、レスポンスバッファ1305からレスポンスを受信したことを伝えられると、そのレスポンスに対応するリクエストをリクエストバッファ1303から取得する。そして、擬似動作部1304は、取得したリクエストに基づいて、レガシーデバイス1600の内部状態をエミュレーションにより把握し、その内部状態を格納する(更新する)。それと共に、取得したリクエストに対するレスポンスの期待値をエミュレーションにより生成する。擬似動作部1304は、その期待値を比較エラー検出部1306に通知する。この際、取り出したリクエストはリクエストバッファ1303から削除する。
比較エラー検出部1306は、擬似動作部1304により生成された期待値とレガシーデバイスから受信したレスポンスとを比較し、不一致が発生していないかどうか確認する。不一致が発生した場合には、不一致が発生したことを動作制御部1309に通知する。
タイムアウト検出部1308は、リクエストバッファ1303とレスポンスバッファ1305を監視し、一定時間以上レスポンスが返ってこないリクエストを検出すると、動作制御部1309に通知を行う。
動作制御部1309は、比較エラー検出部1306と、タイムアウト検出部1308からの通知に基づいて、レガシーデバイス1600に障害が発生したかどうかを判断し、動作モードの制御を行う。また、レガシーデバイスに障害が発生した場合には、割込みコントローラ1400に対して通知を行う。
レスポンスセレクタ1307は、動作制御部1309の指示に基づいて、擬似動作部1304のレスポンス及びレスポンスバッファ1304のレスポンスのいずれかを上位I/F部1301へ出力する。
I/Oコントローラ1500は、CPU1000又は擬似レガシーデバイス1300により発行されたリクエストを、レガシーデバイス1600又はレガシーデバイス2600のうち、アクティブ状態にある側に送信する。また、レガシーデバイス1600又はレガシーデバイス2600からのレスポンスを、CPU1000又は擬似レガシーデバイス1300に送信する。
割込みコントローラ1400は、動作制御部1309からレガシーデバイスに発生した障害の通知を受信して、CPU1000へその障害に対応した割込みを行う。
次に、本発明のレガシーデバイス多重化方法の第1の実施の形態(擬似レガシーデバイスを適用した多重化装置の動作)について説明する。ここでは、レガシーデバイス1600、レガシーデバイス2600のうち、レガシーデバイス1600がアクティブ状態で、レガシーデバイス2600がスタンバイ状態である場合を考える。
なお、ここでは、動作に直接関係の無いクロスブリッジ及びI/Oバス(第3の実施の形態に記載)を省略している。
図2は、本発明のレガシーデバイス多重化方法の第1の実施の形態の動作を示すフロー図である。
まず、正常な動作について説明する。
時刻T1において、オペレーティングシステム(OS=CPU1000)は、レガシーデバイス1600に対するリクエスト1を生成する。OSは、リクエスト1をメモリコントローラ1100を介して、擬似レガシーデバイス1300へ送信する。擬似レガシーデバイス1300は、リクエスト1を受信する(ステップS01)。
擬似レガシーデバイス1300の上位I/F部1301は、受信したリクエスト1をリクエストバッファ1303へ送信する。リクエストバッファ1303は、リクエスト1を保持すると共に、下位I/F部1302へリクエスト1を送信する。下位I/F部1302は、リクエスト1をI/Oコントローラ1500に送信する。I/Oコントローラ1500は、リクエスト1をレガシーデバイス1600に送信する(ステップS02)。
レガシーデバイス1600は、リクエスト1に対するレスポンス1を生成し、I/Oコントローラ1500に送信する。I/Oコントローラ1500は、受信したレスポンス1を擬似レガシーデバイス1300に送信する(ステップS03)。
擬似レガシーデバイス1300の下位I/F部1302は、受信したレスポンス1をレスポンスバッファ1305へ送信する。レスポンスバッファ1305は、レスポンス1を保持する。レスポンスバッファ1305は、レスポンス1を受信したことを擬似動作部1304に通知する。擬似動作部1304は、レスポンスバッファ1305が受信したレスポンス1に対応するリクエスト1をリクエストバッファ1303より取り出し、レガシーデバイス1600の擬似動作(エミュレーション)を行う。この擬似動作では、擬似動作部1304に格納されたレガシーデバイス1600の内部状態を更新すると共に、リクエスト1に対するレスポンスの期待値1を生成する。比較エラー検出部1306は、擬似動作部1304により生成された期待値1とレスポンス1とを比較し、比較結果を動作制御部1309へ送信する。動作制御部1309は、期待値1とレスポンス1との間に不一致が発生していない場合、レガシーデバイス1600からのレスポンス1(レスポンスバッファ1305内に格納されている)をOSに返却するように、レスポンスセレクタ1307に指示する。レスポンスセレクタ1307は、レスポンスバッファ1305からレスポンス1を受信し、上位I/F部1301を介してOSへ向けてレスポンス1を出力する(ステップS04)。
レガシーデバイスが正常な場合、以上説明したように本発明のレガシーデバイス多重化方法が実行される。
次に、レガシーデバイス1600に障害が発生した場合について説明する。
時刻T2において、OSは、レガシーデバイス1600に対するリクエスト2を生成する。OSは、リクエスト2をメモリコントローラ1100を介して、擬似レガシーデバイス1300へ送信する。擬似レガシーデバイス1300は、リクエスト2を受信する(ステップS05)。
擬似レガシーデバイス1300の上位I/F部1301は、受信したリクエスト2をリクエストバッファ1303へ送信する。リクエストバッファ1303は、リクエスト2を保持すると共に、下位I/F部1302へリクエスト2を送信する。下位I/F部1302は、リクエスト2をI/Oコントローラ1500に送信する。I/Oコントローラ1500は、リクエスト2をレガシーデバイス1600に送信する(ステップS06)。
レガシーデバイス1600は、リクエスト2に対するレスポンス2を生成し、I/Oコントローラ1500に送信する。I/Oコントローラ1500は、受信したレスポンス2を擬似レガシーデバイス1300に送信する(ステップS07)。
擬似レガシーデバイス1300の下位I/F部1302は、受信したレスポンス2をレスポンスバッファ1305へ送信する。レスポンスバッファ1305は、レスポンス2を保持する。レスポンスバッファ1305は、レスポンス2を受信したことを擬似動作部1304に通知する。擬似動作部1304は、レスポンスバッファ1305が受信したレスポンス2に対応するリクエスト2をリクエストバッファ1303より取り出し、擬似動作を行って、リクエスト2に対するレスポンスの期待値2を生成する。比較エラー検出部1306は、擬似動作部1304により生成された期待値2とレスポンス2とを比較し、比較結果を動作制御部1309へ送信する。動作制御部1309は、期待値2とレスポンス2との間に不一致が発生していることを認識する(ステップS08)。
動作制御部1309は、割込みコントローラ1400を経由して、CPU1000に対してシステム割込みを通知する(ステップS09)。
それと並行して、動作制御部1309は、擬似動作部1304の期待値2をOSに返却するように、レスポンスセレクタ1307に指示する。レスポンスセレクタ1307は、擬似動作部1304から期待値2を受信し、上位I/F部1301を介してOSへ向けて期待値2をレスポンス2として出力する(ステップS10)。
これ以降、時刻T3、T4にOSが発行するレガシーデバイス1600に対するリクエスト3(ステップS11)、リクエスト4(ステップS13)は、レガシーデバイス1600に対して送信は行われず、擬似レガシーデバイス1300内部で生成される期待値3、期待値4がレスポンス3(ステップS12)、レスポンス4(ステップS14)としてOSに返却される。この間、擬似動作部1304はリクエスト3、リクエスト4の内容に基づき、レガシーデバイス1600の内部状態のエミュレーションを行い、期待値3、期待値4を生成する。
時刻T5において、BIOSは、フェイルオーバ処理を開始する(ステップS15)。BIOSは、擬似動作部1304に保持されているレガシーデバイス1600の内部状態を参照する(ステップS16、S17)。BIOSは、レガシーデバイス1600の内部状態に基づいて、レガシーデバイス2600の設定を行う(ステップS18、S19)。BIOSは、フェイルオーバ処理を終了する(ステップS20)。
フェイルオーバ処理が完了した後、レガシーデバイス2600をアクティブ状態とした動作が開始される。時刻T6において、OSがリクエスト5を生成し、擬似レガシーデバイス1300経由(ステップS21)で、レガシーデバイス2600に送信される(ステップS22)。レガシーデバイス2600は、レスポンス5を生成し、擬似レガシーデバイス1300経由(ステップS23)で、OSへレスポンス5として返却される(ステップS24)。
レガシーデバイスに障害が発生した場合、以上説明したように本発明のレガシーデバイス多重化方法が実行される。
図3は、本発明のレガシーデバイス多重化方法の第1の実施の形態の他の動作を示すフロー図である。
次に、レスポンスのタイムアウトが発生した場合について説明する。
時刻T7において、OSは、レガシーデバイス1600に対するリクエスト6を生成する。OSは、リクエスト6をメモリコントローラ1100を介して、擬似レガシーデバイス1300へ送信する。擬似レガシーデバイス1300は、リクエスト6を受信する(ステップS31)。擬似レガシーデバイス1300は、上述と同様のステップで、リクエスト6をI/Oコントローラ1500経由でレガシーデバイス1600に送信する(ステップS32)。
タイムアウト検出部1308は、リクエストバッファ1303とレスポンスバッファ1305を監視し、リクエスト6の受信後に所定の時間ΔT(=時刻T8−時刻T7)経過してもレガシーデバイス1600からレスポンス6が返却されないと判定する。タイムアウト検出部1308は、レスポンスのタイムアウトが発生したことを動作制御部1309へ通知する(ステップS33)。
動作制御部1309は、レスポンスのタイムアウトが発生したことを認識する。動作制御部1309は、割込みコントローラ1400を経由して、CPU1000に対してシステム管理割込みを通知する(ステップS34)。
それと並行して、動作制御部1309は、擬似動作部1304のレスポンス6に対する期待値6をOSに返却するように、レスポンスセレクタ1307に指示する。レスポンスセレクタ1307は、擬似動作部1304から期待値6を受信し、上位I/F部1301を介してOSへ向けて期待値6をレスポンス6として出力する(ステップS35)。これ以降は、レスポンスと期待値との間で不一致が発生した場合と同様に、レガシーデバイス1600のフェイルオーバ処理(上述のステップS15〜S20)が開始される。
レスポンスのタイムアウトが発生した場合、以上説明したように本発明のレガシーデバイス多重化方法が実行される。
このように本発明においては、擬似レガシーデバイス1300の機能によりオペレーティングシステムのモジュールを変更することなく、レガシーデバイスの多重化を実施することが可能となる。
(第2の実施の形態)
本発明の多重化装置及びレガシーデバイス多重化方法の第2の実施の形態について、添付図面を参照して説明する。
まず、本発明の多重化装置の第2の実施の形態の構成について説明する。
図4は、本発明の多重化装置の第2の実施の形態の構成を示すブロック図である。第1の実施の形態(図1)と比較すると、割込みコントローラ1400、2400がフェイルオーバコントローラ1700、2700に置き換えられている点が異なる。
第1の実施の形態(図1)では、CPU1000が、フェイルオーバ処理を実施している。しかし、本実施の形態(図4)では、フェイルオーバコントローラ1700が、フェイルオーバ処理を実施する。すなわち、第1の実施の形態(図1)では、擬似レガシーデバイス1300の擬似動作部1304の生成した期待値に誤りが生じた場合、CPU1000(=オペレーティングシステム:OS)が誤動作する可能性も考えられる。本実施の形態(図4)では、擬似レガシーデバイスが生成した期待値をオペレーティングシステムに返すことがないため、OSの誤動作を発生させることがない点で、第1の実施の形態(図1)よりも優れている。
その他の構成については、第1の実施の形態と同様であるのでその説明を省略する。
図5は、本発明のレガシーデバイス多重化方法の第2の実施の形態の動作を示すフロー図である。ここでも、レガシーデバイス1600、レガシーデバイス2600のうち、レガシーデバイス1600がアクティブ状態で、レガシーデバイス2600がスタンバイ状態である場合を考える。
時刻T9において、OS(=CPU1000)は、レガシーデバイス1600に対するリクエスト7を生成する。OSは、リクエスト7をメモリコントローラ1100を介して、擬似レガシーデバイス1300へ送信する。擬似レガシーデバイス1300は、リクエスト7を受信する(ステップS41)。
擬似レガシーデバイス1300の上位I/F部1301は、受信したリクエスト7をリクエストバッファ1303へ送信する。リクエストバッファ1303は、リクエスト7を保持すると共に、下位I/F部1302へリクエスト7を送信する。下位I/F部1302は、リクエスト7をI/Oコントローラ1500に送信する。I/Oコントローラ1500は、リクエスト7をレガシーデバイス1600に送信する(ステップS42)。
レガシーデバイス1600は、リクエスト7に対するレスポンス7を生成し、I/Oコントローラ1500に送信する。I/Oコントローラ1500は、受信したレスポンス7を擬似レガシーデバイス1300に送信する(ステップS43)。
擬似レガシーデバイス1300の下位I/F部1302は、受信したレスポンス7をレスポンスバッファ1305へ送信する。レスポンスバッファ1305は、レスポンス7を保持する。レスポンスバッファ1305は、レスポンス7を受信したことを擬似動作部1304に通知する。擬似動作部1304は、レスポンスバッファ1305が受信したレスポンス7に対応するリクエスト7をリクエストバッファ1303より取り出し、擬似動作を行って、リクエスト7に対するレスポンスの期待値7を生成する。比較エラー検出部1306は、擬似動作部1304により生成された期待値7とレスポンス7とを比較し、比較結果を動作制御部1309へ送信する。動作制御部1309は、期待値7とレスポンス7との間に不一致が発生していることを認識する(ステップS44)。
動作制御部1309は、レスポンス7と期待値7との間に不一致が発生したことをフェイルオーバコントローラ1700へ通知する(ステップS45)。
フェイルオーバコントローラ1700は、動作制御部1309からレガシーデバイスの障害の発生を通知されると、フェイルオーバ処理を開始する(ステップS46)。フェイルオーバコントローラ1700は、擬似動作部1304に保持されているレガシーデバイス1600の内部状態を参照する(ステップS47、S48)。フェイルオーバコントローラ1700は、レガシーデバイス1600の内部状態に基づいて、レガシーデバイス2600の設定を行う(ステップS49、S50)。フェイルオーバコントローラ1700は、フェイルオーバ処理を終了する(ステップS51)。
フェイルオーバ処理が完了した後、レガシーデバイス2600をアクティブ状態とした動作が開始される。擬似レガシーデバイス1300のリクエストバッファ1303は、下位I/F部1302を介して、リクエスト7をレガシーデバイス2600に送信する(ステップS52)。レガシーデバイス2600は、リクエスト7に対するレスポンス7を生成し、擬似レガシーデバイス1300へレスポンス7を返却する(ステップS53)。この後、正常の場合のときと同様に、擬似レガシーデバイス1300は、レスポンス7をOSに返却する。そして、これ以降の時刻T10において、OSが発行するレガシーデバイスに対するリクエスト8は、レガシーデバイス2600に送信される。
本実施の形態の場合にも、第1の実施の形態と同様の効果を得ることができる。加えて、本実施の形態では、擬似レガシーデバイス1300が生成した期待値をOS(=CPU1000)へ返すことがないため、OSの誤動作を発生させることがない。
(第3の実施の形態)
本発明の多重化装置及びレガシーデバイス多重化方法の第3の実施の形態について、添付図面を参照して説明する。
まず、本発明の多重化装置の第3の実施の形態の構成について説明する。
図6は、本発明の多重化装置の第3の実施の形態の構成を示すブロック図である。多重化装置は、第1システム30及び第2システム40を具備し、二重化(多重化の一例)されたコンピュータシステムに例示される。第1システム30は、CPU3000、メモリコントローラ3100、メモリ3200、擬似タイマー3300、クロスブリッジ3400、I/Oコントローラ3500、タイマー3600、割込みコントローラ3700、I/Oバス3800を備える。同様に、第2システム40は、CPU4000、メモリコントローラ4100、メモリ4200、擬似タイマー4300、クロスブリッジ4400、I/Oコントローラ4500、タイマー4600、割込みコントローラ4700、I/Oバス4800を備える。
ここでは、ロックステップ方式による多重化装置を基本として説明する。すなわち、図6においてCPU3000とCPU4000、メモリコントローラ3100とメモリコントローラ4100、メモリ3200とメモリ4200、擬似タイマー3300と擬似タイマー4300はロックステップ動作を行っている。また、I/Oコントローラ3500とI/Oコントローラ4500、タイマー3600とタイマー4600、及び割込みコントローラ3700と割込みコントローラ4700は、どちらか一方がアクティブ状態で動作しており、他方はスタンバイ状態で待機している。以下、第1システム30について説明するが、第2システム40についても同様である(ただし、符号は4000番台)。
通常動作時には、CPU3000では、オペレーティングシステム(以下「OS」と記す)が動作している。OSは、メモリ3200、I/Oコントローラ3500、I/Oコントローラ4500配下のI/Oデバイスにアクセスを行う。また、システム管理割込み(SMI)が通知されると、CPU3000は、しばらく後にBIOS(図示されず)内部のシステム管理割込みハンドラに動作を切り替える。システム管理割込みハンドラの処理が終わると、CPU3000は、OSに動作を切り替える。
メモリコントローラ3100は、OS又はBIOSからI/Oデバイスに対するリクエストが発行された場合、そのリクエストを擬似タイマー3300に対して送信する。そして、そのリクエストに対するレスポンスを擬似タイマー3300から受信する。
なお、タイマー3600以外に対するリクエストの場合には、そのリクエストをクロスブリッジ3400へ送信するようにしても良い。その場合、そのリクエストに対するレスポンスをクロスブリッジ3400から受信する。その際、メモリコントローラ3100とクロスブリッジ3400との間の配線(図示されず)を介して送受信を行う。
擬似タイマー3300は、上位I/F部3301、リクエストバッファ3302、タイムアウト検出部3303、動作制御部3304、下位I/F部3305、タイマー割込み検出部3306、レスポンスバッファ3307、比較エラー検出部3308、レスポンスセレクタ3309、擬似動作部3310を備える。
上位I/F部3301は、I/Oデバイスに対するリクエストを受信し、そのリクエストを下位I/F部3305及びリクエストバッファ3302へ送信する。また、CPU3000に対するレスポンス又はリクエストを受信すると、それらをメモリコントローラ3100へ送信する。
リクエストバッファ3302は、上位I/F部3301から送信されてきたリクエストがタイマー3600、タイマー4600に対するアクセスかどうかを判断し、タイマー3600、タイマー4600に対するリクエストの場合には、そのリクエストのコピーを保持する。
下位I/F部3305は、上位I/F部3301から送信されたリクエストをクロスブリッジ3400に送信する。それと共に、I/Oデバイスからのレスポンスをクロスブリッジ3400経由で受信し、受信したレスポンスをレスポンスバッファ3307に送信する。
レスポンスバッファ3307は、下位I/F部3305からレスポンスデータを受信すると、レスポンスデータを受信したことを擬似動作部3310に通知する。
擬似動作部3310は、レスポンスバッファ3307からレスポンスを受信したことを伝えられると、そのレスポンスに対応するリクエストをリクエストバッファ3302から取得する。取得したリクエストに対するレスポンスの期待値を生成し、比較エラー検出部3308に通知する。この際、取り出したリクエストはリクエストバッファ3302から削除する。
比較エラー検出部3308は、擬似動作部3310により生成された期待値とタイマーから受信したレスポンスデータとを比較し、不一致が発生していないかどうか確認する。不一致が発生した場合には、不一致が発生したことを動作制御部3304に通知する。
タイムアウト検出部3303は、リクエストバッファ3302とレスポンスバッファ3307を監視し、一定時間以上レスポンスが返ってこないリクエストを検出すると、動作制御部3304に通知を行う。
動作制御部3304は、比較エラー検出部3308と、タイムアウト検出部3303からの通知に基づいて、タイマー3600に障害が発生したかどうかを判断し、動作モードの制御を行う。また、タイマーに障害が発生した場合には、CPU3000に対して、OSに透過なシステム管理割込みを発行する。このシステム管理割込みはBIOSにより処理され、OSはシステム管理割込みが発生したことを感知しない。
レスポンスセレクタ3309は、動作制御部3304の指示に基づいて、擬似動作部4310のレスポンス及びレスポンスバッファ3307のレスポンスのいずれかを上位I/F部3301へ出力する。
タイマー割込み検出部3306は、割込みコントローラ3700から出力された割込みリクエストを検出して、擬似動作部3310へ通知する。
クロスブリッジ3400は、擬似タイマー3300により発行されたリクエストを、タイマー3600又はタイマー4600のうち、アクティブ状態にある側に送信する。また、タイマー3600又はタイマー4600からのレスポンスを、擬似タイマー3300に送信する。また、I/Oコントローラ3500、I/Oコントローラ4500からのレスポンスと、割込みリクエストを受信し、擬似タイマー3300に送信する。
I/Oコントローラ3500はクロスブリッジ3400、クロスブリッジ4400からのリクエストを、I/Oバス3800に送信する。
タイマー3600は、I/Oバス3800からリクエストを受信し、I/Oバス3800にレスポンスを送信する。タイマー3600は、少なくとも、カウンタモード設定、カウンタ値ロード、カウンタモードリード、カウンタ値リードの4つのリクエストを受け付けるものとする。
カウンタモード設定リクエストは、カウンタの動作モードを設定するリクエストである。カウンタの動作モードには、割込みの種類が定周期割込みモードであるか、単一割込みモードであるかを少なくとも設定できるものとする。
カウンタ値ロードリクエストは、タイマー3600のカウンタ値をロードするリクエストである。タイマー3600は、カウンタ値がロードされると、その時点で設定されているカウンタモードで動作を開始する。タイマー3600は、カウンタ値を1ずつ削減しカウンタ値が0になった時点で割込みを生成する。
割込みモードが定周期割込みモードの場合、カウンタ値が0になるとカウンタ値を最後にロードされた値に再設定し、再びカウントを開始する。単一割込みモードの場合には、カウンタ値が0になった時点で動作を停止する。
割込みコントローラ3700は、タイマー3600からの割込みを受信し、割込みリクエストをI/Oバス3800に送信する。
図7は、擬似動作部3310を示すブロック図である。擬似動作部3310は、リクエストデコーダ3311、カウンタ値3312、ロード値3313、カウンタモード3314、割込みステータス3315、加算値3316、加算器3317、MUX3318、MUX3319を備える。
リクエストデコーダ3311は、リクエストバッファ3302のリクエストをデコードし、擬似動作部3310のカウンタ値3312、ロード値3313、カウンタモード3314、割込みステータス3315を更新する。更新方法を以下に示す。
カウンタ値3312は、タイマー3600のカウンタ値をエミュレートする。具体的には、カウンタ値ロードリクエスト(リクエストバッファ3302から取得)が発行された場合、タイマー3600にロードされる値でカウンタ値3312を更新する。
カウンタ値リードリクエスト(リクエストバッファ3302から取得)が発行された場合、タイマー3600から受信したレスポンス(レスポンスバッファ3307から取得)の値でカウンタ値を更新する。
タイマー3600が故障しているときに、カウンタ値リードリクエスト(リクエストバッファ3302から取得)が発行された場合、カウンタ値3312に加算値3316を加算した値を戻り値として返し、その戻り値でカウンタ値3312を更新する。ここで、加算値3316は正の値である必要は無く、負の値も設定可能であるものとする。
ロード値3313は、タイマー3600にロードされた値を保持する。具体的には、カウンタ値ロードリクエスト(リクエストバッファ3302から取得)によりタイマー3600のカウンタに値がロードされた場合に、その値を保持する。ロード値3313は、タイマー3600をフェイルオーバする際に使用される。
カウンタモード3314は、タイマー3600に設定されたモードを保持する。具体的には、カウンタモード設定リクエスト(リクエストバッファ3302から取得)によりカウンタのモードが設定される場合、その値を保持する。また、カウンタの割込みモードが周期割込みモードであるか、単一割込みモードであるかを示す信号を、割込みステータス3315に出力する。
割込みステータス3315は、タイマー3600から単一割込みが発生したかどうかを示す値を保持する。具体的には、カウンタモード設定リクエスト(リクエストバッファ3302から取得)によりタイマー3600が単一割込みモードに設定された状態で、カウントが開始した時、1にセットされる。タイマー割込み検出部3306により、タイマー割込みが発生したことが通知されたら、0にリセットされる。タイマーが周期割込みモードである場合には、常に0である。
加算値3316は、予め設定された値を保持している。ここで、その予め設定された値は正の値である必要は無く、負の値も設定可能である。
MUX3318は、リクエストのデコード結果に基づいて、適切な値をカウンタ値3312へ出力する。MUX3319は、リクエストのデコード結果に基づいて、適切な期待値を比較エラー検出部へ出力する。
次に、本発明のレガシーデバイス多重化方法の第3の実施の形態(擬似レガシーデバイスを適用した多重化装置の動作)について説明する。ただし、擬似レガシーデバイスは、擬似タイマーである。ここでは、I/Oコントローラ3500、タイマー3600、割込みコントローラ3700がアクティブ状態で、I/Oコントローラ4500、タイマー4600、割込みコントローラ4700がスタンバイ状態である場合を考える。
図8は、本発明のレガシーデバイス多重化方法の第3の実施の形態の動作を示すフロー図である。タイマーの割込みモードが周期割込みモードである場合の動作を説明する。
時刻T1において、OS(=CPU3000)は、タイマー3600に対するリクエスト1を生成する。リクエスト1は、カウンタモード設定リクエストで、割込みモードは周期割込みモードである。OSは、リクエスト1をメモリコントローラ3100経由で、擬似レガシーデバイスとしての擬似タイマー3300へ送信する。擬似タイマー3300は、リクエスト1を受信する(ステップS71)。
擬似タイマー3300の上位I/F部3301は、受信したリクエスト1を下位I/F部3305及びリクエストバッファ3302へ送信する。下位I/F部3305は、リクエスト1をクロスブリッジ3400へ送信する。リクエストバッファ3302は、リクエスト1のコピーを保持する。クロスブリッジ3400は、アクティブ状態であるI/Oコントローラ3500へリクエスト1を送信する。I/Oコントローラ3500は、リクエスト1をI/Oバス3800経由でタイマー3600へ送信する(ステップS72)。
タイマー3600は、リクエスト1に対するレスポンス1を生成し、I/Oコントローラ3500へ送信する。I/Oコントローラ3500は、受信したレスポンス1を擬似タイマー3300の下位I/F部3305へ送信する(ステップS73)。
下位I/F部3305は、レスポンス1をレスポンスバッファ3307へ送信する。レスポンスバッファ3307は、レスポンス1を保持すると共に、受信したことを擬似動作部3310へ通知する。擬似動作部3310は、レスポンスバッファ3307が受信したレスポンス1に対応するリクエスト1をリクエストバッファ3302より取り出す。取り出されたリクエスト1は、リクエストデコーダ3311によりデコードされる。リクエスト1は、カウンタモード設定リクエストである。そのため、カウンタモード3314は、レスポンス1のモード(タイマー3600に設定されたモード)を保持する(ステップS74)。
リクエスト1は、カウンタモード設定リクエストであるため、比較エラー検出部3308は、レスポンス1と期待値1との比較は行わず、その旨を動作制御部3304へ送信する。動作制御部3304は、レスポンスバッファ3307に格納されたタイマー3600からのレスポンス1をCPU3000に返却するように、レスポンスセレクタ3309に指示する。レスポンスセレクタ3309は、レスポンス1を上位I/F部3301へ出力する。上位I/F部3301は、メモリコントローラ3100を介してレスポンス1をCPU3000(OS)に返却する(ステップS75)。
次に、時刻T2において、OS(=CPU3000)は、タイマー3600に対するリクエスト2を生成する。リクエスト2はカウンタ値ロードリクエストである。OSは、リクエスト2をメモリコントローラ3100経由で、擬似レガシーデバイスとしての擬似タイマー3300へ送信する。擬似タイマー3300は、リクエスト2を受信する(ステップS76)。
擬似タイマー3300の上位I/F部3301は、受信したリクエスト2を下位I/F部3305及びリクエストバッファ3302へ送信する。下位I/F部3305は、リクエスト2をクロスブリッジ3400へ送信する。リクエストバッファ3302は、リクエスト2のコピーを保持する。クロスブリッジ3400は、アクティブ状態であるI/Oコントローラ3500へリクエスト2を送信する。I/Oコントローラ3500は、リクエスト2をI/Oバス3800経由でタイマー3600へ送信する(ステップS77)。
タイマー3600は、リクエスト2に対するレスポンス2を生成し、I/Oコントローラ3500へ送信する。I/Oコントローラ3500は、受信したレスポンス2を擬似タイマー3300の下位I/F部3305へ送信する(ステップS78)。
下位I/F部3305は、レスポンス2をレスポンスバッファ3307へ送信する。レスポンスバッファ3307は、レスポンス2を保持すると共に、受信したことを擬似動作部3310へ通知する。擬似動作部3310のリクエストデコーダ3311は、レスポンスバッファ3307が受信したレスポンス2に対応するリクエスト2をリクエストバッファ3302より取り出す。取り出されたリクエスト2は、リクエストデコーダ3311によりデコードされる。リクエスト2は、カウンタ値ロードリクエストである。そのため、ロード値3313は、レスポンス2の値(タイマー3600にロードされた値)でロード値を更新する(ステップS79)。
リクエスト2は、カウンタ値ロードリクエストであるため、比較エラー検出部3308は、レスポンス2と期待値2との比較は行わず、その旨を動作制御部3304へ送信する。動作制御部3304は、レスポンスバッファ3307に格納されたタイマー3600からのレスポンス2をCPU3000に返却するように、レスポンスセレクタ3309に指示する。レスポンスセレクタ3309は、レスポンス2を上位I/F部3301へ出力する。上位I/F部3301は、メモリコントローラ3100を介してレスポンス2をCPU3000(OS)に返却する(ステップS80)。
さらに、時刻T3において、OS(=CPU3000)は、タイマー3600に対するリクエスト3を生成する。リクエスト3はカウンタ値リードリクエストである。OSは、リクエスト3をメモリコントローラ3100経由で、擬似タイマー3300へ送信する。擬似タイマー3300は、リクエスト3を受信する(ステップS81)。
擬似タイマー3300の上位I/F部3301は、受信したリクエスト3を下位I/F部3305及びリクエストバッファ3302へ送信する。下位I/F部3305は、リクエスト3をクロスブリッジ3400へ送信する。リクエストバッファ3302は、リクエスト3のコピーを保持する。クロスブリッジ3400は、アクティブ状態であるI/Oコントローラ3500へリクエスト3を送信する。I/Oコントローラ3500は、リクエスト3をI/Oバス3800経由でタイマー3600へ送信する(ステップS82)。
タイマー3600は、リクエスト3に対するレスポンス3を生成し、I/Oコントローラ3500へ送信する。I/Oコントローラ3500は、受信したレスポンス3を擬似タイマー3300の下位I/F部3305へ送信する(ステップS83)。
下位I/F部3305は、レスポンス3をレスポンスバッファ3307へ送信する。レスポンスバッファ3307は、レスポンス3を保持すると共に、受信したことを擬似動作部3310へ通知する。擬似動作部3310のリクエストデコーダ3311は、レスポンスバッファ3307が受信したレスポンス3に対応するリクエスト3をリクエストバッファ3302より取り出す。取り出されたリクエスト3は、リクエストデコーダ3311によりデコードされる。リクエスト3は、カウンタ値リードリクエストである。そのため、カウンタ値3312は、レスポンス3の値でカウンタ値3312を更新する(ステップS84)。
リクエスト3は、カウンタ値リードリクエストため、比較エラー検出部3308は、レスポンス3と期待値3との比較は行わず、その旨を動作制御部3304へ送信する。動作制御部3304は、レスポンスバッファ3307に格納されたタイマー3600からのレスポンス2をCPU3000に返却するように、レスポンスセレクタ3309に指示する。レスポンスセレクタ3309は、レスポンス3を上位I/F部3301へ出力する。上位I/F部3301は、メモリコントローラ3100を介してレスポンス1をCPU3000(OS)に返却する(ステップS85)。
また、時刻T4において、OS(=CPU3000)は、タイマー3600に対するリクエスト4を生成する。リクエスト4はカウンタモードリードリクエストである。OSは、リクエスト4をメモリコントローラ3100経由で、擬似タイマー3300へ送信する。擬似タイマー3300は、リクエスト4を受信する(ステップS86)。
擬似タイマー3300の上位I/F部3301は、受信したリクエスト4を下位I/F部3305及びリクエストバッファ3302へ送信する。下位I/F部3305は、リクエスト4をクロスブリッジ3400へ送信する。リクエストバッファ3302は、リクエスト4のコピーを保持する。クロスブリッジ3400は、アクティブ状態であるI/Oコントローラ3500へリクエスト4を送信する。I/Oコントローラ3500は、リクエスト4をI/Oバス3800経由でタイマー3600へ送信する(ステップS87)。
タイマー3600は、リクエスト4に対するレスポンス4を生成し、I/Oコントローラ3500へ送信する。I/Oコントローラ3500は、受信したレスポンス4を擬似タイマー3300の下位I/F部3305へ送信する(ステップS88)。
下位I/F部3305は、レスポンス4をレスポンスバッファ3307へ送信する。レスポンスバッファ3307は、レスポンス4を保持すると共に、受信したことを擬似動作部3310へ通知する。擬似動作部3310のリクエストデコーダ3311は、レスポンスバッファ3307が受信したレスポンス4に対応するリクエスト4をリクエストバッファ3302より取り出す。取り出されたリクエスト4は、リクエストデコーダ3311によりデコードされる。リクエスト4は、カウンタモードリードリクエストである。リクエストデコーダ3311は、リクエスト4がモードリードリクエストであることを確認すると、タイマー3600から返されるモード値として期待される期待値4をリクエスト4に基づいて作成し、比較エラー検出部3308へ出力する。比較エラー検出部3308は、レスポンスバッファ3307のレスポンス4と期待値4とを比較し、比較結果を動作制御部3304へ出力する。動作制御部1309は、期待値4とレスポンス1との間に不一致が発生しているか否かを判定する(ステップS89)。
動作制御部1309は、期待値4とレスポンス4との間に不一致が発生していない場合、タイマー3600からのレスポンス4(レスポンスバッファ3307内に格納されている)をCPU3000に返却するように、レスポンスセレクタ3309に指示する。レスポンスセレクタ3309は、レスポンス4を上位I/F部3301へ出力する。上位I/F部3301は、メモリコントローラ3100を介してレスポンス4をCPU3000(OS)に返却する(ステップS90)。
図9は、本発明のレガシーデバイス多重化方法の第3の実施の形態の他の動作を示すフロー図である。タイマーの割込みモードが単一割込みモードである場合の動作を説明する。
時刻T5において、OS(=CPU3000)は、タイマー3600に対するリクエスト5を生成する。リクエスト5は、モード設定リクエストで、割込みモードは単一割込みモードである。このリクエスト5は、図8におけるリクエスト1の処理(ステップS71〜S75)と同様に処理(ステップS101〜S105)される。
次に、時刻T6において、OS(=CPU3000)は、タイマー3600に対するリクエスト6を生成する。リクエスト6はカウンタ値ロードリクエストである。OSは、リクエスト6をメモリコントローラ3100経由で、擬似レガシーデバイスとしての擬似タイマー3300へ送信する。擬似タイマー3300は、リクエスト6を受信する(ステップS106)。
擬似タイマー3300の上位I/F部3301は、受信したリクエスト6を下位I/F部3305及びリクエストバッファ3302へ送信する。下位I/F部3305は、リクエスト6をクロスブリッジ3400へ送信する。リクエストバッファ3302は、リクエスト6のコピーを保持する。クロスブリッジ3400は、アクティブ状態であるI/Oコントローラ3500へリクエスト6を送信する。I/Oコントローラ3500は、リクエスト6をI/Oバス3800経由でタイマー3600へ送信する(ステップS107)。
タイマー3600は、リクエスト6に対するレスポンス6を生成し、I/Oコントローラ3500へ送信する。I/Oコントローラ3500は、受信したレスポンス6を擬似タイマー3300の下位I/F部3305へ送信する(ステップS108)。
下位I/F部3305は、レスポンス6をレスポンスバッファ3307へ送信する。レスポンスバッファ3307は、レスポンス6を保持すると共に、受信したことを擬似動作部3310へ通知する。擬似動作部3310のリクエストデコーダ3311は、レスポンスバッファ3307が受信したレスポンス6に対応するリクエスト6をリクエストバッファ3302より取り出す。取り出されたリクエスト6は、リクエストデコーダ3311によりデコードされる。リクエスト6は、カウンタ値ロードリクエストである。そのため、ロード値3313は、レスポンス6の値(タイマー3600にロードされた値)でロード値を更新する。また、時刻T5での処理(ステップS101〜S105)でタイマー3600が単一割込みモードに設定されており、リクエスト6のカウンタ値ロードリクエストによりカウントが開始したので、割込みステータス3315は、その値を1にセットする。この割込みステータス3315の値=1により、タイマー3600が単一割込みモードで動作を開始した後に、まだ割込みが発生していないことを示す(ステップS109)。
リクエスト6は、カウンタ値ロードリクエストであるため、比較エラー検出部3308は、レスポンス6と期待値6との比較は行わず、その旨を動作制御部3304へ送信する。動作制御部3304は、レスポンスバッファ3307に格納されたタイマー3600からのレスポンス6をCPU3000に返却するように、レスポンスセレクタ3309に指示する。レスポンスセレクタ3309は、レスポンス6を上位I/F部3301へ出力する。上位I/F部3301は、メモリコントローラ3100を介してレスポンス6をCPU3000(OS)に返却する(ステップS110)。
時刻T7において、タイマー3600内部でタイマー割込みが発生する。タイマー3600は、タイマー割込みを割込みメッセージとして、I/Oコントローラ3500経由で擬似タイマー3300の下位I/F部3305へ送信する(ステップS111)。
下位I/F部3305は、タイマー割込みをタイマー割込み検出部3306とレスポンスバッファ3307とへ送信する。タイマー割込み検出部3306は、このタイマー割込み(割込みメッセージ)がタイマー3600により発行されたものであることを検出すると、擬似動作部3310へ通知する。擬似動作部3310の割込みステータス3315は、その値を0にクリアする。この割込みステータス3315の値=0により、タイマー3600が単一割込みモードで動作を開始した後に、割込みが発生したことを示す(ステップS112)。
一方、レスポンスバッファ3307は、タイマー割込みを上位I/F部3301経由でCPU3000へ送信する(ステップS113)。
図10は、本発明のレガシーデバイス多重化方法の第3の実施の形態の更に他の動作を示すフロー図である。ここでは、障害発生時の動作を説明する。
時刻T8において、OS(=CPU3000)は、タイマー3600に対するリクエスト8を生成する。リクエスト8はカウンタモードリードリクエストである。OSは、リクエスト8をメモリコントローラ3100経由で、擬似タイマー3300へ送信する。擬似タイマー3300は、リクエスト8を受信する(ステップS121)。
擬似タイマー3300の上位I/F部3301は、受信したリクエスト8を下位I/F部3305及びリクエストバッファ3302へ送信する。下位I/F部3305は、リクエスト8をクロスブリッジ3400へ送信する。リクエストバッファ3302は、リクエスト8のコピーを保持する。クロスブリッジ3400は、アクティブ状態であるI/Oコントローラ3500へリクエスト8を送信する。I/Oコントローラ3500は、リクエスト8をI/Oバス3800経由でタイマー3600へ送信する(ステップS122)。
タイマー3600は、リクエスト8に対するレスポンス8を生成し、I/Oコントローラ3500へ送信する。I/Oコントローラ3500は、受信したレスポンス8を擬似タイマー3300の下位I/F部3305へ送信する(ステップS123)。
下位I/F部3305は、レスポンス8をレスポンスバッファ3307へ送信する。レスポンスバッファ3307は、レスポンス8を保持すると共に、受信したことを擬似動作部3310へ通知する。擬似動作部3310のリクエストデコーダ3311は、レスポンスバッファ3307が受信したレスポンス8に対応するリクエスト8をリクエストバッファ3302より取り出す。取り出されたリクエスト8は、リクエストデコーダ3311によりデコードされる。リクエスト8は、カウンタモードリードリクエストである。リクエストデコーダ3311は、リクエスト8がカウンタモードリードリクエストであることを確認すると、タイマー3600から返されるモード値として期待される期待値8をリクエスト8に基づいて生成し、比較エラー検出部3308へ出力する。比較エラー検出部3308は、レスポンスバッファ3307のレスポンス8と期待値8とを比較し、比較結果を動作制御部3304へ出力する。動作制御部1309は、期待値8とレスポンス8との間に不一致が発生しているか否かを判定する(ステップS124)。
動作制御部1309は、期待値8とレスポンス8との間に不一致が発生している場合、時刻T9にシステム管理割込みを発行する(ステップS125)。それと共に、動作制御部1309は、擬似動作部3310が生成した期待値8をCPU3000に返却するように、レスポンスセレクタ3309に指示する。レスポンスセレクタ3309は、期待値8をレスポンス8として上位I/F部3301へ出力する。上位I/F部3301は、メモリコントローラ3100を介してレスポンス8をCPU3000(OS)に返却する(ステップS126)。
システム管理割込みを発行した後も、システム管理割込みのハンドラに処理が移行する時刻までに、OSからタイマー3600に対するリクエストが出力される場合がある。例えば、図10において、時刻T10にOSはリクエスト9を発行している。リクエスト9はカウンタ値リードコマンドである。しかし、タイマー3600は障害が発生しているため、カウンタ値を返すことが出来ない。そのため、擬似タイマー3300が擬似カウンタ値をレスポンスとして返す。擬似カウンタ値としては、擬似動作部3310のカウンタ値3312に加算値3316を加えた値が返される。これにより、オペレーティングシステム内部でカウンタ値が逆戻りする矛盾を発生させない。
具体的には次のように行う。
時刻T10において、OS(=CPU3000)は、タイマー3600に対するリクエスト9を生成する。リクエスト9はカウンタ値リードリクエストである。OSは、リクエスト9をメモリコントローラ3100経由で、擬似タイマー3300へ送信する。擬似タイマー3300は、リクエスト9を受信する(ステップS127)。
擬似タイマー3300の上位I/F部3301は、受信したリクエスト9を下位I/F部3305及びリクエストバッファ3302へ送信する。リクエストバッファ3302は、リクエスト3のコピーを保持する。下位I/F部3305は、リクエスト9をクロスブリッジ3400へ送信する。しかし、タイマー3600は障害が発生しているため、カウンタ値を返すことが出来ない。タイムアウト検出部3303は、リクエストバッファ3302とレスポンスバッファ3307を監視し、リクエスト9に対するレスポンス9が一定時間以上返ってこないことを動作制御部3304に通知を行う。動作制御部3304は、擬似動作部3310からカウンタ値3312に加算値3316を加算した値(擬似カウンタ値)を比較エラー検出部3308経由で取得する(ステップS128)。そして、動作制御部3304は、その値をレスポンス9としてCPU3000に返却する(ステップS129)。
次に、フェイルオーバ処理について説明する。
時刻T11において、BIOSのシステム管理割込みハンドラが動作を始め、フェイルオーバ処理を開始する(ステップS130)。フェイルオーバ処理では、システム管理割込みハンドラが擬似動作部3310に保持されているカウンタ値3312、ロード値3313、カウンタモード3314、割込みステータス3315を参照する(ステップS131、S132)。そして、それらカウンタ値3312、ロード値3313、カウンタモード3314、割込みステータス3315に基づいて、システム管理割込みハンドラは、スタンバイ状態であったタイマー4600の状態を、アクティブ状態であったタイマー3600の状態と同じ状態にする(ステップS133、S134)。フェイルオーバ処理が完了すると(ステップS135)、時刻T12にシステム管理割込みハンドラからOSへ処理が戻る。そして、フェイルオーバ処理後のT13以降に生成されるタイマーに対するリクエストは、クロスブリッジ3400−I/Oコントローラ4500−I/Oバス4800経由で、新たにアクティブ状態になったタイマー4600に送信される。図におけるステップS136〜S140は、タイマー4600に対して、ステップS71〜S75のように処理される。
続いて、フェイルオーバ処理について更に説明する。
図11は、本発明のレガシーデバイス多重化方法の第3の実施の形態におけるフェイルオーバ処理を示すフロー図である。
まず、ステップS151において、システム管理割込みハンドラは、カウンタモード3314を参照し、フェイルオーバ先のカウンタのモードを設定する。
次に、ステップS152において、システム管理割込みハンドラは、カウンタモード3314の割込みモードが周期割込みモードであるか、単一割込みモードであるかを確認する。割込みモードが単一割込みモードである場合、ステップS153に進む。割込みモードが周期割込みモードである場合、ステップS154に進む。
ステップS153では、システム管理割込みハンドラは、割込みステータス3315の値を確認する。そのとき、割込みステータス3315の値が1である場合、ステップS154に進む。割込みステータスの値が0である場合、ステップS155に進む。割込みステータスが0の場合、単一割込みモードが設定された後に、割込みが発生した状態である。そのため、ステップS154を実行すると再び割込みが発行されてしまい、オペレーティングシステムに矛盾が生じてしまうからである。
ステップS154では、システム管理割込みハンドラは、ロード値3313を参照し、フェイルオーバ先のタイマー(タイマー4600)にカウンタ値をロードする。
ステップS155では、カウンタ値3312に保持されているカウンタ値より小さくなるまで、タイマー(タイマー4600)のカウンタ値をリードする。
本発明において、タイマー故障が発生してからフェイルオーバが完了するまで、擬似タイマーがオペレーティングシステムに対して矛盾の無い擬似レスポンスを返却するので、オペレーティングシステムのモジュールを変更することなく、タイマーのフェイルオーバが実施できる。
擬似動作部3310は、次のような擬似動作部3310aを用いることも可能である。
図12は、擬似動作部3310aを示すブロック図である。擬似動作部3310aは、図7の擬似動作部3310と比較して、更に周波数比3321、加算器3322を備えている点で異なる。
周波数比3318は、タイマー3600が動作するクロック周波数と、擬似タイマー3300が動作するクロックの周波数の比を保持している。周波数比は固定小数点で設定できるものとする。加算値3316は、擬似タイマー3300が動作するクロック毎に周波数比3318の値を予め設定された値に加算する。加算値3316は、カウンタ値リードリクエストが完了すると、クリアされる。タイマー3600に障害が発生した後に、カウンタ値リードリクエストが発行され、擬似タイマー3300が擬似レスポンスを返す際、カウンタ値3312から加算値3316の整数部分を加えた値を返す。
図7の擬似動作部3310は、タイマー3600に障害が発生した後にカウンタ値リードリクエストが発行された際の擬似レスポンスとしては、カウンタ値3312に加算値3316を加えた値を返していたが、図12の擬似動作部3310aは、タイマー3600と擬似タイマー3300のクロック周波数比と、前回のカウンタ値リードリクエストとの時刻差を考慮し、より適切なカウンタ値を擬似レスポンスとして返すことが出来る。
図1は、本発明の多重化装置の第1の実施の形態の構成を示すブロック図である。 図2は、本発明のレガシーデバイス多重化方法の第1の実施の形態の動作を示すフロー図である。 図3は、本発明のレガシーデバイス多重化方法の第1の実施の形態の他の動作を示すフロー図である。 図4は、本発明の多重化装置の第2の実施の形態の構成を示すブロック図である。 図5は、本発明のレガシーデバイス多重化方法の第2の実施の形態の動作を示すフロー図である。 図6は、本発明の多重化装置の第3の実施の形態の構成を示すブロック図である。 図7は、擬似動作部を示すブロック図である。 図8は、本発明のレガシーデバイス多重化方法の第3の実施の形態の動作を示すフロー図である。 図9は、本発明のレガシーデバイス多重化方法の第3の実施の形態の他の動作を示すフロー図である。 図10は、本発明のレガシーデバイス多重化方法の第3の実施の形態の更に他の動作を示すフロー図である。 図11は、本発明のレガシーデバイス多重化方法の第3の実施の形態におけるフェイルオーバ処理を示すフロー図である。 図12は、擬似動作部を示すブロック図である。
符号の説明
10、30 第1システム
20、40 第2システム
1000、2000、3000、4000 CPU
1100、2100、3100、4100 メモリコントローラ
1200、2200、3200、4200 メモリ
1300、2300 擬似レガシーデバイス
1301、2301 上位I/F部
1302、2302 下位I/F部
1303、2303 リクエストバッファ
1304、2304 擬似動作部
1305、2305 レスポンスバッファ
1306、2306 比較エラー検出部
1307、2307 レスポンスセレクタ
1308、2308 タイムアウト検出部
1309、2309 動作制御部
1400、2400 割込みコントローラ
1500、2500 I/Oコントローラ
1600、2600 レガシーデバイス
1700、2700 フェイルオーバコントローラ
3300、4300 擬似タイマー
3301、4301 上位I/F部
3302、4302 リクエストバッファ
3303、4303 タイムアウト検出部
3304、4304 動作制御部
3305、4305 下位I/F部
3306、4306 タイマー割込み検出部
3307、4307 レスポンスバッファ
3308、4308 比較エラー検出部
3309、4309 レスポンスセレクタ
3310、4310 擬似動作部
3311 リクエストデコーダ
3312 カウンタ値
3313 ロード値
3314 カウンタモード
3315 割込みステータス
3316 加算値
3317 加算器
3318、3319 MUX
3321 周波数比
3322 加算器
3400、4400 クロスブリッジ
3500、4500 I/Oコントローラ
3600、4600 タイマー
3700、4700 割込みコントローラ
3800、4800 I/Oバス

Claims (10)

  1. 多重化された一組の複数のシステムを具備し、
    前記複数のシステムの各々は、
    CPUと、
    前記CPUと通信可能に接続された擬似レガシーデバイスと、
    前記擬似レガシーデバイスと通信可能に接続されたレガシーデバイスと
    割込みコントローラと
    を備え、
    前記擬似レガシーデバイスは、
    前記CPUが前記擬似レガシーデバイスを介して前記レガシーデバイスへリクエストを送信するとき、前記リクエストを記憶するリクエストバッファと、
    前記リクエストバッファに記憶された前記リクエストに基づいて前記レガシーデバイスに関するエミュレーションを実行して、前記エミュレーション結果としての前記レガシーデバイスの内部状態及び前記リクエストに対する前記レガシーデバイスのレスポンスの期待値を記憶する擬似動作部と
    を含み、
    前記期待値と前記レガシーデバイスからのレスポンスとが一致する場合、前記レスポンスをそのまま前記CPUへ出力し、
    前記期待値と前記レスポンスとが一致しない場合、前記期待値を前記レガシーデバイスからのレスポンスとして前記CPUへ出力し、前記割込みコントローラへ割込み通知を行い、
    前記割り込みコントローラは、前記割込み通知に基づいて、前記CPUへ割込みを出力し、
    前記CPUは、前記割り込みに基づいて、フェールオーバ処理を開始して、前記疑似動作部に保持されている前記レガシーデバイスの内部状態に基づいて、前記複数のシステムのうちの他のシステムにおける他のレガシーデバイスの設定を行い、
    前記疑似レガシーデバイスは、前記フェールオーバ処理が終了するまで、前記CPUからの前記レガシーデバイスへの新たなリクエストに対して、前記擬似動作部において新たなエミュレーションにより新たな期待値を生成し、前記新たな期待値を前記レガシーデバイスからの新たなレスポンスとして前記CPUへ出力する
    多重化装置。
  2. 請求項1に記載の多重化装置において、
    前記擬似レガシーデバイスは、
    前記レガシーデバイスからの前記レスポンスを記憶するレスポンスバッファと、
    前記擬似動作部から出力された前記期待値と、前記レスポンスバッファから出力された前記レスポンスとを比較する比較エラー検出部と、
    前記比較結果に基づいて、前記期待値と前記レスポンスとが一致する場合、前記レスポンスを前記レガシーデバイスからのレスポンスとして前記CPUへ出力し、前記期待値と前記レスポンスとが一致しない場合、前記期待値を前記レガシーデバイスからのレスポンスとして前記CPUへ出力し、前記割込みコントローラへ割込み通知を行う動作部と
    を更に含む
    多重化装置。
  3. 請求項1に記載の多重化装置において、
    前記擬似レガシーデバイスは、
    前記レガシーデバイスからの前記レスポンスを記憶するレスポンスバッファと、
    前記リクエストを前記リクエストバッファで受信してから予め設定された時間以内に、前記レスポンスを前記レスポンスバッファで受信できないタイムアウトを検出するタイムアウト検出部と、
    前記タイムアウトに基づいて、前記擬似動作部から出力された前記期待値を、前記レガシーデバイスからのレスポンスとして前記CPUへ出力し、前記割込みコントローラへ割込み通知を行う動作部と
    を更に含む
    多重化装置。
  4. 請求項に記載の多重化装置において
    記擬似レガシーデバイスは、
    前記レガシーデバイスからの前記レスポンスを記憶するレスポンスバッファと、
    前記擬似動作部から出力された前記期待値と、前記レスポンスバッファから出力された前記レスポンスとを比較する比較エラー検出部と
    を更に含み、
    前記動作部は、前記比較結果に基づいて、前記期待値と前記レスポンスとが一致しない場合、前記割込みコントローラへ割込み通知を行う
    多重化装置。
  5. 請求項1乃至のいずれか一項に記載の多重化装置において、
    前記レガシーデバイスは、タイマーであり、
    前記擬似レガシーデバイスは、擬似的に前記タイマーの動作を行う
    多重化装置。
  6. 多重化装置におけるレガシーデバイス多重化方法であって、
    ここで、前記多重化装置は、多重化された一組の複数のシステムを備え、
    前記複数のシステムの各々は、
    CPUと、
    前記CPUと通信可能に接続された擬似レガシーデバイスと、
    前記擬似レガシーデバイスと通信可能に接続されたレガシーデバイスと
    割込みコントローラと
    を含み、
    (a)前記CPUが前記擬似レガシーデバイスを介して前記レガシーデバイスへリクエストを送信するとき、前記リクエストを記憶するステップと、
    (b)前記擬似レガシーデバイスが、しての前記レガシーデバイスの内部状態及び前記リクエストに対する前記レガシーデバイスのレスポンスの期待値を記憶するステップと、
    (d)前記擬似レガシーデバイスが、前記期待値と前記レガシーデバイスからのレスポンスとが一致する場合、前記レスポンスをそのまま前記CPUへ出力し、前記期待値と前記レスポンスとが一致しない場合、前記期待値を前記レガシーデバイスからのレスポンスとして前記CPUへ出力し、前記割込みコントローラへ割込み通知を行うステップと
    (e)前記割り込みコントローラが、前記割込み通知に基づいて、前記CPUへ割込みを出力するステップと、
    (f)前記CPUが、前記割り込みに基づいて、フェールオーバ処理を開始して、前記疑似動作部に保持されている前記レガシーデバイスの内部状態に基づいて、前記複数のシステムのうちの他のシステムにおける他のレガシーデバイスの設定を行うステップと、
    (g)前記疑似レガシーデバイスが、前記フェールオーバ処理が終了するまで、前記CPUからの前記レガシーデバイスへの新たなリクエストに対して、前記擬似動作部において新たなエミュレーションにより新たな期待値を生成し、前記新たな期待値を前記レガシーデバイスからの新たなレスポンスとして前記CPUへ出力するステップと
    を具備する
    レガシーデバイス多重化方法。
  7. 請求項に記載の多重化装置におけるレガシーデバイス多重化方法において、
    前記(d)ステップは、
    (d1)前記擬似レガシーデバイスが、前記レガシーデバイスからの前記レスポンスを記憶するステップと、
    (d2)前記擬似レガシーデバイスが、前記エミュレーションにより得られる前記期待値と、記憶された前記レスポンスとを比較するステップと、
    (d3)前記擬似レガシーデバイスが、前記比較結果に基づいて、前記期待値と前記レスポンスとが一致する場合、前記レスポンスを前記レガシーデバイスからのレスポンスとして前記CPUへ出力し、前記期待値と前記レスポンスとが一致しない場合、前記期待値を前記レガシーデバイスからのレスポンスとして前記CPUへ出力し、前記割込みコントローラへ割込み通知を行うステップと
    を備え
    レガシーデバイス多重化方法。
  8. 請求項に記載のレガシーデバイス多重化方法において、
    (h)前記擬似レガシーデバイスが、前記リクエストを記憶してから予め設定された時間以内に、前記レガシーデバイスからの前記レスポンスを受信できないタイムアウトを検出するステップと、
    (i)前記擬似レガシーデバイスが、前記タイムアウトに基づいて、前記期待値を、前記レガシーデバイスからのレスポンスとして前記CPUへ出力し、前記割込みコントローラへ割込み通知を行うステップと
    を更に具備する
    レガシーデバイス多重化方法。
  9. 請求項に記載のレガシーデバイス多重化方法において、
    (j)前記レガシーデバイスからの前記レスポンスを記憶するステップと、
    (k)前記期待値と、記憶された前記レスポンスとを比較するステップと、
    (l)前記比較結果に基づいて、前記期待値と前記レスポンスとが一致しない場合、割込みコントローラへ割込み通知を行うステップと
    を更に具備する
    レガシーデバイス多重化方法。
  10. 請求項乃至のいずれか一項に記載のレガシーデバイス多重化方法において、
    前記レガシーデバイスは、タイマーであり、
    前記擬似レガシーデバイスは、擬似的に前記タイマーの動作を行う
    レガシーデバイス多重化方法。

JP2004370255A 2004-12-21 2004-12-21 多重化装置及びレガシーデバイス多重化方法 Expired - Fee Related JP4507875B2 (ja)

Priority Applications (6)

Application Number Priority Date Filing Date Title
JP2004370255A JP4507875B2 (ja) 2004-12-21 2004-12-21 多重化装置及びレガシーデバイス多重化方法
CA002531269A CA2531269A1 (en) 2004-12-21 2005-12-20 Multiplex apparatus and method for multiplexing legacy device
US11/311,283 US7668837B2 (en) 2004-12-21 2005-12-20 Multiplex apparatus and method for multiplexing legacy device
EP05112591A EP1691295A2 (en) 2004-12-21 2005-12-21 Multiplex apparatus and method for multiplexing legacy device
AU2005246988A AU2005246988A1 (en) 2004-12-21 2005-12-21 Multiplex apparatus and method for multiplexing legacy device
CNA2005101338196A CN1794188A (zh) 2004-12-21 2005-12-21 多重设备和多重化旧版本设备的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2004370255A JP4507875B2 (ja) 2004-12-21 2004-12-21 多重化装置及びレガシーデバイス多重化方法

Publications (2)

Publication Number Publication Date
JP2006178688A JP2006178688A (ja) 2006-07-06
JP4507875B2 true JP4507875B2 (ja) 2010-07-21

Family

ID=36129717

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2004370255A Expired - Fee Related JP4507875B2 (ja) 2004-12-21 2004-12-21 多重化装置及びレガシーデバイス多重化方法

Country Status (6)

Country Link
US (1) US7668837B2 (ja)
EP (1) EP1691295A2 (ja)
JP (1) JP4507875B2 (ja)
CN (1) CN1794188A (ja)
AU (1) AU2005246988A1 (ja)
CA (1) CA2531269A1 (ja)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5380978B2 (ja) * 2008-09-26 2014-01-08 富士通株式会社 伝送装置、伝送装置の制御方法および伝送装置の制御プログラム
US8583748B2 (en) * 2010-09-01 2013-11-12 At&T Mobility Ii, Llc Method and apparatus for messaging service internetworking
WO2017019052A1 (en) * 2015-07-29 2017-02-02 Applied Micro Circuits Corporation Generating a timeout signal based on a clock counter associated with a data request
JP7103231B2 (ja) * 2017-01-13 2022-07-20 日本電気株式会社 コネクション管理ユニット、およびコネクション管理方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6442756A (en) * 1987-08-11 1989-02-15 Hitachi Ltd Interface cable extending device
JPH077008Y2 (ja) 1987-09-10 1995-02-22 株式会社神戸製鋼所 連続鋳造機のダミーバ格納装置
JPH05298204A (ja) * 1992-04-15 1993-11-12 Hokuriku Nippon Denki Software Kk 入出力処理装置試験回路
JPH09146853A (ja) 1995-11-20 1997-06-06 Hitachi Ltd 二重化計算機及びその障害系復旧方法
JPH11232206A (ja) 1998-02-19 1999-08-27 Mitsubishi Electric Corp 入出力制御回路
US6370593B1 (en) * 1999-02-04 2002-04-09 Micron Technology, Inc. Apparatus for multiplexing bus interfaces on a computer expansion
JP3914771B2 (ja) * 2002-01-09 2007-05-16 株式会社日立製作所 パケット通信装置及びパケットデータ転送制御方法

Also Published As

Publication number Publication date
JP2006178688A (ja) 2006-07-06
US7668837B2 (en) 2010-02-23
AU2005246988A1 (en) 2006-07-06
CN1794188A (zh) 2006-06-28
EP1691295A2 (en) 2006-08-16
US20060136607A1 (en) 2006-06-22
CA2531269A1 (en) 2006-06-21

Similar Documents

Publication Publication Date Title
US20050204123A1 (en) Boot swap method for multiple processor computer systems
JP5287974B2 (ja) 演算処理システム、再同期方法、およびファームプログラム
EP2784677A1 (en) Processing apparatus, program and method for logically separating an abnormal device based on abnormality count and a threshold
JP4507875B2 (ja) 多重化装置及びレガシーデバイス多重化方法
JP5034979B2 (ja) 起動装置、起動方法、及び、起動プログラム
JP2017146833A (ja) 監視装置、フォールトトレラントシステムおよび方法
EP1703393B1 (en) Error notification method and apparatus for an information processing system carrying out mirror operation
JP4572138B2 (ja) サーバ装置、サーバシステム、及びサーバシステムでの系切り換え方法
JP6256087B2 (ja) ダンプシステムおよびダンプ処理方法
JP6654662B2 (ja) サーバ装置およびサーバシステム
JPH11120154A (ja) コンピュータシステムにおけるアクセス制御装置および方法
JP6554801B2 (ja) 冗長通信装置及びその制御方法
JP2003330905A (ja) コンピュータシステム
JP2004013723A (ja) 共有メモリを使ったクラスタ構成を採用した情報処理システムの障害処理装置と方法
JP4066950B2 (ja) コンピュータシステムおよびその保守方法
JPH08185329A (ja) データ処理装置
JP2937857B2 (ja) 共通記憶装置のロックフラグ解除方式および方法
US11232197B2 (en) Computer system and device management method
JP4983806B2 (ja) 二重化タイマを用いたシステム監視装置、および監視方法
JP2007058549A (ja) マルチコンピュータモジュールシステム、マルチコンピュータモジュール方法、および、プログラム
JPH05282224A (ja) 通信制御装置
JP2001175545A (ja) サーバシステムおよび障害診断方法ならびに記録媒体
JPH06214831A (ja) 中央処理装置の異常検出装置
JPH0667909A (ja) 障害回復方式
JPH06231098A (ja) マルチプロセッサシステムの制御方式

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20081128

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20081210

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20090209

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20090918

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20091109

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: 20100413

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20100426

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20130514

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees