Microsoft tarafından üretilen ve satılan bir işletim sistemi satırı olan Windows NT'nin mimarisi, kullanıcı modu (user mode) ve çekirdek modu (kernel mode) olmak üzere iki ana bileşenden oluşan katmanlı bir tasarımdır. Tek işlemcili ve simetrik çok işlemcili (SMP) tabanlı bilgisayarlarla çalışmak üzere tasarlanmış, önleyici, yeniden gelen bir işletim sistemidir.[1] Giriş/çıkış (I / O veya G / Ç) isteklerini işlemek için, I / O istek paketlerini (IRP'ler) ve zaman uyumsuz G / Ç'yi kullanan paket odaklı G / Ç kullanırlar. Windows XP'den başlayarak, Microsoft Windows'un 64 bit sürümleri hazırlanmaya başladı; Bundan önce, bu işletim sistemleri yalnızca 32-bit sürümlerde mevcuttu.
Çekirdek modu, sistem belleğine ve harici aygıtlara sınırsız erişime sahipken, kullanıcı modundaki programlar ve alt sistemler erişebildikleri sistem kaynaklarına göre sınırlıdır. Windows NT çekirdeği karma çekirdek olarak bilinir. Mimari, çekirdek modunda bulunan basit bir çekirdek, donanım soyutlama katmanı (HAL), sürücüler ve çeşitli hizmetler (toplu olarak Yönetici olarak adlandırılır) içerir.[2]
Windows NT'deki kullanıcı modu, G / Ç yöneticisini kullanarak G / Ç isteklerini uygun çekirdek modu aygıt sürücülerine aktarabilen alt sistemlerden oluşur. Windows NT kullanıcı modu katmanı, birçok farklı işletim sistemi türü için yazılmış uygulamaları çalıştıran "Çevre alt sistemleri" ve çevre alt sistemleri adına sisteme özgü işlevleri çalıştıran "Bütünleşik alt sistem" 'ten oluşur.[3] Windows NT'de Çekirdek modu, bilgisayarın donanım ve sistem kaynaklarına tam erişime sahiptir. Çekirdek modu, kullanıcı modu hizmetlerini ve uygulamalarını, işletim sisteminin erişememesi gereken kritik alanlara erişmesini durdurur.
Yönetici arayüzleri, tüm kullanıcı modu alt sistemleriyle birlikte G / Ç, nesne yönetimi, güvenlik ve süreç yönetimi ile ilgilenir. Çekirdek, çok işlemcili senkronizasyon, iş parçacığı, kesme zamanlaması ve gönderme, tuzak işleme ve istisna gönderme sağlamak için Donanım Soyutlama Katmanı ve Yönetici arasında bulunur.[4] Çekirdek ayrıca, önyüklemede aygıt sürücülerinin başlatılmasından sorumludur. Çekirdek modu sürücüleri üç düzeyde bulunur: en üst düzey sürücüler, ara sürücüler ve düşük düzey sürücüler. Windows Driver Model (WDM) ara katmanda bulunur ve çoğunlukla Windows 98 ve Windows 2000 arasında ikili ve kaynak uyumlu olacak şekilde tasarlanmıştır. En alçak düzey sürücüler, eski bir Windows NT aygıt sürücüleridir, doğrudan bir aygıtı denetleyebilir veya bir "tak ve kullan" (PnP) donanım veri yolu olabilir.[5]
Kullanıcı modu, çeşitli sistem tanımlı süreçler ve DLL'lerden oluşur.
Kullanıcı modu uygulamaları ile işletim sistemi çekirdeği işlevleri arasındaki arabirime "çevre alt sistemi" adı verilir. Windows NT, bunların her biri farklı bir API seti uygulayan birden fazla olabilir.[6] Bu mekanizma, birçok farklı işletim sistemi türü için yazılmış uygulamaları desteklemek üzere tasarlanmıştır. Hiçbir çevre alt sistemi doğrudan donanıma erişemez; donanım işlevlerine erişim, çekirdek modu rutinlerini arayarak yapılır.
Dört ana ortam alt sistemi vardır: Win32 (Windows API) alt sistemi, bir OS/2 alt sistemi, Linux için Windows Alt Sistemi ve bir POSIX (Microsoft POSIX alt sistemi) alt sistemi.[7]
Güvenlik alt sistemi, güvenlik belirteçlerini ele alır, kaynak izinlerine dayalı olarak kullanıcı hesaplarına erişim izni ve giriş izni verir, oturum açma kimlik doğrulamasını başlatır ve hangi sistem kaynaklarının Windows NT tarafından denetlenmesi gerektiğini belirler. Ayrıca, Active Directory'ye bakar. İş istasyonu hizmeti, Windows dosya ve yazdırma paylaşımının istemci tarafı olan ağ yönlendiricisi uygular; bunları ağdaki uygun sunuculara "yönlendirme" yaparak yerel dosyalara ve yazıcılara olan isteklerini uygular.[10] Tersine, sunucu hizmeti, ağdaki diğer bilgisayarların, yerel sistem tarafından sunulan dosya paylaşımlarına ve paylaşılan yazıcılara erişmesine olanak tanır.
Windows NT çekirdek modu, bilgisayarın donanım ve sistem kaynaklarına tam erişime sahiptir ve kodu korumalı bir bellek alanında çalıştırır. Zamanlama, iplik önceliği, bellek yönetimi ve donanımla etkileşime erişimi kontrol eder. Çekirdek modu, kullanıcı modu hizmetlerini ve uygulamalarını, işletim sisteminin erişememesi gereken kritik alanlara erişmesini durdurur; kullanıcı modu süreçleri çekirdek modundan kendi adına bu işlemleri gerçekleştirmelerini istemelidir.
X86 mimarisi, (0 ile 3 arasında numaralandırılmış) dört farklı ayrıcalık düzeyini desteklerken yalnızca iki üst ayrıcalık düzeyi kullanılır. Usmode programları CPL 3 ile çalıştırılır ve çekirdek CPL 0 ile çalışır. Bu iki seviyeye sırasıyla "halka 3" ve "halka 0" denir. Bununla birlikte, doğrudan donanıma erişmeye çalışan G / Ç ayrıcalıkları içeren OS / 2 uygulamaları ile uyumluluk bozulmasına rağmen, yalnızca iki ayrıcalık düzeyini destekleyen RISC platformlarına kod taşınabilirliği sağlamak için böyle bir tasarım kararı yapıldı.[11]
Windows Yönetim Hizmetleri, alçak düzey çekirdek modu bölümünü oluşturur ve NTOSKRNL.EXE dosyasında bulunur.[12] I / O, nesne yönetimi, güvenlik ve süreç yönetimi ile ilgilenir. Bunlar arasında Önbellek Yöneticisi, Yapılandırma Yöneticisi, G / Ç Yöneticisi, Yerel Prosedür Çağrısı (LPC), Bellek Yöneticisi, Nesne Yöneticisi, İşlem Yapıları ve Güvenlik Referans Monitörü (SRM) olmak üzere birçok alt sistem bulunur. Birlikte gruplandırıldığında, bileşenler Yönetici hizmetleri olarak adlandırılabilir (dahili ad Ex).[13] Sistem hizmetleri (dahili adı Nt), yani sistem çağrıları da bu seviyede uygulanmaktadır, ancak daha iyi performans için doğrudan çekirdeği çağıran çok az sayı vardır.
Bu bağlamda "hizmet" terimi genel olarak çağrılabilir bir rutine, ya da çağrılabilir rutin setine atıfta bulunur. Bu, Unix benzeri işletim sistemlerinde daemon'a biraz benzeyen bir kullanıcı modu bileşenidir.
Nesne Yöneticisi - Nesne Yöneticisi (iç adı Ob), tüm diğer yürütme alt sistemlerinin, özellikle de sistem çağrılarının Windows NT kaynaklarına erişmesi için geçmesi gereken bir yürütme alt sistemi olup aslında kaynak yönetim altyapısı hizmeti yapmaktadır. Nesne yöneticisi, diğer çalıştırılabilir alt sistemlerde nesne kaynak yönetimi işlevselliğinin çoğaltılmasını azaltmak için kullanılır; böylelikle böceklere yol açabilir ve Windows NT'nin geliştirilmesini zorlaştırabilir.[14] Nesne yöneticisine, bu kaynak bir fiziksel kaynak (dosya sistemi veya çevre birimi gibi) veya mantıksal bir kaynak (dosya gibi) gibidir. Her nesne, nesne yöneticisinin bilmesi gereken bir yapıya veya nesne türüne sahiptir.
Nesne oluşturma ve ekleme olmak üzere iki aşamalı bir işlemdir. Oluşturma, boş bir nesnenin tahsis edilmesine ve ad alanındaki (isteğe bağlı) bir ad gibi nesne yöneticisinin gerektirdiği kaynakların ayrılmasına neden olur. Yaratılış başarılı olursa, yaratılıştan sorumlu alt sistem boş nesneyi doldurur. Son olarak, alt sistem başlatmayı başarılı olarak görürse, nesne yöneticisine, nesneyi (isteğe bağlı) adı veya tanıtıcı adı verilen bir tanımlama bilgisi yoluyla erişilebilir hale getirmesini söyler.[15] Bundan sonra, nesnenin ömrü, nesne yöneticisi tarafından işlenir ve nesne yöneticisi tarafından elden çıkarılacağı sinyalini verene kadar, nesneyi çalışma durumunda tutmak alt sistemin sorumluluğundadır.
Kulplar, bir çekirdek kaynağına opak bir değerle bir göndermeyi temsil eden tanımlayıcılardır. Benzer şekilde, bir nesnenin adıyla açılması güvenlik denetimlerine tabidir, ancak varolan, açık bir tanıtıcı vasıtasıyla hareket etmek, yalnızca nesne açıldığında veya oluşturulduğunda istenen erişim düzeyiyle sınırlıdır.[16] Nesne türleri, nesne prosedürlerini ve nesneye özgü verileri tanımlar. Bu şekilde nesne yöneticisi, Windows NT'nin nesne yönelimli programlama olmasını sağlar; nesne türleri nesneleri tanımlayan çok biçimli sınıflar olarak düşünülebilir. Bununla birlikte, çoğu alt sistem, G / Ç Yöneticisi'ndeki dikkate değer bir istisna ile, tüm nesne türü yordamları için varsayılan uygulamaya güvenir.
Oluşturulan bir nesnenin her örneği adını, nesne oluşturma işlevine geçirilen parametreleri, güvenlik niteliklerini ve nesne türüne işaret eden bir işaretçiyi depolar. Nesne ayrıca, nesne yöneticisine, sistemdeki kaç başka nesne bu nesneyi referans gösterdiğini, dolayısıyla nesnenin kendisine bir yakın talep gönderildiğinde yok edilebileceğini belirlemek için bir nesne kapatma yordamını ve bir başvuru sayımını içerir.[17] Her adlandırılmış nesne, hiyerarşik bir nesne ad alanında bulunur.
Önbellek Denetleyicisi - Normal dosya G / Ç'leri için ortak bir önbellek sağlamak için Bellek Yöneticisi, G / Ç Yöneticisi ve G / Ç sürücüleri ile yakın işbirliği yapar. Windows Önbellek Yöneticisi yerel ve uzak dosyalar arasında tutarlı bir işlem için dosya blokları (aygıt blokları yerine) üzerinde çalışır ve bellek eşlemeli dosyalarla belirli bir derecede tutarlılık sağlar, çünkü önbellek blokları bellek eşlemeli özel bir durumdur görünümler ve önbellek özel bir sayfa hatası özlüyor.
Yapılandırma Yöneticisi - Windows Kayıt uygular.
G / Ç Yöneticisi - Cihazların kullanıcı modu alt sistemleri ile iletişim kurmasına izin verir. Kullanıcı modu okuma ve yazma komutlarını, aygıt sürücülerine ilettiği IRP okuma veya yazma işlevine çevirir.[18] Dosya sistemi G / Ç isteklerini kabul eder, bunları cihaza özel çağrılara çevirir ve doğrudan girişi okur veya çıktı yazması için donanımla ilgilenen düşük seviye aygıt sürücülerini içerebilir. Ayrıca, okuma isteklerini önbelleğe alıp arka planda diske yazarak disk performansını artırmak için bir önbellek yöneticisi de içerir.[19]
Yerel Yordam Çağrısı (LPC) - Bağlantı semantiği ile işlemler arası iletişim portları sağlar. LPC bağlantı noktaları, kullanıcı modu alt sistemleri tarafından istemcileriyle, alt düzey kullanıcı modülü alt sistemleriyle iletişim kurmak için ve Microsoft RPC için yerel aktarım için temel olarak iletişim kurmak için kullanılır.[20]
Bellek Yöneticisi - Sanal belleği, bellek korumasını, fiziksel bellekteki ve dışındaki belleklerin ikincil belleğe sayfalamanı kontrol eder ve genel amaçlı bir fiziksel bellek ayırıcısı uygular. Ayrıca bir yürütülebilir dosyanın tek bir atom adımıyla eşlenmesine olanak tanıyan bir PE yürütücüsü ayrıştırıcısı da uygular.[21] Windows NT Server 4.0, Terminal Server Edition'dan başlayarak bellek yöneticisi, sözde oturum alanı, modu belleği, kullanıcı modu belleği gibi bağlama geçişine tabidir. Bu, çekirdek modu Win32 alt sisteminin ve GDI sürücülerinin birden çok örneğinin, ilk tasarımlarındaki eksikliklere rağmen yan yana çalışmasına izin verir. Her oturum alanı, topluca "oturum" olarak adlandırılan çeşitli işlemler tarafından paylaşılır.[22] Yeni bir nesne türü girmeden oturumlar arasında bir dereceye kadar izolasyon sağlamak için, süreçler ve oturumlar arasındaki ilişki, Security Reference Monitor tarafından bir öznitelik olarak ele alınır.
Oturumların nispeten basit ve ad hoc yapısı, ilk tasarımın bir parçası olmadığı gerçeğinden ve WinReturn denilen Windows NT için terminal sunucusu ürününün bir ön şartı olarak üçüncü bir taraf (Citrix Systems) tarafından ana hattın asgariye bozulmasıyla geliştirilmeliydi. Ancak, Windows Vista'dan başlayarak, oturumlar sonunda Windows mimarisinin uygun bir yönü oldu.[23] Artık Win32 aracılığıyla dolaylı olarak kullanıcı moduna sürünen bir bellek yöneticisi yapısı, çoğu Yürütme alt sistemini etkileyen yaygın bir soyutlamaya dönüştürüldü. Nitekim, Windows Vista'yı düzenli olarak kullanmak her zaman çoklu oturum ortamına neden olur.
Süreç Yapısı - Süreci ve iş parçacığı oluşturma ve sonlandırma işlemlerini gerçekleştirir ve iş kavramını uygular; işin bir bütün olarak sona erdirilebilen bir grup işlemi veya paylaşılan kısıtlamalara (toplam tahsis edilen maksimum bellek veya CPU zamanı) dahil edilebilir. İş nesneleri Windows 2000'de tanıtıldı.
PnP Yöneticisi - "Tak ve çalıştır" işlemlerini yapar ve önyükleme saatinde aygıt algılama ve kurulumunu destekler. Aynı zamanda bir cihazı (USB veya IEEE 1394 FireWire gibi) yeni bir aygıt kazandığında ve bunu desteklemek için bir aygıt sürücüsüne ihtiyaç duyulduğunda, aygıtları isteğe bağlı olarak durdurup başlatmaya da sorumluluğu vardır.[24] Toplu halde, kullanıcı modunda, Tak ve Çalıştır Hizmeti'nde uygulanır; bu, uygun sürücüleri yüklemenin, servislerin ve uygulamaların yeni cihazların gelmesini bildiren ve kullanıcıya GUI'nin görüntülenmesiyle ilgili karmaşık görevleri işler.
Güç Yöneticisi - Güç olaylarıyla (kapalı, bekleme, hazırda bekletme, vb.) anlaşma yapar ve etkilenen sürücüleri özel IRP'lerle (Güç IRP'leri) bilgilendirir.
Güvenlik Referans Monitörü (SRM) - Güvenlik entegre alt sisteminin güvenlik kurallarını uygulamak için birincil makamdır. Erişim kontrol kayıtlarından (ACE'ler) oluşan erişim kontrol listelerinin (ACL'ler) kullanılması yoluyla bir nesneye veya kaynağa erişilip erişilemeyeceğini belirler.[25] ACE'ler, bir Güvenlik Tanımlayıcı'yı (SID) ve ACE'nin bir kaynak grubuna, bir kullanıcı hesabı, grup hesabı veya oturum açma oturumu izini (reddetme, reddetme veya denetleme) için seçilen bir grup mütevelli verdiği işlemleri içerir.[26]
GDI - Grafik Aygıt Arabirimi çizgi ve eğrileri çizme, yazı tipleri oluşturma ve paletleri işleme gibi görevlerden sorumludur. Windows NT 3.x serisi sürümleri, GDI bileşenini kullanıcı modu İstemci / Sunucu Çalışma Zamanı Modülü alt sistemine yerleştirmişti, ancak bu grafik performansını artırmak için Windows NT 4.0 ile çekirdek moduna taşındı.[27]
Çekirdek, HAL ve Yönetici arasında bulunur ve çok işlemcili senkronizasyon, iş parçacığı, kesme zamanlama ve gönderme, tuzak işleme ve istisna gönderme sağlar; ayrıca önyükleme sırasında işletim sistemini çalıştırmak için gerekli olan aygıt sürücülerini başlatmaktan sorumludur. Yani, çekirdek geleneksel bir mikro çekirdeğin hemen hemen tüm görevlerini yerine getirir; Yönetici ve çekirdek arasındaki kesin ayrım orijinal mikrokernel tasarımının en belirgin kalıntısıdır ve tarihsel tasarım dokümantasyonu sürekli olarak çekirdeği "mikrokernel" olarak ifade eder.[28]
Çekirdek, işlem yöneticisi ile sıklıkla etkileşim kurar. Soyutlama seviyesi, çekirdeğin hiçbir zaman süreç yöneticisine çağrı yapmayacağı şekildedir, sadece tersi yönündedir.
Windows NT, donanım aygıtları ile etkileşim kurmak için çekirdek modu aygıt sürücüleri kullanır. Sürücülerin her biri, işletim sisteminin geri kalanına dışa aktaran iyi tanımlanmış sistem yordamları ve iç yordamlarına sahiptir. Tüm aygıtlar, kullanıcı modu tarafından G / Ç yöneticisinde bir dosya nesnesi olarak görülür; ancak G / Ç yöneticisine kendisi aygıtlar. Dosya, aygıt veya sürücü nesneleri olarak tanımlanan aygıt nesneleri olarak görülür.[29] Çekirdek modu sürücüleri üç düzeyde bulunur: en üst düzey sürücüler, ara sürücüler ve düşük düzey sürücüler. FAT ve NTFS için dosya sistemi sürücüleri gibi en üst seviye sürücüler, ara sürücüler kullanır. Ara sürücüler, isteğe bağlı olarak alt ve üst düzey filtre sürücüleri arasında olan işlev sürücülerinden veya bir aygıtın ana sürücüsünden oluşur.
Işlev sürücüsü daha sonra bir bus (veri yolu)sürücüsü, bir bus denetleyicisi, adaptörü veya köprüye hizmet eden bir sürücüye güvenir. Ara sürücüler, çalışmak için en düşük seviyedeki sürücülerden yararlanmaktadır. Windows Sürücü Modeli (WDM) ara katmanda bulunur. En düşük seviyeli sürücüler, bir aygıtı doğrudan denetleyen eski Windows NT aygıt sürücüleri veya bir PnP donanım yolu olabilir.[30] Bu alt seviye sürücüler doğrudan donanımları kontrol eder ve başka herhangi bir sürücüye güvenmiyorlar.
Windows NT donanım soyutlama katmanı veya HAL, bilgisayarın fiziksel donanımı ile işletim sistemi geri kalanı arasındaki bir katmandır. Donanımdaki farklılıkları gizlemek ve çekirdeğin çalışacağı tutarlı bir platform sağlamak için tasarlandı. HAL, G / Ç arabirimlerini, kesme denetleyicilerini ve birden çok işlemciyi denetleyen donanıma özel kodu içerir.[31]
Bununla birlikte, mimaride amaç ve belirlenmiş bir yere rağmen, HAL tamamen çekirdeğin altında oturan, çekirdeğin Yürütme'nin altında oturduğu bir kat değil: Bilinen tüm HAL uygulamaları, çekirdeğin veya hatta çekirdeğin bir miktarına bağlıdır.[32] Uygulamada, bu, çekirdek ve HAL değişkenlerinin, birlikte çalışmak üzere özel olarak yapılandırılan eşleme kümelerine geldiği anlamına gelir.[33]
Özellikle, donanım soyutlama talimat setinin soyutlanmasını içermez, bu genel olarak daha geniş kapsamlı taşınabilirlik kavramına tabidir. Talimat kümesi, gerektiğinde (x86 komut kümesindeki birçok düzeltmeyi ele almak veya eksik bir matematik işlemciyi taklit etmek gibi) özetlenmesi, çekirdek tarafından veya donanım sanallaştırması yoluyla gerçekleştirilir.[34]