Come funzionano i computer? [chiuso]


59

Questo è quasi imbarazzante chiedere ... Ho una laurea in Informatica (e una seconda in corso). Ho lavorato come sviluppatore .NET a tempo pieno per quasi cinque anni. In genere sembro competente in quello che faccio.

Ma non so come funzionano i computer!

Per favore, nudo con me per un secondo. Un rapido Google di 'How a Computer Works' produrrà molti e molti risultati, ma ho faticato a trovarne uno che rispondesse davvero a ciò che sto cercando. Mi rendo conto che questa è una domanda enorme, enorme, quindi davvero, se puoi semplicemente darmi qualche parola chiave o una direzione.

So che ci sono componenti .... l'alimentatore, la scheda madre, il ram, la CPU, ecc ... e ho l'idea generale di quello che fanno. Ma davvero non capisco come si passa da una riga di codice come Console.Readline()in .NET (o Java o C ++) e che faccia effettivamente cose.

Certo, sono vagamente consapevole di MSIL (nel caso di .NET), e che un po 'di magia accade con il compilatore JIT e si trasforma in codice nativo (penso). Mi è stato detto che Java è simile e C ++ interrompe il passaggio intermedio.

Ho fatto un assemblaggio di mainframe, era qualche anno fa. Ricordo che c'erano alcune istruzioni e alcuni registri della CPU, e ho scritto del codice .... e poi è successo un po 'di magia .... e il mio programma avrebbe funzionato (o si sarebbe bloccato). Da quanto ho capito, un 'Emulatore' simulerebbe cosa succede quando si chiama un'istruzione e aggiornerebbe i registri della CPU; ma cosa fa funzionare quelle istruzioni nel modo in cui funzionano?

Questo si trasforma in una domanda di elettronica e non in una domanda "computer"? Immagino che non ci sia alcun motivo pratico per comprenderlo, ma sento che dovrei essere in grado di farlo.

(Sì, questo è ciò che accade quando passi una giornata con un bambino piccolo. Ci vogliono circa 10 minuti e cinque iterazioni per chiedere "Perché?" Per capire quanto non sai)



20
Consiglierei Code by Charles Petzold

Non è un Emulator. È un mucchio di veri circuiti a semiconduttore con centinaia (migliaia) di fili di ingresso e uscita e miliardi di porte logiche. È Emulatorstato usato solo a scopo didattico.
rwong

1
Penso che il titolo dovrebbe essere cambiato per essere più specifico / informativo. Questa è in realtà una domanda piuttosto utile, ma a prima vista sembra totalmente ridicola, come quello che il bambino piccolo ha chiesto in origine. Modificalo in qualcosa del tipo "come si collegano i comandi software di alto livello alle risposte hardware di basso livello?"
jhocking

2
Ciao Rob, come scritto in questo momento, questo è irrimediabilmente ampio e si è rapidamente trasformato in una domanda di raccomandazione di un libro e in una discussione estesa: entrambi non desideriamo qui. Se si riesce a stringere la vostra attenzione e chiedere qualcosa di specifico su un problema che stai attualmente di fronte, non esitate a chiedere a tale proposito.

Risposte:


139

Inizierò dal livello più basso che potrebbe essere rilevante (posso partire da un livello anche più basso, ma probabilmente sono troppo irrilevanti), a partire da Atom, per elettricità, per transistor, per porte logiche, per circuiti integrati (chip / CPU ) e termina in Assemblea (suppongo che tu abbia familiarità con i livelli più alti).

All'inizio

Atomo

L'atomo è una struttura composta da elettroni, protoni e neutroni (che a loro volta sono composti da particelle elementari ). La parte più interessante dell'atomo per computer ed elettronica sono gli elettroni perché gli elettroni sono mobili (cioè possono muoversi relativamente facilmente, a differenza dei protoni e dei neutroni che sono più difficili da spostare) e possono fluttuare da soli senza essere tenuti all'interno un atomo.

Di solito, ogni atomo ha lo stesso numero di protoni ed elettroni, chiamiamo questo stato "neutro". Come accade, è possibile che un atomo perda o guadagni elettroni extra. Si dice che gli atomi in questo stato sbilanciato siano rispettivamente atomi "caricati positivamente" (più protoni degli elettroni) e atomi "caricati negativamente" (più elettroni che protoni).

