È risaputo che il codice è scritto da uno sviluppatore e come gli esseri umani comunicano con i computer. Tuttavia, hai mai pensato a come un software come il codice interagisce con l'hardware del computer come una CPU (Central Processing Unit)? Se la risposta è sì, allora sei capitato nel posto giusto.

Per capire come viene eseguito il codice su un computer, devi capire cosa fa funzionare un computer e come può essere manipolato. Innanzitutto, parliamo prima delle idee fondamentali dell'hardware del computer prima di passare al lato software delle cose.

Cos'è il binario?

Binary è un sistema di numeri in base 2 che i processori e la memoria utilizzano per eseguire il codice. I numeri binari possono essere solo 1 o 0, da cui il nome. Se raggruppi otto numeri binari (00000000), ottieni quello che è noto come byte, mentre un singolo numero binario (0) è chiamato bit.

Come un semplice interruttore produce segnali binari

Tutto ciò che è logico nell'elaborazione con le macchine inizia con il semplice passaggio. Un semplice interruttore ha due conduttori e un meccanismo di connessione e disconnessione. Il collegamento di entrambi i conduttori consente il flusso di corrente, che produce un segnale all'altra estremità del conduttore. D'altra parte, se i conduttori sono scollegati, la corrente non scorrerà, il che significa che non verrà prodotto alcun segnale.

instagram viewer

Credito immagine: 991joseph/Wikimedia Commons

Poiché un interruttore può essere acceso o spento solo in un'istanza, forniscono il meccanismo ideale per creare i segnali alti e bassi utilizzati per produrre segnali ad onda quadra.

Quando si preme un interruttore, si produce un segnale o un bit di dati. Una normale foto scattata da uno smartphone sarebbe di circa cinque Megabyte di dati, pari a 40.000.000 di bit. Ciò significherebbe che dovrai premere l'interruttore decine di milioni di volte solo per produrre dati sufficienti per una foto scattata dal tuo smartphone.

Con le limitazioni meccaniche di un interruttore, gli ingegneri avevano bisogno di qualcosa che non avesse parti mobili e fornisse velocità di commutazione più elevate.

Transistor usati come interruttori

Credito immagine transistor: Evan-Amos/Wikimedia e Immagine dell'onda quadra Credito: Sponk/Wikimedia

Grazie alla scoperta del doping (manipolazione della conduttività elettrica dei semiconduttori come il silicio), gli ingegneri sono stati in grado di realizzare interruttori controllati elettricamente noti come transistor. Questa nuova invenzione ha consentito velocità di elaborazione più elevate che richiedevano poca tensione per l'alimentazione, rendendo infine possibile impilare oltre un miliardo di questi transistor su una singola CPU moderna.

Che cos'è l'architettura della CPU?

I transistor sono quindi disposti in modo intelligente per realizzare porte logiche, mezzi sommatori, sommatori, infradito, multiplexer, registri e vari componenti che rendono funzionale la CPU. Il modo in cui questi componenti sono stati impilati definisce la cosiddetta architettura della CPU.

L'architettura della CPU determina anche l'ISA (Instruction Set Architecture) del processore. Un ISA contiene un elenco integrato di istruzioni che una CPU può eseguire in modo nativo. Queste istruzioni vengono quindi mixate in sequenza attraverso un linguaggio di programmazione per creare ciò che è noto come programma. Di solito, centinaia di istruzioni sono prontamente disponibili su una CPU, tra cui addizione, sottrazione, spostamento, salvataggio e caricamento.

Ecco un esempio di un set di istruzioni:

Esempio di set di istruzioni

Ogni istruzione in un set di istruzioni ha il proprio indirizzo binario noto come codice operativo. L'opcode saranno i primi bit binari che indicano quale operazione dal set di istruzioni utilizzare.

Sintassi-istruzione-assieme

Dopo l'opcode c'è l'operando. L'operando contiene valori e indirizzi in cui verrà utilizzato il codice operativo.

Il diagramma mostra un'istruzione a 8 bit. Se una CPU ha un'architettura a 64 bit, le istruzioni possono estendersi fino a 64 bit in larghezza di istruzione, rendendolo un processore più capace.

