web-dev-qa-db-ja.com

Linuxカーネルがタイマー割り込みに使用するハードウェアは何ですか

タイマー割り込みごとに更新されるjiffiesについて読んでいます。タイマー割り込みの頻度は、コンパイル時定数HZによって決まります。

X86には多くのハードウェアデバイスが存在します。 1. RTC 2.プログラム可能な割り込みタイマー3.ローカルAPIC 4.タイムスタンプカウンター5. HPET

これは、Linuxカーネルがjiffie値を増分するために使用するデバイスです。

Robert Loveの本は「プログラム可能な割り込みタイマー」と書いています。それはまだ有効ですか?.

 cat /sys/devices/system/clocksource/clocksource0/available_clocksource 
tsc hpet acpi_pm 

# cat /sys/devices/system/clocksource/clocksource0/current_clocksource 
tsc

上記のsysファイルはその情報を提供していますか?

3
md.jamal

私はあなたがこれまたは非常によく似たものを読んでいたと思います( https://elinux.org/Kernel_Timer_Systems ):

タイマーホイール、Jiffies、HZ(または、従来の方法)

元のカーネルタイマーシステム(「タイマーホイール」と呼ばれる)は、タイマー割り込みごとにカーネル内部値(jiffies)を増分することに基づいていました。タイマー割り込みはデフォルトのスケジューリングクォンタムになり、他のすべてのタイマーはjiffiesに基づいています。タイマー割り込み率(およびJiffy増分率)は、HZと呼ばれるコンパイル時定数によって定義されます。異なるプラットフォームではHZに異なる値を使用します。これまで、カーネルはHZの値として100を使用し、10ミリ秒のJiffy間隔を生成していました。2.4では、HZ i386の値が1ミリ秒のJiffy間隔で1000に変更されました。最近(2.6.13)、カーネルはi386のHZを250に変更しました(1000は高すぎると見なされました)。

それで、あなたは「どんなタイマーがちょっとの間時間を計るのか」と尋ねているようです。

除去のプロセスによって: RTC、新しいローカルAPIC、およびTSCは固定周波数割り込みをサポートしていません。 以下に引用されているように、HPTはPITに取って代わるようです。

したがって、最も可能性の高い答えは [〜#〜] hpet [〜#〜]です。これらは、通常 サウスブリッジ 上にある、水晶によってトリガーされるカウンターに基づいています。この場合、jiffyは interrupt を生成する定期モードの単一のHPETコンパレーターによってタイミングが取られます。

ただし、Linuxが引き続きPITまたは他のタイマーを使用することは可能です( https://en.wikipedia.org/wiki/High_Precision_Event_Timer を参照):

使用と互換性

HPETが存在する前に設計されたオペレーティングシステムはHPETを使用できないため、他のタイマー機能を使用します。新しいオペレーティングシステムはどちらも使用できる傾向があります。一部のハードウェアは両方を備えています。実際、現在のほとんどのサウスブリッジチップには、オペレーティングシステムで使用されているかどうかに関係なく、PIT、PIC、高度なプログラマブル割り込みコントローラー(APIC)およびRTC=デバイスがシリコンに組み込まれています)のレガシーサポートインスタンスがあり、これは、最新のPCが古いオペレーティングシステムを実行するのに役立ちます。

PITとPETの間の接続

プログラマブル割り込みタイマーは、コードの通常の実行を中断するアクティブタイマーです。 それはHPETに取って代わられたようです

プログラマブルインターバルタイマー(PIT)は、特にマルチタスク環境において、現代のコンピューターに不可欠なコンポーネントです。 PITチップは、さまざまなレジスタ値を設定することによって作成できます。特定のレートでカウントアップまたはカウントダウンし、特定の時間に割り込みをトリガーします。タイマーはサイクリックモードに設定できるため、トリガーすると自動的に再度カウントを開始するか、1回限りのカウントダウンモードに設定できます。

新しいハードウェアでは、PITコンセプトの進化形であるHPET(高精度イベントタイマー)が利用できる可能性があります。

4
Philip Couling