Kumpulan Khusus
Fitur Kumpulan Khusus mengonfigurasi Windows untuk meminta alokasi memori dari kumpulan memori yang dipesan saat memori dialokasikan dengan tag kumpulan tertentu atau berada dalam rentang ukuran yang ditentukan.
Singkatan |
Spp |
Nilai heksadesimal |
(Tidak Ada) |
Nama Simbolis |
(Tidak Ada) |
Tujuan |
Entri registri di seluruh sistem (Windows Vista dan yang lebih baru) Entri registri di seluruh sistem, bendera kernel |
Memilih Tag Kumpulan
Saat meminta kumpulan khusus untuk tag kumpulan tertentu, pastikan driver Anda atau program mode kernel lainnya menggunakan tag kumpulan yang unik.
Selain itu, saat membuat tag kumpulan (seperti dengan menggunakan ExAllocatePoolWithTag), pertimbangkan untuk memasukkan karakter tag dalam urutan terbalik. Misalnya, jika tag adalah Fred, pertimbangkan untuk memasukkannya sebagai derF (0x64657246). Tag kumpulan disimpan di registri dan ditampilkan di debugger dan alat lain dalam urutan terbalik (lower endian). Jika Anda memasukkannya dalam urutan terbalik, mereka ditampilkan dalam urutan maju (0x46726564)
Jika Anda menduga bahwa driver Anda mengkonsumsi semua kumpulan khusus, pertimbangkan untuk menggunakan beberapa tag kumpulan dalam kode Anda. Anda kemudian dapat menguji driver Anda beberapa kali, menetapkan kumpulan khusus ke satu tag kumpulan di setiap pengujian.
Selain itu, pilih tag kumpulan dengan nilai heksadesimal yang lebih besar dari ukuran halaman sistem. Untuk kode mode kernel, jika Anda memasukkan tag kumpulan yang memiliki nilai kurang dari PAGE_SIZE, Gflags meminta kumpulan khusus untuk semua alokasi yang ukurannya berada dalam rentang yang sesuai dan meminta kumpulan khusus untuk alokasi dengan tag kumpulan yang setara. Misalnya, jika Anda memilih ukuran 30, kumpulan khusus akan digunakan untuk semua alokasi berukuran antara 17 dan 32 byte, dan untuk alokasi dengan tag kumpulan 0x0030.
Memilih Ukuran Alokasi
Gunakan panduan berikut untuk memilih ukuran alokasi untuk fitur Kumpulan Khusus.
Pada komputer dengan prosesor x86, PAGE_SIZE 0x1000 dan rentang ukuran alokasi panjangnya 8 byte. Untuk mengonfigurasi fitur Kumpulan Khusus untuk semua alokasi dengan ukuran dalam rentang ini, masukkan angka yang sama dengan maksimum rentang ini ditambah 8. (Angka ini selalu kelipatan 8.) Tabel berikut ini mengilustrasikan nilai-nilai ini:
Rentang ukuran | Masukkan nomor ini |
---|---|
1 hingga 8 byte |
10 (desimal 16) |
9 hingga 16 byte |
18 (desimal 24) |
17 hingga 24 byte |
20 (desimal 32) |
... |
... |
0xFE9 ke byte 0xFF0 |
FF8 (desimal 4088) |
Pada komputer dengan prosesor AMD x86-64, PAGE_SIZE 0x1000 dan panjang rentang ukuran alokasi adalah 16 byte. Untuk mengonfigurasi fitur Kumpulan Khusus untuk semua alokasi dengan ukuran dalam rentang ini, masukkan angka yang sama dengan maksimum rentang ini ditambah 16. (Angka ini selalu kelipatan 16.) Tabel berikut ini mengilustrasikan nilai-nilai ini:
Rentang ukuran | Masukkan nomor ini |
---|---|
1 hingga 16 byte |
20 (desimal 32) |
17 hingga 32 byte |
30 (desimal 48) |
33 hingga 48 byte |
40 (desimal 64) |
... |
... |
0xFD1 ke byte 0xFE0 |
FF0 (desimal 4080) |
Di komputer dengan prosesor apa pun, Anda dapat menggunakan tanda bintang ( * ) atau 0x2A (desimal 42) untuk mengonfigurasi fitur Kumpulan Khusus untuk semua alokasi memori pada sistem.
Komentar
Untuk informasi tentang mengonfigurasi fitur Kumpulan Khusus di Kotak Dialog Bendera Global, lihat Mengonfigurasi Kumpulan Khusus. Untuk informasi tentang mengonfigurasi fitur Kumpulan Khusus di baris perintah, lihat Perintah GFlags. Misalnya, lihat Contoh 14: Mengonfigurasi Kumpulan Khusus.
Fitur Kumpulan Khusus Gflags mengarahkan Windows untuk meminta alokasi memori dari kumpulan memori yang dipesan ketika memori dialokasikan dengan tag kumpulan tertentu atau berada dalam rentang ukuran tertentu. Untuk meminta kumpulan khusus untuk semua alokasi oleh pengemudi tertentu, gunakan Driver Verifier. Untuk informasi selengkapnya, lihat topik "Kumpulan Khusus" di bagian "Driver Verifier" di Windows Driver Kit (WDK).
Fitur kumpulan khusus Gflags dan Driver Verifier membantu Anda mendeteksi dan mengidentifikasi sumber kesalahan dalam penggunaan kumpulan kernel, seperti menulis di luar ruang memori yang dialokasikan, atau mengacu pada memori yang telah dibebaskan.
Tidak semua permintaan kumpulan khusus terpenuhi. Setiap alokasi dari kumpulan khusus menggunakan satu halaman memori fisik yang tidak dapat di-halaman dan dua halaman ruang alamat virtual. Jika kumpulan khusus habis, memori dialokasikan dari kumpulan standar sampai kumpulan khusus tersedia lagi. Ketika permintaan kumpulan khusus diisi dari kumpulan standar, fungsi yang meminta mengembalikan status keberhasilan. Ini tidak mengembalikan kesalahan, karena alokasi telah berhasil, meskipun tidak diisi dari kumpulan khusus.
Ukuran kumpulan khusus meningkat dengan jumlah memori fisik pada sistem; idealnya ini harus setidaknya 1 Gigabyte (GB). Pada mesin x86, karena ruang virtual (selain fisik) dikonsumsi, jangan gunakan opsi boot /3GB saat menggunakan kumpulan khusus. Ada baiknya juga untuk meningkatkan jumlah minimum/maksimum pagefile dengan faktor dua atau tiga.
Anda juga dapat mengonfigurasi fitur Kumpulan Khusus untuk menyelaraskan alokasi memori untuk mendeteksi referensi ke memori sebelum alokasi ("underrun") atau referensi ke memori di luar alokasi ("overrun"). Fitur ini hanya tersedia dalam kotak dialog Bendera Global pada semua versi Windows. Untuk detailnya, lihat Mendeteksi Overruns dan Underruns.
Pada Windows Vista dan versi Windows yang lebih baru, Anda dapat mengonfigurasi fitur Kumpulan Khusus sebagai pengaturan registri yang memerlukan boot ulang, tetapi tetap efektif sampai Anda mengubahnya, atau sebagai pengaturan bendera kernel yang tidak memerlukan boot ulang, tetapi hanya efektif sampai Anda memulai ulang atau mematikan Windows. Di versi Windows sebelumnya, Kumpulan Khusus hanya tersedia sebagai pengaturan registri.
Pada Windows Vista dan versi Windows yang lebih baru, Anda dapat mengonfigurasi fitur Kumpulan Khusus baik dengan menggunakan kotak dialog Bendera Global atau di baris perintah. Di versi Windows sebelumnya, fitur ini hanya tersedia dalam kotak dialog Bendera Global.