問題タブ [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.
c++ - タイマー割り込み内のコンテキスト スイッチ、予期しないコンパイル エラー
関数に実装されているコンテキスト スイッチをテストしていdispatch()
ます。私の理解では、割り込みタイマー内でディスパッチを呼び出すと問題が発生します。私がそれを行うと、コンパイルさえしません!奇妙なことに、タイマー割り込みとタイマーを呼び出してコンテキストを切り替えるためだけにディスパッチを実装すると、完全に機能します。マクロまたはインライン関数をディスパッチしようとしましたが、問題は同じです。ビルドしようとすると、予期しない例外が発生しますか?
何が悪いのか教えてもらうにはこれで十分ですか?
linux-kernel - コンテキスト スイッチの内部
この質問の助けを借りて、知識のギャップを学び、埋めたいと思います。
したがって、ユーザーはスレッド(カーネルレベル)を実行しており、現在呼び出していますyield
(システムコールだと思います)。スケジューラは、現在のスレッドのコンテキストを TCB (カーネルのどこかに格納されている) に保存し、実行する別のスレッドを選択して、そのコンテキストをロードし、そのCS:EIP
. 物事を絞り込むために、私は x86 アーキテクチャ上で動作する Linux に取り組んでいます。それでは、詳細を説明したいと思います。
したがって、最初にシステムコールがあります。
1) のラッパー関数はyield
、システム コールの引数をスタックにプッシュします。リターン アドレスをプッシュし、システム コール番号をレジスタにプッシュして割り込みを発生させます (たとえばEAX
)。
2) 割り込みは、CPU モードをユーザーからカーネルに変更し、割り込みベクタ テーブルにジャンプし、そこからカーネル内の実際のシステム コールにジャンプします。
3) スケジューラーが呼び出され、現在の状態を TCB に保存する必要があると思います。これが私のジレンマです。スケジューラーは、その操作を実行するためにユーザースタックではなくカーネルスタックを使用するため (つまり、SS
変更SP
する必要があります)、プロセス内のレジスターを変更せずにユーザーの状態をどのように保存しますか? 状態を保存するための特別なハードウェア命令があることをフォーラムで読みましたが、スケジューラはどのようにそれらにアクセスし、誰がいつこれらの命令を実行しますか?
4) スケジューラは、状態を TCB に保存し、別の TCB をロードします。
5) スケジューラが元のスレッドを実行すると、制御がラッパー関数に戻り、スタックがクリアされ、スレッドが再開されます。
副次的な質問: スケジューラはカーネルのみのスレッド (つまり、カーネル コードのみを実行できるスレッド) として実行されますか? 各カーネル スレッドまたは各プロセスに個別のカーネル スタックはありますか?
architecture - プロセッサが割り込みをどれだけ速く処理できるか
割り込みについて勉強していました。したがって、ほとんどのアーキテクチャは割り込み駆動型であり、すべてが割り込み駆動型である場合、プロセッサがそれらすべてをどれだけ高速に処理できるかということです。たとえば、キーボードのキーを押している間、カーネルに新しい文字のバッファを探すように要求する割り込みを作成します。その場合、プロセッサがどれだけ速くサービスを提供できるか、また割り込みが置かれたときに、プロセッサは次のように切り替える必要があります。カーネルスペースと、コンテキストスイッチに関して多くのコストがかかります。ですから、これらすべての後でも、プロセッサのパフォーマンスが優れている場合でも、2 つのキーストローク間の時間は、コンピューターの速度の点で多くの時間であると想定することしかできないと思いますか? 平均して、1 分間に何回のコンテキスト スイッチが発生しますか? そうすれば、私が実際に何を勉強しているのか、そして実際の生活を感じることができるようになると思います....ありがとう....
c - コンテキスト スイッチの時間の測定
MicroC/OS-II カーネルとマルチタスキングに慣れてきました。セマフォを使用する次の 2 つのタスクをプログラムしました。
ここで、コンテキスト切り替え時間、つまりプロセッサがこれら 2 つのタスクを切り替えるのにかかる時間を測定したいと思います。
timer()
これは、次のような関数を使用するだけで行われますか?
または私はこれを完全に間違っていますか?
linux - ソフトウェア割り込みルーチンとユーザーモード機能の違い
さて、私の質問はタイトルにあります
ご存知のように、例外ハンドラー ルーチンは、ユーザー モードをカーネル モードに切り替える責任があります
。これには、特定のアセンブリ命令が含まれます。
そして、これは、アプリケーションがアクセスが制限された高特権の命令とメモリ領域を使用するのを防ぐために行われると主張されています
ユーザー モード アプリケーションは、このユーザー カーネル スイッチを単独で実行できませんか? つまり、アプリケーション自体内の通常の関数ルーチンで、これらのアセンブリ命令を使用しますか?
もしそうなら、ソフトウェア割り込みのポイントと、ユーザーカーネルスイッチに関連するすべてのセキュリティ上の考慮事項を理解できません
そのスイッチをプログラムに実装するだけで、出来上がりです! 今はカーネルモードです
WTH
virtualization - タイプ1VMMおよびリング1
最近、私は仮想化について宿題をしています。私の質問は、VMMがどのように制御をゲストカーネルに転送し、そのコードをリング1で実行するかということです。
タイプ1VMM:これは従来のトラップアンドエミュレートVMMです。VMMはハードウェア上で直接実行され、リング0では「ホストオペレーティングシステム」として機能します。ゲストカーネルとゲストアプリケーションは、それぞれリング1とリング3でVMM上で実行されます。
ゲストアプリケーションがシステムコールを行うと、リング0 VMMにトラップされます(CPUはこれを行うように設計されています)。
次に、VMMはこれがシステムコールであることを検出し、制御をゲストカーネルのsyscalハンドラーに転送して、リング1で実行します。
完了すると、ゲストカーネルはsyscall-returnを実行します。これは特権呼び出しであり、VMMに再びトラップされます。
次に、VMMはリング3のゲストユーザースペースに実際に戻ります(CPUもこれを行うように設計されています)。
私の質問はステップ2についてです。VMMはどのように制御をゲストカーネルに転送し、CPUを強制的に1回鳴らしますか?それ以降、ゲストカーネルコードはリング0で実行されるため、単純な「呼び出し」にすることはできません。これは、ある種の「syscall-return」または特別なコンテキストスイッチ命令である必要があります。
何か考えがありますか?ありがとうございました!
linux-kernel - CPU が X86 でカーネル モードからユーザー モードに切り替わる: いつ、どのように?
CPU が X86 でカーネル モードからユーザー モードに切り替わるタイミングと方法: 正確には何をしますか? この移行はどのように行われますか?
ajax - レイアウトを使用した Zend コンテキスト スイッチ
Zend 内でコンテキスト切り替えを使用して、ダイアログで XHR を介して HTML を表示しています。
アプリケーション全体で、使用しているモジュール/コントローラーに基づいて CSS/スクリプト ファイルをロードします。たとえば、ユーザー モジュールのビュー コントローラーで、私のアプリケーションは css/user/view.css スクリプトをロードします。
ただし、コンテキスト スイッチを使用しているため、メタヘッド (レイアウトの一部) は (明らかな理由で) レンダリングされないため、XHR 要求が行われた現在のページのスタイルのみが利用可能です。
XHR エンドポイントでモジュール/コントローラーのスタイルを取得できる、きれいできれいな方法はありますか?
ありがとう
multithreading - 組み込み開発キットでコンテキストスイッチを強制する方法
最近、マルチプロセッサを使用した組み込み開発について学びました。デバッグモードでコンテキストスイッチを強制して、必要な特定のスレッドにアクセスできるかどうかを尋ねたいと思いました。可能であれば、デバッガーを介してこれを行う方法はありますか?私が使用するデバッガーは、システムをデバッグするためのgdbです。
ここに投稿された投稿を読んだことがありますが、これらの質問については実際には役に立ちませんでした。
ps、私はそれがおそらく安全な行動ではないことを知っています、しかしそれは私にとって必要です。
前もって感謝します。
multithreading - 同期に OS へのコンテキスト スイッチが必要なのはなぜですか?
私はハイ パフォーマンス コンピューティングに関するプレゼンテーションを見ていましたが、24:55 から発表者の 1 人が、ロックを取得することによる同期には、OS のカーネルへのコンテキスト スイッチ ダウンが必要であると述べています (アプリケーションが1つで実行されます)。その理由と、JVM 内で処理できない理由 (Java アプリの場合) について簡単に説明していただければ幸いです。