(57)【特許請求の範囲】
【請求項１】
プロセッサと、カーネル部を含み且つ前記カーネル部へのアクセスを許容する特権実行モード及び前記カーネル部へのアクセスを許容しない非特権実行モードを含むオペレーティング・システムと、前記非特権実行モードで動作する複数のユーザ・モード・ストリングとを備えたコンピュータ装置において、ユーザ・モード・プロセスが特権実行モードで動作することを可能にする方法であって、
（ａ）前記プロセッサによって、１つ以上の指定されたタスクを遂行するために前記特権実行モードで動作するための要求を第１ユーザ・モード・ストリングから受け取るステップと、
（ｂ）前記プロセッサによって、前記第１ユーザ・モード・ストリングが前記特権実行モードで動作することを承認するステップと、
（ｃ）前記プロセッサによって、前記第１ユーザ・モード・ストリングが前記特権実行モードを使用して前記１つ以上の指定されたタスクを遂行することを承認するステップと、
（ｄ）前記プロセッサによって、前記第１ユーザ・モード・ストリングが前記１つ以上の指定されたタスクの完了後に前記特権実行モードで動作することを許容するステップとを含み、
前記ステップ（ａ）、前記ステップ（ｂ）、及び前記ステップ（ｃ）が、システムコールを介して前記カーネル部をアクセスすることを含まない、方法。
【請求項２】
前記ステップ（ａ）が、前記コンピュータ装置の始動時に、前記プロセッサによって、前記特権実行モードにおいて動作するための前記要求を前記第１ユーザ・モード・ストリングから受け取ることを含む、請求項１に記載の方法。
【請求項３】
前記コンピュータ装置のシャットダウン時に、前記プロセッサによって、前記第１ユーザ・モード・ストリングが前記特権実行モードで動作することについての前記承認を取り下げるステップを更に含む、請求項２に記載の方法。
【請求項４】
前記特権実行モードで動作することに対する承認を受けた後、前記プロセッサによって、前記第１ユーザ・モード・ストリングからのシステム割込みを禁止するステップと、
前記１つ以上の指定されたタスクを完了した後、前記プロセッサによって、前記第１ユーザ・モード・ストリングからのシステム割込みを可能にするステップとを更に含む、請求項２に記載の方法。
【請求項５】
前記オペレーティング・システムがＬｉｎｕｘ（登録商標）である、請求項１に記載の方法。
【請求項６】
前記ステップ（ａ）が、前記プロセッサによって、関数 echo“1”>/proc/user_privmode を実行するステップを更に含む、請求項５に記載の方法。
【請求項７】
前記オペレーティング・システムが、フラグを備える変数 processestask_structを含み、
前記プロセッサによって、前記フラグを「１」にセットするステップを更に含む、請求項６に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ユーザ・モード・ストリング、即ち、ユーザ・モード・プロセスが特権実行モードで動作することを可能にするための方法に関する。
【背景技術】
【０００２】
コンピュータ・プロセッサ及び関連のオペレーティング・システムが２つの異なるレベルのリソース及び保護を有することは一般的なことである。非特権モード又はユーザ・モードと呼ばれる１つのレベルは、種々のオペレーティング・システム・コンポーネント、アプリケーション・プログラム、及び他のいわゆる「ユーザ」プロセス又はプログラムによって使用される。このレベルでは、実行スレッドが、或るセキュリティ・クリティカルなオペレーションを遂行することを、オペレーティング・システムによって及びコンピュータ・プロセッサによって阻止される。そのスレッドは、多くのシステム・リソースを直接にアクセスすることも阻止される。非特権実行モードの目的は、ユーザ・プロセスが他のユーザ・プロセス又はオペレーティング・システム機能を妨害しないように、できるだけユーザ・プロセスを隔離することである。
【０００３】
ユーザ・モード・ドライバは、保護されたサブシステム・コードを含む他のアプリケーション・コードが実行されるという非特権プロセッサ・モードで動作する。ユーザ・モード・ドライバは、システム・サービスをコールするシステムコールを行うことによる以外では、システム・データに対するアクセスを得ることができない。ユーザ・プロセスは、クラッシュすることがあり得るが、他のプログラム又はオペレーティング・システムをクラッシュさせることがあってはならない。
【０００４】
もう１つの実行レベルは、特権モード、システム・モード、又はカーネル・モードと呼ばれる。クリティカルなオペレーティング・システム・コンポーネントはカーネル・モードにおいて実装される。カーネル・モード・コンポーネントは、割込み及び例外に応答し、実行スレッドをスケジュールし、複数のプロセッサの活動を同期化し、他のクリティカルまたはセンシティブな機能を遂行するという仮想メモリ管理のようなことを担う。システム・モードにおいて実行されるこのようなコンポーネントは、集合的に「カーネル」と一般に呼ばれている。
【０００５】
カーネル・モード・ドライバは、１つ以上の保護されたサブシステムをサポートする基礎オペレーティング・システム・コンポーネントであるオペレーティング・システム・エグゼクティブの一部として動作する。ユーザ・モード・ドライバ及びカーネル・モード・ドライバは、異なる構造、異なるエントリ・ポイント、及び異なるインターフェースを有する。デバイスがユーザ・モード・ドライバ又はカーネル・モード・ドライバのどちらを必要とするかは、そのデバイスのタイプと、オペレーティング・システムにおいて既にそれに与えられたサポートとに依存する。或るデバイス・ドライバは、全体的に又は部分的にユーザ・モードで動作することが可能である。ユーザ・モード・ドライバは、無制限のスタック・スペース、１つ以上のＡＰＩに対するアクセス、及び容易なデバッグを有する。
【０００６】
ほとんどのデバイス・ドライバは、カーネル・モードで動作する。カーネル・モード・ドライバは、或る保護されたオペレーションを遂行することができ、ユーザ・モード・ドライバがアクセスすることができないシステム構造をアクセスすることができる。アクセスの増加は、高価なものとなるが、その理由は、デバッグをより難しいものにし、システム破壊の機会を多くするという点にある。コードが特権カーネル・モード環境で動作するとき、オペレーティング・システムは、設計によっては、データ保全性及び要求の有効性に関するチェックをわずかしか遂行しない。
【発明の開示】
【発明が解決しようとする課題】
【０００７】
本発明は、ユーザ・モード・プロセスが特権実行モードで動作することを可能にするための方法を含む。本発明の方法は、コンピュータ装置、特権実行モード及び非特権実行モードを含むオペレーティング・システム、及び非特権実行モードで動作する複数のユーザ・モード・ストリングを提供する。
【課題を解決するための手段】
【０００８】
コンピュータ装置は、１つ以上の指定されたタスクを遂行するために特権実行モードで動作するための要求を第１ユーザ・モード・ストリングから受け取る。本発明の方法は、第１ユーザ・モード・ストリングが特権実行モードで動作することを承認し、第１ユーザ・モード・ストリングは、特権実行モードを使用してそれらの１つ以上の指定されたタスクを遂行する。本発明の方法は、その１つ以上の指定されたタスクの終了後、第１ユーザ・モード・ストリングが特権実行モードで動作することを継続して許容する。
【発明を実施するための最良の形態】
【０００９】
図面を参照すると、いずれの図においても同じ参照番号が同じ部品に対応する。本発明は、２つ以上のクラスタを含む情報記憶及び検索システムにおいて具体化されるものとして開示される。これらのクラスタの各々は、１つ以上のプロセッサ、１つ以上のデータ・キャッシュ、及び１つ以上の揮発性記憶装置を含む。しかし、本発明は、コンピュータ装置に設けられたオペレーティング・システム内に配置されたストリングが特権実行モードで動作することを承認するために適用することができるので、本発明の方法に関する以下の説明は、本発明を一般的なデータ処理システムに限定することを意味するものではなく、或いは、複数のクラスタを含むデータ処理システムに限定することを意味するものでもない。
【００１０】
図１の実施例では、本願の情報記憶及び検索システム１００が第１クラスタ１０１Ａ及び第２クラスタ１０１Ｂを含む。各クラスタは、それぞれ、プロセッサ部分１３０／１４０及び入出力（Ｉ／Ｏ）部分１６０／１７０を含む。各クラスタにおける内部ＰＣＩバスが、それぞれ、プロセッサ部分１３０／１４０及びＩ／Ｏ部分１６０／１７０の間のリモートＩ／Ｏブリッジ１５５／１６５を介して接続される。
【００１１】
情報記憶及び検索システム１００は、更に、４つのホスト・ベイ１０１、１０６、１１１、及び１１６に配置された複数のホスト・アダプタ１０２〜１０５、１０７〜１１０、１１２〜１１５、及び１１７〜１２０を含む。各ホスト・アダプタは、１つ以上のファイバ・チャネル・ポート、１つ以上のＦＩＣＯＮポート、１つ以上のＥＳＣＯＮポート、或いは、１つ以上のＳＣＳＩポートを含むことが可能である。各ホスト・アダプタは、各クラスタがいずれのホスト・アダプタからもＩ／Ｏを処理できるように１つ以上の共通プラットフォーム相互接続バス１２１を介して両方のクラスタに接続される。
【００１２】
プロセッサ部分１３０は、マイクロコード１３１、プロセッサ１３２、キャッシュ１３４、及びオペレーティング・システム１３５を含む。或る実施例では、プロセッサ部分１３０は、更にメモリ装置１３３を含む。或る実施例では、メモリ装置１３３はランダム・アクセス・メモリを含む。或る実施例では、メモリ装置１３３は不揮発性メモリを含む。
【００１３】
プロセッサ部分１４０は、マイクロコード１４１、プロセッサ１４２、キャッシュ１４４、及びオペレーティング・システム１４５を含む。或る実施例では、プロセッサ部分１４０は、更にメモリ装置１４３を含む。或る実施例では、メモリ装置１４３はランダム・アクセス・メモリを含む。或る実施例では、メモリ装置１４３は不揮発性メモリを含む。
【００１４】
Ｉ／Ｏ部分１６０は、不揮発性記憶装置（ＮＶＳ）１６２及びＮＶＳバッテリ１６４を含む。Ｉ／Ｏ部分１７０は、ＮＶＳ１７２及びＮＶＳバッテリ１７４を含む。
【００１５】
Ｉ／Ｏ部分１６０は、更にデバイス・アダプタ１６５、１６６、１６７、及び１６８のような複数のデバイス・アダプタ、並びに、２つのアレイ、即ちアレイ「Ａ」及びアレイ「Ｂ」に編成された１６個のディスク・ドライブを含む。図１の実施例は、２つのディスク・アレイを示す。別の実施例では、本願の情報記憶及び検索システム１００は３つ以上のハードディスク・アレイを含む。ドライブの各アレイは、ホスト・コンピュータにとっては１つ以上の論理ドライブのように見える。
【００１６】
或る実施例では、アレイ「Ａ」及び「Ｂ」はＲＡＩＤプロトコルを利用する。或る実施例では、アレイ「Ａ」及び「Ｂ」は、ＪＢＯＤ（Just a Bunch Of Disks）アレイと呼ばれるものを含む。この場合、そのアレイは、ＲＡＩＤに従って構成されたものではない。当業者には明らかであるように、ＲＡＩＤ（Redundant Array of Independent Disks）のランクは、単一の大型ドライブの性能、容量、及び信頼性を越える性能、容量、及び信頼性を得るためにディスク・ドライブのアレイの形に構成された独立したディスク・ドライブを含む。
【００１７】
図１の実施例においては、ディスク・アレイ「Ａ」は、ディスク・ドライブ１８１、１８２、１８３、１９１、１９２、１９３、及び１９４を含む。ディスク・アレイ「Ｂ」は、ディスク・ドライブ１８５、１８６、１８７、１８８、１９６、１９７、及び１９８を含む。
【００１８】
例えば、マイクロコード１３１（図１）のような情報記憶及び検索システムのマイクロコードがハードウェアをアクセスして、データ構造及びキャッシュを直接に管理するためには、そのマイクロコードが実行されている間、特権実行モード・アクセスが必要である。Ｌｉｎｕｘ（登録商標）の下で実行されるユーザ・モード・バイナリ・アプリケーションのようなシステムのマイクロコードをコンパイルするために、本発明者は、Ｌｉｎｕｘ（登録商標）カーネルのＰｏｗｅｒＰＣブランチを修正して、ルート・パーミッション（ＵＩＤ ０）を有するユーザ・モード・アプリケーションがプロセッサ１３２（図１）のようなプロセッサを使用して特権命令モードで実行するのを可能にした。
【００１９】
次に、図２を参照すると、本発明の方法は、ステップ２１０において、プロセッサ、複数のユーザ・ストリング、及びオペレーティング・システムを含むコンピュータ装置を提供する。このオペレーティング・システムは特権実行モード及び非特権実行モードを含む。或る実施例では、ステップ２１０のコンピュータ装置は、例えば、システム１００のような情報記憶及び検索システムを含む。
【００２０】
ステップ２２０において、複数のユーザ・ストリングの１つ、即ち第１ユーザ・モード・ストリング（以下「要求元ストリング」とも称する）が、１つ以上の指定されたタスクを遂行するために特権実行モードで動作するよう要求する。例えば、ユーザ・ストリングは、システム割込みを禁止されたマイクロコードを実行するために特権実行モードで動作するよう要求することが可能である。或る実施例では、ステップ２２０の要求は、要求元ストリングが「priv_usermode」で、即ち特権実行モードで動作することを可能にするための要求を含む。
【００２１】
或る実施例では、ステップ２２０の要求は、オーバライドされたシステムコールを通して活動化される。別の実施例では、本願の「priv_usermode」機構が、デバイス・ドライバ・インターフェースを通して活動化される。或る実施例では、ルート・レベル・アクセスを伴うプロセスが、例えば「/proc/user_privmode」のような「user_privmode」ステータスを、プロセッサ・ファイルを介してセット／照会することが可能である。
【００２２】
或る実施例では、本発明の方法はステップ２２０からステップ２５０に移る。別の実施例では、本発明の方法はステップ２２０からステップ２３０に移る。ステップ２３０では、本発明の方法は、要求元ストリングが特権実行モードを使用することを承認されるかどうかを決定する。或る実施例では、例えばマイクロコード１３１のようなシステムのマイクロコードは、どのユーザ・モード・ストリングが特権実行モードにおいて動作することを承認されるかを表すルックアップ・テーブルを含む。或る実施例では、特権実行モードにおいて動作することを承認されたユーザ・モード・ストリングは、それを表すフラグを含む。
【００２３】
要求元ストリングが特権実行モードで動作することを許容されないということを、ステップ２３０において決定する場合、本発明の方法はステップ２３０からステップ２４０に移る。ステップ２４０において、本発明の方法は、特権実行モードで動作するためのステップ２２０の要求を拒否する。これとは別に、要求元ストリングが特権実行モードで動作することを許容されることをステップ２３０において決定する場合、本発明の方法はステップ２３０からステップ２５０に移る。ステップ２５０において、本発明の方法は、要求元ストリングが特権実行モードで動作することを承認する。
【００２４】
或る実施例では、要求元ストリングが「echo“1”./proc/user_privmode」機能を使用して user_privmode 機構を活動化する。procファイルへの書き込みを処理するとき、user_privmode カーネル・モジュールがprocessestask_struct に設けられたフラグを修正する。このフラグは、user_privmode 機構が活動化されていないことを表すために、当初は０にセットされる。機能“current-is_priv_priv_user”の呼び出しは、そのフラグを１にセットする。このフラグを１にセットした後、フラグは、ユーザ状態に戻るカーネル例外コードによってチェックすることが可能である。或る実施例では、このフラグを１にセットした後、フラグは、スーパバイザ・ビットをセットするためのカーネル例外/ret_to_user コードによってチェックすることが可能である。
【００２５】
ステップ２６０において、本発明の方法は、要求元ストリングがステップ２２０の１つ以上の指定されたタスクを完了した後でも、ステップ２２０の要求元ストリングを特権実行モードで動作させ続ける。或る実施例では、特権実行モードで動作することの承認は、情報記憶及び検索システム１００のようなコンピュータ装置がシャットダウンするまで、要求元ストリングから取り下げられることはない。
【００２６】
本発明の装置及び方法に関する或る実施例では、例えば、システム１００のような本願のコンピュータ装置は、例えば、オペレーティング・システム１３５（図１）及び／又は１４５（図１）のようなオペレーティング・システムを利用する。或る実施例では、オペレーティング・システムは、Ｌｉｎｕｘ（登録商標）の修正を含む。当業者には明らかであるように、Ｌｉｎｕｘ（登録商標）は、世界中の開発者の助けで Linus Torvalds によって最初に作成された自由なＵｎｉｘ（登録商標）タイプのオペレーティング・システムである。ＧＮＵ一般公有使用許諾（General Public License）の下で開発されたＬｉｎｕｘ（登録商標）のためのソース・コードは自由に利用可能である。
【００２７】
更に当業者には明らかであるように、そして図３を参照すると、Ｌｉｎｕｘ（登録商標）は、非特権実行モードにおいて動作する、コンポーネント３１０を含む複数のオペレーティング・システム・コンポーネントを含む。オペレーティング・システムのユーザ・モード・コンポーネント３１０は、例えば種々のユーザ・モード・ストリングを含む。オペレーティング・システムのユーザ・モード・コンポーネント３１０は、例えばアプリケーション３４０、アプリケーション３５０、アプリケーション３６０等のような複数のアプリケーションとインターフェースする。
【００２８】
ユーザ・モード・ストリングを含む非特権実行モードで動作するそれら複数のオペレーティング・システム・コンポーネントは、特権実行モードで動作する、カーネル・モード・ストリングを含む複数のオペレーティング・システム・コンポーネント３２０と通信する。カーネル・モード・オペレーティング・システム・コンポーネント３２０は、特に１つ以上のシステム・ハードウェア・デバイス３３０と通信する。当業者には明らかであるように、それらの複数のカーネル・モード・オペレーティング・システム・コンポーネント３２０は、集合的に「カーネル」と呼ばれることもある。
【００２９】
ＰｏｗｅｒＰＣのＬｉｎｕｘ（登録商標）カーネルは、割り込みされたプロセスがカーネル又はユーザ・モード・スペースにおいて実行されつつあったかどうかを決定するためにＭＳＲレジスタのＭＳＲ＿ＰＲビットを使用する。従って、ユーザ・モード・プロセスがＭＳＲ＿ＰＲビットのオンにより実行される場合、カーネルは、そのコードが実際にそのカーネルにあるものと間違って仮定することがある。この問題を回避するために、本願の user_privmode コードは、カーネルにエントリする時に実行され、カーネル・コードがユーザ・スペースに戻るときに実行されるであろう。これらの時点で、task_struct に隠された付加的な変数がチェックされ、そして、必要な場合には、実行中であったコードがユーザ・コード又はカーネル・コードを含むかどうかを知るためにすべてのカーネル・コードがチェックされる前に、ＭＳＲ＿ＰＲビットがＳＲＲ１、即ち、ユーザ・コンテキストＭＳＲから除去される。付加的な変数が task_struct に加えられ、８ＫＢのカーネル・スタックの末端に記憶される。
【００３０】
表１は、本願のオペレーティング・システムが linux/sched.h において含む或る修正を示す。
【表１】
0004898155.tif 000002
【００３１】
Ｌｉｎｕｘ（登録商標）カーネルへのエントリ時に実行されるコードは、すべてのＰｏｗｅｒＰＣ例外 EXCEPTION_PROLOG の前に含まれるマクロとして置かれる。表２は、本願のオペレーティング・システムが linux/arc/ppc/kernel/head.S において含む或る修正を示す。
【表２】
0004898155.tif 000003
【００３２】
表３は、Ｌｉｎｕｘ（登録商標）カーネル例外ハンドラからユーザ・モードに戻る際に実行されるコードである linux/arch/ppc/kernel/entry/S に対する修正を示す。
【表３】
0004898155.tif 000004
【００３３】
或る実施例では、表２に示された個々のステップを結合すること、削除すること、または再順序付けすることが可能である。
【００３４】
或る実施例では、本発明は、メモリ１３３（図１）にある命令を含む。それらの命令は、図２に示されたステップ２２０，２３０、２４０、２５０、及び２６０を遂行するためにプロセッサ１３２（図１）によって実行される。なお、ステップ２２０はユーザ・モード・ストリングから要求を受け取ることを含む。別の実施例では、本発明は他の任意のコンピュータ・プログラム製品にある命令を含む。それらの命令は、図２に示されたステップ２２０，２３０、２４０、２５０、及び２６０を遂行するために、システム１００の外部又は内部におけるコンピュータによって実行される。その場合、ステップ２２０は、ユーザ・モード・ストリングから要求を受け取ることを含む。いずれの場合も、例えば、磁気情報記憶媒体、光学的情報記憶媒体、電子的情報記憶媒体等を含む情報記憶媒体において、命令を符号化することが可能である。本発明では、「電子的記憶媒体」は、例えばＰＲＯＭ、ＥＰＲＯＭ、ＥＥＰＲＯＭ、フラッシュＰＲＯＭ、コンパクトフラッシュ（登録商標）、スマートメディア等のようなデバイスを意味する。
【００３５】
本発明の好適な実施例を詳しく説明したが、「特許請求の範囲」に示された本発明の範囲を逸脱することなく、これらの実施例に対する修正及び改良が当業者にとって想起し得るものであることは明らかであろう。
【図面の簡単な説明】
【００３６】
【図１】本発明の情報記憶及び検索システムの一実施例を示すブロック図である。
【図２】本発明の方法のステップを要約したフローチャートである。
【図３】ユーザ・モード・オペレーティング・システム・コンポーネントとカーネル・モード・オペレーティング・システム・コンポーネントとの間の関係を示すブロック図である。
【図１】
0004898155.tif 000005
【図２】
0004898155.tif 000006
【図３】
0004898155.tif 000007