2. Ce este un kernel?
Kernelul este o componentă software
deasupra hardware-ului.
Roluri:
- este un intermediar între utilizatori și
mașina fizică;
- oferă un enviroment în care utilizatorii
pot rula eficent și sigur programe;
...
Page 2
3. Short Unix history
Prima versiune de Unix a apărut în 1969,
scrisă în assembler de Ken Thomson.
La început, kernelurile erau simple.
A început să crească după ce au apărut
tot mai multe dispozitive hardware, dar
mai ales după tranzicția de la 16 la 32 de
biți
Page 3
4. Generalități kernel
- are, de obicei, câteva milioane de linii
cod;
-rulează în kernel space, adică un nivel de
privilegiu deasupra aplicațiilor obișnuite
(care rulează în user space)
-înglobează multe servicii de sistem:
process/user management, networking
Page 4
5. Probleme
-codul din kernel space poate face absolut
orice cu sistemul; un bug/exploit aici
poate fi fatal => TCB (Trusted Code Base)
e destul de mare;
consecință: Doqu s-a răspândit pe
Windows, folosindu-se de un bug în
parsarea de fonturi [1]
-greu de întreținut (după o modificare,
trebuie recompilat tot kernelul);
-greu de extins;
Page 5
6. O soluție: microkerneluri
Filosifia: lăsăm în kernel doar ce e absolut
necesar, restul mutăm în kernel;
Rămân: interprocess communication, CPU
Scheduling, basic memory management
Page 6
7. Alte proprietăți
-foarte mici, comparativ cu kernelurile
monolitice: 10000 linii de cod vs.
milioane;
-componentele scoase din kernel sunt
implementate ca servicii în user-space;
aceste servicii comunică prin transmitere
de mesaje;
-astfel se împrumută puțin din OOP:
sistemul devine împărțit în componente,
ce comunică între ele pentru a îndeplini
un task;
Page 7
8. Avantaje
-securitatea: dacă serviciul de networking
are un buffer overflow, exploatarea sa e
mai puțin periculoasă în user-space decât
în kernel-space;
-availability: poate exista un
“reincarnation server” care să dea ping la
celelalte; care nu răspund sunt restartate
Page 8
9. Dezavantaje
-lipsa de performanță, cauzată de
1) nevoia de a copia des date din user-
space în kernel-space;
2) schimbări dese de context;
- sunt multe componente care se așteaptă
una pe cealaltă, riscul de a avea deadlock
e mare;
Page 9
10. Soluții
Linus Torvalds, într-un debate cu Andrew
Tanenbaum [12] “The real issue, and it's
really fundamental, is the issue of sharing
address spaces.”
De aici, 2 soluții:
- creșterea microkernelui
- micșorarea acestuia
Page 10
11. Generația 1
- prima generație a urmat prima cale;
-microkernelul a devenit hibrid, câteodată
mai mari ca dimensiuni decât unul
obișnuit;
-ex.: Windows NT
Page 11
12. Generația a 2-a
-a urmat a 2-a cale: microkernelul a fost
micșorat și mai mult;
-kernelul e atât de mic, încât încape în L1
cache;
-operațiile sunt foarte optimizate;
-memory management nu mai e în user-
space, ci se oferă mecanisme de gestiune
(ex.: L4 are 3 primitive, map, grant,
flush)
-exemple: L4, QNX (Quick Unix), seL4
-problemele de performanță au fost
rezolvate;
Page 12
13. Microkernel și VM
-microkernelurile sunt împărțite în
module independente;
-următorul pas logic era apariția VM-urile
-ca și microkernelurile, resursele HW ale
unei mașini se împart în mai multe
contexte de execuție;
Page 13
14. Microkernel și VM
(cont)
Prin definiție,
- un microkernel este un sistem minimal
peste care se pot construi alte sisteme;
- o mașină virtuală este un sistem ce
permite rularea unor alte sisteme reale
deasupra;
Rezultă că orice microkernel poate fi o
mașină virtuală. Unii cercetătoti afirmă că
“un microkernel e soluția corectă de a
implementa o mașină virtuală”.
În prezent, granița dintre microkerneluri
și mașini virtuale se micșorează.
Page 14
15. Microkernel și VM
(cont)
Cerințe ale sistemelor de operare
embedded:
- eficență
- securitate;
- small code base;
O soluție bună [2]:
Page 15
16. Avantaje
-securitatea, dată de:
1) dimensiunea mică a microkernelului;
2) mașinile virtuale sunt independente,
nu comunică între ele;
-eficența, atât a sistemului propriu-zis,
cât și datorate microkernelului mic ca
dimensiune;
-ușor extensibil, folosești doar ce-ai
nevoie.
Page 16
17. Concluzii
-microkernelurile au apărut datorită
complexității kernelurilor monolitice;
-dacă prima generație avea probleme de
performanță, cea de-a doua a rezolvat
aceste probleme;
-granița dintre microkerneluri și virtual
machine monitors este din ce în ce mai
mică;
-oferă mecanisme, și nu servicii
-în ziua de azi sunt relevante în
dispozitivele embedded, construind
mașini virtuale deasupra unui
microkernel.
Page 17