Domanda

so un po 'di assemblaggio, e che ci sono 4 o 8 o giù di lì registri di uso generale. Come tutti i programmi su un computer di lavoro con solo quella quantità di registri, in particolare con il multithreading e tutto?

È stato utile?

Soluzione

Multi-filettatura sé non influisce sul numero di registri in uso. Quando un filo viene scambiata, ha generalmente suoi registri salvato in memoria e il successivo filo di conduzione ha tali registri caricati dal suo precedente salvataggio.

Un esempio è un sistema avente una struttura di blocco di controllo del filo (TCB). Tale struttura conterrebbe (mentre il filo non era in esecuzione), il puntatore di istruzione salvata, stack pointer, registri general purpose, registri in virgola mobile, statistiche filo e così via. In breve, tutto il necessario per ristabilire completamente il filo verso stato in cui era quando è stato scambiato per un altro thread per l'esecuzione.

E non tutto quello che succede in un computer è fatto in registri. compilatori moderni possono ottimizzare il codice in modo che gli elementi di dati usati più sono conservati nei registri ma la stragrande maggioranza dei dati si tiene in memoria e solo comprato in registri in caso di necessità.

Il miglior libro che abbia mai letto su questo argomento è Tanenbaum è "Structured computer Organization" che esamina i computer in termini di livelli, dal livello di logica digitale fino al livello di sistema operativo, con ogni edificio livello sul precedente.

alt text

  

A parte: il mio sogno è un giorno scrivere un libro proprio come questo che copre tutto , dal livello di quark fino a Emacs: -)

Altri suggerimenti

Le altre variabili e stack di thread vengono immagazzinati nella memoria protetta, dove possono essere chiamati in registri quando necessario.

Si consiglia di controllare il libro The Elements of Computing Systems per una buona comprensione di come funziona la CPU del computer. Il libro si configura come una serie di progetti in cui lavora su da una porta NAND a una CPU, assemblatore, compilatore semplice, e ad un piccolo sistema operativo. E 'prezioso per comprendere come tutte le parti del computer si combinano tra loro.

Ogni volta che un filo (o un processo) scambia fuori, tutti i registri vengono spinti sulla pila dal kernel del sistema operativo in una struttura dati di solito chiamato Process Control Block. Poi, quando il filo swap / processo nuovamente, dati del registro vengono letti dal PCB e estratto dallo stack di registri.


Ci sono anche registri interni e una tabella di mappatura che l'x86 ha internamente quel tipo di set up una tabella di registrazione virtuale per conservare il set di istruzioni architettura IA32 pur avendo una flessibilità maggiore per progettare architetture superscalari e sofisticati algoritmi di schedulazione di istruzioni.

Inoltre, insiemi di istruzioni di solito hanno una carico e store istruzione, che viene utilizzato in combinazione con puntatori alla memoria, consentendo ai dati di essere memorizzati nella memoria dai registri. Che è dove il termine macchina Load-Store viene, cioè, un computer che non ha istruzioni che operano direttamente sulla memoria.

Alcuni computer hanno istruzioni che operano sulla memoria; alcuni sono di stack-based. Dipende dai progettisti e dai vincoli di essere immessi sul hardware.

è necessario rendersi conto che migliaia a milioni di istruzioni di montaggio vengono eseguiti per le cose anche semplici. Quei registri sono sempre i loro valori scambiati spesso.

In realtà è piuttosto interessante come il computer è in grado di utilizzare in modo alcuni registri per realizzare tutto ciò che lo fa.

È programmazione molto intelligente a livello di assieme (tipicamente a causa compilatori terrifically intelligenti) che permettono così pochi registri da utilizzare in modo efficiente.

Se un problema è impossibile da completare con solo pochi registri, il programma tipicamente "fuoriuscita" suoi registri nella stack di memoria principale. Ricordando dove sullo stack abbiamo messo i nostri registri versato possiamo facilmente recuperare di nuovo.

Quando siamo a corto di registri di cui abbiamo bisogno noi semplicemente memorizzare nello stack, che ci dà FAR più spazio di quanto la maggior parte di noi ha bisogno per i nostri programmi.

Nel caso specifico di multi-threading, dobbiamo solo salvare tutti i nostri registri di memoria, quindi abbiamo una lavagna pulita per gli altri thread.

Questa è una delle cose che altre memorie del computer, in particolare di RAM, è utilizzato per:. Per salvare e ripristinare bit di dati in entrata e in uscita dei registri

Quando un thread viene commutato via così un altro thread può essere eseguito. i primi fili registro di stato viene salvato qualche parte (in pila o qualche altra struttura dati), e lo stato del registro del thread secondi viene ripristinata da dove è stato salvato prima. RAM è abbastanza veloce che migliaia di questi interruttori si possono verificare in un secondo, ma prende tempo sufficiente che se si sta scambiando le discussioni inutilmente può influire sulle prestazioni.

Un altro evento molto, molto comune è variabili locali - se una variabile locale viene utilizzato per un breve periodo di tempo sufficiente, non può mai esistere al di fuori di un registro. Tuttavia, in molti casi, una variabile locale potrebbe aver bisogno di essere salvato dal registro a una posizione di memoria così qualche altro valore può essere caricato in e manipolato in un registro. Lo stesso accade in realtà per quasi tutte le variabili, non solo la gente del posto (ma è molto più probabile per un locale per non avere un'esistenza in memoria).

Questa è una domanda abbastanza coinvolti e la risposta dipende dalla vostra architettura della CPU.

Nei giorni good ol', avevi ragione - c'erano davvero pochi registri di uso generale. Al giorno d'oggi, la CPU e il compilatore gioca un gioco di " tre carte-Monte " con i tuoi registri generali di uso attraverso tecniche come registrare ridenominazione .

Sebbene su semplici architetture è vero che i registri vengono copiati nella memoria [cache] quando un contesto-switch accade, tecniche come SMT 'ingannare' il sistema operativo nel pensare ci sono più nuclei quello che realmente sono.

Ma la risposta più generale alla tua domanda è che i dati si sposta dentro e fuori dei registri molto . Ed è per questo che una grande quantità di istruzioni che vedete in ogni data di assemblaggio è il programma sono istruzioni "MOV". CPU e compilatore designer spendere un sacco di tempo e denaro ottimizzando i loro progetti in modo che non si stanno muovendo i dati dalla memoria principale (lenta) nei registri - cercano di mantenere i dati memorizzati nella cache il più possibile. Questo gran numero di istruzioni "MOV" È per questo che la latenza della memoria e la velocità degli autobus sono così cruciale per le prestazioni del computer in generale.

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