Imparentato: In cosa differiscono le CPU RISC e CISC?

L'assemblatore

Ora che hai compreso i segnali binari, puoi imparare come il tuo computer interpreta tali segnali. Il modo in cui il codice macchina deve essere interpretato dipende dal tipo di logica utilizzata su un assembler (un programma di basso livello utilizzato per decodificare e assemblare il codice in un binario corretto).

Ad esempio, se il nostro assemblatore utilizza lo standard ASCII (American Standard Code for Information Interchange), il nostro assemblatore prenderebbe il codice macchina fornito e lo interpreterebbe allo stesso modo dell'ASCII nella tabella qui di seguito.

00101001 UN 00101111 G 00110101 m 00111011 S 01000001
00101010 B 00110000 h 00110110 n 00111100 T 01000010 Z
00101011 C 00110001 io 00110111 0 00111101 tu
00101100 D 00110010 J 00111000 P 00111110 V
00101101 E 00110011 K 00111001 Q 00111111 W
00101110 F 00110100 l 00111010 R 0100000 X

Poiché il nostro assemblatore utilizza ASCII (versione a 8 bit), ogni otto numeri binari nel binario vengono interpretati come un carattere. L'assemblatore prenderebbe questo byte e lo interpreterebbe secondo gli standard forniti. Ad esempio, 01000001 01101001 01010100 si tradurrebbe nella parola "bit".

Comprensione del linguaggio assembly

Assembly Language è un linguaggio di programmazione di basso livello leggibile dall'uomo che manipola direttamente gli opcode e gli operandi dell'architettura della CPU.

Ecco un esempio di un semplice codice assembly che utilizza il set di istruzioni mostrato in precedenza:

1. LODA #5 
2. LODB #7
3. AGGIUNGI R3
4. STRE M12

Questo blocco di codice viene memorizzato nella RAM finché la CPU non recupera ogni riga di codice una per una.

Il ciclo di recupero, decodifica ed esecuzione della CPU

La CPU esegue il codice attraverso un ciclo noto come Fetch, Decode ed Execute. Questa sequenza mostra come una CPU elabora ogni riga di codice.

Andare a prendere: Il contatore di istruzioni all'interno della CPU prende una riga di istruzioni dalla RAM per far sapere alla CPU quale istruzione eseguire successivamente.

Decodificare: L'Assembler decodificherà il blocco di codice leggibile dall'uomo e lo assemblerà come binari correttamente formattati affinché il computer lo capisca.

1. 00010101 
2. 00100111
3. 00110011
4. 01011100

Eseguire: La CPU esegue quindi i binari applicando le istruzioni indicate dall'opcode agli operandi forniti.

Il computer lo farà eseguire esso come segue:

  1. Carica il primo registro con 5
  2. Carica il secondo registro con 7
  3. 5 + 7 = 12, salva 12 nel terzo registro
  4. Memorizza il valore del terzo registro all'indirizzo RAM M12

Il computer ha sommato correttamente due numeri e memorizzato il valore nell'indirizzo RAM specificato.

Grande! Ora sai come un computer esegue il codice. Tuttavia, non si ferma qui.

Andare avanti

Con l'hardware appropriato, un assemblatore e un linguaggio assembly, le persone potrebbero eseguire il codice con ragionevole facilità. Tuttavia, poiché sia ​​i programmi che l'hardware del computer sono diventati ancora più complessi, ingegneri e programmatori hanno dovuto pensa a un modo per rendere la programmazione meno noiosa e garantire la compatibilità con diversi tipi di CPU architettura. Così la creazione di compilatori e interpreti.

Che cos'è un compilatore e un interprete?

Il compilatore e l'interprete sono programmi di traduzione che prendono il codice sorgente (programmi fatti da linguaggi di programmazione di alto livello) e tradurli in linguaggio assembly, che verrà quindi decodificato dall'assemblatore al binario.

Un interprete prenderà una riga di codice e la eseguirà immediatamente. Di solito viene utilizzato su terminali come il terminale Linux Bash Shell e il terminale Windows PowerShell. Ottimo per eseguire semplici attività una tantum.

