Come funziona un computer?


40

Sono un secchione informatico da molti anni. Sono in grado di programmare in diverse lingue e posso persino costruirle. L'altro giorno mi sono seduto con un amico e ho chiesto come un computer effettivamente prende l'elettricità e fa qualcosa con esso, e non siamo riusciti a capirlo, e Google non è stato di grande aiuto.

Voglio dire, come fa un computer a prendere un flusso costante di elettricità e trasformarlo in 1 e 0 e poi effettivamente fare qualcosa con questi 1 e 0 come accendere una luce per 15 secondi?

Capisco le porte (AND, OR, NOR, NAND, NOT) e un po 'su diodi , resistori e transistor , ma ho pensato che questo sarebbe stato il posto perfetto per spiegarlo in termini davvero profani!

Qualcuno può indicarmi la giusta direzione o darmi una breve spiegazione?


8
Potresti anche chiedere "come funzionano i batteri?". Questa è una domanda incredibilmente ampia. Ti suggerisco di guardare una semplice architettura di processore (ad es. MIPS ; ci è stato insegnato questo in classe) e di lavorare verso il basso e verso l'alto da lì. Le domande che affronti lungo il percorso sono probabilmente molto più adatte a Stack Exchange rispetto a questa.
Raffaello

3
So come funzionano i batteri, è il computer che non ricevo lol
Christian

14
Elfi. Piccoli elfi magici.
JeffE,


1
Il modo migliore per imparare come funziona davvero un computer al livello più basso è progettare un microcontrollore semplicistico su un fpga o manualmente da Nand Gates. L'ho fatto in un corso di "Architetture di computer" ed è stato davvero una rivelazione. Non è nemmeno difficile da fare se si tiene tutto al minimo e si progetta un controller a 4 bit con aggiunta, manipolazione dei bit e un salto condizionale. O ancora più semplice, un hardware che implementa una macchina Turing semplificata. Ehm, questa jut mi ha dato un'idea: scopri come funziona una macchina di Turing. Ti darà una buona visione.
vsz

Risposte:


47

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 :

MIPS a singolo stadio
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.


  1. Tutte le cose fantasiose che facciamo oggi con i computer sono suddivise in molti piccoli compiti aritmetici che il processore esegue uno per uno.
  2. 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.
  3. 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.

Wow! Questo merita un applauso. È stata un'ottima lettura. Grazie per aver condiviso. Ho sicuramente imparato qualcosa. Sebbene, dopo averlo letto, penso che ciò che voglio sapere siano più i fondamenti dell'ingegneria elettrica in termini di come controlla fisicamente l'elettricità. Porrò la stessa domanda a quel gruppo un po 'più tardi oggi. Grazie!
Christian,

1
Mi è venuto in mente che probabilmente avrei dovuto includere il "parlare con la parte della macchina". Ciò significa che progettare una lingua con cui gli umani possono lavorare in modo efficiente e tradurla (con un compilatore) nel set di istruzioni specificato. Questi sono argomenti chiave dell'informatica mentre il materiale nella mia risposta è principalmente l' ingegneria informatica .
Raffaello

Immagino che non sia una risposta rapida. Un giorno pagherò un ingegnere informatico che costruisce simili schede madri o telefoni cellulari, proprio come funzionano i fondamenti. Vale a dire, come un computer effettivamente calcola o accende una luce per 5 secondi e poi si spegne. Immagino che abbia molto a che fare con interruttori e condensatori.
Christian,

@Christian Se vuoi risparmiare, prendi in considerazione l'acquisto di un box di esperimento EE (come quelli per bambini) che include transistor. In genere, il cambio di luci o la costruzione di un piccolo sommatore è incluso. (Ancora una volta, la gente di ingegneria elettrica probabilmente ne sa di più.)
Raffaello

25

Il quadro completo è abbastanza complicato. Esistono molti strati uno sopra l'altro che implementano collettivamente astrazioni di alto livello in cima a tensioni elettriche. Non c'è una semplice spiegazione di come tutto è messo insieme, soprattutto considerando che l'hardware e il software del computer si sono evoluti in modo drammatico negli ultimi cinquant'anni.

Se sei interessato a vedere come tutto è messo insieme, potresti dare un'occhiata a The Elements of Computing Systems , un libro che inizia con NAND Gates e sviluppa progressivamente un'implementazione funzionante di Tetris su un compilatore e un sistema operativo che anche tu costruisci. Ogni parte del computer è costruita sulla precedente, il che potrebbe aiutarti a vedere come funziona tutto.


Sembra un punto di partenza perfetto. Inizieremo lì. Grazie mille :)
Christian,

2
Consiglio anche di leggere CODICE di Charles Petzold.
ybakos,

7

Il podcast Security Now! ha fatto una serie su come funzionano i computer, iniziando con i principi di base.

  • 233 - Let's Design a Computer (parte 1)
  • 235 - Linguaggio macchina
  • 237 - Indirection: The Power of Pointers (non tecnicamente parte della serie)
  • 239 - Pile, registri e ricorsione
  • 241 - Interrupt di processo
  • 247 - Il "Multi" -verse
  • 250 - Sistemi operativi
  • 252 - RISCy Business
  • 254 - Cosa faremo per la velocità

