JP2000224251A - メッセ―ジ格納構造内のデ―タへ高速アクセスする方法及び装置 - Google Patents

メッセ―ジ格納構造内のデ―タへ高速アクセスする方法及び装置

Info

Publication number
JP2000224251A
JP2000224251A JP11119597A JP11959799A JP2000224251A JP 2000224251 A JP2000224251 A JP 2000224251A JP 11119597 A JP11119597 A JP 11119597A JP 11959799 A JP11959799 A JP 11959799A JP 2000224251 A JP2000224251 A JP 2000224251A
Authority
JP
Japan
Prior art keywords
request
message
thread
connection
folder
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.)
Pending
Application number
JP11119597A
Other languages
English (en)
Inventor
William J Yeager
ウイリアム・ジェイ.・イーガー
Frederic C Batty
フレデリック・シー.・バッティ
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.)
Sun Microsystems Inc
Original Assignee
Sun Microsystems Inc
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 Sun Microsystems Inc filed Critical Sun Microsystems Inc
Publication of JP2000224251A publication Critical patent/JP2000224251A/ja
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Small-Scale Networks (AREA)
  • Information Transfer Between Computers (AREA)
  • Computer And Data Communications (AREA)
  • Communication Control (AREA)

Abstract

(57)【要約】 【課題】競合を低減したマルチスレッド・システムのメ
ッセージ格納構造内のメッセージへアクセスするための
方法及び装置を提供する。 【解決手段】新規接続を受理するために使用可能なプロ
セスが存在するか否かを最初に決定し、次いで、前記の
新規接続の責務を1つ以上のスレッドを有する前記のプ
ロセスへ転送することによって競合を低減する。1つの
スレッドが選択され、かつ初期化され、そして、同スレ
ッドはメッセージ格納構造内のメッセージまたはデータ
へのアクセスを求めるクライアント・リクエストを管理
する。終了リクエストを受信した際、または所定の条件
が満たされた際、スレッドは終了する。

Description

