カーネルスケジューラは、タイムスライスが経過したことをどのように知ることができますか?

カーネルスケジューラは、タイムスライスが経過したことをどのように知ることができますか?

私の前の質問からカーネルスケジューラはプロセスをプリエンプトする方法をどのように理解できますか?プリエンプション方法への回答を得ました。

今、カーネルスケジューラが時間分割が経過したことをどのように知ることができるのか疑問に思います。私には適切なハードウェアタイマーソリューションについて読みましたが、それ以降、ほとんどの最新のオペレーティングシステム(Windows、Linuxなど)がこれを行うことに気づきました。いいえソフトウェアタイマーではなく、ハードウェアタイマーを使用してください。

プロセスがタイムスライスを占有した後(たとえば、それ自体がプリエンプションされていない場合)、ソフトウェアタイマーを使用してプロセスをプリエンプトするにはどうすればよいですか。ハードウェアタイマーが必要だと思いますか?

答え1

ハードウェアタイマーが必要だと思いますか?

はい、カーネルはハードウェアを使用して定期的に割り込みを生成します。 PCでは歴史的に8253/8254プログラマブルインターバルタイマーまたはそのシミュレーションローカルAPICタイマーだから高温PET

現在、Linuxカーネルは、可能であれば「ティックなし」で実行するように構築できます。カーネルは、必要なときだけ実行するようにタイマーをプログラムします。これは、特定のCPUが単一のプロセスを実行しても「絶対」には発生しない可能性があります。ほとんどの場合、ダイナミックティックが使用されるため、カーネルは要件に応じて異なる間隔で実行するようにタイマーを設定します。割り込みが少ないことは、ウェイクアップが少ないことを意味し、これはアイドルCPUがより長い間低電力モードに保たれることを意味します。エネルギー。

関連情報