1

私はmalloc sbrkが呼び出されるシステムコールであることを知っています。同様に、malloedメモリ(ヒープメモリ)に書き込むときに呼び出されるシステムcalは何ですか

int main

{

  /* 10 byte of heap memory allocated */
  char *ptr = malloc(5);


  ptr[0] = 10;  // **What is the system call invoked for 
                    writing into this heap memory** ?????


}
4

3 に答える 3

2

メモリへのアクセスには、システム コールは必要ありません。それどころか、メモリへのアクセスは、ほとんどのコードで行われていることです。最新の OS では、仮想メモリの連続した範囲のフラット ビューがあり、通常、そのメモリの特定の領域 (「ページ」) を有効としてマークするためのシステム コールのみが必要です。それ以外の場合は、コール スタックなどのメモリ範囲が連続的に拡大しても、プログラム側で何もする必要さえありません。物理メモリにマップされていないメモリへのアクセスを (ページ フォールトを介して) 傍受し、カーネル マジックを実行して目的のメモリを物理空間に移動し、制御をプログラムに戻すのは、オペレーティング システムのメモリ マネージャーの唯一の仕事です。

ときどきシステム コールを実行する必要がある唯一の理由mallocは、システム コールがオペレーティング システムに途中の仮想メモリのランダムな部分を要求するためです。プログラムがグローバル変数とローカル変数のみを使用して機能する (動的割り当てを使用しない) 場合、メモリ管理のためのシステム コールは必要ありません。

于 2012-06-09T11:58:31.470 に答える
2

この場合、関連するシステム コールはありません。コンパイラにアセンブリを生成するように依頼して、そこに MOV 命令がいくつかしかないことがわかるようにします。または、デバッガーを使用してアセンブリを表示できます

于 2012-06-09T06:05:46.317 に答える
0

「オペレーティングシステムは、発生するすべての書き込みを認識しません。メモリへの書き込みは、システムコールではなく、単にSTOREアセンブリ命令に対応します。STOREと必要なアドレス変換を処理するのはハードウェアです。OSが唯一の時間ページ テーブルのアドレス変換が失敗し、OS にトラップが発生したときに、メモリ書き込みが発生することがわかります。」

詳細は下記リンクをお読みください

http://pages.cs.wisc.edu/~dusseau/Classes/CS537-F04/Questions/sol12.html

于 2012-10-25T06:33:59.560 に答える