2009-05-03 12 views
47

Spiegato con parole tue, cos'è la prelazione e cosa significa per un kernel (linux)?Che cos'è la prelazione/Che cos'è un kernel preimpostato? Per cosa è buono?

Quali sono i vantaggi e gli svantaggi nell'avere un kernel preempibile?

+26

Perché il downvote e perché "compiti"? Questo non è un compito a casa. In effetti, ci sono persone come me che sono interessate a una domanda del genere e non capiscono gli articoli di Wikipedia comuni. –

+3

http://en.wikipedia.org/wiki/Preemption_(computing) – Oli

risposta

56

Preventivo multitasking: esecuzione di più processi/thread su un singolo processore, creando l'illusione di essere eseguiti contemporaneamente quando in realtà a ciascuno di essi vengono allocate piccole fasce temporali multiplex per l'esecuzione. Un processo viene "annullato" quando è pianificato fuori esecuzione e aspetta che la prossima fetta di tempo venga eseguita.

Un kernel di prelazione è uno che può essere interrotto nel mezzo dell'esecuzione del codice, ad esempio in risposta a una chiamata di sistema, per eseguire altre operazioni ed eseguire altri thread, possibilmente quelli che non sono nel kernel.

Il vantaggio principale di un kernel preemptive è che le chiamate sys non bloccano l'intero sistema. Se una chiamata al sistema richiede molto tempo per finire, non significa che il kernel non possa fare altro in questo momento. Lo svantaggio principale è che questo introduce più complessità nel codice del kernel, dovendo gestire più end-cases, eseguire un lock più fine e utilizzare strutture e algoritmi lock-less.

+8

Ecco perché quando un filesystem va a male, in particolare un filesystem di rete, potresti trovarti con un processo che non può essere ucciso. Sta seduto in attesa di una chiamata sys per leggere il filesystem da restituire, ma non lo farà mai e non può essere interrotto. – Schwern

13

Si dovrebbe davvero usare il termine "preventivo". Esistono diversi tipi di prelazione. Essenzialmente, è molto semplice e probabilmente lo capisci con un altro nome. Un sistema operativo preventivo può commutare i contesti tra i thread in modalità utente senza alcuna programmazione speciale nell'applicazione precedente. Questo consente il multitasking. Un sistema operativo può passare e tornare a un processo e questo passaggio è essenzialmente trasnparente. Esiste anche un kernel preemptive, che consente di anticipare i thread in modalità kernel (la maggior parte dei sistemi operativi non consente questo, ma è necessario per alcune applicazioni come nei sistemi in tempo reale). Nota, questa è una spiegazione molto semplificata.

+1

Lo so, il tuo contributo è stato fatto qualche tempo fa, ma comunque, lascia che ti faccia una domanda. Perché preferiresti il ​​termine "preemtive" rispetto a "preemptible"? Soprattutto per la configurazione del kernel usa quest'ultimo potrebbe essere un po 'più intuitivo usando questo. –

4

Preemption indica che il sistema operativo supporta più attività (una parte separata di codice indipendente) e passerà da un'attività all'altra. Quando un'attività viene interrotta, si chiama "preempting". Il sistema operativo moderno supporta questo, ma non è necessario per sistemi embedded semplici, ad esempio. Il sovraccarico del supporto di commutazione delle attività non è sempre la pena.

7

Altri hanno adeguatamente spiegato che cos'è un kernel preempibile.

A cosa serve?

Per lo più i vantaggi sono:

  • inferiore latenza su sistemi non-SMP - tipicamente utilizzati nei sistemi in tempo reale o per altre cose in cui la latenza è importante (audio, video apps forse)
  • sviluppatori del kernel di insegnamento che non avere sistemi SMP come scrivere codice corretto per SMP

Con un kernel non prelavabile, su un sistema a processore singolo è possibile per gli sviluppatori di kernel essere pigri e andare via senza bloccare la maggior parte del tempo - Ovviamente questo è un grande errore su SMP. I kernel preventivabili consentono loro di ottenere questo dolore senza più nuclei.

4

Penso che questo post spiega le vostre domande:

che cosa è prelazione?

La capacità del sistema operativo di anticipare o interrompere un'operazione attualmente pianificata in favore di un'attività con priorità più alta. La pianificazione può essere uno, ma non limitato a, processo o pianificazione I/O, ecc.

cos'è un kernel di prelazione?

Sotto Linux, i programmi di spazio utente sono sempre stati prerogabili: il kernel interrompe i programmi di spazio utente per passare ad altri thread, utilizzando il normale segno di spunta. Quindi, il kernel non aspetta che i programmi dello spazio utente rilascino esplicitamente il processore (che è il caso del multitasking cooperativo). Ciò significa che un ciclo infinito in un programma spazio utente non può bloccare il sistema.

Tuttavia, fino al kernel 2.6, il kernel stesso non era disponibile: non appena è stato inserito un thread nel kernel, non è possibile anticipare l'esecuzione di un altro thread. Il processore potrebbe essere utilizzato per eseguire un altro thread quando è stato terminato un syscall o quando il thread corrente ha chiesto esplicitamente all'utilità di pianificazione di eseguire un altro thread utilizzando la funzione schedule(). Ciò significa che un ciclo infinito nel codice del kernel ha bloccato l'intero sistema, ma questo non è realmente un 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 una può essere abilitata o disabilitata utilizzando l'opzione CONFIG_PREEMPT. Se CONFIG_PREEMPT è abilitato, il codice del kernel può essere preimpostato 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à con priorità elevata e rispondere in modo tempestivo.

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

Problemi correlati