【発明の詳細な説明】
【0001】
【発明の属する技術分野】一般的に、本発明はコンピュ
ータ・ソフトウェア及びクライアント−サーバー・アプ
リケーションの分野に関する。特に、本発明は分散コン
ピューティング環境内のデータへアクセスする方法に関
する。
【0002】
【従来の技術】1990年代におけるネットワーク・コ
ンピューティングの急速な成長は、電子メールと最も一
般的に称される普及した通信形態をともなう。家庭、企
業、小規模ビジネス、高等教育機関または政府組織で
は、更に多くの個人がある種のコンピュータ・ネットワ
ークへ接続されたコンピュータへアクセスできるように
なった。これによって、電子メールは好ましい通信方式
として急速に受け入れられつつある(多くの環境では、
既に好ましい通信方式となっている)。一度限りの簡単
なメッセージの送信であるか、長い論議若しくは会話で
あるかを問わず、人々は電子メールが通信のための能率
的かつ効果的な方法であることを認識している。
【0003】電子メールは企業及び大学などの大きな組
織の内部ネットワーク内でのメッセージ送信に過去何年
間も使用されている。そして、電子メールは固有のフォ
ーマット及びプロトコルに一般的に基づいている。その
一方、インターネットは電子メールを大企業の領域から
メインストリームへ導き出した。インターネットは公的
にアクセス可能な世界的コンピュータ・ネットワークで
ある。このため、インターネットの電子メール能力に起
因して、インターネットは広く使われている。更に、固
有のフォーマット及びプロトコルに代わって、TCP/
IP(“トランスミッション・コントロール・プロトコ
ル/インターネット・プロトコル”)、即ち、インター
ネットの通信レイヤーはTCP/IPに基づくイントラ
ネットとして知られるコンピュータ・ネットワークを私
的組織内で構築すべく使用されている。例えば、このア
プローチは企業または大学による内部コンピュータ・ネ
ットワークの保有を可能にし、同内部コンピュータ・ネ
ットワークはインターネットと互換性を有し、かつウェ
ブ・サイト、ハイパーリンクを形成する能力及び電子メ
ールの送受信を含むインターネットの全ての特徴を有す
る。
【0004】電子メールに関しては、インターネットの
爆発的成長及びイントラネットの拡大する魅力が電子メ
ール・メッセージの急増を招来した。一般的に、電子メ
ール・メッセージは受信され、かつネットワーク・サー
バーまたはクライアント・マシン及び独立型マシンのハ
ード・ドライブへ格納される。電子メール・メッセージ
を電子的に保存し、かつ要求に応じて簡単に検索する傾
向または営み及び必要性がある。例えば、アイデア、コ
メントまたは分析を含むメッセージを異なる複数の国の
研究者間などで数年間にわたって送信するような任意の
研究環境では、これは重要となり得る。例えば、連絡の
取れなくなった2人の研究者間で2年前の特定の時刻に
送信された特定のメッセージを検索する必要性が予測で
きる。勿論、この能力はビジネス環境または他の環境に
おける重要かつ有効な特徴であり得る。
【0005】電子メールの急増と、保存するメッセージ
の増大する数量と、保存メッセージを検索することを求
める増大する要求とは、現在のインデックス付け方式及
びメッセージ記憶領域(メッセージ格納構造)に関する
問題点を露呈した。メッセージをクライアント・マシン
の代わりにサーバー内へ保存する傾向が強まりつつあ
る。メール・サーバーはメッセージの中心的保管庫とし
て機能する。更に、メール・サーバーは定期的にバック
アップされ、管理者によってメンテナンスされ、さら
に、壊れた際(例:クラッシュした際)には、(ほとん
どの場合)迅速に修理されるという利点を有する。従っ
て、ユーザーがリクエストを送信した際、同リクエスト
はサーバーによって取り扱われ、かつクライアントへ送
信される。
【0006】今日の電子メール・メッセージの構成はリ
クエストの種類同様に様々である。簡単なケースでは、
所定のヘッダー以外に、電子メール・メッセージは数行
のテキストからなる簡単なメッセージ部分を有し得る。
その一方、電子メールは幾つかの添付ファイルを有し得
る。添付ファイルの例は、複雑なグラフィックス、オー
ディオ・セグメント、ビデオ、アニメーション、特別な
エンコーディング(例えば、非ラテン語系言語で記述さ
れている場合)を有するテキスト、及び他の電子メール
・メッセージ全体を含む。
【0007】メッセージに関するリクエストは、所望の
情報の深度及び幅の点で様々である。例えば、リクエス
トは2人の間で数年前に送信された1つのメッセージの
全内容を求めるリクエストであり得る。また、リクエス
トは過去24時間の間に送信された特定の主題に関する
任意のメッセージの受取人のリスト(リクエストはメッ
セージを開いた受取人及びメッセージを開かなかった受
取人を区分けしている)を求めるリクエストであり得
る。つまり、電子メール・メッセージの性質及び電子メ
ール・メッセージ・データに関するリクエストの性質は
更に複雑になってきており、これによって、メッセージ
の格納及び検索を取り扱ううえでの現在のメール・サー
バーの弱点が露呈される。
【0008】前記のメッセージの格納及び検索に現在使
用されている殆どのメール・サーバーはインターネット
・メッセージ・アクセス・プロトコル、即ち、IMAP
に基づいて構築されている。IMAPプロトコルはメッ
セージを操作するためのコマンドと、同メッセージに関
連する全ての情報及びこれらに対して実施されたアクシ
ョンを分類して格納するためのインデックスとのコレク
ションである。IMAPに基づいて構築されたサーバー
がIMAPプロトコルの全ての効果を得るためには、メ
ッセージの内容と、メッセージに関するメタ・データと
を含むネットワーク上のユーザー及びメッセージに関す
る情報を、IMAPインデックス付けの効果を利用する
方法で格納する必要がある。IMAPサーバーはデータ
をIMAPインデックス付けにある程度基づいて格納す
る。しかし、迅速で信頼でき、かつ競合を生じないデー
タの検索及び格納を最適化する方法で、これを実施する
IMAPサーバーは存在しない。
【0009】現在のIMAPサーバーは、競合問題と、
低いパフォーマンスを招来する他の非能率性とに直面し
ている。これらのIMAPサーバーはレコードを形成す
るフィールドのコレクションとしてメッセージ・データ
を取り扱う、即ち、同IMAPサーバーはレコードに基
づいている。その一方、ユーザー・インボックスへの新
規メッセージの書き込みは、インボックス内における他
のオペレーションの実施からユーザーを締め出す。これ
らのIMAPサーバーのメッセージ格納構造は、IMA
P内で利用可能なインデックス付けを効果的に使用すべ
く設計されていない。例えば、ユーザーは特定のフィー
ルド(例:日付、受取人、主題など)に関する情報のみ
をメールボックス内の全てのメッセージから望み得る。
IMAPサーバーはデータに関する一般的なユーザーの
リクエストを満たすのに必要な情報より更に多くの情報
を検索する。従って、特定のユーザーへ送信された特定
の主題に関するメッセージの数量を単に得るために、I
MAPサーバーは全てのメッセージの全ての内容をディ
スクから読み込み得る。更に、現在のIMAPサーバー
はIMAP内で可能な完全性及び整合性の強力なチェッ
ク能力に欠けている。
【0010】他のメール・プロトコル及びオペレーティ
ング・システムは、メッセージ全体の読み込みまたはコ
ピーを、メッセージに関するリクエストされた情報の種
類に関係なく必要とする。例えば、ポスト・オフィス・
プロトコル(POP)に基づいて構築されたサーバーは
メッセージ全体をそのオペレーションにおいて配信す
る。これはUNIXオペレーティング・システム内のフ
ァイルベースの古いメール環境であるVARMAILに
類似している。VARMAILでは、メッセージの配信
はメール・フォルダへの全ての書き込みオペレーション
をロックアウトする。この誤ったプロシージャはメール
配信システムの速度を大幅に低下させる。更に、VAR
MAIL環境は同じ電子メール・メッセージの複数のコ
ピーをクライアント・マシンのメモリ内に格納すること
を要する。
【0011】
【発明が解決しようとする課題】従って、サーバーをベ
ースとしたメッセージ格納構造内のメール・メッセージ
へアクセスし、かつ同メール・メッセージを操作する方
法であって、ロッキング競合を最小限に抑制し、かつメ
ッセージ格納構造の構成の効果を利用することによって
メール・メッセージへの高速アクセスを提供する方法が
必要である。メッセージのメモリ効率の良い高速検索及
び操作をハイエンド・ユーザー・ハイボリューム分散コ
ンピューティング環境内で可能にすべく、この方法はメ
ッセージ格納構造内に提供された高いレベルのインデッ
クス付けの効果及びメッセージ・データを利用する。
【0012】
【課題を解決するための手段】本発明の目的を達成すべ
く、メッセージ格納構造内のデータへアクセスするため
の方法、装置及びコンピュータ読み取り可能媒体を提供
する。本発明の1つの態様に基づき、マルチスレッド・
システムのメッセージ格納構造内のデータへアクセスす
るための方法を開示する。プロセスを新規接続の受理に
使用可能か否かをシステムは決定し、同新規接続に関す
る責務を前記のプロセスへ転送し、同プロセスは1つ以
上のスレッドを有する。1つのスレッドを選択し、かつ
初期化する。そして、メッセージ格納構造内のメッセー
ジまたはデータへのアクセスを求めるクライアント・リ
クエストを前記のスレッドは管理する。終了リクエスト
を受信した際、または所定の条件が満たされた際、同ス
レッドを終了させる。
【0013】本発明の1つの実施形態では、リクエスト
をクライアント・リクエスト待ち行列から受信すること
によって、クライアント接続が確立される。プロセスを
選択し、接続を同プロセスへ通知する。システム内の選
択したプロセス及び他のプロセスによるアクセスが可能
な共有メモリから前記の接続に関する情報を、前記の選
択したプロセスは検索する。別の実施形態では、プロセ
ス及びスレッド識別子を格納するために、共有メモリ内
でセルを割り当てる。そして、スレッドを入力ポーリン
グへ関連付けして、スレッドを待ち状態にする。これに
よって、選択したスレッドは初期化される。更に別の実
施形態では、選択したプロセスは着信データを知らせる
警告を入力ポーリング・スレッドから受ける。そして、
着信データはプロセスと、同プロセス内のスレッドとに
対してルーティングされる。更に別の実施形態では、選
択したプロセス内の接続スレッドへのクリティカル信号
はクリティカル信号スレッドによって取り扱われる。ク
リティカル信号スレッドは選択したプロセス全体の終了
(さらに、同プロセス内の全ての接続スレッドの突然終
了)を防止し、かつクリティカル信号の原因となった接
続スレッドのみを規則正しく終了させる。
【0014】本発明の別の態様では、メッセージ格納構
造内のメッセージを複製する方法を開示する。別のユー
ザー・フォルダがメッセージを参照していることを表示
するために、メッセージに関連するメッセージ格納構造
内のリファレンス・カウンタを更新する。メッセージに
関連する複製ユーザー・フォルダ・セルを宛先ユーザー
・フォルダへ付加する間、メッセージを格納する宛先ユ
ーザー・フォルダへのアクセスを制限する。そして、前
記のユーザー・フォルダ・セルはメッセージ上の情報を
含む一方で、同メッセージの実際の内容を含まない。本
発明の更に別の態様では、宛先ユーザー・フォルダを閉
じる前に、他のロックが宛先ユーザー・フォルダ上に存
在するか否かを決定する。本発明の更に別の態様では、
リファレンス・カウンタを更新する間、メッセージに対
応するインデックス・ディレクトリ・セルへのアクセス
を一時的に制限する。
【0015】本発明の更に別の態様では、ユーザー・フ
ォルダ、インデックス・フォルダ及びデータ・バケット
を含むメッセージ格納構造内のメッセージの特定の部分
へアクセスする方法を開示する。対応するインデックス
・フォルダ・セルの位置を知るために、メッセージに関
連するメール・フォルダ・セルを検査する。次いで、デ
ータ・バケット内に含まれるメッセージの特定のセクシ
ョンの位置を決定するために必要な情報を獲得するため
に、インデックス・フォルダ・セルを検査する。そし
て、メッセージの特定のセクションを検索する。別の実
施形態では、インデックス・ディレクトリ及びインデッ
クス・ファイルを識別するために、メッセージをメール
・フォルダ・セルへ書き込んだ日付は使用される。メッ
セージに関連するインデックス・ファイル・セルの位置
を決定するために、インデックス・ディレクトリ・セル
は使用され、インデックス・ファイル・セルは探索して
いるメッセージの特定のセクションへ導く情報を含む。
【0016】本発明の別の態様では、メッセージ格納構
造内のメッセージへアクセスするためのコンピュータ・
システムを開示する。メッセージ格納構造への接続を要
求するクライアント・リクエストはリクエスト・ルータ
によって受信され、かつルーティングされる。リクエス
ト・ルータは1つ以上のマルチスレッド・リクエスト・
ハンドラへ接続されており、各ハンドラは1つ以上の接
続スレッドを有する。リクエスト・ハンドラ識別器(識
別子)及び接続スレッド識別器(識別子)を有する共有
メモリがリクエスト・ルータに関連している。リクエス
ト・ルータへ接続された全てのリクエスト・ハンドラは
共有メモリへアクセス可能である。
【0017】1つの実施形態では、リクエスト・ルータ
はリクエスト・ハンドラ生成器を有する。新規接続スレ
ッドを維持するために使用可能なリクエスト・ハンドラ
の不在が確定した際、リクエスト・ハンドラ生成器は新
規リクエスト・ハンドラを形成可能である。別の実施形
態では、リクエスト・ルータは同リクエスト・ルータへ
接続された1つ以上のリクエスト・ハンドラを管理す
る。更に別の実施形態では、リクエスト・ハンドラ内の
アクティブ接続スレッドへの入力イベントを検出するた
めの入力ポーリング・スレッドを各リクエスト・ハンド
ラは有する。更に別の実施形態では、各リクエスト・ハ
ンドラは同リクエスト・ハンドラ内の特定のアクティブ
接続スレッドへのクリティカル信号を検出するためのク
リティカル信号スレッドを有する。クリティカル信号ス
レッドはクリティカル信号の原因となった特定のアクテ
ィブ接続スレッドのみを終了し、これによって、リクエ
スト・ハンドラ内の他のアクティブ接続スレッドを機能
した状態に維持する。更に別の実施形態では、リクエス
ト・ルータによって割り当てられた共有メモリは接続ス
レッドに関連したスレッド固有データ・セルを有し、同
スレッド固有データ・セルはリクエスト・ハンドラ識別
器(識別子)及び接続スレッド識別器(識別子)を含
む。
【0018】本発明とその更なる効果は添付図面に基づ
く以下の説明から最もよく理解できる。
【0019】
【発明の実施の形態】本発明の好ましい実施形態を以下
に詳述する。好ましい実施形態の一例を添付図面に示
す。本発明を好ましい実施形態に関連して詳述するが、
これは本発明を1つの好ましい実施形態に制限すること
を意図するものではない。逆に、請求の範囲により定義
される本発明の趣旨及び範囲を逸脱しない改良例、変更
例及び等価等を包含することを意図する。
【0020】メッセージ格納構造(格納装置)内のデー
タへアクセスし、かつ同データを操作するための改善さ
れた方法であって、フォルダ内の競合を最小限に抑制す
るとともに、インデックス付けの効果及び他の参照デー
タを利用する方法を複数の図面に示す。本実施形態にお
いて、メッセージ格納構造内のメッセージ・データを操
作する際、フォルダの必要な部分のみを保護するため
に、本発明の方法はセクション・ロッキングを使用す
る。更に、メッセージ格納構造内のメッセージ・データ
の位置の迅速な検出、同メッセージ・データの複製、ま
たは同メッセージ・データの操作を行うために、本発明
の方法はカウンタと、レコードのサイズ及びオフセット
と、リファレンス・ポインタとを使用する。前記のよう
に、本実施形態では、電子メール・メッセージをサーバ
ーへ格納し、かつ同電子メール・メッセージへインデッ
クス付けを行うことが望ましい。そして、サーバーはク
ライアントのメッセージに関するデータに対するクライ
アント・リクエストに応答する。これを行う2つのプロ
トコルはインターネット・メッセージ・アクセス・プロ
トコル(IMAP)及びポスト・オフィス・プロトコル
(POP)である。本実施形態では、サーバーは最も一
般的に使用されているメール・プロトコルのメッセージ
を管理し、かつ格納すべく構成可能である。本実施形態
において、サーバーはIMAPコマンド及びIMAPメ
ッセージに主に応答すべく構成されているが、POPま
たは他のメール・プロトコルに基づくメッセージを処理
し、かつ格納し得る。本実施形態において、IMAPサ
ーバーはある程度のインデックス付けを現時点で有す
る。しかし、メッセージ格納構造の全体的な構成及びイ
ンデックス付けのレベルはデータに関する複雑で厳しい
ユーザー・リクエストを効果的に処理できない。
【0021】従って、例えば、本実施形態のサーバーは
IMAPに基づいて構成されたサーバーであり、同サー
バーは一般的に数千のユーザーのインターネット電子メ
ールを格納する。従って、本実施形態で使用するインタ
ーネット電子メール・メッセージの構成を簡単に説明す
ることは効果的といえる。当業者に知られているよう
に、インターネット電子メール・メッセージはMIME
に基づいてフォーマットされている。MIMEメッセー
ジはMIMEヘッダー及び1つ以上の本体部分、即ちセ
クションからなり、各本体部分はヘッダーを有する。電
子メール・メッセージがオーディオ、ビデオ・イメー
ジ、非英語テキスト及びHTML等の様々な種類のメデ
ィアを含むことを、MIMEフォーマットは可能にす
る。本実施形態のメッセージ格納構造はMIMEセクシ
ョンを以下に詳述する各種インデックスを介して格納す
る。本発明のメッセージ・アクセス方法は特殊なリクエ
ストの効果的な取り扱いを可能にする。例えば、特定の
メッセージの全てを検索することなく、同メッセージの
特定のMIMEセクションのみを検索することを本発明
のメッセージ・アクセス方法は可能にする。
【0022】図1は本発明の1つの実施形態に基づくメ
ッセージ・アクセス・コンフィギュレーションの各種コ
ンポーネント及び方法を示すブロック図である。本実施
形態では、格納され、かつアクセスされるメッセージは
インターネット電子メール・メッセージである。インタ
ーネット・メッセージ(IM)アクセス・デーモン10
0はメッセージ格納構造を有するIMAPサーバー等の
ネットワーク・メール・サーバー上に常駐する。本発明
で使用するメッセージ及びインデックス情報を格納する
ためのIMAPメッセージ格納構造の例は、メッセージ
格納構造と称する同時係属出願に開示されている。デー
モン100内の親プロセス102はクライアント104
から送信された(一般的には、接続のコマンドまたはリ
クエストである)データに応答する。クライアントから
の接続のリクエスト106は待ち行列内に格納される。
そして、リクエスト106を形成するプロトコルに基づ
き決定されたポートで、サーバーは同リクエスト106
を受信する。例えば、ポート番号143はIMAPコマ
ンドのために予約されており、ポート110はPOPコ
マンドのために予約されている。これらのプロトコルの
詳細は以下に開示する以外に、メッセージ格納構造と称
する同時係属出願に開示されている。メール・トランス
ファ・エージェント(MTA)がサーバー(図1におけ
る図示略)上に常駐し、かつクライアントからのリクエ
ストに応答することは当業者に周知である。サーバーが
リクエスト106に応答した後、クライアントとの接続
108が確立される。そして、クライアントはメールへ
のアクセス及びメールの操作に用いるコマンド等のデー
タの送信を開始することができる。
【0023】親プロセス102は並行動作する数種類の
子プロセス110の制御権を有する。親プロセス102
の制御下にある子プロセスのリスト112は親プロセス
102によって維持されている。各子プロセス110は
数種類のスレッドを有し、各スレッドは幾つかの状態の
うちの1つを有し得る。本実施形態では、50〜200
個のスレッドが各子プロセス内に存在する。スレッドの
数量は経験的に決定可能であり、かつシステムが動作す
る特定のプラットフォームに基づいている。クライアン
ト及びサーバーの間の接続が確立された後、線114で
示すスレッド及びクライアントの間のセッションが確立
される。
【0024】本実施形態では、子プロセス、スレッド、
及び同スレッドに関連する接続は、番号または識別子を
それぞれ有する。この情報は一連のデータ・セルを有す
る共有メモリ内に格納され、同共有メモリは全ての子プ
ロセスによる読み出し及び更新が可能である。一般的
に、子プロセス同士は互いの存在を認識しないうえ、互
いに通信できないため、共有メモリの使用は効果的であ
る。別の好ましい実施形態では、子プロセス同士が互い
に直接通信可能な場合、共有メモリを削除してもよい。
他の子プロセス内の他のスレッドがメールボックスに対
して書き込みを実行している場合に、特定の子プロセス
内のスレッドがメールボックスを開こうとすると、競合
が発生し得る。本実施形態では、子プロセスが形成され
た際、親プロセスは同子プロセスに関連する共有メモリ
・セルを即座に割り当てる。
【0025】スレッドが子プロセス内で形成された後、
スレッド固有データ・セル(Thread-specific data cel
l)が同スレッドへ割り当てられる。本実施形態では、
サーバーを起動した際、共有メモリは親プロセスによっ
て構築され、かつ事前割り当てされる。別の好ましい実
施形態では、必要に応じて、共有メモリをオペレーティ
ング・システム内の他のエンティティによって構築し得
る。共有メモリのサイズは親プロセスが管理し得るプロ
セス及びスレッドの最大数に基づいている。更に、共有
メモリのサイズは異なる複数のプラットフォーム上でそ
れぞれ異なる。前記のように、共有メモリは一連のデー
タ・セルからなる。これらのセルはプロセスに対応する
座標“i”と、このプロセス内のスレッドに対応する座
標“j”とによって識別される。従って、セル(Pi
j)はスレッド固有データ・セルであり、同スレッド
固有データ・セルは派生メールボックス・インデックス
“k,”をさらに含む。メールボックスの更新またはメ
ールボックスからのメッセージのコピー等の1つのスレ
ッドのアクションを同スレッドから他のスレッドへ通知
することを、派生メールボックス・インデックス
“k,”は可能にする。1つのスレッドのアクションを
同スレッドが同じ親プロセスの下にある他の全てのスレ
ッドへ通知することを、共有メモリ内に存在する本実施
形態のスレッド固有データ・セルは可能にする。主にロ
ッキング競合に関する前記のセルの目的は以下に詳述す
る。従って、共有メモリはサーバー上に常駐し、親プロ
セスが起動した後、共有メモリは親プロセスによって事
前割り当てされ、かつ制御される。本実施形態では、ス
レッド固有データ・セルはユーザー名と、ログイン時刻
または接続時間と、使用するメール・プロトコル(例:
IMAPまたはPOP)とをさらに含む。
【0026】図2は本発明の1つの実施形態に基づくメ
ッセージ・アクセス方法の概略を示すフローチャートで
ある。前記のように、ネットワーク上のメール・データ
を受信し、かつ操作する複数のユーザー間でのロッキン
グ競合を減少するために、本発明のメッセージ・アクセ
ス方法はメッセージ格納構造と共に用いられる方法であ
る。ステップ200では、サーバーは接続リクエストを
ネットワーク上のクライアントからのリクエストの待ち
行列から受信する。別の好ましい実施形態では、本発明
のメッセージ・アクセス方法はメッセージ格納構造への
アクセスを行う独立ユーザーによる使用が可能である。
スレッド及びクライアントの間のセッションを形成する
接続を確立すべく、クライアントはサーバーへ接続する
ためのリクエストを最初に生成する必要がある。クライ
アントが使用するメール・プロトコルに基づいて決定さ
れたポートにおいて、サーバーは接続リクエストを受信
する。ステップ202では、許容可能なスレッドの最大
数より少ない数のスレッドを有する子プロセスが存在す
るか否かをシステムは決定する。前記のように、子プロ
セス内のスレッドの最大数は特定のプラットフォームに
おけるパフォーマンスに基づいて決定可能である。例え
ば、ハイボリューム分散型環境では、スレッドの数量は
50〜200個の範囲である。これは親プロセスに含ま
れる子プロセスのリストをチェックすることによって決
定される。全ての既存子プロセスが最大数のスレッドを
有する場合、ステップ204に示すように、親プロセス
は新規子プロセスを形成する。本実施形態のこの段階に
おいて、親プロセスは共有メモリ内の所定量のスペース
を子プロセスに対して割り当てる。本実施形態では、子
プロセスが形成され、かつ接続が確立されることによっ
て、親プロセスがクライアント・リクエストの処理を再
開できるようになるまで、親プロセス及びクライアント
・リクエストの間の更なるアクティビティをブロックす
るために、親プロセスはセマフォを共有メモリ内で使用
する。新規子プロセスを適切に形成し、同子プロセスに
よる新規接続の受理を保証するために、これは望まし
い。ステップ206では、新規子プロセスが形成された
後、親プロセスは接続責務を選択した子プロセスへ渡
す。子プロセスがステップ202で使用可能な場合、親
プロセスは接続責務を最低数のスレッドを有する子プロ
セスへステップ206において渡す。別の好ましい実施
形態では、親プロセスは適切な子プロセスを選択するた
めの他の基準を使用可能である。
【0027】ステップ208では、受理した接続を管理
するために、選択した子プロセスはスレッドを初期化す
る。受理した接続はクライアントが使用するプロトコル
(例:IMAPまたはPOP)に基づいて管理される。
本実施形態では、各子プロセスは新規アクティブ接続ス
レッドを初期化する初期化スレッドを有する。別の好ま
しい実施形態では、新規アクティブ接続スレッドは子プ
ロセスの外側で初期化可能である。ステップ210で
は、選択した子プロセス及びスレッドはクライアント・
リクエストを管理する。メッセージのコピーまたはメッ
セージの検索などのクライアント・リクエストを管理す
るスレッドの例は以下に詳述する。このステージでは、
マスター及びスレーブの関係がクライアント(マスタ
ー)と、同クライアントに対して新たに形成されたスレ
ッド(スレーブ)との間に形成される。ステップ212
では、クライアントが接続を終了するか、または所定時
間のアイドル状態からタイムアウトした際、親プロセス
はスレッド・クリーンアップを開始する。スレッド・ク
リーンアップ及びイグジット(exit)では、スレッドに
関連する全てのリソースは他のスレッドが利用できるよ
うに解放される。スレッド・クリーンアップの後、クラ
イアントのためのメッセージ・アクセス・プロシージャ
が完了する。
【0028】図3は図2のステップ206に示す接続責
務を子プロセスへ渡すステップの詳細を示すフローチャ
ートである。ステップ300では、親プロセスは選択し
た子プロセスへ信号を送信する。接続メンバーによって
識別され、かつ子プロセスによって管理される新規接続
が存在することを、この信号は示す。別の好ましい実施
形態では、セマフォを信号に代えて使用可能である。子
プロセスはSLEEP(スリープ)状態にあり得る。こ
の場合、信号は選択した子プロセスを目覚めさせる。ス
テップ302では、子プロセスは図1bで示す共有メモ
リへアクセスする。子プロセスは新規接続番号をスレッ
ド固有データ・セルから読み取る。コマンドがPOP若
しくはIMAPまたは他のメール・プロトコールで記述
されているか否かを、スレッド固有データ・セルはさら
に示す。ステップ304では、新規接続が子プロセスに
よって受理され、メールを操作及び検索するための新規
リクエストをこの時点で受理可能なことを親プロセスへ
通知する。ステップ306では、親プロセスは選択した
子プロセスのための接続カウンタをインクリメントす
る。選択した子プロセスのための接続カウンタまたはス
レッド・カウンタを親プロセスがインクリメントした
後、同親プロセスは次の接続リクエストを受信するまで
システム・コールを待つ。次いで、受理した接続を管理
すべく、選択した子プロセスがスレッドを初期化する図
2のステップ208をプロセスは続ける。
【0029】図4は図2のステップ208に示すスレッ
ドを初期化するステップの詳細を示すフローチャートで
ある。ステップ400では、システムは共有メモリ内の
スレッド固有データ・セルを割り当てる。スレッド固有
データ・セルは座標Pi及びTiを有し、Pはプロセス番
号を示し、Tはスレッド番号を示す。これらの座標また
は番号はスレッドをグローバル・コンテキスト内で管理
するために使用される。本実施形態では、スレッド固有
データ・セルは接続番号を有する。ステップ402で
は、選択した子プロセス内において、システムはアクテ
ィブ接続スレッドを形成し、かつ実行する。コマンドを
受信したポート・アドレスによって決定されるプロトコ
ル固有をアクティブ接続スレッドは有する(即ち、IM
APまたはPOPに適合している)。本実施形態では、
新規アクティブ接続スレッドはステップ404で待ち状
態となり、同新規アクティブ接続スレッドはユーザー・
リクエストまたはシステム割り込みなどの入力イベント
の発生を待つ。アクティブ接続スレッドは入力待ち状態
にあり、同アクティブ接続スレッドはリクエストを受信
するか、またはアイドル・タイムアウトになる。ステッ
プ406では、メッセージ格納構造内のデータへのアク
セスを求めるクライアント・リクエストまたは同データ
を読み取ることを求めるクライアント・リクエストの管
理を子プロセス及び新規スレッドは開始する。次いで、
アクティブ接続スレッドによってクライアント・リクエ
ストを管理する図2のステップ210をプロセスは続け
る。
【0030】図5は図2のステップ210に示す選択し
た子プロセス及びスレッドによるクライアント・リクエ
ストの管理のステップの詳細を示すフローチャートであ
る。本実施形態では、ステップ500に示すように、子
プロセスの入力ポーリング・スレッドは親プロセスが新
規データを受信したことを知らせる警告を受ける。本実
施形態では、オペレーティング・システム内に存在する
ライト・ウェイト・プロセスのプールから選択された1
つのライト・ウェイト・プロセスによって入力ポーリン
グ・スレッドは実現される。別の好ましい実施形態で
は、子プロセスは入力を監視するために別個のスレッド
を使用しない。例えば、各接続スレッドは入力データを
直接待つ責務を有し得る。新規データは新規IMAPコ
マンドまたはPOPコマンドであり得る。新規データは
3つの状態、即ち、1)新規コマンド(クライアント・
スレッドが新規コマンドを処理する)、2)アイドル・
タイム・アウト(スレッドはクライアント・コマンドを
継続する一方で、アイドル・タイム・アウト・コンディ
ションをクライアントへ通知する)及び3)突然終了接
続(接続が突然切断され、子プロセスはクライアント・
コマンドの処理を継続する一方で、接続が切断されたこ
とをクライアントへ通知する)のうちのいずれか1つの
状態となり得る。ステップ502では、入力ポーリング
・スレッドは新規受信データをアクティブ接続スレッド
に対してポストする。アクティブ接続スレッドは待ち状
態にある。そして、アクティブ接続スレッドがデータを
受信したことを、同アクティブ接続スレッドが入力ポー
リング・スレッドから通知された後、アクティブ接続ス
レッドは目覚める。ステップ504では、アクティブ接
続スレッドは受信データ(一般的には、コマンド)を処
理する。これは図6に詳細に示す。親プロセスから新規
データを受信するために入力ポーリング・スレッドを使
用する技術は、オペレーティング・システム内の限られ
た数のライト・ウェイト・プロセスの使用を最小限に抑
制する。しかし、前記のように、別の好ましい実施形態
では、着信データを監視するために、入力ポーリング・
スレッドなどの別個のスレッドを子プロセスは使用しな
い。着信データを検出するために、各アクティブ接続ス
レッドは独自のライト・ウェイト・プロセスを有し得
る。前記のように、本実施形態では、ポーリング・スレ
ッドを実現するために、1つのライト・ウェイト・プロ
セスのみを要する。ポーリング・スレッドは任意の着信
データを監視し、かつ同データを適切なアクティブ接続
スレッドに対してポストする。着信データを監視し、同
データが特定の接続スレッドのためのデータであるか否
かを決定するために、各アクティブ接続スレッドが独自
のライト・ウェイト・プロセスを有することの必要性を
入力ポーリング・スレッドは低減する。
【0031】ステップ506では、受信データが終了コ
マンドであるか否か、または接続が他の任意の方法によ
って終了されたか否かをシステムは決定する。例えば、
終了コマンドはログアウト・コマンドまたはクイット・
コマンド(quit command)であり得る。データが終了コ
マンドである場合、または接続が終了した場合、制御は
図2のステップ212へ移行し、システムはスレッド・
クリーンアップ及びイグジットを行う。受信データが終
了コマンドでない場合、システムはステップ508に示
すように次のアクティベーションを待つ待ち状態へ戻
る。
【0032】接続を終了する別の方法としては、クリテ
ィカル信号スレッドと称される専用の特別スレッドによ
る終了が挙げられる。クリティカル信号はオペレーティ
ング・システムからクリティカル信号の原因となったア
クティブ接続を有するプロセスへ送信される。そして、
クリティカル信号スレッドがクリティカル信号を検出す
る。本実施形態では、クリティカル信号は不正メモリア
クセスまたは不正インストラクションを試みる接続スレ
ッドが原因となって生じる。例えば、スレッド内のコー
ドは不正命令(例えば、値をゼロで除算すること)を試
みるか、または存在しないメモリ・アドレスへのアクセ
スを行い得る。クリティカル・コンディションが発生し
た際、クリティカル信号スレッドはオペレーティング・
システムから送信された信号を受信し(オペレーティン
グ・システムはハードウェアから直接通知を受ける)、
クリティカル信号の原因となった接続スレッドを規則正
しく終了させる。複数のスレッドのうちの1つがクリテ
ィカル信号の原因となった際、プロセス全体の終了と、
同プロセス内の全ての接続スレッドの終了とを引き起こ
すクリティカル信号への望ましくないリアクションを、
クリティカル信号スレッドは防止する。本実施形態で
は、各接続スレッドのコンテキストはプロセス内の他の
接続から効果的に隔離されている、即ち、ファイアウォ
ールで隔てられている。この結果、有害なスレッドまた
はクラッシング・スレッドによって、無害なスレッドの
リソースまたはデータが破壊されることを恐れずに、無
害なスレッドは動作の継続が可能である。従って、プロ
セス全体をダウンさせることなく、クリティカル信号ス
レッドは全てのファイルをアンロックして閉じたうえ、
全ての接続を切断し、さらにクラッシュする全ての接続
スレッドの接続の共有メモリをクリアする。
【0033】図6はクライアントから送られた一般的な
COPY(コピー)コマンドをアクティブ接続スレッド
によって管理する本発明の1つの実施形態に基づく方法
を示すフローチャートである。これは図2のステップ2
10で示す選択した子プロセス及びアクティブ接続スレ
ッドによるクライアント・リクエストの管理の方法を示
す一例である。図6に示すクライアント・リクエストは
IMAP COPYコマンドである。COPYコマンド
はDELETE(デリート)、READ(リード)、M
OVE(ムーブ)などの様々なコマンドのうちの一例で
ある。COPYコマンドでは、クライアント(C1)は
メッセージ(m)をインボックス・フォルダからフォル
ダ(またはメールボックス)fへコピーすることを望
む。背景説明として述べると、新規着信メッセージを受
信し、かつ保持するインボックス以外に、ユーザーは特
定のトピックに関するメッセージを保持するためのカス
タム・フォルダを形成可能である。COPYコマンドが
有効であるためには、メッセージ及びフォルダfが実在
する必要がある。クライアントはfへの接続(cn1)
を有し、これによって、fは選択され、かつアクティブ
になる(即ち、関連するスレッドtを有する)。クライ
アントはメッセージをインボックスからコピーすること
を望んでいるため、同クライアントは選択されて開かれ
たインボックスを有する。別のクライアント(C2)は
同じフォルダfを選択して開いており、同別のクライア
ント(C2)はフォルダを活発に使用している。メッセ
ージmをインボックスからフォルダfへコピーすべく、
C1はIMAP COPYコマンドをサーバーへ送信す
る。本実施形態では、メッセージをコピーした際、メッ
セージ格納構造と称する同時係属出願に開示されている
ように、システムはメッセージ・リファレンスをフォル
ダfの末端へ付加し、かつメッセージ格納構造内の適切
なカウンタを更新する。以下に詳述するように、本実施
形態のメッセージ格納構造及びスレッド・ロッキング機
構の構造を使用することによって、メッセージの長さに
左右されることなく、COPYコマンドは約50バイト
のデータをシステム内で複製することを要するのみであ
る。別の好ましい実施形態では、複製するバイト数は変
化し得る。その一方、メッセージ全体の内容をコピーす
る必要があり得る。
【0034】フォルダfは開かれており、かつ同一子プ
ロセスの2つのアクティブ接続スレッドを有する。C1
からの複数の接続のうちの1つの接続cn1は待ち状態
にある。接続cn1はCOPYコマンドで目覚める。f
が選択された際、fのファイル記述子またはオペレーテ
ィング・システム識別子iを有するフォルダのためのユ
ーザー・コンテキストがこれによって形成される。ステ
ップ600では、別のフォルダfによるmの参照を反映
させるために、システムはmに関連するインデックス・
ディレクトリ・セル(メッセージ格納構造と称する出願
におけるアイテム116)内のリファレンス・カウント
(メッセージ格納構造と称する出願におけるアイテム2
06)をインクリメントする。リファレンス・カウント
及びインデックス・ディレクトリ・セル並びに以下に詳
述する他のフィールド及びセルは、メッセージ格納構造
と称する同時係属出願に詳述されている。このステップ
は図7に関連して以下に詳述する。コピー・プロシージ
ャ中におけるエラーまたはクラッシュのイベントでは、
リファレンス・カウントは低過ぎるより高過ぎるほうが
常に安全である。このため、メッセージを実際に付加す
る後よりも、その前に、リファレンス・カウントをイン
クリメントすることが望ましい。
【0035】ステップ602では、C1はfを開き、こ
れによって、前記のように、fのためのユーザー・コン
テキストと、識別子またはファイル記述子Iとが形成さ
れる。COPYコマンドを説明する目的で、C2がfを
既に選択して開いた状態を想定する。本実施形態では、
スレッドがフォルダを選択して開いた際、これは他のス
レッドのロック・アウトが可能なことを意味しない。即
ち、同じ子プロセス内の別のスレッドによってフォルダ
がロックされたことを認識していない他のスレッドは、
同フォルダへの書き込みオペレーションを試み得る。1
つのスレッドがフォルダを閉じた際、同フォルダ上の全
てのロックが消失する。そして、これらのロックを保持
していた全てのスレッドには同ロックの消失が通知され
ない。別のプロシージャはこれらの特徴に取り組むもの
であり、以下に詳述する。
【0036】ステップ604では、スレッドtはfをロ
ックする。フォルダfは同フォルダfを選択して開いて
いたスレッドのリスト、即ち、ファイル記述子リスト
と、同フォルダf上のロックの数をカウントするための
カウンタとを有する。フォルダfが開かれた際、ファイ
ル記述子Iはステップ602でリストへ付加される。f
がロックされた際、ロック・カウンタはステップ604
でインクリメントされる。ステップ606では、システ
ムはメッセージをフォルダfへコピーする。メッセージ
mに関連するセルはfのユーザー・フォルダへ付加され
る。ユーザー・フォルダの詳細はメッセージ格納構造と
称する同時係属出願に開示されている。このステップは
図8に関連して以下に詳述する。mをfへコピーした
後、スレッドtはf上における同スレッドtのロックを
ステップ608で除去する。このステージでは、tがそ
のロックを解放した直後、同じプロセス内の別のスレッ
ドはfをロック可能である。次いで、スレッドはステッ
プ610でfを閉じることを試みる。しかし、ステップ
612に示すように、fが同じ子プロセス内の別のスレ
ッドによってロックされているか否かをシステムが決定
するまで、スレッドはフォルダを閉じることができな
い。前記のように、スレッドがフォルダを閉じた場合、
フォルダ上の全てのロックは消失する。従って、本実施
形態では、フォルダを閉じる前に、フォルダに関連する
ロック・カウンタをチェックすることによって、システ
ムはフォルダ上の他のロックをチェックする。残された
ロックが存在する場合、ステップ616において、ファ
イル記述子リスト内の適切なファイル記述子をマークす
ることによって、システムはfを“クローズド”として
マークする。しかし、システムはフォルダを実際に閉じ
はない。これはフォルダ上のスレッド・ロックを取り扱
うプロシージャの一部である。スレッドtはフォルダが
実際に閉じられていないことを認識していない。しか
し、スレッドtはフォルダが閉じられているかのように
オペレーションを継続する。フォルダをスレッドtの視
野から閉じた後、COPYコマンドは完了する。他のロ
ックがフォルダ上に存在しない場合(即ち、ロック・カ
ウンタがゼロの場合)、ステップ614において、子プ
ロセスはfを閉じ、プロセス・ライブラリからのプロシ
ージャを使用して他の全てのファイルをクローズドとし
てマークする。このステージにおいて、コピーは完了す
る。
【0037】図7は図6のステップ600に示す適切な
インデックス内のリファレンス・カウンタをインクリメ
ントするステップの詳細を示すフローチャートである。
ステップ700では、メッセージ格納構造と称する同時
係属出願に開示されている対応するインデックス・ディ
レクトリ・セル(図1のアイテム116)を含む図1の
インデックス・ディレクトリ104等のインデックス・
ディレクトリをシステムは開く。ステップ702では、
システムはインデックス・ディレクトリに関連するファ
イル記述子を検索する。ステップ704では、システム
はメッセージmに関連するインデックス・ディレクトリ
・セルへのセクション・ロックの適用を試みる。各メッ
セージは関連するインデックス・ディレクトリ・セルを
有する。同インデックス・ディレクトリ・セルは、セル
内のリファレンス・カウント(メッセージ格納構造と称
する同時係属出願の図2の参照カウント・フィールド2
06)を更新するためにロックを要するインデックス・
ディレクトリの唯一の部分である。別のスレッドがロッ
クをセル上に既に有し得る。このため、ステップ706
において、システムはセクション・ロックが成功したか
否かをチェックする。ロックが不成功であった場合に
は、例えば、アイドル・タイムアウト・フラグによって
表示され、ステップ708において、コピー失敗を示す
エラー・メッセージがクライアントへ返される。ロック
が成功した場合、システムは、メッセージmに関連する
インデックス・ディレクトリ・セル内のリファレンス・
カウントをインクリメントする。リファレンス・カウン
トをインクリメントした後、システムはステップ704
で取得したインデックス・ディレクトリ・セル上のセク
ション・ロックを除去する。セル上のセクション・ロッ
クを除去するために、システムはセルのオフセット及び
バイト数を必要とする。インデックス・ディレクトリ内
の複数のセルは同時にセクション・ロックされ得るの
で、リファレンス・カウントをインクリメントする際の
ロッキング競合を低減する。
【0038】オペレーションがフォルダfの代わりにイ
ンデックス・ディレクトリ・フォルダを使用する点を除
いて、プロセス内の残りのステップは図6のステップ6
10〜616に類似している。従って、ステップ714
では、スレッドtはインデックス・ディレクトリ・フォ
ルダを閉じることを試みる。ステップ716では、イン
デックス・ディレクトリ・フォルダが同じプロセス内の
別のスレッドによってロックされているか否かをシステ
ムは決定する。インデックス・ディレクトリ・フォルダ
が別のスレッドによってロックされている場合、ステッ
プ718において、子プロセスはインデックス・ディレ
クトリ・フォルダをクローズドとしてマークする。しか
し、フォルダが安全に閉じられ得る状態になるまでは、
子プロセスはフォルダを実際に閉じない。フォルダfの
場合のように、スレッドtはインデックス・ディレクト
リ・フォルダが閉じられているかのようにオペレーショ
ンを継続する。他のスレッドによるロックがフォルダ上
に存在しない場合、子プロセスはインデックス・ディレ
クトリ・フォルダをステップ720で閉じる。インデッ
クス・ディレクトリ・フォルダが閉じられた後、または
クローズドとしてマークされた後、COPYコマンド・
プロセスはフォルダfを開く図6のステップ602を続
ける。
【0039】図8はメッセージmをフォルダfへコピー
する図6のステップ606の詳細を示すフローチャート
である。ステップ700において、システムはメッセー
ジmに対応するユーザー・フォルダ・セル(メッセージ
格納構造と称する同時係属出願の図1c及び図6に詳細
を開示)をフォルダfの末端で複製する。セルは特定の
メッセージに関するデータを含む。そして、セルはユー
ザー・フォルダ・ディレクトリ(メッセージ格納構造と
称する同時係属出願の図2に示す)内のユーザー・フォ
ルダ内に含まれる。本実施形態では、セルは約54バイ
トの長さを有し、かつ約13のフィールドを含む。別の
好ましい実施形態では、セルの長さ及びフィールド数は
変化し得る。プロセスはフォルダfの末端を探索し、メ
モリ内に既にキャッシュしておいた54バイト・セルを
フォルダの末端へ書き込む。これは超高速書き込みオペ
レーションである。そして、全てのステージにおいて、
メッセージm全体を複製またはコピーする必要はない。
ステップ802では、メッセージmがインデックス・フ
ァイル内でグローバル(プライベートの逆)にインデッ
クス付けされたか否かをプロセスは決定する。メッセー
ジが例えば256キロバイトなどの特定サイズ未満であ
る場合、同メッセージはグローバルにインデックス付け
可能である。メッセージ・サイズが大きすぎる場合、同
メッセージはクライアント・マシンにおいてインデック
ス付けされる。そして、インデックス・データがメール
・サーバー上へ配置される。メッセージ格納構造と称す
る同時係属出願の図1c及び図6のユーザー・フォルダ
・セル内のフィールド620に示す可変インデックス・
レコードのオフセットの値を検査することによって、メ
ッセージがグローバルにインデックス付けされたか否か
を決定できる。可変インデックス・レコード・オフセッ
トがゼロである場合、メッセージmはグローバルにイン
デックス付けされている。この場合、スレッドtがその
ロックをフォルダfから除去する図6のステップ608
をプロセスは続ける。可変インデックス・レコード・オ
フセットがゼロでない場合、ステップ804に示すよう
に、プロセスはメッセージmに関するプライベート・イ
ンデックス・データをフォルダfのプライベート・イン
デックス・ファイル内で複製する。次いで、プロセスは
図6のステップ608を続ける。
【0040】図9は本発明と、メッセージ格納構造と称
する同時係属出願に開示されているメッセージ格納構造
と称する発明とにそれぞれ開示する1つの実施形態に基
づくメッセージ格納構造内に含まれるメッセージ内のデ
ータの特定部分へアクセスする方法のフローチャートで
ある。本実施形態で使用するIMAPプロトコルでは、
FETCH(フェッチ)コマンドはメッセージの特定の
本体部分(例:MIMEセクション)を検索するために
使用するデータへアクセスするために使用可能である。
当業者が認めるように、インターネット電子メール・メ
ッセージはMIMEフォーマットに基づいて常には構成
されている。FETCHコマンドは図2のステップ21
0に示す一般的なクライアント・リクエストを管理する
選択した子プロセス及びスレッドの別例である。
【0041】ステップ900では、メッセージ格納構造
と称する同時係属出願に開示するメッセージに対応する
ユーザー・フォルダ・セル130内の到達時刻フィール
ド610を読み取ることによって、スレッドはメッセー
ジがメッセージ格納構造へ書き込まれた日付を決定す
る。ステップ902では、スレッドは直前のステップで
確定したメッセージ格納構造へのメッセージの書き込み
の日付に関するトークンを検索する機能を起動する。F
ETCHコマンドを実行するために必要な全てのファイ
ルをスレッドが開くことをトークンは可能にする。本実
施形態では、スレッドによって最初に開かれたファイル
はインデックス・ディレクトリ及びインデックス・ファ
イルを有するインデックス・ファイルである。後の時点
で、スレッドはメッセージ格納構造と称する同時係属出
願に開示されているデータ・バケット識別子を使用し
て、その日付の適切なデータ・バケットを開く。その特
定の日付におけるこれらのファイルが既に開かれている
場合、同ファイルを開くために、スレッドはトークンを
取得する必要がない。
【0042】ステップ904では、メッセージ格納構造
と称する同時係属出願に開示されているメッセージに対
応するユーザー・フォルダ・セル138内に格納された
インデックス・ディレクトリ・セル番号607をスレッ
ドは獲得する。ステップ906では、直前のステップで
取得したインデックス・ディレクトリ番号に対応するイ
ンデックス・ディレクトリ・セルをスレッドは読み取
る。本実施形態では、インデックス・ディレクトリ・セ
ルはインデックス・ファイル・オフセット及びインデッ
クス・ファイル・レコード・サイズを含む。別の好まし
い実施形態では、対応するインデックス・ファイル・セ
ルを直接指し示すポインタまたはアドレスをセルまたは
レコードは含み得る。ステップ908に示すように、こ
のオフセット及びレコード・サイズに基づき、スレッド
はメッセージに関連した対応するインデックス・ファイ
ル・セルを読み取る。FETCHコマンドで探索した特
定の本体部分へアクセスするために現在必要な全ての情
報をインデックス・ファイル・セルは含む。メッセージ
格納構造と称する同時係属出願に詳細を開示するよう
に、データ・バケット内に格納されたメッセージの様々
なセクションのサイズ及び開始位置またはオフセットを
スレッドが迅速に決定することを可能にする幾つかの情
報アイテムを、インデックス・ファイル・セルは含む。
例えば、インデックス・ファイル・セルはメッセージ・
エンベロップ・データ及び本体データと、メッセージ・
ヘッダー・サイズと、データ・バケット識別情報と、デ
ータ・バケット内に格納されたメッセージの様々なセク
ションの位置を決定するために使用可能なMIMEセク
ション・オフセット・リストとを有する。別の好ましい
実施形態では、様々なメッセージ・セクションの位置を
決定するために、他のフィールドまたはポインタを使用
可能である。
【0043】前記のように、FETCHコマンドは潜在
的に長いメッセージの特定部分へアクセスするために使
用できる。例えば、メッセージ内のヘッダーを除いた特
定のMIMEセクションのみを検索することをユーザー
は望み得る。また、ユーザーはメッセージの添付ファイ
ルのみを検索することを望み得る。ステップ910はク
ライアントがリクエストしたものが有効であるか否かを
スレッドが決定する検証ステップである。FETCHコ
マンドが特定のMIME本体部分(即ち、セクション)
に対するものである場合、ステップ908で読み取った
インデックス・ファイル・セル内のセクション・オフセ
ット・リストをチェックすることによって、スレッドは
リクエストされたセクションが有効であるか否かを本実
施形態で決定する。セクション・オフセット・リストは
セクション、セクション番号及びセクションのオフセッ
トのリストを含む。別の好ましい実施形態では、この情
報は特定のフィールドまたはリスト内でグループ分けせ
ずにインデックス・データ内へ分散させ得る。スレッド
はリクエストされたセクション番号がリスト内に存在す
るか否かをチェックする。リクエストされたセクション
番号がリスト内に存在しない場合、エラー・メッセージ
がステップ912においてクライアントへ返される。リ
クエストされたセクションが有効である場合、インデッ
クス・ファイル・セル内で識別されたデータ・バケット
内のリクエストされたMIMEセクションのオフセット
及びサイズをスレッドは算出する。メッセージ格納構造
と称する同時係属出願に開示するように、セクション・
オフセット・リストは本体データの開始位置からのデー
タのオフセットを有する。ステップ914では、クライ
アントがMIMEヘッダーの検索を望まない場合、ヘッ
ダー・サイズと、ヘッダーの末端からセクションの開始
位置までのバイト数と、セクションのサイズと、必要な
MIMEヘッダーのサイズとを使用して、スレッドはデ
ータ・バケット内のリクエストされたセクションのオフ
セット及びサイズを算出する。ステップ916では、ス
レッドは識別されたデータ・バケット内のセクションを
探索し、かつ読み取る。このステージにおいて、子プロ
セス及びスレッドはクライアントからのFETCHコマ
ンドの管理を完了している。
【0044】コンピュータ・システム内に格納されたデ
ータを使用する様々なコンピュータ実行オペレーション
を本発明は用いる。これらのオペレーションは物理量の
物理操作を必要とするオペレーションを含む(但し、同
オペレーションに限定されない)。一般的に、必ずしも
必要でないが、これらの量は格納、転送、結合、比較及
び他の操作が可能な電気信号または磁気信号の形態をな
す。本発明の一部を構成する本明細書中に開示するオペ
レーションは、効果的なマシン・オペレーションであ
る。実施する操作は生成(producing)、識別(identify
ing)、実行(running)、決定(determining)、比較
(comparing)、実行(executing)、ダウンローディン
グ(downloading)または検出(detecting)等の用語で
示されることが多い。特に、共通の用法を確立するため
に、これらの電気信号または磁気信号をビット、値、エ
レメント、変数、特性またはデータ等として示すと都合
が良い。しかし、これらの用語またはこれらに類似する
用語の全ては適切な物理量に関連すべきであり、かつこ
れらの物理量に適用された都合の良いラベルにすぎない
点を覚えておく必要がある。
【0045】更に、本発明は前記のオペレーションを実
施するためのデバイス、システムまたは装置に関する。
システムは要求された目的のために特別に構築可能であ
る。また、システムは汎用コンピュータとすることが可
能である。汎用コンピュータに格納されたコンピュータ
・プログラムによって、同汎用コンピュータは選択的に
作動または設定される。前記の複数のプロセスは特定の
コンピュータまたは他のコンピューティング装置に固有
のものではない。特に、本明細書の開示内容に基づいて
記述されたプログラムを様々な汎用コンピュータと併用
可能である。これに代えて、要求されたオペレーション
を実施するために、更に特別なコンピュータ・システム
を形成することは更に都合が良い。
【0046】図10は本発明の1つの実施形態に基づく
処理の実施に適した汎用コンピュータ・システム100
0のブロック図である。図10は汎用コンピュータ・シ
ステムの1つの例を示す。本発明の処理を実施するため
に、他のコンピュータ・システム・アーキテクチャ及び
構成を使用し得る。以下に詳述する様々なサブシステム
からなるコンピュータ・システム1000は少なくとも
1つのマイクロプロセッサ・サブシステム(中央処理装
置、即ち、CPUとも称される)1002を含む。即
ち、CPU1002はシングルチップ・プロセッサまた
は複数のプロセッサによって実現し得る。CPU100
2はコンピュータ・システム1000のオペレーション
を制御する汎用デジタル・プロセッサである。メモリか
ら検索した命令を使用して、CPU1002は入力デー
タの受信及び操作と、出力デバイス上でのデータの出力
及び表示とを制御する。
【0047】CPU1002は一般的にランダム・アク
セス・メモリ(RAM)からなる第1の一次記憶装置1
004へメモリ・バス1008を通じて双方向接続され
ている。更に、CPU1002は一般的にリード・オン
リ・メモリ(ROM)からなる第2の一次記憶装置10
06へメモリ・バス1008を通じて単方向接続されて
いる。当該技術分野でよく知られているように、一次記
憶装置1004は汎用記憶領域及び作業メモリとして使
用可能であり、さらには入力データ及び処理済みデータ
を格納するためにも使用できる。更に、CPU1002
上のオペレーションを処理するためのデータ及び命令を
格納する以外に、一次記憶装置1004はメッセージ格
納構造の形態でプログラミング命令及びデータを格納可
能である。更に、データ及び命令をメモリ・バス100
8を通じて双方向に高速転送するために、一次記憶装置
1004は一般的に使用される。同様に、当該技術分野
でよく知れられているように、CPU1002がその機
能を果たすために使用する基本オペレーティング命令、
プログラム・コード、データ及びオブジェクトを一次記
憶装置1006は一般的に含む。データ・アクセスが両
方向または単方向のいずれを必要とするかなどの条件に
基づいて、一次記憶装置1004,1006は以下に詳
述する任意の適切なコンピュータ読み取り可能記憶媒体
を含み得る。CPU1002は頻繁に必要となるデータ
をキャッシュ・メモリ1010内へ超高速で直接検索
し、かつ格納できる。
【0048】取り外し可能大容量記憶装置1012はコ
ンピュータ・システム1000のための別のデータ記憶
能力を提供し、かつペリフェラル・バス1014を通じ
てCPU1002に対して双方向または単方向に接続さ
れている。例えば、CD−ROMとして一般的に知られ
ている特定の取り外し可能大容量記憶装置はCPU10
02に対してデータを単方向に送信する。その一方、フ
ロッピー・ディスクはCPU1002に対してデータを
双方向に送信し得る。記憶装置1012は磁気テープ、
フラッシュ・メモリ、搬送波に組み込まれた信号、PC
カード、ポータブル大容量記憶装置、ホログラフィック
記憶装置及び他の記憶装置等のコンピュータ読み取り可
能媒体を更に含み得る。固定大容量記憶装置1016は
追加のデータ記憶能力を提供し、かつペリフェラル・バ
ス1014を通じてCPU1002に対して双方向接続
されている。大容量記憶装置1016の最も一般的な例
としては、ハード・ディスク・ドライブが挙げられる。
一般的に、これらの媒体へのアクセスは一次記憶装置1
004,1006へのアクセスより遅い。CPU100
2が頻繁に使用しない他のプログラミング命令及びデー
タ等を大容量記憶装置1012,1016は一般的に格
納する。大容量記憶装置1012,1016内に保持さ
れた情報は、必要に応じて、一次記憶装置1004
(例:RAM)の一部を構成するバーチャル・メモリと
して標準的な方法で組込み可能である。
【0049】記憶装置サブシステムへのCPU1002
のアクセスを提供する以外に、ペリフェラル・バス10
14は他のサブシステム及びデバイスへのアクセスを提
供するために使用できる。本実施形態では、これらは、
ディスプレイ・モニタ1018及びアダプタ1020、
プリンタ・デバイス1022、ネットワーク・インター
フェース1024、補助入出力装置インターフェース1
026、サウンド・カード1028及びスピーカー10
30、並びに必要とされる他のサブシステムを含む。
【0050】図示するように、ネットワーク接続を使用
することにより、ネットワーク・インターフェース10
24はCPU1002を別のコンピュータ、コンピュー
タ・ネットワークまたはテレコミュニケーション・ネッ
トワークへ接続可能にする。前記の方法のステップを実
行するうえで、CPU1002はデータ・オブジェクト
またはプログラム命令などの情報を別のネットワークか
らネットワーク・インターフェース1024を通じて受
信するか、または情報をネットワーク・インターフェー
ス1024を通じて別のネットワークへ送信し得る。C
PUで実行する複数の命令のシーケンスに代表される情
報は、搬送波に組み込まれたコンピュータ・データ信号
などの形態で別のネットワークに対して送受信可能であ
る。インターフェース・カードまたはこれに類似するデ
バイスと、CPU1002によって実行される適切なソ
フトウェアとは、コンピュータ・システム1000を外
部ネットワークへ接続し、かつデータを標準プロトコル
に基づいて転送するために使用できる。即ち、本発明の
方法はCPU1002上で単独で実行し得る。その一
方、処理の一部を共有する遠隔CPUと協動することに
より、本発明の方法をインターネット、イントラネット
ワーク若しくはローカル・エリア・ネットワーク等のネ
ットワークを通じて実行し得る。別の大容量記憶装置
(図示略)をネットワーク・インターフェース1024
を通じてCPU1002へ接続し得る。
【0051】マイクロホン、タッチ・ディスプレイ、ト
ランスデューサ・カード・リーダー、テープ・リーダ
ー、音声認識装置、手書き文字認識装置、バイオメトリ
クス・リーダー、カメラ、ポータブル大容量記憶装置及
び他のコンピュータ等の装置に対するCPU1002に
よるデータの送受信を可能にする汎用インターフェース
及びカスタム・インターフェースを補助入出力装置イン
ターフェース1026は表す。
【0052】キーボード1036またはポインタ・デバ
イス1038からの入力を受信し、さらにはデコードし
たシンボルをキーボード1036またはポインタ・デバ
イス1038からCPU1002へ送信するために、キ
ーボード・コントローラ1032がローカル・バス10
34を通じてCPU1002へ接続されている。ポイン
タ・デバイスはマウス、スタイラス、トラック・ボール
またはタブレットであり得る。そして、ポインタ・デバ
イスはグラフィカル・ユーザー・インターフェースとの
インターフェースに効果的である。
【0053】更に、本発明の実施形態は様々なコンピュ
ータ実行オペレーションを実施するためのプログラム・
コードを含むコンピュータ読み取り可能媒体を有するコ
ンピュータ記憶装置に関する。コンピュータ読み取り可
能媒体は、コンピュータ・システムによる後からの読み
取りが可能なデータを格納し得る任意のデータ記憶装置
である。媒体及びプログラム・コードは本発明の目的の
ために特別に設計され、かつ構築されたものであるか、
またはコンピュータ・ソフトウェア技術分野の当業者に
よく知られたものであり得る。コンピュータ読み取り可
能媒体の例としては、ハード・ディスク、フロッピー・
ディスク及び磁気テープなどの磁気媒体と、CD−RO
Mディスクなどの光媒体と、光フロッピー・ディスクな
どの磁気光媒体と、特定用途向け集積回路(ASI
C)、プログラム可能論理回路(PLD)、ROMデバ
イス及びRAMデバイスなどの特別に構成されたハード
ウェア・デバイスとを含めた前記の全ての媒体が挙げら
れる(但し、これらに限定されない)。コンピュータ読
み取り可能媒体は搬送波に組み込まれたデータ信号とし
て結合コンピュータ・システムのネットワーク上に分散
させ得る。従って、コンピュータ読み取り可能コードは
分散した形態で格納及び実行できる。プログラム・コー
ドの例としては、コンパイラなどによって形成されたマ
シン・コード、またはインタプリタを使用して実行でき
る高レベル・コードを含むファイルが挙げられる。
【0054】前記のハードウェア・エレメント及びソフ
トウェア・エレメントが標準的なデザイン及び構成を有
することを当業者は認める。本発明に適した他のコンピ
ュータ・システムは別のサブシステムまたは更に少ない
数のサブシステムを含み得る。更に、メモリ・バス10
08、ペリフェラル・バス1014及びローカル・バス
1034は複数のサブシステムをリンクするために使用
する任意の相互接続方式の実例である。例えば、ローカ
ル・バスはCPUを固定大容量記憶装置1016及びデ
ィスプレイ・アダプタ1020へ接続するために使用可
能である。図10に示すコンピュータ・システムは本発
明に適したコンピュータ・システムの例である。サブシ
ステムの別のコンフィギュレーションを有する他のコン
ピュータ・アーキテクチャを使用し得る。
【0055】以上、理解を容易にする目的で、本発明を
ある程度詳しく説明したが、特定の変更及び修正を本発
明の請求の範囲内で実施しても良い。例えば、サーバー
はIMAPまたはPOP以外のメール・プロトコルを取
り扱う構成としても良い。別の例では、選択した子プロ
セス内の接続スレッドは着信データを検出する責務を有
することが可能であり、さらには同着信データを監視す
るために入力ポーリング・スレッドを使わなくても良
い。更に別の例では、メッセージ・アクセス方法はMI
ME規格以外の規格に基づいてフォーマットされたメッ
セージへアクセス可能である。更に、本発明のプロセス
及び装置の両方を実現する他の方法があることを認識す
る必要がある。従って、本実施形態は例示目的であっ
て、限定目的ではない。更に。本発明は本明細書に開示
する詳細部分に限定されることなく、請求の範囲及びそ
れに等価な範囲内で変更し得る。
【図面の簡単な説明】
【図1】本発明の一実施形態に基づくメッセージ・アク
セス・コンフィギュレーションの各種コンポーネント及
び方法を示すブロック図である。
【図2】本発明の一実施形態に基づくメッセージ・アク
セス方法の概要を示すフローチャートである。
【図3】図2のステップ206に示す接続責務を子プロ
セスへ渡すステップの詳細を示すフローチャートであ
る。
【図4】図2のステップ208に示すスレッドを初期化
するステップの詳細を示すフローチャートである。
【図5】図2のステップ210に示す選択した子プロセ
ス及びスレッドがクライアント・リクエストを管理する
ステップの詳細を示すフローチャートである。
【図6】アクティブ接続スレッドがクライアントから送
信された一般的なCOPYコマンドを管理する本発明の
一実施形態に基づく方法を示すフローチャートである。
【図7】図6のステップ600に示す適切なインデック
ス・ディレクトリ・セル内のリファレンス・カウンタを
インクリメントするステップの詳細を示すフローチャー
トである。
【図8】図6のステップ606に示すメッセージを宛先
フォルダへコピーするステップの詳細を示すフローチャ
ートである。
【図9】メッセージ格納構造に含まれるメッセージ内の
データの特定の部分へアクセスする本発明の一実施形態
に基づく方法のフローチャートである。
【図10】本発明の実施形態の実現に適した一般的なコ
ンピュータ・システムのブロック図である。
───────────────────────────────────────────────────── フロントページの続き (71)出願人 591064003 901 SAN ANTONIO ROAD PALO ALTO,CA 94303,U. S.A. (72)発明者 ウイリアム・ジェイ.・イーガー アメリカ合衆国 カリフォルニア州94025 メンロ・パーク,バークレー・アベニュ ー,620 (72)発明者 フレデリック・シー.・バッティ アメリカ合衆国 カリフォルニア州94061 レッドウッド・シティ,オーチャード・ アベニュー,150

