Esiste una buona descrizione del meccanismo di "chiamata di sistema" utilizzato nei sistemi operativi? [chiuso]

StackOverflow https://stackoverflow.com/questions/126976

Domanda

Sto cercando un buon primer o una descrizione tecnica del meccanismo Chiamata di sistema che viene utilizzato dai sistemi operativi per passare dallo spazio utente al kernel per invocare funzioni come " open " ;, " ; leggi " ;, " scrivi " ;, ecc ...

Esiste qualcosa di diverso dalla Wikipedia ? Siti Web, pdf, libri, codice sorgente, sono tutti benvenuti :)

È stato utile?

Soluzione

Bene per il codice sorgente, ci sono molti kernel open source in cui tuffarsi.

Per quanto riguarda i libri, il libro di Robert Love sul kernel Linux è molto informativo.

Altri suggerimenti

Il metodo esatto dipende dall'architettura del processore e dalle operazioni che definisce per il trasferimento in modalità kernel. Un approccio, e quello tradizionale su x86, era l'uso di un interrupt software. Si scopre che non è stato molto veloce per il caso generale, quindi in seguito Intel ha aggiunto SYSCALL e AMD ha aggiunto SYSENTER . Windows XP e versioni successive scelgono una tecnica di chiamata di sistema appropriata per la piattaforma, all'avvio.

È possibile scegliere di utilizzare numeri di interruzione software specifici per funzioni specifiche, ma generalmente il processore non ha interruzioni sufficienti per coprire tutte le funzioni del sistema, quindi è necessario che uno dei registri contenga il numero di funzione richiesto. Se lo fai comunque, non è molto difficile usare solo la funzione di chiamata di sistema.

Windows CE, prima della versione 6.0, utilizza un modello di indirizzo virtuale di processo side-by-side che in realtà consente ai processi di chiamarsi direttamente. Le protezioni della pagina sono impostate in modo tale che, una volta fatto, si verifichi un errore di violazione dell'accesso: il kernel ottiene il controllo, corregge lo spazio degli indirizzi del processo (spostando il processo chiamato nello slot 0), corregge gli argomenti basati sullo slot 0 per puntare al processo di chiamata e torna alla modalità utente. Poiché l'indirizzo di ritorno si trova in un altro processo, quando viene restituita la chiamata di funzione, si verifica il processo inverso. Sfortunatamente questo modello consente spazi di indirizzi virtuali molto piccoli per ciascun processo (32 MB) e un numero basso di processi (32), quindi Windows CE 6.0 ritorna a un modello di chiamata di sistema più tradizionale.

Potresti dare un'occhiata al kernel minix. È open source, progettato per essere semplice e viene utilizzato in molti corsi di sistemi operativi di livello Uni. Cerca in /usr/src/kernel/proc.c in particolare la funzione sys_call e la funzionalità circostante. Tieni presente che minix è un microkernel, quindi alcune cose potrebbero essere sottilmente diverse da quelle a cui sei abituato.

Se vuoi acquistare un libro che è estremamente utile per la programmazione * nix. Consiglierei " Programmazione avanzata in ambiente UNIX " di Stevens e Rago. Ha spiegazioni approfondite ed esempi di codice.

Per una buona spiegazione delle chiamate di sistema in Linux, guarda i driver di dispositivo di esempio in Driver di dispositivo Linux .

Dipende dall'architettura e richiede una comprensione dell'architettura del computer. Tanenbaum's "Structured Computer Organization" ha un buon riassunto delle basi di una chiamata di sistema. Per ulteriori informazioni, leggi qualsiasi libro di testo sulla progettazione del sistema operativo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top