日本-日本語

製品  >  ソフトウェア  >  OpenVMS  >  マニュアル

OpenVMS マニュアル


≫ 

OpenVMS V8.3
ライブラリ

タイトルページ
目次
まえがき
第 1 章:はじめに
第 2 章:仮想アドレス空間の概要
第 3 章:システム・サービスの 64 ビット・アドレッシングのサポート
第 4 章:メモリ管理 VLM 機能
第 5 章:64 ビット・アドレッシングを対象とする RMS インタフェースの強化
第 6 章:ファイル・システムの 64 ビット・アドレッシングのサポート
第 7 章:OpenVMS Alpha デバイスの 64 ビット・アドレッシングのサポート
第 8 章:OpenVMS Alpha 64 ビット API ガイドライン
第 9 章:64 ビット・アドレッシングをサポートする OpenVMS Alpha ツールおよびユーティリティ
第 10 章:言語およびポインタの 64 ビット・アドレッシング・サポート
第 11 章:DEC C RTL の 64 ビット・アドレッシング・サポート
付録 A :64 ビット・アドレッシングのための C マクロ
付録 B :64 ビット・アドレッシングのための MACRO-32 マクロ
付録 C :64 ビット・プログラム例
付録 D :VLM プログラム例
索引
PDF
OpenVMS ホーム
Open VMS Alpha オペレーティング・システム | HPE 日本(日本ヒューレット・パッカード株式会社)

Open VMS Alpha オペレーティング・システム
64 ビット・アドレッシングおよび VLM 機能説明書


目次 索引

第 2 章
仮想アドレス空間の概要

本章では, OpenVMS Alpha 64 ビット仮想メモリ・アドレス空間のレイアウトと構成要素について説明します。

64 ビット・アドレッシングをサポートする OpenVMS ALpha プログラミング・ツールや言語についての詳細,および 64 ビット・アドレッシングや VLM をサポートするようアプリケーションを拡張する場合の注意点については,本書のこれ以降の章を参照してください。



2.1 従来の OpenVMS 32 ビット仮想アドレス空間レイアウト

以前のバージョンの OpenVMS Alpha オペレーティング・システムの場合,仮想アドレス空間のレイアウトは基本的に, VAX アーキテクチャによって定義される 32 ビット仮想アドレス空間に基づいていました。 OpenVMS VAX レイアウトに基づく OpenVMS Alpha レイアウトを 図 2-1 に示します。

図 2-1 32 ビット仮想アドレス空間レイアウト


OpenVMS VAX 仮想アドレス空間の下半分 (アドレス 0 〜 7FFFFFFF16) は, プロセス・プライベート空間と呼ばれています。 プロセス・プライベート空間 この空間はさらに,P0 空間および P1 空間という 2 つの等しい空間に分けられます。各空間とも 1 GB 長です。 P0 空間の範囲は 0 から 3FFFFFFF16 です。 P0 空間は 0 の位置で始まり,アドレスが増加する方向に向かって拡張します。 一方,P1 空間の範囲は 4000000016 から 7FFFFFFF16 です。 P1 は 7FFFFFFF16 の位置で始まり,アドレスが減少する方向に向かって拡張します。

VAX 仮想アドレス空間の上半分は,システム空間と呼ばれています。 システム空間の下半分 (アドレス 8000000016 〜 BFFFFFFF16) は, S0 空間と呼ばれています。 S0 空間は 8000000016 で始まり,アドレスが増加する方向に向かって拡張します。

VAX アーキテクチャでは,ページ・テーブルと仮想アドレス空間の各領域を関連付けています。プロセッサは,システム・ページ・テーブルを使用して,システム空間アドレスを変換します。また,各プロセスは,プロセス自身の P0 ページ・テーブルおよび P1 ページ・テーブルを持ちます。なお,VAX ページ・テーブルは,可能な仮想アドレス空間をすべてマップするわけではありません。作成されたそのリージョンの一部だけをマップします。

2.2 OpenVMS Alpha 64 ビット仮想アドレス空間レイアウト

OpenVMS Alpha 64 ビット・アドレス空間レイアウトは,従来の OpenVMS 32 ビット・アドレス空間レイアウトを拡張したものです。

64 ビット仮想アドレス空間レイアウトの設計を 図 2-2 に示します。

図 2-2 64 ビット仮想アドレス空間レイアウト


64 ビット仮想アドレス空間レイアウトは, OpenVMS Alpha オペレーティング・システムおよびそのユーザの,現在の要望,および将来の要望を満たすように設計されています。新しいアドレス空間は,次の基本領域で構成されています。

  • プロセス・プライベート空間

  • システム空間

  • ページ・テーブル空間



