先週、インストラクターはLinuxでの割り込み、特にdo_IRQ関数の処理について語った。私はdo_IRQ関数がなぜスタックからではなくレジスタからそのパラメータを読み込むのかと疑問に思った。しかし、インストラクターはまた、この理由を知らなかった。今、私はまだdo_IRQのようなカーネル関数のいくつかがスタックからではなくレジスタから必要なパラメータを読み込むのはなぜかと思っています。私はそれを見つけたが、私は関数がレジスタまたはスタックからパラメータを読み取ったが、その理由は見つからなかった。スタックからではなくレジスタからパラメータを読み取る
0
A
答えて
0
カーネル2.6以降、すべてのカーネル関数は、スタックではなくレジスタを使用して最初の3つのパラメータ(x86_64では6)を渡します。
古代の2.4カーネルでは、わずかなパフォーマンスクリティカルな機能(例:do_IRQ
)がこのように機能します。あなたのインストラクターは2.4カーネルについて教えてくれますか?
レジスタにパラメータを渡すと、パフォーマンスが向上します。
メモリに比べて(L1キャッシュ内にあっても)レジスタを読み書きする方がはるかに高速です。
すべての場合、呼び出し元と呼び出し先がパラメータ渡しメソッドについて合意することが非常に重要です。
関数が非標準メソッドを使用する場合、コンパイラ属性でマークされます。
この属性はコンパイラに2つのことを伝えます。つまり、関数自体をコンパイルするときには、パラメータが期待される場所が分かり、呼び出しをコンパイルするときにはどこに配置するのかが分かります。
関連する問題
- 1. これらのレジスタはなぜスタックにプッシュされますか?
- 2. Pythonでファイルからパラメータ値を読み取る方法
- 3. plistから読み取る
- 4. InputStreamから読み取る
- 5. マイクロコントローラから読み取る
- 6. コンソールプロセスから読み取る
- 7. AngularJS:コントローラ内から経路パラメータを読み取る
- 8. RADIUSサーバから返されたパラメータを読み取る方法
- 9. Microsoft Test ManagerのTestCaseからパラメータ値を読み取る方法
- 10. try/catchを取り除く - メッセージキューから読み取る
- 11. ファイルエクスプローラの「開く」オプションからファイルを読み取る方法は?
- 12. 他のアンドロイドアプリケーションから読み取れる可能なパラメータを知る方法
- 13. バーコードから読み取る方法は?
- 14. JSONArrayはSeekBarからdoubleを読み取らない
- 15. ライブラリからプログラムで読み取る
- 16. Webからではなく、java GUIプログラムからローカルPHPファイルを読み取る方法は?
- 17. C++ .txtファイルからスタックへの整数の読み込み
- 18. ドライバーなしでUSBから読み取る方法は?
- 19. ie9ブラウザが強制的にサーバーからキャッシュからではなくxmlを読み取る方法
- 20. WinFormsからWPF ResourceDictionariesを読み取る
- 21. フラッシュからジョイスティックを読み取る
- 22. JARディレクトリからプロパティファイルを読み取る
- 23. AnnotationProcessorからバイトコードを読み取る
- 24. stdinからパスワードを読み取る
- 25. App.configファイルからコレクションを読み取る
- 26. テキストファイルからデータを読み取る
- 27. バイトからパケットIDを読み取る
- 28. Dukascopyチックバイナリファイルからデータを読み取る
- 29. jquery ajax:CGIから値を読み取る
- 30. Java - キャストオブジェクトをプロパティファイルから読み取る
"呼び出し規約"については、 – blueshift
を呼び出してください。呼び出し規約とIRQ関数に対するレジスタスタックフレームの利用可能性の間に混乱がありますか? – stsquad