6

この質問に関して興味深いことは何も見つかりませんが、プログラミング言語のタイマーと遅延が低レベルでどのように機能するかについて、かなり長い間疑問に思っていました。

私が理解している限り、CPU はすべてのコアで命令を継続的に実行し、できるだけ速く (クロック速度に依存します)、実行する命令がある限り (実行中のアクティブな命令がある限り)スレッド)。

リアルタイムに関するこのフローを操作する簡単な方法があるとは思えません。次に、非常に多くの状況で遭遇するアニメーションのようなものがどのように機能するのか疑問に思います。

  • Windows 7 OS では、マウスを上に移動すると、スタート メニュー ボタンが徐々に明るくなります。
  • Flash にはタイムラインがあり、Flash ドキュメント内のすべてのオブジェクトは FPS 設定とタイムラインに従ってアニメーション化されます。
  • jQuery はさまざまなアニメーションをサポートしています。
  • コード実行の遅延...

コンピュータ (メインボード) には物理的なタイマーがありますか? CPU のように、操作を実行し、計算の間にデータを保持するためのレジスタがありますか? 私はインターネット上でそれについて何も見つけていません。OS には、タイミングに関連するすべてのものに対して最低レベルの API を提供する、非常に複雑なプログラミングが含まれていますか?

答えがとても気になります。

4

3 に答える 3

3

ほとんどの(おそらくすべての)CPUは、マザーボード上のクロックによって駆動され、「ティック」(信号を生成)することがよくあります。これは、プロセッサのメガヘルツ(MHZ)またはギガヘルツ(GHz)の定格が、このクロックが実行される速度を示していることです。これは「オーバークロック」とは、プロセッサをより高いGHz設定まで安全にオーバークロックできることを示しています。上記で説明したことのほとんどは、このクロックから生成された「ティック」によってトリガーされます。これは、CPUが次の命令を実行しようとする頻度、実際にすべてを実行する頻度を制御します。

この時計をリアルタイムクロックと混同しないでください。リアルタイムクロックは現在の時刻を追跡します。「システム時間」または「サーバー時間」へのすべての言及は、リアルタイムクロックを使用します。リアルタイムクロックは、コンピューターの電源がオフの場合でも、時間を追跡するマザーボード上の別個のハードウェアです。

これらの2つの「時計」は互いに独立しており、2つのまったく異なる目的で使用されます。1つはすべてのCPU処理を駆動します。指定されたプロセス(たとえば、2つの整数を乗算する)に127 cpuサイクルかかる場合、リアルタイムでかかる時間は、cpuクロックが設定されているギガヘルツに完全に依存します...その設定が3.0 Ghzの場合、つまり、CPUは1秒あたり30億プロセッササイクルを実行できるため、127サイクルかかるものは127/3億秒かかります。マザーボードに別のクロックCPUを搭載した場合、同じ乗算にかかる時間は長くなります(または短くなります)。これは、それが何時であるかを追跡するだけのリアルタイムクロックとはまったく関係がありません。

于 2012-11-02T17:15:40.137 に答える
0

これが確実に機能するとは約束できませんが、もし私がデザインするなら、ここから始めます。

まず、既知の時計が必要です。これは、CPU または独立したクリスタル クロックを実行する同じハードウェア クロックにすることができます。

次に、基本的なカウンターが必要です。これは、ティックごとに 1 を加算する単なる加算器です。タイマーのスケールを変更したい場合は、乗数を自由に適用できます。カウンターは特定の速度でオーバーフローする可能性があります。または、タイマーがオフになったときにリセットされる可能性が高くなります。

次に、タイマー値を格納するレジスタが必要です。これは、プログラマーが監視したい値を入力する場所です。非同期ロジックだけに関心を持つほど十分に低いので、カウンターの各ビットをレジスターの対応するビットと継続的に比較できるようになりました。これは等値比較子で行うことができます。

それらが一致すると、比較器は割り込みをトリガーできる高信号を送信します (基本的には、すぐに実行される非常に低レベルのフックまたはコールバック関数です。そのため、「割り込み」という名前が付けられています)。

OS がある規模で作業している場合は、独自のタイマー セットを作成できます。OS はすでにこのようなタイマーを使用して、スケジューラが同じコア上のスレッド間で時間を分割するために使用する「量」を設定しています。クライアント ソフトウェアで使用できるようにする独自の純粋なソフトウェア実装を備えている場合もあります。OS は、ハードウェア タイマーを 1us (たとえば) に設定し、クライアントがその周波数の倍数でコールバックを登録して、次のクォンタムで実行できるようにすることができます。

于 2021-09-08T21:32:27.867 に答える
-1

オペレーティング システムは、システムで実行中の他のプロセスに実行を放棄する「スリープ」呼び出しのいくつかのバリアントをサポートしています。すべてのプロセスがスリープしている場合、カーネルはプロセッサにしばらくスリープするように指示します。最新のプロセッサには、その明示的な目的のための命令があります。

于 2012-11-02T17:10:12.513 に答える