Gli elettroni sono indistruttibili e indistruttibili (non così nella meccanica quantistica, ma questo è irrilevante per il nostro scopo); quindi se un atomo perde un elettrone, alcuni altri atomi nelle vicinanze dovevano ricevere gli elettroni extra o l'elettrone doveva liberarsi in un elettrone fluttuante libero, al contrario, poiché l'elettrone non è ricostruibile, per ottenere un elettrone in più, un atomo doveva eliminarlo dagli atomi vicini o da un elettrone fluttuante libero. La meccanica degli elettroni è tale che se c'è un atomo con carica negativa vicino a un atomo con carica positiva, alcuni elettroni migreranno fino a quando entrambi gli atomi avranno la stessa carica.

elettricità

L'elettricità è solo un flusso di elettroni da un'area con un numero molto alto di atomi con carica negativa verso un'area con un numero molto alto di atomi con carica positiva. Alcune reazioni chimiche possono creare una situazione in cui abbiamo un nodo con molti atomi con carica negativa (chiamato "anodo") e un altro nodo con molti atomi con carica positiva (chiamato "catodo"). Se colleghiamo due nodi caricati in modo opposto con un filo, le masse di elettroni fluiranno dall'anodo al catodo e questo flusso è ciò che chiamiamo "corrente elettrica".

Non tutti i fili possono trasmettere elettroni allo stesso modo facilmente, gli elettroni fluiscono molto facilmente nei materiali "conduttori" che nei materiali "resistenti". Un materiale "conduttore" ha una bassa resistenza elettrica (ad es. Fili di rame nei cavi) e un materiale "resistente" ha un'alta resistenza elettrica (ad es. Isolamento di cavi in ​​gomma). Alcuni materiali interessanti sono chiamati semiconduttori (ad esempio siliconi), perché possono alterare facilmente la loro resistenza, in determinate condizioni un semiconduttore potrebbe agire da conduttore e in altre condizioni potrebbe trasformarsi in un resistore.

L'elettricità preferisce sempre fluire attraverso il materiale con meno resistenza, quindi se un catodo e un anodo sono collegati con due fili, uno con resistenza molto alta e l'altro con resistenza molto bassa, la maggior parte degli elettroni scorrerà attraverso il cavo a bassa resistenza e quasi nessuno scorre attraverso il materiale ad alta resistenza.

Il Medioevo

Interruttori e transistor

Interruttori / Flip-Flop sono come i tuoi normali interruttori della luce, un interruttore può essere posizionato tra due pezzi di filo per interrompere e / o ripristinare il flusso di elettricità. I transistor funzionano esattamente come un interruttore della luce, tranne per il fatto che invece di collegare e scollegare fisicamente i fili, un transistor collega / disconnette il flusso di elettricità alterando la sua resistenza a seconda che ci sia elettricità nel nodo di base e, come avresti potuto immaginare / so, i transistor sono realizzati da semiconduttori perché possiamo alterare i semiconduttori per diventare un resistore o un conduttore per collegare o scollegare le correnti elettriche.

Un tipo comune di transistor, il transistor di giunzione bipolare NPN (BJT), ha tre nodi: "base", "collettore" ed "emettitore". In un BJT NPN, l'elettricità può fluire dal nodo "emettitore" al nodo "collettore" solo quando è caricato il nodo "base". Quando il nodo base non è carico, praticamente nessun elettrone può fluire attraverso e quando il nodo base è carico, allora gli elettroni possono fluire tra l'emettitore e il collettore.

Il comportamento di un transistor

(Consiglio vivamente di leggere tutto questo prima di continuare, poiché può spiegare meglio di me con la grafica interattiva)

