Il computer per programmatori

Alessandro Bugatti

Aggiornato al 09/12/2015

Dal punto di vista di un programmatore il computer può essere semplicemente visto come lo strumento attraverso il quale vengono realizzati i propri programmi e la conoscenza dello schema concettuale potrebbe eventualmente essere ignorata. Di fatto però avere almeno un’idea anche solo approssimativa di quali sono e che funzioni svolgono i componenti principali può essere d’aiuto nella comprensione di alcuni aspetti della programmazione che altrimenti potrebbero sfuggire. Verrà quindi analizzato il computer nelle sue parti essenziali e di esse ne verrà data una descrizione non approfondita, ma che dovrebbe aiutare chi programma a farsi un’idea del funzionamento di un calcolatore.

Architettura di un calcolatore

Il calcolatore deve la sua struttura concettuale [A]  [A] Un’idea di qualche anno precedente è quella della macchina di Turing, proposta dal matematico inglese Alan Turing nell’ambito del problema della calcolabilità degli algoritmi. Però mentre questa è un modello astratto, la macchina di Von Neumann è una proposta per un’architettura fisica concreta per una macchina programmabile. alle idee di John Von Neumann, scienziato ungherese che negli anni Quaranta del Novecento propose lo schema di figura 1↓ che si può applicare ancora ai calcolatori moderni.
figure macchina_von_neumann.png
Figure 1 Architettura di Von Neumann
Essendo uno schema concettuale non rappresenta la struttura fisica di un computer quanto piuttosto le funzioni che si ritroveranno all’interno di un calcolatore indipendentemente dalla sua forma (PC, smartphone, calcolatrice programmabile, ecc.).
Vedremo adesso le varie parti come vengono attualmente implementate in un calcolatore fisico.

Il processore

Il processore (CPU o Central Processing Unit in inglese) è quello che spesso viene definito il “cervello” del computer: infatti esso è il dispositivo deputato al controllo della macchina e all’esecuzione delle istruzioni che gli vengono impartite dai programmi. Fisicamente si tratta di un circuito integrato, cioè un “pezzetto” di silicio di forma generalmente quadrata, al cui interno sono stati fotoincisi dei componenti [B]  [B] All’interno di un circuito al altissima integrazione come un processore possono essere contenuti da qualche milione a qualche miliardo di transistor. e dei circuiti che nel complesso costituiscono la logica di funzionamento del dispositivo. Per un programmatore il parametro più interessante che caratterizza un processore è la sua velocità, misurata in Hz: i computer attuali hanno velocità di clock dell’ordine dei Ghz [C]  [C] 1 Ghz (letto Giga Hertz) corrisponde a una frequenza di un miliardo di cicli al secondo. e quindi si può dire, anche se in realtà è una semplificazione, che sono in grado di eseguire miliardi di operazioni in un secondo. Questo in generale fa si che i programmi che devono girare su un computer moderno non siano in generale affetti da problemi di performance e quindi il programmatore possa concentrarsi sul compito da risolvere e non sull’efficienza delle istruzioni che utilizzerà per risolverlo, anche se ci sono applicazioni (ad esempio i videogiochi) o contesti (macchine con processore dalla velocità molto limitata) nei quali il programmatore dovrà invece preoccuparsi anche dei problemi di prestazioni. Nello schema di figura 1↑ la CPU è composta dall’unità di controllo e dall’unità aritmetico-logica.

La memoria

