Simpul perangkat dan tumpukan perangkat

Di Windows, perangkat diwakili oleh simpul perangkat di pohon perangkat Plug and Play (PnP). Biasanya, ketika permintaan I/O dikirim ke perangkat, beberapa driver membantu menangani permintaan. Masing-masing driver ini dikaitkan dengan objek perangkat, dan objek perangkat diatur dalam tumpukan. Urutan objek perangkat bersama dengan driver terkait disebut tumpukan perangkat. Setiap simpul perangkat memiliki tumpukan perangkatnya sendiri.

Simpul perangkat dan pohon perangkat Plug and Play

Windows mengatur perangkat dalam struktur pohon yang disebut pohon perangkat Plug and Play, atau hanya pohon perangkat. Biasanya, simpul di pohon perangkat mewakili perangkat atau fungsi individual pada perangkat komposit. Namun, beberapa simpul mewakili komponen perangkat lunak yang tidak memiliki asosiasi dengan perangkat fisik.

Simpul di pohon perangkat disebut simpul perangkat. Simpul akar pohon perangkat disebut simpul perangkat akar. Menurut konvensi, simpul perangkat akar digambar di bagian bawah pohon perangkat, seperti yang ditunjukkan pada diagram berikut.

diagram pohon perangkat, memperlihatkan simpul perangkat.

Pohon perangkat menggambarkan hubungan induk/anak yang melekat di lingkungan PnP. Beberapa simpul di pohon perangkat mewakili bus yang memiliki perangkat anak yang terhubung dengannya. Misalnya, simpul BUS PCI mewakili bus PCI fisik pada motherboard. Selama startup, manajer PnP meminta pengemudi bus PCI untuk menghitung perangkat yang terhubung ke bus PCI. Perangkat tersebut diwakili oleh simpul anak dari simpul BUS PCI. Dalam diagram sebelumnya, simpul BUS PCI memiliki simpul anak untuk beberapa perangkat yang terhubung ke bus PCI, termasuk pengontrol host USB, pengontrol audio, dan port PCI Express.

Beberapa perangkat yang terhubung ke bus PCI adalah bus itu sendiri. Manajer PnP meminta masing-masing bus ini untuk menghitung perangkat yang terhubung ke dalamnya. Dalam diagram sebelumnya, kita dapat melihat bahwa pengontrol audio adalah bus yang memiliki perangkat audio yang terhubung ke dalamnya. Kita dapat melihat bahwa port PCI Express adalah bus yang memiliki adaptor tampilan yang terhubung ke dalamnya, dan adaptor layar adalah bus yang memiliki satu monitor yang terhubung ke dalamnya.

Apakah Anda menganggap node sebagai mewakili perangkat atau bus tergantung pada sudut pandang Anda. Misalnya, Anda dapat menganggap adaptor tampilan sebagai perangkat yang memainkan peran kunci dalam menyiapkan bingkai yang muncul di layar. Namun, Anda juga dapat menganggap adaptor tampilan sebagai bus yang mampu mendeteksi dan menghitung monitor yang terhubung.

Objek perangkat dan tumpukan perangkat

Objek perangkat adalah instans struktur DEVICE_OBJECT. Setiap simpul perangkat di pohon perangkat PnP memiliki daftar objek perangkat yang diurutkan, dan masing-masing objek perangkat ini dikaitkan dengan driver. Daftar objek perangkat yang diurutkan, bersama dengan driver terkait, disebut tumpukan perangkat untuk simpul perangkat.

Anda dapat memikirkan tumpukan perangkat dalam beberapa cara. Dalam arti yang paling formal, tumpukan perangkat adalah daftar pasangan (objek perangkat, driver) yang diurutkan. Namun, dalam konteks tertentu mungkin berguna untuk menganggap tumpukan perangkat sebagai daftar objek perangkat yang diurutkan. Dalam konteks lain, mungkin berguna untuk menganggap tumpukan perangkat sebagai daftar driver yang diurutkan.

Menurut konvensi, tumpukan perangkat memiliki atas dan bawah. Objek perangkat pertama yang akan dibuat di tumpukan perangkat berada di bagian bawah, dan objek perangkat terakhir yang akan dibuat dan dilampirkan ke tumpukan perangkat berada di bagian atas.

Dalam diagram berikut, simpul perangkat Gizmo Proseware memiliki tumpukan perangkat yang berisi tiga pasangan (objek perangkat, driver). Objek perangkat atas dikaitkan dengan AfterThought.sys driver, objek perangkat tengah dikaitkan dengan Proseware.sys driver, dan objek perangkat bawah dikaitkan dengan Pci.sys driver. Simpul BUS PCI di tengah diagram memiliki tumpukan perangkat yang berisi dua pasangan (objek perangkat, driver) --objek perangkat yang terkait dengan Pci.sys dan objek perangkat yang terkait dengan Acpi.sys.

diagram memperlihatkan objek perangkat yang dipesan dalam tumpukan perangkat di simpul perangkat gizmo dan pci proseware.

Bagaimana tumpukan perangkat dibangun?

