Domanda

Che cosa è esattamente salvato e ripristinato in un cambio di contesto tra due thread

  • nello stesso processo
  • tra due processi
È stato utile?

Soluzione

Questa è piuttosto una questione complessa in quanto la risposta (s) dipendono da molte cose:

  1. La CPU in questione
    • Si può variare notevolmente anche all'interno della stessa famiglia per esempio i registri addizionali aggiunti per operazioni SSE / MMX.
  2. Il sistema operativo, dal momento che controlla i gestori che innescano su un cambio di contesto e decidere se l'hardware della CPU (se presente) per assistere a un cambio di contesto viene utilizzato o meno.
    • Ad esempio Windows non utilizza l'hardware Intel che può fare molto di stoccaggio cambio di contesto per voi dal momento che non memorizza i registri in virgola mobile.
  3. Le eventuali ottimizzazioni attivate da un programma a conoscenza di esso proprie esigenze e in grado di informare il sistema operativo di questo
    • Forse per indicare che non sta usando FP registri in modo da non perdere tempo con loro
    • In architetture con i file di registro consistenti come la maggior parte RISC progetta v'è una notevole beneficio per conoscere è necessario solo un sottoinsieme più piccolo di questi registri

Come minimo l'uso dovranno essere salvati registri di uso generale e registro program counter (assumendo che il disegno comune di più CISC corrente / stile RISC CPU general purpose).

Si noti che il tentativo di fare solo la quantità minima di sforzo in relazione ad un cambio di contesto è un argomento di un certo interesse accademico

Linux ha ovviamente più informazioni disponibili su questo dominio pubblico se i miei riferimenti possono essere un po 'fuori moda.

È ‘task_struct’ che contiene un gran numero di campi relativi allo stato compito nonché il processo che il compito è per.

Una di queste è il ‘thread_struct’

  

/ * stato specifico della CPU di questo compito * /
   - filo struct thread_struct;
       detiene informazioni su descrittori di cache TLS, i registri di debug,
       fault informazioni, in virgola mobile, modalità virtuale 86 o permessi IO.

Ogni architettura definisce proprio thread_struct esso è che identifica i registri e gli altri valori memorizzati su un interruttore.

Questa è ulteriormente complicata dalla presenza di rinominare registri che consentono a più nelle istruzioni di volo (tramite superscalare o relativa tubazione progetti architettonici). La fase di ripristino di un contesto swicth probabilmente contare sul gasdotto della CPU in fase di restauro in uno stato inizialmente vuoto tale le istruzioni che non erano ancora stati in pensione in cantiere non hanno alcun effetto e, quindi, possono essere ignorati. Questo rende il design della CPU molto più difficile.

La differenza tra un processo e un thread è che l'interruttore processo (cioè sempre un interruttore filo in tutti i principali sistemi operativi stream) sarà necessario aggiornare strutture correlate informativi traduzione memoria, IO informazioni inerenti e permessi.

Questi saranno principalmente puntatori ai più ricche strutture di dati e quindi non sarà un costo significativo in relazione al cambio di contesto thread.

Altri suggerimenti

Quando la commutazione contesto è tra thread dello stesso processo, tutti i registri di uso generale non volatili del thread corrente vengono salvate e quelle del nuovo filo vengono ripristinati; registri volatili devono essere salvati solo se l'esecuzione thread corrente è stato interrotto da un interrupt. Registri di qualsiasi co-processore che utilizza i fili flottanti (ad esempio processore punto), dovrebbero essere salvati e ripristinati Se la commutazione è tra le filettature di 2 processi, in aggiunta a quanto è necessario per un cambio di contesto normale, dovrebbero essere fatti cambiamenti legati gestione della memoria e IO; per esempio protezione della memoria necessaria per processi è realizzato utilizzando le tabelle di pagina e le tabelle di directory e ogni processo ha un indirizzo della tabella directory pagina univoca, che deve essere cambiato quando i cambiamenti di processo.

Questo dipende dal sistema operativo che si sta utilizzando, ma di sicuro si dovrà salvare il contenuto di tutti i registri (tra cui il contatore di istruzioni) e caricare i registri del filo si sta passando a.

L'unica differenza che mi viene in mente per quanto riguarda lo switch tra due thread sullo stesso processo è che non si perde il contenuto della cache L1 e MMU.

Non sono sicuro, ma se non ricordo male anche il set di memoria di lavoro è acceso.

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