Pe aproape orice diagarama care descrie arhitectura IIS apar cele doua notiuni din titlu. Spre axemplu: aici, aici sau aici. Fiindca a trecut ceva vreme de cand am terminat scoala, am decis sa-mi clarific, din nou, aceste notiuni.
Atunci cand vorbim despre kernel mode
si user mode
trebuie sa stabilim mai intai contextul. Aceasta terminologie apare atat la nivel de hardware (CPU) cat si la nivel de software (SO, aplicatii), in stransa legatura una cu cealalta.
1. User/Kernel mode - la nivel de CPU
In principal procesoarele (ma refer aici la Intel) folosesc 2 moduri de operare:
Kernel mode (Ring 0)
- numit si protected mode, supervizor mode sau priviledged mode
- ofera access full la toate resursele (set de instructiuni, porturi, zone de momorie etc)
- este modul de care beneficiaza SO Windows si driverele care necesita acces direct la resurse (ex: drv. video acceseaza direct memoria video)
- o eroare aparuta la nivel de kernel blocheaza intregul PC
User mode (Ring 3)
- numit si real mode
- Ring 1 si 2 sunt in general nefolosite
- ofera un acces limitat la resurse. Spre exemplu, majoritatea proceselor si aplicatiilor instalate pe Windows implica comutarea CPU-ului in
user mode
, primind astfel acces doar la o anumita parte din memorie. Aceasta memorie se mai numeste si memorie virtuala pt. ca procesul este "pacalit" sa creada ca i s-a pus la dispozitie intreaga memorie reala. Mai mult, nici adresele pe care le foloseste aplicatia nu sunt de cele reale ci sunt decalate cu un "offset" fata de mem. fizica. - neavand zone comune de memorie, orice eroare aparuta la nivelul unui proces nu afecteaza celelalte procese
Alte observatii:
- comutarea CPU-ului dintr-un mod in altul se realizeaza prin intermediul unor intreruperi.
- operatia de comutare implica un anumit "cost" (necesita o salvare a contextului a.i., la revenire, CPU-ul sa poata continua operatiile din locul in care a ramas)
2. User/Kernel mode - la nivel de SO (Windows) / aplicatii
Kernel mode
- partea cea mai importanta din SO Windows (HAL-ul, kernel-ul, majoritatea driverelor etc) opereaza in
kernel mode
. Exceptie fac procesele care se instaleaza odata cu Windows-ul.
User mode (Ring 3)
- un cod care ruleaza in
user mode
nu poate apela direct resursele hardware sau memoria. Daca totusi vrea sa o faca, trebuie sa apeleze la apeluri sistem (system API) care ruleaza inkernel mode
. - exceptand procesul numit "System", toate celelalte procese lansate de catre Windows ruleaza in
user mode
. - majoritate aplicatiile instalate de utilizator opereaza tot in
user mode
. Exceptie fac, printre altele:- driver-ul video
- modulul HTTP.sys din IIS (pt. a asigura o mai buna performanta):
Sursele imaginilor si alte referinte:
- http://www.codinghorror.com/blog/2008/01/understanding-user-and-kernel-mode.html
- http://msdn.microsoft.com/en-us/library/windows/hardware/ff554836(v=vs.85).aspx
- http://en.wikibooks.org/wiki/WindowsProgramming/UserModevsKernel_Mode
- http://en.wikipedia.org/wiki/CPU_modes
- http://blogs.msdn.com/b/friis/archive/2012/08/13/iis-7-5-architecture-and-components-part-1.aspx