Selama startup, manajer PnP meminta pengemudi untuk setiap bus untuk menghitung perangkat anak yang terhubung ke bus. Misalnya, manajer PnP meminta pengemudi bus PCI (Pci.sys) untuk menghitung perangkat yang terhubung ke bus PCI. Menanggapi permintaan ini, Pci.sys membuat objek perangkat untuk setiap perangkat yang terhubung ke bus PCI. Masing-masing objek perangkat ini disebut objek perangkat fisik (PDO). Tak lama setelah Pci.sys membuat kumpulan PDO, pohon perangkat terlihat seperti yang diperlihatkan dalam diagram berikut.

diagram simpul pci dan objek perangkat fisik untuk perangkat anak.

Manajer PnP mengaitkan simpul perangkat dengan setiap PDO yang baru dibuat dan melihat registri untuk menentukan driver mana yang perlu menjadi bagian dari tumpukan perangkat untuk simpul. Tumpukan perangkat harus memiliki satu (dan hanya satu) driver fungsi dan dapat secara opsional memiliki satu atau beberapa driver filter. Driver fungsi adalah driver utama untuk tumpukan perangkat dan bertanggung jawab untuk menangani permintaan baca, tulis, dan kontrol perangkat. Driver filter memainkan peran tambahan dalam memproses permintaan baca, tulis, dan kontrol perangkat. Saat setiap fungsi dan driver filter dimuat, ia membuat objek perangkat dan melampirkan dirinya ke tumpukan perangkat. Objek perangkat yang dibuat oleh driver fungsi disebut objek perangkat fungsi ( FDO), dan objek perangkat yang dibuat oleh driver filter disebut objek perangkat filter (Filter DO). Sekarang pohon perangkat terlihat seperti diagram ini.

diagram pohon perangkat yang menunjukkan filter, fungsi, dan objek perangkat fisik di simpul perangkat gizmo proseware.

Dalam diagram, perhatikan bahwa dalam satu simpul, driver filter berada di atas driver fungsi, dan di simpul lain, driver filter berada di bawah driver fungsi. Driver filter yang berada di atas driver fungsi dalam tumpukan perangkat disebut driver filter atas. Driver filter yang berada di bawah driver fungsi disebut driver filter yang lebih rendah.

PDO selalu merupakan objek perangkat bawah dalam tumpukan perangkat. Ini dihasilkan dari cara tumpukan perangkat dibangun. PDO dibuat terlebih dahulu, dan karena objek perangkat tambahan dilampirkan ke tumpukan, objek tersebut dilampirkan ke bagian atas tumpukan yang ada.

Catatan Ketika driver untuk perangkat diinstal, alat penginstal menggunakan informasi dalam file informasi (INF) untuk menentukan driver mana yang merupakan driver fungsi dan driver mana yang merupakan filter. Biasanya file INF disediakan baik oleh Microsoft atau oleh vendor perangkat keras. Setelah driver untuk perangkat diinstal, manajer PnP dapat menentukan fungsi dan memfilter driver untuk perangkat dengan melihat di registri.

Sopir bus

Dalam diagram sebelumnya, Anda dapat melihat bahwa driver Pci.sys memainkan dua peran. Pertama, Pci.sys dikaitkan dengan FDO di simpul perangkat BUS PCI. Bahkan, ia membuat FDO di simpul perangkat BUS PCI. Jadi Pci.sys adalah driver fungsi untuk bus PCI. Kedua, Pci.sys dikaitkan dengan PDO di setiap anak simpul Bus PCI. Ingat bahwa ia membuat PDO untuk perangkat anak. Driver yang membuat PDO untuk simpul perangkat disebut driver bus untuk simpul.

Jika titik referensi Anda adalah bus PCI, maka Pci.sys adalah driver fungsi. Tetapi jika poin referensi Anda adalah perangkat Proseware Gizmo, maka Pci.sys adalah sopir bus. Peran ganda ini khas di pohon perangkat PnP. Pengemudi yang berfungsi sebagai sopir fungsi untuk bus juga berfungsi sebagai sopir bus untuk perangkat anak bus.

Tumpukan perangkat mode pengguna

Sejauh ini kami telah membahas tumpukan perangkat mode kernel. Artinya, driver dalam tumpukan berjalan dalam mode kernel, dan objek perangkat dipetakan ke ruang sistem, yang merupakan ruang alamat yang hanya tersedia untuk kode yang berjalan dalam mode kernel. Untuk informasi tentang perbedaan antara mode kernel dan mode pengguna, lihat Mode pengguna dan mode kernel.

Dalam beberapa kasus, perangkat memiliki tumpukan perangkat mode pengguna selain tumpukan perangkat mode kernelnya. Driver mode pengguna sering didasarkan pada User-Mode Driver Framework (UMDF), yang merupakan salah satu model driver yang disediakan oleh Windows Driver Frameworks (WDF). Di UMDF, driver adalah DLL mode pengguna, dan objek perangkat adalah objek COM yang mengimplementasikan antarmuka IWDFDevice. Objek perangkat dalam tumpukan perangkat UMDF disebut objek perangkat WDF (WDF DO).

Diagram berikut menunjukkan simpul perangkat, tumpukan perangkat mode kernel, dan tumpukan perangkat mode pengguna untuk perangkat USB-FX-2. Driver dalam tumpukan mode pengguna dan mode kernel berpartisipasi dalam permintaan I/O yang diarahkan pada perangkat USB-FX-2.

diagram memperlihatkan tumpukan perangkat mode pengguna dan mode kernel.

Konsep untuk semua pengembang driver

Tumpukan driver