Domanda

Dopo aver letto diverse fonti sto ancora confuso circa le discussioni dall'utente e a livello di kernel.

In particolare:

Le discussioni può esistere sia a livello di utente e il livello di kernel

Qual è la differenza tra il livello utente e livello di kernel?

È stato utile?

Soluzione

Uno dei ruoli di un sistema operativo multitasking kernel è scheduling : determinare quale thread di esecuzione per eseguire quando. Così un tale kernel ha qualche nozione di href="http://en.wikipedia.org/wiki/Thread_%28computer_science%29"> o processo . Un filo è un pezzo sequenziale di codice che è in esecuzione, ed ha una propria pila e talvolta altri dati. In un contesto di sistema operativo, in genere si ricorre processo per significare un filo che ha il suo spazio di memoria, e filo a significare un filo che condivide il suo spazio di memoria con altri fili. Un processo può avere uno o più fili.

Alcuni sistemi operativi, ad esempio i vecchi sistemi UNIX, solo fornire processi: ogni thread che il kernel gestisce ha un proprio spazio di memoria. Altri sistemi operativi, come ad esempio la maggior parte dei moderni sistemi UNIX, permettono di contenere i processi più thread di esecuzione: essi forniscono una nozione a livello kernel di fili

.

E 'anche possibile che un processo per gestire la propria filettatura. In cooperativa multithreading , il codice di ogni filo contiene le istruzioni per passare ad un altro thread. In preventiva multithreading, il processo richiede periodica notifiche asincrone dal kernel, e reagisce a queste notifiche passando ad un diverso thread. In questo modo, il multithreading Effettuata in totale assenza di cooperazione kernel, a livello di utente, in una biblioteca.

Un sistema in grado di offrire entrambi i thread a livello kernel e user-level; questo è noto come ibrido threading .

all'utente e a livello di kernel discussioni hanno i loro vantaggi e svantaggi. Il passaggio tra i thread a livello utente è spesso più veloce, perché non richiede il ripristino protezioni di memoria per interruttore per lo scheduler nel kernel e di nuovo per tornare al processo. Questo è importante soprattutto per i sistemi in maniera massiccia concorrenti che utilizzano un gran numero di thread molto breve, come alcuni linguaggi di alto livello ( Erlang in particolare) e la loro fili verdi . le discussioni a livello di utente richiedono meno supporto del kernel, che può rendere il kernel più semplice. thread kernel-level consentono un thread venga eseguito mentre un altro thread nello stesso processo è bloccato in un chiamata di sistema ; processi con thread a livello utente deve fare attenzione a non effettuare chiamate di blocco del sistema, in quanto questi blocchi tutti i fili del processo. thread kernel-livello possono essere eseguiti contemporaneamente su macchine multiprocessore, che puramente thread a livello utente non può ottenere.

Altri suggerimenti

Pensate di thread a livello kernel come " processori virtuali " le discussioni e livello utente come semplicemente discussioni (li chiamano Let come tale per ora). Ora, per un filo da eseguire, è ottenere assegnato a un diritto del processore? Così, ogni filo viene assegnato ad un processore virtuale in modo che possa essere eseguito.

Qui ci sono fatti

  • La creazione di un nuovo processore virtuale è un po 'costoso. (Il kernel deve creare una voce nel Far passare Control Block , assegnare pila, ecc.)

  • La creazione di un thread è piuttosto semplice rispetto alla creazione di un nuovo processore virtuale. Uno sviluppatore di applicazioni in grado di creare thread che utilizzano biblioteche della discussione fornite dai linguaggi di programmazione e siano gestite in User Space . E lingue diverse implementano multithreading in modi diversi.

Modelli

  • Se fili vengono mappati su un singolo processore virtuale, allora si deve fare attenzione a non effettuare una chiamata di sistema di bloccaggio in qualsiasi dei fili, perché altri thread non più possono essere eseguiti contemporaneamente.

  • Questa limitazione può essere superata se possono essere create alcuni processori virtuali. Ora, thread possono essere eseguiti simultaneamente (in parallelo se più processori reali sono presenti). Un filo non effettuerà altri fili che sono mappati su altri processori virtuali.

  • In quest'ultimo modello, o uno o più fili possono essere mappati su un processore virtuale.

  • I modelli di cui sopra sono chiamati molti a uno, uno a uno e molti a molti, rispettivamente.

Referenes: funzionamento concetti di sistemi da Galvin et al. Topic: le discussioni -> Modelli multithreading

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