1

ユーザープロセスがシステムコールを実行すると、カーネルプロセスが呼び出されます。では、これによってコンテキストスイッチが発生しないのはなぜですか?カーネルプロセスはユーザープロセスとは異なるため。または、カーネルルーチン(システムコールによって呼び出される)とユーザープロセスが同じプロセスに属していると言っているのは間違っていますか?

4

1 に答える 1

2

「ユーザープロセスがシステムコールを実行すると、カーネルプロセスが呼び出されます」-実際には、カーネルコードが呼び出されます。システム コールは、必然的に保護コンテキストの変更 (リング サイクル) を引き起こします。これがどの程度深くなるかは、呼び出しによって異なります。呼び出しがリング 0 に到達すると、そこにあるカーネル コードはすべてのユーザー スレッドとカーネル スレッドにアクセスできるため、一般に、そこにあるカーネル コードは「プロセス」として記述できません。これは、メモリ管理/セキュリティ コンテキストを提供するものです。保護。通常、リング 0 との間のリング サイクルには 2000 以上の CPU サイクルが必要です (3 日かかるドイツのオペラを除く)。このオーバーヘッドは、システム コールの結果がスレッド コンテキスト スイッチやプロセス コンテキスト スイッチになるかどうかにかかわらず、絶対に必要です。

システム コールの結果、実行中のスレッドのセットが変更される場合、スレッド コンテキスト スイッチの余分なオーバーヘッドが発生します。特に、別のプロセッサで実行されているスレッドのプリエンプションが変更に必要な場合はそうです。

新しく実行中のスレッドがプリエンプトされたスレッドとは異なるプロセスに属している場合、プロセス コンテキスト スイッチのオーバーヘッドはさらに大きくなります。

于 2012-02-02T00:11:59.520 に答える