Come funziona una semplice operazione matematica (2 + 2) in una CPU? [duplicare]

2

Quali sono i passi compiuti dalla CPU per sommare 2 numeri (2 + 2) dall'ingresso della tastiera al display nello schermo?

esempio: legge il codice ASCII .... converti il numero digitato in binario ... manda in cpu .... stampa sullo schermo?

    
posta RollRoll 20.01.2017 - 21:24
fonte

1 risposta

3

I passaggi "di livello superiore" sono quelli che hai indovinato: ottieni caratteri dalla tastiera, converti in numeri interi, aggiungi i numeri interi, converti il risultato in caratteri, quindi visualizza quei caratteri.

La CPU non fa da sola.

La CPU esegue piccole istruzioni che fanno ciascuna una cosa molto semplice (e molto specifica). Queste istruzioni sono i blocchi fondamentali (di livello più basso) del software. Ognuno di questi passaggi di alto livello rappresenta molte istruzioni.

Per un esempio dettagliato; per ottenere 1 carattere dalla tastiera (utilizzando più ipotesi sull'hardware del computer e il sistema operativo utilizzato e semplificando eccessivamente):

  • Una sorta di controller (a cui è collegata la tastiera) invierà un IRQ (Interrupt ReQuest) alla CPU, e la CPU risponderà (prima o poi) avviando un gestore di interrupt.
  • Il gestore di interrupt del sistema operativo individuerà l'IRQ e invocherà il gestore di interrupt di un driver di periferica
  • Il gestore di interrupt del driver di dispositivo farà tutto il possibile per ottenere il byte dal controller (per alcuni casi può trattarsi di diversi livelli "complessi", ad esempio USB). Quindi invierà quel byte a un driver della tastiera
  • Il driver della tastiera individuerà un "codice di scansione", che in genere implica una macchina a stati per capire se più byte fanno parte dello stesso codice di scansione (o parte di un nuovo codice di scansione). Quindi convertirà il "codice di scansione potenzialmente multi-byte" in un "codice-chiave intero di dimensione fissa".
  • Quindi il driver della tastiera utilizzerà il codice-chiave e varie tabelle di ricerca e altri metadati (che dipendono dal layout della tastiera utilizzato) per determinare se esiste / non è un "carattere" (punto di codice Unicode? ) associato a quella chiave. Nota che molte chiavi semplicemente non hanno alcun carattere.
  • Il driver della tastiera combinerà questo con altre informazioni per formare una sorta di "evento key press"; e invia questo evento da qualche parte (ad esempio a una GUI).
  • L'evento "key press event" si farà strada attraverso vari processi (ad esempio da X a GUI all'emulatore di terminale fino alla shell in app di console in primo piano) finché non troverà la sua strada verso un'applicazione. Ciò può comportare l'eliminazione di molte informazioni utili in un determinato punto (emulatore di terminale) per farlo funzionare per il precedente stdin .
  • Una volta che la chiave / il carattere arriva all'applicazione; di solito c'è una sorta di buffering di input che consente all'utente di modificare (e supportare cose come backspace, delete, movimento del cursore, taglia / copia / incolla, ecc.). Anche; il "buffer corrente" viene in genere visualizzato mentre l'utente lo modifica (in modo che possano vedere cosa stanno facendo). Di solito, quando l'utente preme "enter", il testo inserito è considerato completo. Tutto ciò può essere fatto da una libreria (ad esempio una libreria standard C).
  • Quindi l'applicazione determina se l'input è valido. Per esempio. se si aspetta una stringa che rappresenta un numero ma l'utente ha digitato "FOO", allora potrebbe (dovrebbe) visualizzare un messaggio di errore appropriato e rifiutare l'input.
  • Mentre si esegue la convalida dell'input o dopo aver effettuato la convalida dell'input (o invece di eseguire la convalida dell'input per software estremamente scorretto), l'applicazione converte il testo di input (una stringa che rappresenta un numero) in un intero

Si noti che tutto quanto sopra può facilmente aggiungere fino a migliaia di piccole istruzioni minuscole che vengono eseguite dalla CPU; anche se è solo una frazione (a malapena più di uno dei "passaggi di livello superiore" con cui abbiamo iniziato) e anche se non ho fornito alcun dettaglio su come viene visualizzato il buffer di input mentre viene modificato (motore di font, motore di layout del testo , Renderer di grafica 2D).

Per tutti i passaggi di livello superiore (ottieni 2 numeri da utente, aggiungili, quindi visualizza il risultato) il numero totale di istruzioni che una CPU esegue può essere (letteralmente) milioni.

    
risposta data 23.01.2017 - 04:07
fonte

Leggi altre domande sui tag