Aracılığıyla paylaş


Çekirdek Yığınını Kullanma

Çekirdek modu yığınının boyutu yaklaşık üç sayfayla sınırlıdır. Bu nedenle, iç yordamlara veri geçirirken sürücüler çekirdek yığınında büyük miktarda veri geçiremez.

Çekirdek modu yığın alanının dolmasını önlemek için aşağıdaki tasarım yönergelerini kullanın:

  • Eğer her bir alt yordam verileri çekirdek yığını üzerinden aktarıyorsa, bir iç sürücü alt yordamından diğerine derin iç içe geçmiş çağrılar yapmaktan kaçının.

  • Özyinelemeli yordamı olan bir sürücü tasarlarsanız, oluşabilecek özyinelemeli çağrı sayısını sınırladığınızdan emin olun.

Başka bir deyişle, bir sürücünün çağrı ağacı yapısı nispeten düz olmalıdır. Kullanılabilir çekirdek yığını alanını belirlemek için IoGetStackLimits ve IoGetRemainingStackSize yordamlarını veya genişletmek için KeExpandKernelStackAndCallout'u çağırabilirsiniz. Çekirdek modu yığınının boyutunun farklı donanım platformları ve işletim sisteminin farklı sürümleri arasında farklılık gösterebileceğini unutmayın.

Çekirdek yığını alanının yetersizliği önemli bir sistem hatasına neden olur. Bu nedenle, bir sürücünün çekirdek yığını alanını tüketmek yerine sistem alanı belleği ayırması daha iyidir. Ancak, sayfalanmamış havuz da sınırlı bir sistem kaynağıdır.

Genellikle, çekirdek modu yığını bellekte bulunur, ancak iş parçacığı kullanıcı modunu belirten bir bekleme durumuna girerse zaman zaman sayfalanabilir. Geçerli iş parçacığı için çekirdek yığını sayfalama işlemini geçici olarak nasıl devre dışı bırakabileceğiniz hakkında bilgi almak için KeSetKernelStackSwapEnable bölümüne bakın. Performans nedeniyle, çekirdek yığını disk belleğini genel olarak devre dışı bırakmanız önerilmez, ancak hata ayıklama oturumu sırasında bunu yapmak istiyorsanız bkz. Çekirdek yığınlarının disk belleğini devre dışı bırakma

Çekirdek yığını disk belleğine alınabileceğinden, lütfen yığın tabanlı arabellekleri (yerel değişkenler gibi) DMA'ya veya DISPATCH_LEVEL veya üzerinde çalışan herhangi bir yordamı geçirme konusunda dikkatli olun.