Claims (35)

    【特許請求の範囲】
  1. 【請求項1】 メッセージ格納構造内のメッセージへア
    クセスする方法であって、 接続リクエストをリクエスト・ルーティング・プロセス
    で受信する工程と、 前記接続リクエストに対応する接続を取り扱うために使
    用可能な接続スレッドをマルチスレッド・リクエスト・
    ハンドリング・プロセスが有するか否かを決定する工程
    と、 前記接続リクエストの転送責務を、選択したリクエスト
    ・ハンドリング・プロセスへ転送する工程と、 前記接続を管理するために、前記選択したリクエスト・
    ハンドリング・プロセス内の選択した接続スレッドを初
    期化する工程と、 前記メッセージ格納構造内の前記メッセージへのアクセ
    スを求めるクライアント・リクエストを前記選択した接
    続スレッドを使用して管理する工程と、 前記スレッド選択接続を終了する工程とを含む方法。
  2. 【請求項2】 前記接続リクエストを受信する工程は、
    接続リクエスト待ち行列を読み取る工程を含む請求項1
    に記載の方法。
  3. 【請求項3】 前記使用可能な接続スレッドをマルチス
    レッド・リクエスト・ハンドリング・プロセスが有する
    か否かを決定する工程は、前記選択した接続スレッド及
    び前記選択したリクエスト・ハンドリング・プロセスに
    関する情報を共有メモリ内へ格納する工程を含み、前記
    共有メモリは他のマルチスレッド・リクエスト・ハンド
    リング・プロセスによるアクセスが可能である請求項1
    または2に記載の方法。
  4. 【請求項4】 前記使用可能な接続スレッドをマルチス
    レッド・リクエスト・ハンドリング・プロセスが有する
    か否かを決定する工程は、 前記リクエスト・ルーティング・プロセスに含まれるリ
    クエスト・ハンドリング・プロセスのリストをスキャン
    することによって、所定数量未満のアクティブ接続スレ
    ッドを有するリクエスト・ハンドリング・プロセスを探
    索する工程と、 実質的に全ての既存リクエスト・ハンドリング・プロセ
    スが所定数の接続スレッドを有する場合、新規リクエス
    ト・ハンドリング・プロセスを形成する工程とを含む請
    求項1乃至3のいずれか一項に記載の方法。
  5. 【請求項5】 前記選択したリクエスト・ハンドリング
    ・プロセス内の選択した接続スレッドを初期化する工程
    は、 リクエスト・ハンドラ・プロセス識別子及び接続スレッ
    ド識別子を格納するために、前記選択した接続スレッド
    に対応するセルを共有メモリ内で割り当てる工程を含む
    請求項1乃至4のいずれか一項に記載の方法。
  6. 【請求項6】 前記選択したリクエスト・ハンドリング
    ・プロセス内の選択した接続スレッドを初期化する工程
    は、 前記選択した接続スレッドを前記選択したリクエスト・
    ハンドリング・プロセス内の入力ポーリング・スレッド
    へ関連付けし、かつ前記接続スレッドを待ち状態にする
    工程を含む請求項1乃至5のいずれか一項に記載の方
    法。
  7. 【請求項7】 前記クライアント・リクエストを管理す
    る工程は、 着信クライアント・リクエストを知らせる警告を前記選
    択したリクエスト・ハンドリング・プロセスへ行う工程
    と、 前記着信クライアント・リクエストを処理するために、
    同着信クライアント・リクエストを前記選択したリクエ
    スト・ハンドリング・プロセスに関連する接続スレッド
    へルーティングする工程とを含む請求項1乃至6のいず
    れか一項に記載の方法。
  8. 【請求項8】 前記着信クライアント・リクエストを知
    らせる警告を前記選択したリクエスト・ハンドリング・
    プロセスへ行う工程は、前記選択したリクエスト・ハン
    ドリング・プロセスが前記着信クライアント・リクエス
    トを受信した際、検出のための入力ポーリング・スレッ
    ドを実行する工程を含む請求項7に記載の方法。
  9. 【請求項9】 前記クライアント・リクエストを管理す
    る工程は、前記選択したリクエスト・ハンドリング・プ
    ロセス内のクリティカル信号スレッドを実行し、前記選
    択したリクエスト・ハンドリング・プロセス内のアクテ
    ィブ接続スレッドへのクリティカル信号を管理し、これ
    によって、前記アクティブ接続スレッドのみが終了し、
    前記選択したリクエスト・ハンドリング・プロセス内の
    他の接続スレッドを動作可能に残す工程を含む請求項1
    乃至8のいずれか一項に記載の方法。
  10. 【請求項10】 メッセージ格納構造内のメッセージを
    コピーする方法であって、前記メッセージ格納構造がイ
    ンデックス・ディレクトリ及びユーザー・フォルダを有
    し、前記メッセージが既存ユーザー・フォルダ・セルを
    有する方法において、 前記メッセージ格納構造のインデックス・ディレクトリ
    内のリファレンス・カウンタをインクリメントし、前記
    メッセージ格納構造内の別のユーザー・フォルダがメッ
    セージを参照していることを表示する工程と、 前記メッセージのコピーを格納する宛先ユーザー・フォ
    ルダへのアクセスを制限する工程と、 前記メッセージに関連する前記既存ユーザー・フォルダ
    ・セルの複製を前記宛先ユーザー・フォルダへ付加する
    工程であって、前記既存ユーザー・フォルダ・セルがコ
    ピーするメッセージ上の情報を含む工程と前記メッセー
    ジの内容は前記メッセージ格納構造内へ一度格納される
    ことを含む方法。
  11. 【請求項11】 前記インデックス・ディレクトリ内の
    リファレンス・カウンタをインクリメントする工程は、
    前記メッセージに対応するインデックス・ディレクトリ
    ・セルへのアクセスを制限する工程を含む請求項10に
    記載の方法。
  12. 【請求項12】 前記宛先ユーザー・フォルダへのアク
    セスを制限する工程は、前記宛先ユーザー・フォルダに
    関連するロック・カウンタをインクリメントする工程を
    さらに含む請求項10または11に記載の方法。
  13. 【請求項13】 前記ユーザー・フォルダ・セルはメッ
    セージ上のデータを含み、かつメッセージの実際のデー
    タ内容を含まない請求項10乃至12のいずれか一項に
    記載の方法。
  14. 【請求項14】 メッセージの特定のセクションを検索
    する方法であって、前記メッセージがメッセージ格納構
    造内に含まれ、前記メッセージ格納構造がユーザー・フ
    ォルダ、インデックス・フォルダ及びデータ・バケット
    を有する方法において、 前記メッセージに関連するメール・フォルダ・セルを検
    査し、前記メッセージに関連した対応するインデックス
    ・フォルダ・セルの位置を獲得する工程と、 前記複数のデータ・バケットのうちの1つにおいて探索
    している前記メッセージの特定のセクションの位置を決
    定するために必要な情報を獲得すべく、前記対応するイ
    ンデックス・フォルダ・セルを検査する工程と、 前記データ・バケット内の前記メッセージの特定のセク
    ションを検索する工程と、 前記メッセージ格納構造内の前記データ・バケット内に
    格納されたメッセージの様々なセクションのサイズ及び
    開始位置を決定するために使用可能な情報を前記インデ
    ックス・フォルダ・セルが有することを含む方法。
  15. 【請求項15】 メール・フォルダ内の対応するメール
    ・フォルダ・セルを検査することによって、メッセージ
    をメッセージ格納構造へ書き込んだ日付を決定する工程
    を含む請求項14に記載の方法。
  16. 【請求項16】 前記メール・フォルダ・セルを検査す
    る工程は、インデックス・ディレクトリ及びインデック
    ス・ファイルを有するインデックス・フォルダを開く工
    程を含む請求項14または15に記載の方法。
  17. 【請求項17】 前記対応するインデックス・フォルダ
    ・セルを検査する工程は、インデックス・ディレクトリ
    ・セルを検査する工程を含む請求項14乃至16のいず
    れか一項に記載の方法。
  18. 【請求項18】 前記メッセージに関連するインデック
    ス・ファイル・セルの位置を前記インデックス・ディレ
    クトリ・セルから獲得する工程をさらに含む請求項17
    に記載の方法。
  19. 【請求項19】 インデックス・フォルダ・セル内の情
    報を検査することによって、前記メッセージの特定のセ
    クションが存在するか否かを確認する工程を含む請求項
    14乃至17のいずれか一項に記載の方法。
  20. 【請求項20】 メッセージ格納構造内のデータへアク
    セスするためのコンピュータ・システムであって、 複数のクライアントからのメッセージ格納構造接続リク
    エストを受理することに適したリクエスト・ルータと、 前記リクエスト・ルータに関連し、かつ接続スレッドの
    多重度を維持することにそれぞれ適した複数のマルチス
    レッド・リクエスト・ハンドラと、 前記リクエスト・ルータに関連し、かつリクエスト・ハ
    ンドラ識別器及び接続スレッド識別器を含む共有メモリ
    とを有し、前記共有メモリは前記複数のリクエスト・ハ
    ンドラによるアクセスが可能であり、これによって、1
    つの前記リクエスト・ハンドラはアクティビティ情報を
    他のリクエスト・ハンドラと共有し得るコンピュータ・
    システム。
  21. 【請求項21】 新規接続スレッドを維持するために使
    用可能なリクエスト・ハンドラの不在が確定した際、新
    規リクエスト・ハンドラを形成し得るリクエスト・ハン
    ドラ生成器を前記リクエスト・ルータはさらに有する請
    求項20に記載のコンピュータ・システム。
  22. 【請求項22】 前記リクエスト・ルータへ接続された
    リクエスト待ち行列からのメッセージ格納構造接続リク
    エストを受理可能なリクエスト待ち行列スキャナをさら
    に有する請求項20または21に記載のコンピュータ・
    システム。
  23. 【請求項23】 メッセージ格納構造接続リクエストを
    受信した際、任意の既存リクエスト・ハンドラが接続リ
    クエストを受理可能であるか否かを前記リクエスト・ル
    ータは決定し、不可能な場合、同リクエスト・ルータは
    新規リクエスト・ハンドラを形成する請求項20乃至2
    2のいずれか一項に記載のコンピュータ・システム。
  24. 【請求項24】 前記各リクエスト・ハンドラは入力ポ
    ーリング・スレッドを有し、同入力ポーリング・スレッ
    ドは前記リクエスト・ハンドラ内のアクティブ接続スレ
    ッドへの入力イベントを検出する請求項20または21
    に記載のコンピュータ・システム。
  25. 【請求項25】 前記各リクエスト・ハンドラはクリテ
    ィカル信号スレッドを有し、同クリティカル信号スレッ
    ドはリクエスト・ハンドラ内の特定のアクティブ接続ス
    レッドへのクリティカル信号を検出し、前記クリティカ
    ル信号スレッドは前記特定のアクティブ接続スレッドの
    みを終了させ、これによって、リクエスト・ハンドラ内
    の他のアクティブ接続スレッドを機能した状態に維持す
    る請求項20乃至24のいずれか一項に記載のコンピュ
    ータ・システム。
  26. 【請求項26】 前記リクエスト・ルータによって割り
    当てられた前記共有メモリはリクエスト・ハンドラ識別
    器及び接続スレッド識別器を含む複数のスレッド固有デ
    ータ・セルをさらに有し、前記各スレッド固有データ・
    セルは接続スレッドに関連する請求項20に記載のコン
    ピュータ・システム。
  27. 【請求項27】 メッセージ格納構造内のデータへアク
    セスするためのコンピュータ・システムであって、 複数のクライアントからのメッセージ格納構造接続リク
    エストを受理するための手段と、 接続スレッドの多重度を維持するための手段と、 1つ以上のリクエスト・ハンドラ識別器及び1つ以上の
    接続スレッド識別器を有する共有メモリとを有し、前記
    共有メモリは複数のリクエスト・ハンドラによるアクセ
    スが可能であり、これによって、前記複数のリクエスト
    ・ハンドラのうちの1つはアクティビティ情報を他のリ
    クエスト・ハンドラと共有し得るコンピュータ・システ
    ム。
  28. 【請求項28】 新規接続スレッドを維持するために使
    用可能なリクエスト・ハンドラの不在が確定した際、新
    規リクエスト・ハンドラを形成する手段を、前記メッセ
    ージ格納構造接続リクエストを受理するための手段はさ
    らに有する請求項27に記載のコンピュータ・システ
    ム。
  29. 【請求項29】 前記メッセージ格納構造接続リクエス
    トを受理するための手段は、アクティブ接続スレッドへ
    の入力イベントを検出するための手段をさらに有する請
    求項27または28に記載のコンピュータ・システム。
  30. 【請求項30】 前記メッセージ格納構造接続リクエス
    トを受理するための各手段は、特定のアクティブ接続ス
    レッドへのクリティカル信号を検出する手段をさらに有
    し、前記クリティカル信号スレッドは前記特定のアクテ
    ィブ接続スレッドのみを終了させ、他のアクティブ接続
    スレッドを機能した状態に維持する請求項27乃至29
    のいずれか一項に記載のコンピュータ・システム。
  31. 【請求項31】 前記共有メモリはリクエスト・ハンド
    ラ識別器及び接続スレッド識別器を格納するための複数
    のスレッド固有データ・セルをさらに有し、前記各スレ
    ッド固有データ・セルは接続スレッドに関連する請求項
    27乃至30のいずれか一項に記載のコンピュータ・シ
    ステム。
  32. 【請求項32】 メッセージ格納構造内のメッセージへ
    アクセスするためのプログラミング命令を含むコンピュ
    ータ読み取り可能媒体であって、このコンピュータ読み
    取り可能媒体はコンピュータ・プログラム・コード・デ
    バイスを有し、同コンピュータ・プログラム・コード・
    デバイスは、 接続リクエストをリクエスト・ルーティング・プロセス
    で受信する工程と、 前記接続リクエストに対応する接続を取り扱うために使
    用可能な接続スレッドをマルチスレッド・リクエスト・
    ハンドリング・プロセスが有するか否かを決定し、前記
    接続リクエストの転送責務を、選択したリクエスト・ハ
    ンドリング・プロセスへ転送する工程と、 前記接続を管理するために、前記選択したリクエスト・
    ハンドリング・プロセス内の選択した接続スレッドを初
    期化する工程と、 前記メッセージ格納構造内のメッセージへのアクセスを
    求めるクライアント・リクエストを管理する工程であっ
    て、前記選択した接続スレッドが前記クライアント・リ
    クエストを管理する責務を有する工程と、 終了リクエストを受信した際、または所定の条件が満た
    された際、前記スレッドを終了する工程とをコンピュー
    タに実行させるべく構成されているコンピュータ読み取
    り可能媒体。
  33. 【請求項33】 前記使用可能な接続スレッドをマルチ
    スレッド・リクエスト・ハンドリング・プロセスが有す
    るか否かをコンピュータに決定させるべく構成された前
    記コンピュータ・プログラム・コード・デバイスは、 前記リクエスト・ルーティング・プロセスに含まれるリ
    クエスト・ハンドリング・プロセスのリストをスキャン
    することによって、所定数量未満のアクティブ接続スレ
    ッドを有するリクエスト・ハンドリング・プロセスが存
    在するか否かを決定する工程と、 全ての既存リクエスト・ハンドリング・プロセスが所定
    数の接続スレッドを有する場合、新規リクエスト・ハン
    ドリング・プロセスを形成する工程とをコンピュータに
    実行させるべく構成されたコンピュータ・プログラム・
    コード・デバイスを含む請求項32に記載のコンピュー
    タ読み取り可能媒体。
  34. 【請求項34】 インデックス・ディレクトリ及びユー
    ザー・フォルダを有するメッセージ格納構造内において
    既存ユーザー・フォルダ・セルを有するメッセージをコ
    ピーするためのプログラミング命令を含むコンピュータ
    読み取り可能媒体であって、このコンピュータ読み取り
    可能媒体はコンピュータ・プログラム・コード・デバイ
    スを有し、同コンピュータ・プログラム・コード・デバ
    イスは、 前記メッセージ格納構造のインデックス・ディレクトリ
    内のリファレンス・カウンタをインクリメントし、前記
    メッセージ格納構造内の別のユーザー・フォルダがメッ
    セージを参照していることを表示する工程と、 前記メッセージのコピーを格納する宛先ユーザー・フォ
    ルダへのアクセスを制限する工程と、 前記メッセージに関連する前記既存ユーザー・フォルダ
    ・セルの複製を前記宛先ユーザー・フォルダへ付加する
    工程であって、前記既存ユーザー・フォルダ・セルがコ
    ピーするメッセージ上の情報を含む工程とをコンピュー
    タに実行させるべく構成され、前記メッセージの内容は
    前記メッセージ格納構造内へ一度格納されるコンピュー
    タ読み取り可能媒体。
  35. 【請求項35】 ユーザー・フォルダ、インデックス・
    フォルダ及びデータ・バケットを有するメッセージ格納
    構造内に含まれているメッセージの特定のセクションを
    検索するためのプログラミング命令を含むコンピュータ
    読み取り可能媒体であって、前記コンピュータ読み取り
    可能媒体はコンピュータ・プログラム・コード・デバイ
    スを有し、同コンピュータ・プログラム・コード・デバ
    イスは、 前記メッセージに関連するメール・フォルダ・セルを検
    査し、前記メッセージに関連した対応するインデックス
    ・フォルダ・セルの位置を獲得する工程と、 前記複数のデータ・バケットのうちの1つにおいて探索
    している前記メッセージの特定のセクションの位置を決
    定するために必要な情報を獲得すべく、前記対応するイ
    ンデックス・フォルダ・セルを検査する工程と、 前記データ・バケット内の前記メッセージの特定のセク
    ションを検索する工程とをコンピュータに実行させるべ
    く構成され、前記メッセージ格納構造内のデータ・バケ
    ット内に格納されたメッセージの様々なセクションのサ
    イズ及び開始位置を決定するために使用可能な情報を前
    記インデックス・フォルダ・セルが有するコンピュータ
    読み取り可能媒体。
