私は、sleep()、ブロッキング呼び出し、プリエンプションの概念とよく混同されます。私が理解しているように、プリエンプションは、プロセスが何をしていたかに関係なく、スケジューラによって完全に行われます。プロセスがクリティカル セクションにあるか、アトミックな命令を実行している場合を除き、スケジューラはスケジューリング アルゴリズムに基づいてプロセスを横取りし、待機中のプロセス リストに入れることができます。
一方、sleep() はスケジューラを呼び出して、指定された時間間隔でスケジューラをブロックします。sleep() に引数として渡されます。
呼び出しのブロックは、ディスクの読み取り/書き込み、別のデバイスからの信号などの I/O 操作のように、操作が完了するのを待つようなものです。
誰かがこれらの機能をより包括的な方法で説明してくれたり、確かなリソースを教えてくれたりできますか? ありがとう。