2.2.1 プロセス・プライベート空間

プロセス・プライベート・アドレス空間は, OpenVMS オペレーティング・システムのメモリ管理設計の中心です。

プロセス・プライベート空間,つまりプロセス空間は, PT 空間以下のすべての仮想アドレスを含みます。 図 2-2 に示すように,プロセス空間のレイアウトは,さらに P0,P1,および P2 空間に分かれています。 P0 空間はプログラム領域,P1 空間は制御領域, P2 空間は 64 ビット・プログラム領域です。

P0 および P1 空間 は, VAX アーキテクチャで定義している P0 および P1 領域と同等に定義されています。両者で,0.0000000016 から 0.7FFFFFFF16 の範囲に相当する従来の 32 ビット・プロセス・プライベート領域を含みます。 P2 空間 は,P1 空間のすぐ上の 0.8000000016 で始まり, PT 空間の最下位アドレスのすぐ下で終了する残りのプロセス空間をすべて含みます。

単一 64 ビット整数として解釈される場合, P2 空間アドレスは正の値でも負の値でも構いません。

2.2.2 システム空間

64 ビット・システム空間 は, PT 空間を含む範囲よりも高位の 64 ビット仮想アドレス範囲全体の部分に相当します。 図 2-2 に示すように,システム空間はさらに S0,S1,および S2 空間に分かれています。

S0 および S1 空間 は, VAX アーキテクチャで定義している S0 および S1 領域と同等に定義されています。両者で,FFFFFFFF.8000000016 から FFFFFFFF.FFFFFFFF16 の範囲に相当する従来の 32 ビット・プロセス・プライベート領域を含みます。 S2 空間 は,PT 空間の最高位アドレスと,結合された S0/S1 空間の最下位アドレスとの間に存在する,残りのシステム空間をすべて含みます。

S0, S1,および S2 空間は,すべてのプロセスによって完全に共用されます。 S0,および S1 は,上位方向の仮想アドレスに向かって拡張します。 S2 空間は,一般に下位方向の仮想アドレスに向かって拡張します。

システム空間内のアドレスを作成および削除できるのは,カーネル・モードで実行されるコードだけです。ただしシステム空間ページのページ保護を設定することによって,特権の少ないアクセス・モードでも読み込みおよび書き込みアクセスを認めることができます。

システム空間ベース は, S2_SIZE システム・パラメータにより制御されます。 S2_SIZE は,S2 空間を予約するためのメガバイト数です。省略時の設定の値は,64 ビット(S2) システム空間を使用することが予想される要素が,それぞれ必要とするサイズに基づきます。ブート時に OpenVMS によって設定される利用者は, ページ・フレーム数 (PFN) データベースおよびグローバル・ページ・テーブルです (SYSGEN によるシステム・パラメータの設定についての詳細は,『OpenVMS システム管理ユーティリティ・リファレンス・マニュアル (下巻) 』を参照してください)。

グローバル・ページ・テーブル(GPT),および PFN データベースは,S2 空間の最下位アドレス部分に存在します。 GPT および PFN データベースを S2 空間に移動することによって,これらの領域のサイズが,小さな S0/S1 空間の制限をもはや受けることはありません。これにより OpenVMS は,より大容量の物理メモリ,およびより大きなグローバル・セクションをサポートできるようになりました。

2.2.3 ページ・テーブル空間

OpenVMS Alpha V7.0 以前のバージョンでは,ページ・テーブル空間 (または,PT 空間ともいう)を,複数の方法でアドレス指定することができました。 PALcode TB ミス・ハンドラは,2.0000000016 で始まるアドレスを使用して PTE を読み込んでいました。一方,メモリ管理コードは,まず従来の 32 ビット・システム空間内にページ・テーブルのアドレスを指定します。プロセス・ページ・テーブルはプロセス・ヘッダ (PHD) 内にあり,システム空間ページ・テーブルは最高位の仮想アドレスに位置していました。これらはすべて,従来の 32 ビット・システム空間内にありました。

OpenVMS Alpha Version 7.0 の場合,ページ・テーブルのアドレスは基本的に 64 ビットの PT 空間内で指定されます。ページ・テーブル参照はこの仮想アドレス範囲に対して行われます。これらは,32 ビット共用システム・アドレス空間にはもはやありません。

図 2-2 内の点線は,プロセス・プライベート空間と共用空間の境界を表します。この境界は PT 空間にあり,プロセス・プライベート・ページ・テーブル・エントリと共用ページ・テーブル・エントリ間の境界として機能します。これらのエントリ・セットを合わせたものが,指定されたプロセスで使用できるアドレス空間全体をマップします。 PT 空間は,プロセスごとに同じ仮想アドレスにマップされ,これは,FFFFFFFC.0000000016 など,通常はきわめて高位なアドレスです。

