たとえば8コアなどのマルチコアシステムがあるとどうなるのだろうか。コアで実行されている各タスクは、同時にカーネルにsyscall()
リクエストを送信します。私の質問は、カーネルが複数の並列syscall()
要求を並列または順次、あるいはその他の波状に処理する方法です。
以前は、カーネルへの呼び出しは Big Kernel Lock を使用してシリアル化されていました。しかし、それはかなり前に削除され、その前でさえ、かなりの数のカーネルパスがBKLを使用しなくなったため、特にシステムコールは長い間並行して実行されてきました。カーネル自体にプリエンプションが導入されているため、システムコールは相互に割り込むことさえできます(詳細については、 古いLinuxカーネルのプリエンプションがない理由は何ですか? を参照してください)。
したがって、あなたの質問に対する簡単な答えは、カーネルが複数の並列システムコールを並列に処理するということです。
システムコールの実行にロックの取得が含まれる場合があります。これにより、競合するシステムコールがシリアル化されますが、時間が経つにつれて、既存のロックが削除されるか、よりきめ細かいロックに置き換えられるため、その頻度は低くなります(パフォーマンスの問題が発生する場合)。 。