Questa è una domanda ampia che non ha una risposta facile; è molto lontano dagli elettroni che scorrono lungo i fili di rame al rendering di un sito Web in Firefox. Cercherò di darti una panoramica dal basso verso l'alto e di indirizzarti verso le cose giuste da guardare.
Codifica dei numeri
La motivazione di base è calcolare le cose, come nel fare l'aritmetica¹. La prima cosa da guardare è come rappresentare i numeri. Ci sono stati molti approcci, usando decimale o ternario e penso che anche i sistemi ottali, ma alla fine, il binario ha vinto. Ora sappiamo che dobbiamo costruire dispositivi che gestiscono due valori: chiamiamoli e .101
Si noti che esistono anche diversi modi per codificare i numeri in binario. Dopo aver creato il tuo primo processore, ti rendi conto dei vantaggi di fare le cose in determinati modi. Esempi popolari sono i galleggianti a due complementi e IEEE . Per cominciare, limitati ai semplici numeri naturali.
Gates
Supponiamo di usare la codifica binaria. Pensa a come hai imparato ad aggiungere alla scuola primaria e scrivi lo stesso per i numeri binari. A quanto pare, i mattoni dell'algebra booleana sono già lì per te; è facile costruire un sommatore di base (e altre funzioni aritmetiche) usando le porte logiche .
Come costruire tali cancelli non rientra nell'ambito dell'informatica; l'ingegneria elettrica ha fornito una soluzione multipla usando ad esempio tubi o transistor . Vai allo scambio di stack di ingegneria elettrica per domande su questo.
Orologio e stato
Non tutte le porte sono ugualmente veloci e non tutte le parti di un calcolo hanno lo stesso numero di porte. Pertanto, dobbiamo prestare particolare attenzione affinché le singole operazioni non si superino a vicenda. Si è dimostrato utile usare un orologio globale ; il risultato di una data rete di porte è lo stato dei fili di uscita alla fine del ciclo (che può cambiare selvaggiamente mentre le porte precipitano verso i loro stati finali individuali).
Ciò significa che potrebbe essere necessario memorizzare i risultati di un ciclo fino all'inizio del ciclo successivo, ad esempio se si collegano i loop. Ci sono una serie di elementi di base che puoi usare con vari effetti, tutti costituiti da cancelli; alcuni sono chiamati infradito . Questi vengono anche utilizzati per creare registri , elementi che memorizzano i numeri per tutti i cicli di clock necessari.
Architettura e comandi
Ora hai una miriade di scelte di design da fare. Quali operazioni aritmetiche fornisce il tuo processore? Come sono i tuoi comandi? Può essere educativo guardare l' architettura MIPS le cui forme iniziali sono facili rispetto ad altri progetti. Dai un'occhiata ai piani :
Originale da http://ube.ege.edu.tr/~erciyes/CENG311
In sostanza, è il recupero e lo smontaggio di comandi, un set di registri, una ALU e controllo. I comandi codificano quale operazione ALU eseguire su quali operandi (in base al numero del registro in cui sono conservati), come manipolare il contatore del programma² o quale registro caricare / memorizzare dalla / alla memoria³.
Ulteriori considerazioni
Ormai hai un processore funzionante in senso moderno, supponendo che hai capito come costruire una memoria e un modo per alimentare i suoi comandi. Sulla strada per una macchina moderna, molte scelte devono essere fatte. Qui ce ne sono alcuni:
alternative
Quanto sopra è fortemente influenzato da come la storia si è rivelata. In un mondo diverso con menti diverse, i computer possono funzionare in modo diverso. In effetti, ci sono molti modelli di calcolo , alcuni dei quali presentano vantaggi che li rendono utili come astrazione per macchine reali in molti casi. Ci sono anche tentativi di imitare il modo in cui funzionano i nostri cervelli, ovvero abilitare il calcolo neurale o, più in generale, sfruttare le strategie di risoluzione dei problemi e di memorizzazione delle informazioni osservate in natura , in particolare il DNA e il calcolo quantistico .
Quindi forse (si spera?) Le informazioni di cui sopra sono tutta la storia antica tra 50 o 100 anni.
- Tutte le cose fantasiose che facciamo oggi con i computer sono suddivise in molti piccoli compiti aritmetici che il processore esegue uno per uno.
- Se il tuo modello consente al programma di manipolare il flusso di controllo, questo sarebbe l'indirizzo di memoria da cui il processore riceve l'istruzione successiva. Puoi anche concepire macchine che leggono solo un set fisso di istruzioni, per esempio, da un nastro. In effetti, le prime implementazioni lo hanno fatto. Nessun salto significava nessun loop; un programma era una serie di istruzioni completamente srotolate / spiegate a seconda dei dati. Ovviamente, essere in grado di utilizzare lo stesso programma per più dati di input è più potente.
- Supponendo che tu abbia memoria; il tuo processore funziona bene senza, ma può quindi gestire solo così tanti valori contemporaneamente. I primi computer leggevano tutti i loro dati dai nastri e li tenevano nei registri. Non c'era memoria, per non parlare di archiviazione scrivibile, persistente come la conosciamo oggi.