2.2.4 仮想アドレス空間のサイズ

Alpha アーキテクチャは 64 ビット・アドレスをサポートします。 OpenVMS Alpha Version 7.0 は,現在の Alpha アーキテクチャ実装でサポートされる仮想アドレス空間の合計サイズを, 4 GB (ギガバイト) から 8 TB (テラバイト) へと,大きく増加させました。

Alpha アーキテクチャでは,仮想アドレスを物理メモリ・アドレスに変換するとき,どの実装であっても,仮想アドレスの 64 ビットすべてを使用,またはチェックすることを要求しています。しかし,Alpha アーキテクチャの実装は,仮想アドレス空間のサブセットを実現することができます。現在の Alpha ハードウェア実装は 64 ビット仮想アドレスの中で 43 有効ビットをサポートします。この結果,8 TB のアドレス空間が実現します。

現在の Alpha アーキテクチャ実装では,仮想アドレス内のビット 42 は,ビット 63 まで符号拡張されているか,またはその内容が引き継がれていなければなりません (最下位有効ビットは 0 から始まります)。ビット 42 からビット 63 までがすべて 0 でない,またはすべて 1 でない仮想アドレスが参照されると,アクセス違反を引き起こします。従って,有効な 8 TB のアドレス空間は,中央が "非アクセス" 範囲で区切られた,別々の 2 つの 4 TB 範囲に分割されています。

OpenVMS Alpha アドレス空間のレイアウトでは,この非アクセス範囲を P2 空間に透過的に配置しています (OpenVMS Alpha メモリ管理システム・サービスは,実質的に連続したアドレス範囲を常に返します)。 OpenVMS Alpha アドレス空間レイアウトの設計の結果, P2 空間内の有効アドレスは,符号付き 64 ビット整数として解釈されるとき,正の値にも負の値にもなることができます。

32 ビット非特権コードの互換性を確保するには,有効な 32 ビット仮想アドレス内のビット 31 を引き続き使用して, P0/P1 空間内のアドレスと,S0/S1 空間内のアドレスを区別します。

2.3 仮想リージョン

仮想リージョンは,プロセス・プライベート仮想アドレスの予約範囲です。これは,実行時にユーザ・プログラムによって予約される ユーザ定義仮想リージョン,またはプロセス作成の中でプロセスに代わりシステムによって予約される プロセス永久仮想リージョンのいずれかに分けられます。

プロセスが作成されるとき,OpenVMS によって 3 つのプロセス永久仮想リージョンが定義されます。

  • プログラム・リージョン (P0 空間内)

  • 制御リージョン (P1 空間内)

  • 64 ビット・プログラム・リージョン (P2 空間内)

この 3 つのプロセス永久仮想リージョンが存在するため,プログラマが作成するアプリケーションがアドレス空間を余分に確保する必要がない場合,仮想リージョンを作成する必要はありません。

仮想リージョンでは,アプリケーションの異なるコンポーネントが,異なる仮想リージョン内のデータを操作することができるため,アプリケーション内でのモジュール性が促進されます。仮想リージョンが作成されるとき,サービスの呼び出し者には,その仮想リージョンを識別するリージョン ID が返されます。リージョン ID は,そのリージョンの中で仮想アドレスを作成,操作,および削除するときに使用されます。アプリケーション内の異なるコンポーネントは別々の仮想リージョンを作成できるため,各自の仮想メモリの使用が競合することはありません。

