問題タブ [context-switch]

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.

0 投票する
1 に答える
401 参照

windows - Windows ドライバー開発: コンテキスト スイッチ コールバック?

ドライバーがコンテキスト スイッチごとにカーネルにコールバックを登録することは可能ですか?

ありがとう!

0 投票する
1 に答える
15582 参照

linux-kernel - Linux カーネルの schedule()+switch_to() 関数は実際にどのように機能しますか?

Linuxカーネルのスケジュールプロセスが実際にどのように機能するかを理解しようとしています. 私の質問は、スケジューリング アルゴリズムに関するものではありません。その機能schedule()switch_to()働きについてです。

説明してみます。私はそれを観た:

プロセスがタイム スライスを使い果たすと、フラグneed_reschedが によって設定されscheduler_tick()ます。カーネルはフラグをチェックし、フラグが設定されていることを確認し、schedule()(質問 1 に関連する) 新しいプロセスに切り替えるように呼び出します。このフラグは、別のプロセスを実行する必要があるため、できるだけ早くスケジュールを呼び出す必要があるというメッセージです。ユーザー空間に戻るか、割り込みから戻ると、need_reschedフラグがチェックされます。設定されている場合、カーネルは続行する前にスケジューラを呼び出します。

カーネル ソース (linux-2.6.10 - 本「Linux Kernel Development, second edition」の基になっているバージョン) を調べると、一部のコードがschedule()自発的に関数を呼び出して、別のプロセスに実行権を与えることができることもわかりました。この関数switch_to()は、実際にコンテキスト スイッチを実行する関数であることがわかりました。switch_to()実際に何が行われているかを理解しようと、いくつかのアーキテクチャに依存するコードを調べました。

その行動は、私が答えを見つけることができなかったいくつかの質問を提起しました:

  1. 終了したらswitch_to()、現在実行中のプロセスは何ですか? schedule()?を呼び出したプロセス それとも、実行するために選択された次のプロセスですか?

  2. 割り込みによって呼び出されると、実行するように選択されたプロセスは、割り込み処理が終了したときschedule()に実行を開始します (ある種の RTE の後)。それともその前?

  3. schedule()関数が割り込みから呼び出すことができない場合、いつフラグがneed_resched設定されますか?

  4. タイマー割り込みハンドラが動作しているとき、どのスタックが使用されていますか?

私は自分自身を明確にすることができるかどうかわかりません。できなかった場合は、いくつかの回答(または質問)の後にできることを願っています。そのプロセスを理解しようとして、すでにいくつかの情報源を見てきました。私は「Linux Kernel Development, sec ed」という本を持っていて、それも使っています。説明に役立つ場合は、MIP と H8300 アーキテクチャについて少し知っています。

0 投票する
1 に答える
1174 参照

zend-framework - zend ビュー レンダーはビュー スクリプトへのパスをどのように解決しますか

この「customSearchAction()」のようなアクションは、ビュー スクリプト ファイル名にどのようにマップされますか。

これらのファイル名は、「customsearch.xml.phtml」、「customSearch.xml.phtml」、「custom-search.xml.phtml」のいずれも機能しません。

xml、json のコンテキスト切り替えビュー ヘルパーを使用していることに注意してください。また、モジュールとアクションは適切に解決されています。アクション名を「customsearchAction()」に変更し、スクリプト ファイルの名前を「customsearch.xml.phtml」に変更すると、機能します。

では、上記の場合、ビュー スクリプトのファイル名はどのように解決されるのでしょうか。Zend フレームワークで

0 投票する
3 に答える
952 参照

c# - 異なるCPUコアでのコンテキストスイッチとスレッドの実行

SOに関する別の質問から、次の簡単な方法が可能であることがわかりました。

ifとコンソール書き込みライン呼び出しの間でコンテキストスイッチが発生した場合、異なるCPUで実行される可能性があります。これは私にとってニュースなので、シングルスレッドコードを別のCPUに切り替えることができるのはいつか、上記のような単純なケースでなぜ意味があるのか​​疑問に思います。 ?

