Chiamata di sistema: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Nessun oggetto della modifica
Riga 3:
 
=== Come ottenere un servizio dal SO attraverso una chiamata di sistema ===
Fondamentale è il passaggio dall' [[user mode]] al [[Kernel mode]] attraverso una particolare istruzione che si identifica nel [[TRAP]]Trap. Per motivi di sicurezza, il codice inerente i servizi del SO è eseguibile solo in Kernel mode, avendo completo accesso all'[[hardware]]. Infatti, una chiamata al ''kernel'', richiede spesso l'uso di una speciale istruzione di [[linguaggio macchina]] che provoca una [[commutazione di contesto]] del [[microprocessore]] (da "modalità protetta" a "modalità supervisore", sui processori [[Intel]] e compatibili si dice da "Ring 3" a "Ring 0"). Questo permette al ''kernel'' del sistema operativo di eseguire operazioni riservate quali l'accesso all'[[hardware]] o all'unità di gestione della [[memoria]], tuttavia comporta un ''overhead'' molto più elevato. Successivamente, quando è terminato il compito esercitato dalla chiamata di sistema invocata, il controllo fa il procedimento inverso, da Kernel mode per arrivare nuovamente allo user mode.
Molto importanti, poi, sono anche le chiamate alle librerie utente ([[Application programming interface|API]]). La chiamata ad una API è identica ad una chiamata ad una funzione dell'applicazione stessa, in pratica viene registrato nello ''[[stack]]'' lo stato del [[registro|registri]] del [[microprocessore]] e l'indirizzo di ritorno. Perciò anche nei sistemi operativi con [[protezione della memoria]] e separazione degli spazi di indirizzamento vi sarà un ''[[overhead]]'' ridotto.