Windows 32 組み立てメモ (1): 基礎知識
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
1. 80x86 プロセッサの動作モード
1.1 リアルモード
リアルモードの概要
リアル モードは、80x86 プロセッサでサポートされている最も古い動作モードであり、最も基本的な動作モードでもあります。リアル モードは主に初期の MS-DOS オペレーティング システムやその他の単純なオペレーティング環境で使用されます。リアル モードでは、プロセッサは 1MB の物理メモリ空間に直接アクセスできます。このモードは 8086 プロセッサの動作方法と完全に互換性があるため、「リアル モード」と呼ばれています。
リアルモードの特徴
-
アドレス空間の制限
- リアル モードでは、プロセッサは 1MB のメモリ空間 (0x00000 から 0xFFFFF) にのみアクセスできます。
- メモリ空間は 20 ビットのアドレス バスによって制限されます。
-
セグメントアドレスとオフセットアドレス
- リアル モードでは、メモリ アドレス指定にセグメント:オフセット (セグメント) メソッドが使用されます。
- セグメント アドレスは 16 倍され (つまり、4 ビット左にシフトされ)、オフセット アドレスに加算されて、20 ビットの物理アドレスが形成されます。
- たとえば、セグメント アドレスが 0x1234、オフセット アドレスが 0x5678 の場合、物理アドレスは次のようになります。 物理アドレス = (0x1234×16) + 0x5678 = 0x12340 + 0x5678 = 0x179B8text{物理アドレス} = (0x1234 x 16) + 0x5678 = 0x12340 + 0x5678 = 0x179B8 物理アドレス=(0x1234×16)+0x5678=0x12340+0x5678=0x179B8
-
メモリ保護なし
- リアル モードにはメモリ保護機構がなく、プログラムはオペレーティング システム領域や他のプログラムの領域を含む 1MB メモリ空間全体に任意にアクセスできます。
- これにより、プログラムが相互に干渉し、システムクラッシュが容易に発生する可能性があります。
-
ハードウェアへの直接アクセス
- リアル モードでは、ハードウェア デバイスおよび I/O ポートに直接アクセスできます。
- リアル モードでは、プログラムは IN や OUT などの I/O 命令を使用してハードウェア デバイスと直接対話できます。
-
割り込みとプロセッサの初期化
- リアル モードは、割り込みベクトル テーブル (IVT) を使用して管理されるハードウェア割り込みとソフトウェア割り込みをサポートします。
- 割り込みベクタテーブルはメモリの最下位1KB領域(0x00000~0x003FF)に格納されます。
- プロセッサの電源を入れるかリセットすると、プロセッサは自動的にリアル モードに入り、アドレス 0xFFFF0 からコードの実行を開始します。
-
実行可能コードの制限
- リアル モードでの実行可能コード セグメントのサイズは制限されており、通常、コード セグメントは最大 64KB (0x0000 ~ 0xFFFF) です。
リアルモードのメモリレイアウト
リアル モードでは、メモリ レイアウトには通常次の部分が含まれます。
-
BIOS領域
- ハイエンド メモリ (0xF0000 から 0xFFFFF) は通常、BIOS コードとデータの保存に使用されます。
- 電源投入時またはリセット時に、プロセッサは 0xFFFF0 で BIOS コードの実行を開始します。
-
割り込みベクタテーブル
- メモリの最下位 1KB 領域 (0x00000 ~ 0x003FF) には、割り込みベクタ テーブルが格納されます。
- 各割り込みベクトルは 4 バイト (2 バイトのセグメント アドレスと 2 バイトのオフセット アドレス) を占めます。
-
オペレーティング システムとアプリケーション
- 残りのメモリ領域は、オペレーティング システム コード、アプリケーション コード、およびデータに使用されます。
1.2 保護モード
概要
保護モードは、80x86 プロセッサによって導入された高度な動作モードで、リアル モードと比較して、より強力なメモリ管理および保護機能を提供します。保護モードは 80286 プロセッサに初めて導入され、80386 以降のプロセッサではさらに拡張および機能強化されました。
プロテクトモードの特徴
-
拡張メモリアドレス空間
- 保護モードは 24 ビットまたは 32 ビットのアドレス バスをサポートし、4 GB の物理メモリ空間にアクセスできます (80386 以降)。
- セグメント セレクターとセグメント記述子はメモリ管理に使用され、より複雑なメモリ レイアウトと管理が可能になります。
-
メモリ保護
- プロテクト モードでは、セグメント記述子とページ テーブルを通じてメモリ保護を実装し、プログラムが他のプログラムやオペレーティング システムのメモリに不正にアクセスすることを防ぎます。
- ユーザー モードとカーネル モード間の分離を実現するために、さまざまな特権レベル (レベル 0 ~ レベル 3) のコードおよびデータ セグメントをサポートします。
-
ページングメカニズム
- ページング メカニズムをサポートし、ページ テーブルを通じて仮想アドレスを物理アドレスにマップして、メモリ管理機能をさらに強化します。
- 通常、ページ サイズは 4KB ですが、大きなページ (4MB など) もサポートされます。
-
ハードウェアでサポートされるマルチタスク
- タスク状態セグメント (TSS) およびタスク レジスタ (タスク レジスタ) を含む、ハードウェアでサポートされるマルチタスク スイッチングを提供します。
- タスク間の切り替えと保護のためのタスクゲートをサポートします。
-
強化された割り込みおよび例外処理
- プロテクト モードでは、割り込み記述子テーブル (IDT) を使用して割り込みと例外処理が管理されます。
- IDT は、割り込みゲート、トラップ ゲート、タスク ゲートを含むゲート ディスクリプタ (ゲート ディスクリプタ) をサポートします。
-
仮想メモリ
- 仮想メモリをサポートし、ページング メカニズムを通じて仮想アドレス空間を実装することで、プログラムが実際の物理メモリよりも大きなアドレス空間を使用できるようにします。
プロテクトモードのメモリ管理
-
セグメントセレクターとセグメント記述子
- 各セグメント セレクターは、セグメント ベース アドレス、セグメント制限、およびセグメント属性 (アクセス許可やタイプなど) を含むセグメント記述子を指します。
- セグメント セレクターとセグメント記述子は、グローバル記述子テーブル (GDT) とローカル記述子テーブル (LDT) によって管理されます。
-
ページングメカニズム
- ページング メカニズムは、仮想アドレスをページ ディレクトリ (Page Directory)、ページ テーブル (Page Table)、およびページ フレーム (Page Frame) に分割します。
- ページ ディレクトリとページ テーブルを通じて、仮想アドレスが物理アドレスにマップされ、メモリの保護と管理が実現されます。
保護モードのアプリケーション
保護モードは、Windows、Linux、Unix などの最新のオペレーティング システムで広く使用されています。保護モードの特性を利用して、マルチタスク、マルチユーザー、メモリ保護などの高度な機能を実装します。保護モードを通じて、オペレーティング システムはハードウェア リソースを効果的に管理し、安定した安全な動作環境を提供できます。
保護モードは最新のオペレーティング システムとアプリケーションの基盤であり、80x86 プロセッサの高度な機能を最大限に活用してシステムの安定性とセキュリティを向上させます。
1.3 仮想 8086 モード
仮想 8086 モードの概要
仮想 8086 モード (仮想 8086 モード) は、プロテクト モードの 80x86 プロセッサによって提供される特別なモードで、プロセッサが 8086 プログラムをリアル モードで実行されているかのように実行できるようにします。このモードは主に下位互換性のために使用され、保護モードを離れることなく古いバージョンの DOS プログラムを Windows や Linux などの最新のオペレーティング システムで実行できるようにします。
仮想8086モードの特徴
-
リアルモードの互換性
- 仮想 8086 モードを使用すると、プロセッサはリアル モードで動作環境をシミュレートでき、8086 命令セットとアドレス空間をサポートします。
- プロセッサは、保護モードの機能と利点を維持しながら、保護モードで 8086 プログラムを実行できます。
-
ページングと保護メカニズム
- 仮想 8086 モードでも、プロセッサは保護モードのページング メカニズムを使用して、仮想メモリとメモリ保護を実装できます。
- ページ テーブルを通じて、仮想 8086 モードのアドレス空間を物理メモリにマッピングし、メモリの分離と保護を実現します。
-
割り込みおよび例外処理
- 仮想 8086 モードは、プロテクト モードの割り込み記述子テーブル (IDT) を通じて管理できる割り込みおよび例外処理をサポートします。
- 割り込みと例外は仮想 8086 モニター (通常はオペレーティング システム カーネル) によって処理され、システムの安定性とセキュリティが確保されます。
-
ハードウェア仮想化のサポート
- 一部の最新のプロセッサは、仮想 8086 モードをより効率的に実装できるハードウェア サポートの仮想化テクノロジを提供します。
- たとえば、Intel の VT-x および AMD の AMD-V テクノロジは、ハードウェア アクセラレーションによる仮想化サポートを提供し、パフォーマンスを向上させることができます。
仮想 8086 モードでのメモリ管理
-
セグメント:オフセット アドレッシング
- 仮想 8086 モードでは、メモリ アドレス指定方法はリアル モードと同じで、セグメント: オフセット (セグメント) モードを使用します。
- セグメント アドレスとオフセット アドレスは合わせて 20 ビットの物理アドレスを形成し、最大 1MB のメモリ空間にアクセスできます。
-
ページングメカニズム
- 仮想 8086 モードはページング メカニズムをサポートしており、20 ビットのリアル モード アドレスを保護モードの仮想アドレス空間にマッピングできます。
- ページ テーブルを通じてメモリの保護と分離を実現し、仮想 8086 モードのプログラムが他のメモリ領域に不正にアクセスするのを防ぐことができます。
仮想8086モードの適用
-
古い DOS プログラムを実行する
- 仮想 8086 モードは主に、古いバージョンの DOS プログラムおよびアプリケーションを実行するために使用され、下位互換性を提供します。
- 最新のオペレーティング システムでは、仮想 8086 モードを使用すると、リアル モードで実行する必要があるいくつかの古いプログラムを実行できます。
-
仮想マシンとエミュレータ
- 一部の仮想マシンとエミュレータは、仮想 8086 モードを利用して古いオペレーティング システムとソフトウェアをサポートします。
- たとえば、DOSBox などのエミュレータは、仮想 8086 モードを通じて DOS 環境をシミュレートし、ユーザーがクラシックな DOS ゲームやアプリケーションを実行できるようにします。
仮想 8086 モードの制限事項
-
メモリアドレス空間
- 仮想 8086 モードでは、プログラムは 1MB のメモリ アドレス空間にのみアクセスできますが、これはリアル モードによって制限されます。
-
パフォーマンスのオーバーヘッド
- 仮想 8086 モードの実装には保護モードのサポートが必要ですが、これによりパフォーマンスのオーバーヘッドが発生する可能性があります。
- 割り込みおよび例外処理には、仮想 8086 モニター (オペレーティング システム カーネル) の介入が必要となり、処理の複雑さが増加します。
-
ハードウェアの制限
- すべてのハードウェアが仮想 8086 モードを完全にサポートしているわけではなく、一部のハードウェア機能は仮想 8086 モードでは使用できない場合があります。
要約する
仮想 8086 モードは、主に古いバージョンの DOS プログラムとの下位互換性を目的として、80x86 プロセッサによって保護モードで提供される特別なモードです。仮想 8086 モードを使用すると、プロセッサは保護モードの機能と利点を維持しながら、保護モードでリアルモードの動作環境をシミュレートできます。このモードは、レガシー ソフトウェア、仮想マシン、エミュレータを実行するために広く使用されています。
2. Windows メモリ管理
2.1 DOSオペレーティングシステムのメモリ配置
DOS (ディスク オペレーティング システム) オペレーティング システムのメモリ管理は、主に 8086/8088 プロセッサのリアルモード メモリ モデルに基づいています。リアル モードのメモリ アドレス空間は 1MB、0x00000 ~ 0xFFFFF です。この 1MB のアドレス空間は、いくつかの主要な領域に分割されており、それぞれが特定の目的を持っています。以下に、DOS オペレーティング システムのメモリ配置について詳しく説明します。
リアルモードメモリモデル
リアル モードでは、セグメント アドレスとオフセット アドレスを 20 ビットの物理アドレスに組み合わせてメモリ アドレスにアクセスします。セグメント アドレスは 4 ビット左にシフトされ、オフセット アドレスが追加されて実際の物理アドレスが形成されます。
メモリレイアウト
リアルモードでの 1MB メモリ空間のレイアウトはおおよそ次のとおりです。
-
割り込みベクタテーブル(IVT):0x00000~0x003FF
- 1KB (256 個のベクトル、各 4 バイト) を占めます。
- 割り込みサービスルーチンのエントリアドレスと関連情報を格納します。
-
BIOS データ領域 (BDA): 0x00400 - 0x004FF
- 約256バイト。
- ハードディスク、シリアル ポート、パラレル ポートなどのシステムおよびハードウェア デバイスのパラメータ情報を保存します。
-
レガシー メモリ (従来のメモリ): 0x00500 ~ 0x9FFFF
- 640KB。主に DOS オペレーティング システム、DOS アプリケーション、および常駐メモリ プログラム (TSR) に使用されます。
- プログラムコード、データ、スタックなどとして利用可能。
-
表示バッファ: 0xA0000 - 0xBFFFF
- ディスプレイアダプターが使用するメモリ領域。
- 0xA0000 - 0xAFFFF: 64KB、通常は EGA/VGA グラフィックス カードのグラフィックス モードで使用されます。
- 0xB0000 - 0xB7FFF: 32KB、通常はモノクロ ディスプレイ アダプター (MDA) に使用されます。
- 0xB8000 - 0xBFFFF: 32KB、通常はカラー テキスト表示 (CGA、EGA、VGA テキスト モード) に使用されます。
-
拡張 BIOS データ領域 (EBDA): 0xC0000 - 0xC7FFF
- 約 32KB。拡張 BIOS データとアダプター BIOS コードが保存されます。
-
BIOS拡張領域:0xC8000~0xEFFFF
- 主に BIOS と拡張カード (ネットワーク アダプター、SCSI コントローラーなど) のドライバーに使用されます。
-
システム BIOS: 0xF0000 - 0xFFFFF
- 64KB、システム BIOS コードを保存します。
- 基本的なシステム初期化、割り込みサービス ルーチン、ハードウェア制御およびその他の機能を提供します。
2.2 80386 メモリ アドレス指定メカニズム
Intel 80386 プロセッサは、より高度なメモリ アドレス指定メカニズムを導入し、以前のプロセッサよりも強力なメモリ管理および保護機能を提供しました。 80386 は、次の 2 つのメイン メモリ アドレッシング モードをサポートします。リアルモードそして保護モード 。保護モードでは、メモリ管理機能をさらに強化するためにページング メカニズムも導入されています。詳細な紹介は次のとおりです。
1.リアルモード
リアル モードでは、80386 プロセッサは 8086/8088 と同じメモリ アドレス指定方式を採用し、20 ビットのアドレス バスを使用し、1MB のメモリ空間にアクセスできます。アドレスはセグメント アドレスとオフセット アドレスから計算されます。
- セグメントアドレス: 4 ビット左にシフトします。
- オフセットアドレス:セグメントアドレスの左シフト結果を加算し、20ビットの物理アドレスを求めます。
物理地址 = (段地址 << 4) + 偏移地址
2.保護モード
保護モードは 80386 プロセッサの主な動作モードであり、強化されたメモリ保護および管理機能を提供します。プロテクト モードでのメモリ アドレス指定には、次の 2 つの層のメカニズムが含まれます。セグメンテーションのメカニズムそしてページングメカニズム。
2.1 セグメンテーションのメカニズム
プロテクト モードでは、80386 プロセッサはセグメント セレクターとセグメント記述子を使用してセグメントを管理します。セグメント記述子は、グローバル記述子テーブル (GDT) またはローカル記述子テーブル (LDT) に格納されます。
セグメンテーション メカニズムにおける線形アドレスの計算は次のとおりです。
线性地址 = 段基址 + 偏移地址
2.2 ページングのメカニズム
ページング メカニズムは、80386 プロセッサがプロテクト モードで提供するもう 1 つのメモリ管理方法であり、リニア アドレスを物理アドレスに変換することでメモリの仮想化と保護を実現します。ページング メカニズムには、ページ ディレクトリ、ページ テーブル、およびページ フレームが含まれます。
- ページディレクトリ: ページ ディレクトリ エントリ (PDE) が含まれており、各 PDE はページ テーブルを指します。
- ページテーブル: ページ テーブル エントリ (PTE) が含まれており、各 PTE はページ フレームを指します。
- ページフレーム: 実際の物理メモリ ブロック、通常は 4KB。
ページング メカニズムのアドレス変換は次のとおりです。
- リニア アドレスは、ディレクトリ、テーブル、ページ内オフセットの 3 つの部分に分かれています。
- ディレクトリ セクションでは、ページ ディレクトリにインデックスを付けて、対応する PDE を見つけます。
- テーブル セクションは、ページ テーブルにインデックスを付けて、対応する PTE を見つけます。
- ページ内オフセットをページ フレームのベース アドレスに加算して、物理アドレスを取得します。
物理地址 = 页帧基址 + 页内偏移
ページングメカニズムの概略図:
+----------------+----------------+----------------+
| 页目录(10位) | 页表(10位) | 页内偏移(12位)|
+----------------+----------------+----------------+
3. 80386 メモリ管理ユニット (MMU)
80386 の MMU (メモリ管理ユニット) は、セグメンテーションとページング アドレス変換を担当し、メモリ保護を実装します。
-
CR0レジスタ: プロテクトモードとページングを有効/無効にするための制御レジスタ。
- PE ビット (保護イネーブル): 保護モードを有効にします。
- PGビット(ページングイネーブル): ページングを有効にします。
-
CR3レジスタ: ストレージページディレクトリのベースアドレス。
-
CR2レジスタ: 最後のページフォルトのリニアアドレスを格納します。
4. 保護機構
保護モードでは、80386 プロセッサはメモリとシステムのセキュリティを確保するためのさまざまな保護メカニズムを提供します。
- 特権レベル : 0 から 3 までの合計 4 つのレベルがあり、レベル 0 が最高です。コードとデータへのアクセスを制御します。
- セグメント保護: セグメント記述子の属性フィールドを通じて、セグメント境界チェックとアクセス制御を実装します。
- ページ保護: PTE の属性フィールドを通じて、ページの読み取り、書き込み、および実行許可の制御が実現されます。
2.3 Windowsのメモリ配置
1. 仮想メモリ
Windows オペレーティング システムは、ハード ディスク上の物理メモリ (RAM) と仮想メモリ ファイル (ページ ファイル) を組み合わせて、プロセスごとに独立した仮想アドレス空間を提供する仮想メモリ管理を使用します。通常、各プロセスには 4GB の仮想アドレス空間 (32 ビット システム) があり、そのうち 2GB はユーザー モード プログラムで使用され、2GB はカーネル モードで使用されます。 64 ビット システムには、より大きな仮想アドレス空間があります。
2. 仮想アドレス空間のレイアウト
仮想アドレス空間は、ユーザー モード領域とカーネル モード領域に分割されます。
ユーザーモードアドレス空間
- 0x00000000 - 0x7FFFFFFF: アプリケーションが使用するユーザーモードのアドレス空間。
- ヒープ: 動的メモリ割り当て領域。アプリケーションは実行時にメモリを割り当て、解放します。
- スタック: 各スレッドには、関数呼び出しとローカル変数用の独自のスタックがあります。
- 共有メモリ: 異なるプロセス間で共有されるデータセグメント。
カーネルモードのアドレス空間
- 0x80000000 - 0xFFFFFFFF: オペレーティング システムのカーネルとドライバーによって使用されるカーネル モードのアドレス空間。
- カーネルのコードとデータ: オペレーティング システム カーネルのコードとグローバル データ。
- システムキャッシュ: ファイル アクセスのパフォーマンスを向上させるために、ファイル システムのキャッシュに使用されます。
- デバイスドライバ: ドライバーコードとデータ。
3. メモリページング
Windows はページング メカニズムを使用してメモリを管理し、仮想アドレスを物理アドレスに変換します。ページングの基本単位はページで、通常は 4KB です。
ページテーブルの構造
- ページディレクトリ: ページ テーブルを指すページ ディレクトリ エントリ (PDE) が含まれます。
- ページテーブル: 実際の物理メモリ ページを指すページ テーブル エントリ (PTE) が含まれます。
4. メモリ管理ユニット (MMU)
プロセッサのメモリ管理ユニット (MMU) は、仮想アドレスを物理アドレスに変換し、ページ置換とメモリ保護を実行します。 Windows オペレーティング システムは、MMU を通じて次の機能を実装します。
- アドレス変換: 仮想アドレスを物理アドレスにマッピングします。
- メモリ保護: ページのアクセス権限 (読み取り、書き込み、実行) を制御します。
- ページ置換: 使用頻度の低いページをハードディスクのページ ファイルにスワップして、物理メモリを解放します。
5. メモリ保護
Windows オペレーティング システムは、次のメカニズムを通じてメモリを保護します。
- 特権レベル: ユーザーモード プログラムがカーネル モード メモリに直接アクセスできないようにします。
- ページの権限: 各ページのアクセスタイプ (読み取り、書き込み、実行) を制御します。
- アクセス制御: オペレーティング システムのカーネルは、不正なメモリ アクセスを防ぐためにアクセス許可を設定します。
6. メモリの割り当て
Windows は、メモリ割り当てにいくつかの戦略とデータ構造を使用します。
- ページングアロケータ: ページングの割り当てと仮想メモリの解放を管理します。
- ヒープマネージャー: アプリケーションに効率的なメモリの割り当てと割り当て解除を提供します。
- カーネルメモリアロケータ: プール アロケータや非ページ プールなどのカーネル モード メモリを管理します。
7. メモリ管理 API
Windows は、アプリケーションとシステムが使用する一連のメモリ管理 API を提供します。
- 仮想割り当て/仮想解放: 仮想メモリの割り当てと解放を行います。
- ヒープ割り当て/ヒープ解放: ヒープ上にメモリを割り当て、解放します。
- グローバル割り当て/グローバル解放: グローバル メモリ ブロックを割り当てて解放します。
- ローカル割り当て/ローカル解放: ローカル メモリ ブロックを割り当てて解放します。
8. ページファイル
Windows は、仮想メモリの一部としてページ ファイル (Pagefile.sys) を使用します。物理メモリが不足すると、使用頻度の低いページがページ ファイルにスワップされます。ページ ファイルの場所とサイズはユーザーが構成できます。
3. Windows 権限の保護
3.1 80386 割り込みと例外
1. 割り込みと例外の分類
割り込みと例外は次のカテゴリに分類できます。
- ハードウェア割り込み: キーボード、マウス、ハードディスクなどの外部デバイスによって送信されます。
- ソフトウェア割り込み: ソフトウェアによって渡されます
INT
コマンドがトリガーされます。 - 例外: プロセッサによって検出されたエラーまたは特殊な条件 (ゼロ除算エラー、ページ フォールトなど) によってトリガーされます。
2. 割り込みベクタテーブル (IVT)
80386 プロセッサは、割り込みベクタ テーブルを使用して割り込みと例外を管理します。 IVT は 256 個のエントリからなるテーブルで、各エントリは 4 バイトを占め、割り込みまたは例外ハンドラのアドレスが格納されます。 IVT のベース アドレスは IDTR (割り込み記述子テーブル レジスタ) に格納されます。
3. 割り込み記述子テーブル (IDT)
プロテクト モードでは、80386 プロセッサは割り込み記述子テーブル (IDT) を使用して割り込みハンドラーと例外ハンドラーを保存します。 IDT には割り込みゲート、トラップ ゲート、およびタスク ゲート記述子が含まれており、各記述子は 8 バイトを占有します。
- 割り込みゲート: ハードウェアおよびソフトウェアの割り込みに使用され、IF (割り込みフラグ) が自動的にクリアされます。
- トラップゲート: 例外処理に使用され、IF はクリアされません。
- タスクゲート:タスクの切り替えに使用します。
IDT のベース アドレスと境界は IDTR に保存されます。
4. 割り込み処理の流れ
割り込みまたは例外が発生すると、80386 プロセッサは次の手順を実行します。
- コンテキストを保存する: 現在の CS (コード セグメント レジスタ)、EIP (命令ポインタ レジスタ)、および EFLAGS (フラグ レジスタ) をスタックに保存します。
- IDTを探す: 割り込みまたは例外番号に基づいて、IDT から対応する記述子を見つけます。
- 権限を確認する: 現在の権限レベル (CPL) とターゲット権限レベル (DPL) を確認して、正当な権限の変換を確認してください。
- ハンドラーにジャンプ: 新しい CS と EIP をロードし、割り込みまたは例外ハンドラーにジャンプします。
- 割り込みまたは例外を処理する:ハンドラーコードを実行します。
- コンテキストを復元する:合格
IRET
この命令は CS、EIP、EFLAGS を復元し、割り込みまたは例外が発生する前の状態に戻します。
5. 例外の種類
80386 プロセッサは複数の例外をサポートしており、各例外には異なるエラー コードと処理方法があります。
- 故障: 回復可能な例外。ハンドラーが戻ると、例外を引き起こした命令が再実行されます。
- トラップ: デバッグまたはトレースに使用される例外。例外の発生後にハンドラーが復帰すると、次の命令が引き続き実行されます。
- 中止: 重大なエラー。通常は回復不可能です。
一般的な例外には次のようなものがあります。
- 除算エラー: 除数がゼロの場合に発生します。
- 単一段階: デバッグに使用され、単一ステップの実行時に発生します。
- ブレークポイント: ブレークポイントをデバッグするときに発生します。
- オーバーフロー:使用
INTO
命令がオーバーフローを検出したときに発生します。 - BOUND 範囲を超えました: 配列アクセスが範囲外になった場合に発生します。
- 無効なオペコード: 不正な命令を実行した場合に発生します。
- デバイスが利用できません: コプロセッサが使用できない場合に発生します。
- 二重故障:例外処理時に再度例外が発生します。
- コプロセッサセグメントのオーバーラン: コプロセッサの動作によって発生します。
- 無効な TSS: タスクステータスセグメントが不正な場合に発生します。
- セグメントが存在しません: 存在しないセグメントにアクセスした場合に発生します。
- スタックフォルト: スタック操作エラーが発生した場合に発生します。
- 一般保護違反: 保護ルールに違反した場合にトリガーされます。
- ページフォルト: ページング動作が異常な場合に発生します。
6. 割り込みおよび例外ハンドラー
割り込みおよび例外ハンドラーは、特定の割り込みまたは例外を処理するために使用される特別なルーチンです。これらは通常、オペレーティング システムによって提供され、システム状態の復元、エラー情報の記録、必要な回復操作の実行、または割り込み応答を担当します。
7. 割り込みの優先順位とマスク
80386 プロセッサは、割り込み優先順位とマスキング メカニズムをサポートし、PIC (プログラマブル割り込みコントローラー) を通じてハードウェア割り込みの優先順位とマスキングを管理します。高レベルの割り込みは、低レベルの割り込みの処理を中断して、重要なイベントにタイムリーに応答することができます。
3.2 80386の保護機構
1. セグメンテーションの保護
80386 プロセッサは、セグメンテーション メカニズムを使用してメモリを管理します。各セグメントには、セグメントのベース アドレス、境界、アクセス権を含む記述子があります。セグメンテーション保護により、プロセスは許可されているメモリ領域にのみアクセスできるようになります。
セグメント記述子
セグメント記述子は、グローバル記述子テーブル (GDT) とローカル記述子テーブル (LDT) に格納されます。各記述子には次の情報が含まれます。
- ベースアドレス: セグメントの開始アドレス。
- 限界: セグメントのサイズ。セグメントの終了アドレスを示します。
- タイプ (Type) と特権レベル (DPL): セグメントの種類 (コードセグメント、データセグメント、システムセグメント) とアクセス権。
- セグメント存在ビット(P): セグメントがメモリ内にあるかどうか。
セグメンテーション保護の実装
メモリにアクセスするとき、プロセッサはセグメント セレクターに基づいてセグメント記述子を検索し、次のチェックを実行します。
- ベースアドレスと境界のチェック:アクセスアドレスがセグメントの範囲内であることを確認してください。
- 権限チェック処置: アクセス権が記述子のタイプおよび特権レベルと一致していることを確認してください。
2. ページング保護
ページング メカニズムはメモリ管理をさらに改良し、各ページが独自のアクセス権を持ちます。ページング保護メカニズムは、ページ ディレクトリとページ テーブルを通じて実装されます。
ページディレクトリとページテーブル
- ページディレクトリ: ページ テーブルを指すページ ディレクトリ エントリ (PDE) が含まれます。
- ページテーブル: 実際の物理メモリ ページを指すページ テーブル エントリ (PTE) が含まれます。
各ページ テーブル エントリには次の情報が含まれます。
- ページベースアドレス: 物理メモリページの開始アドレス。
- 存在ビット(P): ページがメモリ内にあるかどうか。
- 読み取り/書き込みビット (R/W): ページが書き込み可能かどうか。
- ユーザー/スーパーユーザービット (U/S): ページへのアクセス権限。
ページング保護の実装
メモリにアクセスするとき、プロセッサは次のチェックを実行します。
- ページの存在チェック: ページがメモリ内にあるかどうかを確認し、メモリ内にない場合はページ フォールト (ページ フォールト) をトリガーします。
- 読み取り/書き込みチェック: ページが書き込み可能かどうかを確認してください。書き込み不可能なページに書き込もうとすると、保護違反がトリガーされます。
- ユーザー/スーパーユーザーのチェック処置: アクセス許可を確認して、ユーザーモードのコードがカーネルモードのページにアクセスできないことを確認してください。
3. 特権レベル
80386 プロセッサは、0 ~ 3 の 4 つの特権レベル (特権レベル) をサポートします。レベルが低いほど、特権は高くなります。
- 特権レベル 0 (リング 0): 最高の特権レベル。通常はオペレーティング システムのカーネルで使用されます。
- 特権レベル 1 (リング 1)そして特権レベル 2 (リング 2): 中間の特権レベル。めったに使用されません。
- 特権レベル 3 (リング 3): 最も低い特権レベル。通常はユーザーモード アプリケーションによって使用されます。
特権レベルの実装
特権レベルは、次のメカニズムを通じて実装されます。
- コードセグメント特権レベル (CPL): 現在実行中のコードの特権レベル。
- データセグメント特権レベル (DPL): データ セグメントの特権レベル。セグメントにアクセスできる CPL を決定します。
- リクエスト特権レベル (RPL): セグメント セレクターの特権レベル。要求されたアクセス許可を示します。
アクセス操作を実行するとき、プロセッサは CPL、DPL、および RPL をチェックして、特権レベルのルールに準拠していることを確認します。一致しない場合、一般保護違反がトリガーされます。
4. システムセグメントとゲート記述子
80386 プロセッサは、タスクの切り替えと割り込み処理のためのシステム セグメントとゲート記述子をサポートします。
システムセグメント
- タスクステータスセグメント(TSS): タスクのコンテキスト情報が含まれており、タスクの切り替えに使用されます。
- ローカル記述子テーブル (LDT): タスク固有のセグメント記述子が含まれます。
ゲート記述子
- 割り込みゲート: 割り込み処理に使用され、割り込みハンドラにジャンプします。
- トラップゲート: 例外処理に使用され、割り込みをマスクしません。
- タスクゲート: タスク切り替えに使用され、TSS を介してタスクを切り替えます。
5. タスクの切り替え
80386 プロセッサは、タスク ステータス セグメント (TSS) を通じて実装されるハードウェア タスク スイッチングをサポートします。タスクの切り替えは、割り込み、例外、またはタスク ゲートによってトリガーできます。
タスクステータスセグメント(TSS)
TSS には、タスクのレジスタ状態、セグメント レジスタ、スタック ポインタ、およびタスク リンクが含まれます。タスクを切り替えるとき、プロセッサは現在のタスクのステータスを TSS に保存し、新しいタスクのステータスをロードします。
タスク切り替え処理
- 現在のタスクのステータスを保存する: 現在のタスクのレジスタとセグメント レジスタを TSS に保存します。
- 新しいタスクのステータスをロード: 新しいタスクの TSS からレジスタとセグメント レジスタをロードします。
- 更新タスクレジスタ(TR): 新しいタスクの TSS を指します。
6. 割り込みおよび例外処理
割り込みおよび例外処理は、80386 プロセッサ保護メカニズムの重要な部分です。割り込みと例外は割り込み記述子テーブル (IDT) によって管理され、処理中に許可チェックとコンテキストの切り替えが実行されます。
割り込みおよび例外処理手順
- コンテキストを保存する: 現在の CS、EIP、EFLAGS をスタックに保存します。
- IDTを探す: 割り込みまたは例外番号に基づいて、IDT から対応する記述子を見つけます。
- 権限チェック: CPL と DPL をチェックして、法的な許可の変換を確認してください。
- ハンドラーにジャンプ: 新しい CS と EIP をロードし、ハンドラーを実行します。
- コンテキストを復元する:合格
IRET
CS、EIP、EFLAGS を復元し、割り込みまたは例外が発生する前の状態に戻します。
3.3 Windows の保護メカニズム
1. ユーザーモードとカーネルモード
Windows オペレーティング システムは、プロセッサの実行モードをユーザー モード (ユーザー モード) とカーネル モード (カーネル モード) に分けます。
- ユーザーモード: アクセスが制限され、ハードウェアまたはカーネル データ構造に直接アクセスできないアプリケーションを実行します。
- カーネルモード: コア オペレーティング システム コンポーネントとデバイス ドライバーをフル アクセスで実行し、特権命令を実行できます。
ユーザーモードとカーネルモードの切り替え
ユーザー モードとカーネル モード間の切り替えは、通常、システム コールを通じて実装されます。アプリケーションはシステム API を呼び出してカーネル サービスを要求し、オペレーティング システムは要求を処理のためにカーネル モードに切り替えます。
2. メモリ保護
仮想メモリ
Windows は仮想メモリ メカニズムを使用して、各プロセスに独立したアドレス空間を提供します。このメカニズムにより、プロセスが相互のメモリに直接アクセスすることがなくなり、システムのセキュリティと安定性が向上します。
- ページテーブル: 各プロセスには、仮想アドレスを物理アドレスにマップする独立したページ テーブルがあります。
- ページ交換: 物理メモリが不足している場合、オペレーティング システムは、使用頻度の低いページをハード ディスク上のページ ファイルにスワップします。
メモリセグメント
Windows はメモリ セグメントを使用してさまざまな種類のデータとコードを分割し、各セグメントには異なるアクセス権と保護メカニズムがあります。たとえば、コード セグメントは読み取り専用ですが、データ セグメントは読み取り/書き込み可能です。
3. アクセス制御
Windows オペレーティング システムは、アクセス制御リスト (ACL) を使用して、ユーザーとプロセスのリソースへのアクセス権を管理します。
セキュリティ識別子 (SID)
すべてのユーザー、グループ、およびコンピューターには、それらを識別する一意のセキュリティ識別子 (SID) があります。
アクセス制御リスト (ACL)
各オブジェクト (ファイル、ディレクトリ、レジストリ キーなど) にはアクセス制御リストがあり、そのオブジェクトに対するさまざまなユーザーおよびグループのアクセス権を定義するアクセス制御項目 (ACE) のセットが含まれています。
4. 権限管理
Windows は、特権管理を通じてプロセスとユーザーが実行できる内容を制御します。ドライバーのインストール、システム ログへのアクセスなど、特定の権限は特定のユーザー グループ (管理者など) にのみ付与されます。
セキュリティ戦略
Windows は、システム セキュリティを強化するために、ユーザー アカウント制御 (UAC)、パスワード ポリシー、監査ポリシーなどを構成できる一連のセキュリティ ポリシーを提供します。
5. 割り込みおよび例外処理
Windows オペレーティング システムは、割り込みおよび例外処理メカニズムを使用して、ハードウェア割り込み、ソフトウェア割り込み、プロセッサ例外を管理します。
割り込み処理
割り込みハンドラー (割り込みサービス ルーチン、ISR) は、ハードウェア割り込みを処理し、外部デバイスが時間内に応答できるようにする責任を負います。
例外処理
例外ハンドラーは、ゼロ除算エラー、ページ フォールトなどのプロセッサ例外を処理し、例外が発生したときにシステムが適切な回復措置を確実に実行できるようにします。
6. マルチタスク
Windows では、マルチタスク メカニズムを通じて複数のプロセスとスレッドを同時に実行できます。オペレーティング システムは、スケジューラを使用してプロセスとスレッドの実行を管理し、システム リソースが公平に割り当てられるようにします。
スレッドのスケジューリング
Windows は、優先スケジューリング アルゴリズムを使用して、スレッドの優先順位とステータス (準備完了、待機中、実行中など) に基づいて CPU タイム スライスを割り当てます。
プロセスの分離
各プロセスには独立した仮想アドレス空間とリソースがあり、あるプロセスが別のプロセスの動作に影響を与えるのを防ぎ、システムの安定性を向上させます。
7. セキュリティ機能
Windows は、システムの保護機能を強化するために、データ実行防止 (DEP)、アドレス空間レイアウトのランダム化 (ASLR) などの一連のセキュリティ機能を提供します。
データ実行防止 (DEP)
DEP は、ハードウェアとソフトウェアの組み合わせによって特定のメモリ領域を実行不可能としてマークすることにより、データ セグメントでのコードの実行を防ぎます。
アドレス空間レイアウトのランダム化 (ASLR)
ASLR はプロセスのメモリ アドレス空間をランダム化し、攻撃者による脆弱性の悪用をより困難にします。