# Architettura Windows NT

L'architettura Windows NT è una famiglia dei sistemi operativi prodotti da Microsoft. Usano quest'architettura Windows NT 3.5x, 2000, XP, Server 2003, Vista, Server 2008, 7, Server 2008 R2, 8, Server 2012, 8.1, Server 2012 R2, Phone 8, Phone 8.1, 10, 10 Mobile, Server 2016, Server 2019, Server 2022 e 11.
Sono tutti sistemi operativi a multitasking con prelazione, progettati per lavorare su macchine Intel x86 sia a singolo sia a multiprocessore (SMP).
A partire da XP, Microsoft ha cominciato a sviluppare il supporto nei suoi sistemi operativi, prima il suo sistema operativo era basato su un modello a 32-bit. L'architettura della linea di sistemi operativi NT è altamente modulare e si struttura in due strati principali: user mode e kernel mode. I programmi ed i sottosistemi in user mode sono limitati in termini di risorse di sistema alle quali possono accedere, mentre ciò che gira in kernel mode gode di un accesso alla memoria centrale ed ai device esterni senza restrizioni. Il kernel dei sistemi operativi di questa linea è conosciuto come kernel ibrido - tuttavia non è essenzialmente un kernel monolitico in qualche modo strutturato come un microkernel. L'architettura comprende un kernel ibrido, un Livello di astrazione dell'Hardware (HAL), driver che vivono in kernel mode.
Lo user mode nella linea Windows NT è realizzato tramite un sottosistema capace di passare le richieste I/O agli appropriati driver software in kernel mode usando un manager di I/O. Lo user mode di Windows 2000 è fatto di due sottosistemi: Il sottosistema d'Ambiente, che può eseguire applicazioni scritte per diversi sistemi operativi, ed il sottosistema integrato, che svolge le funzioni specifiche del sistema operativo. Il kernel mode in Windows 2000 ha accesso completo alle risorse hardware di sistema, inoltre ha la funzione di interdire ai servizi in user mode l'accesso ad aree critiche del sistema operativo alle quali non dovrebbero avere accesso.
Le interfacce Executive, assieme a tutti i sottosistemi user mode, gestiscono I/O, oggetti, processi e sicurezza. Il kernel si pone tra l'HAL e l'Executive per la sincronizzazione multiprocessore, i thread ed interrupt scheduling e dispatching, trap handling ed exception dispatching. Il kernel ha inoltre la funzione di inizializzare i driver dei dispositivi all'avvio. I driver possono girare in Kernel mode in tre livelli: alto (highest level drivers), medio (intermediate drivers) e basso (low level drivers). Il Modello di driver Windows (Windows Driver Model, WDM) è di livello medio e fu ideato per essere compatibile sia a livello binario che di codice sorgente tra Windows 98 e 2000. I driver di basso livello possono essere o driver supportati in retrocompatibilità che controllano un dispositivo in modo diretto, o un bus hardware Plug and Play.

## Modalità utente

La modalità utente è costituita dal sottosistema che trasmette le richieste I/O i driver appropriati della modalità kernel tramite l'I/O manager (che risiede nella kernel mode). Due sottosistemi costituiscono lo strato di per la modalità utente di Windows 2000: il Sottosistema d'ambient e il Sottosistema integral.
Il sottosistema d'ambiente è progettato per eseguire applicazioni scritte per sistemi operativi diversi. Nessuno dei sottosistemi d'ambiente può accedere direttamente all'hardware, e deve richiedere l'accesso alle risorse attraverso il Manager della memoria virtuale che esegue in kernel mode. Inoltre le applicazioni girano a livello di priorità basso rispetto ai processi in modalità kernel. Attualmente ci sono tre principali sottosistemi d'ambiente: il sottosistema Win32, un sottosistema OS/2 e un sottosistema per POSIX.
Il sottosistema d'ambiente Win32 può eseguire applicazioni Windows a 32-bit. Contiene la console come supportato dalla finestra di testo, lo spegnimento e una gestione di hard-error per tutti gli altri sottosistemi d'ambiente. Supporta anche la Virtual DOS Machine (VDMs), che permette alle applicazioni MS-DOS e Windows 3.x a 16-bit di essere eseguite su Windows. C'è una specifica MS-DOS VDM che gira nel proprio spazio di indirizzamento a che emula un Intel 80486 che esegue MS-DOS 5. I programmi Win16, comunque, girano in una VDM Win16. Ogni programma, di default, gira nello stesso processo, usando lo stesso spazio di indirizzamento, e la VDM Win16 concede ad ogni programma il suo proprio thread da eseguire. Tuttavia, Windows 2000 permette agli utenti di eseguire un programma Win16 in una separata Win16 VDM, che consente al programma di essere soggetto al multitasking poiché Windows 2000 effettuerà il pre-empiting dell'intero processo VDM, che include una sola applicazione in esecuzione. Il sottosistema d'ambiente OS/2 supporta applicazioni character-based a 16-bit OS/2 ed emula OS/2 1.x, ma non il 2.x o applicazioni per OS/2 successivi. Il sottosistema d'ambiente POSIX supporta applicazioni che sono scritte esclusivamente con lo standard POSIX.1 o ad esso collegati ISO/IEC
Il sottosistema integrale fornisce specifiche funzioni del sistema operativo al posto del sottosistema d'ambiente environment subsystem. Consta di un "sottosistema di sicurezza", un "workstation di servizio" e di un "server di servizio". Il sottosistema di sicurezza utilizza i token (di sicurezza), fornisce o nega l'accesso agli account utenti basandosi su permessi per le risorse, gestisce le richieste di logon e avvia l'autenticazione del logon e determina quali risorse di sistema devono essere esaminate da Windows 2000. Si occupa anche dell'Active Directory. La workstation di servizio è un API verso il redirezionamento della rete e fornisce al computer l'accesso alla rete. Il server di servizio è un API che consente al computer di fornire servizi di rete.

