Aracılığıyla paylaş


Windows çekirdek modunda işlem ve iş parçacığı yöneticisi

Sistem tarafından sağlanan Windows çekirdek modu işlemi ve iş parçacığı yöneticisi, işlemlerin ve iş parçacıklarının Windows işletim sisteminde nasıl yürütülür denetler. Bu yöneticiyi anlamak, iş parçacığı oluşturması, işlem oluşturmayı izlemesi veya paylaşılan kaynaklara erişimi eşitlemesi gereken çekirdek modu sürücüsü geliştiricileri için önemlidir.

ObCallback sürücü örneği, çekirdek modu sürücüsünde işlem ve iş parçacığı bildirim yordamlarının nasıl kullanılacağını gösterir.

İşlemlere ve iş parçacıklarına genel bakış

İşlem, şu anda Windows'ta çalışan ve benzersiz bir işlem kimliği (PID) ile tanımlanan bir yazılım programıdır. Her işlemde, bir veya daha fazla iş parçacığı programın kodunu çalıştıran gerçek yürütme birimlerini temsil eder. Her iş parçacığının, işlemi içinde eşsiz bir iş parçacığı kimliği (TID) bulunmaktadır.

İş parçacıkları, işlemci süresini paylaşarak çoklu görev oluşturmayı etkinleştirir. Tek işlemcili bir makinede birden çok iş parçacığı ayrılabilir, ancak aynı anda yalnızca bir iş parçacığı yürütülür. İşlemci, iş parçacıkları arasında hızla geçiş yapar ve eşzamanlı yürütme yanılsaması oluşturur. Çok işlemcili sistemlerde, iş parçacıkları farklı işlemcilerde aynı anda çalıştırıldığında gerçek paralel yürütme gerçekleşir.

Windows çekirdek modu işlemi ve iş parçacığı yöneticisi, bir işlemdeki tüm iş parçacıklarının yürütülmesini işler. Bir veya daha fazla işlemciniz olsun, sürecinizin tüm iş parçacıklarının hangi sırayla işlendiğinden bağımsız olarak sürücünüzün düzgün çalışmasını sağlamak için sürücü programlamasında büyük özen gösterilmelidir.

Farklı işlemlerden gelen iş parçacıkları aynı anda aynı kaynağı kullanmayı denerse, sorunlar oluşabilir. Windows bu sorunu önlemek için çeşitli teknikler sağlar. Farklı işlemlerdeki iş parçacıklarının aynı kaynağa dokunmamasını sağlama tekniğine eşitleme adı verilir. Eşitleme hakkında daha fazla bilgi için bkz. Eşitleme Teknikleri.

İşlem ve iş parçacığı yöneticisine doğrudan arabirim sağlayan rutinler genellikle "Ps" öneki ile başlar; örneğin, PsCreateSystemThread. Çekirdek DDI'lerinin listesi için bkz. Windows çekirdek.

Bu kılavuz kümesi, callback rutinleri için geçerlidir.

Şu en iyi yöntemleri kullanın:

  • Rutinleri kısa ve basit tutun.
  • İşlemi, iş parçacığını veya görüntüyü doğrulamak için kullanıcı modu hizmetine çağrı yapmayın.
  • Kayıt defteri aramaları yapmayın.
  • Bloklama ve/veya İşlemler Arası İletişim (IPC) fonksiyon çağrıları yapmayın.
  • Diğer iş parçacıklarıyla senkronize etmeyin çünkü bu, yeniden giriş kilitlenmelerine yol açabilir.
  • Sistem İşçi Konuları kullanarak, özellikle aşağıdakilerle ilgili işleri sıraya koyun:
    • Başka bir süreci çağıran yavaş API'ler veya API'ler.
    • Çekirdek hizmetlerde iş parçacıklarının kesintiye uğramasına neden olabilecek herhangi bir engelleme davranışı.
  • Sistem Çalışanı İş Parçacıkları kullanıyorsanız, çalışmanın tamamlanmasını beklemeyin. Bunu yapmak, asenkron olarak tamamlanacak işi kuyruğa alma amacını boşa çıkarır.
  • Çekirdek modu yığın kullanımı için en iyi yöntemleri göz önünde bulundurun. Örnekler için bkz. Sürücüm çekirdek modu yığınının tükenmesini nasıl engelleyebilirim? ve Temel Sürücü Kavramları ve İpuçları.

Alt Sistem İşlemleri

Windows 10'dan başlayarak, Linux için Windows Alt Sistemi (WSL), kullanıcının diğer Windows uygulamalarıyla birlikte Windows üzerinde yerel Linux ELF64 ikili dosyalarını çalıştırmasını sağlar. WSL mimarisi, ikili dosyaları çalıştırmak için gereken kullanıcı modu ve çekirdek modu bileşenleri hakkında bilgi için Linux için Windows Alt Sistemi blogundaki gönderilere bakın.

Bileşenlerden biri, /bin/bash gibi değiştirilmemiş kullanıcı modu Linux ikili dosyasını barındıran bir alt sistem işlemidir. Alt sistem işlemleri, İşlem Ortamı Bloğu (PEB) ve İş Parçacığı Ortam Bloğu (TEB) gibi Win32 işlemleriyle ilişkili veri yapıları içermez. Bir alt sistem işlemi için, sistem çağrıları ve kullanıcı modu özel durumları eşleştirilmiş bir sürücüye gönderilir.

Alt sistem işlemlerini desteklemek için işlem ve iş parçacığı yöneticisi yordamlarında yapılan değişiklikler şunlardır:

  • WSL türü, SUBSYSTEM_INFORMATION_TYPE numaralandırmasında SubsystemInformationTypeWSL değeriyle gösterilir. Sürücüler, temel alınan alt sistemi belirlemek için NtQueryInformationProcess ve NtQueryInformationThread çağırabilir. Bu çağrılar WSL için SubsystemInformationTypeWSL döndürür.

  • Diğer çekirdek modu sürücüleri, PsSetCreateProcessNotifyRoutineEx2 çağrısı aracılığıyla geri çağırma yordamlarını kaydederek alt sistem işlemi oluşturma/silme hakkında bildirim alabilir. Sürücüler, iş parçacığı oluşturma/silme hakkında bildirim almak için PsSetCreateThreadNotifyRoutineExçağrısı yapabilir ve bildirim türü olarak psCreateThreadNotifySubsystems belirtebilir.

  • PS_CREATE_NOTIFY_INFO yapısı, Win32 dışında bir alt sistemi gösteren bir IsSubsystemProcess üyesi içerecek şekilde genişletilmiştir. FileObject, ImageFileNamegibi diğer üyeler, CommandLine alt sistem işlemi hakkında ek bilgi gösterir. Bu üyelerin davranışı hakkında bilgi için bkz. SUBSYSTEM_INFORMATION_TYPE.