(57)【要約】原子ファイル検索のための方法及び装置。原子検索動作（４０７）によって、アプリケーション（４０５）はファイルパスがファイルシステムネームスペースキャッシュ（４０６）に存在するか否かに基づいて、ファイルが原子的に開かれるか否かを知ることができる。もし原子的に開かれなければ、ファイルオープン要求が転送され、アプリケーションを実行するのに関連する種々の動作のスケジューリングへの影響を防ぐ、または最小限に抑えることができる。この要求は、アプリケーションによってブロッキングポイント処理（４０８，４０９）を含む処理に転送されることができる。本発明によるオペレーティングシステムは、ファイルシステムネームスペース（４０４）を有するファイルシステム（４００）を備え、オペレーティングシステムカーネル（４０２）はファイルシステム（４００）に動作可能に接続される。オペレーティングシステムカーネルは、ファイルシステムネームスペースキャッシュ及び原子検索動作を含む。
2004507815.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションからの要求を処理して特定のファイルに関連するファイル操作を行う方法であって、
前記要求を受信して前記ファイル操作を行うステップと、
ファイルシステムネームスペースキャッシュから前記特定のファイルに対応するファイルパスを検索することで前記ファイル操作を原子的に行うことを試みる（５００）ステップと、
前記ファイルパスが前記ファイルシステムネームスペースキャッシュに記憶されていないため前記ファイル操作を原子的に行うことができなかった場合、前記ファイル操作を原子的に行うことができなかったことをアプリケーションに対して通知する（５０５）ステップとを、備えたことを特徴とする方法。
【請求項２】
請求項１に記載の方法であって、
前記ファイルに対応するファイルパスが前記ファイルシステムネームスペースキャッシュに記憶されている場合、前記ファイル操作を原子的に行う（５００）ステップと、
前記ファイル操作が原子的に行われた場合、前記ファイル操作が原子的に行われたことを前記アプリケーションに通知する（５０５）ステップとを、さらに備えたことを特徴とする方法。
【請求項３】
請求項１に記載の方法において、
前記ファイルシステムネームスペースキャッシュはオペレーティングシステムカーネル内に配置されることを特徴とする方法。
【請求項４】
請求項２に記載の方法において、
前記ファイルシステムネームスペースキャッシュはオペレーティングシステムカーネル内に配置されることを特徴とする方法。
【請求項５】
アプリケーションからオペレーティングシステムに送信される、前記オペレーティグシステムへの要求を処理してファイル操作を行う方法において、前記オペレーティングシステムは前記ファイル操作を原子的に行うことができない場合、前記アプリケーションに対して通知できる方法であって、
前記オペレーティングシステムに前記要求を送信する（５０２）ステップと、
前記ファイル操作を原子的に行うことができないという通知を前記オペレーティングシステムから受信する（５０５）ステップと、
前記ファイル操作が原子的に行われなかったという前記通知が前記オペレーティングシステムから受信される場合、前記要求を転送する（５０７）ステップとを、備えたことを特徴とする方法。
【請求項６】
請求項５に記載の方法において、
前記要求の転送は、前記アプリケーションを有するユーザスペース内のブロッキングポイント処理に前記要求を送信する（５０７）ステップをさらに備えたことを特徴とする方法。
【請求項７】
請求項５に記載の方法において、
前記要求の転送は、前記オペレーティングシステムのカーネル内のブロッキングポイント処理に前記要求を送信する（５０７）ステップをさらに備えたことを特徴とする方法。
【請求項８】
アプリケーションからの要求を処理し、特定のファイルに関連するファイル操作を行うためのコンピュータプログラムコードを内部に組み込んだコンピュータプログラム製品において、前記コンピュータプログラムコードは、
前記要求を受信し前記ファイル操作を行うための命令と、
前記特定のファイルに対応するファイルパスがファイルシステムネームスペースキャッシュに記憶されているかどうかを判断するための命令と、
前記ファイルに対応するファイルパスが前記ファイルシステムネームスペースキャッシュに記憶されている場合に前記ファイル操作を原子的に行うための命令と、
前記アプリケーションに、前記ファイル操作が原子的に行われたことを通知するための命令と、
前記ファイルパスが前記ファイルシステムネームスペースキャッシュに記憶されていないため前記ファイル操作が原子的に行われなかった場合に、前記ファイル操作を原子的に行うことができないことを前記アプリケーションに通知するための命令とを、備えたことを特徴とするコンピュータプログラム製品。
【請求項９】
請求項８に記載のコンピュータプログラム製品において、
前記コンピュータプログラムコードは、オペレーティングシステムカーネル内に前記ファイルシステムネームスペースキャッシュを保持するための命令をさらに備えたことを特徴とするコンピュータプログラム製品。
【請求項１０】
オペレーティングシステムへの要求を処理しファイル操作を行うためのコンピュータプログラムコードを内部に組み込んだコンピュータプログラム製品において、前記コンピュータプログラムコードは、
前記要求を前記オペレーティングシステムへ送信するための命令と、
前記オペレーティングシステムから、前記ファイル操作が原子的に行われたという通知を受信するための命令と、
前記オペレーティングシステムから、前記ファイル操作を原子的に行うことができなかったという通知を受信するための命令と、
前記ファイル操作が原子的に行われたという通知が受信される場合に前記ファイルを使用するための命令と、
前記ファイル操作を原子的に行うことができなかったという通知が受信される場合に前記要求を転送するための命令とを、備えたことを特徴とするコンピュータプログラム製品。
【請求項１１】
請求項１０に記載のコンピュータプログラム製品において、
前記要求を転送するための命令は、前記アプリケーションを有するユーザスペース内のブロッキングポイント処理へ前記要求を送信するための命令をさらに備えたことを特徴とするコンピュータプログラム製品。
【請求項１２】
請求項１０に記載のコンピュータプログラム製品において、
前記要求を転送するための命令は、前記オペレーティングシステムカーネル内のブロッキングポイント処理へ前記要求を送信するための命令をさらに備えたことを特徴とするコンピュータプログラム製品。
【請求項１３】
アプリケーションからの要求を処理して特定のファイルに関連するファイル操作を行う装置であって、
前記要求を受信して前記ファイル操作を行う手段と、
前記特定のファイルに対応するファイルパスがファイルシステムネームスペースキャッシュに記憶されているかどうか判断する手段と、
前記特定のファイルに対応するファイルパスが前記ファイルシステムネームスペースキャッシュに記憶されている場合、前記ファイル操作を原子的に行う手段と、
前記ファイルパスが前記ファイルシステムネームスペースキャッシュに記憶されているか否かに基づいて前記ファイル操作が原子的に行われたか否かを前記アプリケーションに通知する手段とを、備えたことを特徴とする装置。
【請求項１４】
オペレーティングシステムへの要求を処理してファイル操作を行う装置であって、
前記要求を前記オペレーティグシステムに送信する手段と、
前記ファイル操作が原子的に行われたか否かについての通知を前記オペレーティングシステムから受信する手段と、
前記ファイル操作が原子的に行われたという通知が受信される場合に前記ファイルを使用する手段と、
前記ファイル操作が原子的に行われなかったという通知が受信される場合、前記要求を転送する手段とを、備えたことを特徴とする装置。
【請求項１５】
ファイルシステムネームスペース（４０４）を有するファイルシステム（４００）と、
前記ファイルシステムに動作可能に接続され、少なくとも一つのアプリケーション（４０５）の実行を可能とするよう作用するオペレーティングシステムカーネル（４０２）とを備え、前記オペレーティングシステムカーネルは、
前記ファイルシステムネームスペースからのファイルパスを格納するファイルシステムネームスペースキャッシュ（４０６）と、
特定のファイルに対応する特定のファイルパスが前記ファイルシステムネームスペースキャッシュに記憶されているか否かを判断し、前記特定のファイルパスが前記ファイルシステムネームスペースキャッシュに記憶されているか否かに基づいて前記特定のファイルに関連するファイル操作が原子的に行われているか否かを前記少なくとも一つのアプリケーションに通知するよう動作可能な原子検索動作（４０７）とをさらに備えたことを特徴とするオペレーティングシステム。
【請求項１６】
請求項１５に記載のオペレーティングシステムにおいて、
前記少なくとも一つのアプリケーションは、前記オペレーティングシステムカーネル及び前記ファイルシステムネームスペースに動作可能に接続されているユーザスペース内に存在して動作することを特徴とするオペレーティングシステム。
【請求項１７】
請求項１５に記載のオペレーティングシステムにおいて、
前記少なくとも一つのアプリケーションは、前記オペレーティングシステムカーネル内に存在して動作することを特徴とするオペレーティングシステム。
【請求項１８】
請求項１５に記載のオペレーティングシステムにおいて、
前記オペレーティングシステムカーネルは、もし前記ファイル操作を原子的に行うことができなければ呼び出すことができるブロッキングポイント処理をさらに備えたことを特徴とするオペレーティングシステム。
【請求項１９】
請求項１６に記載のオペレーティングシステムにおいて、
前記オペレーティングシステムカーネルは、もし前記ファイル操作を原子的に行うことができなければ呼び出すことができるブロッキングポイント処理をさらに備えたことを特徴とするオペレーティングシステム。
【請求項２０】
請求項１７に記載のオペレーティングシステムにおいて、
前記オペレーティングシステムカーネルは、もし前記ファイル操作を原子的に行うことができなければ呼び出すことができるブロッキングポイント処理をさらに備えたことを特徴とするオペレーティングシステム。
【請求項２１】
請求項１６に記載のオペレーティングシステムにおいて、
前記ユーザスペースは、もし前記ファイル操作を原子的に行うことができなければ呼び出すことができるブロッキングポイント処理をさらに備えたことを特徴とするオペレーティングシステム。
【請求項２２】
請求項１６に記載のオペレーティングシステムにおいて、
前記オペレーティングシステムカーネル及び前記ユーザスペースは、もし前記ファイル操作を原子的に行うことができなければ呼び出すことができるブロッキングポイント処理をさらに備えたことを特徴とするオペレーティングシステム。
【請求項２３】
オペレーティングシステムに対するアプリケーションからの要求を処理するよう動作可能で、特定のファイルに関連するファイル操作を、
前記ファイル操作を行うために前記要求を前記アプリケーションから前記オペレーティングシステムへ送信するステップと、
前記特定のファイルに対応するファイルパスがファイルシステムネームスペースキャッシュに記憶されているか否かを少なくとも部分的に判断することで前記ファイル操作を原子的に行うことを試みるステップと、
前記ファイルパスが前記ファイルシステムネームスペースキャッシュに記憶されていない場合、前記ファイル操作を原子的に行うことができなかったということを前記アプリケーションに通知するステップと、
前記パスが前記ファイルシステムネームスペースキャッシュに記憶されていないため前記ファイル操作が原子的に行われなかった場合、前記要求を転送するステップとを行うことによって実行する命令実行システム。
【請求項２４】
請求項２３に記載の命令実行システムにおいて、
前記ファイルシステムネームスペースキャッシュは、オペレーティングシステムカーネル内に配置されることを特徴とする命令実行システム。
【請求項２５】
請求項２３に記載の命令実行システムにおいて、
前記要求の転送は、前記アプリケーションを有するユーザスペース内のブロッキングポイント処理に前記要求を送信するステップをさらに備えたことを特徴とする命令実行システム。
【請求項２６】
請求項２３に記載の命令実行システムにおいて、
前記要求の転送は、前記オペレーティングシステムのカーネル内のブロッキングポイント処理に前記要求を送信するステップをさらに備えたことを特徴とする命令実行システム。
【請求項２７】
請求求項２４に記載の命令実行システムにおいて、
前記要求の転送は、前記アプリケーションを有するユーザスペース内のブロッキングポイント処理に前記要求を送信するステップをさらに備えたことを特徴とする命令実行システム。
【請求項２８】
請求項２４に記載の命令実行システムにおいて、
前記要求の転送は、前記オペレーティングシステムのカーネル内のブロッキングポイント処理に前記要求を送信するステップをさらに備えたことを特徴とする命令実行システム。
【発明の詳細な説明】
【０００１】
（背景技術）
ここ数十年における、あらゆる種類の日々のタスクを行うためのパーソナルコンピュータ、ワークステーション及びサーバの使用の著しい増加は、コンピュータシステムが動作する速度が非常に重要になったことを意味する。コンピュータシステムがアプリケーションを実行する速度は、オペレーティングシステムの速度に大きく左右される。最近のコンピュータシステムのオペレーティングシステムはハードウェアリソースの使用を制御・監視し、アプリケーションにプログラミングインターフェースを提供する。
【０００２】
コンピュータシステムにインストールされたオペレーティングシステム及びアプリケーションの性能を落とす一つの処理は、ある入出力（Ｉ／Ｏ）関連の動作を行うためにオペレーティングシステムの実行を一時停止する処理である。このような一時停止はファイルを開くときによく起こる。ファイルを開くためには、オペレーティングシステムはファイルシステムのネームスペースにアクセスすることでファイルへの「パス」を決定しなくてはならない。ファイルシステムのネームスペースへのアクセスは、オペレーティングシステムのタスクの実行を一時停止する。しかしながら、あるファイルがひとたび初めてアクセスされると、そのファイルのためのパスは一般的にメモリに格納されるので、少なくともしばらくの間はファイルのその後のアクセスによってオペレーティグシステムがタスクの実行を一時停止することはない。オペレーティングシステムにタスクの実行を一時停止させない動作は、「原子」動作と呼ばれることが多い。
【０００３】
アプリケーションには、実行時に、ファイルシステムパスがメモリに記憶されているか否かを知る方法が無い。アプリケーションは単にオペレーティングシステムにファイルを開くように求めなくてはならないだけである。アプリケーション開発者は、オペレーティングシステムがファイルシステムネームスペースからファイルパスを決めなくてはならない場合、重大な性能又はスケジューリングの支障が起こるだろうという可能性にただ耐えて、少なくともいくつかの場合にはファイルを開くことが原子的に行われるであろうと期待しなくてはならないだけである。
【０００４】
（発明の開示）
本発明は、ファイルパスがファイルシステムネームスペースキャッシュに存在するか否かに基づいてファイルが原子的に開かれているかどうかを見つけ出すアプリケーションを提供する。この特徴を利用することで、アプリケーション開発者は、前もってファイル操作がタスクの実行を中断するかどうかを判断させてそれに応じて反応するようにアプリケーションを設計することができる。多くの場合、もしファイルを原子的に開くことができなければ、ブロッキングポイント処理を含むであろう他の処理にファイル操作要求を転送するように前記アプリケーションを設計することができる。この特徴を利用することで、アプリケーションを実行するのに関連する種々の動作のスケジューリングへの影響を最小限に抑える、または防ぐことができる。
【０００５】
本発明のひとつの実施例によると、オペレーティングシステムはカーネル、ユーザスペース、及びファイルシステムを有する。前記オペレーティングシステムは、特定のファイルに対応するファイルパスがファイルシステムネームスペースキャッシュに記憶されているかどうかを判断することでアプリケーションから受信した前記特定のファイルに関連するファイル操作要求に応答する。前記オペレーティングシステムは、前記ファイルパスが前記ファイルシステムネームスペースキャッシュに記憶されていない場合、前記ファイル操作が原子的に行われなかった、行うことができなかった、または行われていないということを前記アプリケーションに通知する。前記ファイルを原子的に開くことができない場合、前記アプリケーションは前記要求を転送することができる。前記要求は前記アプリケーションによって、ブロッキングポイント処理を含む処理に転送されることができる。前記ブロッキングポイント処理は、前記カーネル又は前記ユーザスペースのどちらかにあればよい。前記ファイルパスが前記ファイルシステムネームスペースキャッシュに格納されている場合は、例えば、前記ファイルが単に開かれるといったファイル操作が行われ、前記ファイルが原子的に開かれて前記ファイルをスケジューリングの支障無く使用できることが前記アプリケーションに通知される。
【０００６】
ある実施例において、本発明によるオペレーティングシステムは、ファイルシステムネームスペースを有するファイルシステム及び前記ファイルシステムネームスペースに動作可能に接続されたユーザスペースを備える。前記ユーザスペースは、少なくとも一つのアプリケーションの実行を可能にするよう作用する。オペレーティングシステムカーネルは、前記ユーザスペース及び前記ファイルシステムに動作可能に接続される。
【０００７】
前記オペレーティングシステムカーネルは、前記ファイルシステムネームスペースからのファイルパスを格納するファイルシステムネームスペースキャッシュを有する。前記オペレーティングシステムカーネルはまた、原子検索動作とここで呼ばれるものを有する。前記原子検索動作は、アプリケーションがファイルを開く、あるいは同様のファイル操作を行おうとする場合に呼びだされる機能である。前記原子検索動作は、ファイルに対応する特定のファイルパスが前記ファイルシステムネームスペースキャッシュに記憶されているかどうか判断する。前記ファイルパスが前記キャッシュに記憶されていない場合、前記原子検索動作は前記アプリケーションに、特定のファイルが原子的に開かれなかったことを通知し、前記アプリケーションはその状況を適当に処理することができる。
【０００８】
本発明の実施例において、コンピュータプログラムコードは本発明の多くの態様を実行するために使用される。コンピュータプログラムは媒体上に記憶することができる。前記媒体として、ディスケット、テープ、固定ディスクといった磁気媒体や、ＣＤ−ＲＯＭやＤＶＤ−ＲＯＭといった光媒体が可能である。前記コンピュータプログラムコードは、半導体装置にも記憶できる。さらに、前記コンピュータプログラムをインターネットや何らかの他の種類のネットワークを経由して供給することもできる。ネットワークに接続されたワークステーション又はコンピュータシステムは一般に、コンピュータプログラム製品の一部として供給される前記コンピュータプログラムコードを作動させる。このコンピュータシステムは、「プログラム実行システム」又は「命令実行システム」とも呼ぶことができる。前記コンピュータシステム及び測定システムと組み合わせた前記コンピュータプログラムコードは、本発明の方法を実行する手段を形成する。
【０００９】
（本発明を実施するための最良の形態）
本発明は典型的に、コンピュータソフトウェアまたはコンピュータプログラム製品において具体化される。説明されるソフトウェアのすべての特徴が、付記された請求項のうちの何れか特定のひとつにおいて請求されている本発明を実施するのに、必要であるというわけではないと理解されるべきである。完全なソフトウェア製品は、むしろ本発明を十分に可能なものとするために説明される。ソフトウェア処理又は方法が示されている又は説明されているこの開示全体にわたって、あるステップが最初に行われている他のステップに依存することが文脈から明確でない場合は、この方法のステップはいかなる順序で行われても又は同時に行われてもよいということも理解されるべきである。
【００１０】
説明される本発明の実施例は、インターネット上でオープンソースとして直接入手可能である「リナックス」として一般に知られるコンピュータオペレーティングシステムに基づいたコンピューティングプラットフォームにおいて実施される。リナックスはまた、リナックスオペレーティングシステムのためのサービスとサポートを提供するさまざまなベンダを通しても入手可能である。これらのベンダの中には、本発明の譲受人であるノースキャロライナ州、リサーチ・トライアングル・パークのレッド・ハット・インコーポレイティッドがある。本発明の一部を実施するパッチ形式のあるコンピュータプログラムコードの例がこの明細書の最後に記載され、その使用については後述する。さらに簡単なあるコードのサンプルがこの明細書中に記載されており、説明される特定の概念を示す。これらの例の全ては、当業者によって容易に理解されるであろう。リナックスの例は例示のためのみに示されていることも理解されるであろう。ここに述べられる発明の概念は、マッキントッシュ（登録商標）、ユニックス（登録商標）及びウィンドウズ（登録商標）に基づくオペレーティングシステムを含む任意のオペレーティングシステムに基づいた、任意のコンピューティングプラットフォームに適応されることができる。
【００１１】
最後に、発明の概念を示すために用いられるいくつかのブロック図及びフローチャートは相互に他を排除するものではないと理解されるべきである。むしろ、各図は説明される特定の概念を示すのに合わせて作成されている。多くの場合、特定の図面に示された要素やステップは別の図面に示された他の要素やステップと共存するが、分かりやすくするためにある要素又はステップのみが示されている。例えば、図１及び図４のブロック図はともにオペレーティングシステムカーネル及びユーザスペース内の要素を示している。実際のソフトウェアにおいては、両図の要素の全てが存在するかもしれない。しかしながら、分かりやすくするために特定の特徴に関連する要素だけが各図に示されている。
【００１２】
図１に戻ると、オペレーティングシステムカーネル１００及びユーザスペース１０１を有するソフトウェアシステムの種々の要素を示すブロック図が示されている。図１によって示される特徴はサーバとして使用されるコンピュータプラットフォーム又は命令実行システムにとって重要であるため、図１のソフトウェアシステムは「サーバシステム」と呼ぶことができる。オペレーティングシステムカーネル、あるいは単に「カーネル」は、ハードウェアリソースを操作し、基本的な機能を提供し、アプリケーションに基本的なプログラミングインタフェースを提供するオペレーティングシステムソフトウェアの一部である。このようなプログラミングインターフェースは、「アプリケーションプログラミングインタフェース」または「ＡＰＩ」と呼ばれることが多い。本発明の本実施例においては、オペレーティングシステムカーネル１００はカーネル内のアプリケーションプロトコルサブシステム１０２を使用することで通信プロトコルスタックを保持する機能を有している。ＨＴＴＰやＦＴＰなどのアプリケーションプロトコルとＴＣＰ／ＩＰなどの下位プロトコルを区別することは重要である。信頼できるプロトコルモジュール１０３もカーネルに備わっており、プロトコルサブシステム１０２にアプリケーションプロトコル情報及び機能を提供する。関与するプロトコルは、ＨＴＴＰ、ＦＴＰ、又はＨＴＴＰを使用する拡張マークアップ言語（ＸＭＬ）及びハイパーテキストマークアップ言語（ＨＴＭＬ）などのいわゆる「メタアプリケーションプロトコル」を含むネットワーク通信に使用される任意の他のアプリケーションプロトコルが可能である。ここに述べられるＨＴＴＰに言及するということは、ＨＴＭＬ及びＸＭＬを含むということであると理解されるべきである。包括的なオペレーティングシステムキャッシュ１０４もカーネルに備わっており、情報のファイルやページを格納するのに使用することができる。最後に、プロトコルオブジェクトキャッシュ１０５もカーネルの中にあり、プロトコルサブシステム１０２に動作可能に接続される。プロトコルオブジェクトキャッシュは、後述するソフトウェアシステムのある特性にとって重要となる。図１に示すようにこの実施例のプロトコルサブシステムは直接共通ゲートウェイ・インタフェース（ＣＧＩ）及びトランスペアレント・ソケット出力先変更を提供することに注目するべきである。
【００１３】
図１で説明するオペレーティングシステムアーキテクチャ（及び図４を用いて後述するオペレーティングシステムアーキテクチャ）は代表例であることを強調してもしすぎることはない。オペレーティングシステムの中には、あるアプリケーションをカーネルスペースで実行させるものもあれば、ユーザスペースで実行させるものもある。ある環境においては、アプリケーションが両方の場所で作動することも可能で、あるコードはカーネルスペースで作動し他のコードはユーザスペースで作動する。
【００１４】
図１のユーザスペース１０１は、信頼できないモジュールあるいは他のエクセキュータブル１０６を有する。「信頼できる」ソフトウェアモジュール対「信頼できない」ソフトウェアモジュールの意味するものを説明することはこの時点で有益である。当業者には公知であるように、ほとんどの最新のオペレーティングシステムは、ユーザスペースにあるアプリケーション又はソフトウェアモジュールが「サンドボックス」のようなものの中にあるように設計されている。このサンドボックスは、オペレーティングシステムの中のモジュールが壊れないこと又はユーザスペース内で起きることによって悪影響を受けないことを保証している。この概念は、ユーザスペースのモジュールが「信頼できない」とみなされてオペレーティングシステム機能へのアクセスが制限されるようにオペレーティングシステムを設計することで実施される。それに対して、オペレーティングシステムカーネル内のモジュールは「信頼できる」ものであり、オペレーティングシステム機能に完全にアクセスできる。本発明のこの実施例において、上位の通信プロトコルアプリケーションはオペレーティングシステムカーネル内の信頼できるモジュールとして存在できる。これらのカーネル内プロトコルモジュール及びカーネル内プロトコルサブシステムによって、サーバシステムは、オペレーティングシステムがコンテキストを切り替えること無しにアプリケーションプロトコル要求に応答可能となる。全てのオペレーティングシステムが別個のユーザスペースを有するわけではないことに注目するのは重要である。オペレーティングシステムには、オペレーティングシステムカーネルスペース内でアプリケーションを実行するものがある。しかしながら、これらの場合、オペレーティングシステムとアプリケーションの機能的な関係は同じである。オペレーティングシステムはハードウェアを操作し、ＡＰＩを提供し、アプリケーションはＡＰＩを用いて、アプリケーションのタスクを行う。
【００１５】
コンテキストの切替え、又は何らかの他の処理スケジュールの中断を起こさないコンピュータシステムにおける動作は、「原子」動作と呼ばれることが多い。説明したばかりのアーキテクチャでは、通信アプリケーションは、一般にコンテキストの切替えを伴わない「非原子」作業となるであろうものを行うことができる。応答を発生させる必要がある場合、ひとたび応答が既に起こったかのように相応のユーザスペース要求構造が更新されるとカーネルが実行を再開できるようにするメモリ内のカーネル内要求構造に、アプリケーションプロトコル要求についての情報が記憶される。ＨＴＴＰ要求の要求構造の例が下記に示されている。この特定の場合においてユーザ要求構造が示されているが、カーネル要求構造は非常に類似しておりユーザスペース要求構造から容易に得られる。
2004507815.tif 000003
【００１６】
図２はコンテキストの切替えを伴わずに要求に応答する方法を示すフローチャートである。ステップ２０１で、ユーザスペース要求構造が作成される。ステップ２０２で、サーバシステムとして動作する命令実行システムによる実行がオペレーティングシステムカーネルに入る。ステップ２０３で、新しいカーネル要求構造が作成されて要求を処理する。カーネル要求構造は、通常ネットワーク上に要求をするクライアントシステムから、この要求に関連して受信したデータで埋められる。ステップ２０４で、カーネル要求構造は、ユーザスペース要求構造を埋めることでユーザスペースにコピーされる。この「コピー」は、要求構造の使用済み部分にのみ関連したデータを移動させることで最も効率良く行われる。この場合、要求構造のいわゆる「私設領域」も移動されるであろう。この私設領域は、参考のためにアプリケーションが使用できる不透明なポインタである。ステップ２０５で、実行はユーザスペースに戻り、ユーザスペースアプリケーションは要求が処理されたかのように動作を続ける。ユーザスペース要求構造は、別の要求を処理する必要がある場合は上書きされる。カーネルはしかるべき時に、通常に要求を処理する（分かりやすくするために、このステップは図示されていない）。２０６で、オペレーティングシステムは要求を監視する。要求が完了する、あるいは時間切れになれば、実行はステップ２０７でオペレーティングシステムカーネルに入り、カーネル要求構造は２０８で削除され、メモリリソースをセーブする。要求は完了されないが時間切れが起こらなかった場合は、システムは要求を保持し、その要求のための入出力動作が終了した後に、その要求はユーザスペースへ現在の要求として戻される。「一時停止された」要求は、実行を一時停止させることはない。タスクではなく要求が一時停止されるので、実行はユーザスペースで続くことに気付くべきである。要求を二つ以上の入出力動作で一時停止させることも可能である。
【００１７】
図３は、本発明を具体化するオペレーティングシステムに含まれる他の処理、すなわちアプリケーションプロトコル要求に応答してクライアントアプリケーションに送られる、ＨＴＴＰウェブページなどの応答に静的プロトコルオブジェクトを埋め込む処理を示す。この説明は例としてのみＨＴＴＰウェブページに基づいていることに注目すべきである。ＦＴＰなどの他のアプリケーションプロトコルで本発明を実行することも可能である。本発明のこの実施例において、静的プロトコルオブジェクトは図１のプロトコルオブジェクトキャッシュ１０５に記憶されるが、それらは包括的なオペレーティングシステムキャッシュの中にあってもよい。図３のステップ３０１で、サーバはアプリケーションプロトコル要求を受信し、分析する。ＨＴＴＰ要求の形式のアプリケーションプロトコル要求のサンプルを下に示す。このような要求は通常ふたつの改行文字で終わる。
2004507815.tif 000004
ステップ３０２でプリアンブルがクライアントに送り返される。プリアンブルとはＨＴＴＰ応答又は返答のヘッダ部分である。ヘッダ部分の例を下に示す。
2004507815.tif 000005
【００１８】
ステップ３０３で、返答ページの任意の動的部分がサーバ上のメモリバッファ内で作成される。動的部分は、返答の一部分を形成する動的プロトコルオブジェクトからなる。返答はまた静的プロトコルオブジェクトを内部に埋め込むこともできる。ステップ３０４で、動的プロトコルオブジェクトはクライアントアプリケーションに送信される。ステップ３０５で、返答ページの静的部分又は静的プロトコルオブジェクトがプロトコルオブジェクトキャッシュ又は包括的なオペレーティングシステムキャッシュから検索される。ステップ３０６で、静的オブジェクトはクライアントアプリケーションに送信され、ここで静的オブジェクトは完全な返答がクライアントシステムで表示されるように返答の中に埋め込まれる。
【００１９】
図４は本発明のオペレーティングシステムの実施例を示す別のブロック図である。この場合、このブロック図は原子ファイル検索特性の動作を示すように構成されている。図４にはオペレーティングシステム環境の３つの主なセグメント：すなわちファイルシステム４００、ユーザスペース４０１、及びオペレーティングシステムカーネル４０２が含まれている。ファイルシステム４００は、そのファイルシステムスペースにファイルシステムオブジェクト４０３を備えている。ファイルシステムオブジェクトまたは単に「ファイル」は、ファイルシステムスペースの構成要素である。実際には、それらは情報を容器である。通常のファイル、ディレクトリ、及びシンボリックリンクを含む種々の種類のファイルシステムオブジェクトがある。シンボリックリンクは、実際は既存のファイルを指す新しいファイルを作る手段を提供する。シンボリックリンクはソフトリンクとも呼ばれる。リンク付けは分離文字を含む文字列によって行われる。分離記号はリナックス及びユニックス（登録商標）システム上、及びインターネットのＵＲＬシステムでは「／」（スラッシュ）文字であり、それはウィンドウズ（登録商標）システム上の「＼」（逆スラッシュ）文字である。
【００２０】
ファイルシステムオブジェクト名又はファイル名は、例えば、「ｈｏｍｅｗｏｒｋ．ｄｏｃ」のような分離文字を含まない文字列であることに注目するべきである。各ファイルシステムオブジェクトはファイルシステムオブジェクト名を持つ。しかしながら、ファイルシステムオブジェクトパス、すなわち「ファイルパス」は、通常は分離文字で始まり、ファイルの位置を示すパスの種々の部分を特定する文字列である。いくつかのシステムでは、このファイルパスがディレクトリパス又はフォルダパスとも呼ばれ、例えば「／ｈｏｍｅ／ｊｏｅ／ｄｏｃｓ／ｈｏｍｅｗｏｒｋ．ｄｏｃ」などとなる。
【００２１】
図４のファイルシステムはまた、ファイルシステムネームスペース４０４を有する。ファイルシステムネームスペースは、システム内の全てのファイルパスを参照する。全てのファイルのパスは、典型的にディレクトリの形式でファイルシステム装置に記憶される。図４に示されたユーザスペース４０１では、アプリケーション４０５が典型的に備わっている。これらのアプリケーションは、ファイルシステム４００内に保持されているファイルシステムオブジェクト４０３を利用する。未使用のファイルを使用するために、アプリケーション及びオペレーティングシステムはファイルシステムネームスペース動作を行う。このような動作は、例えばファイルを開く、ファイルを読む、ファイルに書き込む、ファイル名を変える、又はファイルをディレクトリ間で移動させるために行われる。他の公知のファイルシステムネームスペース動作もある。この開示のために、これらのファイルシステムネームスペース動作はいずれも一般的には「ファイルを開く」、「ファイルオープン要求」を処理する、ファイル操作を行うなどと呼ばれる。従来の技術においては、アプリケーションが「／ｈｏｍｅ／ｊｏｅ／ｄｏｃｓ／ｈｏｍｅｗｏｒｋ．ｄｏｃ」ファイルの最初の１０００バイトを読みたい場合、アプリケーションは下記のＣ言語の例に示されるのと同様のコンピュータプログラムコードを有するであろう。
2004507815.tif 000006
これらの３つのシステムコールを行った後、オペレーティングシステムカーネルはメモリバッファ「ｂｕｆ」にファイルの最初の１０００バイトを入れるであろう。
【００２２】
オペレーティングシステムカーネルは、ファイルシステムネームスペースキャッシュ４０６を有する。いったんパスがファイルシステムネームスペースキャッシュに記憶されると、上に示した「オープン」システムコールは内部でファイルシステムネームスペースキャッシュにアクセスし、ファイルへのアクセスの速度を上げる。ファイルシステムネームスペースキャッシュはまた「デントリキャッシュ（ｄｅｎｔｒｙ ｃａｃｈｅ）」と呼ばれることもある。ネームスペースキャッシュはファイルのコンテンツを格納しないことに注意すべきである。このネームスペースキャッシュはファイルの属性を格納してもよいであろう。ファイルコンテンツは、公知であり、分かりやすくするために図４からは省いた「ページキャッシュ」とよく呼ばれる、図１で示した包括的なキャッシュなどの、別個のデータ構造に格納される。
【００２３】
上記のような従来の技術では、カーネルは、時間とリソースについてどれだけ要しようとファイルに到達するであろう、そしてファイル名を有するファイルパスがネームスペースキャッシュに既に存在したか否かはアプリケーションにとってトランスペアレントである。もしそうでなければ、カーネルはディスクからファイルパスの詳細を読み込み、入出力が終了するまでそのアプリケーションに関連した処理は一時停止されてコンテキストの切替えが起こり、重大な性能上の支障を引き起こす。
【００２４】
説明したばかりの従来の技術とは異なり、図４のシステムは、本発明のこの実施例による原子ファイル検索を実行する原子検索動作４０７を備えている。原子ファイル検索によってアプリケーション４０５は、ファイルが既にネームスペースキャッシュに格納されているか否かを検出することができる。以下のコードは、その特性が実際にはどのように使用されるかを示す。
2004507815.tif 000007
「Ｏ＿ＡＴＯＭＩＣＬＯＯＫＵＰ」フラグ及び新しい「−ＥＷＯＵＬＤＢＬＯＣＫＩＯ」は、オープンシステムコールのためのコードを返すことに注目すべきである。ファイルパスがまだ格納されていないことがわかると、アプリケーションは、ファイルのオープンをアプリケーション開発者によって適当であると判断されるような別の処理へ戻すか、転送することができる。この処理はブロッキングポイント処理を行う処理となる場合もある。
【００２５】
ブロッキングポイント処理は図４のユーザスペースの４０８に、あるい図４のはカーネルの４０９に備えることができる。「ブロッキングポイント」とは、検索によって、可能性のあるコンテキスト切替えが起こるであろうポイントである。「ブロッキングポイントの処理」には、性能を改善するようにファイルのオープンを管理できる別のプロセス／スレッドにこの検索を返すことを伴う。
【００２６】
図５は、原子検索動作の一例をフローチャートの形式で示す。ステップ５０１で、アプリケーションは、文字列によって示される開かれるべきファイル名を決める。５０２で、オペレーティングシステムに対してファイルオープン要求がなされる。ステップ５００で、オペレーティングシステムカーネルはこの要求を受信し、原子的にファイルを開くことを試みる。原子オープンを試みるために、カーネルはファイルシステムネームスペースキャッシュに適当なファイルパスがないか調べる。ステップ５０３は、このようなファイルの存在の欠如などのエラーについて調べる決定ポイントである。この処理は、従来技術と同じ方法で行われる。エラーがある場合、５０４のエラー処理ルーチンによって処理される。エラーがない場合、処理は続く。オペレーティングシステムカーネルは、ステップ５０５で、パスがファイルシステムネームスペースキャッシュに記憶されたためファイルが原子的に開かれたか又は開かれているかについてアプリケーションに通知する。ファイルが原子的に開かれた場合、そのファイルはステップ５０６で使用される。原子的に開かれなかった場合、原子的オープンがステップ５０５で不可能であったという事実がアプリケーションに通知されているので、可能なブロッキングポイントがステップ５０７で処理される。
【００２７】
この実施例では、アプリケーションはファイルパスが格納されているかどうかについての問い合わせを送信しないことに注目するべきである。アプリケーションは単に、オペレーティングシステムカーネルに対してファイルを原子的に開きたいということを通知するだけである。ファイルパスが格納されているためカーネルが応じることができる場合、ファイルは開かれ、処理がアプリケーションに戻される。ファイルパスが格納されていない場合、そのときファイルは開かれず、−ＥＷＯＵＬＤＢＬＯＣＫＩＯはアプリケーションに戻される。この特徴についてのここでの記述に関して、「開かれた」「開かれるであろう」「開かれている」などの用語が区別なく使用される。同様に、「行われた」「行われている」「行われるであろう」などのファイル操作に関する用語が区別なく使用される。キャッシュの検査、ファイルのオープン、およびオペレーティングシステムカーネルからアプリケーションへの通知の厳密なタイミングに関係なく、本発明の動作は同じである。
【００２８】
上述のオペレーティングシステムアーキテクチャには多くの変形があるが、そのいずれも原子検索動作を有することができる。例えば、ファイルシステム装置は、オペレーティングシステムカーネルを保持しているコンピュータシステムに備わる必要は無く、代わりにネットワーク上でアクセスされてもよい。この場合、ファイルシステムネームスペースは、ネットワーク接続されたファイルシステム装置とともに設置されるか、オペレーティングシステムカーネルを保持しているシステム上に位置するか、両方の場所に分配されるかである。全てのオペレーティングシステム環境が別個の保護領域としてユーザスペースを有するわけではないことに注意することも重要である。例えば組み込まれたプロセッサとともに通常使用されるものなどいくつかのオペレーティングシステムでは、アプリケーションがオペレーティングシステムカーネル内で保持され実行される。この場合でも、オペレーティングシステムはアプリケーションにＡＰＩを提供し、アプリケーションがユーザスペースの中で作動しているのと全く同じようにオペレーティングシステムはＡＰＩを介してアプリケーションと通信する。
【００２９】
原子検索特性を実行するコードを示すソースコード一覧の一例が、請求項の前のこの明細書の最後に記載される。このソースコード一覧は「ソースコード例」というタイトルが付けられている。ソースコードは公知の差分パッチ形式のものである。そのソースコードは、インターネット上で、及び本出願の譲受人であるレッド・ハット。インコーポレイティッドなどのインターネットのサポートを提供する会社から取得できるオープンソースオペレーティングシステムであるリナックスオペレーティングシステムの公的に入手可能なバージョン２．４．２にパッチをあてる。
【００３０】
先に述べたように、いくつかの実施例では、本発明はパーソナルコンピュータやワークステーションなどのプログラム可能なコンピュータシステム又は命令実行システム、または他のマイクロプロセッサによるプラットフォーム上で作動するコンピュータプログラムコードによって実行される。図６はこのようにして本発明を実行しているコンピュータシステムのさらなる詳細を示す。システムバス６０１は主な構成要素を相互接続する。システムは、このシステムのための中央演算処理装置（ＣＰＵ）として機能するマイクロプロセッサ６０２によって制御される。システムメモリ６０５は典型的に、読み出し専用メモリ（ＲＯＭ）、ランダムアクセスメモリ（ＲＡＭ）などの多数の種類のメモリやメモリ領域に分けられる。システムメモリはまた基本入出力システム（ＢＩＯＳ）を有してもよい。複数の一般的な入出力（Ｉ／Ｏ）アダプタ又は装置６０６が存在する。分かりやすくするために、３つのみを図示している。これらは、固定ディスクドライブ６０７、ディスケットドライブ６０８、ネットワーク６１０、及びディスプレイ６０９を含む種々の装置に接続している。本発明の機能を実行するコンピュータプログラムコード命令は、固定ディスク６０７に記憶されている。システムが作動している時、命令は部分的にメモリ６０５にロードされ、マイクロプロセッサ６０２によって実行される。入出力装置のひとつは、随意に、インターネットとすることができるネットワーク６１０への接続のためのネットワークアダプタまたはモデムである。図６のシステムは例示的な一例としての意味を持つだけであることに気付くべきである。多くの種類の汎用コンピュータシステムが入手可能で、使用することができる。
【００３１】
本発明の要素は、（ファームウェア、常駐ソフトウェア、マイクロコードなどを含む）コンピュータプログラムコードとしてハードウェア及び／又はソフトウェアにおいて具体化されてもよい。さらに、本発明は、図６に示すような命令実行システムによって使用される、又はこのシステムと関連して使用される媒体に組み込まれた、コンピュータ使用可能な又はコンピュータ可読のプログラムコードを有するコンピュータ使用可能な又はコンピュータ可読の記憶媒体上のコンピュータプログラム製品の形を取ってもよい。このような媒体が図６に図式的に示されていて、ディスケットドライブを表している。コンピュータ使用可能な又はコンピュータ可読の媒体は、命令実行システムによって使用される、又はこのシステムと関連して使用されるプログラムを有する、記憶する、通信する、または伝送できる任意の媒体とすることができる。コンピュータ使用可能な又はコンピュータ可読の媒体は、例えば、電子システム、磁気システム、光システム、電磁気システム、赤外線システム、又は半導体システムである。媒体はまた単に、コンピュータプログラム製品がインターネットなどのネットワークを通じて「ダウンロードされる」場合に検索される情報のストリームであってもよい。コンピュータ使用可能な又はコンピュータ可読の媒体は紙であってもよいし、プログラムが印刷される他の適切な媒体であってもよいことに注目するべきである。
【００３２】
この明細書に述べられた特徴を実現する差分パッチ形式のソースコードは、ｗｗｗ．ｒｅｄｈａｔ．ｃｏｍ／〜ｍｉｎｇｏ／ＴＵＸ／において、この出願の出願日現在で公的に入手可能である。本発明を実現するソフトウェアシステムのための完全なソースコードも、この出願の譲受人であるレッド・ハット・インコーポレイティッドからこの出願の出願日現在、取得可能である。上記インターネットアドレスにあるソースコードは、インターネット上において、及び本出願の譲受人であるレッド・ハット・インコーポレイティッドなどのインターネットサポートを提供する会社から取得可能なオープンソースオペレーティングシステムであるリナックスオペレーティングシステムのバージョンにパッチをあてるためのものである。このコードは、公知のいわゆる「ａｃ４」パッチによって既にパッチされたリナックスオペレーティングシステムのバージョン２．４．５にパッチをあてるためのものである。
【００３３】
リナックスのバージョン２．４．５は、いろいろある中でも特に、ｗｗｗ．ｋｅｒｎｅｌ．ｏｒｇ／ｐｕｂ／ｌｉｎｕｘ／ｋｅｒｎｅｌ／ｖ２．４／ｌｉｎｕｘ−２．４．５．ｔａｒ．ｇｚ．で入手可能である。上記公知のａｃ４パッチは、いろいろある中でも特に、ｗｗｗ．ｋｅｒｎｅｌ．ｏｒｇ／ｐｕｂ／ｌｉｎｕｘ／ｋｅｒｎｅｌ／ｐｅｏｐｌｅ／ａｌａｎ／２．４／ｐａｔｃｈ−２．４．５−ａｃ４．ｇｚ．で入手可能である。
【００３４】
発明の特定の実施例がここに述べられている。コンピュータ技術の当業者なら、本発明が他の環境の中では他のアプリケーションを有することを速やかに認識するであろう。事実、多くの実施例と実施が可能である。本発明の請求項は、本発明の範囲を上述の特定の実施例に限定することを意図したものでは決してない。
ソースコード例
2004507815.tif 000008
2004507815.tif 000009
2004507815.tif 000010
【図面の簡単な説明】
【図１】本発明の実施例を実行するソフトウェアのいくつかの特徴を示すブロック図である。
【図２】本発明の一つの実施例を実行するソフトウェアによって行われる方法を示すフローチャートである。
【図３】本発明の実施例を実行するソフトウェアによって行われる方法を示す別のフローチャートである。
【図４】本発明の実施例を実行するソフトウェアのいくつかの特徴を示すブロック図である。
【図５】本発明の一つの実施例を実行するソフトウェアによって行われる方法を示すフローチャートである。
【図６】本発明の実施例を実行しているコンピュータシステムのブロック図である。
【図１】
2004507815.tif 000011
【図２】
2004507815.tif 000012
【図３】
2004507815.tif 000013
【図４】
2004507815.tif 000014
【図５】
2004507815.tif 000015
【図６】
2004507815.tif 000016
【国際公開パンフレット】
2004507815.tif 000017
2004507815.tif 000018
2004507815.tif 000019
2004507815.tif 000020
2004507815.tif 000021
2004507815.tif 000022
2004507815.tif 000023
2004507815.tif 000024
2004507815.tif 000025
2004507815.tif 000026
2004507815.tif 000027
2004507815.tif 000028
2004507815.tif 000029
2004507815.tif 000030
2004507815.tif 000031
2004507815.tif 000032
2004507815.tif 000033
2004507815.tif 000034
2004507815.tif 000035
2004507815.tif 000036
2004507815.tif 000037
2004507815.tif 000038
2004507815.tif 000039
2004507815.tif 000040
2004507815.tif 000041
2004507815.tif 000042
2004507815.tif 000043
2004507815.tif 000044
2004507815.tif 000045
2004507815.tif 000046
2004507815.tif 000047
2004507815.tif 000048
2004507815.tif 000049
2004507815.tif 000050
2004507815.tif 000051
2004507815.tif 000052
2004507815.tif 000053
2004507815.tif 000054
【国際公開パンフレット（コレクトバージョン）】
2004507815.tif 000055
2004507815.tif 000056
【国際調査報告】
2004507815.tif 000057
2004507815.tif 000058
2004507815.tif 000059