1

カーネルに関数ポインタを作成し(割り込みサービスルーチンに似ており、割り込みベクトルテーブルに関数のアドレスを維持する)、コンパイルとリンクを開始すると、リンカはおそらく実行する場所から静的に関数のアドレスを割り当てるでしょう.

カーネル開発者は、関数が実行される可能性のある関数のアドレスを知らない場合があります。

ただし、新しいカーネル プロセスが作成されると、そのプロセスにメモリを動的に割り当てる必要があります。
では、RAM に空きメモリがあるかどうかを判断し、そのメモリをプロセスに割り当てるにはどうすればよいでしょうか。
また、リンカーによって割り当てられたメモリアドレスを見つける方法は?

malloc または kmalloc が空きメモリを処理に割り当てる方法を知りたいです。

4

2 に答える 2

0

まず、OS を指定していません。OS固有のカーネルメモリマネージャーがどのように機能するかを尋ねています。それは、Windows などのクローズド OS で公開されるものではありません。オープン ソース OS では、kmalloc または同様の関数のコードを参照するだけです。しかし、自分が何をしているのかよくわかっていない限り、それをいじってはいけません。

リンカはコードをロードする場所を決定しません。コード内のさまざまなアイテムの場所を解決し、それらの間の適切なリンクを作成するだけです (これがリンカと呼ばれる理由です...)

于 2012-11-04T11:15:02.647 に答える
0

では、RAM に空きメモリがあるかどうかを判断し、そのメモリをプロセスに割り当てるにはどうすればよいでしょうか。また、リンカーによって割り当てられたメモリアドレスを見つける方法は?

ここで混乱していると思います。これらは仮想アドレスであり、それがライブラリのようなものmallocです。実際のメモリ アドレスへのマッピングと、システムにプロセスを実行するための空きメモリがあるかどうかは、OS によって透過的に処理されます。

于 2012-11-04T13:16:11.777 に答える