Microkernel arhitectura este o alternativă la metoda clasică de construire a OS considerată mai sus. Spre deosebire de arhitectura tradițională, conform căreia sistemul de operare este un nucleu monolitic implementează funcțiile de bază de gestionare a resurselor hardware și aranjarea mediului pentru executarea de utilizator procesează arhitectura microkernel distribuie funcțiile sistemului de operare între microkernel și care fac parte din serviciile de sistem de operare, implementat ca procese la egal la egal cu aplicații personalizate.
Să luăm în considerare conceptul de arhitectură microkernel de construcție OS. Principala caracteristică a acestei abordări este că doar o mică parte a sistemului de operare, numită microkernel, rămâne în modul privilegiat. Microkernelul este protejat de alte părți ale sistemului de operare și de aplicațiile utilizatorilor. Setați o parte a funcțiilor Microkernel ca regulă corespunde stratul de bază al mecanismelor uzuale ale nucleului, în timp ce în microkernel include nu toate funcțiile de bază ale nucleului, dar numai managementul de proces, de a întrerupe de manipulare, de gestionare a memoriei virtuale, redirecționarea mesajelor, dispozitivele de control de intrare și de ieșire. Este aproape imposibil să implementați astfel de funcții OS în modul utilizator. Toate modulele de operare dependente de mașină sunt, de asemenea, incluse în microkernel.
Funcțiile de nivel înalt și modulele de kernel care nu sunt incluse în microkernel sunt proiectate sub formă de aplicații normale care funcționează în modul utilizator. În același timp, dezvoltatorul sistemului de operare nu se confruntă cu sarcina lipsită de ambiguitate de a decide care modul va funcționa în modul preferat și care dintre ele în modul de utilizare. De regulă, această decizie este puternic influențată de specificul aplicării acestui sistem de operare și de criteriile pe care trebuie să le îndeplinească. În general, mulți administratori de resurse, care fac parte integrantă din nucleul sistemului de operare cu o arhitectură clasică, rămân în afara microkernelului și funcționează în modul de utilizare. Figura prezintă principalele diferențe în construirea unui sistem de operare cu un nucleu monolitic (a se vedea figura 5a) și cu o arhitectură micro-nucleară (a se vedea figura 5b).
Fig. 5. Structura sistemelor de operare cu un nucleu monolitic și cu o arhitectură microkernel
managerii de resurse care funcționează în modul de utilizare sunt diferențe fundamentale de utilități tradiționale și programe de sistem de operare de prelucrare a sistemului de operare, deși arhitectura microkernel, toate aceste componente software sunt, de asemenea, concepute sub formă de aplicații. Utilitățile și programele de procesare sunt solicitate în principal de către utilizatori. O situație în care o singură aplicație necesită executarea altor aplicații care sunt extrem de rare, astfel încât sistemul de operare cu arhitectura clasica nu există nici un mecanism prin care o singură aplicație ar cauza funcțiile celuilalt. O situație fundamental diferită apare dacă o parte a sistemului de operare este realizată sub forma unei cereri regulate. Prin definiție, scopul principal al acestei cereri este de a cererilor de servicii de la alte aplicații, cum ar fi crearea de proces, de alocare de memorie, verificați drepturile de acces la resurse, etc. Ca o consecință, managerii de resurse plasați în modul utilizator sunt servere OS. adică module ale căror scop principal este de a satisface cererile pentru aplicații locale și alte module de OS. Este evident că punerea în aplicare a arhitecturii microkernel trebuie să se asigure că metoda de sistemul de operare convenabil și efectivă a procedurii de apel de la un alt proces. Sprijinul pentru un astfel de mecanism este una dintre sarcinile principale atribuite sistemului de operare microkernel.
Să luăm în considerare un exemplu tipic de organizare a mecanismului de accesare a aplicațiilor la funcțiile OS, concepute sub formă de servere (a se vedea Figura 6).
Figura 6. Implementarea unui apel sistem într-un sistem de operare cu o arhitectură microkernel
Să luăm în considerare modul în care se aplică în practică conceptul de arhitectură micronucleară a construcțiilor OS.
Una dintre primele a introdus conceptul firmei microkernel următor, care a folosit calculatoarele sistemul lor Mach ultimul drum lung de dezvoltare în Universitatea Carnegie Mellon cu sprijinul Departamentului Apararii al SUA. Teoretic, nucleul său mic privilegiat, înconjurat de un serviciu de user-mode, a fost de a oferi o flexibilitate fără precedent și modularitate. Dar, în practică, acest avantaj este oarecum diminuata din cauza sistemului de operare UNIX BSD 4.3 servere monolitice care rulează în spațiul utilizator de pe un microkernel Mach. Cu toate acestea, având în vedere Mach Pe lângă posibilitatea de a oferi servicii de mesagerie și instrumente orientate spre obiect, care sunt aduse consumatorilor sub forma unei interfețe de utilizator elegant, cu un suport grafic pentru configurarea rețelei, administrarea sistemului și de dezvoltare de software.
Mai mult arhitectura modernă microkernel au fost propuse Novell, USL, Software Foundation Deschideți, IBM, Apple, și altele. Unul dintre principalii concurenți din partea NT micronucleilor este un microkernel Mach 3.0, care este și IBM, au venit de la FSD și să conducă la tipul comercial. Principalul rival al lui Mach este microcosmosul Chorus 3.0 de la Chorus Systems, selectat de USL ca bază a propunerilor sale. Același microkernel va fi folosit în SpringOS de Sun, un succesor orientat pe obiecte în sistemul Solaris.
Astăzi a devenit clar că există o tendință de mișcare din sistemele monolitice spre folosirea nucleilor mici. Această abordare a fost deja utilizată de QNX Software și Unisys, care au furnizat cu succes sistemul de operare microkernel de mai mulți ani. QNX QNX Software QNX servește piața în timp real, iar sistemul de operare CTOS al Unisys este popular în domeniul bancar.
Acum, să analizăm conceptele de bază ale construirii celor două sisteme cele mai populare: Windows NT și UNIX, bazate pe microkernelul Mach.
În multe sisteme asemănătoare UNIX, microkernelul Mach este ales ca bază pentru construire. Dezvoltarea prototipului unei astfel de structuri a început în 1975 la Universitatea Carnegie Mellon. Pe baza microkernel-ului Mach, UNIX și alte sisteme de operare au fost emulate. Kernel-ul Mach oferă gestionarea memoriei, procesele de comunicare și funcțiile I / O. Ideea construirii kernelului Mach este de a furniza mecanismele necesare funcționării sistemului, însă strategia de utilizare a acestor mecanisme este implementată la nivelul proceselor utilizatorilor. Kernelul gestionează cinci abstracții majore:
Comunicarea interprocesală în Mach se bazează pe trecerea mesajului. Pentru a primi mesajul, procesul de utilizator întreabă kernelul pentru a crea o cutie poștală sigură numită port. Portul este stocat în interiorul kernel-ului și este capabil să mențină coada unei liste ordonate de mesaje. Cozile nu au nici o lungime fixă, dar, în scopul de a controla fluxul de fiecare port valoare de prag setat separat n mesaje, astfel încât fiecare proces încearcă să trimită un alt mesaj la lungimea cozii de n, este suspendată pentru a da posibilitatea de a purja portul.
Fiecare proces poate permite unui alt proces să trimită (sau să primească) mesaje către unul dintre propriile porturi. Această capabilitate este implementată ca o capabilitate care include nu numai un pointer către port, ci și o listă de drepturi pe care un alt proces le are asupra acestui port (de exemplu, dreptul de a executa operația de trimitere-expediere). Toate comunicațiile din Mach utilizează acest mecanism. Scopul principal stabilit de dezvoltatorii facilităților de comunicare ale kernel-ului Mach a fost să sprijine diferite stiluri de comunicare în combinație cu fiabilitate și flexibilitate. Instrumentele de comunicare ale kernelului Mach suportă mesageria asincronă, un mecanism de implementare a computerelor distribuite, a fluxurilor și a altor metode.
Deși metoda descrisă de rulare a programelor UNIX pare confuză, numeroase studii au arătat că funcționează mai bine decât implementările tradiționale ale kernel-ului monolitic. În viitor, lucrul la Mach se va concentra pe împărțirea serverului UNIX în mai multe servere cu funcții mai specifice.
Windows NT a fost proiectat de la început de către dezvoltatorii Microsoft, luând în considerare toate cerințele pentru sistemul modern de operare. La dezvoltarea structurii sale, conceptul de microkernel a fost folosit într-o mare măsură. În conformitate cu această idee, sistemul de operare este împărțit în mai multe subsisteme, fiecare realizând un set separat de funcții de serviciu, de exemplu, servicii de memorie, pentru crearea de procese sau pentru procese de planificare. Fiecare server funcționează în modul utilizator, efectuând un ciclu de verificare a solicitării clientului pentru una dintre funcțiile sale de serviciu. Un client, care poate fi fie o componentă OS sau un program de aplicație, solicită serviciul prin trimiterea unui mesaj către server. Sistemul de operare microkernel, care funcționează în modul privilegiat, livrează mesajul către serverul necesar, apoi serverul efectuează operația, apoi nucleul returnează rezultatul clientului utilizând un alt mesaj.
Din punct de vedere structural, Windows NT poate fi reprezentat ca două componente: o parte a sistemului de operare care rulează în modul utilizator și o parte a sistemului de operare în modul kernel.
Partea din modul kernel este denumită Executiv Windows NT - partea executivă. Acesta include un număr de componente care gestionează memoria virtuală, obiectele (resursele), I / O, sistemul de fișiere (inclusiv driverele de rețea), interacțiunea procesului și, parțial, sistemul de securitate. Aceste componente se contactează reciproc folosind legături intermodulare. Fiecare componentă îi cheamă pe alții printr-un set de proceduri interne specificate cu atenție.
A doua parte, care funcționează în modul utilizator, constă în servere - subsistemele protejate de Windows NT. Serverele Windows NT sunt numite protejate, deoarece fiecare dintre ele este executată într-un proces separat, memoria căreia este separată de alte procese de sistemul de management executiv NT. Deoarece subsistemele nu pot partaja automat memoria, ele comunică între ele prin trimiterea de mesaje. Mesajele sunt transmise atât între client și server, cât și între cele două servere. Toate mesajele trec prin partea executivă a Windows NT.
Sprijinul pentru subsistemele securizate este asigurat de partea executivă - executivul Windows NT, care funcționează în spațiul unui microkernel și nu este niciodată resetat pe disc. Componentele sale componente sunt:
1) un manager de obiecte care creează, elimină și gestionează obiecte executive NT - tipuri de date abstracte folosite pentru a reprezenta resursele sistemului;
2) un monitor de securitate care stabilește reguli de protecție pe computerul local. Protejează resursele OS, realizează protecția și înregistrarea obiectelor executabile;
3) gestionarea proceselor, crearea și terminarea, suspendarea și reînnoirea proceselor, precum și stocarea informațiilor despre acestea;
4) manager de memorie virtuală;
5) subsistemul intrare-ieșire, care include următoarele componente:
- un manager I / O care oferă instrumente I / O independente de dispozitive;
- sisteme de fișiere - drivere NT care execută cereri I / O orientate pe fișiere și le traduc în apeluri către dispozitive convenționale;
- redirector de rețea și server de rețea; - drivere de sistem de fișiere care trimit cereri de I / O la mașini de rețea și primesc cereri de la acestea;
- drivere de dispozitiv NT - drivere de nivel scăzut care controlează direct dispozitivul;
- Un manager de cache care implementează cache-ul pentru discuri.
Partea de execuție, la rândul său, se bazează pe serviciile de nivel inferior al microkernel NT. Funcția microkernel include:
- tratarea întreruperilor și situațiilor de excepție;
- Sincronizarea procesoarelor pentru sistemele multiprocesor;
- Recuperarea sistemului după o eroare.
Microkernelul funcționează într-un mod privilegiat și nu este șters niciodată din memorie. Acesta poate fi accesat numai printr-o întrerupere. Microkernelul este situat deasupra nivelului Abstraction Hardware (HAL), care concentrează majoritatea procedurilor dependente de mașină într-un singur loc. HAL este localizat între executivul NT și hardware și conține detalii precum controlerele de întrerupere, interfețele I / O și mecanismele de interacțiune între procesoare. Această soluție vă permite să transferați cu ușurință Windows NT de pe o platformă la alta înlocuind doar stratul HAL.
Când creați un dezvoltatorii de NT cu ghid sarcini spori productivitatea și oportunități de networking, precum și cerința de a sprijini un anumit set de medii de aplicații. Acest obiectiv a fost realizat printr-o separare atentă a funcțiilor dintre modulele microkernel și modulele rămase. De exemplu, transmiterea de date către sistemul de fișiere și rețeaua este mai rapid în microkernel spațiu, astfel încât în cadrul microkernel NT să aloce un tampon pentru scară mică (16-32 KB) citire și scriere operații, care sunt tipice pentru aplicații client-server și aplicații distribuite. Plasarea acestor funcții de I / O în interiorul microkernel-ului poate și își strică academicitatea, dar corespunde obiectivului creării NT.
Subsistemele protejate de Windows NT funcționează în modul utilizator și Windows NT este creat la data încărcării. Imediat după creare, ele încep o buclă infinită a execuției lor, răspunzând la mesajele care le vin de la procesele de aplicare și alte subsisteme. Printre subsistemele protejate, puteți selecta o subclasă, numită subsistemele mediului. Subsistemele de mediu implementează interfețele de aplicații ale sistemului de operare (API). Alte tipuri de subsisteme, denumite subsisteme integrate, îndeplinesc funcțiile necesare pentru sistemul de operare. De exemplu, cea mai mare parte a sistemului de securitate Windows NT este implementat ca subsistem integral, serverele de rețea sunt, de asemenea, implementate ca subsisteme integrale.
Cel mai important subsistem al mediului este Win32 - un subsistem care permite accesul aplicațiilor la API-ul Windows pe 32 de biți. În plus, acest sistem oferă o interfață grafică de utilizator și gestionează I / O de date de utilizator. Sunt acceptate și subsistemele POSIX, OS / 2, Windows pe 16 biți și MS-DOS.
Fiecare subsistem protejat funcționează în modul utilizator, invocând serviciul de sistem executiv NT pentru a efectua acțiuni privilegiate în modul kernel. Serverele de rețea pot rula atât în modul utilizator, cât și în modul kernel, în funcție de modul în care sunt proiectate.
Subsistemele comunică între ele prin transmiterea de mesaje. Atunci când, de exemplu, o aplicație de utilizator solicită o procedură API, subsistemul de mediu care furnizează această procedură primește mesajul și începe să lucreze la acesta, fie prin accesarea microkernel-ului, fie prin trimiterea unui mesaj către un alt subsistem. După finalizarea procedurii, subsistemul de mediu trimite un mesaj către aplicația care conține valoarea returnată. Trimiterea mesajelor și a altor activități ale subsistemelor protejate este invizibilă pentru utilizator.
Mijlocul principal de legare toate subsistemele de Windows NT într-un tot unitar, este mecanismul de apel de procedură locale (apel procedură locală, LPC). LPC este o versiune optimizată a mijloacelor mai generale - RPC (Remote Procedure Call, RPC), care este utilizat pentru clienții de comunicare și servere localizate pe diferite mașini de pe rețea.
LPC acceptă mai multe moduri de transfer de date între clienți și servere: unul este folosit de obicei pentru trimiterea mesajelor scurte, celălalt pentru mesaje lungi, iar cel de-al treilea este optimizat special pentru utilizarea de către subsistemul Win32. Fiecare subsistem stabilește un port-link, prin intermediul căruia alte procese pot comunica cu acesta.
Windows NT utilizează subsisteme protejate pentru a:
- Furnizați mai multe interfețe de programare (API), dacă este posibil fără a complica codul de bază (executiv NT);
- să izolați sistemul de operare de bază de modificări sau extensii la API-urile acceptate;
- Combinați o parte din datele globale solicitate de toate API-urile și, în același timp, separați datele utilizate de fiecare API individual de datele celorlalte API-uri;
- Protejați mediul fiecărui API din aplicații și mediul altor API-uri și protejați sistemul de operare de bază din medii diferite;
- permiterea extinderii sistemului de operare în viitor prin API-uri noi.
Astfel, implementarea unor părți ale sistemului de operare sub formă de servere care rulează în modul utilizator este o parte esențială a proiectului Windows NT, care are un impact profund asupra funcționării întregului sistem.
Microkernelul NT servește, în principal, ca instrument de suport pentru miezul portabil al sistemului de operare, un set de medii de utilizare. Concentrația programelor dependente de mașină din interiorul microkernelului face transferul NT la diferite procesoare relativ ușor. Dar, în timp ce unele microkernel (Mach și Chorus) este de asteptat sa livreze un produs software separat de Windows NT kernel-ul sistemului de operare este puțin probabil să fie dezvoltată pentru uz individual. Acesta este unul dintre motivele pentru care unii experți nu consideră că Windows NT este un sistem de operare microkernel adevărat în sensul în care Mach și Chorus sunt acelea. Aceste aceleași critici, de asemenea, rețineți că NT nu exclude, așa cum ar trebui să fie, tot serviciul suspendat din spațiul nucleu, și că, în driverele de dispozitiv NT la un Interact minim cu microkernel, preferând să lucreze direct cu care stau la baza nivelul de abstractizare hardware de mai jos HAL.