Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Windows 8.1'den başlayarak, sürücüler yüksek çözünürlüklü zamanlayıcıları yönetmek için ExXxxZamanlayıcı yordamlarını kullanabilir. Yüksek çözünürlüklü zamanlayıcının doğruluğu yalnızca sistem saatinin desteklenen maksimum çözünürlüğüyle sınırlıdır. Buna karşılık, varsayılan sistem saat çözünürlüğüyle sınırlı süreölçerler önemli ölçüde daha az doğrudur.
Ancak yüksek çözünürlüklü süreölçerler için sistem saati kesintileri (en azından geçici olarak) daha yüksek bir hızda gerçekleşir ve bu da güç tüketimini artırma eğilimindedir. Bu nedenle, sürücüler yüksek çözünürlüklü zamanlayıcıları yalnızca zamanlayıcı doğruluğu gerekli olduğunda ve diğer tüm durumlarda varsayılan çözünürlüklü zamanlayıcıları kullanmalıdır.
Yüksek çözünürlüklü bir zamanlayıcı oluşturmak için WDM sürücüsü ExAllocateTimer yordamını çağırır ve Attributes parametresinde EX_TIMER_HIGH_RESOLUTION bayrağını ayarlar. Sürücü yüksek çözünürlüklü zamanlayıcıyı ayarlamak için ExSetTimer yordamını çağırdığında, işletim sistemi sistem saatinin çözünürlüğünü gerektiği gibi artırır, böylece süreölçerin süresinin dolma süreleri DueTime ve Period parametrelerinde belirtilen nominal süre sonu sürelerine daha hassas bir şekilde karşılık gelir.
Kernel-Mode Driver Framework (KMDF) sürücüsü, yüksek çözünürlüklü bir zamanlayıcı oluşturmak için WdfTimerCreate yöntemini çağırabilir. Bu çağrıda, sürücü parametre olarak bir WDF_TIMER_CONFIG yapısına bir işaretçi geçirir. Sürücü, yüksek çözünürlüklü bir zamanlayıcı oluşturmak için bu yapının UseHighResolutionTimer üyesini TRUE olarak ayarlar. Bu üye, Windows 8.1 ve KMDF sürüm 1.13 ile başlayan yapının bir parçasıdır.
Zamanlayıcı doğruluğunu denetleme
Örneğin, x86 işlemcide çalışan Windows için sistem saati değer çizgileri arasındaki varsayılan aralık genellikle yaklaşık 15 milisaniyedir ve sistem saati değer çizgileri arasındaki minimum aralık yaklaşık 1 milisaniyedir. Bu nedenle, varsayılan çözünürlüklü zamanlayıcının süre sonu süresi (EX_TIMER_HIGH_RESOLUTION bayrağı ayarlanmamışsa ExAllocateTimer tarafından oluşturulur) yalnızca yaklaşık 15 milisaniye içinde denetlenebilir, ancak yüksek çözünürlüklü zamanlayıcının süre sonu süresi milisaniye içinde denetlenebilir.
Bir sürücü varsayılan çözünürlüklü süreölçer için göreli bir süre sonu süresi belirtirse, süreölçerin süresi belirtilen süre sonundan yaklaşık 15 milisaniye önce veya daha sonra dolabilir. Bir sürücü yüksek çözünürlüklü süreölçer için göreli bir süre sonu süresi belirtirse, süreölçer belirtilen süre sonundan yaklaşık bir milisaniye sonra sona erebilir ancak hiçbir zaman erken dolmaz. Sistem saat çözünürlüğü ile zamanlayıcı doğruluğu arasındaki ilişki hakkında daha fazla bilgi için bkz. Zamanlayıcı Doğruluğu.
Yüksek çözünürlüklü süreölçer ayarlı değilse, işletim sistemi genellikle sistem saatini varsayılan hızında çalıştırır. Ancak, bir veya daha fazla yüksek çözünürlüklü zamanlayıcı ayarlanırsa, işletim sisteminin bu süreölçerlerin süresi dolmadan önce en az bir süre boyunca sistem saatini en yüksek hızda çalıştırması gerekebilir.
İşletim sistemi, gereksiz yere artan güç tüketimini önlemek için, sistem saatini yalnızca yüksek çözünürlüklü zamanlayıcıların zamanlama gereksinimlerini karşılamak için gerektiğinde en yüksek hızda çalıştırır. Örneğin, yüksek çözünürlüklü bir süreölçer düzenliyse ve süresi birkaç varsayılan sistem saati saatine yayılıyorsa, işletim sistemi sistem saatini yalnızca zamanlayıcı süresinin her sona erme tarihinden hemen önce gelen bölümünde en yüksek hızda çalıştırabilir. Süreölçer süresinin geri kalanında sistem saati varsayılan hızında çalışır.
Aşırı güç tüketimini önlemek için sürücüler, uzun süre çalışan yüksek çözünürlüklü bir süreölçerin süresini sistem saati değer aralıkları arasındaki varsayılan aralıktan daha küçük bir değere ayarlamaktan kaçınmalıdır. Aksi takdirde, işletim sistemi sistem saatini en yüksek hızda sürekli olarak çalıştırmaya zorlanır.
Windows 8'den başlayarak bir sürücü, sistem saati tarafından desteklenen zamanlayıcı çözünürlükleri aralığını almak için ExQueryTimerResolution yordamını çağırabilir.
ExSetTimerResolution karşılaştırması
Bir sürücü, ardışık sistem saati kesintileri arasındaki zaman aralığını değiştirmek için ExSetTimerResolution yordamını çağırabilir. Örneğin, bir sürücü zamanlayıcı doğruluğunu geliştirmek için sistem saatini varsayılan hızından maksimum hızına değiştirmek için bu yordamı çağırabilir. Ancak ExSetTimerResolution kullanmanın , ExAllocateTimer tarafından oluşturulan yüksek çözünürlüklü zamanlayıcıları kullanmaya kıyasla çeşitli dezavantajları vardır.
İlk olarak, sistem saat hızını geçici olarak artırmak için ExSetTimerResolution çağrıldıktan sonra, sistem saatini varsayılan hızına geri yüklemek için sürücünün ExSetTimerResolution'ı ikinci kez çağırması gerekir. Aksi takdirde, sistem saat süreölçeri sürekli olarak maksimum hızda kesmeler oluşturur ve bu da aşırı güç tüketimine neden olabilir.
İkincisi, ExSetTimerResolution yordamını kullanan bir sürücü, yüksek çözünürlüklü zamanlayıcılar için işletim sistemi kadar etkili bir şekilde geçici olarak yüksek sistem saat hızları kullanımını iyileştiremez. Bu nedenle, sistem saati kesinlikle gerekli olandan daha yüksek hızda çalışmak için daha fazla zaman harcar.
Üçüncü olarak, zamanlayıcı doğruluğunu geliştirmek için birden çok sürücü eşzamanlı olarak ExSetTimerResolution kullanıyorsa, sistem saati uzun süreler için en yüksek hızda çalışabilir. Buna karşılık, işletim sistemi birden çok yüksek çözünürlüklü zamanlayıcının çalışmasını genel olarak koordine eder, böylece sistem saati yalnızca bu zamanlayıcıların zamanlama gereksinimlerini karşılamak için gerektiğinde maksimum hızda çalışır.
Son olarak , ExSetTimerResolution kullanmak doğal olarak yüksek çözünürlüklü zamanlayıcı kullanmaktan daha az doğrudur. Sürücü, sistem saatini normalde milisaniye başına bir değer değeri olan en yüksek hıza yükseltmek için ExSetTimerResolution'ı çağırdıktan sonra, sürücü zamanlayıcıyı ayarlamak için KeSetTimerEx gibi bir yordamı çağırabilir. Bu çağrıda sürücü göreli bir süre sonu süresi belirtirse, süreölçerin süresi belirtilen süre sonundan yaklaşık bir milisaniye önce veya daha sonra dolabilir. Ancak, yüksek çözünürlüklü bir süreölçer için göreli süre sonu belirtilirse, süreölçerin süresi belirtilen süre sonundan yaklaşık bir milisaniye sonraya kadar dolabilir, ancak hiçbir zaman erken dolmaz.