0 投票する
2 に答える
578 参照

c# - Thread.MemoryBarrier() とコンテキスト切り替えの関係を理解し​​ようとしている

コンテキストスイッチは命令の実行中の任意の時点で発生する可能性があるように見えるので、コンテキストスイッチが任意の命令間で発生する可能性があり、異なるCPU上にある可能性がある場合、「部分的に問題のある」コード(これらの2つの命令)がなぜ意味があるのか​​ 疑問に思っています2 番目の命令のコア。

ここでの MemoryBarrier の説明は、MemoryBarrier を呼び出した後に CPU が切り替えられないという保証を与えるようには見えませ

(これはこの質問に関連しています)

0 投票する
2 に答える
1027 参照

c - sigsetjmp と siglongjmp に関する質問

sigsetjmp()関数と関数を理解しようとしていsiglongjmp()ます。sigsetjmp()コンテキストを保存し、コンテキストをsiglongjmp()復元するマニュアル ページの状態。私の質問は、スタック ポインターとプログラム カウンターの値も処理するのでしょうか?

追加のリソースへのリンクは大歓迎です。

0 投票する
4 に答える
47247 参照

multithreading - コンテキスト切り替えの手順

(1) 2 つの異なるプロセス間、および (2) 同じプロセス内の 2 つの異なるスレッド間のコンテキスト スイッチに含まれる手順を説明するよう求められました。

  1. コンテキストの切り替え中、カーネルは古いプロセスのコンテキストを PCB に保存し、次に実行がスケジュールされている新しいプロセスの保存されたコンテキストをロードします。
  2. 同じプロセス内の 2 つの異なるスレッド間のコンテキストの切り替えは、オペレーティング システムによってスケジュールできるため、並列に実行されているように見えるため、通常は 2 つの異なるプロセス間のコンテキストの切り替えよりも高速です。

これは一般的すぎますか?それとも、プロセスをより明確に説明するために何を追加しますか?

0 投票する
1 に答える
3094 参照

linux - Linux でのトレース コンテキスト スイッチ

重複の可能性:
pthread コンテキスト切り替えの監視

特定のスケジューリング レイアウトで奇妙なことが起こるプログラムがあります (sched_yield を実行する多数のスレッドが奇妙な方法で互いに抑制しているように見えます)。

各 CPU の OS スケジューラ スライスに関して何が起こっているかを正確に追跡したいと思います。そのようなトレースをキャプチャする方法はありますか? root 権限で SLES 11.1 を実行しています。

0 投票する
3 に答える
6756 参照

language-agnostic - 何かがコンテキスト スイッチと見なされるには、モード スイッチが必要ですか?

モードスイッチが必要ですか?アクションをコンテキストスイッチと呼ぶために、ユーザーモードからカーネルモードへ?

0 投票する
1 に答える
883 参照

module - 一部のプロセスの仮想メモリにカーネルモードで書き込む方法

別のプロセス メモリに書き込むために Unix モジュールを使用したい (カーネル モードで行い、pthread インターフェイスを避けたい)。
影響を与えたいプロセスではなく、現在のプロセスメモリに影響を与える関数 (do_mmap(..)、do_unmmap(..)、sys_mprotect(..) など) を使用する必要があります。

そこで、必要なプロセスを現在のプロセスにするために、必要なプロセスへのコンテキスト切り替えを行う方法を見つける必要があると考えました。ちょっとした変更で schedule() の実装をコピーしようとしました: 行を置き換えました:

次 = pick_next_task(rq);

と:

次=私の次;

私の問題は、スケジュールには含めることができない非常に多くの構造体と関数が必要であるため、それらを再実装する必要があることです。そのようなことをするのはかなり悪いようです。何か提案はありますか?

既存のカーネルを変更することは避けたいので、ユーザーが自分のプログラムを使用するためにオペレーティング システムを再起動して変更することを強制する必要はありません (これがモジュールを使用する理由です)。

ちなみに、Linuxは「2.6.38-11-generic」版を使っています。