Quando si parla di memoria in genere ci si riferisce alla memoria RAM (Random Access Memory), che è la parte di computer dove “vivono” i programmi quando vengono eseguiti. La memoria serve appunto per registrare delle informazioni che rappresentano sia le istruzioni che dovrà eseguire la CPU sia i dati su cui esse lavoreranno. Nel caso della memoria il parametro che più interessa un programmatore è la sua dimensione, che viene misurata in multipli del byte [D]  [D] Il byte è formato da 8 bit, cioè contiene otto informazioni di tipo binario, che quindi possono rappresentare 256 stati diversi. Le memorie odierne vanno dalle centinaia di MB (Megabyte) a qualche GB (Giga Byte). Anche in questo caso, date le dimensioni abbondanti delle memorie odierne, il programmatore non avrà grossi problemi di ottimizzazione dello spazio nella realizzazione dei propri programmi, anche se vale lo stesso discorso fatto con la velocità del processore, che cioè ci sono contesti o applicazioni in cui è importante non sprecare spazio. In figura 3↓ si può vedere una rappresentazione schematica di una memoria RAM.
figure stamps_RAM.png
Figure 2 Memoria RAM
La memoria RAM è in grado di contenere le informazioni solamente se è alimentata, in caso contrario vengono perse. Quando ad esempio il computer viene messo in stand by, vengono spenti una serie di componenti (ad esempio gli hard disk, il processore,…), ma la memoria viene mantenuta alimentata, in modo da poter ritornare velocemente alla situazione preesistente prima dello stand by, senza perdere nulla. Quando invece il computer viene messo in ibernazione, viene tolta l’alimentazione da tutti i componenti e il contenuto della RAM viene salvato sul disco fisso, che come vedremo è invece in grado di trattenere le informazioni anche in mancanza di alimentazione.
Infine dal punto di vista di un programmatore (soprattutto se usa linguaggi di programmazione che permettono l’accesso diretto alla memoria come il C) la memoria può essere vista come una sequenza di caselle, ognuna contenente un’unità di informazione, numerate partendo da 0 fino alla dimensione massima della memoria.

Le memorie di massa

Con il termine memorie di massa vengono intesi tutti quei dispositivi che sono in grado di memorizzare l’informazione e di mantenerla per un tempo indefinito, anche se non vengono alimentati. Fra questi possiamo indicare gli hard disk (o dischi fissi),sia di tipo meccanico che SSD, le penne USB, i CD e i DVD, come si può vedere in figura 3↓.
figure memorie.png
Figure 3 Memorie di massa
Anche in questo caso la caratteristica più significativa è la capacità di immagazzinare informazioni che, come per le memorie RAM, si misura in multipli del byte: i dischi fissi moderni hanno taglie dell’ordine delle centinaia di GB e in alcuni casi anche del TB (Tera Byte).
I programmi sono in genere memorizzati nel disco fisso del computer e quando vengono mandati in esecuzione vengono spostati dalla memoria di massa alla memoria RAM: si può dire che mentre i programmi su disco sono un’immagine statica contenente una serie di istruzioni, i programmi in esecuzione nella RAM sono un’immagine dinamica, che contiene i dati e il reale stato di esecuzione di un programma in quel particolare momento.

Periferiche di input/output(I/0)

I computer sono stati creati per essere utilizzati dagli umani e quindi hanno bisogno di un qualche dispositivo per comunicare e scambiare dati con il mondo esterno. Se nei primi anni di vita dei computer (intorno agli anni 40-50 del Novecento) questi dispositivi erano piuttosto rozzi e di difficile utilizzo (ad esempio le schede perforate), adesso possiamo interagire con il computer utilizzando tastiere, visualizzando il risultato attraverso monitor a colori e nel futuro potrebbero inventare periferiche che renderanno ancora più semplice l’interazione con il computer. In figura 4↓ si possono vedere alcune delle periferiche di IO più comuni, ma l’elenco potrebbe essere molto più lungo.
figure IO.png
Figure 4 Tastiera, mouse, monitor, stampante

Altre periferiche

All’interno del computer, oltre a quelle appena descritte, esistono molte altre periferiche e dispositivi, alcuni necessari e altri non indispensabili, di cui si daranno brevi cenni, senza la pretesa di essere esaustivi:

Esercizi

  1. Elencare le caratteristiche dei dispositivi che compongono il proprio computer, seguendo l’elenco proposto nel presente articolo. Eventualmente utilizzare il freeware HWiNFO nella versione portable per avere un maggior numero di informazioni sull’hardware contenuto nel proprio computer.
  2. Indicare altre periferiche di IO di cui si è a conoscenza, oltre a quelle indicate nel testo.
  3. Per ogni paragrafo del presente articolo assicurati di saperlo spiegare con parole tue a una persona non esperta di computer.