0

カーネルが context_switch() を実行しているとき、つまりその関数内にあるとき、他のタスクがシステム コールを行う可能性はありますか? 私が理解している限り、プロセッサの状態がスワップされているため、context_switch が完了するまで他のコードを実際に実行することはできません。この理解は正しいでしょうか?

background: 基本的には、コンテキスト スイッチでシステム コール テーブルを交換したいと考えています。syscall ベクトルには 2 つのバージョンがあり、そのうちの 1 つは変更された syscall コードのアドレスを含んでいます。「関心のあるプロセス」がスケジュールされたら、sys_call_table ポインターを更新して、新しいプロセスを指すようにします。そして、対象のプロセスがスワップアウトされたときにそれをスワップアウトします。

私はカーネル開発に不慣れなので、私のアプローチに関するフィードバックも歓迎します。PS: ptrace() については知っていますが、私のニーズには合いません。システムコール UML スタイルの仮想化に関連するコンテキスト スイッチが多すぎます。

4

1 に答える 1

0

あなたはそれについて間違って考えているのではないかと思います。context_switch の実行中にカーネルが他のタスクからのシステムコールを許可しない場合でも、現在実行中のプロセッサまでしか拡張されない可能性があります。1 つのコアがコンテキストの切り替えを行っている間、他のプロセッサは引き続き syscall を実行できます。

于 2013-05-17T20:38:18.017 に答える