Le lacune nei numeri sono perché ogni altro episodio è un episodio di Feedback dell'ascoltatore, quindi potresti voler guardare anche quelli. Inoltre tra il 241 e il 247 hanno fatto alcuni episodi su SSL a causa delle ultime notizie in quel momento sui paesi che costringevano la CA a consegnare loro i certificati di root.

Anche EP. 248 è il "Portable Dog Killer" che non uccide i cani, ma un'arma a fascio sonico che Steve ha fatto da solo da bambino per aiutare a insegnare a un cane vicino a non correre fino alla linea di recinzione e cercare di attaccare le persone sul marciapiede .


interessante! Grazie per aver condiviso. Darò un'occhiata.
Christian,

4

Un computer funziona manipolando i gradienti energetici (che poi interpretiamo come 1 e 0) in modo coerente e definito . È la coerenza che definisce un computer, mentre è la definizione che separa i diversi processori.

Inoltre, scopri come solo due porte logiche (OR e AND) sono elementi costitutivi sufficienti per costruire qualsiasi computer per scopi generici. Vedi anche, Danny Hillis e il computer Tinkertoy.


È stata una lettura interessante sul TinkerToy, in particolare il fatto che vince sempre! ( Science20.com/brain_candyfeed_your_mind/… )
Christian,

Tuttavia, sebbene mi dia una buona idea di come "pensa" un computer, ovvero, dandogli tutte le combinazioni e i meccanismi per trovare la risposta successiva alla precedente, non risponde alla mia domanda originale su come costruire effettivamente un computer. Supponiamo che mi stia dirigendo verso il mio negozio di ferramenta locale (che ha tutto) per acquistare i bit fondamentali (transitori, resistori, condensatori, porte, ecc.) E configurarli in modo da avere un computer estremamente semplice, di cosa avrei bisogno? Dopotutto, il primo computer aveva le dimensioni di un magazzino con bit e fili, quindi deve essere possibile!
Christian,

@Christian: haha, okay, costruisci alcune porte logiche di base (AND / OR / NOT) alcune infradito per l'archiviazione di memoria di base e potresti essere in grado di aggiungere due numeri a 4 bit.

Ho delle infradito! Due coppie in effetti.
Christian,

3

Un computer è un grande sistema logico sincrono , il che significa che

  • 0/1
  • funziona con un orologio (molto veloce) in modo che tutti i segnali vengano campionati in momenti discreti per garantire coerenza.

0/1

Dispone di circuiti specializzati per conservare le informazioni finché il computer è alimentato (RAM, in quantità enormi). Ha circuiti specializzati per eseguire l'aritmetica binaria (in realtà i bit sono gestiti in gruppi - in genere in multipli di 8 - che rappresentano collettivamente un numero intero). E ha funzionalità di routing specializzate basate su indirizzi di memoria, che non sono altro che numeri interi.

Ultimo ma non meno importante, un computer moderno ha anche un programma memorizzato nella RAM, che è un elenco di istruzioni codificate come numeri interi, che viene eseguito in sequenza, in genere recupera i dati dalla memoria, esegue un po 'di aritmetica e restituisce i risultati alla memoria.

Nel tuo scenario, si potrebbe pensare a un'implementazione in cui il tempo trascorso è memorizzato da qualche parte nella RAM e il programma richiede

  • recuperare il valore del tempo trascorso,
  • incrementalo con un sommatore,
  • confrontarlo con un ritardo predefinito con un comparatore,
  • tornare all'indirizzo di partenza del programma in caso di disuguaglianza (ad es. "loop"),
  • altrimenti imposta un segnale specializzato che va a uno switch esterno anziché alla RAM.

Si noti che tutti questi elementi oggigiorno raggiungono un alto grado di raffinatezza e ogni frase in questa breve panoramica merita numerosi libri di spiegazioni.


-1

Esistono diversi modi per eseguire una funzione di ritardo o convertire i dati binari in dati decimali o intensità del segnale. Quando si immette il valore "15", il computer visualizza sullo schermo un'immagine bitmap del numero 15. Questo è in realtà il valore binario, al momento anche il codice binario della tastiera inviato a CPU. Analizzerà i dati, quindi trasformerà il codice in unità di elaborazione ALU (arithmetic logic unit) per convertirlo in un impulso in chip DAC. Il segnale analogico sta ora controllando la frequenza (la frequenza da khz a hz) di un circuito flip-flop. Ora l'output di frequenza verrà indirizzato alla RAM e la CPU leggerà la RAM in modo che corrisponda se i dati sono "1111". Quindi sono 4 secondi.


Non sono sicuro di come questo risponda alla domanda.
Yuval Filmus,

puoi vedere che ha chiesto come ha portato il flashing del computer per 15 secondi, e spiego come il computer crea il secondo valore da usare in loop.
Lan ...
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.