L'istruzionedi salto assume vari nomi nei linguaggi di programmazione quali goto, branch, jump ecc.
La principale osservazione da fare è che l'istruzione di salto non è esecutiva (come ad esempio multiply, add e move) ma è una istruzione di controllo cioè comanda lo svolgimento delle istruzioni esecutive (che ad esempio moltiplicano, sommano, muovono i dati). C'è un netto distacco tra le due tipologie perché le istruzioni di controllo modificano l'esecuzione delle seconde, si può dire che ne dirigono il lavoro.

In particolare le istruzioni esecutive vengono svolte una dietro l'altra, e jump comanda che invece di andare in sequenza si vada ad eseguire un'altra istruzione opportunamente contrassegnata. Nel seguente caso, l'istruzione di salto fa lavorare 'calcola x' invece di 'move' posta subito sotto

 

Questo è un esempio di salto incondizionato. Più complesso è il salto condizionato il quale si abbina all'istruzione di confronto che è la seconda istruzione di controllo.
L'istruzione di confronto - chiamata anche analyze o compare - confronta due dati fra loro e fornisce il risultato del confronto. Il salto condizionato è dunque formato da un compare e da un goto; produce l'esecuzione di una istruzione esecutiva a seconda del risultato del confronto.

I salti condizioniati ed incondizionati servono per capire le proprietà di base della programmazione ma non sono consigliati nella pratica. In loro vece si usano le macro-istruzioni o strutture di controllo. Mediante queste potenti istruzioni i programmatori organizzano il lavoro che si dovrà compiere.


1)  La più nota macro è:

IF (a)
THEN (b1)
ELSE (b2)
END-IF

Comanda l'esecuzione del blocco di istruzioni (b1) se la condizione (a) è vera, altrimenti vengono eseguite le istruzioni (b2).

2)  La seguente struttura governa non due ma n alternative ciascuna delle quali viene controllata da una apposita condizione cioè se è vera la condizione ak allora scatta l'esecuzione bk abbinata

IF (a1)
THEN (b1)
IF (a2)
THEN (b2)
IF (a3)
THEN (b3)
....
....
IF (an)
THEN (bn)
END-IF

3)  L'ultima struttura di controllo comanda la ripetizione del blocco di istruzioni (b) finché resta vera la condizione (a)

DO WHEN (a)

(b)

END-DO

In circolazione ci sono diverse versioni di queste tre macro fondamentali che non dettagliamo perché riguardano i singoli linguaggi di programmazione.

Resta valido il contenuto generale cioè il ruolo di 'governo' che hanno le istruzioni sopra commentate. Il loro significato è completamente diverso da tutte le altre che eseguono calcoli, movimenti, ecc. e l'insegnante non mancherà di evidenziare questa basilare caratteristica.


anno 2010

180. Vorrei
un commento
sull'istruzione
jump

181. Non è forse vero che tutti i sistemi sono real-time?

La sua osservazione è certamente vera. Oggi tutti i nostri personal danno risposte immediate, in tempo reale ovvero genericamente parlando i nostri sono sistemi real-time.
Tuttavia il discorso è più complesso.


I computer sono chiamati a controllare produzioni, processi industriali, i voli degli aerei, il traffico automobilistico, la cura di un malato, le telecomunicazioni e tanti altri processi. Loro ricevono gli input dai sensori momento per momento e devono dare risposte immediate perché altrimenti la situazione potrebbe degenerare. Si pensi ad esempio al computer che controlla un degente in rianimazione. Il sistema lancia un allarme quando i parametri fisiologici superano una certa soglia. E' ovvio che la reazione della macchina corre sul filo delle frazioni di secondo.

I sistemi che controllano processi lavorano in tempo reale in quanto le loro reazioni sono misurate. La qualifica 'real-time' non è generica ma viene sottoposta a precise verifiche. Appositi collaudi controllano che la macchina non superi i valori prestabiliti.


anno 2010