仮想リージョンには次の特徴があります。

  • 仮想リージョンは 軽量 オブジェクトである。つまり,指定されている仮想アドレスのページファイル制限値やワーキング・セット制限値を消費しない。新しい OpenVMS システム・サービスを呼び出すことによってユーザ定義仮想リージョンを作成すると,個別のアドレス・オブジェクトとして仮想アドレス範囲が単純に定義され,その中でアドレス空間を作成,操作,および削除することができる。

  • 仮想リージョンは重なり合わない。仮想リージョン内でアドレス空間を作成するとき,プログラマは, OpenVMS システム・サービスに対してリージョン ID を指定しなければならない。プログラマは,アドレス空間を作成するリージョンを明示しなければならない。

  • プログラマは,定義された仮想リージョンの範囲内にその全体が位置していないアドレス空間を作成,操作,または削除することはできない。

  • 各ユーザ定義仮想リージョンのサイズは,作成された時点で決まる。 P2 空間に大規模な範囲の仮想アドレスが実現し,仮想リージョンは軽量特性を持つため,アプリケーション・コンポーネントがその仮想リージョンの中で直接必要とするよりも多くのアドレス空間を確保しても問題ない。
    プロセス永久リージョンは例外で,固定サイズを持たないことに注意すること。
    64 ビット・プログラム仮想リージョンは,作成されるときに,サイズが決定されない唯一の仮想リージョンです。プロセスの作成時,64 ビット・プログラム・リージョンは, P2 空間をすべて含みます。ユーザ定義仮想リージョンが P2 空間に作成されると, 2 つのリージョンが重なり合うことがないように, OpenVMS メモリ管理は 64 ビット・プログラム・リージョンを縮小させます。ユーザ定義仮想リージョンが削除されると,下位の仮想アドレスにほかのユーザ定義仮想リージョンが存在しない場合, 64 ビット・プログラム・リージョンが拡張し,削除された仮想リージョン内の仮想アドレスを含みます。

  • 各仮想リージョンは,それに付随するオーナ・モードおよび作成モードを持つ。アクセス・モードの特権が仮想リージョンのオーナよりも低い場合,その仮想リージョンを削除することはできない。アクセス・モードの特権が,仮想リージョンに設定されている作成モードよりも低い場合,仮想リージョン内で仮想アドレスを作成することはできない。オーナ・モードおよび作成モードは,仮想リージョンが作成されるときに設定され,変更することはできない。仮想リージョンの作成モードは,オーナ・モードより高い特権を持つことはできない。

  • 仮想アドレス空間が仮想リージョン内に作成されるとき,仮想リージョン内での割り当ては一般に,プログラム・リージョン (P0 空間) および制御リージョン (P1 空間) で行われるのと同じように,稠密拡張方式で行われる。作成される時点で,各仮想リージョンは仮想アドレスに対して, P0 空間のように仮想アドレスが増加する方向に向かって,または P1 空間のように仮想アドレスが減少する方向に向かってセットアップされる。ユーザは,先頭アドレスを明示的に指定すると,この割り当てアルゴリズムを変更することができる。

  • イメージのランダウン時に,ユーザ定義仮想リージョンはすべて,各リージョン内で作成されたページと共に削除される。



2.3.1 P0 空間および P1 空間内のリージョン

すべての P0 空間に対して,仮想アドレス 0 で始まり,仮想アドレス 0.3FFFFFFF16 で終了するプロセス永久仮想リージョンが 1 つ存在します。これがプログラム・リージョンです。 P1 空間に対しても,仮想アドレス 0.4000000016 で始まり,仮想アドレス 0.7FFFFFFF16 で終了するプロセス永久リージョンが 1 つ存在します。これが制御リージョンです。

プログラム・リージョンおよび制御リージョンは,カーネル・モードで所有され,ユーザの作成モードを持つものと考えられます。これは,ユーザ・モードの呼び出し者が,これらのリージョン内で仮想アドレス空間を作成することができるためです。これにより V7.0 より前のリリースの OpenVMS との上位互換性が保持されます。

このようなプログラム・リージョンおよび制御リージョンを削除することはできません。これらは,プロセス永久であると考えられます。

2.3.2 64 ビット・プログラム・リージョン

P2 空間は,P2 空間の最下位仮想アドレス 0.8000000016 から始まる,稠密拡張可能な仮想リージョンを持ちます。このリージョンを 64 ビット・プログラム・リージョンと呼びます。 P2 空間内に 64 ビット・プログラム・リージョンを持つことによって,明示的な仮想リージョンを使用する必要がないアプリケーションは, P2 空間に仮想リージョンを作成するオーバヘッドを回避することができます。この仮想リージョンは常に存在するため,アドレスを P2 空間の中で直接作成することができます。

第 2.3.3 項 で説明するように,ユーザは,占有されていない P2 空間に仮想リージョンを作成することができます。ユーザ定義仮想リージョンが,64 ビット・プログラム・リージョンの最下位アドレスで開始するように定義されている場合,リージョン内で仮想メモリを割り当てようとすると失敗します。

リージョンは,これに付随してユーザ作成モードを持ちます。つまり,どのようなアクセス・モードでも,このリージョン内に仮想アドレス空間を作成することができます。

64 ビット・プログラム・リージョンを削除することはできません。これはプロセス永久とみなされ,イメージがランダウンしても残ります。なお,イメージのラウンダウンによって, 64 ビット・プログラム・リージョン内に作成されたすべてのアドレス空間は削除され,リージョンがリセットされて P2 空間をすべて含むことに注意してください。


目次 索引

印刷用画面へ
プライバシー 本サイト利用時の合意事項