Domanda

Sono stato sempre in un po 'di assemblaggio ultimamente e io sono un principiante quindi mi chiedevo se qualcuno potesse chiarire una cosa. I portarlo ogni processo ha il proprio insieme di registri, e ciascun filo modificabili questi registri giuste ?. Come dunque non più thread utilizzano gli stessi registri senza causare scontri? O fa ogni thread ha un proprio set di registri?

È stato utile?

Soluzione

Un sensore contesto filo comporta il salvataggio dei registri del contesto di esecuzione corrente, e il caricamento dei registri con i valori memorizzati dal contesto di esecuzione cominciano commutati. (Tra le altre cose). Così ogni thread ha efficacemente il proprio set di registri. Anche il proprio stack, dal momento che ESP è uno dei registri.

Un modo di pensare a questo è che si ottiene salvando le discussioni fuori dello Stato registro corrente e caricando i registri con un nuovo stato. Se questo non accade, allora non è un interruttore thread. Se si sta anche passando a un diverso insieme di tabelle di indirizzi virtuali, allora quello che hai è un interruttore processo piuttosto che un interruttore thread.

si dice:

  

Lo prendo ogni processo ha il proprio set di registri, e ogni thread può modificare questi registri giusto?

Ma questo non è giusto. Ogni core CPU ha un singolo insieme di registri. Questi registri vengono cambiati ogni volta che il sistema operativo passa a un thread diverso. Ma v'è un solo filo di esecuzione in un nucleo CPU in qualsiasi momento. Processi realtà non hanno i loro propri registri, processi propri thread (o almeno un filo), ei filati hanno registri, ovvero un posto per mantenere i valori dei registri mentre il filo è in attesa di un nucleo CPU sia disponibile per eseguito su.

Altri suggerimenti

In hardware, c'è solo un insieme di registri per ciascun core del processore. Per questo motivo, un solo filo per volta può utilizzare i registri. Più thread vengono eseguiti contemporaneamente su un unico nucleo dal rapido passaggio da un filo all'altro. Scheduling quale thread viene eseguito quando è il lavoro del sistema operativo.

Quando si passa da un filo ad un altro, il contenuto dei registri vengono salvati in una speciale area di memoria e registri per la discussione successiva vengono copiati nuovamente nel processore. Questo include il puntatore all'istruzione, in modo che il filo sa dove continuare l'esecuzione quando si ottiene il controllo indietro. Questo processo è chiamato commutazione di contesto.

Poiché scheduler del sistema operativo è in ancora un altro filo, può soltanto processi di pianificazione quando è in esecuzione. Ciò significa che una speciale funzione hardware - un interrupt - è necessaria per controllare cambi di contesto. Solo il sistema operativo può pianificare context interrupt interruttore.

Il filo è fatto da un kernel o un sistema operativo, in modo che il programma non dovrebbe preoccuparsi di esso. Se nessun kernel o sistema operativo è disponibile, allora è necessario implementare da soli. per questo è necessario:

  • una funzione che salverà il sate di tutto registrarsi nella CPU (SP: Pila puntatore, valore del registro interno, PC: Program counter ecc ...) in un altro spazio di memoria per passare ad una nuova thread.
  • una funzione per caricare un ambiente thread per l'ambiente di CPU, ripristinare il valore registro interno precedentemente salvato sul registro della CPU.

A seconda del processore, c'è solo un insieme di registri. Non un set per thread.

Ci sono modi per risparmiare lo stato di tutti i registri, in modo che un thread può richiedere fino dove si era interrotto.

Alcuni processori facilitano questo .

avete

  • insieme di processi , che è quello del sistema operativo,
  • ogni processo ha uno spazio di memoria che contiene memoria allocata dinamica , dati statici e codice assembly ,
  • ogni processo ha una lista di discussioni
  • ogni filo ha il suo insieme di registri , program counter e pila

cambio di contesto il programmatore scambia i dati di thread di passare l'esecuzione ad un altro.

Di solito un processo è più pesante di una filo e vari approcci programmazione esistono:

  • facendo contesto passa solo internamente ( fili verdi ) al vostro programma (il sistema operativo sarà solo considerarlo un singolo processo in modo da: duro multi-core)
  • è possibile assegnare un numero di processi reali di avere un approccio ibrido che consente un facile ottimizzazione multi-core.

Ogni thread ha il proprio contesto , che comprende l'insieme di registri, bandiere, CPU pila, ecc.

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