Aracılığıyla paylaş


Cihaza ayrılmış iş parçacıkları

Yavaş bir cihazın veya nadiren kullandığınız bir cihazın sürücüsü (CD/DVD sürücüsü gibi), cihaza ayrılmış bir sistem iş parçacığı oluşturarak birçok "bekleme" sorununu çözebilir. Ayrıca, çoğu dosya sistemi sürücüsü sistem iş parçacıklarını kullanır ve iş parçacığı geri çağırma rutinleri sağlar.

Bir cihaz sürücüsünün kendi iş parçacığı bağlamı varsa veya sistem iş parçacığı bağlamında çalışıyorsa, eşitleme nesnelerini koordinasyon için kullanabilir. Cihaza ayrılmış iş parçacığı veya en üst düzey sürücünün işçi iş parçacığı geri çağırma yordamı, sürücünün cihaz uzantısının paylaşılan iletişim bölgesinde bir olay nesnesi veya bir semafor nesnesi gibi bir dağıtıcı nesne üzerindeki işlemleri eşzamanlayabilir. Örneğin, cihaz ayrılmış bir iş parçacığı, bir semafor için KeWaitForSingleObject çağrısı yaparak iş parçacığının cihazı kullanımda değilken paylaşılan dağıtıcı nesnesini bekleyebilir. Cihaz sürücüsü G/Ç işlemini gerçekleştirmek için çağrılana kadar bekleyen iş parçacığı CPU süresi kullanmaz. Sürücü çağrıldığında semaforu Signaled durumuna ayarlar.

Bir sürücü, sürücü veya cihaza ayrılmış bir iş parçacığı oluşturmak için PsCreateSystemThread öğesini çağırabilir ve ardından iş parçacığının temel önceliğini ayarlamak için KeSetBasePriorityThread öğesini çağırabilir. Sürücü, SMP makinelerinde çalışma zamanı önceliği ters çevirmelerini önleyen bir öncelik değeri belirtmelidir. Yani, sürücü tarafından oluşturulan iş parçacığının temel önceliğini çok yüksek ayarlamak, bu sürücü için G/Ç istekleri gönderen düşük öncelikli iş parçacıklarının yürütülmesinde gecikmeler oluşturabilir.

İş parçacığı nesneleri kendileri bir dağıtıcı nesnesi türü olduğundan, bir iş parçacığı başka bir iş parçacığının tamamlanmasını bekleyebilir. Bir iş parçacığıyla ilişkili iş parçacığı nesne işaretçisini almak için, sürücü PsCreateSystemThread'ten alınan iş parçacığı tanıtıcısını geçirerek ObReferenceObjectByHandle'ı çağırabilir.

Bir iş parçacığı keDelayExecutionThread öğesini çağırarak tam zamanlı veya daha uzun bir zaman dilimi olabilecek bir aralığı bekleyebilir. KeDelayExecutionThread aralığının ayrıntı düzeyi yaklaşık 10 milisaniyedir. KeDelayExecutionThread zamanlayıcı temelli bir yordam olduğundan, aralığın ayrıntı düzeyi platforma bağlı olarak 10 milisaniyeden biraz daha hızlı veya daha yavaştır.