制御レジスタは、 CPUまたはその他のデジタル デバイスの一般的な動作を変更または制御するプロセッサ レジスタです。制御レジスタによって実行される一般的なタスクには、割り込み制御、アドレス指定モードの切り替え、ページング制御、コプロセッサ制御などがあります。
歴史
初期の CPU には専用の制御レジスタがなく、限られた内部信号とフラグのセットに依存していました。[1] IBM がSystem/360のページング バージョン[注 1]を開発したとき、16 個の制御レジスタ[2] [3]を設計に追加し、これが360/67となりました。IBM は他の S/360 モデルには制御レジスタを提供しませんでしたが、レジスタとビットの割り当ては異なっていたものの、 System/370の標準部品[4]にしました。IBM がアーキテクチャに新しい機能 ( DAS、 S/370-XA、S/370-ESA、ESA/390など) を追加すると、制御レジスタにフィールドが追加されました。z /Architectureでは、 IBM は制御レジスタのサイズを 64 ビットに倍増しました。
IBM 360/67 の制御レジスタ
360/67では、CR0とCR2はアドレス変換に使用され、CR4-6には割り込みマスクや拡張制御モードなどのさまざまなフラグが含まれ、[3] CR8-14 [5]には2167構成ユニットのスイッチ設定が含まれます。
M67 CR0
制御レジスタ 0 には、動的アドレス変換用のセグメント テーブルのアドレスが含まれています。
M67 CR2
制御レジスタ 2 は再配置例外アドレス レジスタです。
M67 CR4
CR4 は、チャネル 0 ~ 31 の拡張マスク レジスタです。各ビットは、対応するチャネルの 1/0 チャネル マスクです。
M67 CR5
CR5 は、チャネル 32 ~ 63 の拡張マスク レジスタ用に予約されています。各ビットは、対応するチャネルの 1/0 チャネル マスクです。
M67 CR6
CR6 には 2 つのモード フラグと PSW マスク ビットの拡張機能が含まれています。
M67 CR8
制御レジスタ 8 には、プロセッサ ストレージ ユニット 1 ~ 4 の中央処理装置 (CPU) およびチャネル コントローラ (CC) への割り当てが含まれています。
M67 CR9
制御レジスタ 9 には、プロセッサ ストレージ ユニット 5 ~ 8 の中央処理装置 (CPU) およびチャネル コントローラ (CC) への割り当てが含まれています。
M67 CR10
制御レジスタ 10 には、プロセッサ ストレージ アドレス割り当てコードが含まれています。
M67 CR11
制御レジスタ 11 には、チャネル コントローラ (CC) の割り当てが含まれています。
M67 CR12
CR12 には I/O 制御ユニット パーティショニングが含まれています。
M67 CR13
CR13 には I/O 制御ユニット パーティショニングが含まれています。
M67 CR14
CR14 にはインジケーターが含まれています。
IBM S/390 の制御レジスタ
IBM S/390のESA/390 [6]の制御レジスタは、以前のESA/370 [7]、S/370-XA [8]、およびS/370 [9]プロセッサの制御レジスタを進化させたものです。特定の機能に依存するフィールドの詳細については、動作原理を参照してください。[10]
IBM z/Architecture の制御レジスタ
z/Architecture [11]の制御レジスタは、 IBM S/390プロセッサの以前のESA/390の制御レジスタを進化させたものです。特定の機能に依存するフィールドの詳細については、「Principles of Operation」を参照してください。[12] z/Architecture では制御レジスタが 32 ビットから 64 ビットに拡張されているため、ビット番号は ESA/390 とは異なります。
Intelの制御レジスタ86 のシリーズ
CR0
CR0 レジスタは、386以降のプロセッサでは 32 ビット長です。ロング モードのx64プロセッサでは、このレジスタ (および他の制御レジスタ) は 64 ビット長です。CR0 には、プロセッサの基本操作を変更するさまざまな制御フラグがあります。レジスタ CR0 は、古いマシン ステータス ワード (MSW) レジスタの 32 ビット バージョンです。MSW レジスタは、i386 プロセッサの登場により、制御レジスタに拡張されました。
CR1
予約済み。アクセスしようとすると、CPU は # UD例外をスローします。
CR2
ページ フォールト リニア アドレス (PFLA) と呼ばれる値が含まれます。ページ フォールトが発生すると、プログラムがアクセスしようとしたアドレスが CR2 レジスタに格納されます。
CR3