## Kernel mode

Il kernel mode di Windows 2000 ha pieno accesso alle risorse hardware e software del computer ed esegue del codice in un'area protetta della memoria. Controlla gli accessi allo scheduling, la priorità dei thread, la gestione della memoria e l'interazione con l'hardware. Il kernel mode impedisce ai servizi e alle applicazioni in user mode di accedere in aree critiche del sistema operativo alle quali non dovrebbero avere accesso mentre i processi in user mode chiedono al kernel mode di effettuare tali operazioni in sua vece.
Il Kernel mode consta di "executive services", il quale è esso stesso composto da diversi moduli che hanno compiti specifici, "kernel driver", un "kernel" e un "Hardware Abstraction Layer" o HAL.

### Executive

L'Executive si interfaccia con tutti i sottosistemi in user mode. Si lega con I/O, gestione degli oggetti, della sicurezza e dei processi. Comprende diversi componenti, compresi l'"I/O Manager", il "Security Reference Monitor", l'"Object Manager", l'"IPC Manager", il "Virtual Memory Manager" (VMM), un "PnP Manager" e un "Power Manager" come un "Window Manager", che funziona insieme col Windows "Graphics Device Interface" (GDI). Ognuno di questi componenti esporta un routine di supporto lato-kernel che consente agli altri componenti di comunicare l'uno con l'altro. Tutti insieme, componenti possono essere chiamati "servizi esecutivi". Nessun componente esecutivo ha accesso alle routine interne di un altro componente esecutivo.
L'object manager è un sottosistema esecutivo speciale attraverso il quale devono passare tutti i sottosistemi esecutivi per avere l'accesso a Windows 2000 rendendolo essenzialmente un'infrastruttura di servizio per la gestione delle risorse. L'object manager è utilizzato per ridurre la duplicazione della funzionalità di gestione delle risorse oggetto in altri sottosistemi esecutivi, che potrebbero potenzialmente generare dei bug e rendere più difficile o sviluppo di Windows 2000. Nell'object manager, ogni risorsa è un oggetto, sia che quella risorsa sia una risorsa fisica (come un file system o una periferica) o una risorsa logica (come un file). Ogni oggetto ha una struttura o "object type" che l'object manager deve conoscere. Quando un altro sottosistema esecutivo richiede la creazione di un oggetto, loro mandano quella richiesta all'object manager che crea un oggetto struttura vuoto il quale viene riempito con il sottosistema esecutivo richiedente. Gli Object types definiscono le procedure oggetto e qualsiasi dato sull'oggetto. In questo modo, l'object manager rende il Windows 2000 un sistema operativo object oriented siccome gli object types possono essere considerati classi che definiscono gli oggetti.
Ogni istanza di un oggetto che viene creata, immagazzina il proprio nome, i parametri passati alla funzioni di creazione dell'oggetto, gli attributi di sicurezza e un puntatore al tipo di oggetto. L'oggetto contiene inoltre una procedura di chiusura oggetto e un conteggio delle referenze che indica all'Object Manager quanti altri oggetti nel sistema fanno riferimento a quel particolare oggetto in modo da determinare se l'oggetto può venir distrutto quando gli viene inviata una richiesta di chiusura.. Ogni oggetto prende posto in uno spazio dei nomi degli oggetti gerarchico.
Ulteriori sottosistemi esecutivi sono i seguenti:
* I/O Manager: permette ai device di comunicare con sottosistemi user-mode. Traduce comandi 'read' e 'write' user-mode in 'read' o 'write' IRPs che passa ai driver di device.
Accetta richieste I/O del file system e le traduce in chiamate di device specifiche, e può incorporare driver di basso livello dei device stessi che manipolano direttamente hardware per leggere o scrivere input. Include anche un cache manager per migliorare le performance su disco mettendo in cache richieste di lettura al disco in background.
* Security Reference Monitor (SRM): l'autorità primaria per rinforzare le regole di sicurezza delle regole del sottosistema integrale di sicurezza.. Determina se un oggetto o una risorsa possono essere utilizzate, mediante l'uso delle 'access control lists' (ACLs), le quali sono esse stesse composte di 'access control entries' (ACEs). Le ACEs contengono un 'security identifier' (SID) ed una lista di operazioni alle quali quelle danno un selezionato gruppo di credenziali - un account utente, un account gruppo, una 'logon session' — un permesso (consenti, nega, or chiedi) ad una data risorsa.
* IPC Manager abbreviazione di Interprocess Communication Manager, questo gestisce la comunicazione tra client (il sottosistema dell'ambiente) e server (componenti dell'Executive). Può usare due risorse: la Local Procedure Call (LPC) (client e server su d' un unico computer) e la Remote Procedure Call (RPC) (dove client e server sono situati su computer differenti). Microsoft ha avuto significativi problemi di sicurezza con la seconda.
* Virtual Memory Manager: gestisce la memoria virtuale, permettendo a Windows 2000 di usare l'hard disk come 'storage device' secondario (sebbene strettamente parlando sia secondario). Controlla ogni aspetto del 'paging' su disco.
* Process Manager: processa la creazione ed il termine di applicazioni e threads
* PnP Manager: processa il Plug and Play e supporta il riconoscimento e l'installazione dell'hardware al boot. Ha anche la responsabilità di interrompere ed avviare a richiesta periferiche - talvolta ciò avviene quando un bus ottiene una nuova periferica e necessità di avere un driver caricato per supportarla. Sia FireWire sia USB sono 'hot-swappable', ovvero supportano l'aggiunta o la rimozione di hardware sistema in esecuzione, e richiedono i servizi del PnP Manager per caricare, interrompere, avviare periferiche. Il PnP Manager s' interfaccia con l'HAL, il resto dell'esecutivo così come coi driver di periferica.
* Power Manager: regola gli eventi di accensione-spegnimento e simili e genera i relativi IRPs. Coordina quelli quando parecchie periferiche inviano una richiesta di essere spente determinando il modo migliore di farlo.
* Il sistema di display è stato spostato da 'user mode' a 'kernel mode' come un driver di periferica contenuto nel file Win32k.sys. Ci sono due componenti in quest'ultimo - il Window Manager ed il GDI:
** Window Manager: responsabile di disegnare finestre e menu. Controlla il modo in cui l'output è rappresentato a schermo e process gli eventi di input (dalla tastiera o dal mouse ad esempio), poi passa messaggi alle applicazioni che necessitano di ricevere tali input.
** GDI: Graphics Device Interface è responsabile di compiti come disegnare funzioni matematiche, permettere il rendering di font, gestire il cromatismo. Windows 2000 ha introdotto nativo nel GDI l'alpha blending.

### Driver kernel e kernel-mode

Il kernel si trova tra l'HAL e l'Executive e fornisce la sincronizzazione nei sistemi a multiprocessore, la gestione dei thread e delle interruzioni, oltre che la gestione delle eccezioni. Il kernel è anche responsabile dell'inizializzazione dei driver delle periferiche al boot che sono necessari per avere il sistema operativo pienamente funzionante. Il kernel spesso si interfaccia con il Process Manager.
L'architettura Windows NT usa i driver in kernel-mode per pilotare direttamente l'hardware. Ogni driver possiede delle routine interne e di sistema fungono da interfacce per il resto del sistema operativo. Tutti i dispositivi sono visti dai processi eseguiti in user-mode come file oggetto nell'I/O manager, però dall'I/O manager stesso i dispositivi sono visti come oggetti dispositivo i quali possono essere altri file, dispositivi o driver oggetto. I driver kernel-mode esistono in tre livelli: livello alto (high level), livello intermedio (intermediate level) e livello basso (low level). I driver di livello più alto, come i driver per i file system FAT e NTFS, fatto affidamento sui driver di livello intermedio. I driver di livello intermedio consistono in function driver, detti anche i driver principali per un dispositivo, che sono opzionalmente messi tra filter driver dei livelli alto e basso. I function driver si appoggiano su un bus driver o su un driver che pilota un controller bus, un adapter o un bridge che opzionalmente possono comunicare tramite un bus filter driver che si trova tra se stesso ed il function driver. I driver intermedi si appoggiano sui driver di livello più basso. A livello intermedio esiste il Windows Driver Model (WDM). I driver di livello basso possono essere sia driver legacy Windows NT che controllano un dispositivo direttamente o possono essere un bus hardware PnP. Questi driver di livello basso controllano direttamente l'hardware e non si appoggiano ad altri driver.

### Hardware abstraction layer

Hardware Abstraction Layer di Windows 2000 (HAL), è lo strato interposto tra l'hardware vero e proprio ed il resto del sistema operativo. È stato progettato per nascondere le differenze hardware e per fornire una piattaforma unificata per ogni applicazione in esecuzione. L'HAL comprende specifiche hardware per il controllo delle interfacce di I/O, PIC e processori multipli
Windows 2000 e 98 erano stati progettati per il supporto ai 64-bit DEC Alpha. Dopo che Compaq annunciò la fine del supporto per il processore, Microsoft interruppe la versione di test per AXP al pubblico, interrotta con la beta 3. Lo sviluppo continuò per la poco diffusa architettura Intel Itanium IA-64. Attualmente l'HAL supporta unicamente hardware compatibile con l'architettura Intel x86.