Voi incerca sa fac o prezentare sumara a arhitecturii sistemului de operare Windows, apoi a serviciilor si ceea ce aduce nou Windows Vista si 2008 legat de acestea.
Nucleul (kernelul) sistemului de operare Windows (NT, 2k, 2k3, 2k8) este incadrat la categoria de nucleu hibrid, aceasta insemnand ca este un compromis intre un nucleu monolitic si un microkernel. La un kernel monolitic toate componentele sistemului de operare (managerul de memorie, managerul de procese, serviciile de retea, serviciile de sisteme de fisiere, etc.) ruleaza in zona supervizor (ring 0), folosesc acelasi spatiu de memorie si au acces nerestrictionat la hardware. In arhitectura microkernel sunt pastrate doar un set minimal de componente OS in zona kernelului, cum ar fi managerul de memorie, IPC (mecanismul de comunicare intre procese), restul fiind mutate in zona utilizator (user mode, ring 3). Arhitectura microkernel pare a avea o multime de avantaje, printre care: o mai usoara intretinere si depanare (debugging) datorita faptului ca are un numar mult mai mic de linii de cod fata de un kernel monolitic, o mai usoara implementare de noi componente OS, o mai mare securitate a componentelor OS, o mai mare stabilitate datorata faptului ca un bug in una dintre componente nu va afecta kernelul. Are insa un mare dezavantaj, un consum mai mare de resurse, insemnand mai multa memorie si mai multe cicluri de procesor, datorita deselor schimbari de context (context switch). In acest moment arhitectura celor mai raspandite sisteme de operare (Windows, Linux, Unix) se bazeaza pe modelul de kernel monolitic cu unele modificari. Modificarile au dus la o noua arhitectura (inca dezbatuta) numita kernel hibrid; acesta pastreaza in continuare majoritatea componentelor sistemului de operare in zona kernel si in acelasi spatiu de memorie, dar arhitectura este asemanatoare modelului microkernel.
Din punctul de vedere al unui utilizator, un serviciu este un proces incarcat de sistemul de operare in user mode, independent daca utilizatorul este logat sau nu. Serviciile sunt incarcate si controlate de catre Services Control Manager (Services.exe). Acestea pot porni folosind contul System sau alte conturi configurate special.
Principalele schimbari aduse de Vista si Windows 2008 in ceea ce priveste serviciile sunt doua: incarcarea intarziata (delayed) a anumitor servicii la secventa de initializare a sistemului de operare si securizarea suplimentara (hardening) a serviciilor.
Dar inainte de a ajunge la servicii, care sunt in user mode, sa vedem toate secventele de initializare ale sistemului de operare.
Pe scurt, secventa de incarcare a sistemului este urmatoarea: se incarca BIOS-ul, apoi MBR (Master Boot Record) al discului de boot (care poate fi hard disk sau un device extern – floppy, usb stick, etc.), apoi sectorul de boot, acesta la randul sau incarca Windows Boot Manager (Bootmgr) care va accesa Boot Configuration Data pentru a repera sistemul de operare. La acest punct Windows Boot Manager va prezenta un ecran in care selectati varianta dorita de sistem de operare (in cazul in care sunt mai multe instante instalate) dupa care va porni Winload (winload.exe), cel care va incarca sistemul de operare. Winload va incarca prima data ramura din registry System, dupa care urmeaza kernelul (ntoskrnl.exe), apoi hardware abstraction layer (hal.dll) si toate driverele necesare incarcarii sistemului de operare.
Initializarea nucleului sistemului de operare este in mare aceeasi, de la Windows NT incoace:
- HAL (hardware abstraction layer) initializeaza controller-ul de intreruperi;
- Initializarea serviciilor “executive” (Cache Manager, Configuration Manager, I/O Manager, Local Procedure Call (LPC), Memory Manager, Object Manager, Process Structure and Security Reference Monitor);
HAL activeaza intreruperile;
- Se reinitializeaza Object Manager;
- Initializarea microkernelului;
- Se reinitializeaza Security Reference Monitor;
- Se reinitializeaza Memory Manager;
- Se reinitializeaza I/O Manager;
- Initializarea driverelor incarcate anterior de Winload.
Kernelul verifica semnaturile digitale ale fisierelor din care incarca “device drivers” folosind rutinele din “ci.dll” (code integrity).
In sfarsit, kernelul initializeza primul process din zona utilizator, Session Manager Subsystem (SMSS).
In partea a doua voi prezenta secventa de initializare din user mode (ring 3) a sistemului de operare.
Nota: Referitor la arhitectura sistemului de operare am preferat sa folosesc termenul componente si nu servicii, desi cel din urma era mai potrivit, pentru a nu se face confuzie intre serviciile unui sistem de operare si serviciile Windows.