Supponiamo di avere un transistor collegato a una fonte elettrica alla base e al collettore, quindi colleghiamo un cavo di uscita vicino al collettore (vedere la Figura 3 in http://www.spsu.edu/cs/faculty/bbrown/web_lectures / transistor / ).

Quando applichiamo l'elettricità né alla base né al collettore, allora l'elettricità non può fluire affatto poiché non c'è elettricità di cui parlare:

B   C  |  E   O
0   0  |  0   0

Quando applichiamo elettricità al collettore ma non alla base, l'elettricità non può fluire verso l'emettitore poiché la base diventa un materiale ad alta resistenza, quindi l'elettricità sfugge al filo di uscita:

B   C  |  E   O
0   1  |  0   1

Quando applichiamo elettricità alla base ma non al collettore, anche l'elettricità non può fluire poiché non vi è alcuna differenza di carica tra il collettore e l'emettitore:

B   C  |  E   O
1   0  |  0   0

Quando applichiamo elettricità sia alla base che al collettore, otteniamo elettricità che fluisce attraverso il transistor, ma poiché il transistor ha ora una resistenza inferiore rispetto al filo di uscita, quasi nessun flusso di elettricità passa attraverso il filo di uscita:

B   C  |  E   O
1   1  |  1   O

Porte logiche

Quando colleghiamo l'emettitore di un transistor (E1) al collettore di un altro transistor (C2) e quindi colleghiamo un'uscita vicino alla base del primo transistor (O) (vedere la Figura 4 in http://www.spsu.edu / cs / faculty / bbrown / web_lectures / transistors / ), quindi succede qualcosa di interessante. Diciamo anche che applichiamo sempre elettricità al collettore del primo transistor (C1) e quindi giochiamo solo con i nodi di base dei transistor (B1, B2):

B1   B2   C1   E1/C2  |  E2   O
----------------------+----------
0    0    1    0      |  0    1
0    1    1    0      |  0    1
1    0    1    0      |  0    1
1    1    1    1      |  1    0

Riassumiamo la tabella in modo da vedere solo B1, B2 e O:

B1   B2  |  O
---------+-----
0    0   |  1
0    1   |  1
1    0   |  1
1    1   |  0

Ecco , se hai familiarità con Boolean Logic e / o Logic Gates, dovresti notare che questa è esattamente la porta NAND. E se hai familiarità con Boolean Logic e / o Logic Gates potresti anche sapere che una NAND (così come NOR) è funzionalmente completa , cioè usando solo NAND, puoi costruire tutte le altre porte logiche e il resto della verità tabelle. In altre parole, è possibile progettare un intero chip di computer utilizzando solo porte NAND.

In effetti, la maggior parte delle CPU sono (o è usata per essere?) Progettate utilizzando NAND solo poiché è più economica da produrre rispetto all'utilizzo di una combinazione di NAND, NOR, AND, OR, ecc.

Derivare gli altri operatori booleani dalla NAND

Non descriverei come rendere tutti gli operatori booleani, solo il NOT e il AND gate, puoi trovare il resto da qualche altra parte.

Dato un operatore NAND, allora possiamo costruire un gate NOT:

Given one input B
O = NAND(B, B)
Output O

Dato un operatore NAND e NOT, allora possiamo costruire un gate AND:

Given two inputs B1, B2
C = NAND(B1, B2)
O = NOT(C) // or NAND(C,C)
Output O

Possiamo costruire altre porte logiche in modo simile. Poiché la porta NAND è funzionalmente completa , è anche possibile costruire porte logiche con più di 2 ingressi e più di 1 uscita, non ho intenzione di discutere qui come costruire tali porte logiche.

Età dell'Illuminismo

Costruire una macchina di Turing da Boolean Gates

Una CPU è solo una versione più complicata di una Turing Machine. I registri della CPU sono lo stato interno della Turing Machine e la RAM è un nastro della Turing Machine.

Una macchina di Turing (CPU) può fare tre cose:

  • leggere uno 0 o 1 dal nastro (leggere una cella di memoria dalla RAM)
  • cambia il suo stato interno (cambia i suoi registri)
  • sposta a sinistra o a destra (leggi più posizioni dalla RAM)
  • scrivere uno 0 o 1 sul nastro (scrivere su una cella di memoria nella RAM)

Per il nostro scopo, stiamo costruendo la Turing Machine a 2 simboli a 3 stati di Wolfram usando la logica combinatoria (le CPU moderne utilizzerebbero il microcodice, ma sono più complesse di quanto sia necessario per il nostro scopo).

La tabella di stato della macchina di Turing Wolfram (2,3) è la seguente:

    A       B
0   P1,R,B  P2,L,A
1   P2,L,A  P2,R,B
2   P1,L,A  P0,R,A

Vogliamo ricodificare la tabella di stato sopra come tabella di verità:

Let I1,I2 be the input from the tape reader (0 = (0,0), 1 = (0,1), 2 = (1,0))
Let O1,O2 be the tape writer (symbol encoding same as I1,I2)
Let M be connected to the machine's motor (0 = move left, 1 = move right)
Let R be the machine's internal state (A = 0, B = 1)
(R(t) is the machine's internal state at timestep t, R(t+1) at timestep t+1)
(Note that we used two input and two outputs since this is a 3-symbol Turing machine.)

      R  0          1
I1,I2
(0,0)    (0,1),1,1  (1,0),0,0
(0,1)    (1,0),0,0  (1,0),1,1
(1,0)    (0,1),0,0  (0,0),1,0

The truth table for the state table above:

I1  I2  R(t) | O1  O2  M   R(t+1)
-------------+--------------------
0   0   0    | 0   1   1   1
0   0   1    | 1   0   0   0
0   1   0    | 1   0   0   0
0   1   1    | 1   0   1   1
1   0   0    | 0   1   0   0
1   0   1    | 0   0   1   0

Non costruirò davvero un tale gate logico (non sono sicuro di come disegnarlo in SE e probabilmente sarà abbastanza enorme), ma poiché sappiamo che il gate NAND è funzionalmente completo , allora abbiamo un modo per trovare una serie di porte NAND che implementeranno questa tabella di verità.

Una proprietà importante di Turing Machine è che è possibile emulare un computer con programma memorizzato utilizzando una macchina Turing che ha solo una tabella di stati fissa. Pertanto, qualsiasi Universal Turing Machine può leggere il suo programma dal nastro (RAM) invece di dover codificare le istruzioni nella tabella di stato interna. In altre parole, la nostra (2,3) Turing Machine può leggere le sue istruzioni dai pin I1, I2 (come software) invece di essere hardcoded nell'implementazione della porta logica (come hardware).

microcodici

A causa della crescente complessità delle moderne CPU, diventa proibitivamente difficile utilizzare la sola logica combinatoria per progettare un'intera CPU. La CPU moderna è di solito progettata come interprete di istruzioni di microcodici; un microcodice è un piccolo programma incorporato nella CPU che viene utilizzato dalla CPU per interpretare il codice macchina effettivo. Questo stesso interprete di microcodici è generalmente progettato usando la logica combinatoria.

Register, Cache e RAM

Abbiamo dimenticato qualcosa sopra. Come ricordiamo qualcosa? Come implementiamo il nastro e la RAM? La risposta è in un componente elettronico chiamato condensatore. Un condensatore è come una batteria ricaricabile, se viene caricato un condensatore manterrà elettroni extra e può anche restituire elettroni ai circuiti.

Per scrivere su un condensatore, riempiamo il condensatore di elettrone (scrivi 1) o dreniamo tutti gli elettroni nel condensatore fino a quando non è vuoto (scrivi 0). Per leggere il valore di un condensatore, proviamo a scaricarlo. Se, quando proviamo a scaricare, non c'è elettricità che scorre, allora il condensatore è vuoto (leggi 0), ma se rileviamo elettricità, allora il condensatore deve essere caricato (leggi 1). Potresti notare che la lettura di un condensatore esaurisce il suo deposito di elettroni, le moderne RAM hanno i circuiti per ricaricare periodicamente il condensatore in modo che possano conservare la loro memoria finché c'è elettricità.

Esistono diversi tipi di condensatori utilizzati in una CPU, i registri della CPU e le cache CPU di livello superiore sono realizzate utilizzando "condensatori" ad altissima velocità che sono effettivamente costruiti da transistor (quindi non c'è quasi nessun "ritardo" da cui leggere / scrivere) loro), questi sono chiamati RAM statica (SRAM); mentre la RAM della memoria principale viene prodotta utilizzando una potenza inferiore, ma condensatori più lenti e molto più economici, questi vengono chiamati RAM dinamica (DRAM).

Orologio

Un componente molto importante di una CPU è l'orologio. Un orologio è un componente che "spunta" regolarmente per sincronizzare l'elaborazione. Un orologio in genere contiene un quarzo o altri materiali con periodo di oscillazione noto e relativamente costante, e i circuiti di clock mantengono e misurano questa oscillazione per mantenere il suo senso del tempo.

Le operazioni della CPU vengono eseguite tra i tick di clock e read / write vengono eseguiti nei tick per garantire che tutti i componenti si muovano in modo sincrono e non si calpestino l'uno con l'altro mentre si trovano in stati intermedi. Nella nostra (2,3) Turing Machine, tra le ticchettature dell'orologio l'elettricità passa attraverso le porte logiche per calcolare l'uscita dall'ingresso (I1, I2, R (t)); e nei segni di spunta dell'orologio, il masterizzatore scriverà O1, O2 sul nastro, il motore si sposterà in base al valore di M e il registro interno viene scritto dal valore di R (t + 1), quindi il lettore di nastri leggerà il nastro corrente e caricherà I1, I2 e il registro interno verrà riletto su R (t).

Parlare con le periferiche

Notare come la (2,3) Turing Machine si interfaccia con il suo motore. Questa è una visione molto semplificata di come una CPU può interfacciarsi con un hardware arbitrario. L'hardware arbitrario può ascoltare o scrivere su un filo specifico per ingressi / uscite. Nel caso della (2,3) Turing Machine, la sua interfaccia con il motore è solo un singolo filo che indica al motore di girare in senso orario o antiorario.

Ciò che non viene detto in questa macchina è che il motore doveva avere un altro "orologio" che funziona in sincronia con l '"orologio" interno della Macchina per sapere quando avviare e interrompere il funzionamento, quindi questo è un esempio di una trasmissione di dati sincrona . L'altra alternativa comunemente usata, la trasmissione asincrona utilizza un altro filo, chiamato linea di interruzione, per comunicare i punti di sincronizzazione tra la CPU e il dispositivo asincrono.

Era digitale

Codice macchina e assemblaggio

Il linguaggio assembly è un mnemonico leggibile dall'uomo per i codici macchina. Nel caso più semplice, esiste un mapping uno a uno tra assembly e codice macchina; sebbene nei moderni linguaggi di assemblaggio alcune istruzioni possano essere associate a più codici operativi.

Linguaggio di programmazione

Conosciamo tutti questo no?


Uff, finalmente finito, ho digitato tutto questo in sole 4 ore, quindi sono sicuro che c'è un errore da qualche parte (sono principalmente un programmatore, non un ingegnere elettrico né fisici, quindi potrebbero esserci diverse cose che sono palesemente sbagliate). Per favore, se hai trovato un errore, non esitare a dare un @yell o risolverlo tu stesso se hai il rappresentante o crei una risposta complementare.


37
" fantastico " non gli rende giustizia. Questa risposta è decisamente eroica .
njd,

1
La parte degli atomi non è errata? Generalmente essi saranno ionizzare formare atomi caricati piuttosto che rimanere neutrale in modo da avere una sottoshell esterno completo.
alternativa il

3
+1, +1000 se potessi. Ciò che è veramente sorprendente per me, e perché amo questo campo, è che la grande ampiezza di informazioni in questa risposta non inizia a malapena a graffiare la superficie della straordinaria profondità della tecnologia che fa funzionare un PC moderno.
Quentin-starin,

Merda santa. È fantastico Vorrei poter fare più di un voto una volta.
Rob P.

3
+1 anche se sento che dovrei notare che l'hardware moderno non è esattamente fatto tramite porte NAND. Ci sono porte, sì, ma sono davvero piuttosto complesse e solo (solitamente) logiche NAND approssimative; i vincoli sono praticamente fisici. I gate fisici vengono prima assemblati in moduli logici, che potrebbero essere una NAND classica ma di solito sono piuttosto più (ad esempio, flip-flop o half-adder). L'insieme esatto di porte consentite dipende dallo stile logico utilizzato e dai vincoli dell'impianto di fabbricazione; non tutti i fab possono costruire tutto. (Aaargh! Sto iniziando a ricordare i dettagli! Aiuto!)
Donal Fellows il

12

Da Nand a Tetris in 12 passaggi

Penso che questo sarà assolutamente perfetto per te:

Da Nands a Tetris in 12 passaggi


grazie per il link, guardandolo ora. C'è un indice centrale di questi discorsi o ti è capitato di vederlo da qualche parte su un blog?
jhocking

Non sono sicuro, questo particolare è emerso mentre navigavo un giorno
Darknight,

Ha perso un 13 ° passo: wafer di silicio.
Giobbe

grazie per averlo pubblicato! Questo è fondamentalmente il riassunto del programma del corso che l'autore dei colloqui nelle lezioni video presso IDC in Israele, e si basa sul suo libro - Ho pubblicato un link al libro nella mia risposta.
littleadv,

Questo sito è lo stesso materiale? Perché sembra che sia molto meglio organizzato di un solo grande video nand2tetris.org
jhocking

10

Se hai fatto il montaggio, ci sono davvero solo due o tre livelli da capire:

  • Porte logiche , che è il modo in cui la logica viene implementata tramite elettroni in movimento - qui diventa una domanda elettronica
  • Progettazione della CPU e del sistema, ovvero il modo in cui le porte logiche sono composte per formare una CPU e collegate con RAM e periferiche. Le CPU moderne sono estremamente complesse, ma per il tuo desiderio di capire come funzionano le cose, dovrebbe essere sufficiente guardare una CPU semplice classica come la Z80 .
  • Microcodice , ovvero le modalità di interpretazione e trasformazione delle istruzioni di assemblaggio in azioni a livello hardware di registri e circuiti logici.

L'ultimo (Microcode) è ciò che lo ha reso "clic" per me, perché ha riempito il divario tra elettronica e codice.


Forse è il microcodice che mi manca. Ho preso lezioni di porte logiche e progettazione di CPU / sistemi, programmato in assembly e imparato tutto sui comandi binari (e fatto bene in tutte quelle classi), ma non riuscivo ancora a dirti come diamine si adatta. Dovrò ricercare il microcodice.
Casey Patton,

@Casey: è possibile che sia davvero quello che ti stai perdendo. Per me, conoscere (e scrivere un po ') di microcodice era esattamente dove pensavo: OK, ora capisco come funzionano i computer. Certo, sono diventati così complessi che puoi ancora facilmente imbatterti in situazioni che sembrano impossibili da capire, ma sono abbastanza convinto che una tale situazione possa essere compresa se sei competente, persistente e investi abbastanza tempo.
Michael Borgwardt,

7

Un esempio per un programma di studi universitari CS che spiega esattamente ciò che hai chiesto può essere trovato qui (corso IDC.AC.IL CS101) . Si basa su questo libro di stampa del MIT: " Gli elementi dei sistemi informatici: costruire un computer moderno dai primi principi ".


1
+1 per menzionare "Gli elementi dei sistemi informatici". È un ottimo libro e dovrebbe rispondere esattamente alla domanda "Come funzionano i computer?".
Cedric,

ti dispiacerebbe spiegare di più su ciò che fanno queste risorse e perché le consigli a rispondere alla domanda posta? Le "risposte solo link" non sono del tutto benvenute allo Stack Exchange
moscerino del


4

Consiglio vivamente il codice di Charles Petzold. Il libro è sia una lezione di storia che una panoramica tecnica su come costruire un computer. Iniziando con la spiegazione di semplici interruttori telegrafici, il libro dimostra come funzionano i transistor, quindi a porte logiche, computer programmabili, a cose più complesse. È anche molto ben scritto e probabilmente potrebbe essere afferrato da chiunque abbia abbastanza curiosità.


3

Sarà troppo difficile (e lungo!) Elencare tutto ciò che potresti aver bisogno di sapere per ottenere una comprensione sufficiente di ciò che devi sapere. Un famoso libro che risponde effettivamente a tutte queste domande è di Andrew Tanenbaum: Structured Computer Organization .

Questo libro in realtà ti porta dal computer fisico sulla tua scrivania fino alle porte logiche e all'algebra booleana, quindi mostra un'architettura di esempio che ti guida attraverso come tutto accade effettivamente in un tale sistema.

(Una nota: è molto costoso poiché è di circa 800 pagine. Probabilmente è buono solo per ottenere una versione di seconda mano o un'edizione precedente. I concetti non sono cambiati.)


2

Beh, ci vogliono un sacco di palle per dirlo e chiedo, suppongo.

Praticamente il codice viene ridotto sempre più in basso a un codice di livello inferiore più complicato. Giù al codice a livello di assieme con i registri push e move ... ecc ...

Quindi l'hardware prende questo codice e agisce su di esso. La maggior parte delle volte l'hardware avrà effettivamente le proprie istruzioni su come fare le cose. Quindi potrebbe esserci una semplice istruzione come PUSH in cui un registro (posizione della memoria) ottiene un valore come 1 o 2 o qualsiasi altra cosa.

È sicuramente una domanda al computer. E anche di programmazione. Alcuni programmatori programmano l'hardware che prenderà il tuo codice e lo farà fare anche se a un livello molto basso. È anche una domanda di elettronica.


1

Ci sono dispositivi.

Quindi ci sono driver di dispositivo che interagiscono con questi dispositivi. Parte scritta in C, parte in assemblaggio in genere.

Il sistema operativo interagisce con il software applicativo da un lato e i driver di dispositivo dall'altro per comunicare con l'hardware effettivo.

Se sei davvero interessato, perché non fare un hacking del kernel Linux per saperne di più?


Grazie per la risposta e il suggerimento. Sembra un'ottima idea!
Rob P.

1

Al centro delle cose si tratta di una domanda di elettronica, anche se le basi di questo avrebbero dovuto essere trattate nel corso del sondaggio per qualsiasi grado CS. Tutto l'hardware agisce in base a gate programmati a livello di componente. Queste sono le operazioni logiche più basilari: NOT, AND, OR, XOR, NAND, NOR. Ogni cancello ha una funzione specifica:

La porta NOT accetta un valore di input e produce un valore di output, ottiene uno 0 o 1 e genera l'opposto.

La porta AND accetta due valori di input e produce un valore di output, ottiene qualsiasi combinazione di 0 e 1 e genera 0 per qualsiasi combinazione eccetto due, per cui emette un 1.

Il gate OR funziona in modo molto simile al gate AND, ma produrrà un 1 per ogni combinazione di 0 e 1 che ottiene tranne due zeri, per i quali genera uno 0.

La porta XOR è di nuovo simile a entrambe le porte AND e OR, ma produrrà uno 0 quando entrambi gli ingressi sono uguali e un 1 quando entrambi gli ingressi sono diversi.

La porta NAND è l'opposto logico della porta AND e la porta NOR è l'opposto logico della porta OR.

In altre parole, a livello hardware, tutto si riduce alla più elementare delle espressioni logiche binarie. Tutto il resto è solo una transizione da un livello superiore di programmazione a un livello inferiore fino a raggiungere quest'ultimo livello.


+1 Il livello successivo è come eseguire un comportamento sequenziale con queste porte logiche. Il componente chiave è il flip-flop . Assembla porte logiche per formare un ALU, qualche infradito per i registri, un orologio e ottieni una CPU.
mouviciel,

@mouviciel Hai dimenticato i multiplexer.
Starblue,


1

Anche se trovo sconcertante che qualcuno possa completare un corso in CS senza capire l'hardware, suppongo sia del tutto possibile che un corso possa concentrarsi solo sulla teoria come un ramo della matematica, piuttosto che sui dettagli di ingegneria e implementazione. Le venerabili conferenze SICP (come tenute negli anni '80) sembravano essere così.

Nel mio corso CS, due decenni fa, una prima edizione di Computer: dalla Logica all'architettura era richiesta la lettura nel primo anno.
Qualcosa del genere dovrebbe colmare le lacune.

In alternativa, gli Open Courseware del MIT dovrebbero avere qualcosa che possa aiutare.

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.