Fino a tutti gli anni sessanta le case costruttrici tendevano a seguire una strategia marketing molto vantaggiosa per loro. I sistemi operativi ed altro materiale software era rigidamente proprietario, cioè uno comprava l'hardware da una casa ed era costretto a comperare anche il software dalla stessa casa produttrice. Anche se non c'erano vincoli teorici, in pratica non c'era alternativa. Il cliente non poteva muoversi tra vari fornitori per selezionare il prezzo più vantaggioso per lui quando comprava un sistema operativo o altro software.


Alcuni studiosi pensarono bene a sganciarsi da questa tendenza. Essi usavano piccoli computers - i predecessori dei moderni personal - costruiti da varie case e perciò pensarono ad un sistema operativo comune, una soluzione 'multipiattaforma' come diciamo oggi (vedi risposta 178).

Il sistema operativo è un programma che deve essere scritto in Assembler per cui prima gli esperti si dovettero attrezzare con un linguaggio tipo Assembler che fosse compatibile a varie macchine (per definizione invece un linguaggio Assembler è legato all'hardware (vedi risposta 86)).
Furono condotti diversi tentativi che confluirono nel
linguaggio B definito nel 1970 da Dennis Ritchie presso i laboratori della Bell Telephone. Questo stesso due anni più tardi preparò il linguaggio C rimasto fino ai nostri giorni.

Il cammino per arrivare ad Unix comprese varie tappe.
Verso il 1969 apparve un interessante prototipo denominato Multics. Poi venne il Gecos ed infine Dennis Ritchie insieme a Ken Thompson lavorò per preparare un sistema operativo Unics poi chiamato Unix, era il 1970. Tre anni più tardi la versione generalizzata venne scritta nel linguaggio C.


Il sistema operativo Unix presentava diverse innovazioni per quegli anni. In particolare era multiutente cioè vari operatori, individuati da un proprio 'username' lavoravano nello stesso momento da terminali diversi. Aveva la memoria virtuale (risposta 152). Era portabile cioè non dipendeva da una precisa ditta fornitrice. Infine era aperto al collegamento mediante i protocolli TCP/IP di Internet.

Queste ed altre qualità emergono tutt'oggi nella più popolare versione di Unix che prende il nome di Linux (vedi anche risposta 96).

 

 

anno 2010

182. Ci può
tracciare
una breve storia
di Unix?

183. Qual'è il significato del teorema del campionamento?

Un segnale analogico è di regola continuo mentre uno digitale è discreto. Nella pratica quando si deve tradurre un suono che è continuo in una stringa di bit è bene sapere con quale dettaglio il suono viene registrato in binario in modo che poi tale suono possa essere fedelmente riprodotto a partire dal binario. Il teorema del campionamento indica appunto le condizioni minimali per avere un buon sonoro.

Le operazioni che portano al passaggio tra analogico e discreto sono due.

1) Il segnale continuo viene campionato cioè ridotto in campioni o segnali discreti (v. figura).

2) I segnali discreti vengono codificati in binario.

 

 

Dalla figura si intuisce che più i campioni sono fitti e più essi riproducono fedelmente l'onda. Dunque il teorema stabilisce quanti campioni al secondo sono necessari per una buona riproduzione sonora, cioè fissa la frequenza Fc.

Un suono continuo è composto da onde sonore di varie frequenze: F1, F2, F3 ...Fn. Supponiamo che F1 sia la più piccola e Fn sia la frequenza sonora più alta.
Il teorema dice che la frequenza dei campioni non può essere inferiore al doppio della frequenza sonora massima presente nel suono originario

Fc > 2 Fn

Ad esempio la voce umana raggiunge alcune centinaia di Hz e per campionarla è sufficiente che Fc sia all'incirca 8 kHz (cioè 8.000 campioni al secondo). Per la musica classica dove i violini, i clarinetti eseguono trilli ed acuti vari, i campioni da prendere sono quattro volte più numerosi.


anno 2010