Linuxカーネルは複数の並列syscall()要求をどのように処理しますか?

Linuxカーネルは複数の並列syscall()要求をどのように処理しますか?

マルチコアシステム(8コアなど)があり、コアで実行されているすべてのタスクがsyscall()同時にコアに要求された場合はどうなりますか?私の質問は、カーネルが複数の並列syscall()要求、並列または順次、または他の波を処理する方法です。

ベストアンサー1

以前は、カーネルへの呼び出しは次のようにシリアライズされました。大きなカーネルロック。しかし、ずっと前に削除され、以前はかなりの数のカーネルパスでBKLを使用しなくなり、長い間システムコールが並列に実行されてきました。カーネル自体にプリエンプション機能が導入されると、システムコールはお互いを妨げる可能性があります(参照:以前のLinuxカーネルがプリエンプティブではないのはなぜですか?詳細はこちら)。

したがって、あなたの質問に対する短い答えは、カーネルが複数の並列システム呼び出しを並列に処理することです。

場合によっては、システムコールの実行にロック取得が含まれ、競合するシステムコールをシリアライズしますが、時間の経過とともにこれはあまり一般的ではなく、既存のロックは削除またはよりきめ細かいロックに置き換えられます(パフォーマンスが低下した場合)。問題)。

おすすめ記事