(57)【特許請求の範囲】
【請求項１】
データベースにおける情報を操作するためにルーチンを実行する、データベースサーバによって実行される、方法であって：  データベースマニピュレーションルーチンが特定メモリ範囲から分離されるか否かを決定し；  前記決定に基づいてデータベースマニピュレーションルーチンに対するメモリアクセス許可を、局所手順呼出しを介して、選択的に切り替える段階であって、前記データベースマニピュレーションルーチンが前記特定メモリ範囲から分離されるルーチンであると決定されたならば該データベースマニピュレーションルーチンに対する前記メモリアクセス許可を前記特定メモリ範囲に対する読取り専用に設定するものと；かつ  前記選択的に切り替えたメモリアクセス許可を用いて前記データベースマニピュレーションルーチンを実行する段階を具備することを特徴とする方法。
【請求項２】
前記決定段階は、前記データベースマニピュレーションルーチンに関連付けられたパラメータを検査することを含むことを特徴とする請求項１に記載の方法。
【請求項３】
前記決定段階の前に、前記データベースマニピュレーションルーチンを実行するためのプロセッサのクラスを特定する値に前記パラメータを設定する段階を更に具備することを特徴とする請求項２に記載の方法。
【請求項４】
前記設定段階は、前記特定メモリ範囲から分離されるプロセッサのクラスを特定する値を前記パラメータに割り当てることを含むことを特徴とする請求項３に記載の方法。
【請求項５】
前記選択的切り替え段階は、前記データベースマニピュレーションルーチンが前記特定メモリ範囲から分離されないルーチンであると決定されたならば該データベースマニピュレーションルーチンに対する前記メモリアクセス許可を前記特定メモリ範囲に対する読取り／書込みに設定することを含むことを特徴とする請求項１に記載の方法。
【請求項６】
前記選択的切り替え段階は、前記特定メモリ範囲に対する読取り／書込み許可を有するプロセッサから前記特定メモリ範囲に対する読取り専用許可を有するプロセッサに前記データベースマニピュレーションルーチンに対する実行のスレッドを移行することを含むことを特徴とする請求項１乃至５のいずれか一項に記載の方法。
【請求項７】
前記移行する段階は、前記特定メモリ範囲と同じアドレス空間内に前記実行のスレッドを維持することを含むことを特徴とする請求項６に記載の方法。
【請求項８】
前記選択的切り替え段階は、前記データベースマニピュレーションに対する実行のスレッドが前記特定メモリ領域に対する読取り／書込み許可を有するような信用コンテキストから前記実行のスレッドが前記特定メモリ領域に対する読取り専用許可を有するような不信用コンテキストに切り替えることを含むことを特徴とする請求項１乃至７のいずれか一項に記載の方法。
【請求項９】
前記実行のスレッドが、前記データベースマニピュレーションルーチンを実行すべく読取り専用アクセスを有する実行のスレッドに対して前記特定メモリ領域に存在している資源へのアクセスを必要とするということを検出する段階を更に具備することを特徴とする請求項８に記載の方法。
【請求項１０】
前記特定メモリ領域に存在している資源へのアクセスを必要とするということを検出して、前記不信用コンテキストから前記実行のスレッドが前記特定メモリ領域に対する読取り／書込み許可を有するような別の信用コンテキストへ切り替える段階を更に具備することを特徴とする請求項９に記載の方法。
【請求項１１】
前記データベースマニピュレーションルーチンに対する前記実行のスレッドが前記特定メモリ範囲における前記資源をアクセスすることを完了した後に前記別の信用コンテキストから前記不信用コンテキストへ切り替える段階を更に具備することを特徴とする請求項９に記載の方法。
【請求項１２】
前記データベースマニピュレーションルーチンの実行が完了した後に前記不信用コンテキストから前記信用コンテキストへ切り替える段階を更に具備することを特徴とする請求項１１に記載の方法。
【請求項１３】
前記選択的切り替え段階は、信用コンテキストと不信用コンテキストの間で任意の数の切り替えを実行することを含むことを特徴とする請求項１乃至１２のいずれか一項に記載の方法。
【請求項１４】
前記実行する段階は、前記データベースマニピュレーションルーチンを実行すると同時に前記特定メモリ領域と同じアドレス空間に残ることを含むことを特徴とする請求項１乃至１３のいずれか一項に記載の方法。
【請求項１５】
前記実行する段階は、前記データベースマニピュレーションルーチンが前記特定メモリ領域から分離されるルーチンであると決定されたならば前記特定メモリ領域に対する読取り専用許可を有するプロセッサで該データベースマニピュレーションルーチンを行うことを含むことを特徴とする請求項１乃至１４のいずれか一項に記載の方法。
【請求項１６】
前記実行段階は、前記データベースマニピュレーションルーチンが前記特定メモリ領域から分離されていないルーチンであると決定されたならば前記特定メモリ領域に対する読取り／書込み許可を有するプロセッサで該データベースマニピュレーションルーチンを行うことを含むことを特徴とする請求項１乃至１５のいずれか一項に記載の方法。
【請求項１７】
前記実行段階は、前記データベースマニピュレーションルーチンが前記特定メモリ領域から分離されるルーチンであると決定されたならば前記特定メモリ領域から論理的に区分されるメモリセグメントにおいて該データベースマニピュレーションルーチンを行うことを含むことを特徴とする請求項１乃至１６のいずれか一項に記載の方法。
【請求項１８】
前記実行段階は、前記データベースマニピュレーションルーチンが前記特定メモリ領域から分離されないルーチンであると決定されたならば前記特定メモリ領域において該データベースマニピュレーションルーチンを行うことを含むことを特徴とする請求項１乃至１７のいずれか一項に記載の方法。
【請求項１９】
前記実行段階は、前記特定メモリ領域に存在している資源の変更を選択的に許可することを含むことを特徴とする請求項１乃至１８のいずれか一項に記載の方法。
【請求項２０】
前記選択的変更は、前記特定メモリ領域における一つ以上の許可される実行エントリポイントに限定されることを特徴とする請求項１９に記載の方法。
【請求項２１】
コールバック表において前記一つ以上の許可される実行エントリポイントを特定する段階を更に具備することを特徴とする請求項２０に記載の方法。
【請求項２２】
データベースにおける情報を操作するためにルーチンを実行する、データベースサーバによって実行される、方法であって：  メモリアドレス空間をメモリセグメントに分割する段階であって、各メモリセグメントは同じメモリアドレス空間に存在し；  第１のメモリセグメントにおいてデータベースマニピュレーションルーチンを選択的に実行し；かつ  前記実行しているデータベースマニピュレーションルーチンが前記第１のメモリセグメントとは別のメモリセグメントに情報を読みとることのみを許し、書込むことを防ぐ段階を具備することを特徴とする方法。
【請求項２３】
前記第１のメモリセグメントにおいて実行されている前記データベースマニピュレーションルーチンを、所定のルーチンを実行させるために別のメモリセグメントに移行させる段階を更に具備することを特徴とする請求項２２に記載の方法。
【請求項２４】
前記別のセグメントにおいて前記所定のルーチンに対して特定されたエントリポイントが許可されるエンドポイントかどうかをチェックする段階を更に具備することを特徴とする請求項２３に記載の方法。
【請求項２５】
前記チェックする段階は、所定の一つ以上の許可されるエントリポイントのセットに対して前記特定エントリポイントを比較することを含むことを特徴とする請求項２４に記載の方法。
【請求項２６】
前記別のセグメントにおける前記特定エントリポイントが許可されないエントリポイントであるならば前記所定のルーチンの実行を阻止する段階を更に具備することを特徴とする請求項２４に記載の方法。
【請求項２７】
前記所定のルーチンが完了された後に前記第１のメモリセグメントに前記データベースマニピュレーションルーチンを戻す段階を更に具備することを特徴とする請求項２２乃至２６のいずれか一項に記載の方法。
【請求項２８】
前記データベースマニピュレーションルーチンは、該データベースマニピュレーションルーチンが別のメモリセグメントにおける情報がそれから保護されるものとして識別されるならば、前記第１のメモリセグメントにおいて実行されることを特徴とする請求項２２乃至２７のいずれか一項に記載の方法。
【請求項２９】
別のメモリセグメントにおける情報がそれから保護される前記データベースマニピュレーションルーチンは、ユーザ定義型ルーチンを含むことを特徴とする請求項２８に記載の方法。
【請求項３０】
別のメモリセグメントにおける情報がそれから保護される前記データベースマニピュレーションルーチンは、不信用ルーチンを含むことを特徴とする請求項２８に記載の方法。
【請求項３１】
前記データベースマニピュレーションルーチンが別のメモリセグメントにおける情報がそれから保護されるものとして識別されないならば、全てのメモリセグメントに対する完全な読取り及び書込み特権を伴う該データベースマニピュレーションルーチンを実行する段階を更に具備することを特徴とする請求項２２乃至３０のいずれか一項に記載の方法。
【請求項３２】
前記データベースマニピュレーションルーチンは、信用ルーチンを含むことを備えていることを特徴とする請求項３１に記載の方法。
【請求項３３】
前記分割する段階は、前記メモリセグメントを相互に論理的に区分することを含むことを特徴とする請求項２２乃至３２のいずれか一項に記載の方法。
【請求項３４】
前記選択的実行段階は、前記第１のメモリセグメント以外のメモリセグメントに対する読取り専用アクセスを有する処理で前記データベースマニピュレーションルーチンを行うことを含むことを特徴とする請求項２２乃至３３のいずれか一項に記載の方法。
【請求項３５】
前記処理は、多重スレッド型仮想プロセッサを含むことを特徴とする請求項３４に記載の方法。
【請求項３６】
前記メモリセグメントの対応するものにおいて複数のデータベースマニピュレーションルーチンを同時に実行する段階を更に具備し、各データベースマニピュレーションルーチンは、それ自身のメモリセグメント以外の全てのメモリセグメントに対する読取り専用アクセスを有していることを特徴とする請求項２２乃至３５のいずれか一項に記載の方法。
【請求項３７】
信用ルーチン及び不信用ルーチンを含んでいる複数のデータベースマニピュレーションルーチン；  コアメモリセグメント及び防護メモリセグメントを含んでいる複数のメモリセグメントを有している共有メモリアドレス空間；及び  前記複数のルーチンにリンクされた複数の仮想プロセッサを備え、前記仮想プロセッサは、前記コアメモリセグメントにおける信用ルーチンを実行し、かつ全てのメモリセグメントに対する読取り／書込みアクセスを有するフルアクセス仮想プロセッサと、前記防護メモリセグメントにおける不信用ルーチンを実行し、かつ前記コアメモリセグメントに対する読取り専用アクセスを有する防護仮想プロセッサとを含んでいることを特徴とするデータベースサーバ。
【請求項３８】
各データベースマニピュレーションルーチンは、前記ルーチンが信用ルーチンであるか不信用ルーチンであるかを特定する関連パラメータを有することを特徴とす
る請求項３７に記載のデータベースサーバ。
【請求項３９】
データベースマニピュレーションルーチンを実行するためのスレッドを更に備え、前記スレッドは、実行される前記データベースマニピュレーションルーチンが信用であるか不信用であるかに基づいて一つの仮想プロセッサから別の仮想プロセッサへ移ることを特徴とする請求項３７または３８に記載のデータベースサーバ。
【請求項４０】
前記実行されているデータベースマニピュレーションルーチンが不信用ルーチンであるならば、前記スレッドは、防護仮想プロセッサに移ることを特徴とする請求項３９に記載のデータベースサーバ。
【請求項４１】
前記実行されているデータベースマニピュレーションルーチンが信用ルーチンであるならば、前記スレッドは、フルアクセス仮想プロセッサに移ることを特徴とする請求項３９に記載のデータベースサーバ。
【請求項４２】
データベースマニピュレーション方法を実行するためにリンク型ルーチンを有しているデータベースサーバに対して、コンピュータ読取り可能媒体上に存在している、コンピュータソフトウェアであって、前記コンピュータソフトウェアは、コンピュータに  （ａ）クライアントからデータベース照会を受け取る；  （ｂ）前記データベース照会をサービスするためにどのルーチンを実行する必要があるかを決定する；  （ｃ）コアメモリへの読取り／書込みアクセスで信用ルーチンを実行する；及び  （ｄ）不信用ルーチンを実行する場合、実行のスレッドをコアメモリへの読取り／書込みアクセスを有している第１のプロセッサからコアメモリへの読取り専用アクセスを有している別のプロセッサに移行させることにより、コアメモリに対するアクセス許可を読み取り専用に変更する
動作を実行させるための命令を備えていることを特徴とするコンピュータソフトウェア。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、データベースにおける情報をアクセスする方法に関する。
【０００２】
【従来の技術】
データベースは、データベースにおけるデータを操作するためのソフトウェア方法の集合である、“データベースエンジン”によって一貫した方法で記憶し、探索しかつ検索することができるように論理的に編成された情報の本体である。ソフトウェア方法は、値を戻す機能、または値を戻さない手順のいずれかである、一組の呼び出し可能なルーチンとして一般的に実現される。
データベースは、一般的に３つのクラスに分類される：リレーショナルデータベース、オブジェクト指向型データベース、及びオブジェクト−リレーショナルデータベース。リレーショナルデータベース（ＲＤＢ）は、実際にはデータベース開発者が選択するあらゆる方法で相互に関連付けられる（または“結合される”）固定型フィールド２次元表の集合である。リレーショナルデータベースの構造は、表間の関係を選択的に再定義することによって変更することができる。データベースエンジンは、ＳＱＬ(Structured Query Language：構造化照会言語) によってまたは他の機構によって表現される方法のような種々のデータベース照会プロトコルのいずれかを用いることによって素早くかつ容易にリレーショナルデータベース上で複雑な探索を実行しうる。表間の関係は、探索の結果がデータベースの他の表における対応している情報を自動的に相互参照することができるようにする。
【０００３】
図１に示すように、例えば、リレーショナルデータベース１００は、在庫目録表１０６に論理リンク１０５によって次いで結合される注文表１０４に論理リンク１０３によって結合される顧客表１０２を含む。ユーザは、例えば、しきい値よりも大きい全ての注文番号について、データベース１００を照会しうる。注文表１０４が顧客表１０２及び在庫目録表１０６に結合されるので、照会に応答して識別された注文番号のリストは、識別された注文番号に対応する各顧客名前及び在庫目録項目と共に検索しかつ表示することができる。
オブジェクト指向型データベース（ＯＯＤＢ）は、、“オブジェクト”の集合−−データ及びそのデータを操作するための方法の両方を含むソフトウェア構成要素である。数字または文字型のデータだけを記憶することができるリレーショナルデータベースとは対照的に、ＯＯＤＢは、実際にはあらゆる型のデータ（テキスト、３Ｄグラフィック画像、ビデオクリップ、等）を記憶することができる。ＯＯＤＢは、ＯＯＤＢが有用な作業を行うのに必要なロジック（論理）のほとんどを含むように方法に関連付けられたクラス（分類）の階層構造にその構成オブジェクトを記憶する。対照的に、リレーショナルデータベースは、データだけを含みかつデータを伴う有用な機能を実行するために外部アプリケーションソフトウェアに依存しなければならない。
【０００４】
オブジェクト指向型データベース（ＯＲＤＢ）は、他の二つの型のハイブリッド（混成）である。拡張されたデータ（例えば、映画ファイル）は、行の一部としてまたはバイナリラージオブジェクト（ＢＬＯＢ）−−未区分大量データ(undifferentiated mass of data) 、としてＯＲＤＢに記憶されかつ検索されうる。また、ＯＲＤＢは、ＢＬＯＢ内に含まれるデータを操作するための方法（例えば、映画ファイルを観るためのユーティリティ）をアクセスすることができる。これらの方法は、データベースエンジンとは別々に維持されうるかまたは特定のＯＲＤＢインプリメンテーションによりそれにリンクされうる。
インフォーミックスユニバーサルサーバ(Informix Universal Server (IUS)) のような拡張可能オブジェクト−リレーショナルデータベース管理システム（ＯＲＤＢＭＳ）では、拡張データを操作するための方法は、拡張データが“ネイティブ(native)”データ型−−即ち、外部アプリケーションに頼ることなくＯＲＤＢＭＳそれ自体が扱うことができるデータ型として処理されるようにデータベースエンジンに直接リンクされる。図２では、例えば、拡張可能ＯＲＤＢＭＳ２００は、データベースエンジン２０２に直接リンクされた、データ型Ｘ及びＹを操作するための方法をそれぞれ含む、拡張子Ｘ及びＹを有する。型Ｘのデータをポイントするデータベース照会に応じて、例えば、データベースエンジン２０２は、適当なデータ型−特定の方法におけるデータを操作するために拡張子Ｘにおいて方法を自動的に呼出す。
【０００５】
【発明が解決しようとする課題】
非拡張可能ＯＲＤＢＭＳは、対照的に、任意のデータ型に対するデータ操作方法をデータベースエンジンにリンクさせないで、多重データ型を管理するために、ミドルウェアの層を介して相互接続された、多重データ型−特定エンジンの使用を必要とする。その結果、非拡張可能ＯＲＤＢＭＳは、一般的に低減された性能を示しかつ新しいアプリケーションを配置することにおいて増大した複雑性を開発者に与える。
本発明は、上記従来の技術における問題点を解決することを課題とする。
【０００６】
【課題を解決するための手段】
本発明の上記課題は、データベースにおける情報を操作するためにルーチンを実行する、データベースサーバによって実行される、方法であって：データベースマニピュレーションルーチンが特定メモリ範囲から分離されるか否かを決定し；決定に基づいてデータベースマニピュレーションルーチンに対するメモリアクセス許可を選択的に切り替え；かつ選択的に切り替えたメモリアクセス許可を用いてデータベースマニピュレーションルーチンを実行する段階を具備する方法によって達成される。
本発明の方法では、決定段階は、データベースマニピュレーションルーチンに関連付けられたパラメータを検査することを含むように構成してもよい。
【０００７】
本発明の方法では、決定段階の前に、データベースマニピュレーションルーチンを実行するためのプロセッサのクラスを特定する値にパラメータを設定する段階を更に具備するように構成してもよい。
本発明の方法では、設定段階は、特定メモリ範囲から分離されるプロセッサのクラスを特定する値をパラメータに割り当てることを含むように構成してもよい。  本発明の方法では、選択的切り替え段階は、局所手順呼出しを行うことを含むように構成してもよい。
本発明の方法では、選択的切り替え段階は、データベースマニピュレーションルーチンが特定メモリ範囲から分離されるルーチンであると決定されたならば該データベースマニピュレーションルーチンに対するメモリアクセス許可を特定メモリ範囲に対する読取り専用に設定することを含むように構成してもよい。
【０００８】
本発明の方法では、選択的切り替え段階は、データベースマニピュレーションルーチンが特定メモリ範囲から分離されないルーチンであると決定されたならば該データベースマニピュレーションルーチンに対するメモリアクセス許可を特定メモリ範囲に対する読取り／書込みに設定することを含むように構成してもよい。
本発明の方法では、選択的切り替え段階は、特定メモリ範囲に対する読取り／書込み許可を有するプロセッサから特定メモリ範囲に対する読取り専用許可を有するプロセッサにデータベースマニピュレーションルーチンに対する実行のスレッドを移行することを含むように構成してもよい。
本発明の方法では、移行する段階は、特定メモリ範囲と同じアドレス空間内に実行のスレッドを維持することを含むように構成してもよい。
【０００９】
本発明の方法では、選択的切り替え段階は、データベースマニピュレーションに対する実行のスレッドが特定メモリ領域に対する読取り／書込み許可を有するような信用コンテキストから実行のスレッドが特定メモリ領域に対する読取り専用許可を有するような不信用コンテキストに切り替えることを含むように構成してもよい。
本発明の方法では、実行のスレッドが、データベースマニピュレーションルーチンを実行すべく読取り専用アクセスを有する実行のスレッドに対して特定メモリ領域に存在している資源へのアクセスを必要とするということを検出する段階を更に具備するように構成してもよい。
本発明の方法では、特定メモリ領域に存在している資源へのアクセスを必要とするということを検出して、不信用コンテキストから実行のスレッドが特定メモリ領域に対する読取り／書込み許可を有するような別の信用コンテキストへ切り替える段階を更に具備するように構成してもよい。
【００１０】
本発明の方法では、データベースマニピュレーションルーチンに対する実行のスレッドが特定メモリ範囲における資源をアクセスすることを完了した後に別の信用コンテキストから不信用コンテキストへ切り替える段階を更に具備するように構成してもよい。
本発明の方法では、データベースマニピュレーションルーチンの実行が完了した後に不信用コンテキストから信用コンテキストへ切り替える段階を更に具備するように構成してもよい。
本発明の方法では、選択的切り替え段階は、信用コンテキストと不信用コンテキストの間で任意の数の切り替えを実行することを含むように構成してもよい。
本発明の方法では、実行する段階は、データベースマニピュレーションルーチンを実行すると同時に特定メモリ領域と同じアドレス空間に残ることを含むように構成してもよい。
【００１１】
本発明の方法では、実行する段階は、データベースマニピュレーションルーチンが特定メモリ領域から分離されるルーチンであると決定されたならば特定メモリ領域に対する読取り専用許可を有するプロセッサで該データベースマニピュレーションルーチンを行うことを含むように構成してもよい。
本発明の方法では、実行段階は、データベースマニピュレーションルーチンが特定メモリ領域から分離されていないルーチンであると決定されたならば特定メモリ領域に対する読取り／書込み許可を有するプロセッサで該データベースマニピュレーションルーチンを行うことを含むように構成してもよい。
本発明の方法では、実行段階は、データベースマニピュレーションルーチンが特定メモリ領域から分離されるルーチンであると決定されたならば特定メモリ領域から論理的に区分されるメモリセグメントにおいて該データベースマニピュレーションルーチンを行うことを含むように構成してもよい。
【００１２】
本発明の方法では、実行段階は、データベースマニピュレーションルーチンが特定メモリ領域から分離されないルーチンであると決定されたならば特定メモリ領域において該データベースマニピュレーションルーチンを行うことを含むように構成してもよい。
本発明の方法では、実行段階は、特定メモリ領域に存在している資源の変更を選択的に許可することを含むように構成してもよい。
本発明の方法では、選択的変更は、特定メモリ領域における一つ以上の許可される実行エントリポイントに限定されるように構成してもよい。
本発明の方法では、コールバック表において一つ以上の許可される実行エントリポイントを特定する段階を更に具備するように構成してもよい。
【００１３】
また、本発明の上記課題は、データベースにおける情報を操作するためにルーチンを実行する、データベースサーバによって実行される、方法であって：メモリアドレス空間をメモリセグメントに分割し；第１のメモリセグメントにおいてデータベースマニピュレーションルーチンを選択的に実行し；かつ実行しているデータベースマニピュレーションルーチンがメモリセグメントの別のものに情報を書込むことを防ぐ段階を具備する方法によって達成される。
本発明の方法では、第１のメモリセグメントにおいて実行されているデータベースマニピュレーションルーチンに別のメモリセグメントから情報を読み取らせる段階を更に具備するように構成してもよい。
本発明の方法では、第１のメモリセグメントにおいて実行されているデータベースマニピュレーションルーチンを、所定のルーチンを実行させるために別のメモリセグメントに移行させる段階を更に具備するように構成してもよい。
【００１４】
本発明の方法では、別のセグメントにおいて所定のルーチンに対して特定されたエントリポイントが許可されるエンドポイントかどうかをチェックする段階を更に具備するように構成してもよい。
本発明の方法では、チェックする段階は、所定の一つ以上の許可されるエントリポイントのセットに対して特定エントリポイントを比較することを含むように構成してもよい。
本発明の方法では、別のセグメントにおける特定エントリポイントが許可されないエントリポイントであるならば所定のルーチンの実行を阻止する段階を更に具備するように構成してもよい。
本発明の方法では、所定のルーチンが完了された後に第１のメモリセグメントにデータベースマニピュレーションルーチンを戻す段階を更に具備するように構成してもよい。
【００１５】
本発明の方法では、データベースマニピュレーションルーチンは、該データベースマニピュレーションルーチンが別のメモリセグメントにおける情報がそれから保護されるものとして識別されるならば、第１のメモリセグメントにおいて実行されるように構成してもよい。
本発明の方法では、別のメモリセグメントにおける情報がそれから保護されるデータベースマニピュレーションルーチンは、ユーザ定義型ルーチンを含むように構成してもよい。
本発明の方法では、別のメモリセグメントにおける情報がそれから保護されるデータベースマニピュレーションルーチンは、不信用ルーチンを含むように構成してもよい。
【００１６】
本発明の方法では、データベースマニピュレーションルーチンが別のメモリセグメントにおける情報がそれから保護されるものとして識別されないならば、全てのメモリセグメントに対する完全な読取り及び書込み特権を伴う該データベースマニピュレーションルーチンを実行する段階を更に具備するように構成してもよい。
本発明の方法では、データベースマニピュレーションルーチンは、信用ルーチンを含むことを備えているように構成してもよい。
本発明の方法では、メモリセグメントは、同じメモリアドレス空間に存在するように構成してもよい。
本発明の方法では、分割する段階は、メモリセグメントを相互に論理的に区分することを含むように構成してもよい。
【００１７】
本発明の方法では、選択的実行段階は、第１のメモリセグメント以外のメモリセグメントに対する読取り専用アクセスを有する処理でデータベースマニピュレーションルーチンを行うことを含むように構成してもよい。
本発明の方法では、処理は、多重スレッド型仮想プロセッサを含むように構成してもよい。
本発明の方法では、メモリセグメントの対応するものにおいて複数のデータベースマニピュレーションルーチンを同時に実行する段階を更に具備し、各データベースマニピュレーションルーチンは、それ自身のメモリセグメント以外の全てのメモリセグメントに対する読取り専用アクセスを有しているように構成してもよい。
【００１８】
更に、本発明の上記課題は、信用ルーチン及び不信用ルーチンを含んでいる複数のデータベースマニピュレーションルーチン；コアメモリセグメント及び防護メモリセグメントを含んでいる複数のメモリセグメントを有している共有メモリアドレス空間；及び複数のルーチンにリンクされた複数の仮想プロセッサを備え、仮想プロセッサは、コアメモリセグメントにおける信用ルーチンを実行するフルアクセス仮想プロセッサと、防護メモリセグメントにおける不信用ルーチンを実行する防護仮想プロセッサとを含んでいるデータベースサーバによって達成される。
本発明のデータベースサーバでは、フルアクセス仮想プロセッサは、全てのメモリセグメントに対する読取り／書込みアクセスを有するように構成してもよい。
【００１９】
本発明のデータベースサーバでは、防護仮想プロセッサは、コアメモリセグメントに対する読取り専用アクセスを有するように構成してもよい。
本発明のデータベースサーバでは、各データベースマニピュレーションルーチンは、ルーチンが信用ルーチンであるか不信用ルーチンであるかを特定する関連パラメータを有するように構成してもよい。
本発明のデータベースサーバでは、データベースマニピュレーションルーチンを実行するためのスレッドを更に備え、スレッドは、実行されるデータベースマニピュレーションルーチンが信用であるか不信用であるかに基づいて一つの仮想プロセッサから別の仮想プロセッサへ移るように構成してもよい。
本発明のデータベースサーバでは、実行されているデータベースマニピュレーションルーチンが不信用ルーチンであるならば、スレッドは、防護仮想プロセッサに移るように構成してもよい。
【００２０】
本発明のデータベースサーバでは、実行されているデータベースマニピュレーションルーチンが信用ルーチンであるならば、スレッドは、フルアクセス仮想プロセッサに移るように構成してもよい。
本発明の上記課題は、データベースマニピュレーション方法を実行するためにリンク型ルーチンを有しているデータベースサーバに対して、コンピュータ読取り可能媒体上に存在している、コンピュータソフトウェアであって、コンピュータソフトウェアは、コンピュータに
（ａ）クライアントからデータベース照会を受け取る；
（ｂ）データベース照会をサービスするためにどのルーチンを実行する必要があるかを決定する；
（ｃ）コアメモリへの読取り／書込みアクセスで信用ルーチンを実行する；及び
（ｄ）コアメモリへの読取り専用アクセスで不信用ルーチンを実行する
動作を実行させるための命令を備えているコンピュータソフトウェアによって達成される。
【００２１】
本発明のコンピュータソフトウェアでは、（ｄ）は、実行のスレッドをコアメモリへの読取り／書込みアクセスを有している第１のプロセッサからコアメモリへの読取り専用アクセスを有している別のプロセッサに移行させる命令を備えているように構成してもよい。
本発明のコンピュータソフトウェアでは、（ｄ）は、不信用ルーチンを実行することに関してコアメモリに対するメモリアクセス許可を読取り専用に変更する命令を備えているように構成してもよい。
【００２２】
【作用】
本発明の一形態では、データベースにおけるデータを操作するためのルーチンは、データベースマニピュレーションルーチンが特定のメモリの範囲から分離されるか否かを決定することにより、かつ、応答として、検討されているデータベースマニピュレーションルーチンに対して特定のメモリの範囲に対するメモリアクセス許可を選択的に切り替える（例えば、読取り／書込みから読取り専用へ）ことにより、データベースサーバによって実行される。次いで、データベースマニピュレーションルーチンは、選択的に切り替えられたメモリアクセス許可を用いて実行される。分離されるべきデータベースマニピュレーションルーチンは、読取り専用メモリアクセスで実行することができそれにより不適当な変更から特定のメモリの範囲を保護する。
【００２３】
データベースマニピュレーションルーチンが特定のメモリの範囲から分離されるか否か（例えば、コアデータ構造が存在するようなコアメモリ）は、データベースマニピュレーションルーチンに関連付けられたパラメータを検査する（調べる）ことによって決定されうる。パラメータは、データベースマニピュレーションルーチンを実行するためにプロセッサのクラス（例えば、多重スレッド型仮想プロセッサ）を特定する値に設定することができる。ある一定の分類値は、対応プロセッサがプロセッサのコアメモリ許可を読み取り専用に限定することによってコアメモリから分離されるべきであるということを示す。他の分類値は、対応プロセッサがコアメモリから分離される必要がなくそれゆえにコアメモリに対する完全なＲ／Ｗ許可を有しうるということを示すことができる。
【００２４】
データベースマニピュレーションルーチンが“不信用(untrusted) ”−−即ち、コアメモリから分離されるべきルーチンであると決定されるならば、メモリアクセス許可の選択的切り替えは、コアメモリに対する読み取り専用に対して、データベースマニピュレーションルーチンに対するメモリアクセス許可を設定する局所手順呼出しを介して達成されうる。代替的に、データベースマニピュレーションルーチンが“信用(trusted) ”ルーチン−−即ち、コアメモリから分離される必要がないルーチンであると決定されるならば、データベースマニピュレーションルーチンに対するメモリアクセス許可は、コアメモリに対する読取り／書込みに設定されうる。
不信用ルーチンが実行されるべきである場合、局所手順呼出しは、データベースマニピュレーションルーチンに対する実行のスレッドを、コアメモリにへの読取り／書込み許可を有するプロセッサからコアメモリへの読取り専用アクセスを有するプロセッサへ移行させる。スレッドは、論理的区分形式コアメモリであるがコアメモリと同じメモリアドレス空間にあるメモリ領域へ移行する。スレッドは、それがコアメモリへの読取り／書込み許可を有する場合に“信用コンテキスト”にあり、コアメモリへの読取り専用アクセスを有する場合に“不信用コンテキスト”にある。
【００２５】
不信用コンテキストにおいて実行するとき、スレッドは、それにも係わらずデータベースマニピュレーションルーチンを実行するためにコアメモリの資源を使用することを必要としうる。その条件を検出することにより、不信用コンテキストから別の信用コンテキストへの切り替えは、例えば、スレッドにコアメモリを変更させるために行われる。スレッドがコアメモリにおいて資源のその使用を完了した後、切り替えは、信用コンテキストから不信用コンテキストに戻るように行われる。同様に、不信用ルーチンが実行を完了した後、切り替えは、不信用コンテキストから最初の信用コンテキストに戻るように行われる。あらゆる任意の数の切り替えは、信用コンテキストと不信用コンテキストの間で行われうる。
不信用コンテキストから信用コンテキストへのコンテキスト切り替えを行うことにおいて、コアメモリへのエントリは、所定の一つ以上の許可される実行エントリポイントのセット、例えば、所定のコールバック表において識別されたものに限定されうる。特定エントリポイントがコールバック表に現れるならば、コアメモリにおけるそのポイントでのエントリは、許可される。しかしながら、特定エントリポイントがコールバック表に現れないならば、コアメモリにおけるそのポイントでのエントリは、阻止される。
【００２６】
本発明の別の形態では、データベースにおけるデータを操作するためのルーチンは、メモリアドレス空間をメモリセグメント（例えば、主セグメント及び一つ以上の防護セグメント）に分割することによってデータベースサーバにより実行される。データベースマニピュレーションルーチン、例えば、ルーチンがメモリセグメントの別のものに情報を書込むことを防ぐ不信用ユーザ定義型ルーチンは、防護メモリセグメントにおいて選択的に実行されうる。防護メモリセグメントにおいて実行するデータベースマニピュレーションルーチンは、所定のルーチンを実行すべく別のメモリセグメントから情報を読み取ることまたは別のメモリセグメントに移行することを可能にできる。他の資源、例えば、信用コアデータベースルーチンは、全てのメモリセグメントへの完全なＲ／Ｗアクセスを伴う主セグメントで実行することができる。更に、多重データベースマニピュレーションルーチンは、メモリセグメントのそれぞれにおいて実行されうるし、各データベースマニピュレーションルーチンは、それ自体のメモリセグメント以外の全てのメモリセグメントへの読取り専用アクセスを有している。
【００２７】
この発明の利点は、以下の一つ以上を含みうる。ユーザに彼ら自身のルーチンを定義させかつそれらのユーザ定義型ルーチンをデータベースエンジンにリンクさせることによりデータベースサーバが任意のリッチデータ型の集合（例えば、画像、ビデオ、サウンド、マップ、複雑な金融インストルメント、時系列データ）を素早くかつ効率的に管理できるようにする。不良ロジックを含んでいるユーザ定義型ルーチンがデータベースを破損するというリスクは、そのようなユーザ定義型ルーチンがデータベースサーバのコアデータ構造及び機能から分離されるので、最小化される。データベースサーバによって用いられるコアメモリの不適当な変更は、限定的特権を有するプロセッサ（例えば、仮想プロセッサ）でユーザ定義型ルーチンを実行することによって防げる。仮想プロセッサは、特定のインプリメンテーションにより特定メモリ範囲またはそれ自体の補助メモリセグメントのいずれかへの完全な読取り及び書込み（Ｒ／Ｗ）アクセスが許されるが、コアデータベースサーバメモリへの読取り専用アクセスに限定される。その結果、高度な信頼性及び性能がデータベースサーバに対して維持されると同時に、ユーザには向上した可撓性が与えられる。
【００２８】
ルーチンが実行される仮想プロセッサのクラスをルーチンが特定できるようにすることにより、データベース開発者には、不信用ルーチンを分離するための可撓的かつ強力な機構が与えられる。ルーチンは、完全Ｒ／Ｗ特権を伴う仮想プロセッサクラスまたは、メモリの指定領域への読取り専用特権を有する、“防護”仮想プロセッサを指定すべく、パラメータを単に変更することにより信用または不信用として実行されうる。
メモリがセグメントに論理的に区分される構成では、メモリセグメントは、同じメモリアドレス空間の異なる部分を占有する。結果として、ユーザ定義型ルーチンに対する実行のスレッドは、素早くかつ容易にメモリセグメント間を移動することができる。更に、データベースサーバによって供給される内部ルーチンは、コアメモリセグメントの内容が不適当に変更されることを防ぐと同時に、防護仮想プロセッサにコアメモリセグメントにおいて存在する資源をアクセスさせる。高度な性能及びスケーラビリティがデータベースサーバに対して維持されると同時に、不信用ユーザ定義型ルーチンの分離は、それによって認識される。
【００２９】
他の利点及び特徴は、図面を含む以下の説明から明らかになるであろう。
【００３０】
【実施例】
持続データを記憶するための拡張可能データベース管理システム（ＤＢＭＳ）の使用は、非拡張可能ＤＢＭＳがデータリポジトリとして用いられるときに利用することができない複数の利点を供給する。実質的にあらゆる型のデータを操作するルーチンを直接データベースエンジンにリンクする能力は、企業の特定のニーズに合致すべくＤＢＭＳを適合させることを開発者に許容する。更に、単一エンジン・ソルーションにおいてコアＤＢＭＳ機能性と共に特注機能を実現するための能力は、ＤＢＭＳの性能、トランザクション完全性、従来及び複雑なデータ型の両方に対するスケーラビリティ及び管理能力を向上させる。
そのように大きな度合の可撓性及び拡張可能性を開発者に供給することは、しかしながら、用いるＤＢＭＳアーキテクチャにより、潜在的に問題をもたらしうる。例えば、図３Ａのアーキテクチャでは、データベースサーバ３００は、通信リンク３０７を介してクライアントＩ，Ｊ及びＫ（３０１−３０５）からデータベース照会を受け取りかつデータベース照会を適切にスレッドＱ，ＲまたはＳに運ぶ。各クライアントは、図３Ａに示すように、個別のスレッドと通信しうるか、または、単一の多重スレッド型処理は、二つ以上のクライアントから照会を受け取りうる。いずれの場合でも、スレッドは、次いで、データベース上で所望の動作を行う所定のルーチンを呼出すためにライブラリコールをする。図３Ａでは、データベースサーバ３００に存在している全てのスレッドは、各スレッドが完全Ｒ／Ｗ特権を有する同じメモリアドレス空間−−具体的には共有メモリ３０２−−においてそれらの対応ルーチンを実行する。
【００３１】
通常、スレッドＱ，Ｒ及びＳに自由に共有メモリ３０２から読み取ること及びそれに書き込むことをさせることは、スレッドによって呼出される基礎をなしているルーチンのそれぞれが同じソフトウェアべンダーによって書かれかつデータベースサーバ３００にリンクされた全ての他のルーチンとの正確な動作及び相互運用性（インタオペラビリティ）に対して全体を通して検査されているので、システム動作で問題をもたらさない。しかしながら、ある場合には、ＤＢＭＳの比較的高度ではない開発者またはエンドユーザは、不良なデータマニピュレーションルーチンを書込みうるし、かつ適切にデバッグすることを失敗しうる−−即ち、ルーチンの実行は、それに不適当な方法でデータベースサーバ３００の共有メモリ３０２を変更させ、潜在的にＤＢＭＳをクラッシュするかまたはデータベースを破損するかまたはその両方である。
【００３２】
図３Ｂは、データベースサーバの共有メモリが不良のユーザ定義型ルーチン（ＵＤＲ）の実行によって損傷されるのを防ぐための解決策を示す。図３Ｂのアーキテクチャでは、クライアント３０１−３０５から受け取ったデータベースマニピュレーション要求は、それらが対応する基礎をなしているルーチンが“信用(trusted) ”（例えば、それらが共有メモリ３０２を不適切に変更しないかさもなければ他のルーチンと矛盾することを保証すべく徹底的に検査されたＵＤＲｓ）または“不信用(untrusted) ”（例えば、徹底的に検査されていないＵＤＲｓ）として考慮されるか否かにより、異なる方法で扱われる。信用のクラスに属するものとして指定されたＵＤＲｓに対して、呼出しスレッドは、図３Ａに関して上記したのと同じ方法で完全Ｒ／Ｗ特権により共有メモリ３０２にてルーチンを実行する。
【００３３】
しかしながら、不信用ＵＤＲｓの場合には、呼出しスレッド（例えば、スレッドＳ）は、遠隔手順呼出し（ＲＰＣ）−−  プログラムコンテキストを維持すると同時にスレッドを一つのメモリアドレス空間から別のメモリアドレス空間に移行させるプログラミング機構−−を別のサーバ３１０に対して行う。一度、スレッドがサーバ３１０に移行したならば、不信用ＵＤＲは、メモリ３１２で実行されかつ結果は、スレッドをＤＢサーバ３００に回すことによって戻される。サーバ３１０のメモリ３１２は、サーバ３００の共有メモリ３０２から分離されかつそれとは異なるメモリアドレス空間を表すので、サーバ３１０上で実行されるあらゆるルーチンは、共有メモリ３０２を直接変更することができない。結果として、スレッドＳにより行われたＲＰＣは、データベースサーバ３００から基礎をなしている実行スレッドを分離して共有メモリ３０２が不信用ルーチンによって不適当に変更されるのを防ぐ。
【００３４】
しかしながら、異なるメモリアドレス空間の間を横断することは、比較的時間のかかるアクティビティである。異なるメモリアドレス空間に対する各ＲＰＣは、異なるサーバ間のアーギュメント及び結果を整理しかつ回復することにかなり多くのオーバヘッド時間を一般に招く。更に、ＲＰＣを基盤とするアーキテクチャは、それぞれが個別のコンピュータシステムに一般に関連付けられる二つ以上の異なるアドレス空間の間の通信リンクの適切な動作に依存する。そのようなシステム間通信は、システム内通信よりもかなり信頼性がない。ＲＰＣを基盤とする分離したアーキテクチャは、結果として比較的低い性能及び信頼性の影響を受ける。
ＲＰＣを基盤とする分離アーキテクチャに関連付けられるこれら及び他の問題は、ＵＤＲｓのようなある一定の不信用方法がコアデータ構造から及びコアデータベースエンジンルーチンのような信用方法から分離することができるようなデータベースサーバアーキテクチャによってアドレス指定される。分離は、少なくとも二つの異なるモデル−−多重処理モデル及び単一処理セグメントモデル−−のいずれかを用いることによって達成することができる。
【００３５】
多重処理モデルでは、分離は、同じメモリアドレス空間３０２内の多重メモリセグメント−−例えば、主メモリセグメント３０３及び補助メモリセグメント３０４−−を維持することによって図４に示したようなアーキテクチャにおいて達成することができる。セグメント３０３は、信用コアデータベースエンジンルーチン及びコアデータ構造が実行されかつ記憶されるようなメモリ領域として役に立つ。メモリセグメント３０４は、コアＤＢＭＳ機能に対応するもの以外のルーチン及びデータを実行しかつ記憶するために主に確保される補助メモリ領域として役に立つ。
信用ルーチンを実行するスレッドは、そのまま残り、かつ主メモリセグメント３０３に対して、完全Ｒ／Ｗ特権を有する。しかしながら、不信用ルーチンを実行するために、スレッドは、まずコアメモリセグメント３０３からスレッドを分離すべく補助メモリセグメント３０４に移行する。補助メモリセグメントにおいて実行されるスレッド（例えば、スレッドＳ’）は、メモリセグメント３０４に対する完全Ｒ／Ｗ特権を有するが、メモリセグメント３０３への読取り専用アクセスを有する。不信用ルーチンを実行することにおいてスレッドＳ’が書込むことができるメモリの領域を強要することによって、コアＤＢＭＳデータ構造及びルーチンは、不良ＵＤＲによって上書きされることから防止される。更に、信用及び不信用ルーチンが同じメモリアドレス空間（異なるメモリセグメントにおいてであるが）で実行されるので、スレッドＳ’は、不信用ルーチンを実行するためにＲＰＣを実行する必要がなくそれよりも、より信頼性がありかつおおよそＲＰＣよりも小さい程度の大きさであるオーバヘッド時間を必要とする標準局所手順呼出しを用いることができる。結果として、不信用ルーチンの分離は、比較的高いレベルの性能及び信頼性を維持しつつ達成することができる。
【００３６】
データベースサーバが単一処理を用いて実行されるとき、分離は、実行されるルーチンの特性に基づいてＲ／Ｗ特権を変更することによってコアメモリセグメント内で達成することができる。信用ルーチンを実行することにおいて、スレッドは、通常の方法においてコアメモリに対する完全Ｒ／Ｗ特権を有する。しかしながら、不信用ルーチンを実行する前に、コアデータベースルーチンに対応するメモリの範囲へのＲ／Ｗ許可は、不信用ルーチンを実行しているスレッドに対して読取り専用に切り替えられる。メモリセグメントへのＲ／Ｗ特権を切り替えることは、二つの方法：（ｉ）特定メモリ範囲でＲ／Ｗ許可を変更するためにオペレーティングシステム−特定ルーチンを呼出すことによって、または（ｉｉ）メモリセグメントからスレッドが存在するような処理を取り外しそしてメモリセグメントに処理を再び取付けすることにより異なるＲ／Ｗアクセス許可を特定することによって達成することができる。両方の方法において、データベースの破損は、不信用ルーチンがメモリの指定部分を変更するのを禁止することによって防ぐことができる。
【００３７】
信用コアデータ構造及びＤＢＭＳルーチンから不信用ＵＤＲｓを有効的に分離するために図４のアーキテクチャがどのようにインフォーミックスユニバーサルサーバにおいて用いられうるかという詳細な説明は、図５を参照して与えられる。図示したマルチプロセッサ環境では、ＩＵＳは、同じメモリアドレス空間を占有するが互いに論理的に区分される複数のメモリセグメント−−例えば、コアメモリ４０２及び防護メモリ４１２−−を用いる。データベースサーバ４００は、一つ以上の仮想プロセッサ（ＶＰｓ）−−ハードウェアプロセッサをエミュレートしかつ同時に多重クライアント要求を受け入れかつ処理することができるマルチスレッド型ソフトウェアエンティティから構成されている。各ＶＰは、例えば、ＵＮＩＸオペレーティング・システムの処理として実行されるバイナリ実行可能ファイルの一つのインスタンスである。バイナリ実行可能ファイルは、ＯＲＤＢＭＳを形成するために必要なソフトウェアコンポーネント及び任意のデータ型を取り扱うためのＵＤＲｓを含んでいる拡張子とインタフェースする機能を供給するソフトウェアコンポーネントを含む。
【００３８】
ＶＰｓは、いろいろなクラスがあり、各クラスは、そのクラス内のＶＰｓに対して利用可能な特権、及びそのクラス内のＶＰｓに課せられた制限を制御する一定の特性を定義している。データベースエンジンにリンクされる各ルーチン、コアデータベースルーチンまたはＵＤＲは、ルーチンがそれにより実行されるＶＰのクラスを指定する関連パラメータＶＰＣＬＡＳＳを有する。一般に、機能的に関連したルーチンの集合は、同じＶＰクラスに割り当てられる。ＶＰＣＬＡＳＳパラメータは、データベースサーバの所望の構成により異なるクラスを特定するために始動時に変更されうる。
データベースサーバは、同じかまたは異なるクラスの、複数の異なるＶＰｓにより構成されうる。ＶＰｓは、ＩＵＳシステムの一部として含まれるコアデータベースルーチンのライブラリにリンクされる。また、ＶＰｓは、一つ以上のＵＤＲｓ、例えば、ＩＵＳシステムのユーザによって特定される任意のデータ型を管理するために特注設計された、図５に示すようなＵＤＲ1 及びＵＤＲ2 にもリンクされうる。コアデータベースルーチン及びＵＤＲｓの両方は、インフォーミックス、インコーポレーティッド(Informix, Inc.)によって開発されたＤａｔａＢｌａｄｅ技術を用いてＩＵＳアーキテクチャで実行される。ＤａｔａＢｌａｄｅ技術及び新しいＵＤＲｓを生成するためにそれがどのように用いられるかの詳細な説明は、参照文献として採り入れられる、ＤａｔａＢｌａｄｅ  Ｄｅｖｅｌｏｐｅｒｓ  Ｋｉｔ  ９．０１（インフォーミックス注文番号Ｎｏ．８２１８１）に与えられている。
【００３９】
図５に示した構成では、データベースサーバは、それぞれが異なるクラスに属している、３つの異なるＶＰｓ４０３、４０５及び４０９を含む。ＣＰＵ  ＶＰ４０５は、最も効率的にルーチンを実行するクラスでありかつコアデータベースルーチンに対するデフォルトＶＰクラスである、ＶＰクラス“ｃｐｕ”に属する。ＣＰＵ  ＶＰ４０５は、最初のインスタンスにおける全ての入力データベース照会または他のクライアント要求を受け取りかつ扱う。クライアント要求を処理ことにおいて、ＣＰＵ  ＶＰは、特別の機能を実行するためにＶＰｓの他のクラスを呼出しうる。例えば、ＣＰＵ  ＶＰ４０５は、ブロッキング（阻止）Ｉ／Ｏ要求をサービスすべくＥｘｔｅｎｓｉｏｎ  ＶＰ４０３（ＶＰＣＬＡＳＳ＝“ｅｘｔ”）を呼出し、それにより他のクライアント要求を扱うためにＣＰＵ  ＶＰを自由にする。
【００４０】
全てのＶＰクラスは、データベースサーバの始動時に決定される静的Ｒ／Ｗ特権を有する。特定されない限り、デフォルトによる全てのＶＰクラスは、コアメモリ４０２に対して完全Ｒ／Ｗ特権を有する。しかしながら、拡張子ＶＰは、そのＶＰＣＬＡＳＳを“防護(fenced)”に設定することによって防護ＦＶＰとして実行されるべく指定されうる。他のＶＰクラス（例えば、“ｃｐｕ”、“ａｉｏ”、“ｔｌｉ”）は、通常、動作の防護モードを支援しない。
従って、図５では、防護ＶＰ４０９（即ち、そのＶＰＣＬＡＳＳが“防護”に設定されている拡張子ＶＰ）は、防護メモリ４１２に対する完全Ｒ／Ｗ特権を有するがコアメモリ４０２への読取り専用アクセスに限定される。ＶＰＣＬＡＳＳパラメータを適切に設定することによって、ルーチンが取り扱われる（信用対不信用）方法は、制御することができる。信用ルーチンとしてＵＤＲを実行するために、ＶＰＣＬＡＳＳは、ＣＰＵ  ＶＰがコアデータベースエンジンルーチンと同じ方法でルーチンを実行するということを意味する“ｃｐｕ”に設定される。コアメモリセグメント以外のメモリセグメントにおいてＵＤＲを信用ルーチンとして実行するために、ＶＰＣＬＡＳＳは、“ｃｐｕ”以外のＶＰクラス識別子、例えば“ｅｘｔ”に設定される。コアメモリセグメント以外のメモリセグメントにおいて不信用ルーチンとして実行するために、ＶＰＣＬＡＳＳは、ルーチンがコアメモリセグメントから“防護された”（即ち、書込むことが不能である）ＶＰによって実行されるということを意味する“防護”識別子を含む。
【００４１】
データベースサーバが信用及び不信用ルーチンの間で切り替わる方法の説明は、図６のフローチャートを参照して与えられる。クライアントは、サーバに接続、または“ログイン”し（ステップ５００）かつログインセッションのコースにわたり一つ以上の要求（例えば、ＳＱＬ照会）を発行することによってデータベースサーバ４００をアクセスする。まずデータベースサーバ４００に接続することにより、各クライアントにはメモリスタックがコアデータベースルーチンへの呼出し、ｍｔ＿ａｌｌｏｃ＿ｓｔａｃｋ（）を介してＣＰＵ  ＶＰ４０５によって割り当てられる（ステップ５０２）。クライアントの割り当てられたスタック領域は、ログインセッション中に発行されたクライアントのデータベース要求をサービスしているそのクライアントに関連付けられた一つ以上の実行スレッドによって用いられる。また、スタック割り当てルーチンは、追加空間が既存のスタックによって必要とされるときにまたはクライアント要求の並列処理に対して新しいワーカースレッドをひき起こすために呼び出される。
【００４２】
クライアントがデータベース照会または他の要求をデータベースサーバに送るとき（ステップ５０４）、ＣＰＵ  ＶＰ４０５は、特定情報を検索しかつ適切なフォーマットにそれを与えるためにどのルーチンを実行する必要があるかを決定することによって照会の処理を起動する（ステップ５０６）。処理の一部として、ＣＰＵ  ＶＰ４０５は、また、照会最適化分析を実行しかつデータベースマニピュレーション動作の実行を起動するであろう。
結局、ＣＰＵ  ＶＰは、一般にクライアントの要求をサービスするために一つ以上のルーチンを実行する必要がある点に到達する。実行されるべき各ルーチンに対して、ＣＰＵ  ＶＰ４０５は、ルーチンがコアメモリ４０２に対する完全Ｒ／Ｗ特権を有するＶＰによってまたは、コアメモリ４０２に対する読取り専用特権を有する、防護ＶＰ４０９によって実行されるべきかを決定するためにルーチンのＶＰＣＬＡＳＳパラメータを試験する（ステップ５０８）。クライアント要求をサービスすることにおいて実行されるルーチンの大部分は、一般に、ＣＰＵＶＰ４０５それ自体によってまたは“ｃｐｕ”以外のクラス（例えば、拡張子ＶＰ４０３）の非防護ＶＰによってコアメモリ４０２で実行される信用コアデータベースルーチンである。しかしながら、クライアント要求をサービスことにおいて実行されるべきルーチンのあるものは、ＵＤＲｓをコアデータベースメモリから分離すべく防護メモリセグメント４１２における防護ＶＰ４０９によって実行される不信用ＵＤＲｓでありうる。
【００４３】
ＶＰＣＬＡＳＳパラメータが従って語“防護(fenced)”を含まないならば、ルーチンは、信用として扱われる。そのようにするために、ＣＰＵ  ＶＰ４０５は、ルーチンに対するパラメータをコアメモリ４０２のクライアントのスタックに押しつけ（ステップ５１０）、かつルーチンを実行するためにスレッドに対するエントリを主実行キュー４０４に挿入する（ステップ５１２）。主実行キュー４０４がルーチンのスレッドエントリを次にポイントするときに、ルーチンのＶＰＣＬＡＳＳパラメータによって特定されたクラスからのＶＰは、スレッドピックアップしかつクライアントのスタックからパラメータをポップオフしかつルーチンによって特定された命令を実行すべくそれらを用いることによってコアメモリ４０２において要求されたルーチンを実行する（ステップ５１４）。信用ルーチンを実行することにおいて、ルーチンが実行されているＶＰは、必要に応じて自由にコアメモリ４０２に書き込まれかつそれから読み取られる。完了により、ルーチンは、あらゆるリターンパラメータをクライアントのスタックに押しつけかつ適当な位置に制御を戻す（ステップ５１６）。
【００４４】
しかしながら、ＶＰＣＬＡＳＳパラメータが語“防護(fenced)”を含むならば、ＣＰＵ  ＶＰ４０５において実行されているスレッドは、ルーチン（一般的にＵＤＲ）が防護メモリセグメント４１２で実行できるように防護ＶＰ４０９に移行する。ＣＰＵ  ＶＰ４０５は、コアメモリセグメント４０２にではなく防護メモリセグメント４１２にメモリスタック（防護スタック４１６）を割り当てるために次いでmt＿alloc ＿stack() を呼び出す、コアデータベースルーチン、mt＿priv＿call()、を呼び出すことによってスレッドの移行を起動する（ステップ５１８）。スタックが割り当てられた後、mt＿priv＿call()は、ＵＤＲに対するパラメータを防護スタック４１６    に押しつけることによってコンテキスト切り替えを行ない（ステップ５２０）、かつスレッドエントリを、不信用ルーチンを実行するために別個に維持される、防護実行キュー４１４に挿入する。防護ＶＰは、キュースレッドが次に実行されるときに次いで防護メモリセグメント４１２において不信用ＵＤＲを実行する（ステップ５２４）。
【００４５】
ＵＤＲを実行することにおいて、防護ＶＰ４０９は、防護メモリセグメント４１２から自由に読み取りかつそれに書き込みうるが、コアメモリセグメント４０２に書き込むは、防止される。それよりも、防護ＶＰ４０９は、不信用ＵＤＲを実行するために必要に応じて防護ＶＰ４０９にセグメント４０２におけるデータを読み取らせるためにコアメモリセグメント４０２への読取り専用アクセスを有する。防護ＶＰ４０９は、マルチスレッディング（ＭＴ）インタフェース、サーバアプリケーションプログラムインタフェース（ＳＡＰＩ）及びユーザ定義型ルーチン言語マネージャ（ＵＤＲＬＭ）によって供給された内部ルーチンを介してコアメモリ４０２に存在している資源をアクセスすることが可能である。これらの内部ルーチンは、特定ルーチンの性能がメモリセグメント間を移行するためにスレッドを必要とするかどうかを検出する。ＳＡＰＩインタフェースライブラリは、ＵＤＲによって呼び出されうる支援型ルーチンを定義する。ＳＡＰＩルーチンは、現行コンテキストが不信用であるということをエントリにより検出する。不信用コンテキストにおいて実行されているルーチンがコアメモリを変更することを必要とするならば、それは、mt＿priv＿call()を介して信用コンテキストに切り替わり、所望の動作を実行しかつ別のmt＿priv＿call()で不信用コンテキにスイッチバックする。実質的に、信用及び不信用コンテキスト間のいかなる任意の数の切り替えもこの方法で行われうる。必要に応じてコンテキストを選択的に切り替えることによって、実行のスレッドは、クライアント処理及びＵＤＲｓに対して透過であるような方法でメモリセグメントとＶＰｓの間を移動することができる。
【００４６】
不信用ルーチンの実行中に、スレッドが防護メモリセグメントにおいて実行されている間に防護ＶＰがコアメモリセグメントにおけるメモリを変更することを試みる命令を実行するならば、防護ＶＰは、そのようにすることを防止される。結果として、コアメモリセグメントは、不良ＵＤＲによって不適切に変更されることから保護される。更に、不信用ＵＤＲｓを実行することに含まれる種々の動作が全て同じメモリアドレス空間内で行われるので、メモリセグメント間で切り替えるために局所呼出しだけが必要でありそれによりルーチンが行われうるスピード及び信頼性を向上する。
ＵＤＲが防護メモリセグメント４１２におけるその実行を完了した後、mt＿priv＿call()ルーチンからのリターンは、実行のスレッドがコアメモリセグメント４０２におけるＣＰＵ  ＶＰ４０５に戻るように移行して行われる（ステップ５２６）。mt＿priv＿call()は、スレッドのスタック上の単なる別の呼出しなので、それからの戻りは、スレッドをそれがやってきたところからのコンテキストに戻す。結果として、スレッドは、それが防護メモリセグメントにおいて生成したあらゆる資源を割り当て解除しかつＣＰＵ  ＶＰ４０５において実行を行う。
【００４７】
図５のデータベースサーバメモリが二つのセグメント４０２及び４０４に分割されるけれども、より多くのメモリセグメントを有しているアーキテクチャを実施することができる。データベースサーバは、３つ以上のセグメントに分割することができる−−例えば、一つのコアセグメントと二つ以上の防護セグメント。信用ルーチンは、コアセグメントで実行することができかつＵＤＲｓは、ＵＤＲｓが割り当てられた異なるクラスに基づき種々の防護セグメントで実行することができる。例えば、適切な動作に対してかなりの検査が行なわれかつ信頼できることを証明したＵＤＲｓは、第１のＶＰクラスに割り当てることができ、ほとんどまたは全く検査が行われていないＵＤＲｓは、一つ以上の他のＶＰクラスに割り当てることができる。第１のＶＰクラスに属している証明済みの信頼性があるＵＤＲｓは、一つのメモリセグメントで実行することができ、他のクラスに属している不信用ＵＤＲｓは、それらを他のＵＤＲｓから分離すべく別個のメモリセグメントで実行することができる。このように不信用ＵＤＲｓを分離することは、それらがコアデータベースサーバメモリを破損することだけでなく他のＵＤＲｓをクラッシュすることも防ぐことができる。
【００４８】
更に、多重防護セグメントの使用は、より簡単な不良識別を容易にする。多重ＵＤＲｓが単一メモリセグメントで実行されるならば、どのＵＤＲが不良であるかという決定は難しい。異なるメモリセグメントに対するＵＤＲｓを分離することによって、不良のＵＤＲは、どのメモリセグメントが破損されたかを決定することによって複数のＵＤＲｓの中から識別することができる。
各ＶＰは、ＵＮＩＸを基盤としたプラットフォームで個別の処理として実行されるけれども、全てのアクティブＶＰｓの集合は、多重スレッドを有している単一処理として他のプラットフォームで実行することができる。データベースサーバに存在するＶＰｓの数及び型は、企業(enterprise)の目標に依存しかつシステム管理者に対する設計選択事項である。ＶＰの各インスタンスは、同時に多重クライアント要求を受け入れかつ処理することができる多重スレッド型エンティティである。ＶＰの各クラスに対して、ＶＰの二つ以上のインスタンスが同時にアクティブでありうる。例えば、ＣＰＵ  ＶＰの複数のインスタンスは、同時にアクティブでありうるし、それぞれが一つ以上のクライアント要求を同時にサービスする。
【００４９】
同様に、防護ＶＰの複数のインスタンスが存在しうるし、それぞれが一つ以上のＵＤＲｓを並列で実行する。防護ＶＰの単一インスタンスは、全てのＵＤＲｓを代替的に処理しうるかまたは不信用ルーチンに対する各呼出しは、防護ＶＰの専用インスタンスによってサービスされうる。図５のアーキテクチャにおけるＶＰｓは、静的Ｒ／Ｗ許可（即ち、完全または防護のいずれか）を用いるけれども、ことあんるアーキテクチャは、ＶＰｓに対する許可がＶＰがコアメモリセグメントから防護されるべきルーチンを実行しているか否かに基づいて動的に切り替えられることころで可能である。更に、起動時に全てのＶＰインスタンスをひき起こすよりも、ＶＰの一インスタンスは、例えば、不信用ＵＤＲを呼出すことに応答して、必要に応じて動的にひき起こすことができる。
【００５０】
代替的実施例では、不信用ＵＤＲを実行している防護ＶＰは、不信用ＵＤＲの分離を維持すると同時に、そこに存在している資源をアクセスするためにコアメモリに対して“コールバック(call backs)”を実行することができる。ＩＵＳシステムは、コアメモリに存在している資源を変更する許可可能なルーチン呼出しの表を維持する。防護ＶＰは、所望のルーチンに対する表における対応する通常の位置を示すことによってコールバック表にて特定されたルーチン呼出しのいずれかを呼び出すことができる。図７に示すように、例えば、防護ＶＰは、防護ＶＰがルーチン（ｙ）を呼出すことを欲するときにコールバック表６００における位置二（２）を指定しうる。非防護ＶＰが、コアメモリにおいて要求ルーチンを実行するために、防護ＶＰ上で先に実行されていたスレッドを次にピックアップしたときに、非防護ＶＰは、要求ルーチンがコールバック表６００にリストされたことを確認することによってルーチン呼出しによってポイントされたメモリアドレスがコアメモリにおいて適合かつ安全な実行エントリポイントであったということを確実にする。要求ルーチンがコールバック表６００にリストされていなかったならば、要求ルーチンの実行は、阻止される−−即ち、非防護ＶＰは、要求ルーチンを実行しない。このように、コールバック表機構は、防護ＶＰによったなされうるルーチン呼出しを制限しそれによってそれが潜在的にコアメモリにおける不適当な位置にジャンプすることを防ぐ。
【００５１】
コールバック表は、少なくとも二つの異なる方法で実施されうる。まず、コールバック表は、許可可能なルーチンのアドレスのリストを含みうる。コアメモリにコールバックすることを求めているＵＤＲは、コールバック表に対するインデックスとして用いるべきエントリポイント識別子を供給する。非防護ＶＰは、ＵＤＲによって供給された特定のエントリポイント識別子によってポイントされたルーチンを実行する。代替的に、コールバック表は、コアメモリにおける正当な実行アドレスのリストでありうる。ＵＤＲによって特定されたエントリポイントは、エントリポイントの有効性を確認するためにコールバック表にリストされた実行アドレスに対してチェックされうる。
ここで説明した方法及び機構は、特定のハードウェアまたはソフトウェア構成に限定されるものではないが、それらは、データベース動作が実行されうるあらゆるコンピューティング又は処理環境において適用性を見出すであろう。
【００５２】
ここで説明した技法は、ハードウェアまたはソフトウェア、またはこれらの組合せで実施されうる。技法は、それぞれがプロセッサ、プロセッサによって読取り可能な記憶媒体（揮発性及び不揮発性メモリ及び／又は記憶素子を含んでいる）、及び適格な入力及び出力装置を含むプログラマブルコンピュータで実行されるコンピュータプログラムで実施されるのが好ましい。プログラムコードは、記述された機能を実行しかつ出力情報を生成するために入力装置を用いて入力されたデータに適用される。出力情報は、一つ以上の出力装置に適用される。
各プログラムは、コンピュータシステムと通信するために高水準手続き型又はオブジェクト指向型プログラミング言語で実施されるのが好ましい。しかしながら、プログラムは、所望ならば、アセンブリまたは機械言語で実施することができる。いずれの場合でも、言語は、コンパイル済みまたは翻訳済み言語でありうる。
【００５３】
それぞれのそのようなコンピュータプログラムは、記述された手順を行うために記憶媒体または装置がコンピュータによって読み取られるときにコンピュータを構成しかつ動作するための汎用または特殊用途プログラマブルコンピュータによって読取り可能である記憶媒体又は装置（例えば、ＣＤ−ＲＯＭ、ハードディスク又は磁気ディスケット）に記憶されるのが好ましい。また、システムは、コンピュータを特定及び所定の方法で動作するように記憶媒体が構成された、コンピュータプログラムで構成された、コンピュータ−読取り可能記憶媒体として実施されうる。
他の実施例は、特許請求の範囲の範疇内である。
【００５４】
【発明の効果】
本発明の方法は、データベースにおける情報を操作するためにルーチンを実行する、データベースサーバによって実行される、方法であって：データベースマニピュレーションルーチンが特定メモリ範囲から分離されるか否かを決定し；決定に基づいてデータベースマニピュレーションルーチンに対するメモリアクセス許可を選択的に切り替え；かつ選択的に切り替えたメモリアクセス許可を用いてデータベースマニピュレーションルーチンを実行する段階を具備するので、新しいアプリケーションを配置しても優れた性能で情報をアクセスすることができる。
本発明の方法は、データベースにおける情報を操作するためにルーチンを実行する、データベースサーバによって実行される、方法であって：メモリアドレス空間をメモリセグメントに分割し；第１のメモリセグメントにおいてデータベースマニピュレーションルーチンを選択的に実行し；かつ実行しているデータベースマニピュレーションルーチンがメモリセグメントの別のものに情報を書込むことを防ぐ段階を具備するので、新しいアプリケーションを配置しても優れた性能で情報をアクセスすることができる。
【００５５】
本発明のデータベースサーバは、信用ルーチン及び不信用ルーチンを含んでいる複数のデータベースマニピュレーションルーチン；コアメモリセグメント及び防護メモリセグメントを含んでいる複数のメモリセグメントを有している共有メモリアドレス空間；及び複数のルーチンにリンクされた複数の仮想プロセッサを備え、仮想プロセッサは、コアメモリセグメントにおける信用ルーチンを実行するフルアクセス仮想プロセッサと、防護メモリセグメントにおける不信用ルーチンを実行する防護仮想プロセッサとを含んでいるので、新しいアプリケーションを配置しても構成が複雑にならずかつ優れた性能で情報をアクセスすることができる。
本発明のコンピュータソフトウェアは、データベースマニピュレーション方法を実行するためにリンク型ルーチンを有しているデータベースサーバに対して、コンピュータ読取り可能媒体上に存在している、コンピュータソフトウェアであって、コンピュータソフトウェアは、コンピュータに
（ａ）クライアントからデータベース照会を受け取る；
（ｂ）データベース照会をサービスするためにどのルーチンを実行する必要があるかを決定する；
（ｃ）コアメモリへの読取り／書込みアクセスで信用ルーチンを実行する；及び
（ｄ）コアメモリへの読取り専用アクセスで不信用ルーチンを実行する
動作を実行させるための命令を備えているので、新しいアプリケーションを配置しても構成が複雑にならずかつ優れた性能で情報をアクセスすることができる。
【図面の簡単な説明】
【図１】従来のリレーショナルデータベースを示すブロック図である。
【図２】従来の拡張可能オブジェクトリレーショナルデータベース管理システムを示すブロック図である。
【図３Ａ】従来のデータベースサーバアーキテクチャの一例を示す図である。
【図３Ｂ】従来のデータベースサーバアーキテクチャの他の一例を示す図である。
【図４】多重メモリセグメントを有しているデータベースサーバアーキテクチャを示すブロック図である。
【図５】インフォーミックスユニバーサルサーバアーキテクチャを示すブロック図である。
【図６】図５のインフォーミックスユニバーサルサーバアーキテクチャにおけるルーチンの実行を説明するためのフローチャートである。
【図７】図５のインフォーミックスユニバーサルサーバアーキテクチャにおいて用いられうるコールバック表を示すデータ図である。
【符号の説明】
４００  データベースサーバ
４０１  クライアント
４０２  コアメモリ
４０３、４０５、４０９  仮想プロセッサ（ＶＰ）
４０４  主実行キュー
４０６、４０８、４１０  クライアントスタック
４１２  防護メモリ
４１４  防護実行キュー
４１６  防護スタック
【図１】
0004171537.tif 000002
【図２】
0004171537.tif 000003
【図３Ａ】
0004171537.tif 000004
【図３Ｂ】
0004171537.tif 000005
【図４】
0004171537.tif 000006
【図５】
0004171537.tif 000007
【図６】
0004171537.tif 000008
【図７】
0004171537.tif 000009