問題タブ [kmalloc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
memory-management - kmalloc は型コンストラクターを呼び出しますか?
それぞれの型コンストラクタを呼び出すnewによるメモリ割り当てと、 mallocによるメモリ割り当てはそうではないことが知られています。しかし、kmalloc はどうでしょうか。
いくつかのシステム コールを開発しようとしていますが、以下の構造体にメモリを割り当てる必要があります。
kmallocでメモリを割り当てると、割り当て時に構造体メールボックスのコンストラクタが呼び出されますか? そうでない場合、コンストラクターを明示的に呼び出す以外に、コンストラクターを呼び出す合理的な方法は何ですか。カーネルのメモリ割り当てに新しい機能と同等の機能はありますか?
linux-kernel - GFP_NOFS がマスクされている場合、再帰的なファイルシステム呼び出しがなぜ悪い考えになるのか
LDD3 ページ 214 から:
GFP_NOIO
GFP_NOFS
これらのフラグは GFP_KERNEL のように機能しますが、要求を満たすためにカーネルが実行できる操作に制限を追加します。GFP_NOFS の割り当てではファイルシステム呼び出しを実行できませんが、GFP_NOIO では I/O の開始がまったく許可されません。これらは主に、割り当てがスリープ状態になる可能性があるファイルシステムと仮想メモリコードで使用されますが、再帰的なファイルシステム呼び出しは悪い考えです。
GFP_NOFS がマスクされている場合、再帰的なファイルシステム呼び出しがなぜ悪い考えなのか知りたいですか?
ありがとう!
linux - kmalloc での GFP_USER フラグの使用は何ですか?
私が理解している限り、GFP_USER
( への呼び出しでkmalloc
) フラグでの使用は、ユーザー空間にメモリを割り当てるために使用されます。割り当てられたページは、ユーザーがアクセスできるカーネル空間にあるということですか? これらのページmmapp
をユーザー空間に配置する必要があるか、ユーザーがアドレスに直接アクセスできるか。必要がある場合、とmmapp
の違いは何ですか?GFP_USER
GFP_KERNEL
linux - カーネルモジュールでキャッシュメモリを無効にする方法
現在、FPGA で開発されたカスタム モジュールを使用する Linux ドライバーを開発しようとしています。そのために、2 つの ARM コアで動作する Linux ディストリビューションを備えたザイリンクス Zynq SoC を使用し、VHDL モジュールは FPGA 部分に実装されていますが、これは問題を理解する上であまり重要ではありません。
FPGA モジュールは RAM に直接書き込みます。書き込まれた内容をドライバーで読み取りたいのですが、キャッシュ メモリが原因で問題が発生します。ドライバーは RAM ではなくキャッシュから読み取るため、古いデータを読み取ります。
FPGA が書き込み可能なメモリ空間を定義するには、kmalloc 関数を使用します。キャッシュの代わりに RAM メモリからの読み取りを強制するために使用できるフラグが存在するかどうか知っていますか?
私が探しているものである可能性のある2つのフラグを見ましたが、それらが何をするのかよくわかりません:
__GFP_COLD : キャッシュ ウォーム ページを返す代わりに、キャッシュ コールド ページを要求します。--> まだキャッシュされていないページの使用を強制するだけだと思いますが、後でキャッシュします。あれは正しいですか ?
GFP_DMA : 私が探しているのは、DMA と互換性のあるメモリの一部を強制的に使用することだけを読んでいるようです。
kmalloc で作成した配列のキャッシュを無効にするにはどうすればよいですか? または、少なくともキャッシュから読み取る代わりにプロセッサにRAMから読み取るように強制するにはどうすればよいですか?
ご協力ありがとうございました !
c - devm_kzalloc のパラメーターと使用法を説明する
私はカーネル ドライバー プログラミングに不慣れで、いくつかの側面を理解したいと考えています。
http://lxr.free-electrons.com/source/drivers/i2c/busses/i2c-ocores.c?v=3.19の以下のコード
- pdev は、プラットフォーム デバイスへのポインタです。pdev が指している構造体の内容は、プラットフォーム デバイスが初期化されたときに既に作成されており、ドライバー コアはその情報をこのプローブ関数に渡します。?? これは、ドライバーコアが使用するドライバーのプローブ中に識別された pci_dev を渡す pci dev 構造と同じですか? 私の理解は正しいですか?
- devm_kzalloc のパラメーターについては明確ではありません。763行目の「メモリを割り当てるデバイス」とはどういう意味ですかhttp://lxr.free-electrons.com/source/drivers/base/devres.c?v=3.19#L774 ? 結局のところ、サイズが struct ocores_i2c のカーネルにメモリを割り当てる必要があるだけです。最初のパラメーターは、後で自動的に解放するための追跡メカニズムとして使用されますか (devres カーネルのドキュメントを読むことに基づいています)?
- devm_kzalloc の戻り値は、カーネルで新しく割り当てられたサイズ ocores_i2c のメモリへのポインタです。この場合、devm_kzalloc の 2 番目のパラメーターを sizeof(*i2c ) ではなく sizeof(struct ocores_i2c) にすべきではありませんか?
c - ドライバーは、連続した物理メモリの大きなチャンクを必要とします
ネットワーク アダプタ ドライバを変更してパフォーマンスを向上させて使用する必要があります。また、連続する巨大な物理メモリ チャンクが必要です。
ポートの数に基づいて、これらのチャンクがいくつか必要になります。各チャンクは約 64MB である必要があります。
現在、CMA と bootmem のオプションを検討しています。
同じものに他のオプションはありますか? この割り当てられたメモリを管理するための組み込み関数がありますか、それともドライバーですべて管理する必要がありますか?
c - Ubuntu の特定の仮想アドレスにある文字列を取得するにはどうすればよいですか?
シンボルを含む配列へのポインターがあります。
このモジュールを make でコンパイルし、次のコマンドを使用してこのモジュールをアップロードしました。
このモジュールがカーネルにある場合、この文字列をどのように読み取ることができますか? 特定のプログラムを使用する必要がありますか?