JP11119597A 1998-04-27 1999-04-27 メッセ―ジ格納構造内のデ―タへ高速アクセスする方法及び装置 Pending JP2000224251A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US09/067497 1998-04-27
US09/067,497 US6735770B1 (en) 1998-04-27 1998-04-27 Method and apparatus for high performance access to data in a message store

Publications (1)

Publication Number Publication Date
JP2000224251A true JP2000224251A (ja) 2000-08-11

Family

ID=22076375

Family Applications (1)

Application Number Title Priority Date Filing Date
JP11119597A Pending JP2000224251A (ja) 1998-04-27 1999-04-27 メッセ―ジ格納構造内のデ―タへ高速アクセスする方法及び装置

Country Status (4)

Country Link
US (1) US6735770B1 (ja)
EP (1) EP0953907A3 (ja)
JP (1) JP2000224251A (ja)
CA (1) CA2269470A1 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4806403B2 (ja) * 2004-06-30 2011-11-02 インテル・コーポレーション コンフィグラブルな機能選択機構

Families Citing this family (22)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6951018B2 (en) * 2000-05-30 2005-09-27 Sun Microsystems, Inc. Method and apparatus for efficiently tracking monitors
AU2002219796A1 (en) 2000-11-20 2002-06-03 At And T Wireless Services, Inc. Systems for providing wireless communication presence information
US7058687B2 (en) * 2001-04-03 2006-06-06 Sendmail, Inc. E-mail system with methodology for accelerating mass mailings
US20040006633A1 (en) * 2002-07-03 2004-01-08 Intel Corporation High-speed multi-processor, multi-thread queue implementation
US7770179B1 (en) 2004-01-30 2010-08-03 Xilinx, Inc. Method and apparatus for multithreading on a programmable logic device
US7552042B1 (en) * 2004-01-30 2009-06-23 Xilinx, Inc. Method for message processing on a programmable logic device
US7823162B1 (en) 2004-01-30 2010-10-26 Xilinx, Inc. Thread circuits and a broadcast channel in programmable logic
US7185309B1 (en) 2004-01-30 2007-02-27 Xilinx, Inc. Method and apparatus for application-specific programmable memory architecture and interconnection network on a chip
US20080046535A1 (en) * 2004-07-16 2008-02-21 Research In Motion Limited System and Method for Pushing Information from a Host System to a Mobile Data Communication Device
US7698597B2 (en) * 2006-02-28 2010-04-13 International Business Machines Corporation Method of isolating erroneous software program components
WO2008044874A1 (en) * 2006-10-12 2008-04-17 Lg Electronics Inc. Method for managing and processing information of an object for presentation of multiple sources
CA2898164C (en) * 2008-05-14 2018-06-05 Canamex Corporation Method for establishing bi-directional messaging communications with wireless devices and with remote locations over a network
JP4696151B2 (ja) * 2008-10-23 2011-06-08 株式会社エヌ・ティ・ティ・ドコモ 情報処理装置およびメモリ管理方法
CN101938430B (zh) * 2009-06-30 2014-01-15 国际商业机器公司 电子邮件的处理方法和处理系统
US9262429B2 (en) * 2012-08-13 2016-02-16 Microsoft Technology Licensing, Llc De-duplicating attachments on message delivery and automated repair of attachments
US10088986B2 (en) 2012-11-15 2018-10-02 Samsung Electronics Co., Ltd. User function operation method and electronic device supporting the same
KR101729637B1 (ko) * 2013-06-26 2017-04-24 후아웨이 테크놀러지 컴퍼니 리미티드 네트워크 장치 및 이메일 요구 처리 방법
US9628428B1 (en) * 2016-07-04 2017-04-18 Ox Software Gmbh Virtual emails for IMAP commands
US10467151B2 (en) 2017-09-05 2019-11-05 NGINX, Inc. Using shared memory to transport data between server processes
US11042424B1 (en) 2018-04-24 2021-06-22 F5 Networks, Inc. Pipelined request processing using shared memory
CN109062707B (zh) * 2018-06-29 2020-12-25 Oppo(重庆)智能科技有限公司 电子装置及其限制进程间通信的方法、存储介质
CN115225633B (zh) * 2022-06-24 2024-04-12 浪潮软件集团有限公司 基于对端网络信号的状态机状态转换方法及系统

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5305455A (en) * 1990-12-21 1994-04-19 International Business Machines Corp. Per thread exception management for multitasking multithreaded operating system
JPH07104791B2 (ja) 1991-12-18 1995-11-13 インターナショナル・ビジネス・マシーンズ・コーポレイション タスク状態構築方法
US5956489A (en) * 1995-06-07 1999-09-21 Microsoft Corporation Transaction replication system and method for supporting replicated transaction-based services
US5689566A (en) * 1995-10-24 1997-11-18 Nguyen; Minhtam C. Network with secure communications sessions
US5991790A (en) 1996-07-01 1999-11-23 Sun Microsystems, Inc. Generation and delivery of signals in a two-level, multithreaded system
US5991845A (en) * 1996-10-21 1999-11-23 Lucent Technologies Inc. Recoverable spin lock system
US6167423A (en) * 1997-04-03 2000-12-26 Microsoft Corporation Concurrency control of state machines in a computer system using cliques
US6070184A (en) * 1997-08-28 2000-05-30 International Business Machines Corporation Server-side asynchronous form management
US6085247A (en) * 1998-06-08 2000-07-04 Microsoft Corporation Server operating system for supporting multiple client-server sessions and dynamic reconnection of users to previous sessions using different computers
US6418542B1 (en) * 1998-04-27 2002-07-09 Sun Microsystems, Inc. Critical signal thread
US6457064B1 (en) * 1998-04-27 2002-09-24 Sun Microsystems, Inc. Method and apparatus for detecting input directed to a thread in a multi-threaded process
US6167402A (en) * 1998-04-27 2000-12-26 Sun Microsystems, Inc. High performance message store

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP4806403B2 (ja) * 2004-06-30 2011-11-02 インテル・コーポレーション コンフィグラブルな機能選択機構