仮想アドレス指定が有効になっている場合、つまり CR0 の PG ビットが設定されている場合に使用されます。CR3 は、プロセッサが現在のタスクのページ ディレクトリとページ テーブルを検索して、線形アドレスを物理アドレスに変換できるようにします。通常、CR3 の上位 20 ビットはページ ディレクトリ ベース レジスタ(PDBR) になり、最初のページ ディレクトリの物理アドレスが格納されます。CR4 の PCIDE ビットが設定されている場合、下位 12 ビットはプロセス コンテキスト識別子(PCID) に使用されます。[13]
CR4
保護モードで使用され、仮想 8086 サポート、I/O ブレークポイントの有効化、ページ サイズ拡張、マシン チェック例外などの操作を制御します。
- ^ Intel SGX仕様の初期の草案では、CR4のビット15は「CR4.SEE」と名付けられ、SGXエンクレーブ命令有効化ビットとして説明されていました。[17]この仕様の後の改訂では、このビットへの参照が削除されました。[18]
CR5~7
予約済み、CR1 と同じ大文字と小文字。
Intelの追加制御レジスタ64ビットシリーズ
エフェル
拡張機能有効化レジスタ (EFER) は、 AMD K6プロセッサに追加されたモデル固有のレジスタで、 SYSCALL /SYSRET 命令を有効にし、後にロング モードを開始および終了できるようにします。このレジスタはAMD64でアーキテクチャとなり、 IntelによってIA32_EFER として 採用されました。その MSR 番号は 0xC0000080 です。
CR8
CR8は、REXプレフィックスを使用して64ビットモードでアクセスできる新しいレジスタです。CR8は外部割り込みの優先順位付けに使用され、タスク優先度レジスタ(TPR)と呼ばれます。[14]
AMD64アーキテクチャでは、ソフトウェアで最大 15 個の外部割り込み優先度クラスを定義できます。優先度クラスには 1 から 15 までの番号が付けられ、優先度クラス 1 が最も低く、優先度クラス 15 が最も高くなります。CR8 は、下位 4 ビットを使用してタスク優先度を指定し、残りの 60 ビットは予約されており、ゼロを書き込む必要があります。
システム ソフトウェアは、TPR レジスタを使用して、優先度の低い割り込みが優先度の高いタスクに割り込むのを一時的にブロックできます。これは、ブロックする最も優先度の高い割り込みに対応する値を TPR にロードすることで実現されます。たとえば、TPR に値 9 (1001b) をロードすると、優先度クラスが 9 以下のすべての割り込みがブロックされますが、優先度クラスが 10 以上のすべての割り込みは認識されます。TPR に 0 をロードすると、すべての外部割り込みが有効になります。TPR に 15 (1111b) をロードすると、すべての外部割り込みが無効になります。
TPR はリセット時に 0 にクリアされます。
XCR0 と XSS
XCR0、つまり拡張制御レジスタ0は、XSAVE/XRSTOR命令を使用して特定のCPU機能に関連するレジスタの保存または読み込みを切り替えるために使用される制御レジスタです。また、一部の機能では、対応する命令を実行するプロセッサの能力を有効または無効にするために使用されます。特権XSETBV命令を使用して変更でき、非特権XGETBV命令を使用して読み取ることができます。[21]
- ^ すべての YMM レジスタの下位 128 ビットは SSE 状態に格納されます。
- ^ ZMMレジスタZMM0からZMM15の下位256ビットはSSEおよびAVX状態に格納されます。
- ^ Intel APX は XCR0 のビット 19 で示されますが、実際には XSAVE (非圧縮形式) を通じて、Intel MPX が保存されていた未使用の 128 バイトの領域に書き込まれます。
また、アドレス にある IA32_XSS MSR もありますDA0h。IA32_XSS MSR は、XCR0 の「スーパーバイザ」状態と見なされるビットを制御し、通常のプログラムからは見えなくなります。特権 XSAVES および XRSTORS 命令で操作され、操作するデータにスーパーバイザ状態が追加されます。簡単に言うと、XCR0 で X87 状態が有効で、IA32_XSS で PT 状態が有効になっている場合、XSAVE 命令は X87 状態のみを格納しますが、特権 XSAVES は X87 状態と PT 状態の両方を格納します。これは MSR であるため、RDMSR および WRMSR 命令を使用してアクセスできます。
参照
注記
- ^ IBM は 360/64 や 360/66 を出荷したことはなく、360/67 のみを出荷しました。
参考文献
- IBM マニュアル
-
- M67予備試験
- System/360 モデル 67 - タイム シェアリング システム - 暫定技術概要(PDF) . システム リファレンス ライブラリ (第 1 版) . IBM . C20-1647-0 . 2023 年5 月 8 日に取得。
- M67
- IBM System/360 モデル 67 - 機能特性(PDF) . システム・リファレンス・ライブラリー (第 3 版) . IBM . 1972 年 2 月 . A27-2719-0 . 2023 年5 月 8 日に取得.
- 370 年代
- IBM System/370 - 動作原理(PDF) (第 11 版)。IBM。1987年 9 月。GA22-7000-10。2023年5月 8 日に閲覧。
- S/370-XA
- IBM System/370 拡張アーキテクチャーの動作原理(PDF) (第 2 版)。IBM。1987年 1 月。SA22-7085-1。2023年5月 8 日に閲覧。
- S/370-ESA
- IBM Enterprise Systems Architecture/370 Principles of Operation (PDF) (初版)。IBM。1988年 8 月。SA22-7200-0。2023年5 月 8 日に閲覧。
- ^ "lab4.pdf" (PDF) .ウプサラ大学. 2024年3月17日. 2021年1月17日時点のオリジナルよりアーカイブ(PDF) . 2024年3月16日閲覧。
- ^ M67prelim、pp. 25-26、制御レジスタ。
- ^ ab M67、p. 16、表4. 制御レジスタ。
- ^ S/370、pp. 4-8-4-11、制御レジスタ。
- ^ M67、pp. 31-35、センシング用の制御レジスタのビット割り当て。
- ^ S/390-ESA.
- ^ S/370-ESA.
- ^ S/370-XA.
- ^ S/370.
- ^ S/390-ESA、pp. 4-6-4-10、制御レジスタ。
- ^ z/アーキテクチャ。
- ^ z/Architecture、pp. 4-9–4-12、制御レジスタ。
- ^ ab Intel Corporation (2016). 「4.10.1 プロセスコンテキスト識別子 (PCID)」。 Intel 64 および IA-32 アーキテクチャ ソフトウェア開発者マニュアル(PDF)。 Vol. 3A: システム プログラミング ガイド、パート 1。
- ^ ab 「AMD64 アーキテクチャ プログラマーズ マニュアル 第 2 巻: システム プログラミング」(PDF)。AMD 。2012 年 9 月。pp. 127 & 130 。2017年 8 月 4 日に閲覧。
- ^ 「5 レベル ページングと 5 レベル EPT」(PDF)。Intel 。2017 年 5 月。p. 16 。2018 年 1 月 23日閲覧。
- ^ abc 「Intel 64 および IA-32 アーキテクチャ ソフトウェア開発者マニュアル」(PDF)。Intel® Corporation。2021 年 6 月 28 日。2021 年 9 月 21 日閲覧。
- ^ Intel、ソフトウェア ガード拡張プログラミング リファレンス、参照番号 329298-001、2013 年 9 月 - 1.7 章と 6.5.2 章で CR4.SEE について説明しています。
- ^ Intel、「ソフトウェア ガード拡張プログラミング リファレンス」、参照番号 329298-002、2014 年 10 月 - CR4.SEE については何も言及されていません。
- ^ Fischer, Stephen (2011-09-21). 「スーパーバイザー モード実行保護」(PDF) . NSA Trusted Computing Conference 2011 . National Conference Services, Inc. 2016-08-03 のオリジナル(PDF)からアーカイブ。2017-08-04に取得。
- ^ Anvin, H. Peter (2012-09-21). 「x86: スーパーバイザー モード アクセス防止」LWN.net . 2017-08-04閲覧。
- ^ 「第 13 章、Xsave 機能セットを使用した状態の管理」(PDF)。Intel (R) 64 および IA-32 アーキテクチャー ソフトウェア開発者マニュアル、第 1 巻: 基本アーキテクチャー。Intel Corporation (2019) 。2019 年3 月 23 日閲覧。
外部リンク
- Intel 64 および IA-32 アーキテクチャ開発者マニュアル: Vol. 3A
- Intel 64 および IA-32 アーキテクチャ ソフトウェア開発者マニュアル
- 技術ドキュメント: AMD64
- ワイアットの世界: Pentium III を分解する (1999-05-28)
