JPH0816412A - マイクロカーネル・アーキテクチャ・データ処理システム - Google Patents

マイクロカーネル・アーキテクチャ・データ処理システム

Info

Publication number
JPH0816412A
JPH0816412A JP7154230A JP15423095A JPH0816412A JP H0816412 A JPH0816412 A JP H0816412A JP 7154230 A JP7154230 A JP 7154230A JP 15423095 A JP15423095 A JP 15423095A JP H0816412 A JPH0816412 A JP H0816412A
Authority
JP
Japan
Prior art keywords
memory
task
template
microkernel
pointer
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.)
Granted
Application number
JP7154230A
Other languages
English (en)
Other versions
JP3570525B2 (ja
Inventor
James Michael Magee
ジェームス・マイケル・マジー
Freeman Leigh Rawson Iii
フリーマン・リー・ローソン・ザ=サード
Guy Gil Sotomayor Jr
ガイ・ジル・ソトマイヤー・ジュニア
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.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
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 International Business Machines Corp filed Critical International Business Machines Corp
Publication of JPH0816412A publication Critical patent/JPH0816412A/ja
Application granted granted Critical
Publication of JP3570525B2 publication Critical patent/JP3570525B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • 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/544Buffers; Shared memory; Pipes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • G06F12/1036Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB] for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/109Address translation for multiple virtual address spaces, e.g. segmentation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/14Protection against unauthorised use of memory or access to memory
    • G06F12/1416Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
    • G06F12/145Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being virtual, e.g. for virtual blocks or segments before a translation mechanism
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2211/00Indexing scheme relating to details of data-processing equipment not covered by groups G06F3/00 - G06F13/00
    • G06F2211/009Trust
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/656Address space sharing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • G06F2212/657Virtual address space management

Abstract

(57)【要約】 (修正有) 【目的】 マイクロカーネルによって特殊オブジェクト
として定義されるテンプレート領域を使用して、オペレ
ーティングシステムを改善する。 【構成】 マイクロカーネルは、データ処理システムの
メモリにロードされた後に、メモリ内の特殊オブジェク
トとして属性の組を有するテンプレート領域を形成し、
メモリ内でタスクを形成する時に、テンプレート領域を
タスクにマッピングし、タスク用の仮想アドレス空間を
定義する。その後、マイクロカーネルがテンプレート領
域に対して仮想記憶動作を実行する時に、その仮想記憶
動作の効果は、マッピング関係によってタスクに明示さ
れる。この形で、単一のテンプレート領域を、同時に複
数のタスクにマッピングすることができる。

Description

【発明の詳細な説明】
【0001】
【産業上の利用分野】ここに開示される発明は、広義に
はデータ処理システムに関し、具体的にはデータ処理シ
ステム用のオペレーティング・システムの改善に関す
る。
【0002】
【従来の技術】オペレーティング・システムは、コンピ
ュータ上で稼動する最も重要なソフトウェアである。汎
用コンピュータのすべてが、他のプログラムを実行させ
るためのオペレーティング・システムを有する必要があ
る。通常、オペレーティング・システムは、キーボード
からの入力の認識、表示画面への出力の送出、ディスク
上のファイルやディレクトリの記録、ディスク駆動装置
やプリンタなどの周辺装置の制御などの基本的なタスク
を実行する。より複雑なシステムの場合、オペレーティ
ング・システムは、より大きな責任と能力とを有する。
これによって、同時に実行される異なるプログラムやユ
ーザが、互いに干渉しないことが保証される。また、オ
ペレーティング・システムは、通常はセキュリティの責
任も有し、これによって、許可されていないユーザがそ
のシステムをアクセスできないことを保証する。
【0003】オペレーティング・システムは、マルチユ
ーザ・オペレーティング・システム、マルチプロセッサ
・オペレーティング・システム、マルチタスク・オペレ
ーティング・システムおよびリアルタイム・オペレーテ
ィング・システムとして分類することができる。マルチ
ユーザ・オペレーティング・システムでは、複数のユー
ザが同時にプログラムを実行させることができる。一部
のオペレーティング・システムは、同時に数百人から数
千人のユーザを受け入れる。マルチプロセッシング・プ
ログラムを用いると、単一のユーザが同時に複数のプロ
グラムを実行させることができるようになる。実行され
るプログラムのそれぞれを、プロセスと呼ぶ。ほとんど
のマルチプロセッシング・システムは、複数のユーザを
サポートする。マルチタスク・システムでは、単一のプ
ロセスで複数のタスクを実行させることができる。「マ
ルチタスク」と「マルチプロセッシング」にはわずかに
異なる意味があるが、一般的な用語では、この2つが交
換可能に使用されることがしばしばである。マルチタス
クとは、同時に複数のタスクを実行する能力であり、1
つのタスクが1つのプログラムである。マルチタスキン
グでは、1つの中央処理装置だけが使用されるが、この
中央処理装置が、あるプログラムから別のプログラムへ
非常にすばやく切り替えられるので、すべてのプログラ
ムが同時に実行されているようにみえる。マルチタスキ
ングには、プリエンプティブ(preemptive、先取り式)
とコオペラティブ(cooperative、協調式)という2つ
の基本タイプがある。プリエンプティブ・マルチタスキ
ングでは、オペレーティング・システムが、CPUタイ
ム・スライスを各プログラムに分配する。コオペラティ
ブ・マルチタスキングでは、各プログラムが、必要なだ
けいつまでもCPUを制御することができる。しかし、
あるプログラムがCPUを使用していない場合、そのプ
ログラムは、他のプログラムに一時的にCPUの使用を
許可することができる。たとえば、OS/2(登録商
標)とUNIX(登録商標)オペレーティング・システ
ムは、プリエンプティブ・マルチタスキングを使用し、
マッキントッシュ(Macintosh、登録商標)コンピュー
タ用のマルチファインダ(MultiFinder、登録商標)オ
ペレーティング・システムは、コオペラティブ・マルチ
タスキングを使用する。マルチプロセッシングとは、コ
ンピュータ・システムの、同時に複数のプロセスまたは
プログラムをサポートする能力を指す。マルチプロセッ
シング・オペレーティング・システムでは、複数のプロ
グラムを同時に走行させることができる。マルチプロセ
ッシング・システムは、オペレーティング・システムが
競合するプロセスに正当な形で資源を割り振らなければ
ならないので、シングルプロセス・システムよりはるか
に複雑である。リアルタイム・オペレーティング・シス
テムは、入力に即座に応答する。DOSやUNIXなど
の汎用オペレーティング・システムは、リアルタイムで
はない。
【0004】オペレーティング・システムは、アプリケ
ーション・プログラムが走行する基礎となるソフトウェ
ア・プラットホームを提供する。アプリケーション・プ
ログラムは、特定のオペレーティング・システムの上で
走行するように特別に記述される必要がある。したがっ
て、オペレーティング・システムの選択によって、実行
可能なアプリケーションの大部分が決定される。IBM
互換パーソナル・コンピュータの場合、オペレーティン
グ・システムの例として、DOS、OS/2(登録商
標)、AIX(登録商標)およびXENIX(登録商
標)がある。
【0005】ユーザは通常、1組のコマンドを介してオ
ペレーティング・システムと対話する。たとえば、DO
Sオペレーティング・システムには、ファイルをコピー
するためのCOPYコマンドやファイル名を変更するた
めのRENAMEコマンドなどのコマンドが含まれる。
コマンドは、コマンド・プロセッサまたはコマンド・ラ
イン・インタープリタと呼ばれるオペレーティング・シ
ステムの一部によって受け取られ、実行される。
【0006】パーソナル・コンピュータ用には、CP/
M(登録商標)、DOS、OS/2(登録商標)、UN
IX(登録商標)、XENIX(登録商標)、AIX
(登録商標)など、多数の異なるオペレーティング・シ
ステムが存在する。CP/Mは、小型コンピュータ用の
最初のオペレーティング・システムの1つである。CP
/Mは、当初は広い範囲のパーソナル・コンピュータで
使用されたが、最終的にDOSにとってかわられた。D
OSは、IBM互換パーソナル・コンピュータのすべて
で走行する、シングル・ユーザ、シングル・タスクのオ
ペレーティング・システムである。DOSの後継オペレ
ーティング・システムであるOS/2は、インテル(In
tel)社の80286以降のマイクロプロセッサを使用
するIBM互換パーソナル・コンピュータ上で走行す
る、かなり強力なオペレーティング・システムである。
OS/2は、全般的にDOSと互換であるが、たとえば
マルチタスキングや仮想メモリのサポートなど、多くの
追加機能を含む。UNIXとUNIXベースのAIX
は、広範囲のパーソナル・コンピュータおよびワーク・
ステーション上で走行する。UNIXとAIXは、ワー
ク・ステーション用の標準オペレーティング・システム
となっており、強力なマルチユーザ、マルチプロセッシ
ング・オペレーティング・システムである。
【0007】1981年にIBMパーソナル・コンピュ
ータが米国で初めて公表された時、DOSオペレーティ
ング・システムは、約10KBの記憶域を専有してい
た。それ以来、パーソナル・コンピュータは、はるかに
複雑になり、はるかに大きなオペレーティング・システ
ムが必要になった。たとえば現在、IBMパーソナル・
コンピュータ用のOS/2オペレーティング・システム
は、22MBもの記憶域を占める可能性がある。パーソ
ナル・コンピュータは、時の流れに伴ってますます複雑
かつ強力になるが、これらのシステムに関連する記憶装
置にかなりの記憶ペナルティを課すことなしに継続的に
オペレーティング・システムのサイズと複雑さを増大さ
せることは、明らかに不可能である。
【0008】オペレーティング・システムのサイズのこ
の増加速度は擁護できないので、1980年代にカーネ
ギー・メロン(Carnegie Mellon)大学でMACHプロ
ジェクトが行われた。この研究の目標は、新たに生まれ
る現代のコンピュータ・アーキテクチャをコンピュータ
・プログラマが利用できるようにし、なおかつカーネル
・オペレーティング・システムのサイズと機能の数を減
らした、新しいオペレーティング・システムを開発する
ことであった。カーネルとは、オペレーティング・シス
テムのうちで、ハードウェア資源の割振りなどの基本機
能を実行する部分である。MACHカーネルの場合、5
つのプログラミング・アブストラクション(Programmin
g abstraction)が、システムの基本構成要素として確
立された。これらは、通常の複雑な動作をカーネルの外
部で構築できるようにするための有用なシステムを作る
ために最小限必要なものとして選択された。カーネギー
・メロンMACHカーネルは、リリース3.0でサイズ
を減らされ、MACHマイクロカーネルと呼ばれる完全
に機能するオペレーティング・システムになった。MA
CHマイクロカーネルには、タスク、スレッド、ポー
ト、メッセージおよびメモリ・オブジェクトというプリ
ミティブがある。
【0009】タスクとは、MACHマイクロカーネル内
で2つの別々の構成要素に分割される従来のUNIXプ
ロセスである。その第1の構成要素がタスクであり、こ
れには、協働する実体のグループ用の資源のすべてが含
まれる。あるタスクに含まれる資源の例が、仮想メモリ
と通信ポートである。タスクは、資源の受動的な集合で
あり、プロセッサ上では走行しない。
【0010】UNIXプロセスの第2の構成要素がスレ
ッドであり、これは、能動的な実行環境である。各タス
クは、スレッドと呼ばれる1つまたは複数の同時に実行
される計算をサポートできる。たとえば、マルチスレッ
ド・プログラムでは、1つのスレッドを科学計算の計算
に使用し、もう1つのスレッドをユーザ・インターフェ
ースの監視に使用することができる。MACHタスク
は、すべてが同時に走行する多数の実行スレッドを有す
ることができる。MACHプログラミング・モデルの威
力の多くが、1タスク内のすべてのスレッドがそのタス
クの資源を共用するという事実に由来する。たとえば、
これらのスレッドのすべてが、同一の仮想メモリ(V
M)アドレス空間を有する。しかし、1タスク内の各ス
レッドは、それ自体の私有実行状態を有する。この状態
は、汎用レジスタ、スタック・ポインタ、プログラム・
カウンタ、フレーム・ポインタなどのレジスタの組から
なる。
【0011】ポートとは、スレッドがそれを介して互い
に通信する通信チャネルである。ポートは資源であり、
タスクによって所有される。スレッドは、タスクに属す
ることによってポートへのアクセス権を得る。協働する
プログラムは、あるタスクのスレッドに別のタスクのポ
ートへのアクセス権を与えることができる。ポートの重
要な特徴は、ポートの位置が透過的であるということで
ある。この能力のおかげで、プログラムを修正せずにネ
ットワークを介してサービスを分散することが簡単にな
る。
【0012】メッセージは、異なるタスクのスレッドが
互いに通信できるようにするのに使用される。メッセー
ジには、所与のクラスまたは型のデータの集合が含まれ
る。このデータには、数や文字列などのプログラム固有
データから、タスクから別のタスクへのポートの転送機
能などのMACH関連データまでが含まれる。
【0013】メモリ・オブジェクトとは、MACHマイ
クロカーネルの鍵となる特徴である、従来のオペレーテ
ィング・システム機能をユーザ・レベル・プログラムで
実行する能力をサポートするアブストラクション(abst
raction)である。たとえば、MACHマイクロカーネ
ルは、ユーザ・レベル・プログラムで仮想メモリページ
ング・ポリシーをサポートする。メモリ・オブジェクト
は、この能力をサポートするためのアブストラクション
である。
【0014】これらの概念のすべてが、MACHマイク
ロカーネル・プログラミング・モデルの基礎であり、カ
ーネル自体で使用される。カーネギー・メロン大学のM
ACHマイクロカーネルのこれらの概念および他の特徴
は、ボイキン(Joseph Boykin)他著、"Programming Un
der MACH", Addison Wessely Publishing Company, Inc
orporated、1993年に記載されている。
【0015】UNIXパーソナリティをサポートするた
めのマイクロカーネルの使用に関する追加の議論は、ア
セッタ(Mike Accetta)他著の論文、"MACH: A New Ker
nelFoundation for UNIX Development", Proceedings o
f the Summer 1986 USENIXConference, Atlanta, Georg
iaに記載されている。この話題に関するもう1つの技術
論文が、ゴラブ(David Golub)他著、"UNIX as an App
lication Program",Proceedings of the Summer 1990 U
SENIX Conference, Anaheim, Californiaである。
【0016】現在のマイクロカーネル実施態様に関する
問題の1つが、仮想記憶動作(memory operation)のす
べてがタスクに基づくということである。仮想メモリ呼
出しの多くが、必ずしも単一のタスクに制限されるもの
ではないので、これは不適切な要件である。また、これ
によって、重大な機密漏れが導入される。あるタスクの
代わりに別のタスクが仮想メモリサブシステムの一部を
操作できるようにするためには、あるタスクの制御ポー
トを別のタスクに与えなければならない。あるタスクの
制御ポートを与えられたならば、そのタスクは、第1の
タスクのセキュリティを破ることができる。さらに、仮
想メモリ機能のすべてをタスク上で動作させることによ
って、必ずしもタスク操作の一部である必要がない仮想
メモリ呼出しのすべてに関して、タスク・インターフェ
ースが過度に複雑になる。現在のマイクロカーネル用仮
想メモリインターフェースのもう1つの問題は、それら
の多くが、メモリの範囲に対して動作することである。
タスクは、多くのメモリ範囲からなる場合があるので、
このインターフェース定義には、複数のメモリ範囲に対
する動作を自然に制限するものが存在しない。たとえ
ば、予約されているメモリの範囲がある場合、予約済み
の範囲とそれに隣接する未予約の範囲にまたがるメモリ
割振りなどの動作を防止するための明白な制限はない。
このため、メモリ内のオブジェクトの内容が破壊される
という望ましくない結果が生じる。
【0017】
【発明が解決しようとする課題】したがって、本発明の
目的は、データ処理システム用の改良されたマイクロカ
ーネル・アーキテクチャを提供することである。
【0018】本発明のもう1つの目的は、従来技術で可
能であったものよりも仮想記憶動作が単純化されてい
る、データ処理システム用の改良されたマイクロカーネ
ル・アーキテクチャを提供することである。
【0019】本発明のもう1つの目的は、タスクに関す
るセキュリティを強化された、データ処理システム用の
改良されたマイクロカーネル・アーキテクチャを提供す
ることである。
【0020】本発明のもう1つの目的は、メモリ内で定
義されたオブジェクトの破壊に対してより強く抵抗す
る、データ処理システム用の改良されたマイクロカーネ
ル・アーキテクチャを提供することである。
【0021】
【課題を解決するための手段】上記その他の目的、特徴
および長所は、本明細書に記載の発明に従うマップ済み
領域および未マップ領域を管理するための方法および装
置によって達成される。
【0022】本発明は、マイクロカーネル・アーキテク
チャ用のメモリ管理方法およびマイクロカーネル構造自
体である。本発明は、特殊オブジェクトとしてメモリ内
でマイクロカーネルによって定義されるテンプレート領
域を特徴とする。このメモリ管理方法では、マイクロカ
ーネルが、データ処理システムのメモリにロードされた
後に、メモリ内でタスク・コンテナの作成を開始でき
る。これは、まず、メモリ内の特殊オブジェクトとして
テンプレート領域を形成し、各テンプレート領域が、対
応するタスク・コンテナを定義する属性の組を有するよ
うにすることによって行われる。この属性によって、仮
想メモリ、データ、通信ポートなど、あるタスクがその
スレッドによる使用のために使用可能な資源を指定する
ことができる。その後、マイクロカーネルは、テンプレ
ート領域によって指定された属性をタスクにマッピング
することによって、メモリ内でタスクを形成することが
できる。マイクロカーネルは、テンプレート領域に基づ
いてタスク用の仮想アドレス空間を定義する。その後、
マイクロカーネルがテンプレート領域に対する仮想記憶
動作を実行する時には、その仮想記憶動作の効果が、マ
ッピング関係によってタスクに明示される。
【0023】マイクロカーネルは、テンプレート領域か
らのサイズ属性と、タスクの開始仮想アドレスとを使用
して、仮想アドレスでのタスクを表すデータ構造を定義
する。マイクロカーネルは、テンプレート領域からの属
性を使用して、タスクのスレッドが動作を行うことので
きる、タスク用の仮想アドレス空間を定義する。また、
マイクロカーネルは、タスクのタスク名を定義し、その
タスクが通信チャネルとして使用するためのメモリ内の
ポート名前空間を形成する。マイクロカーネルは、テン
プレート領域からの属性の組を使用して、そのタスク用
のポート名前空間に関するアクセス権を定義する。その
後、マイクロカーネルは、タスクの仮想アドレス空間か
ら命令を取り出すために、そのタスク用のメモリ内にス
レッド・オブジェクトを形成することができる。
【0024】本発明によれば、マイクロカーネルは、テ
ンプレート領域を指す、タスク用の第1ポインタを定義
する。テンプレート領域内には、PMAPと呼ばれるマ
ッピング・テーブルを直接または間接に指す第2ポイン
タがある。PMAPによって、第2ポインタの仮想アド
レス値が、そのタスクが使用するデータのページを含む
メモリ内のキャッシュ・オブジェクトの物理アドレスに
変換される。時々、あるタスクのデータ資源に変更を加
えることが所望される。これは、テンプレート領域内の
第2ポインタによって表される仮想アドレス値を変更す
ることによって達成される。変更された第2ポインタ
は、PMAP内の異なる変換値を指すことができ、これ
によって、望みどおりの異なるページやキャッシュ・オ
ブジェクトのアドレッシングがもたらされる。しかし、
タスクの内容自体に変更を加える必要はない。キャッシ
ュ・オブジェクト内のデータなどのタスク資源は、テン
プレート領域内の第2ポインタを介してタスクによって
アドレッシングされる。マイクロカーネルが、テンプレ
ート領域から複数のタスクを定義している場合、テンプ
レート領域内の第2ポインタを変更することによって、
そのテンプレート領域を指す複数のタスクから使用可能
な資源の大域的な変更がもたらされる。タスクによって
アドレッシングされるデータ・ページは、タスクのそれ
ぞれの内容を変更するのではなく、テンプレート領域内
の第2ポインタを1回だけ変更することによって変更で
きる。この形で、単一のテンプレート領域を複数のタス
クに同時にマッピングすることができる。各タスクか
ら、このテンプレート領域に対して行われた変更のすべ
てが見える。これによって、同一のテンプレート領域か
ら生成されたタスクによる、特性の共用が可能になる。
【0025】テンプレート領域は、すべての仮想記憶動
作が向けられるオブジェクトである。かつてのMACH
マイクロカーネルでは、タスクが、仮想記憶動作が向け
られるオブジェクトであった。本発明に従って、仮想記
憶動作を、その動作が実施されるテンプレート領域に向
けることによって、仮想記憶動作の共用がはるかに簡単
に達成される。というのは、各タスク内の領域のマッピ
ングではなく、1つの領域に対して変更が行われるから
である。
【0026】
【実施例】
パートA マイクロカーネル・システム 第1節 マイクロカーネルの原理 図1は、マイクロカーネル120とパーソナリティ・ニ
ュートラル・サービス(PNS)140が、さまざまな
ハードウェア・プラットホーム上で複数のオペレーティ
ング・システムのパーソナリティ・サーバ150を走行
させる方法を示す、マイクロカーネル・システム115
の機能ブロック図である。
【0027】図1に示されたホスト多重プロセッサ10
0には、たとえばディスク駆動装置、読取り専用光学記
憶装置、読み書き可能光学記憶装置または他の大量記憶
装置とすることができる補助記憶装置106にバス10
4によって接続されたメモリ102が含まれる。やはり
バス104に接続されているのが、キーボード、モニタ
表示装置、遠隔通信アダプタ、ローカル・エリア・ネッ
トワーク・アダプタ、モデム、マルチメディア・インタ
ーフェース装置または他の入出力装置に接続することが
できる入出力アダプタ108である。やはりバス104
に接続されているのが、第1のプロセッサA 110と
第2のプロセッサB 112である。図1に示された例
は、2つの単一プロセッサであるプロセッサA 110
とプロセッサB 112が共通のメモリ102アドレス
空間を共用する対称多重プロセッサ構成である。単一プ
ロセッサまたは多重プロセッサの他の構成を、同等に適
した例として示すことができる。プロセッサは、たとえ
ばインテル社の386CPU(登録商標)、インテル社
の486CPU(登録商標)、ペンティアム(Pentiu
m、登録商標)プロセッサ、パワーPC(PowerPC、登録
商標)プロセッサまたは他の単一プロセッサ装置とする
ことができる。
【0028】メモリ102には、マイクロカーネル・シ
ステム115が記憶され、このマイクロカーネル・シス
テム115には、マイクロカーネル120、パーソナリ
ティ・ニュートラル・サービス140およびパーソナリ
ティ・サーバ150が含まれる。マイクロカーネル・シ
ステム115は、メモリ102に記憶されたアプリケー
ション・プログラム180のためのオペレーティング・
システムとして働く。
【0029】本発明の1目的は、UNIXやOS/2な
どの従来のオペレーティング・システムと同様に振る舞
うオペレーティング・システムを提供することである。
言い換えると、このオペレーティング・システムは、O
S/2やUNIXまたは他の従来のオペレーティング・
システムのパーソナリティを有する。
【0030】マイクロカーネル120には、ホスト多重
プロセッサ100の最高優先状態で走行する、この計算
機の基本動作を制御するシステム・ソフトウェアの小さ
なメッセージ受渡し核が含まれる。マイクロカーネル・
システム115には、マイクロカーネル120と、パー
ソナリティ・ニュートラル・サービス140を提供する
サービスおよびデバイス・ドライバの組とが含まれる。
その名が示すように、パーソナリティ・ニュートラル・
サービスとデバイス・ドライバは、UNIXやOS/2
などのパーソナリティに依存しない。これらは、マイク
ロカーネル120に依存し、また、互いに依存する。パ
ーソナリティ・サーバ150は、マイクロカーネル12
0のメッセージ渡しサービスを使用して、パーソナリテ
ィ・ニュートラル・サービス140と通信する。たとえ
ば、UNIX、OS/2または他のパーソナリティ・サ
ーバは、パーソナリティ・ニュートラル・ディスク・ド
ライバにメッセージを送り、そのディスクから1ブロッ
クのデータを読み取るよう要求することができる。この
ディスク・ドライバは、そのブロックを読み取り、それ
をメッセージに入れて返す。メッセージ・システムは、
ポインタ操作によって大量のデータをすばやく転送でき
るように最適化されており、データ自体はコピーされな
い。
【0031】そのサイズと、標準的なプログラミング・
サービスおよび特徴をアプリケーション・プログラムと
してサポートする能力のおかげで、マイクロカーネル1
20は、標準的なオペレーティング・システムより単純
である。マイクロカーネル・システム115は、さまざ
まな形で構成されるモジュラー片に分解され、小さな片
にモジュラー片を追加することによってより大きなシス
テムを作成できるようになっている。たとえば、各パー
ソナリティ・ニュートラル・サービス140は、論理的
に分離されており、さまざまな形で構成することができ
る。各サーバは、アプリケーション・プログラムとして
走行し、アプリケーション・デバッガを使用してデバッ
グすることができる。各サーバは、別々のタスク内で走
行し、サーバのエラーは、そのタスクの中に閉じこめら
れる。
【0032】図1には、プロセス間通信モジュール(I
PC)122と、仮想メモリモジュール124と、タス
クおよびスレッド・モジュール126と、ホストおよび
プロセッサ・セット128と、入出力サポートおよび割
込み130と、マシン依存コード125とを含むマイク
ロカーネル120が示されている。
【0033】図1に示されたパーソナリティ・ニュート
ラル・サービス140には、マスタ・サーバ、初期設定
および命名を含む多重パーソナリティ・サポート142
が含まれる。パーソナリティ・ニュートラル・サービス
には、デフォルト・ページャ144も含まれる。パーソ
ナリティ・ニュートラル・サービスには、多重パーソナ
リティ・サポートとデバイス・ドライバを含むデバイス
・サポート146も含まれる。パーソナリティ・ニュー
トラル・サービスには、ファイル・サーバ、ネットワー
ク・サービス、データベース・エンジンおよびセキュリ
ティを含む他のパーソナリティ・ニュートラル・プロダ
クト148も含まれる。
【0034】パーソナリティ・サーバ150は、たとえ
ば主要パーソナリティ152であり、これは、たとえば
UNIXパーソナリティとすることができる。主要パー
ソナリティには、UNIXサーバになるはずの主要パー
ソナリティ・サーバ154と、UNIX主要パーソナリ
ティをサポートするはずの他の主要パーソナリティ・サ
ービス155が含まれる。代替パーソナリティ156
は、たとえばOS/2とすることができる。代替パーソ
ナリティ156には、OS/2パーソナリティの特徴を
表すはずの代替パーソナリティ・サーバ158と、OS
/2用の他の代替パーソナリティ・サービス159が含
まれる。
【0035】図1に示された、UNIX主要パーソナリ
ティの例に関連する主要パーソナリティ・アプリケーシ
ョン182は、UNIXオペレーティング・システム・
パーソナリティである主要パーソナリティ152の上で
走行するはずのUNIXタイプのアプリケーションであ
る。図1に示された代替パーソナリティ・アプリケーシ
ョン186は、OS/2代替パーソナリティ・オペレー
ティング・システムである代替パーソナリティ156の
上で走行するOS/2アプリケーションである。
【0036】図1には、マイクロカーネル・システム1
15の実装が、プロセッサ・タイプからプロセッサ・タ
イプへ完全に可搬であるコードと、実行中の特定の計算
機のプロセッサのタイプに依存するコードに注意深く分
離されていることが示されている。また、装置に依存す
るコードはデバイス・ドライバに分離されている。しか
し、デバイス・ドライバのコードは、装置依存ではある
が、必ずしもプロセッサ・アーキテクチャに依存すると
は限らない。1タスクあたり複数のスレッドを使用する
ことによって、特定の計算機が多重プロセッサであるこ
とを必要とせずに多重プロセッサの使用を可能にするア
プリケーション環境がもたらされる。単一プロセッサ上
では、異なるスレッドは異なる時刻に走行する。多重プ
ロセッサのために必要なサポートのすべてが、小さく単
純なマイクロカーネル120に集中している。
【0037】この節では、マイクロカーネル・システム
115の構造の概観を提供する。後の節で、この構造の
構成要素のそれぞれを詳細に説明し、マイクロカーネル
・システム115のサービスを使用する新しいプログラ
ムを作るのに必要な技術を説明する。
【0038】マイクロカーネル・システム115は、オ
ペレーティング・システムのための新しい基礎である。
これは、次の特徴を有するオペレーティング・システム
開発用の理解しやすい環境を提供する。 ・多重パーソナリティのサポート ・拡張可能なメモリ管理 ・プロセス間通信 ・マルチスレッド ・マルチプロセッシング
【0039】マイクロカーネル・システム115は、純
粋カーネルとして実装されたカーネル・サービスの簡潔
な組と、ユーザ・レベル・サーバの組として実装される
オペレーティング・システム・パーソナリティを作るた
めの拡張サービスの組とを提供する。
【0040】マイクロカーネル・システム115の目標
には、下記が含まれる。 ・複数のオペレーティング・システム・パーソナリティ
が互いに協調して働けるようにすること ・デバイス・ドライバやファイル・システムなどの低水
準システム要素のための共通プログラミングを提供する
こと ・オペレーティング・システムとユーザ・アプリケーシ
ョンの両方で並列性を利用すること ・柔軟なメモリ共用を有する、大きく、潜在的に疎なア
ドレス空間をサポートすること ・透過的なネットワーク資源アクセスを可能にすること ・OS/2やUNIXなどの既存のソフトウェア環境と
互換であること ・可搬であること(32ビット・プラットホームと64
ビット・プラットホームに対して)
【0041】マイクロカーネル・システム115は、下
記の概念に基づく。 ・多くの従来のオペレーティング・システム機能(たと
えば、ファイル・システムやネットワークのアクセス)
を実行するユーザ・モード・タスク ・オペレーティング・システムを作成するためのユーザ
・レベル実行時サービスの基本セット ・単純で拡張可能な通信カーネル ・オブジェクト参照としての通信チャネルを有するオブ
ジェクト基礎 ・同期式および非同期式のプロセス間通信を使用する、
クライアント/サーバ・プログラミング・モデル
【0042】マイクロカーネル・システム115の基礎
は、単純で拡張可能な通信カーネルを提供することであ
る。マイクロカーネル・システム115の目的は、ユー
ザ空間またはカーネル空間のいずれかでの、最小量のカ
ーネル固有機能を用いる、柔軟なサービスの構成を可能
にすることである。このカーネルは、タスク対タスク通
信の他に、下記を含む他のサポートを提供しなければな
らない。 ・制御点の管理(スレッド) ・資源割当て(タスク) ・タスク用アドレス空間のサポート ・物理メモリ、プロセッサ、割込み、DMAチャネル、
クロックなどの物理資源の管理
【0043】ユーザ・モード・タスクは、資源の使用に
関するポリシーを実施する。カーネルは、このポリシー
を実行するための機構を提供するにすぎない。論理的に
カーネルの上にあるのが、パーソナリティ・ニュートラ
ル・サービス140層である。パーソナリティ・ニュー
トラル・サービスは、C実行時環境を提供する。これに
は、文字列関数などの基本構造と、下記を含むサーバの
組が含まれる。 ・名前サーバ クライアントがサーバを見つけられるよ
うにする ・マスタ・サーバ プログラムのロードと開始を可能に
する
【0044】カーネル・アブストラクション(Kernel A
bstractions) マイクロカーネル・システム115の目標の1つは、カ
ーネル自体によって提供されるアブストラクションを最
小にすることであるが、これは、これらのアブストラク
ションに関連するセマンティックスにおける最小化では
ない。提供されるアブストラクションのそれぞれが、そ
れに関連するセマンティックスの組と、他のアブストラ
クションとの相互作用の複雑な組を有する。このため、
鍵となる発想の識別が困難になる可能性がある。主なカ
ーネル・アブストラクションは、次の通りである。 ・タスク 資源割振りの単位であり、大きなアクセス空
間とポート権を有する ・スレッド CPU利用の単位であり、軽量(低オーバ
ーヘッド)である ・ポート 通信チャネルであり、送出/受取りの能力ま
たは権利を介してのみアクセス可能である ・メッセージ データ・オブジェクトの集合 ・メモリ・オブジェクト メモリ管理の内部単位 (タスク、スレッド、ポート、メッセージおよびメモリ
・オブジェクトの概念の詳細な説明については、第2節
「アーキテクチャ・モデル」を参照されたい)
【0045】タスクとスレッド マイクロカーネル・システム115は、従来のプロセス
という概念は提供しない。というのは、オペレーティン
グ・システム環境のすべてが、プロセスに関するかなり
のセマンティックス(ユーザID、シグナル状態など)
を有するからであり、これらの拡張されたセマンティッ
クスを理解もしくは提供することは、マイクロカーネル
の目的ではないからである。
【0046】多くのシステムでは、プロセスが制御の実
行点と同等とみなされる。一部のシステムはそうではな
い。
【0047】マイクロカーネル120は、オペレーティ
ング・システム環境のプロセスとは別に、複数の制御点
をサポートする。マイクロカーネルは、次の2つの概念
を提供する。 ・タスク ・スレッド (タスクおよびスレッドという概念の詳細な説明につい
ては、第2節「アーキテクチャ・モデル」を参照された
い)
【0048】メモリ管理 カーネルは、多少のメモリ管理を提供する。メモリは、
タスクに関連付けられる。メモリ・オブジェクトは、タ
スクがメモリ管理に対する制御を得るのに利用する手段
である。マイクロカーネル・システム115は、大き
な、潜在的に疎な仮想アドレス空間をサポートする機構
を提供する。各タスクは、関連アドレス・マップを有
し、この関連アドレス・マップが、カーネルによって維
持され、タスクのアドレス空間内の仮想アドレスから物
理アドレスへの変換を制御する。仮想メモリ・システム
の場合と同様に、所与のタスクの全アドレス空間の内容
が、同一の時刻に物理メモリ内に完全に常駐していなく
てもよく、タスクの仮想アドレス空間のためのキャッシ
ュとして物理メモリを使用するための機構が存在しなけ
ればならない。従来の仮想メモリ設計と異なり、マイク
ロカーネル・システム115は、キャッシュ動作自体の
すべてを実施するわけではない。マイクロカーネル・シ
ステムは、これらの機構に関与する能力をユーザ・モー
ド・タスクに与える。パーソナリティ・ニュートラル・
サービスには、ユーザ・タスクと、メモリに関するペー
ジング・サービスを提供するデフォルト・ページャ14
4が含まれる。
【0049】マイクロカーネル・システム115内の他
の資源と異なり、仮想メモリは、ポートを使用した参照
はされない。メモリは、特定のタスクのアドレス空間内
の指標として仮想アドレスを使用することだけによって
参照できる。あるタスクのアドレス空間を定義するメモ
リと関連アドレス・マップは、他のタスクと部分的に共
用することができる。タスクは、そのアドレス空間内で
新しいメモリ範囲を割り振り、メモリ範囲の割振りを解
除し、メモリ範囲に対する保護を変更することができ
る。タスクは、範囲に対する継承特性を指定することも
できる。新タスクは、既存タスクを基礎として指定し、
これから新タスク用のアドレス空間を構築することによ
って作成される。既存タスクのメモリの範囲のそれぞれ
の継承属性によって、新タスクがその範囲を定義される
かどうかと、その範囲が仮想的にコピーされるか既存タ
スクと共用されるかどうかが決定される。メモリに関す
る仮想コピー動作のほとんどは、コピー・オン・ライト
最適化を介して達成される。コピー・オン・ライト最適
化は、保護された共用によって達成される。2つのタス
クは、コピーされるメモリを共用するが、読取り専用の
アクセス権を有する。どちらかのタスクがその範囲の一
部を修正しようと試みる時には、その部分がその時点で
コピーされる。このメモリ・コピーの遅延評価は、マイ
クロカーネル・システム115によって実行される重要
な性能最適化であり、システムの通信/メモリ原理にと
って重要である。
【0050】メモリの所与の範囲は、メモリ・オブジェ
クトによって二重書きされる。メモリ・マネージャ(ma
nager)・タスクは、メモリにキャッシュされている間
のページの組のイメージ(メモリ範囲の物理メモリ内
容)とキャッシュされていない時のページのその組のイ
メージ(アブストラクト・メモリ・オブジェクト(abst
ract memory object))の間の関係を支配するポリシー
を提供する。パーソナリティ・ニュートラル・サービス
は、当初は0クリアされ、システム・ページング空間に
対してページングされる基本的な非持続性メモリ・オブ
ジェクトを提供するデフォルト・メモリ・マネジャまた
はデフォルト・ページャを有する。
【0051】タスク対タスク通信 マイクロカーネル・システム115は、通信チャネルを
介して送られるメッセージを介して他のタスク(サー
バ)に要求を行うことによってタスク(クライアント)
がサービスをアクセスする、クライアント/サーバ・シ
ステム構造を使用する。マイクロカーネル120は、そ
れ自体ではごく限られた数のサービスしか提供しない
(たとえば、ファイル・サービスは提供しない)ので、
マイクロカーネル120のタスクは、要求されたサービ
スを提供する他の多くのタスクと通信しなければならな
い。プロセス間通信(IPC)機構の通信チャネルを、
ポートと呼ぶ(ポートの詳細な説明については、第2節
「アーキテクチャ・モデル」を参照されたい)。メッセ
ージは、データ、メモリ領域およびポート権の集合であ
る。ポート権とは、その権利を保持するタスクがポート
に命名するのに用いる名前である。タスクは、適切なポ
ート権を保持する場合に限ってポートを操作できる。1
つのタスクだけが、あるポートの受取り権を保持するこ
とができる。このタスクは、そのポート待ち行列からメ
ッセージを受け取る(読み取る)ことを許可される。複
数のタスクが、そのポートへの送出権を保持することが
でき、これによって、その待ち行列にメッセージを送る
(書き込む)ことが可能になる。タスクは、データ要素
の組を含むデータ構造を作り、その後、送出権を保持す
るポートに対してメッセージ送出動作を実行することに
よって、別のタスクと通信する。後程、そのポートの受
取り権を保持するタスクが、メッセージ受取り動作を実
行する。 注意:このメッセージ転送は、非同期動作である。メッ
セージは、受取り側タスクに論理的にコピーされる(お
そらくはコピー・オン・ライト最適化を用いて)。受取
り側タスク内の複数のスレッドが、所与のポートからメ
ッセージを受け取ろうと試みている可能性があるが、ど
のメッセージであれ、所与のメッセージを受け取るのは
1つのスレッドだけである。
【0052】第2節 アーキテクチャ・モデル マイクロカーネル・システム115は、その主な責任と
して、フレームワーク内で命令を実行する制御点の提供
を有する。これらの制御点を、スレッドと呼ぶ。スレッ
ドは、仮想環境で実行される。カーネルが提供する仮想
環境には、ユーザ空間パーソナリティ・ニュートラル・
サービスと、カーネルによって提供されるエミュレート
される命令(システム・トラップ)とによって増補され
る、ユーザ空間をアクセスできるハードウェア命令のす
べてを実行する仮想プロセッサが含まれる。この仮想プ
ロセッサは、仮想化されたレジスタの組と、その計算機
の物理メモリと同様に応答する仮想メモリの一部をアク
セスする。他のハードウェア資源のすべては、メモリ・
アクセスとエミュレートされる命令の特殊な組合せを介
さなければアクセスできない。カーネルによって提供さ
れる資源は、すべてが仮想化されることに留意された
い。この節では、スレッドから見える仮想環境の最高水
準の要素を説明する。
【0053】パーソナリティ・ニュートラル・サービス
の要素 マイクロカーネル・システム115のパーソナリティ・
ニュートラル・サービス140部分は、その下層のマイ
クロカーネル120上に作られたサービスからなる。こ
れによって、カーネル自体が依存するいくつかの機能な
らびに、プログラムを構成するためのユーザ・レベル・
サービスの基本セットがもたらされる。これらのプログ
ラムは、複数のオペレーティング・システム・パーソナ
リティ・クライアントからの要求をサービスすることが
でき、オペレーティング・システム・パーソナリティ自
体を構成するのに使用される。さらに、標準Cでパーソ
ナリティ・ニュートラル・サービス・プログラムを構成
するためのANSI(American National Standards In
stitute、米国規格協会)のC実行時環境と、POSI
X標準規格から採用された定義を有するいくつかの補足
機能がある。パーソナリティ・ニュートラル・サービス
自体を定義するライブラリのほかに、マイクロカーネル
固有の部分であるパーソナリティ・ニュートラル・サー
ビス内に存在する多数のライブラリがある。これらのラ
イブラリは、マイクロカーネルがエクスポートするイン
ターフェースと、マイクロカーネル・システム115の
プロセス間通信機能と共に使用されるメッセージ・イン
ターフェース・ジェネレータ(MIG)のためのサポー
ト・ロジックを表す。
【0054】パーソナリティ・ニュートラル・サービス
環境ライブラリの構造は、各サービスの実装の詳細を呼
出し側から隠蔽するようになっている。C実行時ライブ
ラリのうちの1つなど、ライブラリの一部では、呼出し
側のアドレス空間にロードされる局所ルーチンとしてそ
の関数(機能)のすべてが実装され、それ以外のライブ
ラリは、マイクロカーネルのIPC(プロセス間通信)
システムを呼び出してメッセージをサーバに送るスタブ
からなる。このアーキテクチャによって、関数の柔軟な
実装が可能になる。すなわち、サービスを使用するプロ
グラムのソースに影響せずに、サーバを他のサーバによ
って置換することができ、サービスを組み合わせて単一
のタスクにすることができる。パーソナリティ・ニュー
トラル・サービス環境の鍵となる要素は、それが完全な
オペレーティング・システムを構成しないことである。
そうではなくて、パーソナリティ・ニュートラル・サー
ビスはパーソナリティの存在に依存する。システム始動
中に最初にロードされる主要パーソナリティ152は、
そのシステム上のユーザ・インターフェースを提供し、
そのクライアントとパーソナリティ・ニュートラル・サ
ービスの要素にサービスを提供するオペレーティング・
システム・パーソナリティである。したがって、主要パ
ーソナリティは、「最後の手段」のサーバである。主要
パーソナリティは、パーソナリティ・ニュートラル・サ
ービス・ライブラリによって定義されるが別のサーバに
よって実施されないサービスのすべてを実施する。
【0055】マイクロカーネル120も、パーソナリテ
ィ・ニュートラル・サービスのいくつかの要素に依存す
る。マイクロカーネルがパーソナリティ・ニュートラル
・サーバ(Personality Neutral Server)にメッセージ
を送って内部カーネル動作を完了する場合がある。たと
えば、ページ不在を解決する際に、マイクロカーネル1
20は、デフォルト・ページャ144にメッセージを送
ってよい。その場合、デフォルト・ページャ144は、
カーネルが必要とするページをハード・ディスクから読
み込む。ページ不在は、通常はユーザ・タスクの代わり
に解決されるが、この場合のカーネルは、メッセージの
送出側である。
【0056】実行時 パーソナリティ・ニュートラル・サービス実行時は、こ
の環境内で実行中のプログラムのための標準Cプログラ
ミング環境をサポートするのに使用されるANSI C
およびPOSIXライブラリの組を提供する。この機能
には、通常のC言語構造体が含まれる。どのシステムと
も同じく、マイクロカーネル・システム115は、その
主な責任として、フレームワーク内で命令を実行する制
御点の提供を有する。マイクロカーネル120では、制
御点をスレッドと呼ぶ。スレッドは、仮想環境で実行さ
れる。マイクロカーネル120が提供する仮想環境は、
カーネルによって提供されるエミュレートされた(シス
テム・トラップ)命令によって増補される、ユーザ空間
をアクセスできるハードウェア命令のすべてを実行する
仮想プロセッサからなる。この仮想プロセッサは、仮想
化されたレジスタの組と、その計算機の物理メモリと同
様に応答する一部の仮想メモリをアクセスする。他のハ
ードウェア資源のすべては、メモリ・アクセスとエミュ
レートされる命令の特殊な組合せを介さなければアクセ
スできない。マイクロカーネルが提供する資源は、すべ
てが仮想化されることに留意されたい。この節では、マ
イクロカーネル・スレッドから見える仮想環境の最高水
準要素を説明する。
【0057】カーネルの要素 マイクロカーネル120は、下のカーネル要素のリスト
に記載された要素からなる環境を提供する。
【0058】スレッド 実行制御点。スレッドは軽量の実体である。あるスレッ
ドに関係する状態のほとんどは、それを含むタスクに関
連する。
【0059】タスク ポート名前空間、仮想アドレス空間およびスレッドの組
の形式で資源への参照を保持するコンテナ。
【0060】セキュリティ・トークン アクセス妥当性検査を実行するサーバにタスクから渡さ
れるセキュリティ特徴。
【0061】ポート タスク間の単一方向通信チャネル。
【0062】ポート・セット メッセージ受取り時に単一の単位として扱うことができ
るポートの組。
【0063】ポート権 ポートをアクセスするための具体的な権利を許可する。
【0064】ポート名前空間 特定のポート権に命名するポート名の指標付きの集合。
【0065】メッセージ 2つのタスクの間で渡される、データ、メモリ領域およ
びポート権の集合。
【0066】メッセージ待ち行列 単一のポートに関連するメッセージの待ち行列。
【0067】仮想アドレス空間 1タスク内のスレッドによって参照できる、まばらなメ
モリ・ページの指標付きの組。ページの範囲に、カーネ
ルおよび外部メモリ・マネージャによって実施される機
構を介して、任意の属性とセマンティックスを関連付け
ることができる。
【0068】アブストラクト・メモリ・オブジェクト
(Abstract Memory Object) このオブジェクトによって二重書きされるメモリ範囲の
非常駐状態を表すアブストラクト・オブジェクト。この
オブジェクトを実装するタスクを、メモリ・マネージャ
と呼ぶ。アブストラクト・メモリ・オブジェクト・ポー
トは、カーネルがメモリ・マネージャの処置を要求する
のに使用するポートである。
【0069】メモリ・オブジェクト・レプリゼンタティ
ブ(memory object representative) メモリ・マネージャによってメモリ・オブジェクトのク
ライアントに供給されるメモリ・オブジェクトのアブス
トラクト表現。代理は、関連するアブストラクト・メモ
リ・オブジェクトを命名し、クライアントに許可される
潜在的なアクセス・モードを制限する。
【0070】メモリ・キャッシュ・オブジェクト アブストラクト・メモリ・オブジェクトによって二重書
きされる常駐状態のメモリ範囲を含むカーネル・オブジ
ェクト。メモリ・マネージャがクライアントの可視メモ
リ・イメージを操作するのは、このオブジェクトを介し
てである。
【0071】プロセッサ スレッドを実行する能力を有する物理プロセッサ。
【0072】プロセッサ・セット それぞれがプロセッサ・セットに割り当てられたスレッ
ドを実行するのに使用可能なプロセッサの組。
【0073】ホスト 全体としての多重プロセッサ。
【0074】クロック 時間の経過の表現。一定の周波数で増分される時刻値。
【0075】これらの要素の多くが、スレッドによって
直接操作できる、カーネルによって実装される資源であ
る。これらの要素のそれぞれを、以下の段落で詳細に説
明する。しかし、これらの一部の定義は、他の定義に依
存するので、完全な説明を理解できるようにするため
に、鍵となる概念の一部を単純化した形で述べる。
【0076】スレッド スレッドは、軽量の実体である。これは、作成のコスト
が低く、動作に必要なオーバーヘッドが少ない。スレッ
ドは、ほんの少しの状態しか持たない(ほとんどはその
レジスタの状態である)。スレッドを所有するタスク
が、資源管理の責任を負う。多重プロセッサ上では、1
タスク内の複数のスレッドを並列に実行することができ
る。並列性が目標でない時であっても、複数のスレッド
には長所がある。というのは、各スレッドが、単一のス
レッドで複数のサービスを提供しようとする非同期プロ
グラミングではなく、同期式プログラミング・スタイル
を使用できるからである。スレッドには、下記の特徴が
含まれる。 1.タスクの制御フローまたは命令実行のストリームの
1点 2.それを含むタスクの要素のすべてに対するアクセス
権 3.同一のタスク内のスレッドも含む他のスレッドとの
並列実行 4.低オーバーヘッドのための最小限の状態
【0077】スレッドは、基本的な計算実体である。ス
レッドは、その仮想アドレス空間を定義する1つのタス
クだけに属する。アドレス空間の構造に影響を及ぼした
り、アドレス空間以外の資源を参照するためには、スレ
ッドが、特殊なトラップ命令を実行しなければならな
い。この命令が、カーネルに、スレッドの代わりに動作
を実行させたり、スレッドの代わりにエージェントにメ
ッセージを送らせる。これらのトラップは、そのスレッ
ドを含むタスクに関連する資源を操作する。カーネルに
対して要求を行って、これらの実体を操作する、すなわ
ち、実体の作成、削除、状態の変更を行うことができ
る。カーネルは、資源(上にリストしたものなど)とサ
ービスを提供するマネージャである。タスクは、サービ
スを提供することもでき、アブストラクト資源を実装す
る。カーネルは、サーバ・タスク(実際にはその中で実
行中の1スレッド)がサービスを提供することをクライ
アント・タスクが要求できるようにする通信方法を提供
する。この場合、タスクは二重のIDを有する。1つ
は、その資源マネージャがカーネル内で実行される、カ
ーネルによって管理される資源のIDである。もう1つ
は、資源マネージャがタスク自体である資源の供給側の
IDである。
【0078】スレッドは、下記の状態を有する。 1.その機械状態(レジスタなど)。これは、スレッド
の実行に伴って変化し、カーネル・スレッド・ポートを
保持するものによって変更される可能性もある。 2.スレッド固有のポート権の小さな組。これによっ
て、そのスレッドのカーネル・ポートと、そのスレッド
の代わりに例外メッセージを送るのに使用されるポート
が識別される。 3.中断カウント。スレッドが命令を実行しようとして
いない場合には0ではない。 4.資源スケジューリング・パラメータ。
【0079】スレッドは、通常の形で命令を実行するこ
とによって動作する。さまざまな特殊命令をカーネルが
トラップして、スレッドの代わりに動作を実行する。こ
れらのカーネル・トラップのうちで最も重要なのが、ma
ch_msg_trapである。このトラップを用いると、スレッ
ドがカーネルや他のサーバにメッセージを送って、資源
に対する動作を行えるようになる。このトラップは、直
接に呼び出されることはない。これは、ライブラリ・ル
ーチンmach_msgを介して呼び出される。スレッドの実行
中に発生する、「浮動小数点オーバーフロー」や「ペー
ジ不在」などの例外状態は、ポートにメッセージを送る
ことによって処理される。使用されるポートは、その状
態の性質に依存する。例外状態の結果は、スレッドの状
態をセットするか、例外メッセージに応答するか、この
両方を行うことによって決定される。下記の動作をスレ
ッド上で実行できる。 ・作成と破壊 ・中断と再開始(中断カウントの操作) ・機械状態の操作 ・特殊ポート(例外ポートなど)の操作 ・資源(スケジューリング)の制御
【0080】タスク タスクは、システム資源の集合である。これらの資源
は、アドレス空間を除いて、ポートによって参照され
る。これらの資源は、ポートに対する権利が分配される
ならば、他のタスクと共用できる。
【0081】タスクは、機械アドレスによって参照され
る、大きく潜在的に疎なアドレス空間を提供する。この
空間の各部は、継承または外部メモリ管理を介して共用
できる。注意:タスク自体は動作しない。タスクには、
命令を実行するスレッドが含まれる。「タスクYがXを
行う」と言う時があるが、これは、「タスクYに含まれ
るスレッドがXを行う」という意味である。タスクは、
コストの高い実体である。1タスク内のスレッドのすべ
てが、あらゆるものを共用する。2つのタスクは、明示
的な処置がない限り何も共用しない。ただし、この処置
はほとんどの場合に単純である。ポート受取り権などの
一部の資源は、2つのタスクの間で共用することができ
ない。タスクは、スレッドの組を保持するコンテナとみ
なすことができる。タスクには、それに含まれるスレッ
ドに適用されるデフォルト値が含まれる。最も重要なこ
とに、タスクには、それに含まれるスレッドが実行を必
要とする要素、すなわち、ポート名前空間と仮想アドレ
ス空間が含まれる。
【0082】タスクに関連する状態は次の通りである。 ・含まれるスレッドの組 ・関連する仮想アドレス空間 ・ポート権の組に命名する関連するポート名前空間と、
関連するポート通知要求の組 ・タスクからメッセージと共に送出されるセキュリティ
・トークン ・タスクのカーネル・ポートを識別するタスク固有ポー
トの小さな組、含まれるスレッドの例外処理に使用する
ためのデフォルト・ポート、および他のサービスに命名
するためのブートストラップ・ポート ・スレッドが命令を実行しようとしていない場合には非
0の中断カウント ・スレッド用のデフォルト・スケジューリング・パラメ
ータ ・統計的PCサンプルを含むさまざまな統計
【0083】タスクは、新タスクが作成されるホストを
指定し、アドレス空間のさまざまな部分を継承によって
供給できるプロトタイプ・タスクを指定することによっ
て作成される。
【0084】1タスク上で、次の動作を実行できる。 ・作成と破壊 ・セキュリティ・トークンのセット ・中断と再開始 ・特殊ポートの操作 ・含まれるスレッドの操作 ・スケジューリング・パラメータの操作
【0085】セキュリティ・ポート どのタスクにも、セキュリティ・トークンすなわち、カ
ーネルの視点からは不透明な識別子によってタグが付け
られる。これによって、そのタスクのIDと他のセキュ
リティ属性が符号化される。このセキュリティ・トーク
ンは、そのタスクが送るすべてのメッセージに暗黙値と
して含められる。信頼されるサーバは、この送られたト
ークンを送出側のIDの表示として使用して、アクセス
調停決定を行う際に使用することができる。
【0086】タスクは、その親からセキュリティ・トー
クンを継承する。このトークンは、IDの模造不能な表
示として使用されるので、このトークンを変更するため
には特権が必要である。この特権は、ホスト・セキュリ
ティ・ポートを提示することによって示される。
【0087】ある予約された値が、カーネルのIDを示
す。カーネルからのメッセージは、例外メッセージを除
いてすべてがカーネルIDを含む。例外メッセージに
は、例外を発生しているタスクのIDが含まれる。
【0088】ポート ポートは、サービスを要求するクライアントとそのサー
ビスを提供するサーバの間の単一方向通信チャネルであ
る。ポートは、単一の受取り側と潜在的に複数の送出側
を有する。ポートに関連する状態は、次の通りである。 ・それに関連するメッセージ待ち行列 ・そのポートに対する参照(権利)のカウント ・仮想コピー・メモリとポートの量に対するセット可能
な限界 ・ポートを介してメッセージ内で送ることのできる権利
【0089】カーネル・サービスは、ポートを割り振る
ために存在する。仮想メモリ範囲以外のシステム実体
は、すべてがポートによって命名される。ポートは、こ
れらの実体が作成される時に暗黙のうちに作成される。
【0090】カーネルは、要求時に、ポートの消滅の際
に通知メッセージを供給する。タスクの仮想アドレス空
間を除く他のシステム資源のすべては、ポートとして既
知の、あるレベルの間接指定を介してアクセスされる。
ポートは、サービスを要求するクライアントとそのサー
ビスを提供するサーバの間の単一方向通信チャネルであ
る。そのようなサービス要求に対して応答を提供しなけ
ればならない場合、第2のポートを使用しなければなら
ない。供給されるサービスは、ポートを介して送られた
メッセージを受け取るマネージャによって決定される。
すなわち、カーネル提供実体に関連するポートの受取り
側は、カーネルであるということになる。タスク供給実
体に関連するポートの受取り側は、その実体を提供した
タスクである。タスク供給実体に命名するポートの場
合、そのポートに対するメッセージの受取り側を別のタ
スクに変更することができる。単一のタスクが、それが
サポートする資源を参照する複数のポートを有すること
もできる。所与の実体は、それを表す複数のポートを有
することができ、このポートのそれぞれが、許容される
動作の異なる組を暗示する。たとえば、多くの実体は、
名前ポートと、特権ポートと呼ばれる場合もある制御ポ
ートとを有する。制御ポートをアクセスすることによっ
て、その実体を操作することができる。名前ポートのア
クセスは、その実体に命名するだけであり、これはたと
えば、情報を返すために行われる。
【0091】ポートに関するシステム全域の名前空間は
存在しない。スレッドは、それを含むタスクに既知のポ
ートだけをアクセスできる。タスクは、ポート権の組を
保持し、このポート権のそれぞれが、ポート(別個であ
る必要はない)に命名し、そのポートに関して許可され
る権利を指定する。ポート権は、メッセージに含めて伝
送できる。これが、タスクがポート権を得る方法であ
る。ポート権は、ポート名を用いて命名され、このポー
ト名は、その権利を保持するタスクのコンテキスト(ポ
ート名前空間)の内部でのみ意味を持つ、カーネルによ
って選択される整数である。システム内の動作のほとん
どは、操作されるオブジェクトのマネージャを命名する
ポートにメッセージを送ることからなる。本明細書で
は、これを オブジェクト−>関数 の形式で示す。これは、そのオブジェクトを命名するポ
ートに対して(適当なメッセージを送ることによって)
この関数が呼び出されることを意味する。メッセージ
は、ポート(権)に送らなければならないので、この動
作はオブジェクト基礎を有する。プロセッサ・セットへ
スレッドをバインドするなど、一部の動作は、2つのオ
ブジェクトを必要とする。これらの動作では、コンマで
区切られたオブジェクトが示される。すべての実体がポ
ートによって命名されるわけではなく、これは純粋なオ
ブジェクト・モデルではない。ポート権によって命名さ
れない2つの主な実体が、ポート名/ポート権自体と、
メモリの範囲である。事象オブジェクトも、タスク局所
IDによって命名される。メモリ範囲を操作するために
は、そのメモリ範囲を所有するタスクによって命名され
た、そのメモリ範囲を含む仮想アドレス空間にメッセー
ジを送る。ポート名/ポート権を操作するには、また、
しばしば、関連ポートを操作するためには、それを所有
するタスクによって命名された、それを含むポート名前
空間にメッセージを送る。本明細書では、添え字表記 オブジェクト[ID]−>関数 を使用して、操作される範囲またはオブジェクトの要素
を示すためにメッセージ内のパラメータとしてIDが必
要であることを示す。本明細書では、括弧表記 オブジェクト(ポート)−>関数 を使用して、特定の方法でオブジェクトを操作するのに
十分な特権を示すためにメッセージ内のパラメータとし
てホスト制御ポートなどの特権ポートが必要であること
を示す。
【0092】ポート・セット ポート・セットは、メッセージ受取り時に単一の単位と
して扱うことのできるポートの組である。mach_msg受取
り動作は、受取り権またはポート・セットのいずれかを
命名するポート名に対して許可される。ポート・セット
には、受取り権の集合が含まれる。あるポート・セット
に対して受取り動作が実行される時には、そのセットの
ポートのうちの1つからメッセージが受け取られる。受
け取られたメッセージは、それがどのメンバ・ポートか
ら受け取られたかを示す。ポート・セットのメンバであ
るポートからメッセージを直接受け取ることは許可され
ない。ポート・セット内のポートには、優先順位という
概念がない。所与のメッセージをポート・セット内のど
のポートから受け取るかはカーネルが選択するが、この
選択を制御する方法はない。ポート・セットに関してサ
ポートされる動作は次の通りである。 ・作成と削除 ・メンバシップ(所属関係)の変更とメンバシップの問
い合わせ
【0093】ポート権 ポートは、ポート権を使用することによってのみアクセ
ス可能である。ポート権を用いると、特定のポートを特
定の方法でアクセスできるようになる。ポート権には、
下記の3種類がある。 ・受取り権 この権利を保持していると、関連ポートか
らメッセージを受け取ることができる。 ・送出権 この権利を保持していると、関連ポートにメ
ッセージを送ることができる。 ・1回送出権 この権利を保持していると、関連ポート
に1つだけメッセージを送ることができる。このポート
権は、メッセージが送られた後に自動的に破壊される。
【0094】ポート権は、mach_msg呼出しのさまざまな
オプションを使用することによって、また、明示的なコ
マンドによって、タスクの間でコピーすることができ、
移動することができる。メッセージ動作以外では、ポー
ト権は、ポート名前空間のメンバとしてのみ操作可能で
ある。ポート権は、他のシステム実体が作成される時に
暗黙のうちに作成され、また、明示的なポート作成を使
用することによって明示的に作成される。
【0095】カーネルは、要求時に、ポートに対する送
出権がこれ以上ない時に、選択されたポートに通知を供
給する。また、1回送出権の破壊(メッセージを送るの
に使用することによらない場合)によって、対応ポート
に送られる1回送出通知が生成される。要求時に、カー
ネルは、受取り権の破壊の通知を供給する。
【0096】ポート名前空間 ポートとポート権は、任意のポートまたはポート権の直
接操作を可能にするシステム全域にわたる名前を有しな
い。ポートは、ポート権を介してのみ操作可能であり、
ポート権は、ポート名前空間に含まれる時に限って操作
可能である。ポート権は、ポート名前空間への指標であ
るポート名によって指定される。各タスクには、1つの
ポート名前空間だけが関連付けられている。
【0097】ポート名前空間内の1項目は、次の4つの
可能な値を有することができる。 ・MACH_PORT_NULL 関連するポート権なし。 ・MACH_PORT_DEAD この名前に権利が関連していたが、
その権利が参照していたポートが破壊されている。 ・ポート権 ポートに関する、1回送出権、送出権また
は受取り権 ・ポート・セット名 受取り権と同様に振る舞うが、複
数のポートからの受取りが可能な名前。
【0098】タスク内で新しい権利を取得すると、新し
いポート名が生成される。ポート権は、そのポート名を
参照することによって操作されるので、時にはポート名
自体が操作される。所与のポート名前空間内の所与のポ
ートに対する送出権と受取り権のすべてが、同一のポー
ト名を有する。所与のポートに対する1回送出権のそれ
ぞれは、互いに異なるポート名を有し、このポート名
は、保持されている送出権や受取り権に使用されている
ポート名のいずれとも異なる。ポート名に関してサポー
トされる動作には、下記が含まれる。 ・作成(権利の作成時の暗黙の)と削除 ・関連する型の問い合わせ ・名前の変更 ・要求時に、カーネルが使用不能になる名前の通知を提
供する。
【0099】ポート名前空間は、タスクにバインドされ
るので、それを所有するタスクと共に作成され、破壊さ
れる。
【0100】メッセージ メッセージは、2つの実体の間で渡される、データ、メ
モリ領域およびポート権の集合である。メッセージ自体
は、システム・オブジェクトではない。しかし、メッセ
ージは、待ち行列化されるので重要である。というの
は、メッセージが送られた時と受け取られる時の間で状
態を保持することができるからである。この状態は、下
記からなる。 ・純データ ・メモリ範囲のコピー ・ポート権 ・送出側のセキュリティ・トークン
【0101】メッセージ待ち行列 ポートは、メッセージの待ち行列からなる。この待ち行
列は、メッセージを伝送するメッセージ動作(mach_ms
g)を介してのみ操作される。待ち行列に関連する状態
は、待ち行列化されたメッセージの順序付きセットと、
メッセージの数に対する設定可能な限界である。
【0102】仮想アドレス空間 仮想アドレス空間によって、その仮想アドレス空間を所
有するタスク内で実行中のスレッドが参照を許可される
仮想アドレスの組が定義される。仮想アドレス空間は、
それを所有するタスクによって命名される。
【0103】仮想アドレス空間は、疎なページの指標付
きの組からなる。個々のページの属性は、望みどおりに
設定できる。効率のため、カーネルは、同一の属性を有
する仮想的に連続したページの組を、内部メモリ領域に
グループ化する。カーネルは、望みどおりにメモリ領域
を分割、併合することができる。システム機構は、メモ
リ領域のIDに敏感であるが、ほとんどのユーザ・アク
セスは、それほど影響を受けず、自由にメモリ領域をま
たぐことができる。
【0104】所与のメモリ範囲に、メモリ・マネージャ
の処置を介して別個のセマンティックスを関連付けるこ
とができる。仮想アドレス空間内で新しいメモリ範囲を
確立する時に、そのメモリ範囲のセマンティックスを表
すアブストラクト・メモリ・オブジェクトが、おそらく
はデフォルトで、そのセマンティックスを提供するタス
ク(メモリ・マネージャ)と関連付けることによって指
定される。
【0105】仮想アドレス空間は、タスクの作成時に作
成され、タスクの破壊時に破壊される。アドレス空間の
初期内容は、task_create呼出しのさまざまなオプショ
ンならびに、その呼出しに使用されたプロトタイプ・タ
スクのメモリ範囲の継承特性から決定される。
【0106】仮想アドレス空間に対する動作のほとんど
は、そのアドレス空間内のメモリ範囲に命名する。これ
らの動作には、下記が含まれる。 ・範囲の作成または割振りと割振り解除 ・範囲のコピー ・追出しを避けるための物理メモリへのページの「ワイ
ヤリング(wiring)」を含む、特殊な属性の設定 ・メモリ保護属性の設定 ・継承特性の設定 ・範囲の直接読み書き ・補助記憶への範囲の強制フラッシュ ・範囲の予約(範囲内のランダム割振りの防止)
【0107】アブストラクト・メモリ・オブジェクト マイクロカーネルは、ユーザ・モード・タスクに、仮想
アドレス空間の参照部分に関連するセマンティックスの
供給を許可する。これは、アブストラクト・メモリ・オ
ブジェクトによって二重書きされるメモリ範囲の非常駐
状態を表すアブストラクト・メモリ・オブジェクトの指
定を可能にすることによって行われる。このメモリ・オ
ブジェクトを実装し、メモリ・オブジェクトに命名する
ポートへ送られたメッセージに応答するタスクを、メモ
リ・マネージャと呼ぶ。
【0108】カーネルは、さまざまなメモリ・オブジェ
クトの内容のための直接アクセス可能キャッシュとし
て、メイン・メモリを使用するものとみなされなければ
ならない。カーネルは、アブストラクト・メモリ・オブ
ジェクト・ポートにメッセージを送ることによって、カ
ーネルの望みどおりにこのキャッシュを満たし、フラッ
シュして、このキャッシュを維持するためにさまざまな
メモリ・マネージャと共に非同期ダイアログにかかわ
る。アブストラクト・メモリ・オブジェクトに対する動
作には、下記が含まれる。 ・初期設定 ・ページ読取り ・ページ書込み ・強制動作およびフラッシュ動作との同期化 ・ページをアクセスする許可の要求 ・ページ・コピー ・終了
【0109】メモリ・オブジェクト・レプリゼンタティ
ブ(Memory Object Representative) アブストラクト・メモリ・オブジェクト・ポートは、カ
ーネルが、メモリ・オブジェクト用の補助記憶へのアク
セスを要求するのに使用するポートである。このダイア
ログは保護されているので、メモリ・マネージャは、通
常はアブストラクト・メモリ・オブジェクト・ポートへ
のアクセス権をクライアントに与えない。その代わり
に、クライアントには、メモリ・オブジェクト・レプリ
ゼンタティブへのアクセス権が与えられる。メモリ・オ
ブジェクト・レプリゼンタティブは、メモリ・オブジェ
クトのクライアントの表現である。このようなポートに
対して許可される動作は1つだけであり、それは、関連
するメモリ・オブジェクトをタスクのアドレス空間にマ
ッピングすることである。このような要求を行うと、マ
ッピング・カーネルとメモリ・マネージャの間で、下層
のアブストラクト・メモリ・オブジェクトを初期設定す
るためのプロトコルが開始される。カーネルが代理によ
って表されたアブストラクト・メモリ・オブジェクトな
らびに代理によって許可されるアクセス・モードの組に
ついて知らされるのは、この特殊なプロトコルを介して
である。
【0110】メモリ・キャッシュ・オブジェクト カーネルのメイン・メモリ・キャッシュのうち、所与の
アブストラクト・メモリ・オブジェクトに関連する常駐
ページを含む部分を、メモリ・キャッシュ・オブジェク
トと呼ぶ。メモリ・オブジェクトのメモリ・マネージャ
は、カーネルのメモリ・キャッシュ・オブジェクトに対
する送出権を保持する。メモリ・マネージャは、カーネ
ルと共に非同期ダイアログにかかわり、関連するメモリ
・キャッシュ・オブジェクトにメッセージを送ることに
よってそのアブストラクト・メモリ・オブジェクトのア
ブストラクションを提供する。メモリ・キャッシュ・オ
ブジェクトに対する動作には、下記が含まれる。 ・動作属性を設定する ・属性を返す ・カーネルにページを供給する ・カーネルによって要求されたページが使用不能である
ことを示す ・カーネルによって要求されたページが、カーネルのデ
フォルト・ルールによって満たされなければならないこ
とを示す ・オブジェクトの遅延コピーの完了を強制する ・メモリ・マネージャに送られたページが破棄されたこ
とを示す ・メモリ・ページへのアクセスを制限する。 ・性能ヒントを提供する ・終了
【0111】プロセッサ スレッドを実行する能力を有する物理プロセッサのそれ
ぞれは、プロセッサ制御ポートによって命名される。実
際の作業を実行するという点では重要であるが、プロセ
ッサは、プロセッサ・セットのメンバとしての重要さを
除いて、マイクロカーネルではあまり重要でない。スレ
ッドの組をスケジューリングするのに使用されるプロセ
ッサのプールの基礎を形成し、スケジューリング属性を
関連付けられているのは、プロセッサ・セットである。
プロセッサに関してサポートされる動作には、下記が含
まれる。 ・プロセッサ・セットへの割当て ・開始と停止などの機械制御
【0112】プロセッサ・セット プロセッサは、プロセッサ・セットにグループ化され
る。プロセッサ・セットは、そのプロセッサ・セットに
割り当てられたスレッドのスケジューリングに使用され
るプロセッサのプールを形成する。プロセッサ・セット
は、スレッドの組のスケジュール可能性を均一に制御す
るための基礎として存在する。この概念によって、シス
テム内の所与の活動に対するプロセッサのおおまかな割
振りを実行する方法ももたらされる。プロセッサ・セッ
トに対してサポートされる動作には、下記が含まれる。 ・作成と削除 ・プロセッサの割当て ・スレッドおよびタスクの割当て ・スケジューリング制御
【0113】ホスト ネットワーク化されたマイクロカーネル・システム内の
各計算機(単一プロセッサまたは多重プロセッサ)は、
それ自体のマイクロカーネルのインスタンスを走行させ
る。ホスト多重プロセッサ100は、一般に、クライア
ント・タスクによって操作されない。しかし、各ホスト
はそれ自体のマイクロカーネル120を携帯し、そのそ
れぞれがそれ自体のポート空間、物理メモリおよび他の
資源を有するので、実行中のホストは、可視であり、時
には直接操作される。また、各ホストは、それ自体の統
計を生成する。ホストは、自由に分配され、そのホスト
に関する情報の取得に使用できる名前ポートと、閉鎖的
に保持され、ホストを操作するのに使用できる制御ポー
トとによって命名される。ホストによってサポートされ
る動作には、下記が含まれる。 ・クロック操作 ・統計収集 ・リブート ・デフォルト・メモリ・マネージャの設定 ・プロセッサとプロセッサ・セットのリスト取得
【0114】クロック クロックは、一定の周波数で時刻値カウンタを増分する
ことによって、時間の経過の表現を提供する。各ホスト
または多重コンピュータ内の各ノードは、ハードウェア
によってサポートされるさまざまなクロックおよびタイ
マならびにこれらのタイマ上に作成されるアブストラク
ト・クロック(abstract clock)に基づいて、それ自体
のクロックの組を実装する。所与のシステムによって実
装されるクロックの組は、構成時にセットされる。各ク
ロックは、名前ポートと、制御ポートまたは特権ポート
との両方によって命名される。制御ポートを用いると、
クロックの時刻と分解能を設定できる。名前ポートを与
えられたタスクは、下記を実行することができる。 ・時刻とクロックの分解能を判定する。 ・時刻値をマッピングするメモリ・オブジェクトを生成
する。 ・所与の時刻まで休眠(遅延)する。 ・所与の時刻に通知または警報を要求する。
【0115】第3節 タスクとスレッド この節では、ユーザから見えるスレッドとタスクの外見
を述べる。スレッドは、マイクロカーネル・システム1
15内の能動的な実体である。これらは、タスク内の制
御点として働き、タスクは、仮想アドレス空間と、他の
資源をアクセスするのに用いられるポート名前空間とを
スレッドに供給する。
【0116】スレッド スレッドは、基本的な計算実体である。スレッドは、そ
の仮想アドレス空間を定義する1つのタスクだけに属す
る。スレッドは、最小限の状態を有する軽量の実体であ
る。スレッドは、ハードウェアによって指示される形
で、そのスレッドのレジスタ値に基づいてそのタスクの
アドレス空間から命令を取り出しながら実行する。スレ
ッドが直接行うことのできる唯一の処置は、そのレジス
タを操作する命令と、そのメモリ空間を読み書きする命
令の実行である。特権付きの機械命令を実行しようとす
ると、例外が発生する。例外については後で説明する。
アドレス空間の構造に影響を与えるか、アドレス空間以
外の資源を参照するためには、スレッドは、スレッドに
代わってカーネルに動作を実行させるか、スレッドの代
わりに何らかのエージェントにメッセージを送らせる特
殊なトラップ命令を実行しなければならない。また、障
害や他の不正な命令の挙動があると、カーネルが例外処
理を呼び出すことになる。
【0117】図2は、スレッドに関連する、クライアン
トから可視の構造を示す図である。スレッド・オブジェ
クトは、カーネル・スレッド・ポートに送られたメッセ
ージを受け取る。このスレッド・ポートに関する送出権
を保持するランダムなタスクからのほかに、スレッド・
ポートは、スレッドを含むプロセッサ・セットまたはス
レッドを含むタスクを介して、スレッドのスレッド自己
ポートとしてアクセス可能である。
【0118】スレッドによる処置 この節では、スレッドが直接行うことのできる処置の詳
細を説明する。スレッドは、正しいポートへの権利を得
ることができ、そのポートにメッセージを送ることがで
きるならば、何でも行うことができる。スレッドが行う
ことのできるささまざまなことを、操作されるオブジェ
クトを説明する節で説明する。
【0119】スケジューリング・サポート・トラップ マイクロカーネルは、プリエンプティブにスレッドをス
ケジューリングする。これを行う方法には、さまざまな
要因が関連する。ここでは、スレッドにスケジューリン
グ優先順位が関連付けられ、この優先順位が、所与のプ
ロセッサ・セット内で実行すべきスレッドの選択に使用
されると述べておけば十分である。
【0120】thread_switchは、さまざまなオプション
を有するコンテキスト切り換えを引き起こす。これは、
ソフトウェア・ロック・ルーチンなど、プロセッサを放
棄し、その結果、他のスレッドが進行できるようにした
い場合のために提供される。オプションは、新たに走行
する適切なスレッドの情報が使用可能である時に、その
選択に関係する。thread_switchのオプションのうちの
1つを指定すると、そのスレッドのスケジューリング優
先順位が可能な最低の値に下げられ、その結果、他のス
レッドが走行し、この順位を下げられたスレッドをブロ
ックした作業を完了できるようになる。この優先順位低
下は、所与の時刻が満了した時に取り消され、順位低下
にもかかわらずこのスレッドが走行し、thread->thread
_abortまたはthread->thread_depress_abortが呼び出さ
れる。
【0121】最後に、clock_sleepトラップは、指定さ
れた時刻までスレッドを遅延させる。この遅延は、thre
ad_abortによってclock_sleepにエラー・リターンを生
成させることによって打ち切ることができる。
【0122】IDトラップこの節で述べるいくつかのト
ラップのほかに、サービスを求める他の要求のすべて
が、ポート権を必要とする。現スレッドまたは現タスク
を操作するカーネルに対する要求であっても、ポート権
(現スレッドまたは現タスクに命名する)が必要であ
る。この処理をブートストラップするためには、あるス
レッドが、ポート権なしに、それ自体とそのタスクに関
するポート権を得る方法が必要である。これらの権利
は、それぞれmach_thread_selfトラップおよびmach_tas
k_selfトラップを介して取得される。
【0123】返されるポート権は、実際には、thread->
thread_set_special_portメッセージ呼出しおよびtask-
>task_set_special_portメッセージ呼出しを介して最後
にセットされた特殊ポート、THREAD_KERNEL_PORTおよび
TASK_KERNEL_PORTである。これらの特殊ポートのデフォ
ルト値は、それぞれ実際のカーネル・スレッド・ポート
およびカーネル・タスク・ポートである。タスクまたは
スレッドを生成する側は、そのスレッドまたはタスクを
開始する前にこれらの特殊ポート値をセットし、その結
果、スレッドまたはタスクが、それ自体のカーネル・ポ
ートへのアクセス権を持たず、それ自体に対して行われ
るサービスを要求する時に何らかの中間ポートを呼び出
すようにすることができる。カーネルは、タスクのホス
トの名前ポートに対する送出権を返すトラップ、mach_h
ost_selfも提供する。
【0124】ブートストラップ応答ポート・トラップ mach_reply_portも、ブートストラップの目的に使用さ
れる。前に述べたように、サービス要求で応答を返す必
要がある場合、第2のポートが必要である。このトラッ
プは、他のポート関連呼出しのすべてのために使用でき
る初期応答ポート(受取り権)の作成に使用される。タ
スクの自己ポートがnullである場合、そのタスクに対す
るマイクロカーネル・サービスの使用が不能になるが、
この呼出しでもnullが返される。
【0125】メッセージ送受トラップ 最後の最も重要なトラップが、mach_msg_trapである。
このトラップは、mach_msgライブラリ・ルーチンによっ
て呼び出される。このトラップは、他のすべてのシステ
ム・サービスへのアクセス権を提供する。これによっ
て、所与の権利によって命名されたポートとの間でデー
タが送受される。この呼出しのセマンティックスは、Ke
rnel Programming Reference文書に含まれ、詳細に記載
されており、この文書のさまざまな節にも記載されてい
る。
【0126】例外処理 スレッド内で例外が発生する時、スレッドは、カーネル
・コンテキストで実行され、例外ポートに例外を説明す
る内容を含むメッセージを送る。例外は、Kernel Progr
amming Reference文書のcatch_exception_raiseにリス
トされている。このメッセージに成功裡の応答が返され
ると、そのスレッドは、おそらくはthread_set_stateに
よって変更された状態で継続する。所与の例外に対し
て、適用される例外ポートは次の2つである。 ・特定のタイプの例外のためのスレッド固有ポート。 ・特定のタイプの例外のためのタスク・ポート。
【0127】スレッド固有ポートは、thread->thread_s
et_exception_portsを用いてセットされ、thread->thre
ad_get_exception_portsを用いて読み取られる。タスク
・ポートは、task->task_set_exception_portsを用いて
セットされ、task->task_get_exception_portsを用いて
読み取られる。thread->thread_swap_exception_ports
呼出しとtask->task_swap_exception_ports呼出しによ
って、原子的なスワップが実行され、例外ポートがセッ
トされ、前の例外ポートが返される。
【0128】カーネルは、順序付きリスト内でポートが
定義されているならば、これらのポートのうちで最初の
ポートを、例外メッセージの宛先として選択する。成功
裡の応答は、スレッドの継続を引き起こすが、不成功の
応答は、カーネルに第2ポートへ例外メッセージを送出
させる。どちらの例外メッセージも成功裡の応答を受け
取らない場合、そのスレッドが打ち切られる。
【0129】カーネルは、例外ポートがセットされた時
に選択されるものとして、下記のさまざまな例外メッセ
ージ・フォーマットを送ることができる。 ・exception_port->catch_exception_raise 障害を発
生したスレッドのIDと、タスク自己ポートと、スレッ
ド自己ポートと、実行コードおよび状況コードのタイプ
を示すメッセージ。 ・exception_port->catch_exception_raise_state 例
外のタイプ、状況コードおよび、例外ポートがセットさ
れた時に選択されたレジスタ値を含むスレッド状態の特
色を示すメッセージ。スレッド状態は、入力と出力の両
方であり、この応答がスレッド状態を変更できるように
なっている。 ・exception_port->catch_exception_raise_state_iden
tity タスク・ポートとスレッド・ポートを含むcatch_
exception_raise_stateメッセージ。
【0130】スレッドが遭遇するすべての例外状態が、
この方法で処理されるわけではない。ページ不在障害で
は、例外ポートにメッセージが送られない。その代わり
に、障害を発生したアドレスがあるメモリ・ページに関
連する外部メモリ・マネージャにメッセージが送られ
る。これは、仮想メモリの一部として説明する。一般的
な例外の規則は、システム呼出し命令には必ずしも適用
されない。まず、可能なシステム呼出し番号のうちのい
くつかは、マイクロカーネル呼出しのために含まれる。
残りのシステム呼出し番号は、当初は未定義である。こ
れらを実行しようと試みると、EXC_SW_EMULATIONの例外
が生じる。
【0131】スレッドの処置 次の節では、カーネルのスレッド・ポートに対する送出
権があるものとして、スレッドに対して行うことのでき
るさまざまな機能をリストする。
【0132】作成と破壊 スレッドは、task->thread_createを介して生成され、t
hread->thread_terminateを介して破壊される。スレッ
ドは、所与のタスクに属するので、スレッド作成は、実
際にはタスクに対して実行される動作である。その結果
は、新スレッド用のカーネルのスレッド・ポートへの送
出権である。所与のタスク内のスレッドのすべてに関す
るカーネル・スレッド・ポートのリストは、task->task
_threadsを用いて得ることができる。新たに作成された
スレッドは、中断状態である。これは、そのスレッドの
最初の命令を実行する前にthread->thread_suspendを呼
び出した場合と同一である。中断されたスレッドは、実
行されない。スレッドは、中断状態で作成されるので、
スレッドを開始する前に、スレッドの機械状態を正しく
セットすることができる。スレッドを中断状態から取り
除く(中断カウントを減分する)には、thread->thread
_resumeを使用する。
【0133】最適化として、走行中のスレッドを作成す
るのに必要なステップのシーケンス、すなわち、thread
_create、thread_set_stateおよびthread_resumeを組み
合わせて、task->thread_create_running呼出しにして
ある。
【0134】スレッドの状態 スレッドには、状態の2つの主な組すなわち、機械状態
と1組の特殊ポートがある。あるスレッドの機械状態
は、thread->thread_get_stateを使用して取得され、th
read->thread_set_stateを使用してセットされる。ラン
ダムな点でスレッドの状態をセットした結果は、未定義
である。決定的な結果を得るためには、下記のさまざま
なステップが必要である。 ・thread->thread_suspendを使用して、スレッドを停止
させる。スレッドが作成されたばかりで、まだ走行して
いない場合には、このステップと次のステップは不要で
ある。しかし、シグナル配布などの非同期割込みや例外
処理のためには、これらのステップが必要である。 ・thread->thread_abortを呼び出す。これによって、す
べてのシステム呼出し(実際には、mach_msgと、例外メ
ッセージやページ不在メッセージなどの関連メッセージ
呼出し)が打ち切られる。メッセージ呼出しの打切りに
よって、システム呼出しの後の点にスレッドの状態がセ
ットされ、呼出しの割込みを示す戻り値が返される。ペ
ージ障害または例外を打ち切ると、スレッドは、ページ
障害または例外の点に残される。このスレッドを再開始
すると、そのページ障害または例外が再び発生する。th
read_abortによって、多重ページ・メモリ管理動作など
の回復不能システム呼出しが打ち切られる。 ・その後、thread->thread_set_stateを安全に使用する
ことができる。 ・thread->thread_resumeによって、スレッドを再開始
する。
【0135】スレッドは現在、1つの「特殊」ポートだ
けを関連付けられている。これは、そのスレッドがそれ
自体に対する動作を要求するのに使用するための値であ
る。これは、通常はカーネル・スレッド・ポートと同一
であるが、異なる値にセットすることもできる(それを
行うのは、ほとんどの場合にそのスレッドを作成した側
である)。このポートは、thread->thread_get_special
_portによって返され、thread->thread_set_special_po
rtによってセットされる。
【0136】中断カウントやスケジューリング情報な
ど、カーネル・スレッド状態のさまざまな部分を、thre
ad->thread_infoを使用して得ることができる。
【0137】スケジューリング制御 下記の関数は、スレッドのスケジューリングに影響す
る。これらは、物理資源管理の節で説明する。 ・thread、processor_set_control->thread_assign ・thread->thread_assign_default ・thread->thread_get_assignment ・thread(processor_set_control)->thread_set_policy ・thread->thread_policy ・thread(host_control)->thread_wire ・thread->thread_priority ・thread(processor_set_control)->thread_max_priori
ty
【0138】thread_wire呼出しによって、スレッドが
「ワイヤリング済み(wired)」としてマークされる。
これは、カーネル資源管理に関する特権を意味する。
「ワイヤリング済み」のスレッドは、常にスケジューリ
ングされる資格を有し、空きメモリが不十分な時であっ
てもメモリを消費することができる。この特性は、デフ
ォルト・ページアウト・パス内のスレッドに割り当てら
れる。カーネルの空きページ・リストを使い果たさない
ようにするために、デフォルト・ページアウト・パス内
にないスレッドにこの特性を与えてはならない。
【0139】タスク タスクは、スレッドの組を保持するコンテナとみなすこ
とができる。タスクには、それに含まれるスレッドに適
用されるデフォルト値が含まれる。最も重要なことに、
タスクには、それに含まれるスレッドが実行を必要とす
る要素、すなわち、ポート名前空間と仮想アドレス空間
が含まれる。
【0140】図3は、クライアントから可視のタスク構
造を示す図である。タスク・オブジェクトは、カーネル
・タスク・ポートに送られたメッセージを受け取る。タ
スク・ポートに対する送出権を保持する可能性があるラ
ンダムなタスクからのほかに、タスク・ポートは、タス
クのタスク自己ポート、タスクに含まれるスレッドまた
はタスクを含むプロセッサ・セットから導出することが
できる。
【0141】作成と破壊 新タスクは、task->task_createを用いて作成される。
タスク作成は、既存のプロトタイプ・タスクについて要
求される動作であることに留意されたい。新タスクは、
空の仮想アドレス空間を用いて作成されたものである
か、親タスクから継承したもののいずれかとすることが
できる。新タスクのポート名前空間は、空である。新タ
スクは、親タスクのPCサンプリング状態、特殊ポート
および例外ポートを継承する。タスクは、task->task_t
erminateを用いて破壊される。この動作は、破壊される
タスクに関して要求されるものであって、その作成の際
に指定された親に対するものではない。タスクの仮想ア
ドレス空間とポート名前空間が破壊される。
【0142】タスクに関するさまざまな統計は、task->
task_infoを用いて取得できる。
【0143】特殊ポート タスクに関連するポート名前空間のほかに、タスクは、
小さな組の特殊ポートも有する。
【0144】タスクには、下記の特殊ポートが関連付け
られている。 ・タスクがそれ自体に対する動作を要求するのに使用す
るポート。これは、通常はカーネル・タスク・ポートと
同一であるが、別の値にセットすることができる。 ・どのような目的にも使用できるが、他のサービスを突
き止めるのに使用するため、タスクがそれ自体以外の何
かに対して保持する初期ポートとして用意された、ブー
トストラップ・ポート。 ・通常はホスト名前ポートと同一の、タスクを含むホス
トに情報を要求するのに使用されるポート。
【0145】これらのポートは、task->task_get_speci
al_portによって返され、task->task_set_special_port
によってセットされる。新タスク内のこれらのポートの
値は、タスク自己ポートを除いて、task_create呼出し
の目標であったタスクから継承される。タスクは、例外
処理の節で説明したように、親タスクから継承した例外
ポートも有する。
【0146】スレッド管理 スレッドは、1つのタスクだけに属する。スレッドは、
task->thread_createを用いて作成される。1タスク内
に存在するスレッドの組は、task->task_threadsを用い
て見つけることができる。
【0147】タスク自体は実行されないが、あるタスク
に関していくつかの実行特性をセットすることができ、
これらの特性は、そのタスクに含まれるスレッドに適用
される。あるタスク内のスレッドのすべてを一緒に、ta
sk->task_suspendによって中断し、task->task_resume
によって再開始することができる。これらの動作は、ス
レッドの中断カウントには影響せず、タスクの中断カウ
ントに影響する。スレッドは、スレッドとそのタスクの
両方の中断カウントが0である場合に限って実行可能に
なる。スレッドに関するデフォルトのスケジューリング
特性は、下記を用いてセットできる。 ・task、processor_set_control->task_assign ・task->task_assign_default ・task->task_get_assignment ・task->task_priority
【0148】ID タスクのそれぞれには、カーネルによって解釈されない
セキュリティ・トークンを用いてラベルが付けられる。
これは、信頼されるサーバがサービス要求元に関するア
クセス調停決定に使用するために、そのタスクによって
送られるメッセージの中で送られる。このセキュリティ
・トークンは、task_createによって親タスクから継承
される。これは、特権付きのtask(security)->task_set
_security_token呼出しを用いなければ変更できない。
セキュリティ・ポートは、ブートストラップ・タスクに
供給される特権ポートであり、このブートストラップ・
タスクの唯一の目的は、タスクIDのセットまたは変更
をサポートすることである。
【0149】第4節 IPC 共用メモリを除いて、マイクロカーネル・タスクは、メ
ッセージ送出と応答受取りだけによってその環境と対話
する。これらのメッセージは、ポートを使用して送られ
る。ポートは、受取り側を1つだけ有し、複数の送出側
を有することができる通信チャネルである。タスクは、
これらのポートに対する権利を保持し、この権利によっ
て、メッセージを送受する能力が指定される。
【0150】ポート ポートは、サービスを要求するクライアントとそのサー
ビスを提供するサーバの間の単一方向通信チャネルであ
る。ポートは、受取り側を1つだけ有し、複数の送出側
を有することができる。カーネルがサポートする資源を
代表するポートは、受取り側としてカーネルを有する。
あるタスクが提供するサービスに命名するポートは、そ
のポートの受取り側としてそのタスクを有する。この受
取り側は、ポート権の節で述べるように、望むならば変
更することができる。
【0151】ポートに関連する状態は次の通りである。 ・関連するメッセージ待ち行列 ・ポートに対する参照または権利のカウント ・ポート権とアウトオブライン・メモリ受取り限界 ・メッセージ順序番号 ・受取り権から作成された送出権の数 ・このポートを含むポート・セット ・ノーモアセンダー・ポートが指定されている場合には
その名前
【0152】図4は、一連の送出権と単一の受取り権と
を示す、通常のポートを示す図である。関連するメッセ
ージ待ち行列は、一連の順序付きメッセージを有する。
メッセージのうちの1つを詳細に示す。これには、その
メッセージの宛先ポート、応答ポート参照、そのメッセ
ージで渡された送受権ならびにいくつかのアウトオブラ
イン・メモリまたは仮想コピー・メモリが示されてい
る。
【0153】ポート自体に影響する動作はごくわずかで
ある。ほとんどの動作は、ポート権またはポート権を含
むポート名前空間に影響するか、メッセージ待ち行列に
影響する。ポートは、他のシステム実体が作成される時
に暗黙のうちに作成される。また、mach_reply_portに
よってポートが1つ作成される。ポート群は、port_nam
e_space[port_name]->mach_port_allocateおよびport_n
ame_space[port_name]->mach_port_allocate_nameによ
って明示的に作成される。あるポートを明示的に破壊す
ることはできない。ポートが破壊されるのは、受取り権
が破壊される時だけである。
【0154】ポートの属性は、作成時に割り当てられ
る。これらの属性の一部、たとえば1メッセージで受け
取ることのできるポート権の数やアウトオブライン・メ
モリの量に対する限界などは、port_name_space[port_n
ame]->mach_port_set_attributesを用いて変更できる。
これらの属性は、port_name_space[port_name]->mach_p
ort_get_attributesを用いて取得できる。
【0155】ポートの存在は、関連するすべてのものに
とって明らかに重要である。したがって、ポートを使用
する多くのタスクが、ポートが破壊された時にメッセー
ジを介して通知を受けることを希望する可能性がある。
このような通知は、mach_msgに対するオプション(MACH
_RCV_NOTIFY)ならびにport_name_space[port_name]->m
ach_port_request_notificationによって要求される。
その結果の破壊された名前の通知で、名前付きポートの
破壊のためにあるタスクのポート名が破壊されたことが
示される。このメッセージでは、現在破壊されているポ
ートに関するタスクの名前が示される(これについて
は、ポート名前空間の節で説明する)。
【0156】メッセージ メッセージは、2つの実体の間で渡されるデータ、アウ
トオブライン・メモリ領域およびポート権の集合であ
る。メッセージ自体は、操作可能なシステム・オブジェ
クトではない。しかし、メッセージは待ち行列化され、
メッセージが送出された時刻とそれが受け取られた時刻
の間で状態を保持することができるので、メッセージは
重要である。純データのほかに、メッセージにポート権
を含めることもできる。これは重要である。この形で、
メッセージの中でポート権を受け取ることによって、タ
スクが新しい権利を取得するのである。
【0157】メッセージは、プロセス間通信(IPC)
サブシステムによって解析される制御部分と、データ部
分からなる。さらに、メッセージは、メッセージそのも
のの外部にある、転送すべきデータの領域を指すことが
できる。これらの領域には、ポート権を含めることがで
きる(アウトオブライン・ポート配列)。メッセージに
は、送出側のセキュリティ・トークンも含まれる。メッ
セージの制御部分は、ヘッダと、任意選択としてメッセ
ージ本体と1つまたは複数のメッセージ記述子から構成
される。ヘッダによって、このメッセージが送られるポ
ートのポート名が指定され、応答が必要な場合には、応
答が送られるポートの補助ポート名も指定される。
【0158】メッセージ本体が存在する時には、メッセ
ージ本体はヘッダの後に続き、ここでそれに続く記述子
の数が宣言される。記述子がない場合、そのメッセージ
は「複合」メッセージではない、すなわち、データの表
立った変換またはコピーをIPCサブシステムが行う必
要がない、とみなされる。非「複合」メッセージには、
メッセージ本体が含まれない。各記述子は、アウトオブ
ライン・メモリ領域、ポート権、ポート権配列など、カ
ーネルによって操作されるデータのセクションを記述す
る。メッセージのデータ部分に含まれるデータは、IP
Cサブシステムによってバイトの無名配列として扱われ
る。メッセージの送出側と受取り側の両方が、データ・
フォーマットに関する共通の理解を共用しなければなら
ない。メッセージ・インターフェース・ジェネレータ
(MIG)が生成したルーチンから発するメッセージの
場合、データの最初の8バイトに、そのメッセージに含
まれるデータの可能な計算機間変換に関する計算機符号
化情報が含まれる。
【0159】単一のポート権に関する記述子は、その権
利に命名し、コピーを作成したり異なる型の権利から権
利を生成するのではなく権利を移動するなどのmach_msg
によって実行される特殊な変換に命名する。「アウトオ
ブライン」・ポート配列の記述子も、権利(すべてが同
一の型でなければならない)のセットに関するIPC処
理を指定するが、ポート名の配列のアドレスとサイズを
指定する。
【0160】アウトオブライン・データ記述子は、アウ
トオブライン領域のサイズとアドレスを記述する。この
領域は、あるページの先頭から始まる必要はなく、整数
個のページを含む必要もない。指定されたデータだけ
が、論理的に伝送される。この記述子は、メッセージを
待ち行列化する処置によって、vm_deallocateによるも
のであるかのように、送出側タスクからメモリ範囲を割
振り解除することを指定することができる。送出側は、
データの物理コピーと仮想コピーのどちらを送るかを選
択することができる。仮想コピーを要求することによっ
て、カーネルがその仮想コピーを使用する、すなわち、
大量のデータを効率的にコピーする機構であるコピー・
オン・ライトを使用することが可能になる。その結果、
受取り側には、送出側のメモリ・マネージャによって二
重書きされる仮想コピーが見える可能性がある。仮想コ
ピー機構が使用される可能性があるので、送出側と受取
り側の両方が、メモリのアクセス時間に不確定性を経験
する可能性がある。物理コピーを選択すると、送出側と
受取り側によるデータへの決定的なアクセスが保証され
る。アウトオブライン・データ領域内の値も、メッセー
ジ・データ内の値も、型を持たない。メッセージの受取
り側だけが、そのメッセージが来たポートとメッセージ
・データの知識を用いて、これらのデータ区域を解釈で
き、おそらくは変換することができる。
【0161】メッセージ・トレーラ メッセージを受け取る時には、デフォルトでその末尾に
トレーラが付加される。トレーラは、通常はIPCサブ
システムによって追加され、物理的にメッセージと連続
している。トレーラには、メッセージ順序番号や送出側
セキュリティ・トークンなどのさまざまな伝送関連フィ
ールドが含まれる。
【0162】トレーラのフォーマットとサイズは、受取
り側のmach_msgへのオプションを介して制御可能であ
る。これは、送出側のトレーラ供給のオプションとして
も可能である。
【0163】メッセージ待ち行列 ポートは、メッセージの待ち行列からなる。この待ち行
列は、メッセージを伝送するメッセージ動作(mach_ms
g)を介してのみ操作される。メッセージ待ち行列に関
して操作可能な唯一の状態が、そのサイズである。これ
は、関連ポートの受取り権がport_name_space[port_nam
e]->mach_port_set_attributesに与えられる時にセット
できる。メッセージ待ち行列が満杯の場合、それ以上の
メッセージを待ち行列化することはできない。この場
合、呼出し側がブロックされる。
【0164】ポートに送られたメッセージは、信頼性の
ある形で配布される。メッセージの受取りによって、前
のすべてのメッセージが受け取られたことと、それらの
メッセージが、受取りポートに待ち行列化された順序で
受け取られたことが保証される。
【0165】ポート権 ポート権は、特定のポートを特定の方法でアクセスする
権利を示す実体である。ポートは、ポート権を介しての
みアクセス可能である。これと関連して、ポート権には
次の3種類がある。 ・受取り権 この権利を保持していると、関連ポートか
らメッセージを受け取ることができる。 ・送出権 この権利を保持していると、関連ポートにメ
ッセージを送ることができる。 ・1回送出権 この権利を保持していると、関連ポート
に1つだけメッセージを送ることができる。このポート
権は、メッセージが送られた後に自動的に破壊される。
ポート権は、ポートを識別するための安全で位置独立な
方法である。これらの権利は、カーネルによって保護さ
れる実体である。クライアントは、権利を有するポート
名を介してのみポート権を操作する。
【0166】基本操作 mach_msgは、権利を操作する基本的な方法の1つであ
る。ポート権は、メッセージ内で、タスクの間で移動す
なわち、送出側から削除し、受取り側に追加することが
できる。メッセージ内の任意選択フラグによって、mach
_msgに既存の送出権のコピーを作成させたり、受取り権
から送出権または1回送出権を生成させることができ
る。権利は、port_name_space[port_name]->mach_port_
extract_right(メッセージで権利を送る目標と同等)
およびport_name_space[port_name]->mach_port_insert
_right(メッセージで権利を受け取る目標と同等)によ
って強制的にコピーまたは移動することもできる。メッ
セージ動作以外では、ポート権は、ポート名前空間のメ
ンバとしてのみ操作可能である。
【0167】図5は、ポート名前空間または1メッセー
ジの通過に含まれる、一連のポート権を示す図である。
このポート名前空間には、ポート・セットも示されてい
る。
【0168】ポート権は、他のシステム実体が作成され
る時に暗黙のうちに作成される。Mach_reply_portによ
って、1つのポート権が作成される。複数のポート権
は、port_name_space[port_name]->mach_port_allocate
およびport_name_space[port_name]->mach_port_alloca
te_nameによって明示的に作成される。ポート権は、por
t_name_space[port_name]->mach_port_deallocateおよ
びport_name_space[port_name]->mach_port_destroyに
よって破壊される。破壊は、port_name_space[port_nam
e]->mach_port_mod_refsによるなど、ポート名前空間操
作の副産物となる可能性もある。
【0169】受取り権があれば、port_name_space[port
_name]->mach_port_get_attributesを用いていくつかの
状況情報を得ることができる。
【0170】ノーモアセンダー通知 システムは、ポートごとに、送出権と1回送出権の数の
システム全域にわたるカウントを維持する。これには、
宛先のポート権や応答ポート権を含む、メッセージの通
過に含まれる権利が含まれる。ポートの受取り側は、そ
のポートに関する送出権がこれ以上存在せず、そのポー
トがこれ以上値を有することができないことが示される
場合を知りたいと希望する可能性がある。この形式の通
知は、port_name_space[port_name]->mach_port_reques
t_notificationを使用して要求できる。この通知は、ポ
ート名前空間の一部として説明する送出作成回数という
概念に依存する。受取り権が別のタスクに移動すると、
未処理のノーモアセンダー通知要求が取り消され、この
取消しを示すために1回送出通知が送られる。ノーモア
センダー通知が発生するのは、未処理の1回送出権の数
に無関係に、既存の送出権の数が0になる時である。
【0171】1回送出権 1回送出権を用いると、1つのメッセージだけを送るこ
とができる。この権利は、受取り権からのみ生成され
る。1回送出権は、それからメッセージがもたらされる
ことを保証する特性を有する。通常の場合、1回送出権
は、メッセージ内の宛先ポートとして使用することによ
って消費される。この権利は、メッセージが受け取られ
た時に静かに破壊される。1回送出権は、それが消費さ
れる時までは、宛先権として使用されるのでない時に、
タスクからタスクへ移動することができる。メッセージ
を送るのに使用すること以外の方法でこの権利が破壊さ
れる場合、1回送出通知がポートに送られる。1回送出
権を使用しない時にこれを破壊できる方法のほとんど
は、かなり明白である。不明瞭な場合が2つある。・1
回送出権が、ノーセンダー通知の目標として指定され、
ノーセンダー通知が要求されたポートが削除されたか、
受取り権が移動された場合。来るべきノーセンダー通知
が存在しないので、その代わりに1回送出通知が生成さ
れる。・メッセージ受取りを実行する処理の中で、メッ
セージがポートから待ち行列解除された後、タスクに返
される前に、タスクがその受取り権を放棄した場合(下
のメッセージ伝送の詳細を参照されたい)。1回送出権
を介して送られたメッセージとポートの間の関連が失わ
れことを示す1回送出通知が、宛先ポートに送られる。
【0172】ポート名前空間 ポートは命名されないが、ポート権は命名される。ポー
ト権は、ポート名前空間内に含まれることによってのみ
命名可能である。ポートは、ポート名前空間内の指標で
あるポート名によって指定される。各タスクには、1つ
のポート名前空間が関連する。
【0173】ポート名前空間内の1項目は、4つの可能
な値を有することができる。 ・MACH_PORT_NULL 関連するポート権なし。 ・MACH_PORT_DEAD この名前に権利が関連していたが、
権利が参照していたポートが破壊されている。このポー
ト名は、クライアント・タスクが何がおきたかを理解す
る前にこの名前を再利用しないようにするために明示的
な処置がなされない限り、この状態に保たれる。 ・ポート権 ポートに関する、1回送出権、送出権また
は受取り権 ・ポート・セット名 受取り権と同様に振る舞うが、複
数のポートからの受取りが可能な名前。これについては
次の節で説明する。
【0174】ポート名前空間に含まれる別個の権利のそ
れぞれは、必ずしもポート名前空間内で別個の名前を有
するわけではない。1回送出権は、別個の権利のそれぞ
れについて別々の名前を必ず消費する。同一のポートに
対する受取り権と送出権は、結合される。すなわち、ポ
ート名前空間が、あるポートに関する3つの送出権を保
持する場合、このポート名前空間は、これら3つの権利
のすべてについて1つの名前を有する。ポート名は、1
回送出、送出、受取り、ポート・セットおよび破壊され
た名前などの権利のタイプごとに、名前に関連する関連
参照カウントを有する。ポート名前空間が受取り権も保
持する場合、その受取り権は、送出権と同一の名前を有
する。
【0175】名前が破壊されるのは、それに関連するポ
ートが破壊される時である。すなわち、破壊された名前
を保持しているタスクは、その名前の下での受取り権を
保持していることができない。破壊された名前は、その
名前によって以前に保持されていた送出参照の数の非0
参照カウントだけを有する。タスクは、port_name_spac
e[port_name]->mach_port_request_notificationを使用
することによって、その名前のうちのどれかが破壊され
る時に、送られるメッセージによって通知を受けること
ができる。この通知メッセージを受け取ることによっ
て、破壊された名前の参照カウントが増分されて、その
名前を操作するスレッドとの競争が回避される。
【0176】タスクが権利を取得する時には必ず、その
タスクに、上の規則に従うポート名が割り当てられる。
権利を取得すると、その権利のタイプのその名前の参照
カウントが増分される。この参照カウントは、port_nam
e_space[port_name]->mach_port_get_refsによって取得
できる。
【0177】port_name_space[port_name]->mach_port_
destroyを使用することによって、ポート名を明示的に
破壊することができ、すべての参照を除去することがで
きるが、ポート名は、通常はユーザ参照カウントを修正
することによって操作される。port_name_space[port_n
ame]->mach_port_mod_refsによって、ある名前に関連す
る指定された権利タイプの参照カウントが修正される。
port_name_space[port_name]->mach_port_deallocate
は、mach_port_mod_refsに類似しているが、この場合、
カウントが必ず1つだけ減分され、送出参照カウントま
たは1回送出参照カウントだけが減分される。このルー
チンは、名前を修正するための決定が行われた後に破壊
された可能性があるポート名の参照カウントを操作する
のに有用である。実際に権利を移動するmach_msgのオプ
ションによって、また、port_name_space[port_name]->
mach_port_extract_rightによっても、名前の参照カウ
ントを減分することができる。ポート名が解放されるの
は、すべての参照カウントが0になった時である。
【0178】ポート名が解放され、その名前に関する名
前破壊通知が有効である場合に、ポート削除済み通知が
生成される。名前破壊通知が有効である名前は、次の3
つの状態のうちのどれか1つでしかあり得ない。 ・有効な権利に命名している ・MACH_PORT_DEAD、名前が破壊された時に名前破壊通知
が送られている。 ・MACH_PORT_NULL、名前がnullになった時にポート削除
済み通知が送られている。
【0179】名前の型などの名前に関する情報は、port
_name_space[port_name]->mach_port_typeによって得る
ことができる。割当て済みの名前のリストは、port_nam
e_space[port_name]->mach_port_namesを用いて取得す
る。それによって権利がわかる名前は、port_name_spac
e[port_name]->mach_port_renameを用いて変更できる。
受取り権名を与えられれば、port_name_space[port_nam
e]->mach_port_get_attributesを用いて、一部の状況情
報を得ることができる。
【0180】受取り権に命名するポート名は、ノーモア
センダー通知処理に使用される、関連する送出作成カウ
ントを有する。送出作成カウントは、受取り権から送出
権が(mach_msgに対してMACH_MSG_TYPE_MAKE_SEND型の
記述子を指定したポート権であるメッセージ要素を用い
て)作られた回数のカーネルのカウントである。この送
出作成カウントは、ポートが作成される時に0にセット
され、メッセージ内で受取り権が伝送される時には必ず
0にリセットされる。これは、port_name_space[port_n
ame]->mach_port_set_mscountを用いて変更することも
できる。送出作成カウントは、ノーモアセンダー通知メ
ッセージに含まれる。ノーセンダー通知によって、通知
が生成された時点で送出権が存在しないことが示される
ことに留意されたい。それでも未解決の1回送出権が存
在する可能性がある。すべての1回送出権によって、メ
ッセージまたは1回送出通知が保証されるので、タスク
は、簡単に1回送出権の跡を追うことができる。受け取
られたメッセージには、そのメッセージを受け取ったポ
ートから取られた順序番号のスタンプを付ける。ポート
・セットから受け取ったメッセージには、適当なメンバ
・ポートからの順序番号を用いてスタンプを付ける。送
られたメッセージに置かれる順序番号は、上書きされ
る。新たに作成されるポートは、0の順序番号から始ま
り、この順序番号は、そのポートの受取り権が移動され
る時に必ず0にリセットされる。順序番号は、port_nam
e_space[port_name]->mach_port_set_seqnoを用いて明
示的にセットすることもできる。メッセージをポートか
ら待ち行列解除する時に、そのメッセージに、そのポー
トの順序番号を用いてスタンプを付け、その後、そのポ
ートの順序番号を増分する。この待ち行列解除と増分の
動作は、原子的であり、その結果、あるポートからメッ
セージを受け取る複数のスレッドが、msgh_seqnoフィー
ルドを使用してメッセージの元の順序を再構成できるよ
うになっている。
【0181】ポート名前空間は、タスクにバインドされ
るので、それを所有するタスクと共に作成され、破壊さ
れる。
【0182】ポート・セット ポート・セットは、メッセージを受け取る時に単一の単
位として扱うことのできるポートの組である。mach_msg
の受取り動作は、受取り権またはポート・セットのいず
れかに命名するポート名に対して許可される。ポート・
セットには、受取り権の集合が含まれる。受取り動作が
ポート・セットに対して行われる時、メッセージは、そ
のセット内のポートのうちの1つから無作為に受け取ら
れる。ポート・セットに対するメッセージの配布の順序
は、不確定であり、次の2つの警告を伴う実施の対象と
なる。 1)ポート・セットのメンバは、資源枯渇の影響を受け
てはならない。 2)同一のポートに対する他のメッセージに関するメッ
セージの到着の順序は、保存される。
【0183】セット内の受取り権のそれぞれが、それ自
体の名前を有し、セットも、それ自体の名前を有する。
ポート・セットに対する受取りによって、そのメッセー
ジを提供したポートの受取り権の名前が報告される。受
取り権は、1つのポートセットだけに属することができ
る。タスクは、ポート・セットに含まれる受取り権から
直接受け取ることができない。ポート・セットは、port
_name_space[port_name]->mach_port_allocateまたはpo
rt_name_space[port_name]->mach_port_allocate_name
を用いて作成される。ポート・セットは、port_name_sp
ace[port_name]->mach_port_destroyまたはport_name_s
pace[port_name]->mach_port_deallocateによって破壊
される。
【0184】ポート・セットの操作は、port_name_spac
e[port_name]->mach_port_move_memberを用いて行われ
る。この呼出しでは、セットにメンバを追加するか、セ
ットからメンバを取り除くか、あるセットから別のセッ
トへメンバを移動することができる。ポート・セットの
メンバシップは、port_name_space[port_name]->mach_p
ort_get_set_statusを用いて見つけることができる。
【0185】メッセージ伝送 システム呼出しmach_msgによって、マイクロカーネル・
メッセージの送受が行われる。2つのタスクの間で実際
にメッセージを転送するためには、送出側が、送出オプ
ションと正しい目的ポートを用いてmach_msg呼出しを行
わなければならない。受取り側は、受取りオプションを
用いてmach_msg呼出しを行い、目的ポートでの読取りに
着手しなければならない。この2つの呼出しの順序は、
重要ではない。
【0186】送出動作によって、メッセージがポートに
待ち行列化される。このメッセージには、呼出し側のデ
ータのコピーが含まれる。呼出し側は、送出動作からリ
ターンした後に、送られたデータに影響を及ぼすことな
くメッセージ・バッファやアウトオブライン領域を自由
に修正できる。メッセージ内でアウトオブラインとして
指定されたデータは、送出側のオプションとカーネルに
よる機構の選択とに応じて、仮想コピーまたは物理コピ
ーとして渡される。カーネルは、領域を定義するページ
の組の仮想メモリイメージを構築する。「アウトオブラ
イン」ポート配列は、物理的にコピーされ、宛先空間に
適したポート名に変換される。カーネルが仮想コピーを
構築する場合、カーネルは、仮想コピー内の最初のペー
ジのデータに先行する部分と、仮想コピー内の最後のペ
ージのデータに続く部分を0クリアする。
【0187】呼出し側は、下記のいずれかが発生しない
限り、メッセージを待ち行列化できるまでブロックされ
る。 ・メッセージが1回送出権に送られる。これらのメッセ
ージは、必ず強制的に待ち行列化される。 ・mach_msg動作が打ち切られた(thread_abort)。デフ
ォルトでは、mach_msgライブラリ・ルーチンが、中断さ
れた動作を再試行する。 ・送出動作が、そのタイムアウト値を超過した。 ・ポートが破壊された。
【0188】メッセージの送出は、2ステップの処理で
ある。第1のステップには、メッセージのカーネル・コ
ピーの構築が含まれる。第2のステップには、メッセー
ジの待ち行列化が含まれる。無効なポート権やデータ・
アドレスなど、第1ステップ中に障害が発生すると、送
られるメッセージがエラー・リターンを伴う障害を発生
するが、悪影響はない。第2ステップ中の障害も、送出
タイムアウト値を超過した時や、割込み(thread_abor
t)が発生した時に発生する可能性がある。これらの障
害も、送出に障害を発生させるが、これらの状況では、
カーネルが、擬似受取り動作を用いて呼出し側にメッセ
ージ内容を返そうと試みる。この擬似読取り動作によっ
て、メッセージ内だけに存在するポート権またはメモリ
(たとえば、メッセージに移動された受取り権や、割振
り解除フラグと共に送られたアウトオブライン・メモ
リ)の消失が防止される。
【0189】擬似受取り動作は、通常の受取り動作に非
常に類似している。擬似受取りによって、メッセージ・
ヘッダ内のポート権が、メッセージ本体に含まれるかの
ように処理される。擬似受取りの後、そのメッセージ
は、再送出の準備ができている。メッセージを再送出し
ない場合、アウトオブライン・メモリ範囲が移動されて
いる可能性があり、一部のポート権が名前を変更されて
いる可能性があることに留意されたい。
【0190】受取り動作によって、メッセージがポート
から待ち行列解除される。受取り側のタスクは、そのメ
ッセージに含まれるポート権とアウトオブライン・メモ
リ範囲を取得する。受取り動作の呼出し側は、ヘッダと
本体がコピーされるバッファを供給しなければならな
い。受け取られるメッセージのフォーマットは、送出さ
れた時と同一である。メッセージがバッファに収まらな
い場合、そのメッセージは破壊される。オプション(MA
CH_RCV_LARGE)を使用すると、呼出し側が、必要なバッ
ファ・サイズと共にエラーを受け取ることができ、その
結果、適切なサイズのバッファを用いてもう一度受取り
動作を試みることができるようになる。
【0191】受け取ったメッセージには、ポート権とア
ウトオブライン・メモリが含まれる可能性がある。受け
取ったポート権とメモリは、何らかの形で消費するか割
振り解除する必要がある。資源不足のためにポート権ま
たはアウトオブライン・メモリを受け取れない場合、そ
の実体が破壊される。ポート権の受取りは、ポート名前
空間の節で説明した他の名前によるポート権の挿入と同
一の規則に従う。ポート権記述子によって、受け取った
権利のタイプが示される。
【0192】伝送されるアウトオブライン領域のそれぞ
れについて、カーネルは、受け取られるメッセージ内の
記述子を返し、この記述子によって、そのメモリが突き
止められ、物理コピーと仮想コピーのどちらの送出をカ
ーネルが選択した(または送出側によって指示された)
かが示される。物理コピーを送出することによって、決
定的な挙動が保証される。デフォルトのメモリ・マネー
ジャによって二重書きされるにもかかわらず、カーネル
の仮想コピー最適化で、既にメモリ内にあるページ・イ
メージが使用されるか、送出側のメモリを二重書きした
メモリ・マネージャからページ・イメージが取り出され
る可能性がある。これは、受取り側タスクを任意のメモ
リ・マネージャに従属させる可能性があるが、これによ
って、大量のメモリの直接コピーに対する大幅な性能改
善をもたらすことができる。仮想コピーにとって最適の
事例は、送出側が割振り解除オプションを使用した時で
ある。追加情報については、仮想メモリ管理の節を参照
されたい。
【0193】アウトオブライン・メモリ領域またはポー
ト配列メモリ領域の受取りには、2つのオプションがあ
る。デフォルトのオプション1では、受け取られる領域
が、vm_allocateによるものであるかのように、受取り
側のアドレス空間内で一時メモリとして動的に割り振ら
れる。カーネルが仮想コピーを伝送した場合、受け取ら
れるデータは、送出側のページ内境界合せと同一の境界
合せで、割り振られた空間内に現れる。これ以外のどの
場合でも、割り振られたデータは、ページ境界の先頭か
ら始まる。どのような状況でも、このオプションを用い
たメッセージの受取りは、仮想コピー自体の不注意な参
照によって受取り側を機能停止させることはない。
【0194】オプション2では、代替アウトオブライン
受取りモードによって、アウトオブライン領域が、vm_w
riteによるものであるかのように、指定された区域内の
バイトに上書きされる。このアウトオブライン領域が、
指定された区域に収まらない場合、受取り側はエラーに
遭遇する。さまざまな状況の下で、データ伝送とデータ
境界合わせの方法に応じて、このオプションでは、ペー
ジ操作が実行されるか実際にデータがコピーされる可能
性がある。この動作は、おそらくは、仮想コピーを二重
書きするメモリ・マネージャと相互作用し、独断的に受
取り側を機能停止させる可能性がある。
【0195】この2つの受取りモードの選択は、MACH_R
CV_OVERWRITEオプションに依存する。これがセットされ
ていない時には、受け取られる領域のすべてが動的に割
り振られる。セットされている場合には、受取りバッフ
ァが、送られたメッセージ内の記述子リストと同一形式
の「散乱」記述子リストを記述するものとみなされる。
カーネルは、このリストを走査して、受け取った領域の
それぞれに対して何を行うかを決定する。送られた領域
の数を扱うのに十分な記述子が供給されていない場合、
追加領域を動的に割り振る。カーネルは、アウトオブラ
イン記述子のそれぞれを調べて、対応する領域の後処理
を決定する。仮想コピーの「送出」オプションは、動的
割振りを暗示し、物理コピーのオプションは、上書きさ
れる領域を突き止めるのに使用される記述子のアドレス
・フィールドとサイズ・フィールドを用いる上書きを暗
示する。サイズが不十分であると、エラー・リターンが
発生する。
【0196】受取り動作も、2ステップの処理すなわ
ち、メッセージの待ち行列解除と、その後の受取り側で
のコピーの作成である。第1のステップは、指定された
受取りタイムアウト値を超過したか、受取りが打ち切ら
れた(thread_abort)ためにエラーになる可能性があ
る。これらの状況は、受け取られたはずのメッセージに
は影響しない。ほとんどの障害は、第2ステップ中に発
生し、これによってメッセージが破壊される。
【0197】mach_msg呼出しの結果として要求すること
ができる通知がある。この通知は、mach_msgによって生
成されるのではないが、MACH_RCV_NOTIFYオプションに
よって要求される。このオプションを指定すると、受け
取った応答ポート権が、mach_port_request_notificati
onによるものであるかのように、それに関する名前破壊
通知を自動的に要求されるようになる。このオプション
は、特定の種類のリモート・プロシージャ・コール(R
PC)相互作用のための最適化である。応答ポート名に
対する名前破壊通知を用いると、そのメッセージの受取
り側が、要求元クライアントの破壊について時宜を得た
形で通知を受けられるようになる。しかし、応答権は、
通常は1回送出権であるから、応答を送ることによっ
て、権利が破壊され、その代わりにポート削除通知が生
成される。この通知を取り消すための最適化は、mach_m
sgに対するMACH_SEND_CANCELオプションによって提供さ
れる。
【0198】メッセージ動作は、メッセージ・ヘッダ内
のポート権の操作に関しては原子的である。
【0199】第5節 仮想メモリ管理 マイクロカーネルの仮想メモリ設計では、仮想メモリ・
システムが、機械依存部分と機械独立部分の層に分けら
れる。機械依存部分は、仮想メモリのページに対するア
クセス権の有効化、無効化およびセットのための単純な
インターフェースを提供し、これによって、ハードウェ
ア・アドレス・マップを維持する。機械独立部分は、論
理アドレス・マップ(仮想アドレス空間のマッピン
グ)、このマップ内のメモリ範囲、および、外部メモリ
管理インターフェースを介するこれらの範囲に関する補
助記憶(メモリ・オブジェクト)へのインターフェース
のサポートを提供する。
【0200】仮想メモリ・システムは、適度なプロセッ
サ数の均一メモリ・アクセス多重プロセッサ用に設計さ
れている。不均一メモリ・アクセスを提供するアーキテ
クチャまたは遠隔メモリ・アクセスを提供しないアーキ
テクチャのサポートは、現在研究中である。
【0201】高性能が、マイクロカーネル仮想メモリ設
計の特徴である。このかなりの部分が、大きく疎なアド
レス空間、共用メモリおよび仮想コピー・メモリ最適化
の効率的なサポートからもたらされる。
【0202】最後に、この仮想メモリ・システムを用い
ると、クライアントが、メモリ範囲のために補助記憶を
提供でき、これによって、そのような範囲に適用される
セマンティックスを定義できるようになる。
【0203】仮想アドレス空間 仮想アドレス空間によって、その仮想アドレス空間を所
有するタスク内で実行中のスレッドが参照を許可される
有効な仮想アドレスの組が定義される。仮想アドレス空
間は、それを所有するタスクによって命名される。
【0204】仮想アドレス空間は、疎なメモリ・ページ
の指標付きの組からなる。1ページのサイズは、host_n
ame->host_page_sizeを用いて見つけることができる。
カーネルは、その内部で、すべてが同一の属性(二重書
きされるアブストラクト・メモリ・オブジェクト、継
承、保護その他の特性など)を有するページの仮想的に
連続した組を、メモリ領域と呼ばれる内部実体にグルー
プ化する。メモリ領域は、それを含むアドレス空間内の
仮想アドレス範囲のみによって命名される。さまざまな
動作およびシステム機構が、メモリ領域のIDに敏感で
あるが、ほとんどのユーザ・アクセスは、それ程影響を
受けず、メモリ領域を自由にまたぐことができる。カー
ネルは、適切と思われるならばメモリ領域を自由に分
割、併合する。クライアントから見たアドレス空間は、
ページの組として見える。メモリ領域に対して敏感な唯
一の呼出しが、virtual_address_space[memory_addres
s]->vm_regionである。この呼出しは、所与のアドレス
付近の領域を突き止め、そのメモリ領域に関する情報を
返す。メモリ領域は、純粋にカーネル内部の概念である
が、vm_map呼出しによって影響を受け、また、保護属性
と継承属性の変更によって影響を受ける。したがって、
この呼出しの結果は、呼出しごとに変化する可能性があ
る。
【0205】仮想アドレス空間は、タスクが作成される
時に作成され、タスクが破壊される時に破壊される。新
タスクが作成される時には、継承を無視すると、そのア
ドレス空間は空であり、タスクがスレッドを実行にセッ
トできるようになる前に、仮想アドレス空間の操作を介
してアドレス空間を作成しなければならない。しかし、
task_create呼出しのオプションを用いると、新タスク
が、この作成呼出しに使用されるプロトタイプ・タスク
からメモリの範囲を継承できるようになる。カーネル関
数virtual_address_space[memory_range]->vm_inherit
によって、メモリ範囲の継承特性を変更し、継承を許可
または禁止することができる。可能な継承は次の通りで
ある。 ・VM_INHERIT_NONE 新タスク内の範囲は未定義のまま
残される。 ・VM_INHERIT_COPY タスク作成時に、コピー最適化を
用いて新タスクに範囲がコピーされる。 ・VM_INHERIT_SHARE 新タスクと旧タスクがメモリ範囲
へのアクセス権を共用する。
【0206】メモリの範囲に、メモリ・マネージャの処
置を介して別個のセマンティックスを関連付けることが
できる。新しいメモリ範囲を仮想アドレス空間内で確立
する時には、おそらくはデフォルトで、そのメモリ範囲
のセマンティックスを表すアブストラクト・メモリ・オ
ブジェクトが指定される。このアブストラクト・メモリ
・オブジェクトは、そのセマンティックスを提供するタ
スク(メモリ・マネージャ)と関連する。タスクがメモ
リ範囲に関連するセマンティックスに直接影響を及ぼす
ためのカーネル呼出しは存在しない。タスクは、所望の
機能性を提供するメモリ・マネージャを選択することに
よるか、処置を指示するメッセージをメモリ・マネージ
ャに直接送ることによってのみ、このような制御を得
る。
【0207】virtual_address_space[memory_range]->v
m_map 仮想メモリの新しい範囲を確立する。この呼出
しによって、配置、サイズ、保護、継承、オブジェクト
・オフセットなどのメモリ範囲の詳細を指定する。この
呼出しに対する最も重要なパラメータは、その範囲のた
めの記憶域を二重書きするアブストラクト・メモリ・モ
デルを暗示するメモリ・オブジェクト・レプリゼンタテ
ィブ・ポートと、メモリ・オブジェクトに対して許可さ
れるアクセス・モードである。nullのポートは、システ
ムのデフォルト・メモリ・マネージャを使用することを
指定する。デフォルト・メモリ・マネージャは、システ
ムのページング空間に対してページングされ、システム
・ブート・ロードの間に持続しない、当初は0で満たさ
れる記憶域を提供する。
【0208】virtual_address_space[memory_range]->v
m_allocate デフォルト・システム・マネージャを所望
する時の、単純化された形のvm_map呼出しである。
【0209】virtual_address_space[memory_range]->v
m_deallocate メモリ範囲を無効化する。
【0210】virtual_address_space[memory_range]->v
m_remap 目標タスクのアドレス空間に、task->taste_c
reateを介して作成されたかのようにメモリ範囲を作成
するが、そのプロトタイプ・タスクは、ソース・タスク
であり、ソース・メモリ範囲は、VM_INHERIT_SHARE特性
を有する。
【0211】virtual_address_space[memory_range]->v
m_protect あるメモリ範囲に対して許可されるアクセ
ス権をセットする。各メモリ範囲は、現保護マスクと最
大保護マスクを有する。ある範囲のメモリ・マネージャ
は、メモリ・オブジェクト・レプリゼンタティブを介し
てページの範囲の全ユーザに関して最大保護を指定する
ことができる。その後、各タスクは、許される許可をさ
らに制限するためのそれ自体の私用最大保護値ならび
に、現保護マスクを有する。
【0212】virtual_address_space[memory_range]->v
m_copy 仮想アドレス空間内のある場所から別の場所へ
メモリ範囲をコピーする。
【0213】virtual_address_space[memory_range]->v
m_read メモリ範囲をコピー・アウトする。
【0214】virtual_address_space[memory_range]->v
m_write メモリ範囲をコピー・インする。
【0215】virtual_address_space[memory_range]->v
m_msync 仮想メモリの範囲の補助記憶(そのメモリ・
マネージャ)へのフラッシュまたはクリーンを強制す
る。
【0216】virtual_address_space[memory_range]->v
m_machine_attribute メモリ範囲に対して、計算機固
有のハードウェア特性をセットする。
【0217】virtual_address_space[memory_range]->v
m_reserve メモリの範囲を予約し、これによって、vm_
allocate、vm_mapまたはアウトオブライン・メモリ受取
りから生じる範囲内のランダム割振りを防止する。vm_d
eallocateは、範囲を予約解除しない。
【0218】virtual_address_space[memory_range]->v
m_unreserve メモリの範囲を予約解除する。
【0219】virtual_address_space[memory_range]->v
m_wire メモリの範囲のページ可能性を指定する。ワイ
ヤリングによって、メモリの範囲が存在し、常駐するこ
とが強制される。ワイヤリングされたメモリは、そのタ
スクのワイヤリング済みカーネル・メモリ限界に対して
カウントされる。カーネルは、領域がワイヤリングされ
る回数のカウントを維持し、そのカウントが0に戻らな
い限りワイヤリングを解除しない。
【0220】virtual_address_space[memory_range]->v
m_behavior_set カーネルのページ交換アルゴリズムを
案内するヒントとして、通常、ランダム、順次、逆順次
など、範囲の期待される使用パターンを指定する。
【0221】vm_allocate()、vm_map()またはvm_rema
p()を、VM_ALLOCATE_ANYWHEREフラグ付きで、0の入力
目標アドレスを用いて使用する時に、有効メモリ範囲が
アドレス0に割り振られる可能性がある。一部のプログ
ラム、特にC言語に基づくプログラムは、値が0のメモ
リ・ポインタをNULLポインタとみなし、有効なメモ
リ・バイトを指すポインタでないとみなすので、これら
のプログラムは、メモリがアドレス0に割り振られた場
合に障害を発生する。パーソナリティ・サーバおよび他
のタスクは、各タスクの第1ページが予約されているこ
とを確認することによって、この問題を回避できる。
【0222】メモリ・オブジェクト マイクロカーネルを用いると、ユーザ・モード・タスク
が、仮想アドレス空間の部分を参照するという動作に関
連するセマンティックスを提供できるようになる。これ
は、アブストラクト・メモリ・オブジェクトによって二
重書きされるメモリ範囲の非常駐状態を表すアブストラ
クト・メモリ・オブジェクトの指定を可能にすることに
よって行われる。メモリ・オブジェクトを実装するタス
クは、そのメモリ・オブジェクトに命名するポートに送
られたメッセージに応答する。このタスクを、メモリ・
マネージャと呼ぶ。
【0223】基本操作 ユーザ・モード・タスクによる仮想アドレス空間の操作
は、下記の基本形式をとる。 ・タスクが、範囲を二重書きするメモリ・オブジェクト
に命名するためのメモリ・オブジェクト・レプリゼンタ
ティブ・ポートを指定して、新しいメモリ範囲を確立す
る(virtual_address_space[memory_range]->vm_ma
p)。 ・タスクが、通常はこのメモリ範囲の一部を変更するこ
とによって、その部分を参照しようと試みる。その部分
は、まだメモリ内に存在していないので、参照を行うタ
スクは、ページ不在障害を受け取る。カーネルが、その
範囲のアブストラクト・メモリ・オブジェクトに、存在
していないデータを要求するメッセージを送る。アブス
トラクト・メモリ・オブジェクトからの応答によって、
要求元タスクのページ障害が解決される。 ・最終的に、おそらくはクライアント・タスクによって
修正された値を有するメモリ範囲の常駐ページが、メモ
リから追い出される。ページは、後処理のため、その範
囲のアブストラクト・メモリ・オブジェクトへのメッセ
ージで送られる。ページャは、カーネルに、ダーティ・
ページだけを返すように命じるか、クリーン・ページも
返すように命じることができる。 ・クライアント・タスクが、virtual_address_space[me
mory_range]->vm_deallocateを使用して、メモリ範囲を
確立解除する。このメモリ・オブジェクトのすべてのマ
ッピングが消滅した時に、このアブストラクト・メモリ
・オブジェクトが終了する。
【0224】カーネルは、さまざまなメモリ・オブジェ
クトの内容のための直接アクセス可能キャッシュとし
て、メイン・メモリを使用するものとみなされなければ
ならない。あるメモリ・オブジェクトの常駐ページを含
むキャッシュの部分を、メモリ・キャッシュ・オブジェ
クトと呼ぶ。カーネルは、ふさわしいと思われる形でこ
のキャッシュを満たし、フラッシュして、このキャッシ
ュを維持するためにさまざまなメモリ・マネージャと共
にダイアログにかかわる。このダイアログは、一般に、
非同期メッセージからなる。というのは、メモリ・マネ
ージャによってカーネルを機能停止させることができ
ず、メモリ・マネージャは、その動作の並行性を最大に
することを望むからである。カーネルのメッセージは、
アブストラクト・メモリ・オブジェクト・ポートを介し
てメモリ・マネージャに送られる。カーネルへのメッセ
ージは、カーネルのメモリ・キャッシュ制御ポートを介
して送られる。カーネルによって送られるメッセージ
は、サーバ・インターフェースというラベルを付けられ
たルーチンを使用して送られる。メモリ・マネージャに
よって送られるメッセージは、通常メッセージ関数とい
うラベルを付けられたルーチンを使用して送られる。
【0225】クライアントのvm_map呼出しで指定された
メモリ・オブジェクト・レプリゼンタティブ・ポートに
よって、アブストラクト・メモリ・オブジェクト・ポー
トが暗示される。このポートは、そのアブストラクト・
メモリ・オブジェクトを実装するメモリ・マネージャ・
タスクに命名する。各アブストラクト・メモリ・オブジ
ェクトは、そのメモリ・オブジェクトの常駐ページのキ
ャッシュを表す関連常駐カーネル・メモリ・キャッシュ
・オブジェクトを有する。メモリ・キャッシュ・オブジ
ェクトは、メモリ・マネージャがこのメモリ・キャッシ
ュ・オブジェクトを制御し、オブジェクトに代わってカ
ーネル要求に応答できるようにメモリ・マネージャに供
給される関連制御ポートを有する。カーネルは、メモリ
・キャッシュ・オブジェクトを参照するためにクライア
ント・タスクが使用するための、メモリ・キャッシュ・
オブジェクトの名前ポートも生成する。名前ポートは、
virtual_address_space[memory_address]->vm_regionに
よって返される。アブストラクト・メモリ・オブジェク
トが、複数のホスト上のタスクによってマッピングされ
る場合、各ホスト上に、メモリ・キャッシュ・オブジェ
クト用の1つの制御ポートと1つの名前ポートが存在す
る。
【0226】メモリ・キャッシュ・オブジェクト内の各
ページは、アブストラクト・メモリ・オブジェクト内の
オフセットを表す。メモリ・オブジェクトのオフセット
は、vm_map呼出しでクライアントによって指定されたオ
ブジェクト・オフセットに、ページ長の整数倍を加えた
値である。クライアントは、vm_mapに任意のオフセット
を指定できることに留意されたい。したがって、1つの
メモリ・オブジェクトが、クライアントによって指定さ
れた異なるオフセット値のために、メモリ内にそのデー
タの複数のコピーを有する可能性がある。しかし、カー
ネルは、これらのコピーの間のデータ一貫性を維持しな
い。
【0227】図6は、クライアントから可視の仮想メモ
リ構造を示す図である。3つのメモリ範囲があり、その
うちの2つは、同一の二重書きアブストラクト・メモリ
・オブジェクトを有するが、おそらくは継承属性または
保護属性が異なる。メモリ・キャッシュ/アブストラク
ト・メモリ・オブジェクト対のうちの1つを、読取りア
クセスと読み書きアクセスを表す2つのメモリ・オブジ
ェクト・レプリゼンタティブと、メモリ・マネージャ・
タスクと共に詳細に示す。予約されているが未割り振り
の領域は、図示しない。その領域は、予約フラグと継承
属性だけを用いてマークされるはずである。他の属性は
適用されない。
【0228】メモリ管理の初期設定 メモリ・オブジェクト初期設定の結果、メモリ・マネー
ジャのアブストラクト・メモリ・オブジェクト(補助記
憶)が、カーネルのメモリ・キャッシュ・オブジェクト
(メモリ・イメージ)にバインドされる。メモリ・マネ
ージャは、カーネルが後続の操作メッセージを送るのに
使用するアブストラクト・メモリ・オブジェクト・ポー
トをカーネルに通信する。カーネルは、メモリ・マネー
ジャに、マネージャが後続の操作メッセージを送るのに
使用するメモリ・キャッシュ制御ポートを通信する。
【0229】アブストラクト・メモリ・オブジェクト・
ポートは、特別に設計されたプロトコルに従ってカーネ
ルがメッセージを送るポートである。クライアントがこ
のポートへのアクセス権を有することは有害である可能
性がある。というのは、メモリ・マネージャを混乱させ
る可能性があるからである。たとえば、クライアント
は、アブストラクト・メモリ・オブジェクト・ポートを
介してメッセージの無効なシーケンスを送る可能性があ
るが、このアブストラクト・メモリ・オブジェクト・ポ
ートに対して、メモリ・マネージャは十分な保護を有し
ない。この理由と、メモリ・オブジェクトへのアクセス
権を制御するために、メモリ・マネージャは、通常は、
カーネル以外にはアブストラクト・メモリ・オブジェク
ト・ポートを配布しない。その代わりに、クライアント
には、メモリ・オブジェクト・レプリゼンタティブ・ポ
ートへの送出権が与えられ、これによって、関連するア
ブストラクト・メモリ・オブジェクト・ポートと、関連
するメモリ・オブジェクトへの許可されるアクセス・モ
ードの関連する組が暗示される。
【0230】アブストラクト・メモリ・オブジェクト・
ポートとメモリ・オブジェクト・レプリゼンタティブ・
ポートのどちらもが、通常のマイクロカーネル・ポート
である。すなわち、これらのポートの受取り側は、カー
ネルではなくマイクロカーネル・タスクである。
【0231】クライアントが、メモリ・オブジェクト・
レプリゼンタティブ・ポートによって表されるオブジェ
クトのIDをまだ知らないカーネルに、vm_mapを介して
メモリ・オブジェクト・レプリゼンタティブ・ポートを
指定する時には、カーネルが、その代理ポートを使用し
て、特殊なダイアログにかかわる。カーネルが、関連す
るオブジェクトのIDを知らない場合、このvm_map呼出
しを、メモリ・マネージャとの対話なしで直接に実行す
ることができる。vm_map呼出しは、カーネルに、メモリ
・キャッシュ制御ポートへの送出権を含むmemory_objec
t_representative(host_name)->memory_object_notify
メッセージを送らせる。その後、このメモリ・キャッシ
ュ制御ポートに、デフォルトの属性が割り当てられる。
memory_object_establishメッセージが送られるまで
は、このポートが完全に確立されたとみなしてはなら
ず、その属性が正しくセットされているとみなしてはな
らない。
【0232】vm_mapの結果としてカーネルによるのでは
なく、代理ポートを保持するクライアントによって、誤
ったmemory_object_notifyメッセージが生成されている
可能性があるので、メモリ・マネージャは、このメッセ
ージに直接には応答せず、その代わりに、通知メッセー
ジで供給されたホスト名前ポートに応答メッセージを送
る。メモリ・マネージャは、mach_host_selfを検査する
か、名前サーバに問い合わせるかのいずれかによって、
これがホスト名前ポートであるかどうかを検証できる。
ホスト名前ポートが有効であることを検証した後に、メ
モリ・マネージャは、アブストラクト・メモリ・オブジ
ェクト・ポートおよびオブジェクト属性ならびに、この
代理を使用してマッピングを試みるタスクが有する必要
のある、メモリ・オブジェクト・レプリゼンタティブに
よって許可されるアクセス権と制限付きのIDが存在す
るならばそれらを指定する、host_name(memory_cache_c
ontrol)->memory_object_establishを用いて応答する。
メモリ・オブジェクト・レプリゼンタティブ・ポートを
アブストラクト・メモリ・オブジェクト・ポートとして
指定することは許容可能であるが、これによって、マネ
ージャに関する潜在的な脆弱さが導入される。オブジェ
クト属性を用いると、オブジェクト・キャッシュ属性お
よび下で説明するコピー戦略ならびに他の性能属性およ
び特殊属性の指定が可能になる。これらの属性は、後
程、memory_cache_control->memory_object_change_att
ributesを用いて変更でき、memory_cache_control->mem
ory_object_get_attributesを用いて調べることができ
る。
【0233】マネージャには、このメッセージ内のメモ
リ・キャッシュ制御ポートが含まれることに留意された
い。制御ポートは、代理ポートのこの使用のために特別
に作成されたので、他のタスクに与えられてはおらず、
したがって、マネージャによって、マネージャ自体をカ
ーネルに認証させる、すなわち、マネージャがmemory_o
bject_notifyメッセージの受取り側であることを検証す
るのに使用することができる。クライアントが元のmemo
ry_object_notifyメッセージを偽造したので、カーネル
がmemory_object_establishメッセージを期待していな
かった場合には、カーネルは、abstract_memory_object
->memory_object_rejectedを用いて応答する。これによ
って、マネージャに、マネージャがメモリ・キャッシュ
制御ポートとして識別したポートが実際にはそうでない
ことが知らされる。メモリ・マネージャは、どの情報も
クライアントに漏らさない。マネージャは、単に、それ
を予期していなかったか受け入れなかったカーネルに余
分なメッセージを送るだけである。
【0234】ホスト名前ポートとメモリ・キャッシュ制
御ポートを含むシーケンスによって、カーネルにメモリ
・マネージャが認証され、メモリ・マネージャにカーネ
ルが認証される。これは、メモリ・マネージャの、メモ
リ・マネージャに与えられた名前ポートを認証する能力
に依存する。カーネルからマネージャへのダイアログに
干渉するために、仲介物が、マネジャに、ホスト名前ポ
ートではなく、他の名前ポートを提示するはずである。
これが機能するためには、マネージャが、与えられた名
前ポートを認証しないか、マネージャの使用する認証サ
ービスが、マネージャに与えられた名前ポートの信憑性
を保証しないかのいずれかでなければならない。前のシ
ーケンスは、まだカーネルに知られていないメモリ・オ
ブジェクトの初期設定に関する。これは、カーネルに、
vm_mapを介して、カーネルが知らないメモリ・オブジェ
クト・レプリゼンタティブ・ポートが提示された時に必
ず呼び出される。この代理の下にあるメモリ・オブジェ
クトは、カーネルに知られている可能性がある。すなわ
ち、カーネルは、その関連を知らないだけであり、した
がって、カーネルは、この代理が新メモリ・オブジェク
トの初期設定を暗示すると仮定しなければならない。メ
モリ・オブジェクトを初期設定する場合、同一のカーネ
ルからの後続のmemory_object_notifyメッセージのため
に、メモリ・マネージャは、host_name(memory_cache_c
ontrol)->memory object representativeを用いて応答
する。この呼出しは、アブストラクト・メモリ・オブジ
ェクト・ポートおよびこの代理に関して許可されるアク
セス・モードならびに、この代理を使用してマッピング
を試みるタスクが有する必要のある制限されたIDがあ
るならばその制限されたIDを供給するだけである。カ
ーネルは、このメッセージを受け取る時に、供給された
冗長なメモリ・キャッシュ制御ポートを破壊する。メモ
リ・オブジェクト・レプリゼンタティブ用のメッセージ
・インターフェース・ジェネレータ(MIG)スタブ
が、最適化として送出権を移動し、その結果、マネージ
ャは、明示的にその権利を破棄する必要がなくなる。
【0235】memory-object-representativeメッセージ
が、メモリ・オブジェクトの終了と競合する可能性があ
る。これが発生するのは、マネージャがそのメモリ・オ
ブジェクトを初期設定しなければならないと信じている
が、もうその必要がない時である。このような場合に
は、カーネルが、メモリ・オブジェクト・レプリゼンタ
ティブ・メッセージを破棄する。というのは、そのオブ
ジェクトが、カーネルの視点からは初期設定されていな
いからである。マネージャは、アブストラクト・メモリ
・オブジェクト・ポート上のmemory_object_terminate
メッセージの存在によって、この状況を検出する。カー
ネルは、メモリ・オブジェクト・レプリゼンタティブ・
メッセージを破棄する時に、memory_object_notifyメッ
セージを再送出する。マネージャは、memory_object_es
tablishを用いてもう一度応答しなければならない。
【0236】一般的な規則として、メモリ・オブジェク
トが未初期設定であることをマネージャが知っている
(すなわち、オブジェクトが一度も初期設定されていな
いか、マネージャがmemory_object_terminateを見た)
のでない限り、マネージャは、memory_object_notifyに
対してメモリ・オブジェクト・レプリゼンタティブを用
いて応答しなければならない。クライアントがmemory_o
bject_notifyメッセージを偽造したのでカーネルがメモ
リ・オブジェクト・レプリゼンタティブ・メッセージを
期待していない場合、カーネルは、単にこれを無視す
る。マネージャがこのメッセージを送ったという事実
は、そのメモリ・オブジェクトが初期設定されたとマネ
ージャが信じていることを意味する。マネージャが応答
したmemory_object_notifyメッセージは、マネージャに
情報を提供しなかった。カーネルは、代理とアブストラ
クト・オブジェクトの関連をいつでも忘れることができ
る。カーネルがメモリ・オブジェクト・レプリゼンタテ
ィブ・メッセージを無視する時には、カーネルがそれを
受け入れ、その後即座にその関連を忘れた場合と同一で
ある。このシーケンスが完了した後に、メモリ・マネー
ジャは、このメモリ・オブジェクトの代わりに要求に応
答する準備を整えなければならない。
【0237】メモリ・キャッシュ・オブジェクトも、vm
_regionを介してクライアントに供給される名前ポート
を有する。マネージャは、memory_object_get_nameを用
いてこのポートを取得できる。
【0238】基本的なページ操作 カーネルは、abstract_memory_object->memory_object_
data_requestを用いて、メモリに関するデータを要求す
る。通常、カーネルは、1時に1ページだけを要求し、
供給する。カーネルは、メモリ領域のセット挙動によっ
て変化する量の複数のページに1時に作用する権利を保
留する。メモリ・マネージャは、各転送(データ返し)
に好ましいページ数を指定する、メモリ・オブジェクト
のクラスタ・サイズをセットできる。1時に何ページが
実際に転送されるかは、さまざまな要因に影響される。
【0239】メモリ・マネージャは、memory_cache_con
trol->memory_object_data_supplyを用いて、要求され
たデータを供給する。この呼出しでは、データに関する
最小限のアクセス保護も指定される。メモリ・マネージ
ャは、エラーのためにデータを供給できない場合に、me
mory_cache_control->memory_object_data_errorを用い
て応答する。この場合、カーネルは、このデータを待っ
ているすべてのスレッドに、メモリ障害例外をとらせ
る。メモリ・マネージャは、この代わりに、memory_cac
he_control->memory_object_data_unavailableを用いて
応答することができる。この場合、カーネルは、存在し
ていないデータについて0で満たされたページを供給す
る。メモリ・マネージャは、memory_cache_control->me
mory_object_data_supplyを使用して、要求されたか否
かにかかわらず、カーネルによってキャッシュされない
ページを提供することができる。
【0240】カーネルが、メモリ・オブジェクトに属す
るメモリ・ページのいくつかをフラッシュすると決定し
た時には、修正されたページが、abstract_memory_obje
ct->memory_object_data_returnを介して、メモリ・マ
ネージャへのメッセージ内でアウトオブライン・データ
として送られる。この処理では、カーネルがページの仮
想コピーを送り、効果的に、物理メモリ・ページを、メ
モリ・オブジェクトに関連する常駐ページから、デフォ
ルト・メモリ管理される一時オブジェクトに関連するペ
ージに変換する。この方法では、メモリ・マネージャが
これらのページを適度な時間内に宛先に移動できない場
合に、カーネルが、デフォルト・メモリ・マネージャを
使用してこれらの一時ページを追い出すことができる。
デフォルト・メモリ・マネージャは、これらをページン
グ記憶域にページングするが、まだメモリ・マネージャ
がこれらをアクセスすることを許可する。通常、メモリ
・マネージャは、受け取ったアウトオブライン・メモリ
を扱うのと同様に、これらのページを装置またはファイ
ル・システムにコピーした後に、vm_deallocateを使用
してこれらをそのアドレス空間から解放する。
【0241】ページが追い出されたならば、カーネル
は、いつでも、おそらく即座に、もう一度それらのペー
ジを要求することができる。メモリ・マネージャ、特に
マルチスレッド式のメモリ・マネージャは、バック・ツ
ー・バック・データ返しと、同一ページに関するデータ
要求メッセージに対してそのメモリ・マネージャ自体を
保護しなければならない。この状況の説明については、
Server Writer's Guideを参照されたい。
【0242】クリーンインプレース(Clean-in-Place) カーネルは、メモリ・マネージャにページを返す(すな
わち、追出し、クリーニングまたはフラッシュ)時に、
複数の問題に直面する。 ・マネージャが適度な時間内にページを除去しない場合
に、カーネルが、それらのページを一時補助記憶に追い
出す用意をしておかなければならない。 ・カーネルは、単一のページに関する追出し決定を行
う。効率のため、カーネルは、マネージャに複数のペー
ジを返そうと試み(追出しはしない)、その結果、マネ
ージャがその補助記憶内の複数のページを1回で更新で
きるようにする。追加のページは、それらをマッピング
するタスクからアクセス可能なままでなければならな
い。原則的に、マネージャは、返されたページを変更で
きる。これらは、通常のアウトオブライン・メモリとし
て見える。カーネルは、ページの書込み可能なコピーを
作成する用意をしておかなければならない。
【0243】カーネルは、ページ返し機構を最適化する
ために最善をつくす。最大の性能が達成されるのは、マ
ネージャがページを修正せず、ページの後処理を行うと
信頼できる時である。下記の条件が成り立つ場合に、内
部的にクリーンインプレースと呼ばれる特殊な高性能機
構が、カーネルによって使用される。 ・メモリ・マネージャが、メモリ資源消費に関して特権
を与えられ、ホスト名前ポートではなくホスト制御ポー
トにmemory_object_establish_privメッセージを送るこ
とによってこの特権を主張する。 ・メモリ・マネージャが、メモリ・キャッシュ・オブジ
ェクトと同一のホスト(ノード)にある。 ・メモリ・マネージャが、ページを修正しない。
【0244】これらの特殊機構の使用は、データ返しの
セマンティックスに影響する。というのは、メモリ・マ
ネージャが、返されたページに関してabstract_memory_
object->memory_object_data_requestが受け入れられる
時を、カーネルに明示的に示さなければならないからで
ある。さらに、カーネルは、メモリ・マネージャが、返
されたページを時宜を得た形で割振り解除することを期
待する。
【0245】メモリ・オブジェクトの終了 すべてのタスクがメモリ・オブジェクト・レプリゼンタ
ティブに関するマッピングを除去した時に、カーネル
が、下層にあるアブストラクト・メモリ・オブジェクト
に対するその代理の関連を破棄する。メモリ・マネージ
ャは、通知をうけない。メモリ・マネージャは、いつで
も代理に関するmemory_object_notifyメッセージを受け
取る用意を整えていなければならない。後続のmemory_o
bject_notifyメッセージのそれぞれに、独自のメモリ・
キャッシュ制御ポートが含まれる。すべてのタスクが下
層にあるアブストラクト・メモリ・オブジェクトに関す
るマッピングを除去した時に、カーネルが、abstract_m
emory_object->memory_object_terminateを用いてメモ
リ・マネージャに情報を伝える。そのオブジェクトが一
時属性を有するのでない限り、カーネルは、メモリ・キ
ャッシュ・オブジェクトを実際に終了させ、終了メッセ
ージを送る前に、そのオブジェクトのすべてのページを
追い出す。終了メッセージによって、メモリ・キャッシ
ュ制御ポートに関する受取り権が、マネージャに送ら
れ、その結果、マネージャは、カーネルがオブジェクト
を終了させた後、マネージャが終了メッセージを受け取
る前に、そのマネージャがそのポートに送ったすべての
メッセージを取得できるようになる。
【0246】メモリ・マネージャは、memory_cache_con
trol->memory_object_destroyを用いて明示的に、また
は、アブストラクト・メモリ・オブジェクト・ポートを
破壊することによって暗黙のうちに、カーネルがメモリ
・キャッシュ・オブジェクトを破壊することを要求する
ことができる。前者の場合、カーネルは、abstract_mem
ory_object->memory_object_terminateを用いて応答す
る。そのメモリ・オブジェクトの現在および将来の要求
は、すべてエラーになる。破壊の後に、カーネルは、随
意にメモリ・キャッシュ・オブジェクトの常駐ページを
破棄することができる。
【0247】メモリ・オブジェクトがmemory_object_es
tablishによって初期設定される時または、その後memor
y_object_change_attributesによって変更される時にセ
ットされるオブジェクト属性のうちの1つが、オブジェ
クト・キャッシュ属性である。この属性がセットされて
いると、代理−アブストラクト・オブジェクトの関連を
解消したり、すべてのマッピングが除去された時にメモ
リ・オブジェクトを終了させ、これによってすべてのキ
ャッシュ・ページを追い出すのではなく、メモリ・オブ
ジェクトが、小さなカーネル・オブジェクト・キャッシ
ュに入れられる。あるタスクがこの時間の間にそのオブ
ジェクトをマッピングする場合、そのオブジェクトは、
追加のmemory_object_notifyメッセージなしで生きたま
まになる。オブジェクトがオブジェクト・キャッシュか
ら出る前にタスクがそのオブジェクトをマッピングしな
い場合、そのオブジェクトは終了する。メモリ・オブジ
ェクトがこのマッピングされない状態である間にオブジ
ェクト・キャッシュ属性がクリアされた場合、そのメモ
リ・オブジェクトは、直ちに終了する。この属性の変化
には、この影響があるので、memory_object_change_att
ributesは、任意選択として、同期化に使用することが
できる応答(reply_port->memory_object_change_compl
eted)を返すことができる。
【0248】補助記憶との同期化 メモリ・オブジェクトのクライアントは、そのメモリ・
オブジェクトに対して行われた変更が、補助記憶上で反
映されることを知る必要があることがしばしばである。
このクライアントは、メモリ範囲に対してvm_msyncを実
行することによってそのような要求を行う。カーネルの
応答は、マネージャに対してページの組をクリーンまた
はフラッシュすることと、マネージャと共に同期化ダイ
アログにかかわることである。カーネルの応答は、クラ
イアントがvm_msyncに与えたフラグと、メモリ・オブジ
ェクトの無効化属性の値に依存する。範囲をクリーンま
たはフラッシュした後に、カーネルは、メモリ・オブジ
ェクト範囲ならびにクライアントのフラグを指定するab
stract_memory_object->memory_object_synchronizeを
送る。これらのフラグのうちの1つが、非同期フラグで
ある。これがセットされている時には、クライアント
は、ページを補助記憶に待ち行列化させることだけに関
心を持つ。そうでない場合、クライアントは、実際に補
助記憶にあるページに関心を持つ。マネージャは、所望
の効果を達成した時に、memory_cache_control->memory
_object_synchronize_completedを用いて応答する。ク
ライアントは、その時点でvm_msync呼出しからリターン
する。memory_object_synchronize_completedに指定さ
れた範囲は、対応するmemory_object_synchronizeメッ
セージの範囲と一致しなければならない。カーネルは、
未処理の同期要求を1度に複数有することができるが、
オーバーラップする要求を未処理状態にすることは絶対
にない。
【0249】プレシャス・ページ(Precious Pages) 基本データ管理プロトコルでは、カーネルは、物理メモ
リ・キャッシュ内にある間に修正されたページだけをメ
モリ・マネージャに返す。追い出される時、純粋な無修
正のページは、メモリ・マネージャがコピーを有すると
いう前提に基づいて破棄される。ディスク・ファイルを
補助記憶として使用し、その空間がページごとに補助記
憶上に常に割り振られるマップド・ファイル・メモリ・
マネージャの場合、これは最も合理的な手法である。し
かし、ネットワーク共用メモリ・サーバや他の専用サー
バなど、仮想メモリを補助記憶として使用するマネージ
ャの場合、これは非効率的である。マネージャとカーネ
ルの両方が、使用中のページを保持する。ページをカー
ネルに供給する時にそのページをプレシャス(貴重)と
して指定することによって、メモリ・マネージャがコピ
ーを保持する必要がなくなる。カーネルは、追出し時に
ページ返しをコミットする。ページをプレシャスとして
指定する能力は、memory_object_data_supply呼出しに
対するオプションとして使用可能である。メモリ・マネ
ージャは、データ供給呼出しからの応答を要求すること
によって、これらのページの受諾について情報を得るこ
とができる。この応答reply_port->memory_object_supp
ly_completedによって、どのページが受け入れられたか
が示される。この応答は、供給されたページの拒絶から
生じるデータ返しメッセージのすべての後に続く。memo
ry_object_data_returnメッセージでは、修正されたペ
ージならびにプレシャス・ページの両方が、その状態を
示すフラグと共に返される。
【0250】直接キャッシュ操作 時には、メモリ・マネージャが、ページを強制的にフラ
ッシュしたり、保護を変更することを必要とする場合が
ある。これは、memory_cache_control->memory_object_
lock_request呼出しを用いて行われる。この呼出しは、
カーネルに、実行すべき動作について知らせる。完了し
た時に、カーネルは、memory_object_lock_request呼出
しで命名された応答ポートを使用して、reply_port->me
mory_object_lock_completedを用いて応答する。
【0251】memory_object_lock_requestの主目的は、
分散メモリ・サーバやトランザクション保護メモリな
ど、ページに対するアクセス権の設定と取消しを含むメ
モリ管理プロトコルをサポートすることである。あるス
レッドが、memory_object_data_supplyまたはmemory_ob
ject_data_unavailableを用いてセットされた許可によ
って現在許可されるものでない方法でページをアクセス
しようと試みる場合、カーネルは、abstract_memory_ob
ject->memory_object_data_unlockを用いてメモリ・マ
ネージャにメッセージを送る。メモリ・マネージャは、
この要求を受ける場合に、memory_object_lock_request
を用いて応答して、新たに許される許可を指定する。単
一クライアントの場合、メモリ・マネージャは、memory
_object_lock_requestによってカーネルに範囲をフラッ
シュさせることによって要求を拒絶することができ、カ
ーネルがそのデータを再取出しする時に、メモリ・マネ
ージャは、memory_object_data_errorを用いて応答する
ことができる。
【0252】memory_object_lock_requestのシーケンス
も、メモリ・マネージャが主導して開始することができ
る。この呼出しは、カーネルが修正されたページまたは
プレシャス・ページのすべてをマネージャに返すことを
必要とし、fsync動作中など、マネージャがページの最
新コピーを必要とする時には、カーネルに書込み許可を
取り消すように要求することもできる。メモリ・マネー
ジャは、ページのすべてをメモリ・キャッシュからフラ
ッシュするようにカーネルに要求することもできる。
【0253】仮想コピーの最適化 下記は、メモリの範囲が論理的にコピーされる、マイク
ロカーネル・システム115内の3つの状況である。 ・メモリ範囲がVM_INHERIT_COPY継承属性を有し、この
タスクから新タスクが作成される時。 ・vm_copyによって、アドレス空間の1部分がその空間
の別の部分にコピーされる時。 ・メモリ範囲が、マイクロカーネル・メッセージ内で仮
想アウトオブライン領域として渡される時。これには、
vm_read動作とvm_write動作が含まれる。
【0254】これらの状況は、頻繁に発生する。コピー
継承メモリは、新プロセス作成に関するPOSIX(Po
rtable Operating System Interface For Computer Env
ironmentsの略)のforkセマンティックスをサポートす
るのに使用される。アウトオブライン・メモリは、通常
のメッセージの場合には一般的でないが、外部メモリ・
マネージャ、デバイス・インターフェースおよび、特に
ファイル・システムのサポートに重要である。
【0255】これらの動作は、直接共用の代わりに論理
コピーとして定義することができる。というのは、マイ
クロカーネル仮想メモリが、仮想コピー最適化を提供す
るからである。これらの最適化が行われると、メモリ全
体がコピーされるのではなく、データをコピーする必要
が生じた時に限って、遅延評価方式でメモリがコピーさ
れる。データのコピー動作は、下記のさまざま理由から
延期することができる。 ・データの一部が実際には参照されない。 ・データの一部をどのタスクも修正せず、したがって、
すべてのタスクが、未修正データの同一のメモリ・イメ
ージを効率的に共用できる。 ・データ・コピーを要求するタスクが、そのマッピング
を削除し、このため、カーネルが、そのコピーを移動と
みなすことができ、これは、ページ・コピーではなくペ
ージ再マッピング(ページ・スチール)に最適化するこ
とができる。これに関連する可能性として、データの受
取り側がもう一度そのデータをコピーし、データを見る
こともせずにそのマッピングを削除する場合がある。
【0256】その一方で、これらの最適化は、純粋に内
部的であり、したがって、本明細書で説明するマイクロ
カーネル・セマンティックスの一部ではない。しかし、
これらの最適化は周知である。これらは、多くのインタ
ーフェース、特に外部メモリ・マネージャ・インターフ
ェースの、ユーティリティに一体化された部分である。
【0257】カーネルが、アウトオブライン・データの
ために仮想メモリ・システムを使用するという事実のお
かげで、リストを返すさまざまなカーネル・プリミティ
ブが、アウトオブライン・データを返すことによってリ
ストを返せるようになる。これは、内部的なvm_allocat
e動作によって達成される。これらの最適化は、インタ
ーフェースの仕様の重要な部分すなわち性能特性を形成
する。仮想コピーの参照によって、元のメモリ・オブジ
ェクトからページが取得され、これによって、そのオブ
ジェクトのメモリ・マネージャとの相互作用が生じる可
能性がある。参照を行うタスクの挙動は、特にメモリ・
マネージャがカーネルのページ要求に応答しない場合
に、影響を受ける可能性がある。
【0258】メモリの範囲をコピーする時には、カーネ
ルが、仮想的にコピーされるページを表現するために、
新しいアブストラクト・メモリ・オブジェクトとメモリ
・キャッシュ・オブジェクトを作成する。新メモリ・キ
ャッシュ・オブジェクト(コピーの宛先)は、物理メモ
リ・ページが修正されないと仮定すると、旧メモリ・キ
ャッシュ・オブジェクト(コピーの源)と、実際の物理
メモリ・ページを共用することができる。旧オブジェク
トは、この仮想コピーによって影響を受けない。旧オブ
ジェクトは、同一のアブストラクト・メモリ・オブジェ
クトおよび同一の関連メモリ・マネージャと関連したま
まになる。そのページはそれ自体のものであり、ふさわ
しいと思われる場合に使用される。
【0259】新メモリ・オブジェクトは、旧メモリ・オ
ブジェクトのコピーされた範囲内のページのすべての仮
想コピーを受け取るが、この動作の可視の仕組みは、そ
れほど単純ではない。これらは、下で述べるように、旧
オブジェクトに関する、オブジェクト作成時にmemory_o
bject_establishによってセットされるか、その後にmem
ory_object_change_attributesによってセットされるコ
ピー戦略の値によって制御される。
【0260】通常のメモリ・オブジェクトのページは、
タスクのアドレス空間にマッピングされた時に修正する
ことと、そのタスクによる直接メモリ参照によって操作
することだけが可能である。これが1つのホスト上だけ
で発生し得る場合、メモリ・オブジェクトのページに対
する修正のすべてが、そのホスト上で発生し、カーネル
に完全に可視である(カーネルはそのメモリ・キャッシ
ュ・オブジェクトを維持するので)。この場合、メモリ
・マネージャは、そのメモリ・オブジェクトのコピー戦
略を、MEMORY_OBJECT_COPY_DELAYすなわち標準的なコピ
ー・オン・ライト最適化にセットする。新メモリ・オブ
ジェクトは、デフォルト・メモリ・マネージャによって
管理される一時オブジェクトとして作成される。旧オブ
ジェクトと新オブジェクトの挙動は、次の通りである。 ・新メモリ・オブジェクトと旧メモリ・オブジェクトの
両方が、現在メモリ内にあるページを共用する。 ・新オブジェクトの、メモリ常駐でなく、また下で述べ
るようにプッシュされていないページが参照される場
合、データを求めて、旧アブストラクト・メモリ・オブ
ジェクトにメッセージが送られる。メモリ・マネージャ
は、この要求を、旧メモリ・オブジェクトに対する参照
と区別できない。取り出されるページは、旧メモリ・オ
ブジェクトと新メモリ・オブジェクトによって共用され
る。 ・旧オブジェクトのページが、旧オブジェクトまたは新
オブジェクトのいずれかに対する修正参照の試みによっ
て修正される(これらが現在物理メモリ・ページを共用
しているので)場合、カーネルは、まず、そのページの
未修正の値を新オブジェクトにプッシュし、その結果、
新オブジェクトに、そのページの元のデータのコピーが
見えるようにする。 ・プッシュされたページは、デフォルト・メモリ・マネ
ージャによって管理される。
【0261】ネットワーク共用メモリやメモリ・マネー
ジャによる直接アクセスなど、単一のホスト上のカーネ
ルに可視でない形で旧メモリ・オブジェクトを修正でき
る場合、代替コピー戦略が必要である。これを理解する
ために、下記のシナリオを検討されたい。 ・仮想コピーが要求される。しかし、その範囲のあるペ
ージが、コピーを行うホスト上のメモリ内にない。 ・他のホスト上に常駐する範囲のページが修正される。 ・コピーを行うホスト上の新(コピー)メモリ・オブジ
ェクトが、ページに関する要求を行う。このオブジェク
トは、仮想コピーの時点でそのページが有していたはず
の値ではない、新しい値を受け取る。
【0262】最適化を使用不能にするために、MEMORY_O
BJECT_COPY_NONE戦略を提供する。MEMORY_OBJECT_COPY_
NONEは、メモリ・マネージャが知的な形で正しいセマン
ティックスを実施できない時に使用される。仮想コピー
の時点で、カーネルは、デフォルト・メモリ・マネージ
ャによって管理される一時オブジェクトとして、新メモ
リ・オブジェクトを構成する。新メモリ・オブジェクト
の内容は、その時点で旧メモリ・オブジェクトから明示
的にコピーされ、したがって、その時点で、メモリ・マ
ネージャからすべてのページが要求される。
【0263】MEMORY_OBJECT_COPY_NONE戦略を使用する
と、積極的なコピーが実行されるので、メモリ管理の性
能に悪影響を及ぼす可能性がある。メモリ・オブジェク
トが、メモリ・キャッシュを無効化する形で操作される
が、メモリ・マネージャが、これらの操作が発生する時
を完全に把握し、制御する場合、そのメモリ・マネージ
ャは、memory_object_lock_request呼出しに対する強制
コピー・オプションの助けを借りて、MEMORY_OBJECT_CO
PY_DELAY戦略を使用することができる。このオプション
は、メモリ・マネージャが、カーネルのキャッシュを無
効化しようとしていることを認識した時に、そのメモリ
・マネージャが使用することができる。このオプション
を指定すると、カーネルは、メモリ・オブジェクトの指
定された範囲の遅延コピーのすべてを積極的に評価する
ようになる。
【0264】デフォルト・メモリ・マネージャ デフォルト・メモリ・マネージャは、無名メモリ(vm_a
llocate、メモリ・コピーなど)のための補助記憶を提
供する。これは、最後の手段のメモリ・マネージャであ
り、障害を発生してはならないメモリ・マネージャであ
る。このためにページングを提供できるメモリ・マネー
ジャは存在しないので、デフォルト・メモリ・マネージ
ャはメモリにワイヤリングされ、これに渡されるメモリ
のすべてがワイヤリングされる。このメモリ・マネージ
ャは、そのメモリをすばやく処理しなければならず、メ
モリが補助記憶にページ・アウトされる時には、そのメ
モリが効果的にワイヤリングされているので、これをす
ばやく破棄しなければならない。あるホストのデフォル
ト・メモリ・マネージャのセットと問い合わせは、host
_control->vm_set_default_memory_managerによって行
われる。
【0265】デフォルト・メモリ・マネージャによって
二重書きされるメモリは、さまざまな方法で作成でき
る。これらの作成には、デフォルト・メモリ・マネージ
ャが直接に関係するわけではない。カーネルが、新デフ
ォルト・メモリ・オブジェクトに関して明示的にデフォ
ルト・メモリ・マネージャに情報を与えなければならな
い。これは、default_pager->memory_object_createに
よって行われる。特権タスクは、default_pager->defau
lt_pager_object_createを用いて、デフォルト・ページ
ャによって管理されるメモリ・オブジェクトを作成する
こともできる。
【0266】デフォルト・メモリ・マネージャは、仮想
コピー範囲を表すためにカーネルによって作成された一
時メモリ・オブジェクト用の補助記憶を提供する。これ
らの一時オブジェクトは、追加動作を適用される。元の
オブジェクトからのあるページが、一時オブジェクトに
プッシュされる時に、プッシュされるデータが、abstra
ct_memory_object->memory_object_data_initializeを
用いてデフォルト・マネージャに供給される。この追加
プリミティブの理由は、カーネルが、コピーにプッシュ
するページの範囲を完全には追跡しないからである。コ
ピー・ページがページ・アウトされる場合、元のオブジ
ェクトの後続の修正によって、修正された元のページが
もう一度プッシュされる。デフォルト・メモリ・マネー
ジャが、1ページに関する複数のプッシュ・メッセージ
(memory_object_data_initialize)を受け取ることも
有り得る。このマネージャは、それらのうちの最初のメ
ッセージ以外をすべて無視しなければならない。memory
_object_data_initializeが呼び出されるのは、ページ
がコピーにプッシュされる時だけであり、コピーのペー
ジ自体が変更される場合には、修正されたページが、me
mory_object_data_returnを用いてマネージャに送られ
ることに留意されたい。
【0267】デフォルト・メモリ・マネージャは、一度
もプッシュされていないコピーのページを要求される可
能性がある。まだ存在しないページに関するマネージャ
の応答は、memory_object_data_unavailableを呼び出す
ことである。0のページを作成するのではなく、この呼
出しでは、元のオブジェクトから適切なページをコピー
する。すなわち、初期化メッセージがないので、元のペ
ージは修正されていないことになる。
【0268】パートB 発明の詳細な説明 本発明は、マイクロカーネル・アーキテクチャおよびマ
イクロカーネル構造のためのメモリ管理方法である。本
発明は、特殊オブジェクトとしてメモリ内でカーネルに
よって定義されるテンプレート領域を特徴とする。マイ
クロカーネルには、スレッド、タスク、IPCポート空
間、例外空間および仮想アドレス空間マッピングを表
す、カーネルのタスク仮想アドレス空間内のデータ構造
が含まれる。スレッドを表すデータ構造には、スレッド
が例外状態を取り込み、スケジューリングおよび優先順
位情報を提供できるようにする情報が記憶される。タス
クを表すデータ構造によって、実行中のスレッドから使
用可能な資源が記述される。IPCポート空間を表すデ
ータ構造によって、そのタスク用のポート変換に対する
ポート名が記述される。例外空間を表すデータ構造によ
って、タスク内で例外を処理する方法が記述される。仮
想アドレス空間マッピングを表すデータ構造によって、
マイクロカーネル・システム115のメモリ管理ユニッ
トをプログラミングするためのデータが記述され、維持
される。マイクロカーネル120には、計算機依存のP
MAP層を管理するためのデータ構造も含まれ、これに
よって、あるタスクに関する物理アドレスへの仮想アド
レスの変換を計算機依存の形で表現するデータが維持さ
れる。マイクロカーネルによって管理されるPMAP層
によって、ページアウト条件の場合にページ・フレーム
を現在記述しているPMAPのすべてを使用不能にする
ための、物理メモリ・フレームに関するデータが維持さ
れる。
【0269】このメモリ管理方法では、マイクロカーネ
ル120は、ホスト多重プロセッサ100のメモリ10
2にロードされた後に、図3に示されたものなどの、メ
モリ内のタスク・コンテナの作成を開始することができ
る。タスクをタスク・コンテナと呼ぶのは、タスクのス
レッドがその中で動作することのできる仮想メモリ空間
の定義、これらのスレッドから使用可能なデータの定義
または表現、および、タスクのスレッドがそれを介して
システム内の他のスレッドと通信することのできる通信
ポートの表現など、タスクに関連するスレッドによる使
用のために使用可能になるはずの資源を表すからであ
る。
【0270】メモリ管理方法は、マイクロカーネル12
0内のテンプレート領域200、200'および200"
の形成から始まる。図7からわかるように、テンプレー
ト領域R0 200は、ネスト可能テンプレート領域で
ある。ネスト可能とは、第2のテンプレート領域R1
200'を指すことを意味する。テンプレート領域R1
200'は、一連のポインタを介して図7のキャッシ
ュ・オブジェクト202などのオブジェクトを指す、リ
ーフ(leaf)・テンプレート領域である。テンプレート
領域R1 200'は、もう1つのリーフ・テンプレー
ト領域であるテンプレート領域R2 200"も指し、
このテンプレート領域R2 200"は、一連のポイン
タを介してキャッシュ・オブジェクト202内のもう1
つのデータ・ページを指す。下の説明から明らかになる
ように、テンプレート領域R1 200'は、その中に
含まれる別のテンプレート領域を指していないので、リ
ーフ・テンプレート領域とみなされる。しかし、テンプ
レート領域R0 200は、領域R1とR2の両方がそ
の中に含まれるので、ネスト可能テンプレート領域とみ
なされる。「その中に含まれる」とは、領域R1の仮想
アドレス空間が、テンプレート領域R0の仮想アドレス
空間内にあることを意味する。同様に、テンプレート領
域R2の仮想アドレス空間は、テンプレート領域R0の
仮想アドレス空間内に含まれる。しかし、テンプレート
領域R1とテンプレート領域R2の仮想アドレス空間
は、別個であり、したがって、テンプレート領域R1は
リーフ・テンプレート領域である。
【0271】マイクロカーネル120は、マイクロカー
ネル・アドレス空間内でPMAP204を構成して、タ
スクのための仮想アドレスの物理アドレスへの変換を計
算機依存の形で表現するためのデータを維持する。テン
プレート領域R0は、アドレス空間AD(R0)の記述
を含む、マイクロカーネル120内のデータ構造であ
る。このアドレス空間は、テンプレート領域R0によっ
て定義されるタスクのためにスレッドが動作することの
できるアドレス空間である。アドレス空間は、64Kバ
イト仮想メモリ・アドレス・セグメントとすることがで
き、これは16ビット・アドレスに適するはずである
が、32ビット・アドレス用の4Gバイト仮想メモリ空
間セグメントとすることもできる。テンプレート領域R
0によって定義される仮想アドレス空間のセグメント
は、テンプレート領域R0によって定義されるタスクの
ためにスレッドが動作することのできる区域である。図
7でやはりテンプレート領域R0に含まれているのが、
PMAP204を指すポインタである。このポインタ
は、たとえばマイクロカーネル120用のマイクロカー
ネル・アドレス空間内のPMAP204の、開始アドレ
スを識別する。テンプレート領域R0を定義する追加の
データ構造には、テンプレート領域R0に関連するタス
クを記述するのに使用される、テンプレート領域の連鎖
内の次のテンプレート領域R1の指定が含まれる。この
連鎖の末尾は、R2として指定され、これによって、テ
ンプレート領域R0、R1およびR2の連鎖の最後のテ
ンプレート領域をすばやく識別できるようになってい
る。同様に、図7のテンプレート領域R1には、アドレ
ス空間AD(R0)の一部であるアドレス空間AD(R
1)の記述が含まれる。さらに、テンプレート領域R1
には、変換値「仮想アドレス(V0)」を指す、PMA
Pを指すポインタPT(R1)が含まれる。PMAP2
04のこの仮想アドレス変換値は、ポインタの仮想アド
レス値を、線206を介して物理アドレスに変換し、こ
の物理アドレスは、メモリ102内のオブジェクトへの
線208上の出力である。図7からわかるように、仮想
アドレス(V0)変換値は、キャッシュ・オブジェクト
202内のデータ・ページD0を指す。テンプレート領
域R1には、連鎖内の次のテンプレート領域R2と、連
鎖内の前のテンプレート領域R0の指定も含まれる。テ
ンプレート領域R1には、キャッシュ・オブジェクト2
02用の仮想アドレスでキャッシュ・オブジェクト20
2を指す別のポインタが含まれ、さらに、キャッシュ・
オブジェクト202内のデータ・ページD0のオフセッ
ト値が含まれる。
【0272】図7のテンプレート領域R2には、アドレ
ス空間AD(R0)の一部であるアドレス空間AD(R
2)の記述が含まれる。テンプレート領域R2には、P
MAPを指すポインタPT(R2)も含まれ、その仮想
アドレス値は、線206を介してPMAP204の仮想
アドレス変換「仮想アドレスV(1)」に適用される。
この仮想アドレス変換は、キャッシュ・オブジェクト2
02の命令D1に対する線208上の出力である物理ア
ドレスをもたらす。テンプレート領域R2には、さら
に、連鎖内の前のテンプレート領域R1の指定が含まれ
る。テンプレート領域R2は、キャッシュ・オブジェク
ト202の仮想アドレスを指すポインタと、キャッシュ
・オブジェクト202内での命令ページD1へのオフセ
ットも有する。
【0273】マイクロカーネル120のアドレス空間内
の各テンプレート領域は、対応するタスク・コンテナを
定義するための属性の組を有する。これらの属性によっ
て、仮想メモリ・アドレス空間、データ・オブジェクト
資源および通信ポートなど、タスクのスレッドによる使
用のためにそのタスクから使用可能な資源を指定するこ
とができる。マイクロカーネルは、図8に示されるよう
に、メモリ102内にタスクを形成することができる。
マイクロカーネル120は、テンプレート領域200、
200'および200"によって指定された属性をタスク
210にマッピングすることによって、メモリ102内
にタスク210を形成できる。マイクロカーネル120
は、テンプレート領域R0内の仮想アドレス空間AD
(R0)に基づいて、このタスクの仮想アドレス空間を
定義する。後程、マイクロカーネル120は、仮想記憶
動作を行う時に、テンプレート領域R0内のポインタ2
05、テンプレート領域R1内のポインタ205'およ
びテンプレート領域R2内のポインタ205"の値を操
作することによって、その動作を行う。マイクロカーネ
ル120は、タスク210ではなく、テンプレート領域
R0、R1およびR2に対して仮想記憶動作を行うの
で、この仮想記憶動作の効果は、タスク内ではポインタ
212によって示される。
【0274】マイクロカーネル120は、テンプレート
領域R0からのサイズ属性とタスク210用の開始仮想
アドレスとを使用して、仮想アドレスでタスク210を
表すデータ構造を定義する。マイクロカーネル120
は、テンプレート領域R0からの属性を使用して、タス
クのスレッドがその動作を行うことのできる、タスク2
10用の仮想アドレス空間を定義する。マイクロカーネ
ルは、タスクT(A)など、タスク210のタスク名も
定義する。マイクロカーネル120は、タスク210が
そのスレッドとシステム内の他のスレッドの間の通信チ
ャネルとして使用するために、メモリ102内でポート
名前空間も形成する。マイクロカーネル120は、テン
プレート領域R0からの属性の組を使用して、タスク2
10用のポート名前空間のアクセス権を定義する。その
後、マイクロカーネルは、タスク210のためにメモリ
102内でスレッド・オブジェクトを形成することがで
き、これらのスレッドは、このタスクの仮想アドレス空
間から命令を取り出すことができる。
【0275】本発明によれば、マイクロカーネル120
は、テンプレート領域R0を指す第1のポインタ212
を、タスク210のために定義する。テンプレート領域
R0内には、少なくとも1つ、おそらくは多数の第2の
ポインタ205があり、このポインタ205は、直接ま
たは間接にマッピング・テーブルであるPMAP204
を指す。図8からわかるように、ポインタ205はPM
AP204を指す。テンプレート領域R1は、テンプレ
ート領域R0のアドレス空間に含まれるが、これは、テ
ンプレート領域R1のポインタ205'がPMAP20
4内の仮想アドレス変換値V(0)を指しているからで
ある。仮想アドレス変換値V0によって、ポインタ20
5'の仮想アドレス値が、キャッシュ・オブジェクト2
02内のデータ・ページD0の物理アドレスに変換され
る。同様に、テンプレート領域R0のアドレス空間内に
含まれるテンプレート領域R2内のポインタ205"
は、PMAP204内の仮想アドレス変換値V(1)を
指す。仮想アドレス変換値V1によって、ポインタ20
5"の仮想アドレス値が、キャッシュ・オブジェクト2
02内の命令ページD1の物理アドレスに変換される。
【0276】時折、あるタスクのデータ資源に変更を加
えることが望ましい場合がある。これは、テンプレート
領域R0、R1およびR2内のポインタ205、20
5'および205"によって表される仮想アドレスを変更
することによって達成される。変更されたポインタは、
望みどおりにPMAP204内の異なる変換値を指すこ
とができる。しかし、本発明によれば、タスク210自
体の内容に変更を加える必要はない。キャッシュ・オブ
ジェクト内のデータなどのタスク資源は、タスクによっ
て、テンプレート領域内のポインタ205、205'お
よび205"を介してアドレッシングされる。
【0277】図9に示されるように、マイクロカーネル
が、テンプレート領域から複数のタスクを定義した場
合、テンプレート領域R0、R1およびR2内のポイン
タ205、205'および205"を変更すると、図9の
複数のタスク210および210'から使用可能な資源
の大域的な変更がもたらされる。これは、タスク210
および210'が、それぞれ同一のテンプレート領域R
0 200を指すポインタ212および212'を有す
るからである。タスク210および210'によってア
ドレッシングされるデータ・ページD0およびD1は、
タスク210および210'のそれぞれの内容を変更す
るのではなく、テンプレート領域R0、R1およびR2
内のポインタ205、205'および205"に対する単
一の変更だけで変更できる。
【0278】こうして、単一のテンプレート領域R0と
それに含まれるテンプレート領域R1およびR2を、複
数のタスク210および210'に同時にマッピングす
ることができる。各タスク210または210'には、
テンプレート領域R0、R1およびR2に対して行われ
る変更のすべてが見える。このため、同一のテンプレー
ト領域R0 200によって生成されたタスク210お
よび210'の特性の共用が可能になる。
【0279】テンプレート領域R0、R1およびR2
は、すべての仮想記憶動作が向けられるオブジェクトで
ある。かつてのMACHマイクロカーネルでは、タスク
が、仮想記憶動作が向けられるオブジェクトであった。
本発明に従って、仮想記憶動作を、その動作が実施され
るテンプレート領域に向けることによって、複数のタス
クでの仮想記憶動作の共用がはるかに簡単に達成され
る。
【0280】テンプレート領域は特殊オブジェクトであ
るから、単一のテンプレート領域を、複数のタスクに同
時にマッピングすることができる。あるテンプレート領
域が複数のタスクにマッピングされる時には、各タスク
に、そのテンプレート領域に対して行われる変更のすべ
てが見える。メモリ内容の変更もしくは、内部テンプレ
ート領域の追加または削除のすべてが、元のテンプレー
ト領域にマッピングされるタスクに見える。これによっ
て、以前には不可能または近似的にしか実現できなかっ
たセマンティックスの共用が可能になる。すなわち、テ
ンプレート領域を用いると、メモリ内容を共用できるだ
けではなく、メモリ・マッピング自体を共用できるよう
になる。したがって、テンプレート領域に対する変更
(メモリ内容の変更またはテンプレート領域によってマ
ッピングされるものに対する変更の結果として)は、そ
のテンプレート領域がマッピングされるすべてのタスク
によって認識される。テンプレート領域を用いない代替
案は、タスクとメモリの関係のそれぞれの監視を必要と
するものであり、さらに、タスクに対応するメモリ領域
に対する変更によって影響を受けるタスクのそれぞれに
対する変更を必要とするものである。テンプレート領域
のない実施態様の暗黙の短所は、特定のメモリ領域にマ
ッピングされるタスクの数が増加するにつれて、1つの
変更によって影響を受ける領域を更新する時間がそれ相
応に増加することである。
【0281】たとえば、テンプレート領域を使用する
と、すべてのライブラリが同一のテンプレート領域内に
置かれ、そのテンプレート領域が関心を持つタスクによ
ってマッピングされる場合に、テンプレート領域への新
ライブラリのマッピングに要する時間は、関心を持つタ
スクの数と無関係に予測可能である。さらに、潜在的に
複雑なロック方式を導入しなくても、マッピング情報の
変更が、その領域をマッピングされるタスクに原子的に
見えるようにすることができる。
【0282】テンプレート領域は、VM動作すなわち仮
想記憶動作が向けられるオブジェクトである。かつて
は、タスクが、仮想記憶動作が向けられるオブジェクト
であった。本発明に従って、仮想記憶動作をその動作が
実施されるテンプレート領域に向けることによって、変
更が領域のマッピングではなく、テンプレート領域に対
して行われるようになるので、共用がはるかに簡単に達
成される。これは、本発明の重要な相違である。テンプ
レート領域は、オブジェクトである。テンプレート領域
は、属性すなわちある量の状態を有し、タスクのアドレ
ス空間内に存在しない。タスクのアドレス空間に存在す
るのは、テンプレート領域のマッピングである。テンプ
レート領域のマッピングがタスクのアドレス空間に存在
するので、このマッピングは、そのタスクのアドレス空
間内のどこにでも現れることができ、図10に示される
ように、異なるタスクが、それぞれのアドレス空間内の
異なるアドレスにマッピングされた同一のテンプレート
領域を共用することができる。すなわち、タスクAが、
アドレス4000(16進)にマッピングされたテンプ
レート領域を有し、タスクBが、アドレス800F00
0(16進)にマッピングされた同一のテンプレート領
域を有することができる。図11に示されるように、同
一のテンプレート領域を、単一のタスクのアドレス空間
内に複数回マッピングすることも可能である。
【0283】タスクのアドレス自体は、そのタスクが作
成される時に供給されるテンプレート領域によって定義
される。したがって、あるタスクのアドレス空間にマッ
ピングされるすべてのテンプレート領域は、実際にはも
う1つのテンプレート領域にマッピングされる。したが
って、マイクロカーネルに対する"VM-map"呼出しは、タ
スク・ポートをとらず、新テンプレート領域を他のテン
プレート領域にマッピングしなければならない位置に関
するテンプレート領域ポートだけをとる。これは、テン
プレート領域が、すべての仮想記憶動作がそれによって
実行される実体であるという概念にうまくあてはまる。
タスクとテンプレート領域の間の連係は、タスクが作成
される時に確立される。この形でタスクのアドレス空間
を管理することによって、タスクを作成する時にマッピ
ング設定を事前に定義するのが非常に簡単になる。ま
た、異なるサイズのアドレス空間を有するタスクを有す
ることも比較的簡単になる。異なるサイズのアドレス空
間は、後に図18と共に説明する「基本テンプレート領
域」の機能である。簡単に言うと、基本テンプレート領
域は、タスクのアドレス可能メモリ領域を定義する実体
である。タスクに関連する基本テンプレート領域を確立
(または変更)することができ、その結果、基本テンプ
レート領域が任意のサイズになるようにすることができ
る。異なるサイズの基本テンプレート領域のより有用な
実施態様の中には、たとえば、32ビットと64ビット
の混合システムの同時サポートが含まれる。さらに、異
なるサイズの基本テンプレート領域は、何らかの理由の
ためにタスクのアドレス範囲を制限しなければならない
環境で使用することができる。
【0284】本発明の例示の実施例によれば、テンプレ
ート領域をネストすることができる。しかし、テンプレ
ート領域のネスティングは、非常に限られた形でしか行
えない。2つのテンプレート領域がオーバーラップする
場合、テンプレート領域のうちの一方が、他方のテンプ
レート領域を完全に包含しなければならない。図12で
は、テンプレート領域R1がテンプレート領域R2とオ
ーバーラップする場合に、図12の左側の絵は正しい
が、図12の右側は正しくない。テンプレート領域R1
とテンプレート領域R2を入れ替えた場合でも同様であ
る(どの領域がどの領域にオーバーラップするかという
順序は、2つの異なるマッピング動作によって判定され
る)。図12の右側の絵は、図13に示されるように、
オーバーラップされるテンプレート領域がR0である場
合にも正しくない。テンプレート領域を別のテンプレー
ト領域の上に置くことができる位置について、追加の制
約が存在する可能性がある。たとえば、あるテンプレー
ト領域が、それを囲むテンプレート領域内の同一の範囲
に他のテンプレートが現れないようにすることを示す属
性を有することができる。通常、テンプレート領域は、
それを囲むテンプレート領域に無関係に互いにオーバー
ラップすることができる。図12では、R1を囲むテン
プレート領域は、R2またはR0のいずれかである。し
かし、R1とR2の両方に「メモリ」が含まれる場合
に、これが問題を引き起こす可能性がある。これは、テ
ンプレート領域を他のテンプレート領域の「穴」にのみ
マッピングできるようにすることによって防止される。
すなわち、あるテンプレート領域を、別のテンプレート
領域によって既にマッピングされている区域にマッピン
グすることはできない。したがって、図12では、R1
は、R2によってのみ囲まれることができ、R1がR0
によって囲まれる可能性はない。というのは、R1とR
2の両方がR0内で同一の範囲を占めるからである。
【0285】テンプレート領域を使用する時には、無名
メモリを割り振る方法がない。これは、図13に示され
るように、メモリ・オブジェクトを領域にマッピングす
ることによって行われる。すべてのメモリがメモリ・オ
ブジェクトによって表現されるので、メモリがテンプレ
ート領域内で見えるようにするためには、メモリ・オブ
ジェクトをテンプレート領域にマッピングしなければな
らない。過去において、メモリ割振りは、実際には無名
メモリ・オブジェクトの一部のマッピングの特殊な場合
にすぎなかった。テンプレート領域を用いる場合、無名
メモリ・オブジェクトという概念が実在しない。メモリ
・オブジェクトをマッピングするために、各メモリ・オ
ブジェクトを識別しなければならない。
【0286】テンプレート領域は非常に再帰的であるこ
とが理解されるであろう。これは、物理ページに向かっ
て進む再帰であると考えると便利である。物理ページ
は、固定サイズのテンプレート領域であると考えること
ができる。これは、実施態様がこの形でなければならな
いということを暗示するものではない。物理ページがテ
ンプレート領域の最下位の組であると考えることは、概
念的な観点から便利である。単一のテンプレート領域
を、複数の他のテンプレート領域にマッピングすること
ができるので、物理ページを複数の「通常」の領域にマ
ッピングすることができる。これによって、異なるテン
プレート領域から、異なる属性が関連付けられた同一の
物理メモリをアクセスできるようになる。明らかに、異
なるテンプレート領域が衝突する属性を有する場合に、
物理ページの属性をセットする方法に関して規則が必要
である。たとえば、あるテンプレートではそのページが
キャッシュ不能と示され、別のテンプレートではそのペ
ージをキャッシュしなければならないと示される場合が
ある。この逆の場合もある。ページ・テーブルを用いる
と、物理的に不連続なページを仮想的に連続しているよ
うに見せることができる。同一のことを、オーバーラッ
プするテンプレート領域に対しても行える。図14で
は、R0に2つの他の領域R1およびR2が含まれ、R
1とR2は、R0内で連続していない。一部のアプリケ
ーションでは、この不連続性を知り、対処しなければな
らないので、情報の操作が困難になる可能性がある。R
1とR2を含むのに十分な大きさの新テンプレート領域
R3を作成することができる。R1とR2は、R3内で
互いに連続する形でマッピングされる。こうすると、先
程のアプリケーションが、R3を利用して、R0に見ら
れる不連続性に対処する必要をなくすことができる。
【0287】本発明の例示の実施例によれば、テンプレ
ート領域には別個の2つの種類がある。テンプレート領
域の第1のタイプは、他のテンプレート領域を含む能力
を有するネスト可能テンプレート領域である。これを用
いると、上で述べた再帰が可能になる。しかし、この再
帰では、実際にメモリを含むことができない。これは、
すべてのメモリ(仮想メモリ)がメモリ・オブジェクト
によって表現されるからである。メモリ・オブジェクト
は、テンプレート領域と異なる実体である。したがっ
て、メモリ・オブジェクトの一部をマッピングする第2
のタイプのテンプレート領域がある。これらは、「リー
フ(leaf)」領域と考えることができる。図15に、異
なるタイプのテンプレート領域の例と、メモリ領域がそ
れらとどのように関連するかを示す。メモリ・オブジェ
クトであるリーフ領域は、メモリ・オブジェクトのマッ
ピングされる部分のサイズと正確に同じサイズでなけれ
ばならないことに留意されたい。すなわち、このテンプ
レート領域には、メモリ・オブジェクトをマッピングさ
れていない部分があってはならない。図16に、領域へ
のメモリ・オブジェクトのマッピングの正しくない例を
2つ示す。テンプレート領域R3へのMO1のマッピン
グは、R3が他のテンプレート領域を含むので正しくな
い。R2へのMO2のマッピングは、R2がMO2のマ
ッピングされる部分より大きいので、正しくない。
【0288】テンプレート領域には、そのテンプレート
領域によって含まれるメモリを扱う方法を示す属性が関
連付けられている。下記は、属性の識別と、そのそれぞ
れの意味および各属性を取り巻くセマンティックスの一
部の説明である。 1.テンプレート領域内でメモリが割り振られる時に、
補助記憶の割振りを切望する。これがセットされていな
い時には、補助記憶が遅延割り振りされる。 2.スーパーバイザ(Supervisor)。プロセッサがスー
パーバイザ状態で実行中である時に限ってアクセス可能
なテンプレート領域を示す。 3.特権(Privileged)。物理メモリが足りない時に予
約済みプールからページを割り振ることができる。 4.メモリが割り振られ、テンプレート領域に置かれる
時に、そのメモリを表すページが、物理的に連続してい
なければならない。 5.メモリが割り振られ、テンプレート領域に置かれる
時に、そのメモリを表すページが、指示された物理アド
レス範囲内になければならない。 6.テンプレート領域内のページが、メモリにワイヤリ
ングされる。このテンプレート領域への新しい割振り
は、どれもがワイヤリングされる。この属性がセットさ
れていない場合、テンプレート領域内のページを、名前
メモリから追い出すことができる。 7.プロセッサ・キャッシュ属性。 8.アクセス挙動。 9.アクセス権。 10.コヒーレンシ(Coherency)とNORMA。
【0289】テンプレート領域は、図17に示されるよ
うに他の複数の構成要素と相互作用する。構成要素のそ
れぞれの説明は、下の節で行う。
【0290】さまざまな仮想メモリ構成要素が、ペー
ジ、メモリ・オブジェクト、テンプレート領域、キャッ
シュ、PMAPおよびメモリ管理ユニットである。
【0291】本発明による方法で編成された仮想メモリ
・システムに関して、下記を観察することができる。 1.物理ページは、多くとも1つのメモリ・オブジェク
トに含まれる。これが発生するのは、メモリ・オブジェ
クトが、「メモリ」を表すのに使用される実体だからで
ある。共用は、ページを含むメモリ・オブジェクトの共
用か、メモリ・オブジェクトを含むテンプレート領域の
共用のいずれかによって達成される。 2.メモリ・オブジェクトは、それをマッピングしてい
るテンプレート領域のすべてについて知っていなければ
ならない。 3.テンプレート領域は、そのテンプレート領域を含む
すべてのPMAP範囲について知っていなければならな
い。
【0292】上記によって、物理ページの共用を識別す
るのに必要なメモリの量をかなり削減することができ
る。過去の実施態様では、ページを含むPMAPのすべ
ての、ページごとのリストが維持された。これによっ
て、PMAPコードへの望ましくない再帰も導入され
た。というのは、ページを含むPMAPのリストを構成
し、維持するために、PMAPコードが、動的にメモリ
を割り振る能力を有する必要があったからである。
【0293】しかし、本発明によれば、PMAPは、そ
のデータ構造を維持するためにメモリを動的に割り振る
必要がない。共用は、テンプレート領域レベルで行われ
るので、PMAPのリストをかなり小さくすることがで
きる。タスク間で大量の共用を行うシステムでは、これ
によってかなりの節約をもたらすことができる。たとえ
ば、10ページのテンプレート領域を共用する10個の
タスクがあれば、90個のリスト要素が節約される。す
なわち、テンプレート要素を用いない場合の100個の
リスト(10ページのそれぞれに10要素のリスト)に
対して、テンプレート要素を用いる場合には10個のリ
スト(10要素のリストを有する1つの領域)である。
【0294】テンプレート領域はマッピングを表すの
で、テンプレート領域からハードウェア・データ構造を
参照することができる。多くのハードウェア実施態様で
は、2レベル以上のデータ構造が使用される。したがっ
て、実施態様を第2レベル・データ構造全体に敏感にす
ることによって、テンプレート領域をマッピングしたタ
スクが、データ構造によって表されるハードウェア・デ
ータ構造を再使用できるはずである。たとえば、インテ
ル社の386/486およびペンティアム・プロセッサ
の場合、ページ・テーブル構造は、2レベルの深さであ
る。第2レベルは、4メガバイト境界上の4メガバイト
長のメモリ領域を表す。これらのプロセッサのうちの1
つのテンプレート領域の実装では、4メガバイト(また
は4メガバイトの整数倍)のメモリ領域が作成される時
を検出することができ、複数のタスクがそれをマッピン
グする時に、ハードウェア・データ構造を作成する必要
がないことが保証される。共用されないハードウェア・
データ構造の場合であっても、この実施態様は、テンプ
レート領域が他のハードウェア・データ構造のマッピン
グの案内として役立つので、効率的になり得る。そうす
る際に、他のハードウェア・データ構造マッピングは、
元のマッピングされたハードウェア・データ構造からご
くわずかしか変化しない(おそらくは、全く変化しな
い)可能性があり、このため、将来のデータ構造の作成
が単純になり、性能の向上がもたらされる。
【0295】さらに、本発明を用いると、ページをペー
ジ・インする時の熱心なPMAP項目の効率的な実施が
可能になる。これによって、ページ障害を大幅に減らす
ことができる。ページがメモリ内にある場合、そのペー
ジに対して障害は発生しない。
【0296】テンプレート領域とタスクは、どちらもが
特殊なマイクロカーネル・オブジェクトである。すなわ
ち、これらは、互いに独立であると考えることができ
る。しかし、テンプレート領域は、タスクのアドレス空
間を定義する。タスクのアドレス空間すなわち、その基
本テンプレート領域は、そのタスクが作成される時に定
義される。
【0297】1つのタスクは、基本的に2つのテンプレ
ート領域を知っている。一方の領域は他方の領域に含ま
れるが、このタスクは内側のテンプレート領域について
知る必要があるので、それについて知らされる。この2
つのテンプレート領域は、基本テンプレート領域とユー
ザ・テンプレート領域である。基本テンプレート領域に
よって、そのタスクのアドレス空間全体が記述される。
ユーザ・テンプレート領域は、通常は基本テンプレート
領域の内側に置かれ、これによって、そのタスクのユー
ザ部分によって特殊な特権なしに(すなわち、タスク・
ポートだけが必要)操作可能なアドレス空間の部分が記
述される。これらはテンプレート領域であるから、その
タスクとシステムの正しい動作のために必要であれば、
他のテンプレート領域を含めることができる。図18で
は、R0が基本テンプレート領域である。R0には、基
本テンプレート領域に特有のもう1つのテンプレート領
域R3が含まれ、R0には、ユーザ・テンプレート領域
R1が含まれる。R1には、もう1つのテンプレート領
域R2が含まれる。このタスク内のスレッドは、これら
のテンプレート領域のどの内容にもアクセスできるが、
このタスクは、テンプレート領域R1およびR2しか操
作できないことに留意されたい。
【0298】タスクがユーザ・テンプレート領域を有す
る必要はない。この場合、タスクは、そのアドレス空間
を操作することができず、そのタスクに代わって操作を
実行する他のタスクに頼ることになる。これは、オペレ
ーティング・システム・パーソナリティが、タスクにそ
のアドレス・マップを随意変更させないようにするのに
役立つ(すなわち、アドレス・マップは、オペレーティ
ング・システム・パーソナリティに依存しなければなら
ない)。
【0299】もう一度図18を参照すると、タスクは、
2つのポインタを有するものとして図示されている。第
1のポインタは、基本領域を指し、そのタスクの全アド
レス空間(そのタスクがアクセスできるもののすべて)
を記述している。第2のポインタは、ユーザ領域(領域
に関して、ユーザ・プログラムが通常操作できるもの)
を指す。タスクの内部または基本領域の内部に、ユーザ
・プログラムからアクセス可能であるが、操作可能では
なく、非特権コードによって操作できないテンプレート
領域が存在し得ることに留意されたい。さらに留意すべ
き点として、図18には、4つの領域R0ないしR3が
ある。タスクの全アドレス空間を記述する基本領域は、
R0である。通常、この領域は、計算機アーキテクチャ
によってその特定のタイプのタスクに許される限りの大
きさになる。したがって、たとえば、ほとんどの32ビ
ット・アーキテクチャでは、基本領域が4ギガバイトの
領域を記述することになる。これは、基本領域に4ギガ
バイトの情報が含まれるという意味ではない。そうでは
なくて、タスクが4ギガバイトの情報にアクセスできる
のである。ユーザ領域は、R1によって記述される。R
1を用いると、タスク内の非特権コードが、R1の内部
の領域を操作し、領域を作成し、R1に新領域をマッピ
ングし、R1から領域のマッピングを解除することがで
きるようになる。しかし、R1は、R3に対する機能を
全く実行できない。R1は、たとえば、R3の内容をア
クセスする可能性がある(R3の特権による)が、R1
は、領域自体としてのR3について具体的に知ることは
できない。さらに、R1とR3は、R0が存在すること
を知らず、その内容も全く知らない。したがって、タス
クがそのアドレス空間内で知ることのできる唯一の領域
は、ユーザ領域によって指され、R1やR2などのユー
ザ領域に含まれる領域である。
【0300】あるシナリオでは、あるタスクのユーザ領
域が存在せず、そのタスクがそのマッピング情報を全く
変更できない環境が作成される場合がある。このタスク
は、それに代わって操作を実行するために、他のサーバ
など、他の何らかのエージェントに依存するはずであ
る。これが望ましいオペレーティング・システム環境の
1つに、それ自体のアドレス空間を操作できるアプリケ
ーション・プログラムを避けなければならない環境があ
る。
【0301】もう1つのシナリオでは、たとえばカーネ
ル自体について、ユーザ領域と基本領域の両方が、同一
の領域を指す。そうすることによって、カーネル・タス
クは、そのアドレス空間の一部だけではなく、アドレス
空間全体を操作できる。
【0302】領域をスーパーバイザ状態にエクスポート
する時には、テンプレート領域の概念を用いていくつか
のことを単純化できる。第1に、スーパーバイザ・テン
プレート領域に、新コードをロードすることができる。
第2に、スーパーバイザ・モードで走行するコードの一
部を、簡単にページ可能にすることができる。これらの
特徴のどちらもが、一般的なテンプレート領域サポート
に必要なインターフェース以外の追加インターフェース
を必要としない。
【0303】ユーザ・アクセス状態とスーパーバイザ・
アクセス状態の間でアクセス保護を維持することが重要
である。これは、プロセッサがスーパーバイザ状態であ
る時に限ってテンプレート領域をアクセスできることを
示す属性を維持することによって達成される。ユーザ・
タスクは、スーパーバイザ領域が存在することを「知
る」ことはできるが、その内容をアクセスすることはで
きない。通常、スーパーバイザ・テンプレート領域は、
テンプレート領域自体が操作されないようにするため
に、基本テンプレート領域内に置かれる。
【0304】走行中のシステムは、通常、比較的少ない
数のスーパーバイザ・テンプレート領域を有する。これ
らは、2つの可能な範疇に含まれる傾向を有する。テン
プレート領域の1つの組は、カーネル・インターフェー
ス・ライブラリを提供するための使用可能性を有するた
めに個々のタスクに固有になる傾向を有する。これは、
複数のカーネル呼出しを行うというペナルティを課すこ
となく、個々のタスクにカーネルへの専用インターフェ
ースを与える可能性を有する。これを図19に示す。
【0305】図19は、ほとんどの環境に、保護される
がタスクのアドレス空間にマッピングしなければならな
いカーネルの部分またはスーパーバイザ実体があること
を示す図である。これは、テンプレート領域に、タスク
のアドレス空間に現れるカーネルの部分をマッピングす
ることによって、テンプレート領域を用いて達成され
る。この部分は、ユーザがそれを操作できなくするため
に、基本領域にマッピングすることができる。通常、ユ
ーザ/スーパーバイザ遷移が発生する方法のために、ス
ーパーバイザの一部が、そのタスクのアドレス空間内に
あることが必要である。しかし、この部分は、ユーザま
たはアプリケーション・プログラムによってアクセス可
能にならないように保護される。さらに、この手法を用
いると、共用カーネル領域を有するだけでなく、異なる
ライブラリをインターフェース・ライブラリとしてマッ
ピングすることによって、タスクごとの基準でアプリケ
ーション・カーネル・インターフェースをカスタマイズ
することも可能になる。インターフェース・ライブラリ
も、基本領域内にあるように見え、アプリケーション・
コードによって操作できない形で保護される。これを、
図19のR5およびR6に示す。共用カーネルは、この
図の左右でR3として示されている。
【0306】マイクロカーネル自体も、カーネル・タス
クと称する1タスクであり、他のタスクと同様に、基本
テンプレート領域を有する。マイクロカーネルのタスク
基本テンプレート領域に含まれるテンプレート領域の、
すべてではないにせよほとんどは、スーパーバイザ・テ
ンプレート領域である。この基本テンプレート領域は、
別のタスクがカーネル機能にアクセスできるようにする
ために、そのタスクの基本テンプレート領域に含まれる
可能性がある。しかし、他のタスクのユーザ・テンプレ
ートとは異なり、領域は基本テンプレート領域と同一で
ある。カーネルのテンプレート領域を、まず図19に示
す。その詳細な構造の例を、図20に示す。図20は、
特定のテンプレート領域が、ワイヤリング不能であるこ
とを示す属性を有することができることを示すことによ
って、カーネルの一部を、ページ可能にすることができ
ることを示す図である。カーネルの機能は、カーネルの
テンプレート領域のうちの1つに新テンプレート領域を
マッピングすることによって拡張できる。
【0307】図20では、マイクロカーネル自体がタス
クであるから、テンプレート領域を使用してカーネル・
タスク自体を編成している。カーネル・タスクは、図2
0では同一の領域R0を指す基本ポインタおよびユーザ
・ポインタを有し、その結果、カーネル・タスクは、そ
の全アドレス空間を操作する特権を有する。カーネル・
タスクのマップ内の2つの主な副領域、R1およびR3
が図示されている。R3は、それ自体を「ワイヤリン
グ」させる属性を有し、その結果、絶対にメモリから追
い出されない。しかし、カーネルには、不在であること
が許容される部分があり、これは、その領域のページン
グを可能にする属性を有する領域R1に含まれる。した
がって、カーネル内でページ可能なコードは、ページ可
能属性をセットされたテンプレート領域に置くことがで
きる。ページ可能でないコードは、ページ可能属性をセ
ットされていないテンプレート領域に置くことができ
る。そうする際に、適当なワイヤリングされた領域また
はページ可能な領域のいずれかに新領域を単純にマッピ
ングすることによって、カーネルに新コードをロードす
ることが非常に簡単になる。
【0308】以下で、テンプレート領域内のマッピング
の例を述べる。プログラムは、オープン中にファイル・
サーバを呼び出すことができる。ファイル・サーバは、
ファイルのサイズを判定し、そのファイルを含めるのに
十分な大きさの仮想メモリ空間を表すテンプレート領域
を作成する。たとえば、ファイルが700000バイト
の場合、ファイル・サーバは、700000バイトの仮
想メモリ空間を表すテンプレート領域を作成する。ファ
イル・サーバは、そのファイルを表すのに使用するメモ
リ・オブジェクトも作成する。このメモリ・オブジェク
トは、潜在的に許可のないファイルを表し、したがっ
て、クライアントが読取り専用のファイル・オープンと
読み書き両用のファイル・オープンのどちらを望んだか
に無関係に、同一のメモリ・オブジェクトになるはずで
ある。この例には、2つのクライアントがある。一方の
クライアントは、ファイルを読取り専用としてオープン
すると決定し、もう一方のクライアントは、ファイルを
読み書き両用としてオープンする。メモリ・オブジェク
トはファイルの実際の内容を表すので、メモリ・オブジ
ェクトは1つ存在する。しかし、テンプレート領域は2
つ存在するはずである。一方のテンプレート領域には、
そのファイルの読取り専用マッピングが含まれ、もう一
方のテンプレート領域を用いると、そのオブジェクトに
書き込むことができる。
【0309】テンプレート領域のそれぞれが、データの
マッピングを表す。たとえば、第2のテンプレート領域
は、両方の領域のデータが同一であり、同一になること
が保証されるにもかかわらず、オブジェクトを読取り可
能であると同時に書込み可能にすることができる属性を
有する可能性がある。データに対して行うことができる
機能は、どちらのテンプレート領域をアクセスするかに
応じて変化する。テンプレート領域のない実施態様の場
合、メモリは、少なくとも1つのタスクにマッピングし
なければ操作できない。テンプレート領域を用いると、
タスクとメモリの直接的な関係の必要が破壊されるの
で、操作のためにメモリをタスクにマッピングする必要
がなくなることに留意されたい。さらに、タスクとメモ
リの直接的な関係の必要が破壊されているので、テンプ
レート領域によってマッピングされるメモリ領域は、テ
ンプレート領域がマッピングされるアドレス空間より大
きくてもかまわない。その際に、対応するタスクの制約
に従ってテンプレート領域をマッピングできるように、
テンプレート領域のサイズに制約を加えたり、テンプレ
ート領域を随意分割する理由はない。
【0310】第1のテンプレート領域は、オブジェクト
内のデータに対する読取り専用許可を有する。第2のテ
ンプレート領域は、メモリ・オブジェクト内のデータに
対する読み書き許可を有する。それぞれの許可に対応す
るファイルを含むデータは、メモリ・オブジェクト内に
ある。ファイル・サーバの役割には、2つの部分があ
る。第1の役割は、ファイルのマッピングを表すテンプ
レート領域とファイルを表すメモリ・オブジェクトの間
の連係を確立することである。第1テンプレート領域に
ポインタ情報が置かれ、これによって、メモリ・オブジ
ェクト・ページの位置が識別される。これに対応して、
同一のポインタ情報が第2テンプレート領域に置かれ、
メモリ・オブジェクト・ページの仮想アドレス空間内の
位置が識別される。2つのテンプレート領域の間の相違
は、第1のテンプレート領域がオブジェクト内のデータ
を読み取る許可だけを有するが、第2のテンプレート領
域がデータの読取りと書込みの両方の許可を有すること
である。
【0311】テンプレート領域の長所の1つが、同一の
オブジェクトに対して異なる属性を有する能力である。
さらに、領域をネストできるので、テンプレート領域
は、他のメモリ・オブジェクトだけでなく、他のテンプ
レート領域を指すこともできる。したがって、メモリの
テンプレート・マップを構成することができる。そうす
る際に、テンプレート領域によって記述される情報をア
クセスするために、そのデータをアクセスするのに必要
なハードウェア・マッピングを確立するための明瞭に構
成された適度な組のポインタ情報が存在する。たとえ
ば、インテル・アーキテクチャ計算機上には、前に満た
されたページ・テーブルまたはページ・テーブルの部分
が存在する可能性がある。あるアドレス空間を実際にテ
ンプレート領域にマッピングしたい場合、その作業は、
ページ・テーブル・データ構造を完全に作るのではな
く、ページ・テーブル・データ構造の一部を指すだけの
簡単なことになるはずである。
【0312】下の表1ないし表14で、タスクおよびテ
ンプレート領域の作成と操作に関連するカーネル呼出し
を説明する。
【0313】テンプレートの作成と操作に関連して使用
されるカーネル呼出しは、オブジェクト指向ユーザ・プ
ログラム内で指定できる。オブジェクト指向プログラム
は、2つの主要部分すなわち、オブジェクト定義部分と
命令ストリーム部分に分割される。ユーザ・プログラム
のオブジェクト定義部分には、命令ストリーム内の命令
に関連するプログラム・オブジェクトを定義するための
オブジェクト定義テーブルが含まれる可能性がある。ユ
ーザは、カーネル呼出しを使用して、マイクロカーネル
・アドレス空間内でテンプレート領域を作成し、メモリ
102内でタスクを生成して、ユーザの意図したプログ
ラムの目的を実行する。ユーザは、自分のプログラム
に、表1ないし表14に記載されたカーネル呼出しを含
めて、テンプレート領域とそれによって定義されるタス
クを作成し、操作する。表1ないし表5に示されたカー
ネル呼出しを用いると、タスクがテンプレート領域の概
念を利用できるようになる。表6ないし表14のカーネ
ル呼出しは、テンプレート領域の操作に必要なプリミテ
ィブ・テンプレート領域動作である。これらのカーネル
呼出しは、マイクロカーネル120、パーソナリティ・
ニュートラル・サービス140、パーソナリティ・サー
バ150またはアプリケーション・プログラム180に
よって発行可能である。テンプレート領域の操作のため
の高水準関数は、表1ないし表14に記載のプリミティ
ブ動作の組合せから作成できる。表1ないし表14に記
載されたタスク動作およびテンプレート領域動作は、次
の通りである。 ・表1 task_create タスクの作成と命名 ・表2 task_set_base_region タスクの基本領域のセ
ット ・表3 task_get_base_region タスクの基本領域のゲ
ット ・表4 task_set_user_region タスクのユーザ領域の
セット ・表5 task_get_user_region タスクのユーザ領域の
ゲット ・表6 region_create_nestable 他のテンプレート領
域を含むことのできるテンプレート領域の作成 ・表7 region_create_leaf メモリ・オブジェクトを
参照するテンプレート領域の作成 ・表8 region_map_into 小さいテンプレート領域の
より大きいテンプレート領域へのマッピング ・表9 region_set_attributes テンプレート領域の
属性のセット ・表10 region_get_attributes テンプレート領域
の属性のゲット ・表11 region_object_attach リーフ(leaf)・テ
ンプレート領域へのメモリ・オブジェクトの付加 ・表12 region_copy あるテンプレートの内容の別
のテンプレートへのコピー ・表13 region_get_phys_addrs テンプレート領域
を構成する物理ページのリストのゲット ・表14 region_attr_t 異なる領域属性の定義 表1ないし表14を参照すれば、本発明によるタスク動
作およびテンプレート領域動作の実行に必要な例のカー
ネル呼出しの詳細な説明が得られる。
【0314】
【表1】 解説 これは、領域の概念が導入された時に現行の関数task_c
reateをどのように変更できるかの例である。関数task_
createは、parent_taskから新タスクを作成し、新タス
クの名前をchild_taskに返す。子タスクのアドレス空間
は、parent_taskの基本領域と供給されたuser_regionに
基づいて確立される。子タスクのuser_regionは、その
基本領域のオフセットuser_starting_offsetにマッピン
グされる。子タスクには、当初はスレッドが含まれな
い。子タスクは、親タスクのセキュリティ・トークンを
継承する。子タスクは、タスク作成時に作成またはコピ
ーされる下記の特殊ポートを受け取る。 ・[タスク自己ポート] カーネルが新子タスクを知
り、それの操作を可能にするのに使用するポート。子タ
スクは、このポートへの送出権を保持する。このポート
名は、呼出し側のタスクにも返される。 ・[ブートストラップ・ポート] 子タスクが、必要な
システム・サービス・ポートからの返しを要求するメッ
セージを送ることができるポート。子タスクは、親タス
クからこのポートの送出権を継承する。タスクは、task
_set_special_portを使用してこのポートを変更でき
る。 ・[ホスト自己ポート] 子タスクがそのホストに関す
る情報を要求するのに使用するポート。子タスクは、親
ポートからこのポートの送出権を継承する。 ・[基本領域ポート] 子タスクの基本領域を記述する
ポート。このポートによって命名される領域は、親タス
クの基本領域のコピーか、親タスクの基本領域への参照
のいずれかである。親の領域のコピーは、この基本領域
に対する変更のすべてが、個々のタスクの私用であるこ
とを意味する。すなわち、これは、親の基本領域とは別
個の領域であるが、親タスクと同一のサイズ、属性およ
びマッピングされた領域(ユーザ領域を除く)を有す
る。子の基本領域が親の基本領域への参照である場合、
基本領域に対する変更のすべてが、両方のタスクから可
視である。これは、そのタスクのユーザ領域が、基本領
域にマッピングされることを意味する。したがって、ユ
ーザ領域は、異なる開始オフセットにある必要がある。
両方のタスクのユーザ領域が同一の領域である場合は、
ユーザ領域が同一の開始オフセットにあってかまわない
特殊な例である。このポートは、task_get_base_region
を介してアクセス可能である。 ・[ユーザ領域ポート] 子タスクのユーザ領域を記述
するポート。このポートによって命名される領域は、us
er_regionによって記述される領域である。子タスクと
親タスクのユーザ領域の間に存在し得る唯一の関係は、
呼出し側によって決定される。このポートは、task_get
_user_regionを介してアクセス可能である。 パラメータ ・parent_task [入力、タスク・ポート]子タスクのポート権と基本領
域を引き出すためのタスク用のポート。 ・user_region [入力、領域ポート]タスクのユーザ・アドレスを記述
するのに使用される、領域用のポート。 ・user_starting_offset [入力、vmオフセット]タスクの基本領域内でユーザ
領域を置くオフセット。 ・copy_base [入力、論理値]この子タスクの基本領域が親の基本領
域のコピーであるか、親の基本領域への追加参照である
かを示す。 ・child_task [出力、タスク・ポートを指すポインタ]新タスクのた
めにカーネルが割り当てたポート名。 戻り値
【0315】
【表2】 解説 関数task_set_base_regionは、タスクがそのアドレス空
間の記述であるとみなす領域をセットする。この領域へ
のアクセスが必要になるのは、タスクが非ユーザ領域を
何らかの形で操作しようとする場合である。これは、タ
スクがその基本領域内で見るものの内容をタスクごとの
基準で管理するのに使用できる。タスクの基本領域に
は、通常は、スーパーバイザ属性を有する領域が含ま
れ、カーネルがタスクの基本領域にマッピングされた領
域に含まれ、タスクの基本領域の操作が、システム動作
とセキュリティに関係がある可能性があるので、この関
数は、ホスト特権ポートへのアクセスを必要とする特権
関数である。 パラメータ ・task [入力、タスク・ポート]基本領域を所望されるタスク
のポート。 ・host_priv_port [入力、ホスト特権ポート]ホスト特権ポートのポー
ト。 ・region [入力、領域ポート]タスクの全アドレス空間を表す領
域のポート。 戻り値
【0316】
【表3】 解説 関数task_get_base_regionは、タスクの全アドレス空間
を記述する領域を記述するポートを返す。この領域への
アクセスが必要になるのは、タスクが非ユーザ領域を何
らかの形で操作しようとする場合である。この関数は、
タスクがその基本領域で見るものの内容をタスクごとの
基礎で管理するのに使用できる。タスクの基本領域に
は、通常は、スーパーバイザ属性を有する領域が含ま
れ、カーネルがタスクの基本領域にマッピングされた領
域に含まれ、タスクの基本領域の操作が、システム動作
とセキュリティに関係がある可能性があるので、この関
数は、ホスト特権ポートへのアクセスを必要とする特権
関数である。 パラメータ ・task [入力、タスク・ポート]基本領域を所望されるタスク
のポート。 ・host_priv_port [入力、ホスト特権ポート]ホスト特権ポートのポー
ト。 ・region [出力、領域ポートを指すポインタ]タスクの全アドレ
ス空間を表す領域のポート。 戻り値
【0317】
【表4】 解説 関数task_set_user_regionは、タスクが操作を許可され
る領域でタスクを「指す」。この領域は、この呼出しを
発行する前にタスクの基本領域にマッピングされていな
ければならない。 パラメータ ・task [入力、タスク・ポート]ユーザ領域を変更されるタス
クのポート。 ・region [入力、領域ポート]タスクのユーザ操作可能アドレス
空間を表す領域のポート。 戻り値
【0318】
【表5】 解説 関数task_get_user_regionは、タスクのタスク・アドレ
ス空間のユーザ操作可能領域を記述するポートを返す。
この領域へのアクセスが必要になるのは、タスクがその
アドレス空間を何らかの形で操作しようとする場合であ
る。 パラメータ ・task [入力、タスク・ポート]ユーザ領域を所望されるタス
クのポート。 ・region [出力、領域ポートを指すポインタ]タスクのユーザ操
作可能アドレス空間を表す領域のポート。 戻り値
【0319】
【表6】 解説 「親」領域から新しい領域を作成する。親領域は、新た
に作成される領域に制限を課すのに使用される。親より
大きい子領域を作成することはできない。子領域は、親
領域の属性も継承する。作成の後、子領域を他のネスト
可能領域にマッピングすることができる。子領域は、当
初は他の領域にマッピングされていない。新たに作成さ
れる領域は、他の領域を含むことができる領域である。
メモリ・オブジェクトは、ネスト可能領域に直接にマッ
ピングすることができない。 パラメータ ・parent_region [入力、領域ポート]新領域を作成する元の「親」領域
に対する参照。新領域は、許可またはサイズに関して、
親によって記述されるものを超えることはできない。 ・region_size [入力、vmサイズ]新領域が有することになるサイ
ズ。 ・child_region [出力、領域ポートを指すポインタ]新たに作成された
領域の名前。 戻り値 ・NOT_A_REGION parent_regionが、システムに既知の領域でない。 ・BAD_SIZE 新領域のために指定されたregion_sizeが、parent_regi
onのサイズより大きい。
【0320】
【表7】 region_create_leaf 機能 メモリ・オブジェクトを参照するテンプレート領域の作成 摘要 kern_return_t region_create_leaf( mach_port_t parent_region, vm_size_t region_size, mach_port_t *new_region); 解説 「親」領域から新しい領域を作成する。親領域は、新た
に作成される領域に制限を課すのに使用される。親より
大きい子領域を作成することはできない。子領域は、親
領域の属性も継承する。作成の後、子領域を他のネスト
可能領域にマッピングすることができる。子領域は、当
初は他の領域にマッピングされていない。新たに作成さ
れる領域は、メモリ・オブジェクトまたはメモリ・オブ
ジェクトの一部をネスト可能領域にマッピングするのに
使用することができる。リーフ(leaf)領域は、メモリ
・オブジェクトの一部を記述するのに使用される。これ
は、1つのメモリ・オブジェクトだけを記述することが
できる。他の領域を含めることはできない。 パラメータ ・parent_region [入力、領域ポート]新領域を作成する元の「親」領域
に対する参照。新領域は、許可またはサイズに関して、
親によって記述されるものを超えることはできない。 ・region_size [入力、vmサイズ]新領域が有することになるサイ
ズ。 ・new_region [出力、領域ポートを指すポインタ]新たに作成された
領域の名前。 戻り値 ・NOT_A_REGION parent_regionが、システムに既知の領域でない。 ・BAD_SIZE 新領域のために指定されたregion_sizeが、parent_regi
onのサイズより大きい。
【0321】
【表8】 region_map_into 機能 小さいテンプレート領域のより大きいテンプレート領域へのマッピング 摘要 kern_return_t region_map_into( mach_port_t into_region, vm_offset_t *into_region_offset, mach_port_t from_region, region_placement_t placement); 解説 関数region_map_intoは、小さな領域をとり、これをよ
り大きな領域の一部にマッピングする。from_regionをi
nto_region内のどこに置くかに関してinto_region_offs
etを解釈する方法を指定する複数のオプションが、plac
ementによって指定される。 パラメータ ・into_region [入力、領域ポート]小さな領域がマッピングされる、
より大きな領域を指定する。 ・into_region_offset [入出力、vmオフセットを指すポインタ]入力として
は、from_regionをinto_regionに置くための位置を探し
始める開始オフセットを指定する。出力としては、from
_regionがマッピングされたinto_region内のオフセット
が格納される。 ・from_region [入力、領域ポート]より大きな領域にマッピングされ
る小さな領域を指定する。 ・placement [入力、領域配置]into_region内でfrom_region用の位
置を選択する方法を指定する。 戻り値 ・NOT_A_REGION from_regionまたはinto_regionが、システムに既知の領
域でない。このエラーは、into_regionがリーフ(lea
f)領域の場合にも発生する。 ・BAD_OFFSET into_region_offsetが、into_regionのサイズより大き
い。このエラーは、from_region + info_region_offset
のサイズがinto_regionのサイズより大きい場合にも発
生する。
【0322】
【表9】 解説 関数region_set_attributesは、ある領域の絶対属性を
セットする。領域の有効属性は、その領域がマッピング
される領域によって決定される。1つの領域を複数の領
域にマッピングすることができるので、1つの領域が、
複数の有効属性の組を有する可能性がある。この関数
は、「特権」属性は全くセットできない。 パラメータ ・region [入力、領域ポート]属性をセットする領域。 ・attributes [入力、領域属性]領域に割り当てられる属性。 ・attribute_mask [入力、領域属性マスク]どの属性を変更するかを示
す。 戻り値 ・NOT_A_REGION regionが、システムに既知の領域ではない。 ・BAD_ATTRIBUTE 指定された属性のうちの1つまたは複数をセットできな
かった。通常、これが発生するのは、この関数を用いて
特権属性をセットしようとした時である。
【0323】
【表10】 解説 関数region_get_attributesは、指定された領域の属性
を返す。この関数は、領域に関してセットされた属性を
返す。領域は、その領域に関してセットされた属性と、
それを含む領域の属性とに基づく有効属性の組を有す
る。1つの領域を複数の領域に含めることができるの
で、1つの領域が複数の有効属性の組を有する可能性が
ある。 パラメータ ・region [入力、領域ポート]属性を返すべき領域。 ・attributes [出力、領域属性を指すポインタ]指定された領域の属
性。 戻り値 ・NOT_A_REGION regionが、システムに既知の領域ではない。
【0324】
【表11】 region_object_attach 機能 「リーフ(leaf)」領域へのメモリ・オブジェクトの付加 摘要 kern_return_t region_object_attach( mach_port_t region, mach_port_t memory_object, vm_offset_t memory_object_offset); 解説 関数region_object_attachは、指定されたオフセットか
ら始まるメモリ・オブジェクトを領域に関連付ける。領
域と実際の記憶域の間の連係を最終的に確立するのは、
この関数である。記憶域は、メモリ・オブジェクトの内
容によって表現される。一旦領域が付加されたならば、
もう一度付加することは絶対にできない(region_objec
t_detachを実行した場合であっても)という議論があ
る。その理由は、これによってメモリ・オブジェクトへ
のアクセスが制限され、「ランダム」なタスクがメモリ
・オブジェクトのどの部分もマッピングできなくなるは
ずであるということである。これに対する反論は、現在
は領域からメモリ・オブジェクトを得る方法がないの
で、付加(最初の1回を含む)は、いずれにせよ全メモ
リ・オブジェクトへのアクセス権を有するタスクでなけ
れば行えないというものである。ある領域の付加と切離
しを複数回行えるようにすることによって、1つの領域
が、メモリ・オブジェクトへの「制御された」窓として
働くことが可能になるはずである。その窓は、そのメモ
リ・オブジェクトについて知っている、何らかの「信頼
される」エージェントによってのみ移動可能である。信
頼されない実体は、リーフ領域へのアクセス権だけを有
するはずである。 パラメータ ・region [入力、領域ポート]メモリ・オブジェクトを付加する
リーフ領域。 ・memory_object [入力、メモリ・オブジェクト・ポート]供給されたリ
ーフ領域に付加されるメモリ・オブジェクト。 ・memory_object_offset [入力、vmオフセット]供給されたリーフ領域によっ
てマッピングされる、メモリ・オブジェクト内の開始オ
フセット。 戻り値 ・NOT_A_REGION regionが、システムに既知の領域ではない。このエラー
は、regionがリーフ領域でない場合にも発生する。 ・BAD_OFFSET memory_object_offsetが、memory_objectのサイズより
大きい。このエラーは、region + memory_object_offse
tのサイズがmemory-objectのサイズより大きい場合にも
発生する。
【0325】
【表12】 解説 関数region_copyは、from_regionからto_regionへ情報
をコピーする。コピーの規則は、from_regionとto_regi
onの両方が、コピーの範囲に関してそれらを二重書きす
るメモリ・オブジェクトを有する必要がある、というも
のである。コピー範囲を二重書きするメモリ・オブジェ
クトが、単一のメモリ・オブジェクトである必要はな
い。二重書きされない「穴」が存在しないことだけが必
要である。コピーは、region_copyがリターンした時
に、データのすべてがto_regionにコピー済になってい
るような形で実行される。from_regionおよびto_region
を、コピーの実行を所望するタスクにマッピングする必
要はない。 パラメータ ・from_region [入力、領域ポート]データのコピー元の領域。 ・from_region_offset [入力、vmオフセット]from_region内の、コピーを
開始する位置の開始オフセット。 ・to_region [入力、領域ポート]データのコピー先の領域。 ・to_region_offset [入力、vmオフセット]to_region内の、最初のデー
タを置く位置の開始オフセット。 ・copy_amount [入力、vmサイズ]from_regionからコピーしてto_re
gionに置くバイト数。 戻り値 ・NOT_A_REGION from_regionまたはto_regionが、システムに既知の領域
ではない。 ・BAD_OFFSET from_region_offsetが、from_regionのサイズより大き
い。to_region_offsetが、to_regionのサイズより大き
い。from_region_offset + copy_amountが、from_regio
nのサイズより大きい。to_region_offset + copy_amoun
tが、to_regionのサイズより大きい。 ・NO_DATA このコピーに含まれるfrom_regionまたはto_regionの一
部が、データを有しない(すなわち、下層のメモリ・オ
ブジェクトがない)場合に、このエラーが返される。
【0326】
【表13】 解説 関数region_get_phys_addrsは、regionに含まれるペー
ジのすべての物理ページ・アドレスの配列を返す。関数
region_get_phys_addrsが意味のある情報を返すために
は、regionの有効属性が、REGION_WIRE_TRANSLATIONが
真である(すなわち、regionがワイヤリングされ、その
物理アドレスが固定されている)ような形にセットされ
ていなければならない。そうでない場合には、エラーが
返される。region_get_phys_addrsは、物理アドレスを
得るために必要な場合には、regionに含まれる領域のす
べてを再帰的に検査することに留意されたい。 パラメータ ・region [入力、領域ポート]物理ページ・アドレスのリストが
返される領域。 ・phys_addr_list [出力、物理アドレスの動的配列を指すポインタ]示さ
れた領域を表す物理ページのリスト。 ・phys_addr_list_count [入出力、スカラを指すポインタ]指定された領域に含
まれる物理ページ数。 戻り値 ・NOT_A_REGION regionが、システムに既知の領域ではない。 ・NOT_FIXED regionがワイヤリングされていないので、ページが固定
された物理アドレスになく、したがって、物理アドレス
のリストを返す意味がない。
【0327】
【表14】 解説 構造体region_attr_tには、関数region_get_attribute
s、region_set_attributesおよびregion_set_priv_attr
ibutesによって1領域に対してセットでき、検索できる
属性のすべてが含まれる。region_attr_tの各フィール
ドは、個別の属性を表す。各属性を、下で説明し、特権
属性である場合の属性の意味と、その継承規則を解説す
る。 フィールド ・access この属性は、その領域に対して許されるアクセス許可を
示す。これは、非特権属性である。この属性の有効値
は、外側領域に向かって伝播する。この属性の有効値
は、外側領域からこの属性の有効値をとり、含まれる領
域の属性との論理和関数を実行することによって決定さ
れる。 ・cache_attr この属性は、その領域のキャッシュ属性を示す。キャッ
シュ属性は、どのハードウェア・キャッシュ特性である
べきかを示す。これは特権属性である。これは入出力ワ
イヤリング特権を必要とする。この属性の有効値は、内
側領域に向かって伝播する。この属性の有効値は、特定
のページの組に関する最小のキャッシュ可能性によって
決定される。すなわち、有効値は、あるメモリ・オブジ
ェクトの同一の区域をマッピングする領域のすべてによ
って決定される。 ・discardable この属性は、その領域が破棄可能であることを示す。破
棄可能とは、この領域に対して関数region_discardを発
行できることを意味する。これは非特権属性である。こ
の属性の有効値は、外側領域に向かって伝播する。この
属性の有効値は、外側領域からこの属性の有効値をと
り、含まれる領域の属性との論理和関数を実行すること
によって決定される。たとえば、外側領域が破棄可能で
あり、囲まれる領域がそうでない場合、外側領域に対し
てregion_discardを発行することはできない。 ・eager_backing この属性は、メモリ・オブジェクトをリーフ領域に付加
する時に補助記憶を割り振らなければならないことを示
す。これは非特権属性である。この属性の有効値は、内
側領域に向かって伝播する。すなわち、外側領域のeage
r_backingがセットされている場合、それに含まれる領
域のすべてが、eager_backingがセットされているかの
ように扱われる。 ・paging_hint この属性は、指示された領域に関するカーネル・ページ
ングのアドバイスを与える。これは非特権属性である。
この属性の有効値は、属性がセットされた時点で内側領
域に伝播する。 ・privileged この属性は、この領域に関する要求を満足するために、
予約済みページ・プールからメモリを割り振ることがで
きることを示す。これは、ホスト制御ポートを必要とす
る特権属性である。この属性の有効値は、この属性がセ
ットされている外側領域によって含まれる内側領域に伝
播する。 ・physically_contiguous この属性は、この領域に含まれるメモリが物理的に連続
していなければならないことを示す。これは、入出力ワ
イヤリング制御ポートを必要とする特権属性である。こ
の属性の有効値は、この属性がセットされている外側領
域によって囲まれる内側領域に伝播する。 ・supervisor この属性は、セットされている時には領域がスーパーバ
イザ領域であり、そうでない時にはユーザ領域であるこ
とを示す。これは、ホスト特権ポートを必要とする特権
属性である。この属性は、外側領域から内側領域へ伝播
する。 ・vm_behavior この属性は、指示された領域に関して期待されるアクセ
ス・パターンのヒントをカーネルに与える。これは非特
権属性である。この属性の有効値は、属性がセットされ
る時点で内側領域に伝播する。 ・wire_attr この属性は、この領域に関するページ可能性を示す。こ
れは、入出力ワイヤリング制御ポートを必要とする特権
属性である。この属性の有効値は、外側領域に含まれる
内側領域に伝播する。 ・inheritance この属性は、この領域に関する継承を示す。この属性
は、プリミティブ領域動作によって使用されないが、領
域関数の上に作成される高水準関数にとって役に立つ可
能性のある情報を提供できる。
【0328】本発明の具体的な実施例を開示してきた
が、当業者であれば、本発明の趣旨および範囲から逸脱
することなく、その具体的な実施例に変更を加えること
ができることを理解するであろう。
【0329】まとめとして、本発明の構成に関して以下
の事項を開示する。
【0330】(1)データ処理システムのメモリ内でタ
スク・コンテナを作成するために、前記メモリにマイク
ロカーネルをロードするステップと、仮想アドレス空間
を定義する属性の組を有し、メモリ・オブジェクトを指
すテンプレート・ポインタを有するテンプレート領域
を、前記メモリ内の特殊オブジェクトとして前記マイク
ロカーネルを用いて形成するステップと、前記テンプレ
ート領域を前記タスク・コンテナにマッピングすること
によって、前記属性の組を有し前記テンプレート領域を
指すタスク・ポインタを有するタスク・コンテナを前記
メモリ内に前記マイクロカーネルを用いて形成するステ
ップと、前記テンプレート・ポインタと前記タスク・ポ
インタとによって、前記タスク・コンテナと前記メモリ
・オブジェクトとの間の第1関係を確立するステップ
と、前記メモリ・オブジェクトを指す前記テンプレート
・ポインタを修正するために前記テンプレート領域に対
する仮想記憶動作を実行し、これによって、前記タスク
・コンテナと前記メモリ・オブジェクトとの間の第2関
係を確立するステップとを含む、マイクロカーネル・ア
ーキテクチャ・データ処理システムのためのメモリ管理
方法。 (2)前記メモリ・オブジェクトが、前記メモリ内の物
理アドレスに対する仮想アドレスのマップであり、第1
メモリ・オブジェクトへの第1アドレス変換と第2メモ
リ・オブジェクトへの第2アドレス変換とを含み、前記
方法がさらに、前記テンプレート・ポインタによって、
前記記憶動作の前に前記第1アドレス変換を指し、前記
タスク・コンテナと前記第1メモリ・オブジェクトとの
間の前記第1関係を確立するステップと、前記テンプレ
ート・ポインタによって、前記記憶動作の後に前記第2
アドレス変換を指し、前記タスク・コンテナと前記第2
メモリ・オブジェクトとの間の前記第2関係を確立する
ステップとを含むことを特徴とする、上記(1)に記載
のマイクロカーネル・アーキテクチャ・データ処理シス
テムのためのメモリ管理方法。 (3)前記メモリ・オブジェクトが、第2テンプレート
領域であり、前記方法がさらに、前記テンプレート・ポ
インタによって、前記記憶動作の前に前記第2テンプレ
ートを指し、前記タスク・コンテナと前記第2テンプレ
ートとの間の前記第1関係を確立するステップと、前記
テンプレート・ポインタによって、前記記憶動作の後に
第3テンプレート領域を指し、前記第2関係を確立する
ステップとを含むことを特徴とする、上記(1)に記載
のマイクロカーネル・アーキテクチャ・データ処理シス
テムのためのメモリ管理方法。 (4)前記メモリ内に前記タスク・コンテナを形成する
前記ステップが、さらに、通信チャネルとして使用する
ため、前記タスク・コンテナ用の前記メモリ内に前記マ
イクロカーネルを用いてポート名前空間を形成するステ
ップと、前記テンプレート領域の前記属性の組を使用し
て、前記タスク・コンテナの前記ポート名前空間に関す
るアクセス権を、前記マイクロカーネルを用いて定義す
るステップとを含むことを特徴とする、上記(1)に記
載のマイクロカーネル・アーキテクチャ・データ処理シ
ステムのためのメモリ管理方法。 (5)前記メモリ内に前記タスク・コンテナを形成する
前記ステップが、さらに、前記タスク・コンテナの前記
アドレス空間から命令を取り出すため、前記タスク・コ
ンテナ用の前記メモリ内に前記マイクロカーネルを用い
てスレッド・オブジェクトを形成するステップを含むこ
とを特徴とする、上記(1)に記載のマイクロカーネル
・アーキテクチャ・データ処理システムのためのメモリ
管理方法。 (6)前記テンプレート領域が、基本領域とユーザ領域
とを含み、前記メモリ内に前記テンプレート領域を形成
する前記ステップが、さらに、基本属性の組を有するテ
ンプレート基本領域を、前記メモリ内の特殊オブジェク
トとして前記マイクロカーネルを用いて形成するステッ
プと、ユーザ属性の組を有するテンプレート・ユーザ領
域を、前記メモリ内の特殊オブジェクトとして前記マイ
クロカーネルを用いて形成するステップとを含み、前記
メモリ内に前記タスク・コンテナを形成する前記ステッ
プが、さらに、基本仮想アドレス空間と前記基本属性の
組とを有し、前記テンプレート基本領域を指すタスク基
本ポインタを有するタスク基本コンテナを、前記テンプ
レート基本領域を前記タスク基本コンテナにマッピング
することによって、前記メモリ内で前記マイクロカーネ
ルを用いて形成するステップと、ユーザ仮想アドレス空
間と前記ユーザ属性の組とを有し、前記テンプレート・
ユーザ領域を指すタスク・ユーザ・ポインタを有するタ
スク・ユーザ・コンテナを、前記テンプレート・ユーザ
領域を前記タスク・ユーザ・コンテナにマッピングする
ことによって、前記メモリ内で前記マイクロカーネルを
用いて形成するステップと、前記テンプレート基本領域
に対して、前記タスク基本ポインタによる前記タスク基
本コンテナ内の効果を有する仮想記憶動作を実行するス
テップとを含むことを特徴とする、上記(1)に記載の
マイクロカーネル・アーキテクチャ・データ処理システ
ムのためのメモリ管理方法。 (7)前記テンプレート・ユーザ領域に対して仮想記憶
動作を実行するステップをさらに含み、前記仮想記憶動
作が、前記タスク・ユーザ・ポインタによる前記タスク
・ユーザ・コンテナ内の効果を有することを特徴とす
る、上記(6)に記載のマイクロカーネル・アーキテク
チャ・データ処理システムのためのメモリ管理方法。 (8)前記メモリ内に前記タスク基本コンテナを形成す
る前記ステップが、さらに、通信チャネルとして使用す
るため、前記タスク基本コンテナ用の前記メモリ内で前
記マイクロカーネルを用いて前記ポート名前空間を形成
するステップと、前記テンプレート基本領域の前記基本
属性の組を使用して、前記タスク基本コンテナの前記ポ
ート名前空間に関するアクセス権を、前記マイクロカー
ネルを用いて定義するステップとを含むことを特徴とす
る、上記(6)に記載のマイクロカーネル・アーキテク
チャ・データ処理システムのためのメモリ管理方法。 (9)前記メモリ内に前記タスク基本コンテナを形成す
る前記ステップが、さらに、前記タスク基本コンテナの
前記アドレス空間から命令を取り出すため、前記タスク
基本コンテナ用の前記メモリ内で前記マイクロカーネル
を用いてスレッド・オブジェクトを形成するステップを
含むことを特徴とする、上記(6)に記載のマイクロカ
ーネル・アーキテクチャ・データ処理システムのための
メモリ管理方法。 (10)データ処理システムのメモリ内にタスク・コン
テナを作成するため、前記メモリにマイクロカーネルを
ロードするステップと、第1サイズと属性の第1組とを
有するテンプレート基本領域を、前記メモリ内の特殊オ
ブジェクトとして前記マイクロカーネルを用いて形成す
るステップと、前記第1サイズと前記属性の第1組とを
有するタスク基本コンテナを、前記テンプレート基本領
域を前記タスク基本コンテナにマッピングすることによ
って、前記マイクロカーネルを用いて前記メモリ内で形
成するステップと、第2サイズと属性の第2組とを有す
るテンプレート・ユーザ領域を、前記メモリ内の特殊オ
ブジェクトとして前記マイクロカーネルを用いて形成す
るステップと、前記テンプレート・ユーザ領域を前記タ
スク・ユーザ・コンテナの前記タスク基本コンテナ内の
位置にマッピングすることによって、前記マイクロカー
ネルを用いて前記メモリ内の前記タスク基本コンテナ内
で、前記第2サイズと前記属性の第2組とを有するタス
ク・ユーザ・コンテナを形成するステップと、前記マッ
ピングによる前記タスク基本コンテナ内の影響を有する
仮想記憶動作を、前記テンプレート基本領域に対して実
行するステップとを含む、マイクロカーネル・アーキテ
クチャ・データ処理システムのためのメモリ管理方法。 (11)データ処理システムのメモリ内にタスク・コン
テナを作成するための、前記メモリ内のマイクロカーネ
ルと、仮想アドレス空間を定義する属性の組を有し、メ
モリ・オブジェクトを指すテンプレート・ポインタを有
する、前記メモリ内の特殊オブジェクトとしてのテンプ
レート領域と、前記属性の組を有し、前記テンプレート
領域を指すタスク・ポインタを有するタスク・コンテナ
であって、前記テンプレート領域を前記タスク・コンテ
ナにマッピングすることによって形成される、前記メモ
リ内の前記タスク・コンテナと、前記テンプレート・ポ
インタと前記タスク・ポインタとが、前記タスク・コン
テナと前記メモリ・オブジェクトとの間の第1関係を確
立することと、前記メモリ・オブジェクトを指す前記テ
ンプレート・ポインタを修正するために前記テンプレー
ト領域に対して仮想記憶動作を実行し、これによって前
記タスク・コンテナと前記メモリ・オブジェクトとの間
の第2関係を確立するための手段とを含む、マイクロカ
ーネル・アーキテクチャ・データ処理システム。 (12)前記メモリ・オブジェクトが、前記メモリ内の
物理アドレスに対する仮想アドレスのマップであり、第
1メモリ・オブジェクトへの第1アドレス変換と、第2
メモリ・オブジェクトへの第2アドレス変換とを含み、
前記テンプレート・ポインタが、前記記憶動作の前に、
前記第1アドレス変換を指し、前記タスク・コンテナと
前記第1メモリ・オブジェクトとの間の前記第1関係を
確立し、前記テンプレート・ポインタが、前記記憶動作
の後に、前記第2アドレス変換を指し、前記タスク・コ
ンテナと前記第2メモリ・オブジェクトとの間の前記第
2関係を確立することを特徴とする、上記(11)に記
載のマイクロカーネル・アーキテクチャ・データ処理シ
ステム。 (13)前記メモリ・オブジェクトが第2テンプレート
領域であり、さらに、前記テンプレート・ポインタが、
前記記憶動作の前に、前記第2テンプレートを指し、前
記タスク・コンテナと前記第2テンプレートとの間の前
記第1関係を確立し、前記テンプレート・ポインタが、
前記記憶動作の後に、第3テンプレート領域を指し、前
記第2関係を確立することを特徴とする、上記(11)
に記載のマイクロカーネル・アーキテクチャ・データ処
理システム。 (14)前記メモリ内の前記タスク・コンテナが、さら
に、前記タスク・コンテナ用の前記メモリ内のポート名
前空間であって、前記テンプレート領域の前記属性の組
を使用して定義される、前記タスク・コンテナの前記ポ
ート名前空間に関するアクセス権を有し、通信チャネル
として使用するための前記ポート名前空間を含むことを
特徴とする、上記(11)に記載のマイクロカーネル・
アーキテクチャ・データ処理システム。 (15)前記メモリ内の前記タスク・コンテナが、さら
に、前記タスク・コンテナの前記アドレス空間から命令
を取り出すための、前記タスク・コンテナ用の前記メモ
リ内のスレッド・オブジェクトを含むことを特徴とす
る、上記(11)に記載のマイクロカーネル・アーキテ
クチャ・データ処理システム。 (16)データ処理システムのメモリ内にタスク・コン
テナを作成するため、前記メモリにマイクロカーネルを
ロードするステップと、前記データ処理システムの前記
メモリに、選択されたオペレーティング・システム・パ
ーソナリティ・プログラムをロードするステップと、仮
想アドレス空間を定義する属性の組を有し、メモリ・オ
ブジェクトを指すテンプレート・ポインタを有するテン
プレート領域を、前記メモリ内の特殊オブジェクトとし
て形成するために、前記選択されたオペレーティング・
システム・パーソナリティ・プログラムから前記カーネ
ルに呼出しを送るステップと、前記属性の組を有し、前
記テンプレート領域を指すタスク・ポインタを有する前
記タスク・コンテナを、前記テンプレート領域を前記タ
スク・コンテナにマッピングし、前記テンプレート・ポ
インタと前記タスク・ポインタによって前記タスク・コ
ンテナと前記メモリ・オブジェクトとの間の第1関係を
確立することによって、前記メモリ内で前記マイクロカ
ーネルを用いて形成するステップと、前記メモリ・オブ
ジェクトを指す前記テンプレート・ポインタを修正する
ため前記テンプレート領域に対する仮想記憶動作を実行
し、これによって、前記タスク・コンテナと前記メモリ
・オブジェクトとの間の第2関係を確立するステップと
を含む、マイクロカーネル・アーキテクチャ・データ処
理システム内で選択されたオペレーティング・システム
・パーソナリティ・プログラムを走行させる方法。 (17)前記メモリ・オブジェクトが、前記メモリ内の
物理アドレスに対する仮想アドレスのマップであり、第
1メモリ・オブジェクトへの第1アドレス変換と、第2
メモリ・オブジェクトへの第2アドレス変換とを含み、
前記方法がさらに、前記テンプレート・ポインタによっ
て、前記記憶動作の前に、前記第1アドレス変換を指
し、前記タスク・コンテナと前記第1メモリ・オブジェ
クトとの間の前記第1関係を確立するステップと、前記
テンプレート・ポインタによって、前記記憶動作の後
に、前記第2アドレス変換を指し、前記タスク・コンテ
ナと前記第2メモリ・オブジェクトとの間の前記第2関
係を確立するステップとを含むことを特徴とする、上記
(16)に記載のマイクロカーネル・アーキテクチャ・
データ処理システム内で選択されたオペレーティング・
システム・パーソナリティ・プログラムを走行させる方
法。 (18)前記メモリ・オブジェクトが第2テンプレート
領域であり、前記方法がさらに、前記テンプレート・ポ
インタによって、前記記憶動作の前に、前記第2テンプ
レートを指し、前記タスク・コンテナと前記第2テンプ
レートとの間の前記第1関係を確立するステップと、前
記テンプレート・ポインタによって、前記記憶動作の後
に、第3テンプレート領域を指し、前記第2関係を確立
するステップとを含むことを特徴とする、上記(16)
に記載のマイクロカーネル・アーキテクチャ・データ処
理システム内で選択されたオペレーティング・システム
・パーソナリティ・プログラムを走行させる方法。 (19)前記タスク・コンテナを形成するステップが、
さらに、前記属性の組を有し、前記テンプレート領域を
指すタスク・ポインタを有するタスク・コンテナを、前
記テンプレート領域を前記タスク・コンテナにマッピン
グすることによって、前記メモリ内に形成するために、
前記選択されたオペレーティング・システム・パーソナ
リティ・プログラムから前記マイクロカーネルに第2の
呼出しを送るステップを含むことを特徴とする、上記
(16)に記載のマイクロカーネル・アーキテクチャ・
データ処理システム内で選択されたオペレーティング・
システム・パーソナリティ・プログラムを走行させる方
法。 (20)データ処理システムのメモリ内にタスク・コン
テナを作成するための、前記メモリ内のマイクロカーネ
ルと、前記メモリ内の特殊オブジェクトとしてテンプレ
ート領域を形成するために前記マイクロカーネルに呼出
しを送るための、前記データ処理システムの前記メモリ
内の選択されたオペレーティング・システム・パーソナ
リティ・プログラムと、仮想アドレス空間を定義する属
性の組を有し、メモリ・オブジェクトを指すテンプレー
ト・ポインタを有する、前記呼出しに応答して形成され
る前記メモリ内のテンプレート領域と、前記属性の組を
有し、前記テンプレート領域を指すタスク・ポインタを
有するタスク・コンテナであって、前記テンプレート領
域を前記タスク・コンテナにマッピングすることによっ
て形成される、前記メモリ内の前記タスク・コンテナ
と、前記テンプレート・ポインタと前記タスク・ポイン
タとが、前記タスク・コンテナと前記メモリ・オブジェ
クトとの間の第1関係を確立することと、前記メモリ・
オブジェクトを指す前記テンプレート・ポインタを修正
するため前記テンプレート領域に対する仮想記憶動作を
実行し、これによって、前記タスク・コンテナと前記メ
モリ・オブジェクトとの間の第2関係を確立する手段と
を含む、マイクロカーネル・アーキテクチャ・データ処
理システム。 (21)データ処理システムのメモリ内にタスク・コン
テナを作成するため、前記メモリにマイクロカーネルを
ロードするステップと、前記データ処理システムの前記
メモリにパーソナリティ・ニュートラル・サービス・プ
ログラムをロードするステップと、仮想アドレス空間を
定義する属性の組を有し、メモリ・オブジェクトを指す
テンプレート・ポインタを有するテンプレート領域を、
前記メモリ内の特殊オブジェクトとして形成するため
に、前記パーソナリティ・ニュートラル・サービス・プ
ログラムから前記マイクロカーネルに呼出しを送るステ
ップと、前記属性の組を有し、前記テンプレート領域を
指すテンプレート・ポインタを有するタスク・コンテナ
を、前記テンプレート領域を前記タスク・コンテナにマ
ッピングすることによって、前記メモリ内に前記マイク
ロカーネルを用いて形成するステップと、前記テンプレ
ート・ポインタと前記タスク・ポインタとによって、前
記タスク・コンテナと前記メモリ・オブジェクトとの間
の第1関係を確立するステップと、前記メモリ・オブジ
ェクトを指す前記テンプレート・ポインタを修正するた
め前記テンプレート領域に対する仮想記憶動作を実行
し、これによって、前記タスク・コンテナと前記メモリ
・オブジェクトとの間に第2関係を確立するステップと
を含む、マイクロカーネル・アーキテクチャ・データ処
理システム内でパーソナリティ・ニュートラル・サービ
ス・プログラムを走行させる方法。 (22)前記メモリ・オブジェクトが、前記メモリ内の
物理アドレスに対する仮想アドレスのマップであり、第
1メモリ・オブジェクトへの第1アドレス変換と、第2
メモリ・オブジェクトへの第2アドレス変換とを含み、
前記方法がさらに、前記テンプレート・ポインタによっ
て、前記記憶動作の前に、前記第1アドレス変換を指
し、前記タスク・コンテナと前記第1メモリ・オブジェ
クトとの間の前記第1関係を確立するステップと、前記
テンプレート・ポインタによって、前記記憶動作の後
に、前記第2アドレス変換を指し、前記タスク・コンテ
ナと前記第2メモリ・オブジェクトとの間の前記第2関
係を確立するステップとを含むことを特徴とする、上記
(21)に記載のマイクロカーネル・アーキテクチャ・
データ処理システム内でパーソナリティ・ニュートラル
・サービス・プログラムを走行させる方法。 (23)前記メモリ・オブジェクトが第2テンプレート
領域であり、前記方法がさらに、前記テンプレート・ポ
インタによって、前記記憶動作の前に、前記第2テンプ
レートを指し、前記タスク・コンテナと前記第2テンプ
レートとの間の前記第1関係を確立するステップと、前
記テンプレート・ポインタによって、前記記憶動作の後
に、第3テンプレート領域を指し、前記第2関係を確立
するステップとを含むことを特徴とする、上記(21)
に記載のマイクロカーネル・アーキテクチャ・データ処
理システム内でパーソナリティ・ニュートラル・サービ
ス・プログラムを走行させる方法。 (24)前記タスク・コンテナを形成するステップが、
さらに、前記属性の組を有し、前記テンプレート領域を
指す前記タスク・ポインタを有する前記タスク・コンテ
ナを、前記テンプレート領域を前記タスク・コンテナに
マッピングすることによって、前記メモリ内に形成する
ために、前記パーソナリティ・ニュートラル・サービス
・プログラムから前記マイクロカーネルに第2の呼出し
を送るステップを含むことを特徴とする、上記(21)
に記載のマイクロカーネル・アーキテクチャ・データ処
理システム内でパーソナリティ・ニュートラル・サービ
ス・プログラムを走行させる方法。 (25)データ処理システムのメモリ内でタスク・コン
テナを作成するための、前記メモリ内のマイクロカーネ
ルと、前記メモリ内の特殊オブジェクトとしてテンプレ
ート領域を形成するために前記マイクロカーネルに呼出
しを送るための、前記データ処理システムの前記メモリ
内のパーソナリティ・ニュートラル・サービス・プログ
ラムと、仮想アドレス空間を定義する属性の組を有し、
メモリ・オブジェクトを指すテンプレート・ポインタを
有する、前記呼出しに応答して形成された前記メモリ内
のテンプレート領域と、前記属性の組を有し、前記テン
プレート領域を指すタスク・ポインタを有するタスク・
コンテナであって、前記テンプレート領域を前記タスク
・コンテナにマッピングすることによって形成される、
前記メモリ内の前記タスク・コンテナと、前記テンプレ
ート・ポインタと前記タスク・ポインタが、前記タスク
・コンテナと前記メモリ・オブジェクトとの間の第1関
係を確立することと、前記メモリ・オブジェクトを指す
前記テンプレート・ポインタを修正するため前記テンプ
レート領域に対する仮想記憶動作を実行し、これによっ
て、前記タスク・コンテナと前記メモリ・オブジェクト
との間の第2関係を確立する手段とを含む、マイクロカ
ーネル・アーキテクチャ・データ処理システム。 (26)データ処理システムのメモリ内にタスク・コン
テナを作成するため、前記メモリにマイクロカーネルを
ロードするステップと、前記データ処理システムの前記
メモリにアプリケーション・プログラムをロードするス
テップと、仮想アドレス空間を定義する属性の組を有
し、メモリ・オブジェクトを指すテンプレート・ポイン
タを有するテンプレート領域を、前記メモリ内の特殊オ
ブジェクトとして形成するために、前記アプリケーショ
ン・プログラムから前記マイクロカーネルに呼出しを送
るステップと、前記属性の組を有し、前記テンプレート
領域を指すタスク・ポインタを有する前記タスク・コン
テナを、前記テンプレート領域を前記タスク・コンテナ
マッピングすることによって、前記メモリ内で前記マイ
クロカーネルを用いて形成するステップと、前記テンプ
レート・ポインタと前記タスク・ポインタによって、前
記タスク・コンテナと前記メモリ・オブジェクトとの間
の第1関係を確立するステップと、前記メモリ・オブジ
ェクトを指す前記テンプレート・ポインタを修正するた
め前記テンプレート領域に対する仮想記憶動作を実行
し、これによって、前記タスク・コンテナと前記メモリ
・オブジェクトとの間の第2関係を確立するステップと
を含む、マイクロカーネル・アーキテクチャ・データ処
理システムでアプリケーション・プログラムを走行させ
る方法。 (27)前記メモリ・オブジェクトが、前記メモリ内の
物理アドレスに対する仮想アドレスのマップであり、第
1メモリ・オブジェクトへの第1アドレス変換と、第2
メモリ・オブジェクトへの第2アドレス変換とを含み、
前記方法がさらに、前記テンプレート・ポインタによっ
て、前記記憶動作の前に、前記第1アドレス変換を指
し、前記タスク・コンテナと前記第1メモリ・オブジェ
クトとの間の前記第1関係を確立するステップと、前記
テンプレート・ポインタによって、前記記憶動作の後
に、前記第2アドレス変換を指し、前記タスク・コンテ
ナと前記第2メモリ・オブジェクトとの間の前記第2関
係を確立するステップとを含むことを特徴とする、上記
(26)に記載のマイクロカーネル・アーキテクチャ・
データ処理システムでアプリケーション・プログラムを
走行させる方法。 (28)前記メモリ・オブジェクトが第2テンプレート
領域であり、前記方法がさらに、前記テンプレート・ポ
インタによって、前記記憶動作の前に、前記第2テンプ
レートを指し、前記タスク・コンテナと前記第2テンプ
レートとの間の前記第1関係を確立するステップと、前
記テンプレート・ポインタによって、前記記憶動作の後
に、第3テンプレート領域を指し、前記第2関係を確立
するステップとを含むことを特徴とする、上記(26)
に記載のマイクロカーネル・アーキテクチャ・データ処
理システムでアプリケーション・プログラムを走行させ
る方法。 (29)前記タスク・コンテナを形成するステップが、
さらに、前記属性の組を有し、前記テンプレート領域を
指す前記タスク・ポインタを有する前記タスク・コンテ
ナを、前記テンプレート領域を前記タスク・コンテナに
マッピングすることによって、前記メモリ内に形成する
ために、前記アプリケーション・プログラムから前記マ
イクロカーネルに第2の呼出しを送るステップを含むこ
とを特徴とする、上記(26)に記載のマイクロカーネ
ル・アーキテクチャ・データ処理システムでアプリケー
ション・プログラムを走行させる方法。 (30)データ処理システムのメモリ内でタスク・コン
テナを作成するための、前記メモリ内のマイクロカーネ
ルと、前記メモリ内の特殊オブジェクトとしてテンプレ
ート領域を形成するために前記マイクロカーネルに呼出
しを送るための、前記データ処理システムの前記メモリ
内のアプリケーション・プログラムと、仮想アドレス空
間を定義する属性の組を有し、メモリ・オブジェクトを
指すテンプレート・ポインタを有する、前記呼出しに応
答して形成された前記メモリ内のテンプレート領域と、
前記属性の組を有し、前記テンプレート領域を指すタス
ク・ポインタを有するタスク・コンテナであって、前記
テンプレート領域を前記タスク・ポインタにマッピング
することによって形成される、前記メモリ内の前記タス
ク・コンテナと、前記テンプレート・ポインタと前記タ
スク・ポインタとが、前記タスク・コンテナと前記メモ
リ・オブジェクトとの間の第1関係を確立することと、
前記メモリ・オブジェクトを指す前記テンプレート・ポ
インタを修正するため前記テンプレート領域に対する仮
想記憶動作を実行し、これによって、前記タスク・コン
テナと前記メモリ・オブジェクトとの間の第2関係を確
立する手段とを含む、マイクロカーネル・アーキテクチ
ャ・データ処理システム。 (31)プログラムされた命令を記憶するための補助記
憶手段と、前記補助記憶手段が前記プログラムされた命
令をページングするキャッシュ・オブジェクトを記憶す
るための、前記補助記憶手段に結合されたメモリ手段
と、仮想アドレス空間を定義する属性の組と、前記キャ
ッシュ・オブジェクトに向かうテンプレート・ポインタ
とを有する、前記メモリ手段内のテンプレート領域と、
前記メモリ手段内でタスクを作成するための、前記メモ
リ手段内のマイクロカーネル手段と、前記マイクロカー
ネル手段が前記テンプレート領域をタスクへマッピング
することによって形成される、前記属性の組を有し、前
記テンプレート領域を指すタスク・ポインタを有する、
前記メモリ手段内の前記タスクと、前記テンプレート・
ポインタと前記タスク・ポインタとが、前記タスクと前
記キャッシュ・オブジェクトとの間の第1関係を確立す
ることと、前記プログラムされた命令を実行するため
の、前記メモリ手段に結合されたプロセッサ手段と、前
記プロセッサ手段内での実行のため、前記第1関係を使
用して、前記キャッシュ・オブジェクトから前記プログ
ラムされた命令を取り出すための、前記タスクに関連す
る前記メモリ手段内のスレッド・オブジェクトと、前記
キャッシュ・オブジェクトに向かう前記テンプレート・
ポインタを修正するため前記テンプレート領域に対する
仮想記憶動作を実行し、これによって、前記タスクと前
記キャッシュ・オブジェクトとの間の関係を変更する手
段とを含む、マイクロカーネル・アーキテクチャ・デー
タ処理システム。 (32)前記テンプレート・ポインタによって指され、
前記キャッシュ・オブジェクトへの第1アドレス変換と
第2メモリ・オブジェクトへの第2アドレス変換とを含
む、前記メモリ手段内の物理アドレスに対する仮想アド
レスのマップを含み、前記テンプレート・ポインタが、
前記記憶動作の前に、前記第1アドレス変換を指し、前
記タスクと前記キャッシュ・オブジェクトとの間の前記
第1関係を確立し、前記テンプレート・ポインタが、前
記記憶動作の後に、前記第2アドレス変換を指し、前記
タスクと前記第2メモリ・オブジェクトとの間の第2関
係を確立することを特徴とする、上記(31)に記載の
マイクロカーネル・アーキテクチャ・データ処理システ
ム。 (33)前記メモリ手段内の特殊オブジェクトとして前
記テンプレート領域を形成するために前記マイクロカー
ネル手段に呼出しを送るための、前記メモリ手段内のオ
ペレーティング・システム・パーソナリティ・プログラ
ム手段をさらに含む、上記(31)に記載のマイクロカ
ーネル・アーキテクチャ・データ処理システム。 (34)前記メモリ手段内の前記オペレーティング・シ
ステム・パーソナリティ・プログラム手段が、前記メモ
リ手段内の前記タスクを形成するために前記マイクロカ
ーネル手段に呼出しを送ることをさらに含む、上記(3
3)に記載のマイクロカーネル・アーキテクチャ・デー
タ処理システム。 (35)前記メモリ手段内の特殊オブジェクトとして前
記テンプレート領域を形成するために前記マイクロカー
ネル手段に呼出しを送る、前記メモリ手段内のパーソナ
リティ・ニュートラル・サービス・プログラム手段をさ
らに含む、上記(31)に記載のマイクロカーネル・ア
ーキテクチャ・データ処理システム。 (36)前記メモリ手段内で前記タスクを形成するため
に前記マイクロカーネル手段に呼出しを送るための、前
記メモリ手段内の前記パーソナリティ・ニュートラル・
サービス・プログラム手段をさらに含む、上記(35)
に記載のマイクロカーネル・アーキテクチャ・データ処
理システム。 (37)前記メモリ手段内の特殊オブジェクトとして前
記テンプレート領域を形成するため前記マイクロカーネ
ル手段に呼出しを送るための、前記メモリ手段内のアプ
リケーション・プログラム手段をさらに含む、上記(3
1)に記載のマイクロカーネル・アーキテクチャ・デー
タ処理システム。 (38)前記メモリ手段内で前記タスクを形成するため
に前記マイクロカーネル手段に呼出しを送るための、前
記メモリ手段内の前記アプリケーション・プログラム手
段をさらに含む、上記(37)に記載のマイクロカーネ
ル・アーキテクチャ・データ処理システム。 (39)プログラムされた命令を含むキャッシュ・オブ
ジェクトを記憶するためのメモリ手段と、属性の組を有
し、前記キャッシュ・オブジェクトに向かうテンプレー
ト・ポインタを有する、前記メモリ手段内のテンプレー
ト領域と、前記テンプレート領域をタスクにマッピング
することによって前記メモリ手段内でタスクを作成する
ための、前記メモリ手段内のマイクロカーネル手段と、
前記属性の組を有し、前記テンプレート領域を指すタス
ク・ポインタを有する、前記マイクロカーネル手段によ
って形成される前記メモリ手段内のタスクと、前記テン
プレート・ポインタと前記タスク・ポインタとが、前記
タスクと前記キャッシュ・オブジェクトとの間の第1関
係を確立することと、前記プログラムされた命令を実行
するための、前記メモリ手段に結合されたプロセッサ手
段と、前記プロセッサ手段内での実行のため、前記第1
関係を使用して前記キャッシュ・オブジェクトから前記
プログラムされた命令を取り出すための、前記タスクに
関連する前記メモリ手段内のスレッドとを含む、マイク
ロカーネル・アーキテクチャ・データ処理システム。 (40)前記メモリ手段内の特殊オブジェクトとして前
記テンプレート領域を形成するため前記マイクロカーネ
ル手段に呼出しを送るための、前記メモリ手段内のオペ
レーティング・システム・パーソナリティ・プログラム
手段をさらに含む、上記(39)に記載のマイクロカー
ネル・アーキテクチャ・データ処理システム。 (41)前記メモリ手段内で前記タスクを形成するため
前記マイクロカーネル手段に呼出しを送る、前記メモリ
手段内のオペレーティング・システム・パーソナリティ
・プログラム手段をさらに含む、上記(39)に記載の
マイクロカーネル・アーキテクチャ・データ処理システ
ム。 (42)前記メモリ手段内の特殊オブジェクトとして前
記テンプレート領域を形成するため前記マイクロカーネ
ル手段に呼出しを送る、前記メモリ手段内のパーソナリ
ティ・ニュートラル・サービス・プログラム手段をさら
に含む、上記(39)に記載のマイクロカーネル・アー
キテクチャ・データ処理システム。 (43)前記メモリ手段内で前記タスクを形成するため
前記マイクロカーネル手段に呼出しを送るための、前記
メモリ手段内のパーソナリティ・ニュートラル・サービ
ス・プログラム手段をさらに含む、上記(39)に記載
のマイクロカーネル・アーキテクチャ・データ処理シス
テム。 (44)前記メモリ手段内の特殊オブジェクトとして前
記テンプレート領域を形成するため前記マイクロカーネ
ル手段に呼出しを送るための、前記メモリ手段内のアプ
リケーション・プログラム手段をさらに含む、上記(3
9)に記載のマイクロカーネル・アーキテクチャ・デー
タ処理システム。 (45)前記メモリ手段内で前記タスクを形成するため
前記マイクロカーネル手段に呼出しを送るための、前記
メモリ手段内のアプリケーション・プログラム手段をさ
らに含む、上記(39)に記載のマイクロカーネル・ア
ーキテクチャ・データ処理システム。 (46)プログラムされた命令を記憶するための補助記
憶手段と、前記補助記憶手段が前記プログラムされた命
令をページングするキャッシュ・オブジェクトを記憶す
るための、前記補助記憶手段に結合されたメモリ手段
と、属性の組を有し、前記キャッシュ・オブジェクトに
向かうテンプレート・ポインタを有する、前記メモリ手
段内のテンプレート領域と、前記テンプレート領域をタ
スクにマッピングすることによって前記メモリ手段内に
タスクを形成するための、前記メモリ手段内のマイクロ
カーネル手段と、前記属性の組を有し、前記テンプレー
ト領域を指すタスク・ポインタを有する、前記マイクロ
カーネル手段によって形成される前記メモリ手段内のタ
スクと、前記テンプレート・ポインタと前記タスク・ポ
インタとが、前記タスクと前記キャッシュ・オブジェク
トとの間の第1関係を確立することと、前記プログラム
された命令を実行するための、前記メモリ手段に結合さ
れたプロセッサ手段と、前記プロセッサ手段内での実行
のため、前記第1関係を使用して前記キャッシュ・オブ
ジェクトから前記プログラムされた命令を取り出すため
の、前記タスクに関連する前記メモリ手段内のスレッド
とを含む、マイクロカーネル・アーキテクチャ・データ
処理システム。 (47)プログラムされた命令を記憶するための補助記
憶手段と、前記補助記憶手段が前記プログラムされた命
令をページングするキャッシュ・オブジェクトを記憶す
るための、前記補助記憶手段に結合されたメモリ手段
と、属性の組を有し、前記キャッシュ・オブジェクトに
向かう第1テンプレート・ポインタと第2テンプレート
・ポインタとを有する、前記メモリ手段内のテンプレー
ト領域と、前記テンプレート領域をタスクにマッピング
することによって前記メモリ手段内にタスクを作成する
ための、前記メモリ手段内のマイクロカーネル手段と、
前記属性の組を有し、前記テンプレート領域を指す第1
タスク・ポインタを有する、前記マイクロカーネル手段
によって形成される前記メモリ手段内の第1タスクと、
前記第1テンプレート・ポインタと前記第1タスク・ポ
インタとが、前記第1タスクと前記キャッシュ・オブジ
ェクトとの間の第1関係を確立することと、前記プログ
ラムされた命令を実行するための、前記メモリ手段に結
合された第1プロセッサ手段と、前記第1プロセッサ手
段内での実行のため、前記第1関係を使用して前記キャ
ッシュ・オブジェクトから前記プログラムされた命令を
取り出すための、前記第1タスクに関連する前記メモリ
手段内の第1スレッドと、前記属性の組を有し、前記テ
ンプレート領域を指す第2タスク・ポインタを有する、
前記マイクロカーネル手段によって形成された前記メモ
リ手段内の第2タスクと、前記第2テンプレート・ポイ
ンタと前記第2タスク・ポインタとが、前記第2タスク
と前記キャッシュ・オブジェクトとの間の第2関係を確
立することと、前記プログラムされた命令を実行するた
めの、前記メモリ手段に結合された第2プロセッサ手段
と、前記第2プロセッサ手段内での実行のため、前記第
2関係を使用して前記キャッシュ・オブジェクトから前
記プログラムされた命令を取り出すための、前記第2タ
スクに関連する前記メモリ手段内の第2スレッドとを含
む、マイクロカーネル・アーキテクチャ・データ処理シ
ステム。 (48)プログラムされた命令を記憶するための補助記
憶手段と、前記補助記憶手段が前記プログラムされた命
令をページングするキャッシュ・オブジェクトを記憶す
るための、前記補助記憶手段に結合されたメモリ手段
と、属性の組を有し、前記キャッシュ・オブジェクトに
向かうテンプレート・ポインタを有する、前記メモリ手
段内のテンプレート領域と、前記テンプレート領域をタ
スクにマッピングすることによって前記メモリ手段内で
タスクを作成するための、前記メモリ手段内のマイクロ
カーネル手段と、前記属性の組を有し、前記テンプレー
ト領域を指す第1タスク・ポインタを有する、前記マイ
クロカーネルによって形成される前記メモリ手段内の第
1タスクと、前記第1テンプレート・ポインタと前記タ
スク・ポインタとが、前記第1タスクと前記キャッシュ
・オブジェクトとの間の第1関係を確立することと、前
記プログラムされた命令を実行するための、前記メモリ
手段に結合された第1プロセッサ手段と、前記第1プロ
セッサ手段内での実行のため、前記第1関係を使用して
前記キャッシュ・オブジェクトから前記プログラムされ
た命令を取り出すための、前記第1タスクに関連する前
記メモリ手段内の第1スレッドと、前記属性の組を有
し、前記テンプレート領域を指す第2タスク・ポインタ
を有する、前記マイクロカーネル手段によって形成され
た前記メモリ手段内の第2タスクと、前記テンプレート
・ポインタと前記第2タスク・ポインタとが、前記第2
タスクと前記キャッシュ・オブジェクトとの間の前記第
1関係を確立することと、前記プログラムされた命令を
実行するための、前記メモリ手段に結合された第2プロ
セッサ手段と、前記第2プロセッサ手段内での実行のた
め、前記第1関係を使用して前記キャッシュ・オブジェ
クトから前記プログラムされた命令を取り出すための、
前記第2タスクに関連する前記メモリ手段内の第2スレ
ッドとを含む、マイクロカーネル・アーキテクチャ・デ
ータ処理システム。
【0331】
【発明の効果】単一のテンプレート領域を同時に複数の
タスクにマッピングすることができ、各タスク内のテン
プレート領域のマッピングではなく、1つのテンプレー
ト領域に対して変更が行われるので、仮想記憶動作の共
同がはるかに簡単に達成される。
【図面の簡単な説明】
【図1】ホスト多重プロセッサ100のメモリ102内
のマイクロカーネル・システム115の機能ブロック図
である。
【図2】スレッドに関連する、クライアントから可視の
構造を示す図である。
【図3】クライアントから可視のタスク構造を示す図で
ある。
【図4】一連の送出権と単一の受取り権とを示す、通常
のポートを示す図である。
【図5】ポート名前空間またはメッセージの通過に含ま
れる、一連のポート権を示す図である。
【図6】クライアントから可視の仮想メモリ構造を示す
図である。
【図7】マイクロカーネル・アドレス空間内で形成され
た3つのテンプレート領域を示す図である。
【図8】テンプレート領域R0の属性を使用してマイク
ロカーネルによって形成された第1のタスクT(A)を
示す図である。
【図9】テンプレート領域R0の属性を使用してマイク
ロカーネルによって形成された第2のタスクT(B)を
示す図である。
【図10】2つのタスクへの1つのテンプレート領域の
マッピングを示す図である。
【図11】1つのタスクへの1つのテンプレート領域の
2回のマッピングを示す図である。
【図12】オーバーラップするテンプレート領域を示す
図である。
【図13】メモリ割振りとオーバーラップするテンプレ
ート領域とを示す図である。
【図14】テンプレート領域の縮合を示す図である。
【図15】メモリ・オブジェクトのマッピングを示す図
である。
【図16】メモリ・オブジェクトの不正なマッピングを
示す図である。
【図17】仮想メモリ構成要素を示す図である。
【図18】あるタスクのテンプレート領域を示す図であ
る。
【図19】異なるカーネル・インターフェース・ライブ
ラリを有するタスクを示す図である。
【図20】カーネル・タスクのテンプレート領域を示す
図である。
【符号の説明】
100 ホスト多重プロセッサ 102 メモリ 104 バス 106 補助記憶装置 108 入出力アダプタ 110 プロセッサA 112 プロセッサB 115 マイクロカーネル・システム 120 マイクロカーネル 122 プロセス間通信モジュール(IPC) 124 仮想メモリ・モジュール 125 マシン依存コード 126 タスクおよびスレッド・モジュール 128 ホストおよびプロセッサ・セット 130 入出力サポートおよび割込み 140 パーソナリティ・ニュートラル・サービス(P
NS) 142 多重パーソナリティ・サポート 144 デフォルト・ページャ 146 デバイス・サポート 150 パーソナリティ・サーバ 152 主要パーソナリティ
───────────────────────────────────────────────────── フロントページの続き (72)発明者 フリーマン・リー・ローソン・ザ=サード アメリカ合衆国33487−2242 フロリダ州 ボカ・ラトン ウッドビュー・テラス 17762 (72)発明者 ガイ・ジル・ソトマイヤー・ジュニア アメリカ合衆国33415 フロリダ州ウェス ト・パーム・ビーチ シャーウッド・グレ ン・ウェイ 6042 アパートメント3

Claims (48)

    【特許請求の範囲】
  1. 【請求項1】データ処理システムのメモリ内でタスク・
    コンテナを作成するために、前記メモリにマイクロカー
    ネルをロードするステップと、 仮想アドレス空間を定義する属性の組を有し、メモリ・
    オブジェクトを指すテンプレート・ポインタを有するテ
    ンプレート領域を、前記メモリ内の特殊オブジェクトと
    して前記マイクロカーネルを用いて形成するステップ
    と、 前記テンプレート領域を前記タスク・コンテナにマッピ
    ングすることによって、前記属性の組を有し前記テンプ
    レート領域を指すタスク・ポインタを有するタスク・コ
    ンテナを前記メモリ内に前記マイクロカーネルを用いて
    形成するステップと、 前記テンプレート・ポインタと前記タスク・ポインタと
    によって、前記タスク・コンテナと前記メモリ・オブジ
    ェクトとの間の第1関係を確立するステップと、 前記メモリ・オブジェクトを指す前記テンプレート・ポ
    インタを修正するために前記テンプレート領域に対する
    仮想記憶動作を実行し、これによって、前記タスク・コ
    ンテナと前記メモリ・オブジェクトとの間の第2関係を
    確立するステップとを含む、マイクロカーネル・アーキ
    テクチャ・データ処理システムのためのメモリ管理方
    法。
  2. 【請求項2】前記メモリ・オブジェクトが、前記メモリ
    内の物理アドレスに対する仮想アドレスのマップであ
    り、第1メモリ・オブジェクトへの第1アドレス変換と
    第2メモリ・オブジェクトへの第2アドレス変換とを含
    み、前記方法がさらに、 前記テンプレート・ポインタによって、前記記憶動作の
    前に前記第1アドレス変換を指し、前記タスク・コンテ
    ナと前記第1メモリ・オブジェクトとの間の前記第1関
    係を確立するステップと、 前記テンプレート・ポインタによって、前記記憶動作の
    後に前記第2アドレス変換を指し、前記タスク・コンテ
    ナと前記第2メモリ・オブジェクトとの間の前記第2関
    係を確立するステップとを含むことを特徴とする、請求
    項1に記載のマイクロカーネル・アーキテクチャ・デー
    タ処理システムのためのメモリ管理方法。
  3. 【請求項3】前記メモリ・オブジェクトが、第2テンプ
    レート領域であり、前記方法がさらに、 前記テンプレート・ポインタによって、前記記憶動作の
    前に前記第2テンプレートを指し、前記タスク・コンテ
    ナと前記第2テンプレートとの間の前記第1関係を確立
    するステップと、 前記テンプレート・ポインタによって、前記記憶動作の
    後に第3テンプレート領域を指し、前記第2関係を確立
    するステップとを含むことを特徴とする、請求項1に記
    載のマイクロカーネル・アーキテクチャ・データ処理シ
    ステムのためのメモリ管理方法。
  4. 【請求項4】前記メモリ内に前記タスク・コンテナを形
    成する前記ステップが、さらに、 通信チャネルとして使用するため、前記タスク・コンテ
    ナ用の前記メモリ内に前記マイクロカーネルを用いてポ
    ート名前空間を形成するステップと、 前記テンプレート領域の前記属性の組を使用して、前記
    タスク・コンテナの前記ポート名前空間に関するアクセ
    ス権を、前記マイクロカーネルを用いて定義するステッ
    プとを含むことを特徴とする、請求項1に記載のマイク
    ロカーネル・アーキテクチャ・データ処理システムのた
    めのメモリ管理方法。
  5. 【請求項5】前記メモリ内に前記タスク・コンテナを形
    成する前記ステップが、さらに、前記タスク・コンテナ
    の前記アドレス空間から命令を取り出すため、前記タス
    ク・コンテナ用の前記メモリ内に前記マイクロカーネル
    を用いてスレッド・オブジェクトを形成するステップを
    含むことを特徴とする、請求項1に記載のマイクロカー
    ネル・アーキテクチャ・データ処理システムのためのメ
    モリ管理方法。
  6. 【請求項6】前記テンプレート領域が、基本領域とユー
    ザ領域とを含み、前記メモリ内に前記テンプレート領域
    を形成する前記ステップが、さらに、 基本属性の組を有するテンプレート基本領域を、前記メ
    モリ内の特殊オブジェクトとして前記マイクロカーネル
    を用いて形成するステップと、 ユーザ属性の組を有するテンプレート・ユーザ領域を、
    前記メモリ内の特殊オブジェクトとして前記マイクロカ
    ーネルを用いて形成するステップとを含み、前記メモリ
    内に前記タスク・コンテナを形成する前記ステップが、
    さらに、 基本仮想アドレス空間と前記基本属性の組とを有し、前
    記テンプレート基本領域を指すタスク基本ポインタを有
    するタスク基本コンテナを、前記テンプレート基本領域
    を前記タスク基本コンテナにマッピングすることによっ
    て、前記メモリ内で前記マイクロカーネルを用いて形成
    するステップと、 ユーザ仮想アドレス空間と前記ユーザ属性の組とを有
    し、前記テンプレート・ユーザ領域を指すタスク・ユー
    ザ・ポインタを有するタスク・ユーザ・コンテナを、前
    記テンプレート・ユーザ領域を前記タスク・ユーザ・コ
    ンテナにマッピングすることによって、前記メモリ内で
    前記マイクロカーネルを用いて形成するステップと、 前記テンプレート基本領域に対して、前記タスク基本ポ
    インタによる前記タスク基本コンテナ内の効果を有する
    仮想記憶動作を実行するステップとを含むことを特徴と
    する、請求項1に記載のマイクロカーネル・アーキテク
    チャ・データ処理システムのためのメモリ管理方法。
  7. 【請求項7】前記テンプレート・ユーザ領域に対して仮
    想記憶動作を実行するステップをさらに含み、 前記仮想記憶動作が、前記タスク・ユーザ・ポインタに
    よる前記タスク・ユーザ・コンテナ内の効果を有するこ
    とを特徴とする、請求項6に記載のマイクロカーネル・
    アーキテクチャ・データ処理システムのためのメモリ管
    理方法。
  8. 【請求項8】前記メモリ内に前記タスク基本コンテナを
    形成する前記ステップが、さらに、 通信チャネルとして使用するため、前記タスク基本コン
    テナ用の前記メモリ内で前記マイクロカーネルを用いて
    前記ポート名前空間を形成するステップと、 前記テンプレート基本領域の前記基本属性の組を使用し
    て、前記タスク基本コンテナの前記ポート名前空間に関
    するアクセス権を、前記マイクロカーネルを用いて定義
    するステップとを含むことを特徴とする、請求項6に記
    載のマイクロカーネル・アーキテクチャ・データ処理シ
    ステムのためのメモリ管理方法。
  9. 【請求項9】前記メモリ内に前記タスク基本コンテナを
    形成する前記ステップが、さらに、前記タスク基本コン
    テナの前記アドレス空間から命令を取り出すため、前記
    タスク基本コンテナ用の前記メモリ内で前記マイクロカ
    ーネルを用いてスレッド・オブジェクトを形成するステ
    ップを含むことを特徴とする、請求項6に記載のマイク
    ロカーネル・アーキテクチャ・データ処理システムのた
    めのメモリ管理方法。
  10. 【請求項10】データ処理システムのメモリ内にタスク
    ・コンテナを作成するため、前記メモリにマイクロカー
    ネルをロードするステップと、 第1サイズと属性の第1組とを有するテンプレート基本
    領域を、前記メモリ内の特殊オブジェクトとして前記マ
    イクロカーネルを用いて形成するステップと、 前記第1サイズと前記属性の第1組とを有するタスク基
    本コンテナを、前記テンプレート基本領域を前記タスク
    基本コンテナにマッピングすることによって、前記マイ
    クロカーネルを用いて前記メモリ内で形成するステップ
    と、 第2サイズと属性の第2組とを有するテンプレート・ユ
    ーザ領域を、前記メモリ内の特殊オブジェクトとして前
    記マイクロカーネルを用いて形成するステップと、 前記テンプレート・ユーザ領域を前記タスク・ユーザ・
    コンテナの前記タスク基本コンテナ内の位置にマッピン
    グすることによって、前記マイクロカーネルを用いて前
    記メモリ内の前記タスク基本コンテナ内で、前記第2サ
    イズと前記属性の第2組とを有するタスク・ユーザ・コ
    ンテナを形成するステップと、 前記マッピングによる前記タスク基本コンテナ内の影響
    を有する仮想記憶動作を、前記テンプレート基本領域に
    対して実行するステップとを含む、マイクロカーネル・
    アーキテクチャ・データ処理システムのためのメモリ管
    理方法。
  11. 【請求項11】データ処理システムのメモリ内にタスク
    ・コンテナを作成するための、前記メモリ内のマイクロ
    カーネルと、 仮想アドレス空間を定義する属性の組を有し、メモリ・
    オブジェクトを指すテンプレート・ポインタを有する、
    前記メモリ内の特殊オブジェクトとしてのテンプレート
    領域と、 前記属性の組を有し、前記テンプレート領域を指すタス
    ク・ポインタを有するタスク・コンテナであって、前記
    テンプレート領域を前記タスク・コンテナにマッピング
    することによって形成される、前記メモリ内の前記タス
    ク・コンテナと、 前記テンプレート・ポインタと前記タスク・ポインタと
    が、前記タスク・コンテナと前記メモリ・オブジェクト
    との間の第1関係を確立することと、 前記メモリ・オブジェクトを指す前記テンプレート・ポ
    インタを修正するために前記テンプレート領域に対して
    仮想記憶動作を実行し、これによって前記タスク・コン
    テナと前記メモリ・オブジェクトとの間の第2関係を確
    立するための手段とを含む、マイクロカーネル・アーキ
    テクチャ・データ処理システム。
  12. 【請求項12】前記メモリ・オブジェクトが、前記メモ
    リ内の物理アドレスに対する仮想アドレスのマップであ
    り、第1メモリ・オブジェクトへの第1アドレス変換
    と、第2メモリ・オブジェクトへの第2アドレス変換と
    を含み、 前記テンプレート・ポインタが、前記記憶動作の前に、
    前記第1アドレス変換を指し、前記タスク・コンテナと
    前記第1メモリ・オブジェクトとの間の前記第1関係を
    確立し、 前記テンプレート・ポインタが、前記記憶動作の後に、
    前記第2アドレス変換を指し、前記タスク・コンテナと
    前記第2メモリ・オブジェクトとの間の前記第2関係を
    確立することを特徴とする、請求項11に記載のマイク
    ロカーネル・アーキテクチャ・データ処理システム。
  13. 【請求項13】前記メモリ・オブジェクトが第2テンプ
    レート領域であり、さらに、 前記テンプレート・ポインタが、前記記憶動作の前に、
    前記第2テンプレートを指し、前記タスク・コンテナと
    前記第2テンプレートとの間の前記第1関係を確立し、 前記テンプレート・ポインタが、前記記憶動作の後に、
    第3テンプレート領域を指し、前記第2関係を確立する
    ことを特徴とする、請求項11に記載のマイクロカーネ
    ル・アーキテクチャ・データ処理システム。
  14. 【請求項14】前記メモリ内の前記タスク・コンテナ
    が、さらに、前記タスク・コンテナ用の前記メモリ内の
    ポート名前空間であって、前記テンプレート領域の前記
    属性の組を使用して定義される、前記タスク・コンテナ
    の前記ポート名前空間に関するアクセス権を有し、通信
    チャネルとして使用するための前記ポート名前空間を含
    むことを特徴とする、請求項11に記載のマイクロカー
    ネル・アーキテクチャ・データ処理システム。
  15. 【請求項15】前記メモリ内の前記タスク・コンテナ
    が、さらに、前記タスク・コンテナの前記アドレス空間
    から命令を取り出すための、前記タスク・コンテナ用の
    前記メモリ内のスレッド・オブジェクトを含むことを特
    徴とする、請求項11に記載のマイクロカーネル・アー
    キテクチャ・データ処理システム。
  16. 【請求項16】データ処理システムのメモリ内にタスク
    ・コンテナを作成するため、前記メモリにマイクロカー
    ネルをロードするステップと、 前記データ処理システムの前記メモリに、選択されたオ
    ペレーティング・システム・パーソナリティ・プログラ
    ムをロードするステップと、 仮想アドレス空間を定義する属性の組を有し、メモリ・
    オブジェクトを指すテンプレート・ポインタを有するテ
    ンプレート領域を、前記メモリ内の特殊オブジェクトと
    して形成するために、前記選択されたオペレーティング
    ・システム・パーソナリティ・プログラムから前記カー
    ネルに呼出しを送るステップと、 前記属性の組を有し、前記テンプレート領域を指すタス
    ク・ポインタを有する前記タスク・コンテナを、前記テ
    ンプレート領域を前記タスク・コンテナにマッピング
    し、前記テンプレート・ポインタと前記タスク・ポイン
    タによって前記タスク・コンテナと前記メモリ・オブジ
    ェクトとの間の第1関係を確立することによって、前記
    メモリ内で前記マイクロカーネルを用いて形成するステ
    ップと、 前記メモリ・オブジェクトを指す前記テンプレート・ポ
    インタを修正するため前記テンプレート領域に対する仮
    想記憶動作を実行し、これによって、前記タスク・コン
    テナと前記メモリ・オブジェクトとの間の第2関係を確
    立するステップとを含む、マイクロカーネル・アーキテ
    クチャ・データ処理システム内で選択されたオペレーテ
    ィング・システム・パーソナリティ・プログラムを走行
    させる方法。
  17. 【請求項17】前記メモリ・オブジェクトが、前記メモ
    リ内の物理アドレスに対する仮想アドレスのマップであ
    り、第1メモリ・オブジェクトへの第1アドレス変換
    と、第2メモリ・オブジェクトへの第2アドレス変換と
    を含み、前記方法がさらに、 前記テンプレート・ポインタによって、前記記憶動作の
    前に、前記第1アドレス変換を指し、前記タスク・コン
    テナと前記第1メモリ・オブジェクトとの間の前記第1
    関係を確立するステップと、 前記テンプレート・ポインタによって、前記記憶動作の
    後に、前記第2アドレス変換を指し、前記タスク・コン
    テナと前記第2メモリ・オブジェクトとの間の前記第2
    関係を確立するステップとを含むことを特徴とする、請
    求項16に記載のマイクロカーネル・アーキテクチャ・
    データ処理システム内で選択されたオペレーティング・
    システム・パーソナリティ・プログラムを走行させる方
    法。
  18. 【請求項18】前記メモリ・オブジェクトが第2テンプ
    レート領域であり、前記方法がさらに、 前記テンプレート・ポインタによって、前記記憶動作の
    前に、前記第2テンプレートを指し、前記タスク・コン
    テナと前記第2テンプレートとの間の前記第1関係を確
    立するステップと、 前記テンプレート・ポインタによって、前記記憶動作の
    後に、第3テンプレート領域を指し、前記第2関係を確
    立するステップとを含むことを特徴とする、請求項16
    に記載のマイクロカーネル・アーキテクチャ・データ処
    理システム内で選択されたオペレーティング・システム
    ・パーソナリティ・プログラムを走行させる方法。
  19. 【請求項19】前記タスク・コンテナを形成するステッ
    プが、さらに、前記属性の組を有し、前記テンプレート
    領域を指すタスク・ポインタを有するタスク・コンテナ
    を、前記テンプレート領域を前記タスク・コンテナにマ
    ッピングすることによって、前記メモリ内に形成するた
    めに、前記選択されたオペレーティング・システム・パ
    ーソナリティ・プログラムから前記マイクロカーネルに
    第2の呼出しを送るステップを含むことを特徴とする、
    請求項16に記載のマイクロカーネル・アーキテクチャ
    ・データ処理システム内で選択されたオペレーティング
    ・システム・パーソナリティ・プログラムを走行させる
    方法。
  20. 【請求項20】データ処理システムのメモリ内にタスク
    ・コンテナを作成するための、前記メモリ内のマイクロ
    カーネルと、 前記メモリ内の特殊オブジェクトとしてテンプレート領
    域を形成するために前記マイクロカーネルに呼出しを送
    るための、前記データ処理システムの前記メモリ内の選
    択されたオペレーティング・システム・パーソナリティ
    ・プログラムと、 仮想アドレス空間を定義する属性の組を有し、メモリ・
    オブジェクトを指すテンプレート・ポインタを有する、
    前記呼出しに応答して形成される前記メモリ内のテンプ
    レート領域と、 前記属性の組を有し、前記テンプレート領域を指すタス
    ク・ポインタを有するタスク・コンテナであって、前記
    テンプレート領域を前記タスク・コンテナにマッピング
    することによって形成される、前記メモリ内の前記タス
    ク・コンテナと、 前記テンプレート・ポインタと前記タスク・ポインタと
    が、前記タスク・コンテナと前記メモリ・オブジェクト
    との間の第1関係を確立することと、 前記メモリ・オブジェクトを指す前記テンプレート・ポ
    インタを修正するため前記テンプレート領域に対する仮
    想記憶動作を実行し、これによって、前記タスク・コン
    テナと前記メモリ・オブジェクトとの間の第2関係を確
    立する手段とを含む、マイクロカーネル・アーキテクチ
    ャ・データ処理システム。
  21. 【請求項21】データ処理システムのメモリ内にタスク
    ・コンテナを作成するため、前記メモリにマイクロカー
    ネルをロードするステップと、 前記データ処理システムの前記メモリにパーソナリティ
    ・ニュートラル・サービス・プログラムをロードするス
    テップと、 仮想アドレス空間を定義する属性の組を有し、メモリ・
    オブジェクトを指すテンプレート・ポインタを有するテ
    ンプレート領域を、前記メモリ内の特殊オブジェクトと
    して形成するために、前記パーソナリティ・ニュートラ
    ル・サービス・プログラムから前記マイクロカーネルに
    呼出しを送るステップと、 前記属性の組を有し、前記テンプレート領域を指すテン
    プレート・ポインタを有するタスク・コンテナを、前記
    テンプレート領域を前記タスク・コンテナにマッピング
    することによって、前記メモリ内に前記マイクロカーネ
    ルを用いて形成するステップと、 前記テンプレート・ポインタと前記タスク・ポインタと
    によって、前記タスク・コンテナと前記メモリ・オブジ
    ェクトとの間の第1関係を確立するステップと、 前記メモリ・オブジェクトを指す前記テンプレート・ポ
    インタを修正するため前記テンプレート領域に対する仮
    想記憶動作を実行し、これによって、前記タスク・コン
    テナと前記メモリ・オブジェクトとの間に第2関係を確
    立するステップとを含む、マイクロカーネル・アーキテ
    クチャ・データ処理システム内でパーソナリティ・ニュ
    ートラル・サービス・プログラムを走行させる方法。
  22. 【請求項22】前記メモリ・オブジェクトが、前記メモ
    リ内の物理アドレスに対する仮想アドレスのマップであ
    り、第1メモリ・オブジェクトへの第1アドレス変換
    と、第2メモリ・オブジェクトへの第2アドレス変換と
    を含み、前記方法がさらに、 前記テンプレート・ポインタによって、前記記憶動作の
    前に、前記第1アドレス変換を指し、前記タスク・コン
    テナと前記第1メモリ・オブジェクトとの間の前記第1
    関係を確立するステップと、 前記テンプレート・ポインタによって、前記記憶動作の
    後に、前記第2アドレス変換を指し、前記タスク・コン
    テナと前記第2メモリ・オブジェクトとの間の前記第2
    関係を確立するステップとを含むことを特徴とする、請
    求項21に記載のマイクロカーネル・アーキテクチャ・
    データ処理システム内でパーソナリティ・ニュートラル
    ・サービス・プログラムを走行させる方法。
  23. 【請求項23】前記メモリ・オブジェクトが第2テンプ
    レート領域であり、前記方法がさらに、 前記テンプレート・ポインタによって、前記記憶動作の
    前に、前記第2テンプレートを指し、前記タスク・コン
    テナと前記第2テンプレートとの間の前記第1関係を確
    立するステップと、 前記テンプレート・ポインタによって、前記記憶動作の
    後に、第3テンプレート領域を指し、前記第2関係を確
    立するステップとを含むことを特徴とする、請求項21
    に記載のマイクロカーネル・アーキテクチャ・データ処
    理システム内でパーソナリティ・ニュートラル・サービ
    ス・プログラムを走行させる方法。
  24. 【請求項24】前記タスク・コンテナを形成するステッ
    プが、さらに、前記属性の組を有し、前記テンプレート
    領域を指す前記タスク・ポインタを有する前記タスク・
    コンテナを、前記テンプレート領域を前記タスク・コン
    テナにマッピングすることによって、前記メモリ内に形
    成するために、前記パーソナリティ・ニュートラル・サ
    ービス・プログラムから前記マイクロカーネルに第2の
    呼出しを送るステップを含むことを特徴とする、請求項
    21に記載のマイクロカーネル・アーキテクチャ・デー
    タ処理システム内でパーソナリティ・ニュートラル・サ
    ービス・プログラムを走行させる方法。
  25. 【請求項25】データ処理システムのメモリ内でタスク
    ・コンテナを作成するための、前記メモリ内のマイクロ
    カーネルと、 前記メモリ内の特殊オブジェクトとしてテンプレート領
    域を形成するために前記マイクロカーネルに呼出しを送
    るための、前記データ処理システムの前記メモリ内のパ
    ーソナリティ・ニュートラル・サービス・プログラム
    と、 仮想アドレス空間を定義する属性の組を有し、メモリ・
    オブジェクトを指すテンプレート・ポインタを有する、
    前記呼出しに応答して形成された前記メモリ内のテンプ
    レート領域と、 前記属性の組を有し、前記テンプレート領域を指すタス
    ク・ポインタを有するタスク・コンテナであって、前記
    テンプレート領域を前記タスク・コンテナにマッピング
    することによって形成される、前記メモリ内の前記タス
    ク・コンテナと、 前記テンプレート・ポインタと前記タスク・ポインタ
    が、前記タスク・コンテナと前記メモリ・オブジェクト
    との間の第1関係を確立することと、 前記メモリ・オブジェクトを指す前記テンプレート・ポ
    インタを修正するため前記テンプレート領域に対する仮
    想記憶動作を実行し、これによって、前記タスク・コン
    テナと前記メモリ・オブジェクトとの間の第2関係を確
    立する手段とを含む、マイクロカーネル・アーキテクチ
    ャ・データ処理システム。
  26. 【請求項26】データ処理システムのメモリ内にタスク
    ・コンテナを作成するため、前記メモリにマイクロカー
    ネルをロードするステップと、 前記データ処理システムの前記メモリにアプリケーショ
    ン・プログラムをロードするステップと、 仮想アドレス空間を定義する属性の組を有し、メモリ・
    オブジェクトを指すテンプレート・ポインタを有するテ
    ンプレート領域を、前記メモリ内の特殊オブジェクトと
    して形成するために、前記アプリケーション・プログラ
    ムから前記マイクロカーネルに呼出しを送るステップ
    と、 前記属性の組を有し、前記テンプレート領域を指すタス
    ク・ポインタを有する前記タスク・コンテナを、前記テ
    ンプレート領域を前記タスク・コンテナマッピングする
    ことによって、前記メモリ内で前記マイクロカーネルを
    用いて形成するステップと、 前記テンプレート・ポインタと前記タスク・ポインタに
    よって、前記タスク・コンテナと前記メモリ・オブジェ
    クトとの間の第1関係を確立するステップと、 前記メモリ・オブジェクトを指す前記テンプレート・ポ
    インタを修正するため前記テンプレート領域に対する仮
    想記憶動作を実行し、これによって、前記タスク・コン
    テナと前記メモリ・オブジェクトとの間の第2関係を確
    立するステップとを含む、マイクロカーネル・アーキテ
    クチャ・データ処理システムでアプリケーション・プロ
    グラムを走行させる方法。
  27. 【請求項27】前記メモリ・オブジェクトが、前記メモ
    リ内の物理アドレスに対する仮想アドレスのマップであ
    り、第1メモリ・オブジェクトへの第1アドレス変換
    と、第2メモリ・オブジェクトへの第2アドレス変換と
    を含み、前記方法がさらに、 前記テンプレート・ポインタによって、前記記憶動作の
    前に、前記第1アドレス変換を指し、前記タスク・コン
    テナと前記第1メモリ・オブジェクトとの間の前記第1
    関係を確立するステップと、 前記テンプレート・ポインタによって、前記記憶動作の
    後に、前記第2アドレス変換を指し、前記タスク・コン
    テナと前記第2メモリ・オブジェクトとの間の前記第2
    関係を確立するステップとを含むことを特徴とする、請
    求項26に記載のマイクロカーネル・アーキテクチャ・
    データ処理システムでアプリケーション・プログラムを
    走行させる方法。
  28. 【請求項28】前記メモリ・オブジェクトが第2テンプ
    レート領域であり、前記方法がさらに、 前記テンプレート・ポインタによって、前記記憶動作の
    前に、前記第2テンプレートを指し、前記タスク・コン
    テナと前記第2テンプレートとの間の前記第1関係を確
    立するステップと、 前記テンプレート・ポインタによって、前記記憶動作の
    後に、第3テンプレート領域を指し、前記第2関係を確
    立するステップとを含むことを特徴とする、請求項26
    に記載のマイクロカーネル・アーキテクチャ・データ処
    理システムでアプリケーション・プログラムを走行させ
    る方法。
  29. 【請求項29】前記タスク・コンテナを形成するステッ
    プが、さらに、前記属性の組を有し、前記テンプレート
    領域を指す前記タスク・ポインタを有する前記タスク・
    コンテナを、前記テンプレート領域を前記タスク・コン
    テナにマッピングすることによって、前記メモリ内に形
    成するために、前記アプリケーション・プログラムから
    前記マイクロカーネルに第2の呼出しを送るステップを
    含むことを特徴とする、請求項26に記載のマイクロカ
    ーネル・アーキテクチャ・データ処理システムでアプリ
    ケーション・プログラムを走行させる方法。
  30. 【請求項30】データ処理システムのメモリ内でタスク
    ・コンテナを作成するための、前記メモリ内のマイクロ
    カーネルと、 前記メモリ内の特殊オブジェクトとしてテンプレート領
    域を形成するために前記マイクロカーネルに呼出しを送
    るための、前記データ処理システムの前記メモリ内のア
    プリケーション・プログラムと、 仮想アドレス空間を定義する属性の組を有し、メモリ・
    オブジェクトを指すテンプレート・ポインタを有する、
    前記呼出しに応答して形成された前記メモリ内のテンプ
    レート領域と、 前記属性の組を有し、前記テンプレート領域を指すタス
    ク・ポインタを有するタスク・コンテナであって、前記
    テンプレート領域を前記タスク・ポインタにマッピング
    することによって形成される、前記メモリ内の前記タス
    ク・コンテナと、 前記テンプレート・ポインタと前記タスク・ポインタと
    が、前記タスク・コンテナと前記メモリ・オブジェクト
    との間の第1関係を確立することと、 前記メモリ・オブジェクトを指す前記テンプレート・ポ
    インタを修正するため前記テンプレート領域に対する仮
    想記憶動作を実行し、これによって、前記タスク・コン
    テナと前記メモリ・オブジェクトとの間の第2関係を確
    立する手段とを含む、マイクロカーネル・アーキテクチ
    ャ・データ処理システム。
  31. 【請求項31】プログラムされた命令を記憶するための
    補助記憶手段と、 前記補助記憶手段が前記プログラムされた命令をページ
    ングするキャッシュ・オブジェクトを記憶するための、
    前記補助記憶手段に結合されたメモリ手段と、 仮想アドレス空間を定義する属性の組と、前記キャッシ
    ュ・オブジェクトに向かうテンプレート・ポインタとを
    有する、前記メモリ手段内のテンプレート領域と、 前記メモリ手段内でタスクを作成するための、前記メモ
    リ手段内のマイクロカーネル手段と、 前記マイクロカーネル手段が前記テンプレート領域をタ
    スクへマッピングすることによって形成される、前記属
    性の組を有し、前記テンプレート領域を指すタスク・ポ
    インタを有する、前記メモリ手段内の前記タスクと、 前記テンプレート・ポインタと前記タスク・ポインタと
    が、前記タスクと前記キャッシュ・オブジェクトとの間
    の第1関係を確立することと、 前記プログラムされた命令を実行するための、前記メモ
    リ手段に結合されたプロセッサ手段と、 前記プロセッサ手段内での実行のため、前記第1関係を
    使用して、前記キャッシュ・オブジェクトから前記プロ
    グラムされた命令を取り出すための、前記タスクに関連
    する前記メモリ手段内のスレッド・オブジェクトと、 前記キャッシュ・オブジェクトに向かう前記テンプレー
    ト・ポインタを修正するため前記テンプレート領域に対
    する仮想記憶動作を実行し、これによって、前記タスク
    と前記キャッシュ・オブジェクトとの間の関係を変更す
    る手段とを含む、マイクロカーネル・アーキテクチャ・
    データ処理システム。
  32. 【請求項32】前記テンプレート・ポインタによって指
    され、前記キャッシュ・オブジェクトへの第1アドレス
    変換と第2メモリ・オブジェクトへの第2アドレス変換
    とを含む、前記メモリ手段内の物理アドレスに対する仮
    想アドレスのマップを含み、 前記テンプレート・ポインタが、前記記憶動作の前に、
    前記第1アドレス変換を指し、前記タスクと前記キャッ
    シュ・オブジェクトとの間の前記第1関係を確立し、 前記テンプレート・ポインタが、前記記憶動作の後に、
    前記第2アドレス変換を指し、前記タスクと前記第2メ
    モリ・オブジェクトとの間の第2関係を確立することを
    特徴とする、請求項31に記載のマイクロカーネル・ア
    ーキテクチャ・データ処理システム。
  33. 【請求項33】前記メモリ手段内の特殊オブジェクトと
    して前記テンプレート領域を形成するために前記マイク
    ロカーネル手段に呼出しを送るための、前記メモリ手段
    内のオペレーティング・システム・パーソナリティ・プ
    ログラム手段をさらに含む、請求項31に記載のマイク
    ロカーネル・アーキテクチャ・データ処理システム。
  34. 【請求項34】前記メモリ手段内の前記オペレーティン
    グ・システム・パーソナリティ・プログラム手段が、前
    記メモリ手段内の前記タスクを形成するために前記マイ
    クロカーネル手段に呼出しを送ることをさらに含む、請
    求項33に記載のマイクロカーネル・アーキテクチャ・
    データ処理システム。
  35. 【請求項35】前記メモリ手段内の特殊オブジェクトと
    して前記テンプレート領域を形成するために前記マイク
    ロカーネル手段に呼出しを送る、前記メモリ手段内のパ
    ーソナリティ・ニュートラル・サービス・プログラム手
    段をさらに含む、請求項31に記載のマイクロカーネル
    ・アーキテクチャ・データ処理システム。
  36. 【請求項36】前記メモリ手段内で前記タスクを形成す
    るために前記マイクロカーネル手段に呼出しを送るため
    の、前記メモリ手段内の前記パーソナリティ・ニュート
    ラル・サービス・プログラム手段をさらに含む、請求項
    35に記載のマイクロカーネル・アーキテクチャ・デー
    タ処理システム。
  37. 【請求項37】前記メモリ手段内の特殊オブジェクトと
    して前記テンプレート領域を形成するため前記マイクロ
    カーネル手段に呼出しを送るための、前記メモリ手段内
    のアプリケーション・プログラム手段をさらに含む、請
    求項31に記載のマイクロカーネル・アーキテクチャ・
    データ処理システム。
  38. 【請求項38】前記メモリ手段内で前記タスクを形成す
    るために前記マイクロカーネル手段に呼出しを送るため
    の、前記メモリ手段内の前記アプリケーション・プログ
    ラム手段をさらに含む、請求項37に記載のマイクロカ
    ーネル・アーキテクチャ・データ処理システム。
  39. 【請求項39】プログラムされた命令を含むキャッシュ
    ・オブジェクトを記憶するためのメモリ手段と、 属性の組を有し、前記キャッシュ・オブジェクトに向か
    うテンプレート・ポインタを有する、前記メモリ手段内
    のテンプレート領域と、 前記テンプレート領域をタスクにマッピングすることに
    よって前記メモリ手段内でタスクを作成するための、前
    記メモリ手段内のマイクロカーネル手段と、 前記属性の組を有し、前記テンプレート領域を指すタス
    ク・ポインタを有する、前記マイクロカーネル手段によ
    って形成される前記メモリ手段内のタスクと、 前記テンプレート・ポインタと前記タスク・ポインタと
    が、前記タスクと前記キャッシュ・オブジェクトとの間
    の第1関係を確立することと、 前記プログラムされた命令を実行するための、前記メモ
    リ手段に結合されたプロセッサ手段と、 前記プロセッサ手段内での実行のため、前記第1関係を
    使用して前記キャッシュ・オブジェクトから前記プログ
    ラムされた命令を取り出すための、前記タスクに関連す
    る前記メモリ手段内のスレッドとを含む、マイクロカー
    ネル・アーキテクチャ・データ処理システム。
  40. 【請求項40】前記メモリ手段内の特殊オブジェクトと
    して前記テンプレート領域を形成するため前記マイクロ
    カーネル手段に呼出しを送るための、前記メモリ手段内
    のオペレーティング・システム・パーソナリティ・プロ
    グラム手段をさらに含む、請求項39に記載のマイクロ
    カーネル・アーキテクチャ・データ処理システム。
  41. 【請求項41】前記メモリ手段内で前記タスクを形成す
    るため前記マイクロカーネル手段に呼出しを送る、前記
    メモリ手段内のオペレーティング・システム・パーソナ
    リティ・プログラム手段をさらに含む、請求項39に記
    載のマイクロカーネル・アーキテクチャ・データ処理シ
    ステム。
  42. 【請求項42】前記メモリ手段内の特殊オブジェクトと
    して前記テンプレート領域を形成するため前記マイクロ
    カーネル手段に呼出しを送る、前記メモリ手段内のパー
    ソナリティ・ニュートラル・サービス・プログラム手段
    をさらに含む、請求項39に記載のマイクロカーネル・
    アーキテクチャ・データ処理システム。
  43. 【請求項43】前記メモリ手段内で前記タスクを形成す
    るため前記マイクロカーネル手段に呼出しを送るため
    の、前記メモリ手段内のパーソナリティ・ニュートラル
    ・サービス・プログラム手段をさらに含む、請求項39
    に記載のマイクロカーネル・アーキテクチャ・データ処
    理システム。
  44. 【請求項44】前記メモリ手段内の特殊オブジェクトと
    して前記テンプレート領域を形成するため前記マイクロ
    カーネル手段に呼出しを送るための、前記メモリ手段内
    のアプリケーション・プログラム手段をさらに含む、請
    求項39に記載のマイクロカーネル・アーキテクチャ・
    データ処理システム。
  45. 【請求項45】前記メモリ手段内で前記タスクを形成す
    るため前記マイクロカーネル手段に呼出しを送るため
    の、前記メモリ手段内のアプリケーション・プログラム
    手段をさらに含む、請求項39に記載のマイクロカーネ
    ル・アーキテクチャ・データ処理システム。
  46. 【請求項46】プログラムされた命令を記憶するための
    補助記憶手段と、 前記補助記憶手段が前記プログラムされた命令をページ
    ングするキャッシュ・オブジェクトを記憶するための、
    前記補助記憶手段に結合されたメモリ手段と、 属性の組を有し、前記キャッシュ・オブジェクトに向か
    うテンプレート・ポインタを有する、前記メモリ手段内
    のテンプレート領域と、 前記テンプレート領域をタスクにマッピングすることに
    よって前記メモリ手段内にタスクを形成するための、前
    記メモリ手段内のマイクロカーネル手段と、 前記属性の組を有し、前記テンプレート領域を指すタス
    ク・ポインタを有する、前記マイクロカーネル手段によ
    って形成される前記メモリ手段内のタスクと、 前記テンプレート・ポインタと前記タスク・ポインタと
    が、前記タスクと前記キャッシュ・オブジェクトとの間
    の第1関係を確立することと、 前記プログラムされた命令を実行するための、前記メモ
    リ手段に結合されたプロセッサ手段と、 前記プロセッサ手段内での実行のため、前記第1関係を
    使用して前記キャッシュ・オブジェクトから前記プログ
    ラムされた命令を取り出すための、前記タスクに関連す
    る前記メモリ手段内のスレッドとを含む、マイクロカー
    ネル・アーキテクチャ・データ処理システム。
  47. 【請求項47】プログラムされた命令を記憶するための
    補助記憶手段と、 前記補助記憶手段が前記プログラムされた命令をページ
    ングするキャッシュ・オブジェクトを記憶するための、
    前記補助記憶手段に結合されたメモリ手段と、 属性の組を有し、前記キャッシュ・オブジェクトに向か
    う第1テンプレート・ポインタと第2テンプレート・ポ
    インタとを有する、前記メモリ手段内のテンプレート領
    域と、 前記テンプレート領域をタスクにマッピングすることに
    よって前記メモリ手段内にタスクを作成するための、前
    記メモリ手段内のマイクロカーネル手段と、 前記属性の組を有し、前記テンプレート領域を指す第1
    タスク・ポインタを有する、前記マイクロカーネル手段
    によって形成される前記メモリ手段内の第1タスクと、 前記第1テンプレート・ポインタと前記第1タスク・ポ
    インタとが、前記第1タスクと前記キャッシュ・オブジ
    ェクトとの間の第1関係を確立することと、 前記プログラムされた命令を実行するための、前記メモ
    リ手段に結合された第1プロセッサ手段と、 前記第1プロセッサ手段内での実行のため、前記第1関
    係を使用して前記キャッシュ・オブジェクトから前記プ
    ログラムされた命令を取り出すための、前記第1タスク
    に関連する前記メモリ手段内の第1スレッドと、 前記属性の組を有し、前記テンプレート領域を指す第2
    タスク・ポインタを有する、前記マイクロカーネル手段
    によって形成された前記メモリ手段内の第2タスクと、 前記第2テンプレート・ポインタと前記第2タスク・ポ
    インタとが、前記第2タスクと前記キャッシュ・オブジ
    ェクトとの間の第2関係を確立することと、 前記プログラムされた命令を実行するための、前記メモ
    リ手段に結合された第2プロセッサ手段と、 前記第2プロセッサ手段内での実行のため、前記第2関
    係を使用して前記キャッシュ・オブジェクトから前記プ
    ログラムされた命令を取り出すための、前記第2タスク
    に関連する前記メモリ手段内の第2スレッドとを含む、
    マイクロカーネル・アーキテクチャ・データ処理システ
    ム。
  48. 【請求項48】プログラムされた命令を記憶するための
    補助記憶手段と、 前記補助記憶手段が前記プログラムされた命令をページ
    ングするキャッシュ・オブジェクトを記憶するための、
    前記補助記憶手段に結合されたメモリ手段と、 属性の組を有し、前記キャッシュ・オブジェクトに向か
    うテンプレート・ポインタを有する、前記メモリ手段内
    のテンプレート領域と、 前記テンプレート領域をタスクにマッピングすることに
    よって前記メモリ手段内でタスクを作成するための、前
    記メモリ手段内のマイクロカーネル手段と、 前記属性の組を有し、前記テンプレート領域を指す第1
    タスク・ポインタを有する、前記マイクロカーネルによ
    って形成される前記メモリ手段内の第1タスクと、 前記第1テンプレート・ポインタと前記タスク・ポイン
    タとが、前記第1タスクと前記キャッシュ・オブジェク
    トとの間の第1関係を確立することと、 前記プログラムされた命令を実行するための、前記メモ
    リ手段に結合された第1プロセッサ手段と、 前記第1プロセッサ手段内での実行のため、前記第1関
    係を使用して前記キャッシュ・オブジェクトから前記プ
    ログラムされた命令を取り出すための、前記第1タスク
    に関連する前記メモリ手段内の第1スレッドと、 前記属性の組を有し、前記テンプレート領域を指す第2
    タスク・ポインタを有する、前記マイクロカーネル手段
    によって形成された前記メモリ手段内の第2タスクと、 前記テンプレート・ポインタと前記第2タスク・ポイン
    タとが、前記第2タスクと前記キャッシュ・オブジェク
    トとの間の前記第1関係を確立することと、 前記プログラムされた命令を実行するための、前記メモ
    リ手段に結合された第2プロセッサ手段と、 前記第2プロセッサ手段内での実行のため、前記第1関
    係を使用して前記キャッシュ・オブジェクトから前記プ
    ログラムされた命令を取り出すための、前記第2タスク
    に関連する前記メモリ手段内の第2スレッドとを含む、
    マイクロカーネル・アーキテクチャ・データ処理システ
    ム。
JP15423095A 1994-06-22 1995-06-21 マイクロカーネル・アーキテクチャ・データ処理システム及びそのメモリ管理方法、オペレーティング・システム・パーソナリティ・プログラムを走行させる方法、アプリケーション・プログラムを走行させる方法 Expired - Fee Related JP3570525B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US08/263,710 US5729710A (en) 1994-06-22 1994-06-22 Method and apparatus for management of mapped and unmapped regions of memory in a microkernel data processing system
US263710 1994-06-22

Publications (2)

Publication Number Publication Date
JPH0816412A true JPH0816412A (ja) 1996-01-19
JP3570525B2 JP3570525B2 (ja) 2004-09-29

Family

ID=23002937

Family Applications (1)

Application Number Title Priority Date Filing Date
JP15423095A Expired - Fee Related JP3570525B2 (ja) 1994-06-22 1995-06-21 マイクロカーネル・アーキテクチャ・データ処理システム及びそのメモリ管理方法、オペレーティング・システム・パーソナリティ・プログラムを走行させる方法、アプリケーション・プログラムを走行させる方法

Country Status (6)

Country Link
US (1) US5729710A (ja)
EP (1) EP0693728A1 (ja)
JP (1) JP3570525B2 (ja)
KR (1) KR0170565B1 (ja)
BR (1) BR9502801A (ja)
CA (1) CA2147529A1 (ja)

Families Citing this family (98)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5875487A (en) * 1995-06-07 1999-02-23 International Business Machines Corporation System and method for providing efficient shared memory in a virtual memory system
US6023711A (en) * 1995-06-08 2000-02-08 International Business Machines Corporation System and method for flexible file encapsulation through latent levels of isolation
US5829013A (en) * 1995-12-26 1998-10-27 Intel Corporation Memory manager to allow non-volatile memory to be used to supplement main memory
US6064811A (en) * 1996-06-17 2000-05-16 Network Associates, Inc. Computer memory conservation system
JPH1049381A (ja) * 1996-07-04 1998-02-20 Internatl Business Mach Corp <Ibm> 複数のデータ処理要求の処理方法及び処理システム、プログラムの実行方法及びシステム
US6434663B1 (en) * 1996-09-06 2002-08-13 Intel Corporation Disk block allocation optimization methodology with accommodation for file system cluster size greater than operating system memory page size
US6681239B1 (en) * 1996-12-23 2004-01-20 International Business Machines Corporation Computer system having shared address space among multiple virtual address spaces
US5913230A (en) * 1997-01-07 1999-06-15 Richardson; John J. Object and method for providing efficient multi-user access to shared operating system kernal code using instancing
AU6586898A (en) 1997-03-21 1998-10-20 University Of Maryland Spawn-join instruction set architecture for providing explicit multithreading
US5951706A (en) * 1997-06-30 1999-09-14 International Business Machines Corporation Method of independent simultaneous queueing of message descriptors
US6003066A (en) * 1997-08-14 1999-12-14 International Business Machines Corporation System for distributing a plurality of threads associated with a process initiating by one data processing station among data processing stations
US5931919A (en) * 1997-11-07 1999-08-03 Xerox Corporation State-based object transition control and attribute-based locking
US6173248B1 (en) 1998-02-09 2001-01-09 Hewlett-Packard Company Method and apparatus for handling masked exceptions in an instruction interpreter
US6219770B1 (en) * 1998-03-23 2001-04-17 Compaq Computer Corporation Method and apparatus for managing copy on write operations in a virtual memory
US6223186B1 (en) * 1998-05-04 2001-04-24 Incyte Pharmaceuticals, Inc. System and method for a precompiled database for biomolecular sequence information
US6470436B1 (en) 1998-12-01 2002-10-22 Fast-Chip, Inc. Eliminating memory fragmentation and garbage collection from the process of managing dynamically allocated memory
EP1068572A2 (en) * 1999-01-06 2001-01-17 Koninklijke Philips Electronics N.V. Arrangement for executing program code with reduced memory requirements
US6594671B1 (en) * 1999-06-14 2003-07-15 International Business Machines Corporation Separating privileged functions from non-privileged functions in a server instance
US6549996B1 (en) * 1999-07-02 2003-04-15 Oracle Corporation Scalable multiple address space server
WO2001018653A1 (en) * 1999-09-07 2001-03-15 Fast-Chip Incorporated Dynamic memory caching
EP1667027A1 (en) 1999-09-07 2006-06-07 Intel Corporation Dynamic memory caching
US7140015B1 (en) * 1999-09-29 2006-11-21 Network Appliance, Inc. Microkernel for real time applications
US6345351B1 (en) * 1999-11-12 2002-02-05 Telefonaktiebolaget Lm Ericsson(Publ) Maintenance of speculative state of parallel executed jobs in an information processing system
US6772416B1 (en) 1999-11-19 2004-08-03 General Dynamics Decision Systems, Inc. Separation kernel with memory allocation, remote procedure call and exception handling mechanisms
AU2004202666B2 (en) * 1999-11-19 2007-03-22 General Dynamics C4 Systems, Inc. A method of allocating memory and performing a remote procedure call
US6772212B1 (en) * 2000-03-08 2004-08-03 Phatnoise, Inc. Audio/Visual server
US7127525B2 (en) * 2000-05-26 2006-10-24 Citrix Systems, Inc. Reducing the amount of graphical line data transmitted via a low bandwidth transport protocol mechanism
US20020016878A1 (en) * 2000-07-26 2002-02-07 Flores Jose L. Technique for guaranteeing the availability of per thread storage in a distributed computing environment
US7073173B1 (en) * 2000-12-04 2006-07-04 Microsoft Corporation Code and thread differential addressing via multiplex page maps
JP4457184B2 (ja) * 2001-02-13 2010-04-28 ネットアップ,インコーポレイテッド ストレージシステムにおけるフェイルオーバー処理
US7065755B2 (en) * 2001-03-15 2006-06-20 Sun Microsystems, Inc. Method and apparatus for removing class initialization barriers from shared compiled methods
US7089561B2 (en) * 2001-06-01 2006-08-08 Microsoft Corporation Methods and systems for creating and communicating with computer processes
US6671786B2 (en) * 2001-06-07 2003-12-30 Microsoft Corporation System and method for mirroring memory with restricted access to main physical mirrored memory
US7318238B2 (en) * 2002-01-14 2008-01-08 Microsoft Corporation Security settings for markup language elements
US7058786B1 (en) * 2002-01-17 2006-06-06 Hewlett-Packard Development Company Operating system data communication method and system
AU2003298560A1 (en) * 2002-08-23 2004-05-04 Exit-Cube, Inc. Encrypting operating system
US7155571B2 (en) * 2002-09-30 2006-12-26 International Business Machines Corporation N-source in-kernel cache for high performance in computer operating systems
US7085909B2 (en) * 2003-04-29 2006-08-01 International Business Machines Corporation Method, system and computer program product for implementing copy-on-write of a file
US20040268139A1 (en) * 2003-06-25 2004-12-30 Microsoft Corporation Systems and methods for declarative client input security screening
US7650601B2 (en) * 2003-12-04 2010-01-19 International Business Machines Corporation Operating system kernel-assisted, self-balanced, access-protected library framework in a run-to-completion multi-processor environment
GB2453284A (en) * 2004-04-02 2009-04-01 Symbian Software Ltd Mechanism for notifying a kernel of a thread entering a critical section.
US20050251804A1 (en) * 2004-05-04 2005-11-10 International Business Machines Corporation Method, data processing system, and computer program product for detecting shared resource usage violations
US7249238B2 (en) * 2004-06-15 2007-07-24 International Business Machines Corporation Memory tracking with preservation of alignment semantics
US7562359B1 (en) * 2004-08-26 2009-07-14 Wind River Systems, Inc. User process object code installer
US7831642B1 (en) * 2004-09-30 2010-11-09 Symantec Operating Corporation Page cache management for a shared file
US7793293B2 (en) * 2004-11-01 2010-09-07 Hewlett-Packard Development Company, L.P. Per processor set scheduling
US8214461B1 (en) * 2004-11-23 2012-07-03 Hewlett-Packard Development Company, L.P. Method of processing request by server computer system
US7613671B2 (en) * 2005-02-15 2009-11-03 Fair Isaac Corporation Approach for re-using business rules
US8219823B2 (en) 2005-03-04 2012-07-10 Carter Ernst B System for and method of managing access to a system using combinations of user information
US8171169B2 (en) * 2005-03-14 2012-05-01 Citrix Systems, Inc. Method and apparatus for updating a graphical display in a distributed processing environment
US8423673B2 (en) 2005-03-14 2013-04-16 Citrix Systems, Inc. Method and apparatus for updating a graphical display in a distributed processing environment using compression
US7519636B2 (en) * 2005-03-30 2009-04-14 Sap Ag Key sequenced clustered I/O in a database management system
US7454477B2 (en) * 2005-05-16 2008-11-18 Microsoft Corporation Zero-copy transfer of memory between address spaces
US8078740B2 (en) * 2005-06-03 2011-12-13 Microsoft Corporation Running internet applications with low rights
US7698510B2 (en) * 2005-06-22 2010-04-13 Hewlett-Packard Development Company, L.P. Systems and methods for identifying and registering a range of virtual memory
US7793299B2 (en) * 2005-08-30 2010-09-07 International Business Machines Corporation System and method for scheduling tasks for execution
US7516291B2 (en) * 2005-11-21 2009-04-07 Red Hat, Inc. Cooperative mechanism for efficient application memory allocation
US7734842B2 (en) * 2006-03-28 2010-06-08 International Business Machines Corporation Computer-implemented method, apparatus, and computer program product for managing DMA write page faults using a pool of substitute pages
US8769311B2 (en) 2006-05-31 2014-07-01 International Business Machines Corporation Systems and methods for transformation of logical data objects for storage
JP5431148B2 (ja) 2006-05-31 2014-03-05 インターナショナル・ビジネス・マシーンズ・コーポレーション ストレージ用論理データオブジェクトの変換方法およびシステム
US8185737B2 (en) * 2006-06-23 2012-05-22 Microsoft Corporation Communication across domains
US20080046724A1 (en) * 2006-07-25 2008-02-21 General Dynamics C4 System, Inc. Method for governing interaction between code within a code base
US20080066183A1 (en) * 2006-09-12 2008-03-13 George Madathilparambil George Master device for manually enabling and disabling read and write protection to parts of a storage disk or disks for users
US8443341B2 (en) * 2006-11-09 2013-05-14 Rogue Wave Software, Inc. System for and method of capturing application characteristics data from a computer system and modeling target system
US7805403B2 (en) 2007-01-07 2010-09-28 Apple Inc. Synchronization methods and systems
US7853679B2 (en) * 2007-03-12 2010-12-14 Citrix Systems, Inc. Systems and methods for configuring handling of undefined policy events
US8490148B2 (en) 2007-03-12 2013-07-16 Citrix Systems, Inc Systems and methods for managing application security profiles
US7853678B2 (en) 2007-03-12 2010-12-14 Citrix Systems, Inc. Systems and methods for configuring flow control of policy expressions
US7865589B2 (en) 2007-03-12 2011-01-04 Citrix Systems, Inc. Systems and methods for providing structured policy expressions to represent unstructured data in a network appliance
US7870277B2 (en) * 2007-03-12 2011-01-11 Citrix Systems, Inc. Systems and methods for using object oriented expressions to configure application security policies
US8631147B2 (en) 2007-03-12 2014-01-14 Citrix Systems, Inc. Systems and methods for configuring policy bank invocations
US7926035B2 (en) * 2007-04-24 2011-04-12 Microsoft Corporation Testing multi-thread software using prioritized context switch limits
WO2008132761A2 (en) 2007-04-26 2008-11-06 Hewlett-Packard Development Company L.P. Method and system for managing heap across process replication
US10019570B2 (en) * 2007-06-14 2018-07-10 Microsoft Technology Licensing, Llc Protection and communication abstractions for web browsers
US20090158299A1 (en) * 2007-10-31 2009-06-18 Carter Ernst B System for and method of uniform synchronization between multiple kernels running on single computer systems with multiple CPUs installed
US8914567B2 (en) * 2008-09-15 2014-12-16 Vmware, Inc. Storage management system for virtual machines
US8073674B2 (en) * 2008-09-23 2011-12-06 Oracle America, Inc. SCSI device emulation in user space facilitating storage virtualization
KR101003102B1 (ko) * 2008-09-24 2010-12-21 한국전자통신연구원 멀티 프로세싱 유닛에 대한 메모리 매핑방법, 및 장치
US9329951B2 (en) 2009-07-31 2016-05-03 Paypal, Inc. System and method to uniformly manage operational life cycles and service levels
US8353019B2 (en) * 2010-03-26 2013-01-08 Canon Kabushiki Kaisha Security token destined for multiple or group of service providers
US9112769B1 (en) * 2010-12-27 2015-08-18 Amazon Technologies, Inc. Programatically provisioning virtual networks
US9342348B2 (en) 2012-01-23 2016-05-17 Brocade Communications Systems, Inc. Transparent high availability for stateful services
US8935475B2 (en) * 2012-03-30 2015-01-13 Ati Technologies Ulc Cache management for memory operations
US9519887B2 (en) * 2014-12-16 2016-12-13 Bank Of America Corporation Self-service data importing
US10225361B2 (en) 2016-06-29 2019-03-05 International Business Machines Corporation Content management in caching services
US11126740B2 (en) * 2016-11-04 2021-09-21 Microsoft Technology Licensing, Llc Storage isolation for containers
US10423478B2 (en) * 2017-08-29 2019-09-24 Red Hat, Inc. Security enhanced out of process user space handling of hardware events
US10437735B2 (en) 2017-12-13 2019-10-08 Red Hat, Inc. Process isolation for out of process page fault handling
CN109086221B (zh) * 2018-07-20 2021-10-29 郑州云海信息技术有限公司 一种增加存储设备内存容量的方法及系统
US20200065013A1 (en) * 2018-08-21 2020-02-27 International Business Machines Corporation Selective memory page initialization
US10997083B2 (en) * 2018-09-04 2021-05-04 Arm Limited Parallel page table entry access when performing address translations
US11741196B2 (en) 2018-11-15 2023-08-29 The Research Foundation For The State University Of New York Detecting and preventing exploits of software vulnerability using instruction tags
US10795739B1 (en) * 2019-09-06 2020-10-06 Facebook Technologies, Llc Port configuration for microkernel operating system
US11314566B1 (en) * 2019-09-06 2022-04-26 Facebook Technologies, Llc. Inter-process communication for microkernel operating system
US11113128B1 (en) 2019-09-06 2021-09-07 Facebook Technologies, Llc Circular queue for microkernel operating system
CN112182580B (zh) * 2019-09-19 2024-04-09 中国科学院信息工程研究所 一种基于处理器芯片的内存漏洞检测方法及电子装置
US10990439B1 (en) * 2019-09-26 2021-04-27 Facebook Technologies, Llc Tracing task execution across services in microkernel-based operating systems
CN112799799A (zh) * 2020-12-29 2021-05-14 杭州涂鸦信息技术有限公司 数据消费方法及装置

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE331900C (de) * 1921-01-17 Moll Werke Akt Ges Schmiedeeiserner Gliederheizkoerper mit Schraubnippelverbindungen und Abstandshuelsen zwischen den Gliedern
GB416768A (en) * 1932-12-29 1934-09-20 Konrad Zilcken Improvements in and relating to socks and stockings
US4945480A (en) * 1988-02-10 1990-07-31 International Business Machines Corporation Data domain switching on program address space switching and return
DE69032418T2 (de) * 1989-09-08 1999-02-25 Digital Equipment Corp Privatspeicher für Fäden in einem multifaden digitalen Datenverarbeitungssystem
US5428729A (en) * 1991-12-20 1995-06-27 International Business Machines Corporation System and method for computer aided software engineering

Also Published As

Publication number Publication date
EP0693728A1 (en) 1996-01-24
JP3570525B2 (ja) 2004-09-29
KR0170565B1 (ko) 1999-03-30
US5729710A (en) 1998-03-17
BR9502801A (pt) 1997-08-05
KR960001993A (ko) 1996-01-26
CA2147529A1 (en) 1995-12-23

Similar Documents

Publication Publication Date Title
JP3570525B2 (ja) マイクロカーネル・アーキテクチャ・データ処理システム及びそのメモリ管理方法、オペレーティング・システム・パーソナリティ・プログラムを走行させる方法、アプリケーション・プログラムを走行させる方法
US5771383A (en) Shared memory support method and apparatus for a microkernel data processing system
Elphinstone et al. From L3 to seL4 what have we learnt in 20 years of L4 microkernels?
Golm et al. The JX Operating System.
JP2986073B2 (ja) プロセス間通信方法並びにプロセス間通信用のサブシステムおよびシステム
JPH0855035A (ja) マイクロカーネル・データ処理システム用の伝送制御の分離の方法および装置
Wilkinson et al. Angel: A proposed multiprocessor operating system kernel
Uhlig Scalability of microkernel-based systems
JP2888420B2 (ja) マルチタスク・アーキテクチャにおけるプロセス間通信方法
Au et al. L4 user manual
Kougiouris A device management framework for an object-oriented operating system
JPH0855037A (ja) プロセス間通信方法およびプロセス間通信用のシステム
Rotta et al. Mythos—scalable os design for extremely parallel applications
EP0689138A2 (en) Temporary data method and apparatus for a microkernel data processing system
Uhlig The mechanics of in-kernel synchronization for a scalable microkernel
Loepere OSF Mach Final Draft Kernel Principles
Seo et al. An effective design of master-slave operating system architecture for multiprocessor embedded systems
EP0846288B1 (en) Portable object-oriented operating system
Draves et al. The Rialto virtual memory system
Leblanc et al. The elmwood multiprocessor operating system
Gurevich The M-Machine operating system
Lemerre et al. A communication mechanism for resource isolation
Appavoo et al. Utilizing Linux kernel components in K42
Chapman vNUMA: Virtual shared-memory multiprocessors
Haeberlen Managing kernel memory resources from user level

Legal Events

Date Code Title Description
A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20040616

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20080702

Year of fee payment: 4

LAPS Cancellation because of no payment of annual fees