No-Wake Zamanlayıcılar

Windows 8.1'den başlayarak sürücüler, işlemciyi düşük güç durumundan gereksiz yere uyandırmamak için uyandırma yok zamanlayıcılarını kullanabilir. Uyku modundan çıkarma zamanlayıcı, işlemciyi düşük güç durumunda tutarak güç tüketimini azaltır ve bir tabletin veya başka bir mobil bilgisayarın pil şarjı üzerinde çalışabileceği süreyi uzatır.

Süreölçerin süresi yalnızca işlemci etkin, çalışır durumda olduğunda sona erebilir. bir süreölçer işlemci düşük güç durumundayken süre sonu süresine ulaşırsa ve zamanlayıcının süresinin hemen dolması gerekiyorsa, zamanlayıcı işlemciyi uyandırmalıdır. Ancak, uyandırma yok süreölçeri son kullanma süresine ulaştığında ve işlemci düşük güçte olduğunda, işlemci zamanlayıcı dışında bir nedenden dolayı uyanana kadar bu süreölçerin süresinin dolmasını bekler. Bir seçenek olarak, sürücü, uyanmama zamanlayıcısı için maksimum gecikme toleransı belirleyebilir. Böylece, zamanlayıcının sona erme süresinden sonra işlemci, başka bir nedenle maksimum gecikme toleransı içinde uyanmazsa, zamanlayıcı işlemciyi uyandıracak şekilde ayarlanabilir.

Bir sürücü, yalnızca işlemci etkin durumdayken gerçekleştirilmesi gereken kritik olmayan işlemleri başlatmak için uyandırma yok zamanlayıcısını kullanabilir. Örneğin, sürücü bir bellek arabelleğindeki birikmiş durum bilgilerini düzenli aralıklarla bir dosyaya boşaltmak için uyandırma yok zamanlayıcısını kullanabilir. Bu durum bilgileri, sürücünün yalnızca işlemci etkin olduğunda gerçekleştirdiği işleme işini açıklar. İşlemci düşük güç durumundayken durum bilgisi oluşturulmaz ve işlemciyi uyandırmaya gerek yoktur.

Uyandırma yok zamanlayıcısını oluşturmak için WDM sürücüsü ExAllocateTimer yordamını çağırır. Bu çağrıda, sürücü Öznitelikler parametresinde EX_TIMER_NO_WAKE bayrağı bitini ayarlar.

Belirli bir zamanda sona erecek şekilde bir "uyandırmama zamanlayıcısını" ayarlamak için sürücü ExSetTimer yordamını çağırır. Bu çağrıda sürücü, uyandırma önleyici zamanlayıcının bitiş süresine ulaştıktan sonra, işlemciyi uyandırmadan önce ne kadar beklemesi gerektiğini belirtebilir. Sürücü bu dayanıklı gecikme süresini, sürücünün ExSetTimer yordamına giriş parametresi olarak geçirdiği EXT_SET_PARAMETERS yapısındaki NoWakeTolerance üyesine yazar. Sürücü NoWakeTolerance üyesini özel değer EX_TIMER_UNLIMITED_TOLERANCE ayarlarsa, zamanlayıcı işlemciyi asla uyandırmaz ve bu nedenle işlemci başka bir nedenle uyanana kadar süresi dolamaz.

Kernel-Mode Driver Framework (KMDF) sürücüsü veya User-Mode Driver Framework (UMDF) sürücüsü, uyandırma zamanlayıcısı 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. İşlemciyi hiçbir zaman uyandırmayan bir uyandırma yok zamanlayıcısını oluşturmak için, sürücü bu yapının TolerableDelay üyesini TolerableDelayUnlimited sabitine ayarlar. Bu sabit, Windows 8.1 ve KMDF sürüm 1.13 veya UMDF 2.0 ile başlayarak desteklenir.

Birleştirilebilir süreölçerlerle karşılaştırma

KeSetCoalescableTimer yordamı Windows 7'de tanıtıldı. Bu yordam, bir sürücünün zamanlayıcının süre sonu süresinde ne kadar toleransa izin verileceğini belirtmesini sağlar. İşletim sistemi genellikle bu bilgileri kullanarak iki veya daha fazla zamanlayıcı kesintisini tek bir kesmede birleştirebilir. Birden çok süreölçerin süre sonu birbirine tolerans pencerelerinin çakışacak kadar yakın olması durumunda, çakışma bölgesindeki tek bir zamanlayıcı kesintisi bu süreölçerlerin tümünün zamanlama gereksinimlerini karşılayabilir.

Zamanlayıcı birleştirmenin en büyük avantajı, işlemcinin süre sonu tarihleri arasında düşük güç durumunda kalabileceği süreyi uzatmasıdır. Bu nedenle, sürücüler benzer amaçlar için zamanlayıcı birleştirme ve uyandırmayan zamanlayıcılar kullanır.

Ancak, birleştirilebilir zamanlayıcılar uyandırmayan zamanlayıcılardan farklı davranır. Özellikle, uyandırma zamanlayıcısı için belirtilen dayanıklı gecikme yalnızca işlemci düşük güç durumundayken uygulanırken, birleştirilebilir zamanlayıcının süre sonu için belirtilen tolerans, işlemcinin düşük güç durumunda olup olmamasına bakılmaksızın uygulanır. Birleştirilebilir süreölçer için sürücü süre sonu süresindeki tolerans miktarını artırarak zamanlayıcının işlemciyi uyandırma olasılığını azaltabilir, ancak toleransı artırmak, işlemci etkin olduğunda zamanlayıcının doğruluğunu azaltmanın yan etkisine sahiptir. Buna karşılık, işlemci etkin olduğunda, uyandırma yapmayan zamanlayıcı için belirtilen tolere edilebilir gecikme, zamanlayıcının doğruluğunu etkilemez. Birçok sürücü için düşük tüketimli zamanlayıcılar güç tüketimini azaltmanın daha iyi bir yolu olabilir.