Domanda

I stava leggendo un articolo che descrive il passaggio tra spazio utente e kernel-space che accade su una chiamata di sistema. L'articolo dice

Un'applicazione prevede il completamento della chiamata di sistema prima di riprendere l'esecuzione in modalità utente.

Ora, fino ad ora mi è stato presupposto che alcune chiamate di sistema sono blocking, mentre altri sono non-blocking. Con il commento di cui sopra, ora sto confuso. Questo significa che tutte le chiamate di sistema stanno bloccando o ho fatto fraintendere un concetto?

È stato utile?

Soluzione

Sembra che tu stia sovraccaricare il termine 'blocco'.

Qualsiasi cambio di contesto si effettua al kernel, si deve aspettare che per tornare al usermode prima che l'applicazione può continuare. Questo non è quello che viene chiamato di solito 'blocco'.

Nella progettazione kernel corrente, le chiamate di blocco sono chiamate in cui i rendimenti kernel solo quando la richiesta è completo (o errore si verifica). Queste chiamate di solito richiedono più tempo quantità di tempo e di solito portano il processo per essere programmato fuori. Per esempio, molte chiamate IO stanno bloccando.

Esistono chiamata di sistema che fornisce asincrona IO e sono non-blocking. Nota che c'è ancora un cambio di contesto che avviene qui, solo l'applicazione deve prendersi cura della natura asincrona della chiamata.

Il documento sembra mirare ad eliminare questo interruttore contesto avanti e indietro (eccezione-meno chiamate di sistema) e cercare di rendere tutte le chiamate asincrone.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a cs.stackexchange
scroll top