4

(特定の期間に発生したコンテキストスイッチの数をカウントするのではなく)CPUコンテキストスイッチが発生したことをコードが検出するたびに、何らかのアクションを検出して実行できるかどうか疑問に思いました。とにかく、たとえばC#でこれを行うには?

4

3 に答える 3

6

いいえ、これはC#では実行できません。C#は、ユーザーモードでコードを実行する管理言語であるためです。コンテキストスイッチは、ユーザーレベルのコードからアクセスできないカーネルモードから発生します。

これはCドライバーで可能かもしれませんが、コードはOSのパフォーマンスと安定性に深刻なダメージを与える可能性があります。

于 2012-09-14T16:08:05.100 に答える
1

コンテキストスイッチは非常に低レベルのカーネルアクティビティであるため、そのようなフックが存在する可能性はほとんどありません(確かにはわかりません)。

少なくとも、スレッドを完全に制御できず、カーネルモードで実行されないため、通常の.Netランタイムで実行されているコードでは確実に実行できません。

質問が「C#でカーネルコードを記述できますか?」の場合-はい*(*-カーネルレベルで実行できるネイティブコードを生成するC#用のコンパイラが利用できるとは思わない-独自に記述してください)。

于 2012-09-14T16:08:57.600 に答える
0

getrusage()を使用した純粋なCで可能であることが有用な情報になると思います

struct rusage {
 ...
    long   ru_nvcsw;         /* voluntary context switches */
    long   ru_nivcsw;        /* involuntary context switches */
};

しかし、私はC#について知りません

于 2014-09-20T01:18:47.970 に答える