2012-01-17 6 views
1

セグメント・フォルトが発生すると、割り当てられていないか保護されていないメモリにアクセスすることを意味します。しかし、カーネルまたはCPUはどのようにそれを知っていますか?それはハードウェアによって実装されていますか?どのデータ構造がCPUをルックアップする必要がありますか?メモリのセットが割り当てられたら、どのデータ構造を変更する必要がありますか?カーネルはセグメント障害についてどのように知っていますか?

答えて

2

詳細はどのプラットフォームについて言及しているかによって異なりますが、通常、MMUは無効なメモリアクセスを試みると例外(割り込み)を生成し、カーネルはこれを割り込みサービスの一部として処理しますルーチン。

+0

何が無効なメモリですか? – venuswu

+0

"無効なメモリ*アクセス*"は、いくつかの理由で無効になります。読み取り専用メモリに書き込もうとしているか、実行不可能なメモリでコードを実行しようとしているか、関連付けられたページが割り当てられていないアドレスを読み書きしようとしていますか? –

1

一般に、segフォールトは、CPUが物理的にアドレスできないメモリにプロセスがアクセスしようとしたときに発生します。メモリアクセス違反についてOSに通知するのはハードウェアです。その後、OSカーネルは、例外を引き起こしたプロセスにシグナルを送信します。

1

質問の第2部分に答えるには、ハードウェアとOSによって異なります。典型的なシステム(すなわちx86)では、セグメント相対アドレスを仮想アドレスに変換するために、CPUはセグメントレジスタを(グローバルまたはローカルの記述子テーブルを介して)参照します(これは通常、現代のx86オペレーティングシステム)、次に(MMUは実際にこのビットを実行しますが、x86ではCPUの一部です)、ページテーブルを参照してその仮想アドレスを物理アドレスに変換します。存在するとマークされていないページが見つかると(現在のビットがページディレクトリに設定されていない)、例外が発生します。 OSがこの例外を処理すると、あきらめたり(間違いやパニックを起こしたときに表示されるsegfaultシグナルを引き起こす)、ページテーブルを修正してメモリを有効にし、例外から続行します。通常、OSには、有効なページとそのページの入手方法を示す帳簿があります。これはデマンドページングがどのように発生するかです。

+0

"無効なメモリ"とは何ですか? – venuswu

+0

申し訳ありませんが、私はそれを明確にすべきでした。私は私の答えを更新しますが、この文脈で私が意味することは、 "ページテーブルに存在するとマークされていないメモリ"です。 CPUが仮想アドレスを物理アドレスに変換しようとすると、ページテーブルの現在のビットをチェックし(ページテーブルのレイヤーが多い)、ページが存在しないことがわかると、例外が発生しますx86上)。 OSは、メモリを選択し、実行を再開するか、またはダンピングコアのような何かを行うことができます。 – Stewart

0

すべてが特定のアーキテクチャに依存しますが、ページ仮想メモリを持つすべてのアーキテクチャは基本的に同じように動作します。メモリには、割り当てられた各ページの仮想から物理へのマッピングを記述するデータ構造がメモリ内にあります。すべてのメモリアクセスに対して、CPU/MMUハードウェアはこれらのテーブルを検索してマッピングを検索します。これは恐ろしく遅いですが、速度を上げるためにハードウェアキャッシュがあります。

関連する問題