Risposte:
Modalità kernel
Un programma in esecuzione in questa modalità ha pieno accesso all'hardware sottostante. Può eseguire qualsiasi istruzione della CPU, accedere a qualsiasi indirizzo di memoria e sostanzialmente fare tutto ciò che vuole.
La modalità utente che esegue il codice in questa modalità è limitata alle modifiche hardware tramite l'API del sistema operativo. Esso non può accedere direttamente all'hardware affatto .
La cosa interessante qui è che sulle architetture comuni, questo viene applicato tramite hardware, non solo il sistema operativo. In particolare, l' architettura x86 ha anelli di protezione .
Il grande vantaggio di questo tipo di separazione è che quando un programma si blocca in esecuzione in modalità utente, non è sempre fatale. In effetti, sui sistemi moderni, di solito non lo è.
Scopri di Jeff writeup. Sono le sue solite cose buone.
La risposta breve è: ti dice solo dove stanno passando i loro programmi.
Per una risposta più lunga, lo spiegherò in due passaggi. Primo:
1. Accedere alla modalità kernel
Ogni codice normale che scrivi, viene eseguito in "modalità utente".
I programmi possono utilizzare le librerie per svolgere attività comuni per loro. Questo è anche il codice della modalità utente.
Ad un certo punto, il programma potrebbe richiedere una funzione principale dal sistema. Per esempio:
Questa funzionalità essenziale, vicina all'hardware, fa parte del kernel. Questo è il programma centrale dietro tutto sul tuo computer. Gestisce tutto ciò di cui i programmi hanno bisogno per funzionare.
Per usare una funzione nel kernel, il percorso di esecuzione del programma fa letteralmente un salto dalla modalità Utente al codice del kernel. Il kernel fa il suo lavoro e riporta il percorso di esecuzione alla modalità utente.
Quando un programma trascorre molto tempo in modalità kernel, spesso significa che sta facendo molte attività legate all'hardware. Ad esempio, ricerche su disco o streaming video. L'hardware potrebbe anche non funzionare correttamente; rendendo lenta l'elaborazione e facendo passare un tempo insolito nello spazio del kernel al programma.
2 la differenza
Il codice nello spazio del kernel ha prestazioni elevate. Le altre parti del kernel possono chiamarlo direttamente e il codice ha accesso diretto a tutte le risorse del sistema, senza alcun controllo dei limiti. Il passaggio dalla modalità kernel / utente è anche un'operazione costosa, che viene completamente evitata eseguendo tutto nel codice del kernel.
All'interno del kernel, tuttavia, non c'è molto spazio per il controllo di sicurezza, la protezione dagli arresti anomali o la scrittura nelle parti sbagliate della memoria. Questi sono servizi che il kernel può fornire ad altri programmi. Inganna i programmi per credere che il mondo appaia diverso (i programmi vivono in un ambiente virtuale, sandbox / limitato) e quindi tutto ciò che entra / esce dai programmi può essere tradotto e custodito.
Il kernel stesso non può avere molta protezione perché non c'è nulla dietro per proteggerlo. È il cuore del sistema e quando si ferma tutto finisce. Avrai il panico del kernel, o su Windows, il famoso BSOD.
Questo è anche il rischio di codice basato sul kernel e il motivo per cui un numero maggiore di sottosistemi con requisiti di basse prestazioni viene spostato nello spazio utente. Tuttavia, le parti essenziali correlate all'hardware sono in genere codice del kernel che non cambierà presto.
È la distinzione se il codice attualmente in esecuzione può interagire direttamente con vari componenti hardware. Il codice della modalità kernel può scrivere sui bus del dispositivo, modificare i mapping di memoria, cambiare i processi in esecuzione e così via. La modalità utente può eseguire calcoli e può effettuare chiamate di sistema nel kernel per interagire con il resto del mondo.