2

ポインタはオペレーティング システムによってどのように処理されますか?

それらは最初にインターセプトされますか、それともポインターは、たとえば C の関数呼び出しから直接メモリにアクセスしますか?

編集:

ランタイムがプロセスを実行し、プロセスが現在ポインターを実行している場合、カーネルはすぐにセグメントにリンクしますか?それとも関数呼び出しをインターセプトし、実行したことを完了した後にデータにアクセスするレイヤーがありますか?

もしそうなら、仮想メモリポインタの処理など、実際にこれを行う責任があるソースコードを知っている人はいますか?

4

2 に答える 2

3

C のポインタは、仮想メモリアドレスを指しています。

OS(通常はHWと組み合わせて)は、アクセスしたいアドレスが(プロセス仮想メモリドメインで)有効かどうかをチェックし、有効な場合は物理アドレスに変換します。

HW は、アドレスが既にキャッシュに格納されているかどうか (システムに CPU キャッシュがある場合) もチェックし、格納されている場合は (遅いため) RAM からの読み取りを回避し、キャッシュから直接読み取ります。

それには本当に多くのことがあります - それがどのように正確に行われるかは、いくつかのアカデミックコースでカバーすることができます - しかし、これらは基本中の基本です.

于 2012-05-29T07:19:38.533 に答える
2

ポインタはオペレーティング システムによってどのように処理されますか?

ポインタはメモリ内の単なるアドレスです。オペレーティング システムがポインタの「処理」に関与する唯一の理由は、OS が仮想メモリを提供する場合です。その場合、メモリ管理ユニットは、仮想メモリ空​​間内のアドレスを物理アドレスにマッピングします。ポインターが使用できない仮想メモリ空​​間内の場所を指している場合、MMU はページ フォールトを生成し、OS は要求されたアドレスでページをスワップインします。ただし、これはすべて低レベルで発生し、適切に機能しているシステムでは無視できます。

于 2012-05-29T07:20:25.107 に答える