Bagikan melalui


Akurasi Pengatur Waktu

Rutinitas timer sistem biasanya memungkinkan pemanggil untuk menentukan waktu kedaluwarsa absolut atau relatif untuk timer. Misalnya, lihat KeWaitForSingleObject, KeSetTimer, atau KeDelayExecutionThread. Akurasi di mana sistem operasi dapat mengukur waktu kedaluwarsa dibatasi oleh granularitas jam sistem.

Waktu sistem diperbarui setiap detak jam sistem, dan hanya akurat hingga detak terbaru. Jika pemanggil menentukan waktu kedaluwarsa absolut, kedaluwarsa timer terdeteksi selama pemrosesan centang jam sistem pertama yang terjadi setelah waktu yang ditentukan. Dengan demikian, timer dapat kedaluwarsa sebanyak satu periode jam sistem lebih lambat dari waktu kedaluwarsa absolut yang ditentukan. Jika interval timer atau waktu kedaluwarsa relatif ditentukan, kedaluwarsa dapat terjadi hingga satu periode lebih awal atau lebih lambat dari waktu yang ditentukan, tergantung pada di mana tepatnya waktu mulai dan berakhir interval ini berada di antara detak jam sistem. Terlepas dari apakah waktu absolut atau relatif ditentukan, kedaluwarsa timer mungkin tidak terdeteksi sampai bahkan nanti jika pemrosesan interupsi untuk jam sistem tertunda oleh pemrosesan interupsi untuk perangkat lain.

Ketika pemanggil menentukan waktu kedaluwarsa relatif, rutinitas timer menambahkan waktu jam sistem saat ini ke waktu kedaluwarsa relatif yang ditentukan untuk menghitung waktu kedaluwarsa absolut yang digunakan untuk timer. Karena waktu sistem hanya akurat hingga kejadian terakhir dari jam sistem, waktu kedaluwarsa yang dihitung dapat terjadi hingga satu periode waktu jam sistem lebih awal dari waktu kedaluwarsa yang diharapkan oleh pemanggil. Jika waktu kedaluwarsa relatif yang ditentukan mendekati atau lebih kecil dari periode jam sistem, timer mungkin segera kedaluwarsa, tanpa penundaan.

Cara yang mungkin untuk lebih akurat mendukung waktu kedaluwarsa yang lebih singkat adalah dengan mengurangi waktu antara jam sistem, tetapi melakukannya kemungkinan akan meningkatkan konsumsi daya. Selain itu, mengurangi periode jam sistem mungkin tidak secara andal mencapai granularitas jam sistem yang lebih halus kecuali pemrosesan interupsi untuk perangkat lain dalam platform dapat dijamin tidak menunda pemrosesan interupsi jam sistem.

Dimulai dengan Windows 8, KeDelayExecutionThread menggunakan teknik yang lebih tepat untuk menghitung waktu kedaluwarsa absolut dari waktu kedaluwarsa relatif yang ditentukan pemanggil. Pertama, untuk mendapatkan perkiraan yang lebih tepat dari waktu sistem saat ini, rutinitas menggunakan penghitung kinerja sistem untuk mengukur waktu yang berlalu sejak jam sistem terakhir. Selanjutnya, rutinitas menambahkan perkiraan waktu sistem yang lebih tepat ini ke waktu kedaluwarsa relatif untuk menghitung waktu kedaluwarsa absolut. Waktu kedaluwarsa absolut yang dihitung oleh teknik ini akurat dalam mikrosekon. Akibatnya, timer tidak akan kedaluwarsa sebelum waktu kedaluwarsa relatif yang ditentukan berlalu. Timer masih dapat kedaluwarsa hingga periode jam sistem lebih lambat dari waktu yang ditentukan, dan mungkin kedaluwarsa bahkan nanti jika pemrosesan interupsi jam sistem tertunda oleh pemrosesan interupsi untuk perangkat lain.

Jika jam sistem berubah sebelum timer kedaluwarsa, timer relatif tidak terpengaruh tetapi sistem menyesuaikan tiap timer absolut. Timer relatif selalu kedaluwarsa setelah jumlah unit waktu yang ditentukan berlalu, terlepas dari waktu sistem absolut. Timer absolut kedaluwarsa pada waktu sistem tertentu, sehingga perubahan waktu sistem mengubah durasi tunggu timer absolut.