(57)【要約】【課題】稼動中のオペレーティングシステムのメモリにライブパッチを適用し動的に問題を修正する方法があるが、従来技術ではプロセスが共有メモリにアクセスした場合など適用できない問題があった。【解決手段】本発明はＮＭＩハンドラを操作し全てのＣＰＵ処理を停止させ、適用パッチ処理範囲を事前に確認した上で適用する方法を採用することでＣＰＵの処理状況に依存せずパッチ適用を方法を用いて解決する。【選択図】  図１
2008020971.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサが共有メモリを参照しているコンピュータシステムにおいて、システム稼動中においてバイナリパッチを適用する手段を有することを特徴としたコンピュータシステム。
【請求項２】
複数のプロセッサ、およびこれらのプロセッサが共有参照する記憶手段を有することを特徴とした請求項１記載のコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は稼動中のオペレーティングシステム上でパッチを適用する際、オペレーティングシステムの動作に支障を来たすことなくパッチを適用することを保証する方法に関するものである。
【背景技術】
【０００２】
従来は特開平５−１１９９９７号公報に記載のように、複数のプロセッサ上で稼動するオペレーティングシステムに対して複数のプロセッサの同期を取った後にパッチを適用する方式でパッチを適用できるようになっていた。
【０００３】
【特許文献１】特開平５−１１９９９７号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
上記従来技術は、パッチを適用するシステムの条件として複数のプロセッサがメモリを共有していないシステムを対象としているため、オペレーティングシステムが稼動している状態でのパッチ適用を実現するシステムを提供できるには実用上不十分であった。
【０００５】
本発明の目的は、プロセスのメモリ参照方法に依存せず業務システムの運用を中にパッチが適用できることを保証する方法を提供することを最も主要な特徴とする。
【課題を解決するための手段】
【０００６】
上記目的を達成するために、パッチ指示を受信したプロセッサはＮＭＩ(Non-Maskable Interruput)ハンドラの実行処理内容を一時的に書き換え、他のプロセッサがＮＭＩを受信したら一時停止するようにしたものである。
【０００７】
パッチ指示を受信したプロセッサは他プロセッサに対してＮＭＩ送信する機能を備えたものである。
【０００８】
さらにパッチ指示を受信したプロセッサはＮＭＩハンドラを元の状態に戻す機能を備えたものである。
【０００９】
さらにパッチ指示を受信したプロセッサは他のプロセッサの停止位置が適用するパッチと干渉するか確認し、干渉する場合、適用処理の実行をあきらめ時間を置いてパッチ受信を実現する機能を備えたものである。
【００１０】
さらにパッチ指示を受信したプロセッサはパッチを適用するためメモリを書き換える機能を備えたものである。パッチ適用後に他プロセッサの動作を再開する機能を備えたものである。
【００１１】
さらに、上記目的を実現するため、一貫して各機能を計算機により構築していることを特徴としたものである。
【発明の効果】
【００１２】
本発明によれば、複数のプロセッサが共有したメモリを参照する場合においてオペレーティングシステムの動作に影響を与えることなくパッチを適用できるという利点がある。
【００１３】
また、本発明によればパッチの適用可否について問題ないことを判断し、パッチ適用に問題がある場合、時間をおいてパッチ適用できるため、パッチ適用時のオペレーティングシステムの動作保障を提供できるという利点がある。
【発明を実施するための最良の形態】
【００１４】
以下、本発明を実施するための最良の形態を図面に基づいて詳細に説明する。
図１は本発明における一実施例であるライブパッチシステムの構成を示すものである。
本実施例ではシステム１にＣＰＵ３とメモリ４、およびディスク装置３０が割り当てられている。本実施例ではユーザ２がメモリ４上に読み込まれているパッチ適用処理６を実行する際ＣＰＵ#0７がパッチ適用処理６を実行しているが、ＣＰＵ３に配置されている他のＣＰＵがパッチ適用処理６を実行してもよい。ＣＰＵ＃０７、ＣＰＵ＃１１３、ＣＰＵ＃２１４、ＣＰＵ＃３１５はシステム装置に組み込まれている。
ＮＭＩハンドラ８はマスク不可能な割り込み機構であり、本方式では割り込み禁止ＣＰＵを含め全てのＣＰＵ制御権を奪い一時的に停止させるために使用される。エントリポイント９はＮＭＩハンドラの処理内容を切り替えるためのポインタである。
既定のＮＭＩハンドラ１０はＯＳ既定のNMI処理を実現できるが、パッチ用ハンドラ１１はＣＰＵの処理を一時的に停止させるための処理が呼びだされるよう設定する。なお各ＣＰＵはパッチ用ハンドラ１１の呼び出し処理を実行すると現在の処理を実行している停止番地テーブル１２に情報が格納される。
【００１５】
本実施例では全てのＣＰＵがＮＭＩ処理を共有することができ、エントリポイント９の書き換えにより既定のＮＭＩハンドラ１０、およびパッチ用ハンドラ１１が切替可能であることを仮定している。
【００１６】
カーネルコンテキスト１６はＯＳが実行しているプロセスの実行中のスタック情報が格納されている。カーネル１７は本実施例においてパッチファイルの適用対象のメモリとなる。
【００１７】
図２は図１で示したパッチ適用処理６においてパッチ適用可否判断方法について詳細化したものである。カーネルコンテキスト１６はOSが稼動している各プロセスのスタック情報のスタックトレース情報１８〜２０を格納している。またパッチ投入バッファ５には適用するパッチ情報２１が格納される。パッチ情報２１にはパッチ適用位置を決定する開始アドレス２２、パッチ適用危険領域２３はパッチ適用時にＣＰＵが処理を実行していると適用後に処理中の内容に不整合が発生してしまうアドレスの一覧が格納される。パッチデータ２４は適用するパッチデータを示す。パッチデータサイズ２５は適用するパッチデータのサイズを示す。カーネルコンテキスト１６は、パッチ適用処理６の実行によってCPUが動作を停止する際に状態が決定する。パッチ適用開始アドレス２２、パッチ適用危険領域２３、パッチデータ２４、およびパッチデータサイズ２５はいずれもパッチ情報３０の作成者が定義する。
【００１８】
図３はパッチ適用処理の流れについて示す。ユーザ２がパッチ適用処理６を実行すると、パッチ投入バッファ格納処理を呼び出し、パッチ情報３０をパッチ投入バッファ５に格納する(ステップ１０２) 。次にパッチ適用処理を呼び出しパッチを適用する(ステップ１０３)。
【００１９】
図４はパッチ適用処理を実行するCPUの処理の流れについて示したものである。パッチ適用処理を実行したＣＰＵはＮＭＩ受信時の挙動を決定するエントリポイント９が指す実行番地をパッチハンドラ１１に切り替える（ステップ２０１）。パッチ適用処理を実行したＣＰＵは残り全てのＣＰＵに対してＮＭＩを通知する(ステップ２０２)。パッチ適用処理を実行しているＣＰＵはＮＭＩハンドラのエントリポイント９を既定のＮＭＩハンドラ１０に切り替える(ステップ２０３)。パッチ適用処理処理を実行したＣＰＵは残り全てのＣＰＵがパッチ用ハンドラ処理を実行(一時停止状態)になっているか確認をする。もし、残り全てのＣＰＵが一時停止状態に遷移していない場合、一定時間時間後に残り全てのＣＰＵが一時停止状態に遷移しているかを確認する処理を再実行する（ステップ２０４）。適用するパッチが他のＣＰＵの処理と干渉していないか確認処理を実行結果を確認する(ステップ２０５)。パッチを適用しても影響ないと判断した場合パッチを適用する(ステップ２０６)。適用パッチが他のＣＰＵが実行する処理に影響を与えると判断した場合、パッチ適用処理は一定時間後に再投入される（ステップ２０７）。パッチ適用後、ＮＭＩハンドラを送信し、他のＣＰＵの一時停止処理を解除する（ステップ２０８）。
【００２０】
図５はパッチ適用処理からＮＭＩ通知を受信するＣＰＵの処理の流れについて示したものである。ＮＭＩハンドラを受信するとＣＰＵはＮＭＩハンドラが指定した処理(パッチ用ハンドラ１１)を実行する。アドレスを停止番地テーブル１２に格納する。なお、パッチ用ハンドラ１１はＣＰＵの処理を一時停止する処理内容になっている(ステップ３０２)。パッチ適用処理を実行するＣＰＵがＮＭＩハンドラを通知するまでの一時停止処理の状態を継続する（ステップ３０３）。ＣＰＵがＮＭＩハンドラを通知すると停止番地テーブル１２に格納したアドレスを読み込み、パッチ適用前に実行していた処理を継続する(ステップ３０４)。
【００２１】
図６はＣＰＵがパッチ適用可否について判定する処理の流れ（ステップ２０５）の詳細を示す。パッチ適用処理６はパッチ適用開始アドレス２２、およびパッチデータサイズ２５の情報からカーネル１７に適用するパッチデータのアドレス範囲を算出する（ステップ４０１）。パッチ適用処理６はカーネルコンテキスト１６に登録されているスタックトレース情報１９〜２１にステップ４０１で算出したパッチ適用アドレスの範囲が含まれているか確認する（ステップ４０２）。ステップ４０１で算出したパッチ適用アドレスの範囲がが含まれていた場合、パッチ適用は不可と判断する(ステップ４０６)。ステップ４０１で算出したパッチ適用アドレスの範囲が含まれていない場合、パッチ適用危険領域２３のアドレスを読み出す。カーネルコンテキストのスタックトレースアドレスに適用危険領域アドレスが含まれているか確認する（ステップ４０４）。適用危険領域アドレスがスタックトレース情報(１９〜２１)に含まれていた場合、パッチ適用は不可と判断する(ステップ４０６)。スタックトレースアドレスにパッチ適用危険領域アドレスが含まれていなかった場合パッチ適用可能と判断する(ステップ４０５)。
【図面の簡単な説明】
【００２２】
【図１】本発明の実施方法の全体構成を示した説明図である。
【図２】パッチ適用判断の実施方法を詳細に示した説明図である。
【図３】パッチ投入処理の流れを示すフローチャートである。
【図４】パッチ適用処理の流れを示すフローチャートである。（NMIを送信する側）
【図５】パッチ適用処理の流れを示すフローチャートである。（NMIを受信する側）
【図６】パッチ適用処理時の適用可否を判断処理の流れを示すフローチャートである。
【符号の説明】
【００２３】
１      システム装置
２      ユーザ
３      ＣＰＵ
４      メモリ
５      パッチ投入バッファ
６      パッチ適用処理
７      ＣＰＵ＃０
８      ＮＭＩハンドラ
９      エントリポイント
１０    既定のＮＭＩハンドラ
１１    パッチ用ハンドラ
１２    停止番地テーブル
１３    ＣＰＵ＃１
１４    ＣＰＵ＃２
１５    ＣＰＵ＃３
１６    カーネルコンテキスト
１７    カーネル
１８    スタックトレース
１９    スタックトレース
２０    スタックトレース
２１    パッチ情報
２２    パッチ適用開始アドレス
２３    パッチ適用危険領域
２４    パッチデータ
【図１】
2008020971.tif 000003
【図２】
2008020971.tif 000004
【図３】
2008020971.tif 000005
【図４】
2008020971.tif 000006
【図５】
2008020971.tif 000007
【図６】
2008020971.tif 000008