Bagikan melalui


Menggunakan Tumpukan Kernel

Ukuran tumpukan mode kernel dibatasi hingga sekitar tiga halaman. Oleh karena itu, saat meneruskan data ke rutinitas internal, driver tidak dapat meneruskan data dalam jumlah besar pada tumpukan kernel.

Untuk menghindari kehabisan ruang tumpukan mode kernel, gunakan panduan desain berikut:

  • Hindari melakukan panggilan berlapis dari satu rutinitas driver internal ke driver internal lainnya, jika setiap rutin meneruskan data pada tumpukan kernel.

  • Pastikan Anda membatasi jumlah panggilan rekursif yang dapat terjadi, jika Anda merancang driver yang memiliki rutinitas rekursif.

Dengan kata lain, struktur pohon panggilan pengemudi harus relatif datar. Anda dapat memanggil rutinitas IoGetStackLimits dan IoGetRemainingStackSize untuk menentukan ruang tumpukan kernel yang tersedia, atau KeExpandKernelStackAndCallout untuk memperluasnya. Perhatikan bahwa ukuran tumpukan mode kernel dapat bervariasi di antara platform perangkat keras yang berbeda dan versi sistem operasi yang berbeda.

Kehabisan ruang tumpukan kernel menyebabkan kesalahan sistem yang fatal. Oleh karena itu, lebih baik bagi driver untuk mengalokasikan memori ruang sistem daripada kehabisan ruang tumpukan kernel. Namun, kumpulan yang tidak disebarkan juga merupakan sumber daya sistem terbatas.

Umumnya, tumpukan mode kernel berada dalam memori, namun terkadang dapat di-paged out jika utas memasuki status tunggu yang menentukan mode pengguna. Lihat KeSetKernelStackSwapEnable untuk informasi tentang cara menonaktifkan halaman tumpukan kernel untuk utas saat ini untuk sementara waktu. Untuk alasan performa, tidak disarankan untuk menonaktifkan penomoran tumpukan kernel secara global, tetapi jika Anda ingin melakukannya selama sesi penelusuran kesalahan, lihat Menonaktifkan penomoran tumpukan kernel

Karena tumpukan kernel mungkin di-page out, harap berhati-hati tentang meneruskan buffer berbasis tumpukan (yaitu variabel lokal) ke DMA atau rutinitas apa pun yang berjalan pada DISPATCH_LEVEL atau di atasnya.