Domanda

Spiegato con parole tue, che cos'è la prelazione e cosa significa un kernel (linux)?

Quali sono i vantaggi e gli svantaggi di avere un kernel preemptible?

È stato utile?

Soluzione

Multitasking preventivo - Esecuzione di più processi / thread su un singolo processore, creando l'illusione che vengano eseguiti contemporaneamente quando in realtà a ciascuno sono assegnati piccoli intervalli di tempo multiplex per l'esecuzione. Un processo è "preemptato"; quando è programmato fuori esecuzione e attende il prossimo intervallo di tempo.

Un kernel preventivo può essere interrotto durante l'esecuzione del codice - ad esempio in risposta a una chiamata di sistema - per fare altre cose ed eseguire altri thread, possibilmente quelli che non sono nel kernel.

Il vantaggio principale di un kernel preventivo è che le chiamate sys non bloccano l'intero sistema. Se una chiamata di sistema richiede molto tempo per terminare, ciò non significa che il kernel non possa fare nient'altro in questo momento. Lo svantaggio principale è che ciò introduce una maggiore complessità nel codice del kernel, dovendo gestire più end-case, eseguire blocchi più dettagliati o utilizzare strutture e algoritmi senza blocco.

Altri suggerimenti

Dovresti davvero usare il termine "preventivo". Esistono diversi tipi di prelazione. In sostanza, è molto semplice e probabilmente lo capisci con un altro nome. Un sistema operativo preventivo può cambiare i contesti tra thread in modalità utente senza alcuna programmazione speciale nell'applicazione preemptata. Ciò consente il multitasking. Un sistema operativo può passare da un processo all'altro e questo passaggio è essenzialmente trasparente. Esiste anche qualcosa come il kernel preventivo, che consente di preimpostare i thread in modalità kernel (la maggior parte dei sistemi operativi non lo consente, ma è necessario per alcune applicazioni come nei sistemi in tempo reale). Nota, questa è una spiegazione molto semplificata.

Altri hanno spiegato adeguatamente cos'è un kernel preemptible.

A cosa serve?

Principalmente i vantaggi sono:

  • Bassa latenza su sistemi non SMP - generalmente utilizzati in sistemi in tempo reale o per altre cose in cui la latenza è importante (audio, forse app video)
  • Insegnare agli sviluppatori del kernel che non hanno sistemi SMP come scrivere il codice corretto per SMP

Con un kernel non preimpregnabile, su un sistema a singolo processore è possibile che gli sviluppatori del kernel siano pigri e si allontanino senza alcun blocco per la maggior parte del tempo - ovviamente questo è un grosso GUASTO su SMP. I kernel preimpostabili consentono loro di provare questo dolore senza più core.

Penso che questo post spiega le tue domande:

  

che cos'è la prelazione?

La capacità del sistema operativo di anticipare o interrompere un'attività attualmente pianificata a favore di un'attività con priorità più elevata. La pianificazione può essere una, ma non solo, elaborazione, programmazione I / O ecc.

  

che cos'è un kernel di prelazione?

In Linux, i programmi di spazio utente sono sempre stati preimpostabili: il kernel interrompe i programmi di spazio utente per passare ad altri thread, usando il normale segno di spunta dell'orologio. Quindi, il kernel non attende che i programmi dello spazio utente rilascino esplicitamente il processore (come nel caso del multitasking cooperativo). Ciò significa che un ciclo infinito in un programma spazio utente non può bloccare il sistema.

Tuttavia, fino ai 2.6 kernel, il kernel stesso non era preemettibile: non appena un thread è entrato nel kernel, non è stato possibile impedire l'esecuzione di un altro thread. Il processore potrebbe essere usato per eseguire un altro thread quando è stata terminata una syscall o quando il thread corrente ha esplicitamente chiesto allo scheduler di eseguire un altro thread usando la funzione schedule (). Ciò significa che un ciclo infinito nel codice del kernel ha bloccato l'intero sistema, ma questo non è un vero problema: il codice del kernel è progettato in modo tale che non ci siano loop infiniti.

La preemption del kernel è stata introdotta nei kernel 2.6 e si può abilitarla o disabilitarla usando l'opzione CONFIG_PREEMPT. Se CONFIG_PREEMPT è abilitato, è possibile preemptare il codice del kernel ovunque, tranne quando il codice ha disabilitato gli interrupt locali. Un ciclo infinito nel codice non può più bloccare l'intero sistema. Se CONFIG_PREEMPT è disabilitato, viene ripristinato il comportamento 2.4.

  

Pro e contro?

Pro: il kernel di prelazione può migliorare la latenza e la scalabilità e può eseguire attività ad alta priorità e rispondere tempestivamente.

Contro: Rende difficile la scrittura del codice nel kernel di prelazione, specialmente in SMP, e devi considerare molti fattori.

Preemption significa che il sistema operativo supporta più attività (un pezzo di codice separato e autonomo) e passerà da un'attività all'altra in base a una pianificazione. Quando un'attività viene interrotta, viene chiamata " preempting " ;. Il sistema operativo moderno lo supporta, ma non è necessario, ad esempio, per i sistemi embedded semplici. Il vantaggio di supportare il cambio di attività non è sempre valsa la pena.

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