4

そのため、私が取っている OS のコースの一環として、メモリ アロケータを実装しました (C の malloc のように)。フリースペースはリンクリストに保存されます。

私の質問は次のとおりです。さまざまな割り当て戦略 (たとえば、最初に適合、最適に適合、最悪に適合) をテストするにはどうすればよいでしょうか。現在、私は事前に定義された回数だけ反復しており、そのたびにサイズが 1 ~ N バイトのブロックを割り当てています。ここで、N は 20000 のようなものです。ブロック。終了する前に、フリーリストを確認し、外部フラグメンテーションを計算します。これが進むべき道なのか、それともこれを行うためのより良いアプローチがあるのか​​ わかりません。

各戦略にランダムなブロック サイズを選択する際の問題の 1 つは、割り当てられたブロック サイズが異なる場合、それらを実際に比較できないことですよね? したがって、代替手段は同じテストを実行することですが、各戦略をテストするときに同じ割り当てサイズを使用し、同じブロックを解放するだけです。

これが混乱しないことを願っています:)

4

1 に答える 1

0

アイデアは次のとおりです。実際に実行されているシステムからデータをサンプリングし、それをテストデータとして使用できます。テスターは、記録されたデータのログファイルを読み取り、アロケーターへの同じalloc()、free()呼び出しを再生する必要があります。これを実際に実現するのは難しいかもしれませんが、Glibcを使用するLinuxでは、malloc、realloc、およびfreeにカスタムフックを追加する公式の方法があります。

http://www.gnu.org/software/libc/manual/html_node/Hooks-for-Malloc.html

したがって、基本的には、malloc()、realloc()、およびfree()呼び出しを介して各割り当て要求をログに記録するフックを使用して変更されたglibcを構築できると思います。ログ対応のglibcを使用していくつかの典型的なプログラムを実行し、それらのプログラムでいくつかの典型的なことを行います。何らかの方法で代表的なものにするようにしてください。たとえば、Webサーバーの使用状況をテストするためにApacheを実行する場合などです。生成されたログは、システムの「本物の」割り当て動作の合理的なシミュレーションになります。テストをより正確にするには、他のシステムや他のシナリオなどでロギングプロセスを繰り返して、サンプリングをより代表的なものにし、「吸虫」に対する脆弱性を減らす必要があります。

GlibcのようなLinuxからパッケージを再構築する場合、適切なリソースはLinux from Scratchプロジェクト(http://www.linuxfromscratch.org/ )です。

于 2013-01-09T18:22:52.467 に答える