そのプロセスによって呼び出されたシステム コールが実行されているときに、システム コールを呼び出すプロセスがスリープまたはプリエンプトされるとどうなりますか?
システムコールがプリエンプトされた場合、どのように再ロードしてそのプロセスに戻すのですか?
そのプロセスによって呼び出されたシステム コールが実行されているときに、システム コールを呼び出すプロセスがスリープまたはプリエンプトされるとどうなりますか?
システムコールがプリエンプトされた場合、どのように再ロードしてそのプロセスに戻すのですか?
システムはプロセスごとの状態を維持し、プロセスを一時停止して後で再起動するために必要なすべてを隠します。これの多くは、実際にメモリが存在する場所のマップ、ファイル ハンドルのリストなど、想像どおりのものです。
すぐに完了するわけではない長期的な処理を行うシステムプロセスは、すべてのリソースが考慮されていること、すべてのロックが解放されていることなどを確認するために非常に慎重に作成する必要があります。これは明らかに I/O の場合ですが、他の処理は特別なリソースも必要です。
ほとんどのシステム コールは特別なものではなく、プロセスの一部である通常のライブラリによって実装されます。遅い処理を行う実際のシステム コールは、「私をスリープ状態にし、次の場合に起動する」ように構成されているため、スリープ状態になることは自動的に、しかし目に見えないプロセスの一部です。