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.
G/Ç yöneticisi çok görevli ve çok iş parçacıklı bir sistem içinde zaman uyumsuz G/Ç'yi desteklediğinden, özellikle çok işlemcili makinelerde bir cihaza yönelik G/Ç istekleri, sürücüsünün bunları tamamlamaya kadar işleyebileceğinden daha hızlı gelebilir. Sonuç olarak, özellikle belirli bir cihaza bağlı IRP'ler, cihaz başka bir IRP'yi işlemekle meşgul olduğunda sürücüde kuyruğa alınmalıdır.
Bu nedenle, en düşük düzey sürücü aşağıdakilerden birini gerektirir:
G/Ç yöneticisinin, sürücünün sistem tarafından sağlanan bir IRP kuyruğuna kuyruğa aldığı IRP'ler için G/Ç işlemlerini başlatmak üzere çağırdığı bir StartIo yordamı (bkz. IoStartPacket).
Sürücünün, karşılayana kadar daha hızlı gelen IRP'leri yönetmek için kullandığı bir iç IRP kuyruklama ve kuyruğu çözme mekanizması. Sürücüler cihaz kuyruklarını, kilitlenmiş kuyrukları veya güvenli kuyrukları iptal edebilir. Daha fazla bilgi için bkz. Driver-Managed IRP Kuyrukları.
Yalnızca dağıtım yordamlarındaki tüm olası IRP'leri karşılayabilen ve tamamlayabilen en düşük düzeyli bir cihaz sürücüsü için StartIo yordamı ve IRP'ler için sürücü tarafından yönetilen kuyruklar gerekmez.
Üst düzey sürücülerin neredeyse hiçbir zaman StartIo yordamları yoktur. Çoğu ara sürücüde StartIo yordamları veya iç kuyruklar yoktur; Bir ara sürücü genellikle dağıtım yordamlarından geçerli parametrelere sahip IRP'leri geçirebilir ve IoCompletion yordamındaki herhangi bir IRP için gerekli olan işlem sonrası işlemleri gerçekleştirebilir.
Aşağıda, genel olarak, IRP'ler için dahili, sürücü tarafından yönetilen kuyruklarla veya bu kuyruklar olmadan StartIo yordamının uygulanıp uygulanmayacağını belirlemeye yönelik bazı tasarım konuları açıklanmaktadır.
Sürücülerdeki StartIo Yordamları
Aynı anda yalnızca bir cihaz G/Ç işlemini işleyebilen bilgisayar çevre birimi cihazları için, cihaz sürücüleri StartIo yordamlarını uygulayabilir. Bu sürücüler için G/Ç yöneticisi, sistem tarafından sağlanan bir IRP kuyruğuna IRP'leri kuyruğa almak ve kuyruktan çıkarmak için IoStartPacket ve IoStartNextPacket yordamları sağlar.
StartIo yordamları hakkında daha fazla bilgi için bkz. StartIo Yordamı Yazma.
Sürücülerde IRP'ler İçin Dahili Kuyruklar
Bir cihaz birden fazla eşzamanlı G/Ç işlemi destekleyebilirse, cihazın en düşük düzeydeki sürücüsünün iç istek kuyruklarını ayarlaması ve kendi IRP kuyruğa alma sürecini yönetmesi gerektirir. Örneğin, sistem seri sürücüsü tam çift yönlü seri cihazları desteklediğinden, cihazlarında okuma, yazma, temizleme ve bekleme işlemleri için ayrı kuyruklar tutar.
Bazı temel cihaz sürücülerine istek gönderen daha üst düzey bir sürücü de iç IP kuyruklarını koruyabilir. Örneğin, dosya sistemi sürücülerinin neredeyse her zaman IRP'ler için iç kuyrukları vardır.
Daha fazla bilgi için bkz. Driver-Managed IRP Kuyrukları.
İç Kuyruk Eşitleme
Cihaza ayrılmış iş parçacıkları ve yönetici çalışan iş parçacıklarını kullanan en üst düzey sürücülere sahip sürücüler (çoğu dosya sistemi sürücüsü dahil) genellikle IRP'ler için kendi kuyruklarını ayarlar. Kuyruk, sürücü iş parçacığı geri çağırması veya sürücü tarafından sağlanan çalışan iş parçacığı geri çağırması ve IRP'leri işleyen diğer sürücü yordamları tarafından paylaşılır.
Kendi kuyruk yapısını uygulayan bir sürücü, kuyruğa erişimin eşitlendiğinden ve iptal edilen IP'lerin kuyruktan kaldırıldığından emin olmalıdır. Bu görevi sürücü yazarları için daha basit hale getirmek amacıyla, iptale karşı güvenli IRP kuyrukları bir IRP kuyruğu uygularken kullanabileceğiniz standart bir çerçeve sunar. Daha fazla bilgi için bkz. Cancel-Safe IRP Kuyrukları . Bu, IRP kuyruğu uygulamak için tercih edilen yöntemdir.
Sürücüler, ayrıca tüm IRP kuyruğu eşitlemesini ve iptal mantığını açıkça uygulayabilir. Örneğin, bir sürücü kilitlenmiş bir kuyruk kullanabilir. Sürücünün dağıtım yordamları, IRP'leri kilitlenen kuyruğa ekler ve sürücü tarafından oluşturulan bir iş parçacığı veya sürücünün çalışan iş parçacığı geri çağırması ExInterlockedXxxList destek yordamlarını çağırarak bunları kaldırır.
Örneğin, sistem disket denetleyicisi sürücüsü birbirine bağlı bir kuyruk kullanır. Cihaz ayrılmış iş parçacığı, diğer cihaz sürücülerinin StartIo yordamları ve diğer cihaz sürücülerinin DpcForIsr yordamları tarafından yapılan IRP'lerin bazı işlemleriyle aynı IRP'lerin işlenmesini işler.
Sürücülerdeki StartIo Yordamları ile Dahili Kuyruklar
Kendi iç kuyruklarını yöneten bir sürücünün StartIo yordamı da olabilir, ancak gerekmez. En düşük düzey cihaz sürücülerinin ya bir StartIo yordamı vardır ya da kendi IRP'lerinin kuyruğunu yönetir, ancak her ikisini birden yapmazlar.
Bunun bir istisnası, StartIo yordamına sahip olan ve iç IP kuyruklarını yöneten SCSI bağlantı noktası sürücüsüdür. G/Ç yöneticisi, IRP'leri, SCSI HBA'sını temsil eden ve sürücü tarafından oluşturulan cihaz nesnesiyle ilişkili cihaz kuyruğunda bağlantı noktası sürücüsünün StartIo rutinine kuyruğa alır. SCSI bağlantı noktası sürücüsü ayrıca, makinedeki herhangi bir HBA tarafından yönetilen SCSI veri yolu üzerindeki her hedef cihaz için (SCSI mantıksal birimine karşılık gelen) IRP'ler için cihaz kuyruklarını ayarlar ve yönetir.
SCSI bağlantı noktası sürücüsü, SCSI veri yolundaki herhangi bir cihazın özellikle meşgul olduğu durumlarda, LU'ya özgü kuyruklarda tutulmak üzere SCSI sınıf sürücülerinden gönderilen IRP’leri ek cihaz kuyruklarını kullanarak saklar. Bu sürücünün ek, LU'ya özgü cihaz kuyrukları, SCSI bağlantı noktası sürücüsünün bir HBA aracılığıyla heterojen SCSI cihazları için işlemleri seri hale getirmesine olanak tanırken, her cihazı bu HBA'nın SCSI veri yollarında mümkün olduğunca meşgul tutar.