Also Published As

Publication number Publication date
US6735770B1 (en) 2004-05-11
EP0953907A3 (en) 2002-07-17
EP0953907A2 (en) 1999-11-03
CA2269470A1 (en) 1999-10-27

Similar Documents

Publication Publication Date Title
JP2000224251A (ja) メッセ―ジ格納構造内のデ―タへ高速アクセスする方法及び装置
US6167402A (en) High performance message store
KR101109340B1 (ko) 프로토콜과 무관한 클라이언트측 파일 캐싱 방법, 컴퓨터 프로그램 제조품, 및 컴퓨터 시스템
US6754799B2 (en) System and method for indexing and retrieving cached objects
US6418542B1 (en) Critical signal thread
CA2312492C (en) Multi-protocol unified file-locking
US7386529B2 (en) System and method for managing content with event driven actions to facilitate workflow and other features
US7908656B1 (en) Customized data generating data storage system filter for data security
US6263360B1 (en) System uses filter tree and feed handler for updating objects in a client from a server object list
US5787300A (en) Method and apparatus for interprocess communications in a database environment
US7069594B1 (en) File system level integrity verification and validation
US5906658A (en) Message queuing on a data storage system utilizing message queuing in intended recipient's queue
CN103020257B (zh) 数据操作的实现方法和装置
Barrera III A Fast Mach Network IPC Implementation.
US20060047677A1 (en) System and method of pipeline data access to remote data
WO1995031787A1 (en) Method and apparatus for handling requests regarding information stored in a file system
US6944863B1 (en) Queue bank repository and method for sharing limited queue banks in memory
US6820127B2 (en) Method, system, and product for improving performance of network connections
US6823350B1 (en) Database clean-up system
US20060031335A1 (en) Managing contained e-mail
US6578052B1 (en) Database clean-up system
US20050131883A1 (en) Browsing a list of data items
JPH01208053A (ja) マルチメディア情報通信制御装置
Cheriton Distributed 1/0 using an Object-based Protocol
Brightwell et al. Network programming interfaces for high-performance computing