Credito immagine: Rlistmedia/Wikimedia Common

Al contrario, a compilatore prenderà più righe di codice e le compilerà per creare un programma. Esempi di questi programmi sarebbero Microsoft Word, Photoshop, Google Chrome, Safari e Steam.

Con la creazione di compilatori e interpreti sono stati creati linguaggi di programmazione di alto livello.

Linguaggi di programmazione di alto livello

I linguaggi di programmazione di alto livello sono qualsiasi linguaggio dopo il codice assembly. Alcuni di questi linguaggi con cui potresti avere familiarità sono C, Python, Java e Swift. Questi linguaggi di programmazione hanno reso la programmazione più leggibile e più semplice rispetto al linguaggio assembly.

Ecco un confronto fianco a fianco per illustrare quanto sia più difficile programmare in assembly rispetto a un linguaggio di programmazione di alto livello come Python:

Entrambi i codici stamperanno "Hello World".

Con questi linguaggi di programmazione, gli sviluppatori possono programmare giochi, siti Web, applicazioni e driver in tempi ragionevoli.

Imparentato: Python contro Java: la migliore lingua per il 2022

I computer possono eseguire qualsiasi tipo di codice

Un computer è un dispositivo che può leggere solo binari. Questi binari sono prodotti da oltre un miliardo di transistor di dimensioni microscopiche racchiusi all'interno di una CPU. La disposizione dei transistor determina l'ISA (Instruction Set Architecture) di una CPU, che fornisce centinaia di istruzioni che una CPU può eseguire prontamente una volta che il suo codice operativo viene richiamato tramite il codice. Gli sviluppatori combinano e abbinano queste istruzioni in sequenza, creando un intero programma come motori di gioco, browser Web, applicazioni e driver.

Una CPU esegue il codice attraverso una sequenza nota come ciclo di recupero, decodifica ed esecuzione. Una volta che un pezzo di codice è stato caricato nella RAM, la CPU recupererà i suoi contenuti uno per uno, decodificherà i contenuti in binario tramite l'assemblatore e quindi eseguirà il codice.

Poiché l'assemblatore può tradurre solo codice creato esplicitamente per l'architettura della CPU, compilatori e gli interpreti sono stati costruiti sopra l'assemblatore (molto simile a un adattatore) per funzionare su diversi tipi di CPU architettura. Un interprete prenderà un comando e lo eseguirà immediatamente. Al contrario, un compilatore prenderà tutti i tuoi comandi e li compilerà in un programma riutilizzabile.

Linguaggi di programmazione di alto livello come Python, C e Java sono stati creati per rendere la programmazione più semplice, veloce e conveniente. La grande maggioranza dei programmatori non deve più codificare in linguaggio assembly, poiché i loro linguaggi di programmazione di alto livello di facile utilizzo possono essere tradotti nell'assembly tramite un compilatore.

Si spera che ora tu abbia una migliore comprensione dei fondamenti dei computer e di come eseguono il codice.

Come funziona un computer e cosa c'è dentro?

È una domanda semplice, ma su cui tutti si riflettono di tanto in tanto: come funziona effettivamente quel computer davanti a te?

Leggi Avanti

CondividereTweetE-mail
Argomenti correlati
  • La tecnologia spiegata
  • Programmazione
  • Processore per computer
  • in lavorazione
Circa l'autore
Jayric Maning (5 Articoli Pubblicati)

Desiderando imparare come funzionavano le cose, Jayric Maning ha iniziato ad armeggiare con tutti i tipi di dispositivi elettronici e analogici durante la sua prima adolescenza. Ha frequentato scienze forensi presso l'Università di Baguio, dove ha familiarizzato con l'informatica forense e la sicurezza informatica. Attualmente sta studiando da solo e armeggiando con la tecnologia per capire come funzionano e come possiamo usarli per rendere la vita più facile (o almeno più interessante!).

Altro da Jayric Maning

Iscriviti alla nostra Newsletter

Iscriviti alla nostra newsletter per suggerimenti tecnici, recensioni, ebook gratuiti e offerte esclusive!

Clicca qui per iscriverti