私が理解したところ、Linuxにはカーネルプリエンプション機能があります。つまり、システムコールを実行するスレッドを先取りし、次のエポックで実行するようにスケジュールを調整できます。
これにより、スケジュールを再キャッチするときにシステムコールのスレッドに優先順位が高くなるかどうか疑問に思います。
たとえば、SCHED_OTHERがあり、優先度が20のユーザーモードプロセスがあるとします(0は最低、139は最も高い)。このプロセスは、標準の読み取りシステム呼び出しを使用してsysfsからi2c eepromファイルを読み取ります。 eepromを読み取るとき、i2cコントローラは各バイトを一度に1つずつ受信する必要があるため、タイミングが重要です。バイト受信の間に長すぎるのを待つことができません。それ以外の場合、i2c トランザクションはタイムアウトします。
eepromからバイトが受信されると、スレッドは再予約されます(スリープ状態、または優先順位の高いスレッドによってプリエンプトされるなど)。スレッドスケジュールが変更された場合、まだ初期優先順位は20に低くなりますか?これは問題のように見え、デバイスに接続されており、タイミングが重要であるため、より高く処理する必要があります(rt優先順位で処理したいと思います)。これらのコンテキストでは、スレッドの優先順位が「上昇」したことを示すコンテンツが見つかりませんでした。