前へ | 次へ | 目次 | 索引 |
『Alpha Architecture Reference Manual』では,プロセッサ間のデータの不可分な更新を実行する方法を説明しています。特に『Third Edition』には,この問題に関するさらに詳しい情報が含まれています。また,インターロックされたメモリ・シーケンスの規則について詳しく説明されています。
次の 2 つの必要条件が満たされない場合は,規則に準拠しないコードが生成されます。
ターゲットが LDx_L とそれに対応する STx_C の間にある分岐を実行すると,規則に準拠しないシーケンスが作成される。たとえば,次の例で "label" への分岐を実行すると,分岐命令自体がシーケンスの内部にあるか外部にあるかにかかわらず,規則に準拠しないコードが作成される。
LDx_L Rx, n(Ry) ... label: ... STx_C Rx, n(Ry) |
したがって,SRM_CHECK ツールは次の条件を検索します。
これは通常,LDx_L から STx_C へ逆方向分岐が実行されることを示します。ただし,デバイス・メールボックス書き込みを実行するハードウェア・デバイス・ドライバは例外です。これらのドライバは,STx_C を使用してメールボックスに書き込みを実行します。この状況は初期の Alpha システムでのみ検出され,PCI ベースのシステムでは検出されません。
AARM では,LDx_L と STx_C の間の命令の数を 40 未満にすることを推奨しています。理論的には,40 より多くの命令があると,シーケンスが完了しないようにするためにハードウェア割り込みが発生します。しかし,実際にはこの状況が発生したという報告はありません。
次の例に,SRM_CHECK でフラグが付けられたコードを示します。
** Found an unexpected ldq at 0008291C 00082914 AC300000 ldq_l R1,(R16) 00082918 2284FFEC lda R20, 0xFFEC(R4) 0008291C A6A20038 ldq R21, 0x38(R2) |
この例では,LDQ 命令が LDQ_L の後,STQ_C の前に検出されています。LDQ は,再コンパイルまたはソース・コードの変更によって,このシーケンスの外部に移動しなければなりません(第 7.3 節 を参照してください)。
** Backward branch from 000405B0 to a STx_C sequence at 0004059C 00040598 C3E00003 br R31, 000405A8 0004059C 47F20400 bis R31, R18, R0 000405A0 B8100000 stl_c R0,(R16) 000405A4 F4000003 bne R0, 000405B4 000405A8 A8300000 ldl_l R1,(R16) 000405AC 40310DA0 cmple R1, R17, R0 000405B0 F41FFFFA bne R0, 0004059C |
この例では,LDL_L と STQ_C の間から分岐が検出されています。この場合,LDx_L と STx_C の間に,アーキテクチャで要求されている「フォール・スルー」パスがありません。
LDx_L から STx_C へのこの逆向きの分岐は,「ループ・ローテーション」最適化によって発生する,規則に準拠しないコードの特徴です。 |
次の MACRO--32 ソース・コードは「フォール・スルー」パスがあるものの,ロック・シーケンス内に可能性のある分岐とメモリ参照があるために,規則に準拠しないコードを示しています。
getlck: evax_ldql r0, lockdata(r8) ; Get the lock data movl index, r2 ; and the current index. tstl r0 ; If the lock is zero, beql is_clear ; skip ahead to store. movl r3, r2 ; Else, set special index. is_clear: incl r0 ; Increment lock count evax_stqc r0, lockdata(r8) ; and store it. tstl r0 ; Did store succeed? beql getlck ; Retry if not. |
このコードを修正するには,INDEX の値を読み込むためのメモリ・アクセスを最初に LDQ_L/STQ_C シーケンスの外部に移動しなければなりません。次に,ラベル IS_CLEAR への,LDQ_L と STQ_C の間の分岐を取り除かなければなりません。この場合,CMOVEQ 命令を使用して分岐を取り除くことができます。CMOVxx 命令はしばしば,単純な値の移動の周囲にある分岐を取り除くために役立っています。次の例に,修正されたコードを示します。
movl index, r2 ; Get the current index getlck: evax_ldql r0, lockdata(r8) ; and then the lock data. evax_cmoveq r0, r3, r2 ; If zero, use special index. incl r0 ; Increment lock count evax_stqc r0, lockdata(r8) ; and store it. tstl r0 ; Did write succeed? beql getlck ; Retry if not. |
表 7-1 は,規則に準拠しないコード・シーケンスを生成する可能性のあるコンパイラのバージョンと,再コンパイルするときに使用する推奨最小バージョンについて説明します。
旧いバージョン | 推奨最小バージョン |
---|---|
BLISS V1.1 | BLISS V1.3 |
DEC Ada V3.5 | Compaq Ada V3.5A |
DEC C V5.x | DEC C V6.0 |
DEC C++ V5.x | DEC C++ V6.0 |
DEC COBOL V2.4,V2.5 | Compaq COBOL V2.6 |
DEC Pascal V5.0-2 | DEC Pascal V5.1-11 |
MACRO--32 V3.0 | OpenVMS Version 7.1-2 については V3.1
OpenVMS Version 7.2 については V4.1 |
MACRO--64 V1.2 | 下記参照 |
MACRO--64 アセンブラの現在のバージョンでも,ループ回転の問題が発生することがあります。しかし,MACRO--64 ではデフォルトでコードの最適化が実行されないので,この問題が発生するのは,最適化が有効に設定されている場合だけです。SRM_CHECK が MACRO--64 コードから規則に準拠しないシーケンスを検出した場合は,最初に最適化せずに再コンパイルする必要があります。その後,再びテストしてもシーケンスにフラグが付けられる場合は,ソース・コード自体に修正の必要な非準拠シーケンスが含まれています。
7.6 ALONONPAGED_INLINE または LAL_REMOVE_FIRST によるコードの再コンパイル
OpenVMS Alpha の MACRO--32 コードのうち,SYS$LIBRARY:LIB.MLB マクロ・ライブラリから ALONONPAGED_INLINE マクロまたは LAL_REMOVE_FIRST マクロを起動するコードは,OpenVMS Version 7.2 またはそれ以降で再コンパイルして,これらのマクロの正しいバージョンが取得されるようにしなければなりません。これらのマクロを変更すると,新しい Alpha 21264(EV6)以上のプロセッサで検出される可能性のある,同期化に関する問題を修正できます。
EXE$ALONONPAGED ルーチン(またはその変形)を呼び出すソース・モジュールは, 再コンパイルする必要がありません。これらのモジュールは,ユーザに意識させることなく,このリリースに含まれているルーチンの正しいバージョンを使用します。 |
この付録では,すでにサポートが中止された OpenVMS 製品およびサポートの中止が予定されている OpenVMS 製品についてお知らせします。また,アーカイブされたマニュアルを検索する方法についても説明します。
製品のサポートが中止されると,Compaq はそれらの製品に対する問題に関する報告を受け付けず,またそのような報告への対処も行いません。しかし,独自の開発やサポートを目的に,以前の製品のソース・コードを必要とされるお客様に対しては,多くの製品のソース・コードを次の形態でフリーウェアとして提供しています。
このフリーウェア CD-ROM には,SDL,NMAIL,MAILWATCH,広く利用されているインターネット・プログラムなど,内部ツールも含まれています。
CD-ROM をマウントする方法については,第 3.8 節 を参照してください。
http://www.openvms.compaq.com/openvms/freeware/index.html |
A.1 Netscape FastTrack 3.02 のサポートの中止
Netscape FastTrack 3.02 は,2001 年 12 月 31 日をもって廃止されました。代替製品 Compaq Secure Web Server(CSWS,Apache ベース)は,OpenVMS の次の Web サイトからダウンロードできます。
http://www.openvms.compaq.com/openvms/products/ips/apache/csws.html |
また,CSWS の日本語サポート状況などの情報は,次のサイトに掲載しています。
http://openvms.compaq.co.jp/products/internet/csws.html |
また,OpenVMS Alpha Version 7.3-1 またはそれ以降のメディア・キットにバンドルされた OpenVMS e-Business Infrastructure Package CD-ROM でも入手可能です。
A.2 POSIX 1003.4a Draft 4 インタフェースのサポートの中止
V7.0
Compaq POSIX Threads Library(以前の DECthreads)の POSIX 1003.4a, Draft 4("d4")インタフェースは,将来のリリースでサポートされなくなる予定です。POSIX 1003.4a, Draft 4 インタフェースを使用して作成されたアプリケーションは,POSIX スレッド・ライブラリで提供される新しい POSIX 1003.1c 標準("pthread")インタフェースに移行する必要があります。このリリースでは,移行を支援するために,Draft 4 POSIX 1003.4a インタフェース用の互換性モードが提供されます。この互換性モードは将来のリリースでは削除されます。
A.3 ISA_CONFIG.DAT のサポートの将来のリリースでの中止
V7.1
SYS$MANAGER:ISA_CONFIG.DAT ファイルを使用して ISA デバイスを構成する機能は,OpenVMS Alpha の将来のリリースではサポートされなくなります。このファイルを使用している場合は,コンソールから ISACFG ユーティリティと,デバイス・ドライバをロードするための新しいファイル・ベースの自動構成方式を使用するように変換しなければなりません(『Writing OpenVMS Alpha Device Drivers in C』を参照)。
A.4 PATHWORKS for OpenVMS(NetWare)
PATHWORKS for OpenVMS(NetWare)は,1998 年 7 月にサポートが中止されました。この製品は現在も PATHWORKS for OpenVMS Version 6.0A に添付されていますが,PATHWORKS for OpenVMS Version6.0B またはそれ以降や OpenVMS Version 7.2 またはそれ以降では提供されません。
A.5 アーカイブされたマニュアル
V7.3-1
製品の製造が中止され,オペレーティング・システムが進化するにつれて,OpenVMS マニュアルの一部はアーカイブされます。アーカイブされたマニュアルはそれ以降保守されず,OpenVMS ドキュメンテーション・セットには含まれませんが,OpenVMS ドキュメンテーション CD-ROM および Compaq の Web サイトに保管されています。
http://www.compaq.com/openvms |
A.5.1 Extended File Specifications: ドキュメントの再編成
以前,『OpenVMS Extended File Specifications の手引き』に記述されていた内容が他のマニュアルへ移り,このマニュアルは廃止されました。
次の表に,アーカイブされたマニュアルから新しいマニュアルへ移行されたトピックの,新しいマニュアルにおける位置を示します。
元のセクション | 新しいマニュアル | 移動先(章) |
---|---|---|
第 1 章「Extended File Specifications for OpenVMS の概要 」 | ||
すべて | 『OpenVMS システム管理者マニュアル(上巻)』 | 第 9 章 |
第 2 章「OpenVMS システムでの拡張ファイル命名機能の管理 」 | ||
第 2.2.1 項「 RMS の省略時のExtended File Specifications 機能の使用 」を除くすべて | 『OpenVMS システム管理者マニュアル(上巻)』 | 第 9 章と第 10 章 |
第 2.2.1 項「 RMS の省略時のExtended File Specifications 機能の使用 」 | 『Guide to OpenVMS File Applications』 | 第 6 章 |
第 3 章「拡張ファイル名の特徴」 | ||
第 3.5 節「 DCL コマンドおよびユーティリティ」 | 『OpenVMS ユーザーズ・マニュアル』 | 第 5 章 |
第 3.5 節「 DCL コマンドおよびユーティリティ」を除くすべて | 『OpenVMS DCL ディクショナリ』 | コマンドによるアルファベット順 |
第 4 章「OpenVMS アプリケーション開発での拡張ファイル名に関する注意点 」 | ||
すべて | 『OpenVMS Programming Concepts Manual, Volume II』 | 第 29 章 |
付録 A「ユーザを対象としたExtended File Specifications の注意点 」 | ||
第 A.1 節「 Extended File Specifications の新しい特性 (ODS-5)」 | 『OpenVMS I/O User's Reference Manual』 | 第 1 章 |
第 A.4 節「 制限事項」 | 『Guide to OpenVMS File Applications』 | 第 5 章 |
第 A.1 節,第 A.4 節を除くすべて | 『OpenVMS システム管理者マニュアル(上巻)』 | 第 10 章 |
付録 B 「技術情報 」 | ||
第 B.1 節「 システム・サービスの変更点」 | 『OpenVMS System Services Reference Manual』 | ルーチンによるアルファベット順 |
第 B.2 節「 レコード管理サービス(RMS)の変更点」 | 『Guide to OpenVMS File Applications』 | 以下参照 |
第 B.2.1 項「 レコード管理サービスの変更点の概要 」 | 『Guide to OpenVMS File Applications』 | 第 5 章 |
第 B.2.2 項「 構文および意味の変更点」(第 B.2.2.7 項「 DID による短縮 」と第 B.2.2.8 項「 FID による短縮」を除く) | 『Guide to OpenVMS File Applications』 | 第 5 章 |
第 B.2.2.7 項「 DID による短縮」 | 『Guide to OpenVMS File Applications』 | 第 6 章 |
第 B.2.2.8 項「 FID による短縮」 | 『Guide to OpenVMS File Applications』 | 第 6 章 |
第 B.2.3 項「 RMS のデータ構造の変更点(NAM ブロック) 」 | 『OpenVMS Record Management Services Reference Manual』 | 第 5 章 |
第 B.2.3 項「 RMS のデータ構造の変更点(NAML ブロック) 」 | 『OpenVMS Record Management Services Reference Manual』 | 第 6 章 |
第 B.3 節「 Files-11 XQP の変更点」 | 『OpenVMS I/O User's Reference Manual』 | 第 1 章 |
第 B.4 節「 プログラミング・ユーティリティの変更点」 | 『OpenVMS Utility Routines Manual』 | 第 10 章 |
第 B.5 節「 実行時ライブラリの変更点」 | 『OpenVMS RTL Library(LIB$)Manual』 | ルーチン別のアルファベット順 |
付録 C 「文字セット 」 | ||
すべて | 『OpenVMS ユーザーズ・マニュアル』 | 付録 A |
前へ | 次へ | 目次 | 索引 |