Software:
Nascita e Sviluppo
dal 1950 al 1975
Miele Romina
Saviano Angela
Torellini Maria
Storia dell’Informatica e del Calcolo Automatico
Prof. F. Perla
Tec/0044
Tec/0076
Tec/0040
Indice
† Definizione SW
† Realizzazione del SW
† Classificazione dei LP
† Evoluzione dagli anni ’50 al ‘75
Algol
Foltran Lisp
54
58
Cobol
59
Apl
61
Basic
64
Simula
67
Pascal
68
C
Prolog
70
72
† Definizione SO
† Compiti SO
† Evoluzione dei SO dagli anni ’50 al ‘75
2
Definizione Software
†
Il termine software ha origine durante la seconda guerra
mondiale. I tecnici dell'esercito inglese erano impegnati
nella decrittazione dei codici tedeschi di Enigma, di cui
già conoscevano la meccanica interna (detta hardware)
grazie ai servizi segreti polacchi.
†
Dopo il 1941, ad Enigma venne aggiunto un rotore, e il
team di criptanalisti inglesi, capitanati da Alan Turing, si
dovette interessare non più alla sua struttura fisica, ma
alle posizioni in cui venivano utilizzati i rotori della nuova
Enigma. Dato che queste istruzioni erano scritte su
pagine solubili nell'acqua per poter essere più facilmente
distrutte, e per contrasto con hardware, furono
chiamate software.
†
Il senso moderno del termine deriva dalle istruzioni date
ai computer, ed è stata utilizzata per la prima volta nel
1957 da John W. Tukey, noto statistico statunitense.
3
Classificazione
† All'interno del software si possono distinguere tre grandi
categorie:
- sistema operativo: è il programma responsabile del
diretto controllo e gestione dell'hardware che
costituisce un computer e delle operazioni di base. Si
occupa anche di controllare gli accessi degli utenti e
dei processi che vengono eseguiti.
- driver: il codice che permette ad un sistema operativo di
pilotare un dispositivo hardware, senza sapere come esso funzioni,
ma dialogandoci attraverso un'interfaccia standard.
- programma applicativo: cioè un software che viene utilizzato per i
bisogni dell’utente finale: dai programmi per l'ufficio ai videogiochi .
4
Realizzazione del Software
†
†
†
†
†
†
Un software viene normalmente realizzato utilizzando uno o più linguaggi di
programmazione.
Un linguaggio di programmazione è un linguaggio formale dotato di una
sintassi ben definita e si usa per scrivere programmi per calcolatori in una
forma più vicina al linguaggio umano .
L'alternativa sarebbe scrivere direttamente le istruzioni nel codice
macchina del particolare processore, un compito improponibile per
programmi non semplicissimi.
Programmare in un dato linguaggio di programmazione significa
generalmente scrivere uno o più semplici file di testo ASCII, chiamato
codice sorgente.
Il codice sorgente, contenente le istruzioni da eseguire, può essere:
- eseguito passandolo ad un interprete, che eseguirà le istruzioni in esso
contenute;
- compilato, cioè tradotto in istruzioni di linguaggio macchina da un
programma detto compilatore. Il risultato è un file binario, detto file
oggetto, adeguato all’architettura hardware di destinazione.
In seguito tutti i file oggetto attraversano una fase di linking per giungere
al prodotto finale: il file eseguibile.
5
Classificazione dei LP (1)
†
Una prima classificazione dei linguaggi di programmazione può essere
fatta in base al loro livello di astrazione:
- Linguaggio ad “alto livello” , molto vicino al linguaggio umano
- Linguaggio ad “basso livello”, molto vicino al linguaggio macchina
†
Una seconda classificazione dei linguaggi in base al concetto di istruzione:
- Linguaggio imperativo
- Linguaggio funzionale
- Linguaggio logico
†
Oltre a quest’ultima suddivisione, altre caratteristiche importanti sono il
supporto a diversi paradigmi di programmazione (strutturato, orientato
agli oggetti, ecc.) e all’elaborazione parallela.
6
Linguaggio Macchina
†
E’ un linguaggio che può essere interpretato ed eseguito “senza mediazioni”
perchè le sue istruzioni corrispondono ad operazioni direttamente eseguibili
dall'hardware della macchina. Quindi particolarmente efficiente.
†
Per contro è un linguaggio che dipende dall'architettura della macchina quindi:
- Ogni processore (CPU) ha un suo linguaggio macchina;
- Occorre conoscere l'architettura della macchina per poter scrivere programmi;
- I programmi non sono portabili.
†
I programmi in linguaggio macchina sono sequenze di 0 ed 1 (binarie),
sostanzialmente illegibili per l'uomo.
†
Es: un programma per il calcolo della somma tra due numeri
codice operativo
operando
00000010
000000011011100
00000110
000000011111100
00000100
000000011011100
7
Linguaggio Assembler
†
Costituisce un primo parziale passo verso la semplificazione della
programmazione. Infatti il programmatore non deve più ricordare sequenze
strane di numeri binari, ma può usufruire di Assemblatori che traducono
automaticamente:
- Le istruzione macchina in codici operativi
- Le locazioni di memoria e i registri in nomi simbolici o mnemonici.
†
Ad esempio il programma precedente può essere espresso come segue
codice operativo
00000010
00000110
00000100
†
operando
000000011011100
000000011111100
000000011011100
codice operativo
LOAD
SUM
MEM
codice mnemonico
220
252
220
E’ comunque legato all’architettura della macchina.
8
Linguaggio di alto livello
In seguito alla realizzazione dei primi computer commerciali si è reso
necessario sviluppare linguaggi di programmazione il cui uso risultasse
più semplice rispetto al linguaggio assembler.
† I linguaggi di programmazione di alto livello, mediante opportuni
meccanismi di astrazione, permettono di usare costrutti che
prescindono dalle caratteristiche fisiche della macchina.
† Quindi si è verificata un’evoluzione dei linguaggi verso:
†
- astrazione dalla macchina,
- semplificazione della scrittura dei programmi
- similarità con il ragionamento umano
†
Infatti sono più simili ai linguaggi naturali rispetto alle sequenze (almeno)
apparentemente senza senso di 0 e 1 del linguaggio macchina, ma
anche rispetto al linguaggio assembler.
9
Linguaggio di alto livello
†
Questo linguaggio consente l'utilizzo di simboli matematici e
parole chiave tipiche del linguaggio naturale.
†
Ad esempio l’istruzione che effettua la somma tra due numeri è:
a=a+b
dove a e b sono delle variabili, ossia dei nomi simbolici con cui
identifichiamo una locazione di memoria astraendo dai dettagli di
basso livello relativi agli indirizzi di memoria.
†
Appositi software provvedono a tradurre le istruzioni di un
linguaggio di alto livello nel loro equivalente in codice eseguibile
dalla macchina.
†
Però sono meno efficienti rispetto al linguaggio assembler e al
linguaggio macchina.
10
Linguaggio imperativo
†
In tali linguaggi l’istruzione è un comando esplicito, che opera su una o più
variabili oppure sullo stato interno della macchina. Le istruzioni vengono
eseguite in un ordine prestabilito.
†
Scrivere un programma in tale linguaggio significa occuparsi di cosa la
macchina deve fare per ottenere il risultato che si vuole.
Il programmatore deve definire le strutture dati e gli algoritmi che
operano su di esse.
†
Rappresenta l’approccio più naturale, e i costrutti tipici utilizzati sono :
assegnamento, cicli, in particolare GOTO, if-then-else,
procedure/funzioni con passaggio di parametri.
†
Esempi di linguaggi imperativi: Assembly, FORTRAN, COBOL
11
Linguaggio imperativo
Adatti per applicazioni di gestione commerciale
12
Linguaggio funzionale
† Un programma è una definizione di funzione nel senso
matematico del termine. Gli argomenti delle funzioni
definite possono essere sia valori di tipi primitivi che altre
funzioni.
† In un linguaggio funzionale puro, l’assegnazione esplicita
risulta completamente assente ( si utilizza soltanto il
passaggio di parametri ).
† L'esecuzione del programma consiste nella chiamata di una
funzione con i relativi parametri per ottenere un risultato.
In questo modello rivestono particolare importanza la
ricorsione e, come struttura dati, la lista.
† Esempi di Linguaggi Funzionali: ML, Lisp, CAML
13
Linguaggio funzionale
Adatti per applicazioni scientifiche e di calcolo
14
Linguaggio logico
† Il programma è considerato come la dimostrazione della verità di
una asserzione. Il sorgente è costituito da una sequenza di
asserzioni di fatti e regole.
† Non è necessario indicare esplicitamente il flusso di esecuzione,
ma dato un obiettivo di partenza è il sistema che cerca di
individuare i fatti e le regole rilevanti. Il fatto che vi sia una netta
separazione tra la parte dichiarativa (il cosa fare) e la parte
procedurale (il come) rende un programma scritto in un linguaggio
logico particolarmente leggibile.
† I linguaggi logici risultano molto adatti a risolvere problemi che
riguardano entità e le loro relazioni.
† Il linguaggio più famoso è il Prolog (PROgramming in LOGic).
15
Linguaggio logico
Molto usati nell’ambito dell’Intelligenza Artificiale
16
Linguaggio strutturato
† I linguaggi strutturati adottano una tecnica il cui scopo è di
semplificare la stesura dei programmi, limitando l'uso dei controlli
a pochi casi semplici, tutti con un solo ingresso e una sola uscita.
† Ad esempio per evitare l'uso indiscriminato del famoso GOTO
(salto incondizionato) sono state introdotte istruzioni di controllo
strutturato del flusso, come i blocchi IF-THEN-ELSE, DO
WHILE, CASE, FOR, ecc.
† L'adozione di nuove regole di strutturazione non impedisce, in casi
in cui sia ritenuto veramente utile, l'utilizzo dei vecchi comandi di
salto (GOTO), ancora in uso, per esempio, per uscire da una
routine in caso di errore.
† Esempi di linguaggi strutturati: C, Pascal
17
Linguaggio Strutturato
Adatti per applicazioni general-purpose
18
Linguaggio ad oggetti
† Il programma opera su insiemi di oggetti (insiemi di dati e regole
che manipolano questi dati) che comunicano tra loro e verso
l'esterno mediante messaggi.
† L'Object-Oriented ha adottato nuovi concetti come
l'incapsulamento, l'ereditarietà e il polimorfismo.
Oltre a linguaggi specializzati che implementano i principi di tale
metodologia, come Smalltalk, ad esempio, sono nate delle
estensioni dei linguaggi già esistenti, che li integrano (ad es. C++
per il C, il Visual BASIC, Visual RPG, ecc.).
† Esempio di linguaggio ad oggetti, oggi fortemente usato: Java
19
Linguaggio ad oggetti
Enorme diffusione ed utilizzo per applicazioni distribuite
20
In principio era il bit…
† Per poter "insegnare" al computer come svolgere qualche semplice
operazione aritmetica bisognava essere in grado di programmare
in linguaggio macchina (0 e 1 ).
† Tra gli anni '40 e gli anni '50, la programmazione degli elaboratori
elettronici era destinata solamente a una ristrettissima cerchia di
esperti. E quello che può essere considerato il progenitore di tutti
i computer è sicuramente l'ENIAC (Electronic Numerical
Integrator And Calculator ), un mastodontico calcolatore pesante
30 tonnellate, al cui progetto partecipò il brillante matematico J.
von Neumann.
† Infatti fu il primo elaboratore programmabile interamente a
circuiti elettronici e senza parti meccaniche in movimento, ma
questa è un'altra storia...
21
Il principio era il bit…
ENIAC
22
Una breve panoramica
† Negli anni ’50 si impone, dopo qualche scetticismo, l'idea che i linguaggi ad alto livello
siano affidabili ed economicamente possibili. Si cerca un compromesso tra espressività
del linguaggio che il programmatore deve usare e efficienza di esecuzione del
programma da parte del calcolatore.
† Negli anni ’60 vengono introdotte notazioni per la descrizione dei linguaggi e viene
posta meno enfasi sull’ efficienza della computazione, ma più attenzione al modello di
computazione. Si comincia a parlare di computazione simbolica e non solo numerica e si
cominciano a vedere programmi, non solo per il calcolo scientifico, ma anche per
gestire informazioni non numeriche.
† Negli anni ’ 70 la programmazione diventa un’attività complessa che coinvolge spesso
decine di persone sullo stesso programma, che inoltre deve essere mantenuto nel
tempo, introducendo modifiche. Queste operazioni iniziano a diventare molto costose
perchè i programmi sono spesso poco leggibili. Si enfatizza perciò la necessità di
introdurre metodologie chiare di programmazione e linguaggi che la supportino, che
facilitano cioè la scrittura di programmi che supportino la metodologia scelta.
23
La nascita dei LP: 1946
Il primo linguaggio di programmazione della storia, se si
esclude il "linguaggio" meccanico adoperato da Ada
Lovelace per la programmazione della macchina di
Charles Babbage, è a rigor di termini il Plankalkül di
Konrad Zuse, sviluppato da lui nella svizzera neutrale
durante la seconda guerra mondiale e pubblicato nel
1946.
† Plankalkül era già in grado di gestire sia tabelle che
strutture di dati ma non venne mai realmente usato per
programmare.
† Konrad Zuse usò il suo linguaggio come opponente nel
gioco degli scacchi sul suo computer Z3.
†
24
Curiosità su Konrad Zuse
†
Pioniere dei calcolatori, costruì nel 1941 il primo
calcolatore elettromeccanico programmabile, lo
Z3.
†
La società da lui fondata venne rilevata poi dalla
Siemens.
Il primo computer di Konrad Zuse, Z1, fu
costruito tra il 1936 e il 1938. Si trattava di un
apparecchio programmabile, in grado di
processare numeri in formato binario e le cui
caratteristiche più apprezzabili, viste con il
senno di poi, furono la netta distinzione fra
memoria e processore.
† Questa architettura, che non venne adottata
dall'ENIAC o dal Mark I, (i primi computer
realizzati negli Stati Uniti quasi dieci anni più
tardi), rispecchia la definizione di calcolatore
enunciata nel 1945 da John von Neumann.
†
25
Esempio di programma in
Plankalkül
†
La riga 1
rappresenta una
dichiarazione di
tipo.
†
P1 è una
funzione.
†
P2 è il main.
26
Shortcode: 1949
La programmazione dei primi elaboratori veniva fatta
invece in Shortcode, da cui poi si è evoluto l'assembly o
assembler, che costituisce una rappresentazione
simbolica del linguaggio macchina.
† La sola forma di controllo di flusso è l'istruzione di
salto condizionato, che porta a scrivere programmi
molto difficili da seguire logicamente per via dei
continui salti da un punto all'altro del codice.
† Deve essere compilato in codice macchina manualmente.
A dispetto del nome, le notti tenderebbero ad
allungarsi parecchio, usando questo linguaggio!
†
27
La nascita dei LP: primi passi
La maggior parte dei linguaggi di programmazione
successivi cercarono di astrarsi da tale livello
basilare, dando la possibilità di rappresentare
strutture dati e strutture di controllo più generali e
più vicine alla maniera (umana) di rappresentare i
termini dei problemi per i quali ci si prefigge di
scrivere programmi.
† Il primo sostanziale passo in avanti nella
programmazione fu a cavallo tra gli anni ’50 e gli
anni ’60 quando si passò ai cosiddetti “linguaggi di
alto livello”, ovvero a linguaggi che esprimevano la
computazione da fare in modo procedurale.
†
28
Fortran: 1954
† Gli scienziati avevano bisogno di un linguaggio che permettesse
la scrittura e la successiva elaborazione di formule complesse.
Nacque così il FORTRAN (FORmula TRANslator) che iniziò la
propria lunga storia nel 1954.
† Così lunga da rendere reale la profezia degli anni ’70: “Non si
sa come sarà il linguaggio di programmazione dell’anno 2000,
ma si chiamerà FORTRAN!” (Questa profezia è stata
attribuita a vari studiosi tra cui J. Backus, S. Cray e D.
McCracken).
† Il FORTRAN funzionò bene per le applicazioni di calcolo
scientifico e, di conseguenza, ebbe un notevolissimo successo
in questo dominio, come evidenziato dalla profezia
precedentemente citata.
29
Fortran…
Il primo compilatore FORTRAN per il
calcolatore IBM 704 fu ideato da un
gruppo di lavoro guidato da John Backus
(vincitore del Premio Turing nel 1977 ).
† Si trattò di un compilatore ottimizzante
(o ottimizzatore), poiché i progettisti
ritenevano che nessuno avrebbe usato un
linguaggio la cui efficienza non si
avvicinasse a quella dei linguaggi
assemblatori.
† Il linguaggio fu usato soprattutto per
scrivere programmi che eseguivano molti
calcoli matematici,questo incoraggiò i
progettisti a creare compilatori che
generavano codice molto veloce.
† L'inclusione del tipo numero complesso
rese poi il Fortran il linguaggio
d'elezione nella comunità scientifica.
†
30
Fortran: caratteristiche
† E’ stato il primo linguaggio di alto livello, e quello che ha per
primo utilizzato un compilatore.
† E’ semplice da imparare, impiegabile in un ampio raggio di
esigenze, indipendente dalla macchina, e consente l'esecuzione
di complesse funzioni matematiche, scritte il più possibile in
modo analogo a quello usato normalmente.
† Alcuni anni dopo la sua prima comparsa si sono sviluppati
diversi "dialetti" derivanti dal FORTRAN originale. Data la sua
semplicità di scrittura i programmatori riuscivano ad essere
fino a 500 volte più veloci in FORTRAN che in altri linguaggi,
dedicando così maggiormente la loro attenzione sui problemi
reali piuttosto che sulla trascrizione nel linguaggio.
† Si può quindi affermare che FORTRAN è stato anche il primo
linguaggio "problem oriented" anzichè "machine oriented".
31
… Fortran
† I primi programmi in FORTRAN venivano perforati per lo più
su schede a 80 colonne, con regole molto stringenti:
- Una riga di codice non poteva superare i 72 caratteri, che
venivano perforati nelle colonne da 1 a 72;
- Le colonne da 1 a 5 potevano contenere un'etichetta
numerica che identificava l'istruzione;
- Le colonne da 7 a 72 contenevano l'istruzione;
- La colonna 6 era normalmente vuota e, se conteneva un
carattere, indicava che l'istruzione era il seguito
dell'istruzione perforata nella scheda precedente;
- Le colonne da 73 a 80 venivano spesso usate per numerare
le schede.
32
Fortran: una scheda perforata
33
A-O e Fortran: 1957
† Il Fortran, il cui sviluppo è basato sul
linguaggio A-O, viene pubblicato.
† Anche A-O noto anche come AT-3 (la cui
autrice è “la nonnina del Cobol” ovvero
Grace Hopper ) viene pubblicato col
nome Math-Matic, e inizia così l'utilizzo
di un primo linguaggio di programmazione
comunemente conosciuto.
34
Fortran II: 1958
† Viene presentata una nuova versione di linguaggio Fortran,
ovvero il FORTRAN II.
† Tra le sue nuove caratteristiche offre la gestione di
sottoprogrammi e link a funzioni di codice macchina.
† Il FORTRAN II introdusse la possibilità di compilazioni
separate.
† Viene pubblicata la definizione di base di ALGOL 58,
(“ALGOrithmic Language”) noto anche come IAL
(International Algebraic Language).
35
Lisp: 1958
Nella metà degli anni ’50 si sentì l'esigenza, comune
alle varie discipline, di trovare un metodo che
consentisse al computer di elaborare liste di dati
simbolici.
† IBM fu una delle prime compagnie ad interessarsi al
problema. Infatti, visto l'alto costo per lo sviluppo
del FORTRAN i dipendenti dell’IBM pensarono di
inserire in quel linguaggio anche la funzione di
elaborazione delle liste.
† Cosi' il LISP ( LISt Processing Language oppure, per
gli amici "Lots of Irritating Superfluous
Parentheses" :-) ) fu integrato come estensione nel
FORTRAN stesso.
† John McCarthy fu incaricato di creare una lista di
specifiche per creare l'elaborazione simbolica. La
prima definizione riguardava le espressioni
algebriche.
†
36
… Lisp
†
L'esperimento iniziale produsse una lista di esigenze di linguaggio, tra
cui le più importanti erano le espressioni ricorsive e quelle condizionali,
che a quell'epoca il FORTRAN non aveva ancora.
†
Aveva lo scopo di riportare in forma di linguaggio di programmazione il
modello computazionale del λ –calcolo (il λ -calcolo fu definito dai padri
dell ’informatica,tra cui Church, e ben presto, diventò uno dei modelli
computazionali prevalenti).
†
Avere un linguaggio di programmazione basato integralmente su di esso
rivestiva, pertanto,un ’importanza unica per gli scienziati di allora, che
pensavano, così, di risolvere gran parte dei loro problemi di sviluppo
software tramite la trascrizione, quasi pedestre, di modelli in
programmi.
37
Lisp : perché è da ricordare?
†
Perché con esso sono stati introdotti i concetti di:
- Ricorsione
- Lista linkata: puntatori e records
- Allocazione dinamica della memoria
- Efficienza mediante l’uso della memoria condivisa
- Meta-programmazione
38
… Lisp : oggi
†
Per esperti di λ -calcolo l ’uso del LISP fu, ed è
tuttora, particolarmente indolore. Questa è una
delle fortune maggiori di tale linguaggio, ancora
oggi, dopo quasi 50 anni dalla sua prima
concezione, è particolarmente popolare nel
settore dell’intelligenza artificiale.
†
Emacs e AutoCad sono implementati in LISP
†
Insieme ad altri viene usato nel gioco Abuse, i cui
livelli e funzioni sono determinati dal codice LISP,
compilato quando inizia il gioco.
39
… Lisp : un esempio
40
Cobol: 1959
† Il COBOL (COmmon Business Oriented Language) nasce
alla conferenza del Data Systems and Languages (CODASYL).
Esso fu definito da un comitato formato dai leader statunitensi
dell’epoca. Tra gli altri, si ricorda, la partecipazione di
Burroughs Corporation, IBM, Honeywell, RCA, Sperry Rand e
Sylvania Electric Products. Anche tre enti pubblici
particolarmente rilevanti presero parte ai lavori:
US Air Force, David Taylor Model Basin e il National Bureau of
Standards.
† Il comitato si suddivise in tre sottocomitati: il primo per la
pianificazione a breve termine, il secondo per quella a medio
termine, e il terzo per il lungo termine; quest’ultimo in realtà
non incominciò mai a lavorare.
† È chiaro che, con queste premesse il linguaggio che sarebbe
risultato, sarebbe stato preciso, ma anche un po’ ampolloso e
pesante da gestire.
41
… Cobol
† Esso fu pensato per gestire una grande quantità di dati, ma può
essere valido anche per tanti altri scopi.
† Serviva soprattutto per sviluppare programmi gestionali, cioè
atti alla risoluzione di problemi aziendali.
† La sua enorme diffusione è dovuta alla sua facilità, grazie anche
al fatto che le istruzioni somigliano molto a frasi inglesi.
Ad esempio, la frase "aggiungi il valore di import al valore
totale" si tradurrebbe in COBOL così:
"add import to totale"
Trovando una grandissima applicazione nelle aziende ebbe molto
successo.
42
… Cobol
†
Dal suo sviluppo ha avuto molte modifiche e miglioramenti. Nel
tentativo di superare le numerose incompatibilità tra le varie
versioni, l'American National Standards Institute (ANSI) annunciò
uno standard nel 1968, che produsse l'ASN-COBOL.
†
Nel 1974 venne pubblicata una revisione con molte funzioni che non
erano state previste nel '68. Nel 1985 esce, sempre dall'ANSI,
un'ulteriore revisione con nuove funzioni.
†
Il linguaggio continua ad evolversi ancora oggi, che è disponibile in
una versione object-oriented inclusa nel COBOL 97. Anche se viene
apprezzato dai tecnici, lo è senz'altro meno del BASIC, a causa della
sua eccessiva verbosità.
†
Tirando le somme, non c’è dubbio che il COBOL assolva molto bene i
propri compiti di chiarire le azioni che l’elaboratore svolge in un
linguaggio comprensibile dai propri utenti principali, ovvero da
persone che si occupano di amministrazione, contabilità etc.
43
Cobol: un esempio
44
La situazione negli anni ‘60
†
†
†
†
†
†
La diffusione degli strumenti informatici nonché l’ingrandirsi dei
sistemi da sviluppare, impose la definizione di un processo di
sviluppo.
L’idea che parve più ovvia fu quella di basarsi su modelli modulari,
concentrati sulla suddivisione del lavoro in parti e la successiva
specializzazione dei compiti.
Il modello di sviluppo di riferimento fu chiamato waterfall,
ovvero, a cascata.
Si assistette, allora, a una particolare focalizzazione sullo sviluppo
di linguaggi che permisero la decomposizione flessibile del sistema
in sottosistemi.
Il COBOL permetteva una suddivisione; tale suddivisione, però,
era rigidamente predefinita dal linguaggio: le divisioni erano “quelle
tre”!
Si desiderava, invece, poter dividere in modo che i moduli fossero
definibili in modo chiaro e univoco dallo sviluppatore, che doveva
anche stabilire come un modulo interagisse con gli altri moduli.
45
Algol: 1960
†
ALGOL-60: “ALGOrithmicLanguage” fu sviluppato da
un gruppo di persone eccellenti facenti parte dell’
International Federation for Information
Processing, quali John Backus, Peter Naur, Alan
Perlis, Friedrich L.Bauer, John McCarthy, Niklaus
Wirth, C.A.R. Hoare, Edsger W. Dijkstra.
†
E’ stato il linguaggio imperativo più influente.
†
E’ stato il primo linguaggio con una sintassi ben
definita (BNF). Dopo tale successo con la sintassi, lo
stesso gruppo tentò di definire formalmente anche
la semantica, ma il progetto fallì ben presto.
†
Nonostante le sue innovative caratteristiche, non
ebbe lo stesso successo ottenuto con il FORTRAN
ma….
†
… è stato il modello per : C, Pascal, MODULA,
FORTRAN77.
46
Algol: caratteristiche
† Primo linguaggio con attivazione di procedure basate
sullo STACK (ricorsione)
† Primo linguaggio con un meccanismo ben definito di
passaggio dei parametri:
– Passaggio per valore
– Passaggio per nome (una sorta di chiamata per
riferimento)
– Passaggio per valore del risultato (nelle ultime
versioni)
- Passaggio per riferimento (nelle ultime versioni)
47
Algol: caratteristiche
Strutture dati primitivi: interi, reali, booleani, arrays;
† L’ultima versione ha anche riferimenti e records (originariamente
introdotti in COBOL), e tipi definiti dall’utente.
† L’I/O non veniva più considerato fortemente dipendente dalla
macchina.
† Lo sviluppo di Algol ha portato a un nuovo tipo di programmazione,
quella strutturata:
†
- funzioni che isolano i sotto-programmi;
- controllo della gestione della memoria mediante variabili
“tipizzate”;
- uso di strutture di controllo:
– If then else
- While (several forms)
– goto (si continua ad usare)
48
Algol: problemi
† I linguaggi ALGOL- like non sono ancora soddisfacenti:
- Le modalità di organizzazione dei dati (strutture dati)
restano separate dai metodi necessari a manipolare i dati
stessi.
- Le funzioni/moduli non sono “a tenuta stagna” :
– possono influenzarsi tra loro in maniera non sempre
esplicita al programmatore.
- Non è quasi mai facile riutilizzare una funzione in un altro
programma.
† La manutenzione del software diviene rapidamente più
difficile e costosa dello sviluppo ex-novo dello stesso
software.
49
… Algol: esempi
50
Apl: 1961
†
APL sta per "A Programming Language".
† Fu creato da Ken Iverson e i suoi colleghi della IBM.
† D'ispirazione matematica, il suo scopo principale era di
servire come potente esecutore di notazioni per algoritmi
matematici.
† APL è noto soprattutto per la sua capacità di usare non solo
simboli ASCII, ma anche, per esempio tutte le lettere
dell'alfabeto greco (indispensabili in matematica).
† In APL tutte le espressioni sono valutate da destra verso
sinistra.
51
Apl: 1961
†
Funzioni principali del linguaggio APL:
- Set di caratteri non-Standard: simboli non ASCII
- Dynamic Array Universe: ambiente che consiste di schiere
create dinamicamente
- Interazione: APL è un linguaggio interattivo
† Aree di applicazione:
- Algoritmi matematici
- Statistiche
52
Apl: 1961
†
Esempio di programma in linguaggio APL che scrive a video
“Hello word!”:
'Hello World!'
† In Apl, tutto quello che è scritto tra apici è stampato a video.
† @ in APL fa in modo che tutto quello che viene dopo sia visto
come un commento
† Se "Hello World” la si vuole memorizzare in una variabile h
per poi stamparla a video, il programma di sopra risulterà
modificato come segue:
h<-'Hello World'
53
SNOBOL: 1962
† SNOBOL, (StriNg Oriented symBOlic Language), è un
linguaggio di programmazione creato nei laboratori Bell, per
la manipolazione delle stringhe di simboli, utile in aree come
la linguistica, la compilazione di indici e bibliografie, la
manipolazione di testi e la trattazione simbolica di
espressioni algebriche. .Al progetto lavorarono D. J.
Farber, R. E. Griswold, e F. P. Polensky.
† Inizialmente il progetto ebbe un nome più goliardico: SEXI
(String EXpression Interpreter), poi divenne SNOBOL in
assonanza con un’affermazione di uno degli sviluppatori:
"This program doesn't have a snowball's chance in hell of…"
† Nel 1971, i compilatori FASBOL e SPITBOL (SPeedy
ImplementTation of snoBOL) verranno poi sviluppati
proprio sulla base di SNOBOL.
† Il linguaggio è usato per gestire testi e formule. Il suo
sviluppo, culminato in SNOBOL4 avvenne fra 1l 1962 e il
1967
54
SNOBOL: caratteristiche
† I tipi di dato di SNOBOL sono stringhe, numeri interi e
reali, tabelle associative, matrici di qualsiasi dimensione e
tipi definibili dall’utilizzatore. Inoltre il tipo di dati
pattern, introdotto in SNOBOL4, permette di memorizzare
un modello dei dati.
† SNOBOL è un linguaggio interpretato, ed utilizza questa
caratteristica tramite le istruzioni EVAL(istruzione) e
CODE(istruzioni) per eseguire frammenti di programma
generati dinamicamente, per trattare come variabili i nomi
di dati, mediante il prefisso $:
?
PIEMONTE = 'TORINO'
?
TORINO = 'PIEMONTE'
?
OUTPUT = 'La capitale del ' $PIEMONTE " è " PIEMONTE
La capitale del PIEMONTE è TORINO
55
PL/I: 1963
†
E’ stato sviluppato come prodotto IBM e inizialmente si chiamava
NPL (New Programming Language). Il nome fu cambiato per non fare
confusione con il National Phisical Laboratory in Inghilterra.
†
Anche questo linguaggio s'è evoluto nel tempo, ma mentre tutti gli
altri linguaggi si erano bene o male specializzati in determinate aree
applicative, ciò non avvenne per il PL/I.
†
Era il primo tentativo su larga scala di progettare un linguaggio che
potesse essere usato in qualsiasi area applicativa.
†
In realtà il PL/I è un linguaggio molto pesante da gestire e molto
verboso. Poteva andare forse bene su applicazioni di mainframe IBM,
dove erano richiesti grossi programmi per elaborazioni batch, ma non
ebbe il successo che ci si aspettava e fu successivamente superato
da altre soluzioni più flessibili e più produttive.
56
PL/I: funzioni principali
E’ completamente a formato libero e non usa parole riservate.
Definisce i suoi tipi di dati senza riferimento ad alcun hardware.
E’ un linguaggio block-oriented, formati dal packages, dai begin
blocks, e dagli statements. Questo tipo di struttura consente al
programmatore di produrre applicazioni altamente modulari.
† Contiene strutture di controllo. Per esempio,
SELECT...WHEN...OTHERWISE che gestisce controlli logici, e
l'istruzione DO che consente di eseguire azioni unitarie
incondizionate, per una sola volta, per sempre o fintanto che una
condizione è vera o prima che lo diventi.
† Supporta le schiere, strutture, unioni, schiere di strutture o
unioni, strutture di unioni o schiere e ogni combinazione di esse.
† Fornisce 4 diverse classi di memoria: AUTOMATIC, STATIC,
CONTROLLED, e BASED.
†
†
†
57
PL/I: aree applicative
† E’ stato usato in modo considerevole sia in
applicazioni commerciali che scientifiche.
† E' stato anche il principale linguaggio presso
l'Università del Michigan Dearborn per
un certo periodo di tempo.
† Comunque la sua popolarità è declinata negli
ultimi anni, in seguito all'introduzione di
linguaggi più moderni.
58
PL/I: esempio
† L’esempio precedente scritto in PL/I diventa:
HELLO:
LOOP:
END HELLO;
PROCEDURE OPTIONS (MAIN);
/* A PROGRAM TO OUTPUT HELLO WORLD */
FLAG = 0;
DO WHILE (FLAG = 0);
PUT SKIP DATA('HELLO WORLD!');
END LOOP;
59
Rpg: 1964
†
L'RPG è un linguaggio creato da IBM nel 1959 e già utilizzabile su uno dei
primi minielaboratori: l'IBM 1401. Nel ’64 poi è stato reso disponibile sui
sistemi IBM 360, 370, S/3, 32, 34, 36, 38, AS/400 ed infine iSeries
(sistemi più che attuali al giorno d'oggi).
†
Fino ai sistemi 370 in realtà il linguaggio era considerato come semplice
utility e non godette di gran fama. Fu dai sistemi S/3 in avanti che divenne
il principale linguaggio di sviluppo per applicazioni commerciali proposto da
IBM, almeno sui mini elaboratori.
†
Lo scopo, dato anche il nome che significa
Report Program Generator (programma
generatore di stampe), apparve subito
evidente: l'IBM 1401 dell'epoca è un
sistema d'elaborazione principalmente
orientato alle aziende, quindi con esigenze
massicce di stampare tabulati e moduli
commerciali (bolle, fatture, estratti conto).
60
Rpg: 1964
† Il sistema 1401 è la prima macchina annunciata da IBM, dopo
il Ramac 305, a non avere più pannelli di controllo con spinotti
da inserire. Si tratta di un vero computer, con i suoi bravi
linguaggi di programmazione, tra cui appunto anche il nuovo
RPG.
† Il linguaggio è pesantemente orientato ad avere un input da
schede perforate, svolgere determinati calcoli, anche
fortemente condizionati, per mandare infine i risultati verso
la stampante.
† Un linguaggio molto mirato al suo scopo primario.
Probabilmente l'ideatore (ignoriamo chi sia stato a
progettarlo) non s'era posto altri obiettivi.
61
Rpg & IBM
Con questo linguaggio decisamente proprietario, IBM si era
affrancata la fedeltà di tutti i suoi clienti, che vedevano le loro
applicazioni imperniate sull'RPG, come chiave di successo del loro
sistema informativo.
† La concorrenza cercò ovviamente di proporre una propria versione
RPG, ma in linea di massima si trattò di brutte imitazioni, molto
arretrate come funzionalità rispetto al vero linguaggio originario
IBM.
† Ciò fece sì che, fuori dal mondo IBM, l'RPG non fosse per nulla
conosciuto, così come non era conosciuto in casa IBM a livello di
mainframe, dove era invece prevalente il COBOL o altri linguaggi di
livello superiore. .
† La maggior parte delle piccole e medie aziende italiane avviate alla
elaborazione elettronica dei dati negli anni dal 1960 al 1990 ha
adottato IBM come fornitore di hardware e utilizzato software
house o consulenti informatici specializzati nell'uso proprio dell'RPG.
Si parla di 60/70.000 installazioni, che vanno dai 3 posti di lavoro
alle varie centinaia.
†
62
Rpg: caratteristiche
†
L'RPG si distingue subito da qualsiasi altro linguaggio di
programmazione per tre caratteristiche uniche:
- per scrivere le istruzioni si devono utilizzare appositi
moduli cartacei, simili a questionari, denominati
"specifiche"
- le istruzioni fornite vengono eseguite all'interno di un
ciclo logico infinito, fornito dal compilatore
- per classificare e usare le condizioni si utilizzano una
specie di switch chiamati "indicatori"
63
Rpg: le specifiche
† Originariamente si trattava di 7 tipi differenti di moduli
prestampati, che andavano compilati con le apposite istruzioni
del programma, quindi dai moduli si ottenevano tante schede
perforate quante erano le righe utilizzate.
†
Le schede rappresentavano il programma sorgente.
† Queste venivano quindi fatte leggere dal computer, insieme al
programma compilatore, ed alla fine, se non c'erano errori
gravi, si otteneva un nuovo pacco di schede che
rappresentavano il nostro programma eseguibile.
64
Rpg: le specifiche
†
Le specifiche servivano ad indicare tutto ciò che occorreva per
svolgere un completo programma di tipo batch, ed ogni tipo di modulo
aveva un codice identificativo, ovvero:
- H (header) identificava la prima riga del programma, con alcune
informazioni destinate al compilatore
- F (files) identificava le risorse che il sistema avrebbe dovuto
riconoscere e usare (files, stampanti, console, ecc.)
- E (extension) per indicare tabelle da caricare in fase di
compilazione o di esecuzione
- L (lines) per indicare caratteristiche particolari
- I (input) per fornire le indicazioni dei dati da leggere
- C (calcolo) con le istruzioni logiche, aritmetiche e condizionali
- O (output) per indicare dove e come stampare i dati o trascriverli
su nuovi files
65
Rpg: le specifiche
† Ogni modulo presentava apposite fincature con l'intestazione
†
†
†
†
†
del contenuto che era previsto per le varie colonne.
Nel battere un programma, dunque, si dovevano riportare le
istruzioni nelle precise posizioni previste dai moduli, saltando
le zone da lasciare obbligatoriamente in bianco.
Per un programma di media complessità si potevano utilizzare
una trentina di fogli.
Ovviamente si compilavano in matita, si correggeva, si
cancellava, si aggiungevano fogli, ecc. ecc.
Tutto su carta.
C'è da dire che oggi può sembrare un metodo da età della
pietra e in effetti lo era, ma il rapporto tra programmatore e
foglio di carta aveva anche i suoi vantaggi (e il suo fascino!):
un programma lo potevi scrivere anche a lume di candela!
66
Rpg: punti di forza e punti deboli
† I punti forti del linguaggio RPG:
- grandissima sinteticità del codice sorgente
- cicli automatici di flusso standardizzato
- estrema facilità d'apprendimento
- nessun orpello ortografico o caratteri speciali
- estrema leggibilità del sorgente
- facilità di manutenzione
- ottima gestione dei report
† I punti deboli del linguaggio RPG :
- La stesura posizionale dei comandi implica l'uso di appositi
moduli o comunque la conoscenza delle colonne in cui ogni dat
deve essere scritto, visto che il significato di un codice è
assunto dal compilatore in base alla posizione in cui viene
inserito.
- La descrizione dell'input andava riscritta in ogni programma
- I nomi dei campi non più lunghi di 6 caratteri.
67
Basic: 1964
† BASIC (un acronimo per Beginner's All purpose
Symbolic Instruction Code cioè "Codice di
istruzioni simboliche di uso generale per
principianti") è un linguaggio di programmazione
ad alto livello sviluppato nell'Università di
Dartmouth (Dartmouth
College) per il calcolatore
GE-225.
† Ne furono coinventori i
professori John George
Kemeny e Thomas Eugene Kurtz.
Il primo programma in BASIC
"girò" il 1° maggio 1964,
alle ore 4:00.
68
Basic: 1964
† Il BASIC (almeno nelle versioni di Kemeny e Kurtz,
che costituiscono il cosiddetto Dartmouth BASIC)
fu progettato per essere un linguaggio semplice da
imparare. Per questo si differenziò dalla maggior
parte dei linguaggi suoi coetanei enfatizzando la
semplicità d'uso piuttosto che la potenza
espressiva.
† Nacque infatti, come dice il suo nome, per poter
essere usato anche da principianti Le istruzioni
erano poche e non complesse. Il BASIC offriva
inoltre pochi costrutti strutturati, quindi orientati
alla creazione di programmi chiari e comprensibili.
Fu pensato inoltre come un linguaggio algoritmico,
adatto cioè a programmare algoritmi
69
Basic: funzioni principali
†
†
†
†
†
†
†
†
†
loops
input da tastiera
applicazioni guidabili da menu
comandi di sistema: utilizza parole atte a fare
svolgere immediatamente uno specifico task
programmazione strutturata
subroutines
funzioni integrate nel linguaggio
funzioni definibili dall'utente
Schiere, sorting e ricerche
70
Basic: Aree applicative
† Disegnato per applicazioni più interattive che di
tipo batch, con il grande vantaggio di essere
facilmente implementabile, vista anche la
possibilità di utilizzo in forma interpretata
piuttosto che compilata.
† Il seguente esempio crea una variabile stringa ed
un array di 11 elementi (si parte da 0).
10 LET A$=""
20 DIM A(10)
30 END
71
Simula: 1967
† SIMULA è stato disegnato e costruito da
Ole-Johan Dahl e Kristen Nygaard del
Norvegian Computing Center di Oslo.
72
… Simula
† Inizialmente ideato e sviluppato come linguaggio per la
simulazione di eventi discreti, ma successivamente espanso
per diventare un linguaggio di utilizzo generale, in particolare
esso rappresenta il primo linguaggio object oriented.
† Si basa su ALGOL60, ma comprende anche la gestione delle
classi.
† Introduce per la prima volta i concetti di:
– Classi;
– Oggetti (Istanza di classi);
– Funzioni virtuali;
- Ma non l’ereditarietà multipla.
73
… Simula
† Per primo ispirò l’introduzione dei meccanismi di astrazione
dei dati a tutti linguaggi ideati successivamente eccetto che
l’orientamento agli oggetti, la cui importanza fu compresa solo
molto più tardi.
† L’idea della “fusione” del concetto di tipo con quello di classe,
dovuta a Dahal, non fu accolta all’epoca, con benevolenza.
† Sorprendentemente, molto simile ai moderni linguaggi
orientati agli oggetti!
† Resta principalmente confinato all'area del "Discrete Event
Simulation“.
74
Simula: esempio definizione
75
Simula: esempio d’uso
76
BCPL: 1969
† BCPL (Basic Combined Programming Language) è un linguaggio
†
†
†
†
di programmazione sviluppato da Martin Richards
dell'Università di Cambridge, in seguito alle difficoltà che
aveva incontrato nell'utilizzo del suo predecessore, il CPL.
Il primo compilatore venne implementato mentre Richards si
trovava al MIT, nella primavera del 1967.
Il linguaggio venne presentato per la prima volta al 1969
Spring Joint Computer Conference.
L'architettura del BCPL influenzò pesantemente il linguaggio
B, da cui Dennis Ritchie in seguito sviluppò il C.
BCPL è un linguaggio di basso livello, che comprende solo
semplici tipi di dati.
77
…. BCPL
† BCPL è un linguaggio di basso livello, che si caratterizza per
avere un unico tipo di dati, il tipo word (un numero fisso di
byte, di solito scelto per allinearsi con la parola della
macchina).
† L'interpretazione del dato veniva fatta in base al tipo di
operatori utilizzati: ad esempio, utilizzando il segno di
addizione +, i dati venivano sommati come se si trattasse di
numeri interi, mentre l'operatore ! di dereferenziazione
trattava i dati come puntatori.
† Nel 1979 esistevano implementazioni di BCPL per almeno 25
diverse architetture, oggi il BCPL è stato interamente
soppiantato dal C.
78
BCPL: un esempio
† Questo esempio effettua la stampa del fattoriale:
GET "libhdr“
LET start() = VALOF
{
FOR i = 1 TO 5 DO writef("fact(%n) = %i4*n", i, fact(i))
RESULTIS 0
}
AND fact(n) = n=0 -> 1, n*fact(n-1)
79
La situazione negli anni ‘70
†
†
†
†
†
Nel '70 Intel, con la collaborazione di Federico Faggin, produce il 4004, la
prima CPU.
La fine del periodo iniziale della storia del software, potrebbe essere il '68,
per diversi motivi, uno è che molti studenti vedono con sospetto le ricerche
fatte al MIT con i finanziamenti dell'Esercito, che culminano con l'assalto ai
laboratori nel '68 e proprio in quest’anno nasce un movimento per portare il
computer al popolo, di cui un protagonista fu Lee Feldestain.
Un altro motivo è che in quel periodo l'IBM, pressata, dagli antimonopolisti,
decise ,per dimostrare di non essere monopolista, di suddividere il prezzo
delle macchine da quello del software, il famoso `unbundling', dando così
spazio a potenziali concorrenti.
Gli anni seguenti sono un grande fermento che culminano nella realizzazione
nel primo PC, che non è l'Apple come molti credono, ma una macchina venduta
in kit che si chiamava Altair. Molti l'avranno vista nel film `War Games', era
una scatola con dentro un microprocessore, costava 300 dollari e aveva solo
256 byte di memoria. Praticamente inservibile, eppure ebbe un grandissimo
successo, portava finalmente in casa di tutti un computer, quello che Lee
Feldstein ed i suoi amici predicavano da tempo.
Ancora una accelerazione incredibile: nel '76 appare il Sol, progettato da
Lee, una bella macchina di architettura moderna e finalmente nel '77 l'Apple.
80
Forth: 1970
† Nel 1970 Charles Moore crea il Forth. Secondo Moore il
Forth doveva essere un linguaggio di quarta generazione
(fourth generation), ma siccome il suo sistema operativo
prevedeva nomi di file di soli 5 caratteri, fu battezzato
Forth.
† Il Forth prevede la possibilità sia di essere eseguito in
modalità interattiva, rendendo possibile il suo utilizzo come
shell in sistemi che non possedevano un vero e proprio
sistema operativo, sia la possibilità di compilare sequenze di
comandi per una loro successiva esecuzione.
† Il telescopio di Kitt Peaks è, per esempio, controllato da un
programma FORTH.
† E’ sopravvissuto solo tra gli appassionati e tra gli accademici, i
primi per diletto e lavoro, i secondi per la ricerca in ambito
lambda calcolo.
81
Prolog: 1970
Nello stesso anno, in Francia, compare anche il
Prolog (PROgramming LOGic), che è un linguaggio
di programmazione che adotta il paradigma logico.
† E' stato ideato da Robert Kowalski (aspetto
teorico), Marten Van Emdem (dimostrazione
sperimentale), ed implementato da Alain
Colmerauer, costituendo un tentativo di costruire
un linguaggio di programmazione che consentisse
l'espressione del problema in forma logica invece
della traduzione di un algoritmo di soluzione in
forma di istruzioni da eseguire da parte della
macchina.
† Si basa sul teorema SLD ed è stato ideato per le
esigenze di Intelligenza Artificiale (AI), infatti la
sua sintassi e la semantica sono molto semplici e
chiare (lo scopo primitivo era quello di fornire uno
strumento di lavoro a linguisti privi di conoscenze
informatiche). Diventando così un serio
competitore di LISP.
†
82
Prolog: caratteristiche
Il Prolog si basa sul calcolo dei predicati (precisamente il calcolo di
predicati del primo ordine); tuttavia la sintassi è limitata a formule
dette clausole di Horn che sono disgiunzioni di letterali del primo
ordine quantificate universalmente con al più un letterale positivo.
† L'esecuzione di un programma Prolog è comparabile alla
dimostrazione di un teorema mediante la regola di inferenza detta
risoluzione (introdotta da Robinson nel 1965). I concetti
fondamentali sono l'unificazione, la ricorsione in coda e il
backtracking.
† Visto che uno dei maggiori problemi di oggi è incrementare la
velocità dei computer, Prolog è un linguaggio ideale per creare
prototipi.
† Il suo concetto è di usare architetture parallele. Risolve problemi di
ricerca della conoscenza (ovvero di ricerche in database) sfruttando
la potenza di computer multi-processore per agire
contemporaneamente in più parti dello stesso database.
†
83
Prolog: funzioni principali
Intelligent Systems - programmi che eseguono
compiti utili, servendosi di tecniche di Intelligenza
Artificiale .
† Expert Systems - systemi intelligenti che
riproducono aspetti del decision-making al livello di
esperienze umane.
† Natural Language Systems - che possa analizzare e
rispondere a istruzioni fornite in linguaggio
naturale.
† Relational Database Systems
L'attuale implementazione di Prolog é dovuta in gran
parte all'efficente codifica di David Warren.
†
84
Prolog: un esempio
85
Pascal: 1970
†
†
†
†
†
Nel 1970 Niklaus Wirth, membro dell'International
Federation of Information Processing (IFIP).
pubblica il Pascal, il primo linguaggio strutturato, a
scopo didattico. Infatti il suo principale obiettivo era
che si presentasse molto efficiente da implementare
e da far girare, consentendo lo sviluppo di programmi
ben strutturati e ben organizzati, che servissero da
esempio per l'insegnamento della programmazione.
Il PASCAL è diretto discendente di ALGOL 60, che
lo stesso Wirth aiutò a sviluppare, e contiene anche
componenti derivanti da ALGOL 68 e ALGOL-W.
Fu così chiamato in onore del matematico e filosofo
francese Blaise Pascal, inventore della prima
macchina calcolatrice automatica.
La pubblicazione originale del linguaggio avvenne nel
1971, con una successiva revisione nel 1973.
Fu il programma prescelto per l'insegnamento dagli
anni '60 alla fine degli anni '80.
86
Pascal: caratteristiche
† Presenta una sintassi molto chiara e molto rigida.
† L'obbligo di dividere il programma in sezioni ben definite
(uses, declaration, implementation) e di dichiarare in anticipo
tutte le variabili usate nel programma
† Permette l'uso di tipi di dati complessi e definibili dal
programmatore (i record); permette (con alcune limitazioni)
l'uso dei puntatori e l'allocazione dinamica della memoria (new
e delete).
† Al posto delle subroutine di uso comune nei linguaggi di allora,
il Pascal introduce le procedure e le funzioni, che estendono il
concetto di subroutine incapsulando al loro interno le variabili
e i dati locali, ed esponendo solo i valori in ingresso ed in
uscita.
† Inoltre, nella sua formulazione originale, era privo
dell'istruzione GOTO, aggiunta poi in seguito con riluttanza.
87
Pascal: caratteristiche
† Essendo un linguaggio pensato per degli utenti inesperti,
spesso i compilatori Pascal hanno un atteggiamento materno
nei confronti del programmatore, partendo dal presupposto
che qualunque irregolarità del codice scritto sia un errore,
che infastidisce un po' gli esperti.
† In cambio è un linguaggio completo e potente, e soprattutto
educa fin dall'inizio ad adottare un buono stile di
programmazione e ad analizzare a fondo il problema prima di
cominciare a scrivere il codice, cosa che rende i programmi
Pascal più chiari e più facili da leggere.
† Data la diffusione negli ambienti scolastici, ne sono state
create versioni ad oggetti, tipo l'Object Pascal e Delphi.
88
Pascal: funzioni principali
† Built in Data Types- Pascal contiene i suoi tipi di dati, che
†
†
†
†
†
sono: Integer, Real, Character, e Boolean.
User defined Data Types - ha l'abilità di definire tipi scalari
di dati così come subrange di quei tipi.
Provides a defined set of Data Structures- Le data
structures includono Arrays, Records, Files and Sets.
Has a strong data typing element - il compilatore Pascal può
diagnosticare un'assegnazione incompatibile di tipo di
variabile.
Supports Structured Programming - tramite l'utilizzo di
sottoprogrammi, chiamate a procedure e funzioni.
Simplicity and Expressivity - poichè il linguaggio è semplice e
naturalmente espressivo consente un efficace insegnamento
dei metodi di programmazione .
89
Pascal: esempio
90
Smalltalk. : 1972
† Smalltalk è un linguaggio di programmazione
object-oriented sviluppato allo Xerox PARC da
Alan Kay, Dan Ingalls, Ted Kaehler, Adele
Goldberg, e altri.
† Negli anni successivi saranno sviluppate le
versioni Smalltalk-72, Smalltalk-74 and
Smalltalk-76. Quest'ultimo ispirandosi anche a
Simula.
† Molti concetti attualmente impiegati nello
sviluppo del software (es. design patterns,
extreme programming, refactoring) derivano
dalla comunità Smalltalk. Lo Smalltalk ha
pesatemente influenzato altri linguaggi come
Objective C, Actor, Java and Ruby.
91
Smalltalk. : caratteristiche
† Tutto e' un oggetto in Smalltalk. Non ci sono tipi di
dati semplici, Smalltalk lavora come Java e .Net in
una macchina virtuale.
† La sintassi tenta di avvicinarsi all'inglese parlato,
ma e' totalmente diversa da qualsiasi altro
linguaggio di programmazione.
† Smalltalk naque gia' in un ambiente grafico. Ed era
circa 10-15 anni avanti al suo tempo. Smalltalk
aveva un buon successo fino all'arrivo di Java.
† Un esempio relativo agli array:
92
C : 1972
† Fu ideato nei Bell Laboratories della
AT&T da Dennis Ritchie come
evoluzione del linguaggio B di Ken
Thompson usato per la scrittura dei
primi sistemi operativi UNIX.
† La definizione formale si ha nel 1978
a cura di B. W. Kernighan e D. M.
Ritchie.
† Il compilatore C è incluso nel sistema
operativo di Unix e il suo utilizzo
crescerà in modo esplosivo anche al di
fuori dei laboratori Bell.
† Il C appare semplice, efficiente e
flessibile, infatti eseguire programmi
scritti in C su altri sistemi operativi è
più facile che con altri linguaggi.
93
C: caratteristiche
† Il C è tecnicamente un linguaggio di programmazione ad
alto livello. Tuttavia, poiché esso mantiene evidenti
relazioni semantiche con il linguaggio macchina e
l'assembly, risulta molto meno astratto di linguaggi
anche affini, come per esempio il Pascal.
† Per questo motivo, talvolta viene anche identificato con
la locuzione (più ambigua) linguaggio di medio livello, se
non addirittura (in modo certamente improprio) come
macro-assembly, o assembly portabile..
† Il C è rinomato per la sua efficienza, e si è imposto
come linguaggio di riferimento per la realizzazione di
software di sistema su gran parte delle piattaforme
hardware moderne. La standardizzazione del linguaggio
(da parte dell'ANSI prima e dell'ISO poi) garantiscono
la portabilità dei programmi scritti in C (standard,
spesso detto ANSI C) su qualsiasi piattaforma.
94
C: caratteristiche
† il programma è composto da moduli compilati
†
†
†
†
†
separatamente
permette la ricorsione
ambiente e memoria locali dinamici (anche statici
se dichiarati tali)
permette puntatori
Garbe collection (statico)
Heap
† Basato su pochi concetti elementari:
–
–
–
–
espressione
dichiarazione / definizione
istruzione / blocco
funzione
95
C: componenti
Il nucleo si fonda su un ricco set di:
† Tipi di dati:
- Base
- Derivati
† Strutture di controllo:
- Selezione (strutture decisionali)
- Iterazione
† Costrutti di decomposizione del programma:
- Funzione
- Unità di compilazione (modulo)
† Librerie Standard di corredo al compilatore:
- Standard I/O
- Gestione stringhe
- Gestione dinamica della memoria
- Funzioni matematiche
- Altre
† Si noti come, rispetto ad altri linguaggi, molte funzionalità siano rese
disponibili come librerie “esterne” invece che come costrutti del
linguaggio.
96
C: fattori del successo
Prima di tutto la felice scelta del modo di astrazione
dall'hardware, che pur essendo del tutto logico e generico
rimane molto vicino all'hardware stesso: il linguaggio C si basa
su poche istruzioni chiave molto semplici, che spesso ricalcano
l'assembly delle CPU e sono traducibili direttamente con una
singola istruzione di linguaggio macchina.
† Riserva un ruolo centrale al concetto di puntatore, che viene
generalizzato fino a concidere con l'indirizzamento indiretto,
un modo di accedere alla memoria hardware caratteristico di
tutte le moderne CPU.
† Inoltre la grammatica e la sintassi del C sono molto libere e
flessibili, permettendo di scrivere istruzioni complesse e
potenti in poche righe di codice .
†
In definitiva, il successo del C fu decretato dall'essere un
linguaggio creato da programmatori esperti, per essere usato da
programmatori esperti.
97
C: ambienti d’uso
† Oltre che per il software di sistema, il C è stato a lungo
il linguaggio dominante in tutta una serie di altri domini
applicativi caratterizzati da forte enfasi sull'efficienza.
Esempi tipici sono le:
- telecomunicazioni,
- il controllo di processi industriali e
- il software real-time.
† Oggi il predominio del C in questi contesti è in parte
diminuito a seguito dell'avvento di competitor
significativi, primo fra tutti il C++; tuttavia, il tempo in
cui il C si potrà considerare obsoleto appare ancora
molto lontano.
98
C: lo sviluppo
† Il suo successivo larghissimo utilizzo portò alla nascita
di diversi dialetti e quindi alla necessità di definirne uno
standard, realizzatosi nel 1983 con la versione ANSI
del C. Prendendo spunto da questa versione definitiva, e
unendo al C l'uso delle classi di Simula, Bjarne
Stroustrup iniziò a sviluppare il C++.
† Grazie alla particolare efficienza del codice prodotto
dai sui compilatori, il C venne utilizzato per riscrivere la
maggior parte del codice del sistema UNIX, riducendo
l'uso dell'assembly ad un piccolo gruppo di funzioni.
† La sua importanza tuttavia, crebbe solo dopo il 1978 con
la pubblicazione da parte di Brian Kernighan e Dennis
Ritchie del libro The C Programming Language nel quale
il linguaggio venne definito in modo preciso.
† Lo standard attuale del linguaggio è stato definito
dall'International Standard Organization (ISO) nel
1999, ed è noto come ISO C99 (codice ISO 9899).
99
… C: un esempio
Include
la libreria
standard
di I/O
main():
identifica il
programma
principale e
rappresenta il
punto
di ingresso del
programma
all’inizio della
sua esecuzione
100
Tiny Basic : 1975
Il dottor Wong sviluppa Tiny BASIC, che
occupa solo 2K di memoria ed è caricabile da
nastro perforato.
Può funzionare praticamente su qualsiasi
macchina con processore 8080 o Zilog Z80.
† In un tipico pc ci sono 4K di memoria, così con
questo linguaggio 2K resterebbero disponibili.
† Tiny BASIC è anche il primo programma
freeware (cioè gratuito).
† Nel suo interno furono trovate queste due
buffe frasi: "All wrongs reserved" e
"Copyleft".
†
101
BASIC : 1975
Una delle più famose implementazioni di Basic è quella curata
da Bill Gates e Monte Davidoff per l'Altair 8800, poi evoluta
in GW-BASIC per il primo MS-DOS.
† Negli anni dei primi microcomputers, tra cui il famoso
Commodore 64, il linguaggio BASIC era fornito in dotazione,
sia per la programmazione che come sistema operativo a riga
di comando.
† In seguito il BASIC ha subito notevoli evoluzioni e
cambiamenti diventando un linguaggio strutturato, compilato e
con potenzialità molto simili ai linguaggi evoluti per
professionisti. Attualmente esistono innumerevoli
implementazioni del BASIC che ricalcano il concetto di
partenza ampliandolo con i nuovi concetti di gestione di
oggetti, ricorsività, strutturazione, etc... (per esempio Visual
Basic)
† Il 1976 potrebbe segnare la nascita del software proprietario
e dei principi che ci stanno dietro. Infatti assieme all'Altair si
poteva comperare una versione del Basic, a circa 150 dollari.
†
102
E negli anni successivi?
1977:
† MUMPS (Massachusets general hospital Utility Multi-
Programming System) ottiene il suo riconoscimento ANSIstandard. MUMPS era usato originariamente per salvare le
cartelle dei pazienti per cui il linguaggio comprende solo
caratteri di testo.
† La Honeywell partecipa alla gara per progettare il nuovo
linguaggio battezzato ADA e il team di Jean Ichbiahn vincerà
con la sua soluzione.
† Kim Harris e i suoi partner creano il FIG, (FORTRAN
Interest Group). Svilupperanno il FIG-FORTRAN vendendolo
per $20.
† Niklaus Wirth inizia a sviluppare il successore del Pascal,
Modula (MODUlar LAnguage). Modula è un linguaggio
fortemente segmentato, che si adatta bene alle esigenze di
elaborazioni parallele.
103
…E negli anni successivi?
1978: Esce il linguaggio CSP
1983: Prima uscita del linguaggio ADA, derivato da Algol 68
1986:E' disponibile una nuova versione del linguaggio C, il C ++
1986:Annuncio di Eiffel, ispirato a SmallTalk- 80. Eiffel è un
linguaggio object-oriented che enfatizza il disegno e la
costruzione di software di elevata qualità e riusabilità
† 1988:Esce il Perl (Practical Extraction and Report Language),
creato da Larry Wall. Un linguaggio di script ottimizzato per
fare la scansione arbitraria di file di testo, per estrarne
informazioni e stampare report basati sui dati estratti.
† 1988: Esce il Quick Basic.
† 1989: Con l'avvento del Web viene reso disponibile un metalinguaggio che ne rappresenterà la base di sviluppo dei siti:
l'HTML.
†
†
†
†
104
… E ancora…
1992: Microsoft annuncia il Visual BASIC. Si tratta
di un derivato del BASIC, con l'aggiunta della
gestione object-oriented e event driven, ideale per
l'ambiente Windows.
† 1995: Fa la sua comparsa Java 1, figlio di C++ e
SmallTalk.Il Turbo Pascal risorge a nuova vita in
Delphi.
† 1998: Esce la versione Java 2 del famoso
programma.
† 2000: Da Java 2 deriva il linguaggio "C#".
†
105
Un po’ di richiami
Fino a circa la fine dell'80, il software o veniva ceduto assieme alla
macchina, o veniva scritto su richiesta dei clienti, è solo con la
nascita del PC IBM, 1981, che il computer si diffonde a milioni di
pezzi e nasce una richiesta di massa di software e quindi la
necessità di una legislazione.
† Su come proteggere i diritti dell'autore del programma software
esisteva un dibattito teorico già da una decina d'anni. In Francia nel
'68, una legge dichiarò semplicemente il software non brevettabile.
† Negli USA, il software non veniva brevettato in quanto l'Ufficio
Brevetti non aveva la più pallida idea di come si potesse brevettare
un programma software. Il problema infatti esiste tuttora, essendo
quasi impossibile riconoscere se un software in qualche modo lede i
diritti brevettuali di un altro, salvo plateali copie pedanti.
† Comunque, sulla pressione dei produttori di software, il governo
americano promulgò nel 1980 il Copyright Act con il quale si
riconosceva al software un tipo protezione simile a quella accordata
sino allora ai testi letterari o alle altre forme d'autore.
†
106
Un po’ di richiami
Non sfuggi' ai legislatori l'effetto 'Mimetè, ma venne semplicemente risolto
vietando severamente ogni forma di duplicazione del software. Tanto era
rigida la legge che un pò dopo dovettero chiarire che la duplicazione per uso
di 'back-up' era lecita!
† Inoltre si iniziò ad usare la formula della licenza d'uso personale, che vi vieta
di installare il vostro Windows sulla seconda delle due macchine che avete in
casa, se non comprate la seconda licenza. Infatti il software non è vostro,
resta di proprietà di Bill che gentilmente vi permette di installarne una copia
e una sola.
† L'Italia seguendo le direttive di Bruxelles si è data una legge sul software
nel 1992, legge 518. Senza entrare nei dettagli, voglio solo far notare che la
copia illecita di software è punita con reclusione da 3 mesi a tre anni. Quasi
come un omicidio!
† La legislazione italiana però, un pò più permissiva di quella americana,
permette la rivendita della licenza software e pur non autorizzandola
espressamente, non condanna la copia per uso non di lucro. Ma poichè lucro
potrebbe anche essere il fatto di copiare per uso personale in quanto si
`risparmia' di pagare la licenza, non è così sicuro che si possa copiare per uso
personale, quindi non vi suggerisco di farlo!!!!!!
†
107
Generalità sui Sistemi Operativi
† Un sistema operativo è un insieme di programmi che
corredano l’elaboratore, gestendone le risorse hardware
e software.
†
Controlla l’esecuzione dei lavori degli utenti e permette
l’efficiente utilizzazione delle risorse dell’elaboratore;
per risorse s'intendono i dispositivi hardware e
software che concorrono all’elaborazione
dell’informazione.
† Esso realizza una duplice funzionalità: costituisce
un’interfaccia tra la macchina e l’utente e gestisce in
modo ottimale le risorse del sistema.
108
Generalità sui Sistemi Operativi
†
La funzione principale del sistema operativo è la gestione delle
risorse di cui il sistema dispone (Processore, Memoria,
Periferiche).
†
Il sistema operativo coordina le varie operazioni, stabilisce le
priorità quando vi sono più richieste, sfrutta nel modo migliore
le risorse.
†
L’utente ha così l’impressione di avere la macchina a sua
completa disposizione, anche se collegata in rete ed è sicuro di
trovare la propria stampa anche se altri usano la stampante.
†
Il compito del sistema operativo è quindi quello di portare la
macchina all’utente, permettendo a questo di usarla in modo
semplice, sicuro ed efficiente.
109
Generalità sui Sistemi Operativi
†
Il modo di operare di un sistema definisce i seguenti tipi di
elaborazione:
†
elaborazione a lotti (batch processing): più lavori vengono
raccolti e presentati al sistema che li elabora in sequenza e ne
fornisce i risultati relativi (esempi il calcolo degli stipendi
mensili del personale di un’azienda, l’elaborazione di dati
sperimentali raccolti per un certo periodo).
†
elaborazione in tempo reale (real time processing): i dati su
cui operano i programmi per ottenere risultati arrivano
ininterrottamente e vengono elaborati istantaneamente
influenzando eventualmente elaborazioni successive (un
esempio è il sistema di prenotazioni dei posti su linee).
110
Generalità sui Sistemi Operativi
†
elaborazione in multi programmazione (multiprogramming): più
lavori possono essere eseguiti contemporaneamente la CPU può
eseguire una alla volta, nel tempo, istruzioni di job diversi
permettendone uno sviluppo contemporanero senza dover
attendere il completamento di un lavoro prima di iniziarne un
altro.
†
multielaborazione (multiprocessing): più lavori vengono
elaborati simultaneamente mediante duplicazione di unità. Ad
esempio più unità centrali possono operare in parallelo.
111
Generalità sui Sistemi Operativi
†
divisione di tempo (time sharing): il tempo di CPU è ripartito
fra più utenti; più lavori possono essere elaborati
simultaneamente ed ogni utente avrà la sensazione di essere
l’unico utilizzatore del sistema. Il funzionamento in time
sharing differisce dalla multiprogrammazione per il fatto
che l’elaborazione rimane sempre sotto il controllo
dell’utente e quindi esiste un colloquio utente-elaboratore.
†
modo interattivo: viene stabilito tra l’utente e il sistema un
colloquio tramite unità di accesso che generalmente consiste
in un terminale video con tastiera; con l’interattività ad
esempio è possibile verificare istantaneamente la validità
sintattica delle frasi del programma e provvedere
immediatamente alla loro eventuale correzione.
112
Generalità sui Sistemi Operativi
†
Per quanto riguarda il tipo di accesso permesso all’utente al
sistema di elaborazione possiamo distinguere in:
†
accesso locale dei lavori: l’utente può accedere alle classiche
†
accesso remoto: i lavori giungono al sistema da stazioni
unità di input-output poste nello stesso ambiente del sistema
di elaborazione;
remote collegate.
113
L’evoluzione dei Sistemi Operativi
anni quaranta
I primi elaboratori degli anni Quaranta erano macchine di enormi
dimensioni. All’epoca erano però lo stato dell’arte della tecnologia
e permettevano di automatizzare i lavori d’ufficio.
† In
macchine così complesse, già era complicata la
programmazione, figuriamoci la gestione delle risorse.
†
Non esisteva un sistema
operativo in grado di coordinare gli
eventi: tecnici altamente
specializzati, gli operatori,
intervenivano direttamente sulle
componenti fisiche della macchina
per poter fare avanzare il lavoro.
†
114
L’evoluzione dei Sistemi Operativi
anni cinquanta
†
Una prima rudimentale forma di sistema operativo è data
dall’introduzione
del
monitor
o
supervisore,
un
sequenzializzatore automatico che permette il trasferimento
dell’elaborazione da un lavoro all’altro senza bisogno
dell’intervento diretto dell’operatore.
†
Il funzionamento di simili computer è detto "a programma
singolo": il software di base è costituito solo da semplici
istruzioni atte a svolgere le funzioni essenziali, come la
gestione delle periferiche di input/output. L’uso della macchina
è permesso ad un solo programmatore alla volta.
115
L’evoluzione dei Sistemi Operativi
anni cinquanta
Negli anni Cinquanta vennero introdotti i linguaggi di
programmazione, come il FORTRAN. Aumenta così il
numero dei programmatori, quindi degli utenti, quindi le
elaborazioni necessarie.
Le varie risorse delle macchine hanno differente velocità
di lavoro: si pensi alla stampante.
Si è cercato così di ridurre i tempi morti, delineando il
concetto di parallelismo: mentre vengono stampati dei
dati, il processore può nel frattempo eseguire un altro
lavoro. Si parla quindi di elaborazione batch per indicare
che in un unico lotto viene richiesta alla macchina
l’esecuzione di più lavori.
116
L’evoluzione dei Sistemi Operativi
anni cinquanta
Il batch monitor, ovvero il programma che sfrutta tale
parallelismo tra risorse, diventa così il primo vero sistema
operativo, in grado di gestire in modo ottimizzato le risorse
e di permettere agli utenti di velocizzare il proprio lavoro.
1951:
Il primo
Univac I è
spedito
all'Ufficio del
Censimento
degli USA in
marzo.
117
L’evoluzione dei Sistemi Operativi
anni sessanta
A cavallo tra gli anni Cinquanta e gli anni Sessanta il sistema
operativo subisce sostanziali modifiche; in particolare, nascono
due nuovi termini.
1. L’interattività indica un uso conversazionale e diretto della
macchina;
2. il time sharing è la condivisione delle risorse tra più utenti.
† Queste due funzionalità sono state introdotte col crescere
dell’esigenza degli utenti, che volevano elaboratori con
prestazioni sofisticate ma a prezzi contenuti.
† L’elaboratore permette di interagire con il processo durante la
sua stessa esecuzione, mentre permette la distribuzione nel
tempo dei propri servizi. In questo modo, è sempre più vicina la
definizione di sistema operativo.
†
118
L’evoluzione dei Sistemi Operativi
anni sessanta
†
Gli anni Sessanta si chiudono con un problema, che si delinea
con una sempre più grande chiarezza: i programmatori (come
del resto succede ancora oggi) non riescono a mantenersi al
passo con la tecnologia.
†
Il software viene prodotto a costi elevati e sfruttato in modo
non adeguato; si parla in questo caso di crisi del software: i
sistemi operativi sono troppo complicati, difficili da gestire e
con prestazioni che non giustificano i costi.
119
L’evoluzione dei Sistemi Operativi
anni settanta
† Negli anni Settanta si cerca una soluzione al
problema, sia sul versante del software che su
quello dell’hardware.
† Il
software diventa meno complicato, perché
diventa specifico per la singola macchina e non per
un grande elaboratore, che richiede una gestione
più complessa. Non si dimentichi infatti che le
capacità delle grandi unità di elaborazione centrali
vennero raggiunte e sorpassate da nuove macchine,
più agili, più flessibili e meno costose.
120
L’evoluzione dei Sistemi Operativi
anni settanta
†
Dal supercomputer che gestiva l’intero sistema
informativo, si passa all’uso di tante macchine
indipendenti, assegnate ciascuna ad un utente. Il
punto più significativo di questa importante
rivoluzione tecnologica è dato dall’introduzione del
personal computer nei primi anni Ottanta.
Commodore Pet 2000
121
Alcuni sistemi operativi tra
gli anni 50 e il 1975
† Atlas;
† ITS;
† XDS-940;
† Multics;
† THE;
† OS/360;
† Venus;
† TSS/360;
† RC 4000;
† VM/CMS;
† CTSS;
† Unix;
122
Sistema Operativo Atlas
Atlas (Kilburn et al. [1961], Howarth et al. [1961]) fu disegnato
alla University of Manchester in Gran Bretagna alla fine degli
anni 50 ed ai primi degli anni 60.
† I driver delle periferiche costituivano una delle parti principali
del sistema.
† Esso era un sistema operativo a lotti con spooling. Lo spooling
permetteva al sistema di registrare i job in base alla
disponibilità delle periferiche (unità a nastro magnetico, unità
per la scrittura o la lettura di nastri di carta, stampanti, unità
di lettura o di scrittura su schede).
†
1962: Teletype modello 33
composta da una tastiera ed
unità nastro
123
Sistema Operativo Atlas
La funzionalità più ragguardevole di Atlas, comunque, era la sua
organizzazione della memoria.
† La core memory (memoria centrale) era nuova e costosa allo stesso
tempo.
† Molti computer, come l'IBM 650, usavano un tamburo per la memoria
principale.
† La paginazione su richiesta veniva usata per trasferire automaticamente
informazioni tra la core memory e il tamburo.
†
La memoria fisica di Atlas era un
tamburo di 98 KB parole e di 16 KB
parole del core.
La memoria era divisa in pagine da 512
parole, fornendo 32 frame di memoria
fisica.
1953- IBM 650
124
Sistema Operativo Atlas
†
Se si verificava un errore di pagina, veniva richiamato un algoritmo di
rimpiazzo.
†
L'algoritmo di sostituzione di pagina cercava di prevedere il
comportamento degli accessi futuri alla memoria basandosi su quelli
precedenti. Un bit di riferimento veniva impostato per ogni frame ogni
volta che si accedeva a quest'ultimo.
†
I bit di riferimento venivano letti dalla memoria ogni 1.024 istruzioni,
e gli ultimi 32 valori di questi bit venivano conservati.
†
Lo storico veniva utilizzato per definire il tempo intercorso dall'ultimo
riferimento (t1), e l'intervallo tra gli ultimi due riferimenti (t2).
125
Sistema Operativo Atlas
†
Le pagine venivano scelte per il rimpiazzo nell'ordine seguente:
†
†
1. Qualsiasi pagina, con t1 > t2 + 1, veniva considerata inutilizzata.
2. Se t1 ≤ t2 per tutte le pagine, allora la pagina si rimpiazza con quella
con l’intervallo maggiore t2 - t1.
L'algoritmo di sostituzione dà per scontato che il programma acceda
ciclicamente alla memoria.
† Se il tempo intercorso tra gli ultimi due riferimenti è t2, allora un altro
riferimento è atteso in seguito per t2 unità di tempo.
† Se un riferimento non avviene (t1 > t2), si deduce che la pagina non
viene più utilizzata e quindi viene sostituita.
† Se tutte le pagine sono ancora in uso, allora quella di cui non ci sarà più
bisogno per il tempo più lungo verrà sostituita.
†
126
Sistema operativo XDS-940
‰
Il sistema operativo XDS-940 (1965) fu progettato a Berkeley
all’Università della California.
‰
Come il sistema Atlas, utilizzava la paginazione per la gestione della
memoria.
‰
XDS-940 era un sistema a condivisione del tempo.
‰
La memoria virtuale di ogni processo dell'utente era di soli 16 KB parole,
mentre la memoria fisica era di 64 KB parole.
‰
Ogni pagina era di 2 KB parole e la tabella delle pagine veniva mantenuta
nei registri.
127
Sistema operativo XDS-940
‰ Dato che la memoria fisica era più grande della memoria virtuale, molti
processi dell’utente potevano risiedere in memoria contemporaneamente.
‰ Il numero di utenti poteva essere aumentato con la condivisione delle
pagine, quando queste contenevano codice rientrante a sola lettura.
‰ I processi venivano mantenuti su un tamburo e venivano scambiati, in
base alle necessità, dentro e fuori dalla memoria.
128
Sistema operativo XDS-940
†
Il sistema XDS-940 fu costruito basandosi su di un XDS-930
modificato.
†
Le modifiche furono rappresentative dei cambiamenti apportati al
computer base per permettere di scrivere un sistema operativo in modo
corretto. Fu aggiunta la modalità user-monitor; alcune istruzioni (come
Halt e quelle di I/O), vennero definite come privilegiate: un tentativo di
eseguire un'istruzione privilegiata in modalità utente sarebbe stato
bloccato dal sistema operativo.
129
Sistema operativo XDS-940
†
Fu aggiunta un'istruzione di chiamata di sistema al gruppo di istruzioni in
modalità utente, la quale fu utilizzata per creare nuove risorse, come i
file, permettendo al sistema operativo di organizzare le risorse fisiche.
†
I file, per esempio, venivano allocati in blocchi da 256 parole sul
tamburo. Veniva usata una mappa di bit per la gestione dei blocchi liberi
sul tamburo.
†
Ogni file aveva un blocco-indice con puntatori ai blocchi dei dati attuali.
I blocchi-indice erano concatenati tra loro.
130
Sistema operativo XDS-940
†
Il sistema XDS-940 forniva anche chiamate di sistema per permettere
ai processi di creare, eseguire, sospendere, e distruggere i
sottoprocessi.
†
Un programmatore poteva costruire un sistema di processi. Processi
separati potevano condividere la memoria per le comunicazioni e la
sincronizzazione.
†
La creazione di un processo definiva un struttura ad albero, dove un
processo è la radice e i suoi sottoprocessi sono nodi nell'albero sotto di
esso. Ogni sottoprocesso poteva, a sua volta, creare altri sottoprocessi.
131
Sistema operativo THE
†
†
†
†
†
Il sistema operativo THE (Dijkstra [1968], McKeag e Wilson [1976]) fu
progettato alla Technische Hogeschool a Eindhoven in Olanda. Era un
sistema a lotti che funzionava su un computer olandese, EL X8, con 32
KB di parole a 27-bit.
Il sistema fu notato principalmente per il suo progetto semplice e
lineare, soprattutto per la sua struttura a livelli (6), e per l’uso di un
gruppo di processi concorrenti che impiegavano semafori per la
sincronizzazione.
A differenza del sistema XDS-940, tuttavia, il gruppo di processi nel
sistema THE era statico.
Il sistema operativo stesso fu creato come un insieme di processi tra
loro cooperanti.
Inoltre, furono creati cinque processi utente che servivano come agenti
attivi per compilare, eseguire e stampare i programmi utente.
132
Sistema operativo THE
†
†
†
†
†
Quando un job veniva concluso, il processo ritornava alla coda di input
per selezionare un altro job.
Questo sistema utilizzava un algoritmo di schedulazione della CPU
basato sulle priorità, che venivano ricalcolate ogni 2 secondi ed erano
inversamente proporzionali al tempo in cui la CPU era stata usata
recentemente (negli ultimi 8-10 secondi).
Questo schema dava maggiore importanza ai processi I/O bound e a
quelli nuovi.
La gestione della memoria era limitata dalla mancanza di supporto
hardware.
Tuttavia, dato che il sistema era limitato e i programmi potevano essere
scritti solo in Algol, veniva usato un sistema di paginazione software.
133
Sistema operativo Venus
†
Fortemente legato al sistema THE è il sistema Venus (Liskov [1972]).
†
Il sistema Venus era anche esso un progetto con struttura a strati, che
usava i semafori per sincronizzare i processi.
†
I livelli più bassi del progetto furono implementati in micro-codici,
fornendo, tuttavia, un sistema molto più veloce.
†
La gestione della memoria fu modificata nel tipo paginata a segmenti. Il
sistema fu inoltre progettato per essere a condivisione del tempo,
piuttosto che un sistema a lotti.
134
Sistema operativo RC 4000
Il sistema RC 4000, come il sistema THE, si distingueva principalmente
per le caratteristiche progettuali.
† Fu ideato per il computer danese RC 4000 da Regnecentralen, in
particolare da Brinch-Hansen (Brinch-Hansen [1970], Brinch-Hansen
[1973]).
† L'obiettivo non era di progettare un sistema a lotti, o un sistema a
condivisione del tempo, o altri sistemi specifici, ma di creare un nucleo di
sistema operativo, o kernel, su cui poter costruire un sistema operativo
completo.
† Così, la struttura del sistema era a strati, e venivano forniti solo quelli
più bassi: il kernel.
†
135
Sistema operativo RC 4000
†
†
†
†
†
Il kernel supportava diversi processi concorrenti.
Uno schedulatore della CPU di tipo round robin supportava i processi.
Anche se i processi stessi potevano condividere la memoria, il
meccanismo principale di comunicazione e sincronizzazione era il sistema
di messaggi fornito dal kernel.
I processi potevano comunicare tra di loro scambiandosi messaggi di
lunghezza fissa di otto parole. Tutti i messaggi venivano immagazzinati in
buffer facenti parte di un gruppo comune di buffer. Quando un buffer
del messaggio non era più necessario, veniva restituito al gruppo comune.
Una message queue (coda di messaggi) era associata ad ogni processo e
conteneva tutti i messaggi che erano stati inviati a quel processo, ma che
non erano ancora stati ricevuti.
I messaggi venivano rimossi dalla coda seguendo l'ordine FIFO
136
Sistema operativo RC 4000
†
Anche le periferiche di I/O venivano trattate come processi.
†
I driver delle periferiche erano codici che convertivano gli interrupt e i
registri della periferiche in messaggi.
†
In tal modo, un processo avrebbe scritto ad un terminale, inviandogli un
messaggio. Il driver di periferica avrebbe ricevuto il messaggio e fatto
apparire il carattere sul terminale. Un carattere in input poteva
interrompere il sistema e venire trasferito a un driver di periferica. Il
driver di periferica poteva creare un messaggio a partire dal carattere
immesso, e inviarlo ad un processo in attesa.
137
Sistema operativo CTSS
†
Il Compatible Time-Sharing System (CTSS) (Corbato et al. [1962]) fu
progettato presso MIT come sistema sperimentale a condivisione del
tempo.
†
Fu implementato su un IBM 7090 ed all'occorrenza supportava fino a 32
utenti interattivi.
†
Agli utenti veniva fornito un gruppo di comandi interattivi che
permetteva loro di manipolare i file, di compilare ed avviare i programmi
tramite un terminale.
138
Sistema operativo CTSS
Il 7090 aveva una memoria di 32 KB, formata da parole a 36-bit. Il
monitor utilizzava 5 KB parole, e lasciava 27 KB agli utenti.
† Le immagini della memoria utente venivano scambiate tra la
memoria e un tamburo veloce.
† La schedulazione della CPU impiegava un algoritmo a coda
multilevello con retroazione (multilevel-feedback-queue).
†
IBM 7090
139
Sistema operativo CTSS
†
Il quanto di tempo per il livello i era 2 * i unità di tempo.
†
Se un programma non finiva di utilizzare la CPU in un quantum di tempo,
veniva spostato al livello successivo della coda, assegnandogli il doppio
del tempo. Il programma al livello più alto (con il quantum più breve)
veniva avviato per primo.
†
CTSS era estrememente ben riuscito e rimase in uso fino al 1972.
†
Anche se era limitato, riuscì a dimostrare che il time-sharing era una
tecnologia di elaborazione pratica e conveniente.
†
Un risultato di CTSS fu di aumentare lo sviluppo dei sistemi a
condivisione del tempo; un altro risultato fu lo sviluppo di MULTICS.
140
Sistema operativo ITS
†
†
†
†
†
ITS, acronimo per Incompatible Timesharing System (sistema
timesharing incompatibile), era un altro dei primi, rivoluzionari e
influenti sistemi operativi Time sharing del MIT. Fu sviluppato
principalmente al laboratorio di intelligenza artificiale del MIT, con aiuti
da parte del Progetto MAC.
Fu il primo sistema con pieno accesso condiviso ai file fra computer, il
primo con I/O indipendente dal terminale usato, oltre che a numerose
altre significative innovazioni.
Insieme ad altre innumerevoli stranezze, il suo interprete di comandi di
alto livello era un debugger e il suo editor principale era TECO,
programmabile anche lui in maniera altrettanto particolare.
ITS fu sviluppato sui mainframe PDP-6 e PDP-10 della Digital Equipmen
Corporation (DEC).
ITS fu prodotto da persone che non accettavano la direzione dello
sviluppo presa con Multics.
141
Sistema operativo MULTICS
†
Il sistema operativo MULTICS (Multiplexed Information and Computing
Service) fu ideato presso l’MIT come naturale estensione di CTSS a
partire dal 1963.
†
Quando divennero disponibili computer più grandi, gli ideatori di CTSS
decisero di creare una funzione di sistema per la condivisione del tempo.
†
Nella sua concezione originale avrebbe dovuto poter servire le necessità
di calcolo dell'intera città di Boston similmente ad un servizio di
distribuzione di elettricità o acqua corrente I grandi sistemi di
computer sarebbero stati connessi da cavi telefonici a terminali negli
uffici e nelle case in tutta la città. Il sistema operativo sarebbe stato un
sistema a tempo condiviso funzionante in modo continuativo e dotato di
un vasto sistema di programmi e dati condivisi.
142
Sistema operativo MULTICS
MULTICS fu progettato da un gruppo dell’MIT: GE (che in seguito
vendette il suo dipartimento di computer alla Honeywell), ed ai Bell
Laboratories (che abbandonarono il progetto nel 1969).
† Il GE 635 di base fu modificato per evolversi in un nuovo sistema
chiamato GE 645, principalmente con l'aggiunta di hardware con
memoria a segmentazione paginata.
† Un indirizzo virtuale era composto da un numero di segmento a 18-bit e
da uno spiazzamento di parole a 16-bit . I segmenti venivano poi divisi in
pagine da 1 KB parole. Veniva usato l'algoritmo di rimpiazzo delle pagine
detto second-chance.
† Lo spazio per l'indirizzo virtuale segmentato era fuso nel file system;
ogni segmento era un file, e il suo indirizzo il nome del file stesso. Il file
system stesso era una struttura multilivello ad albero che permetteva
agli utenti di creare le loro strutture di sottodirettori.
†
143
Sistema operativo MULTICS
†
†
†
†
†
Come CTSS, MULTICS utilizzava una coda multilivello con retroazione
per la schedulazione della CPU.
La protezione era realizzata da una lista di accesso associata ad ogni file
e da un gruppo di anelli di protezione per i processi in esecuzione.
Il sistema, che era scritto quasi interamente in PL/1, comprendeva circa
300.000 righe di codice.
Fu esteso ad un sistema multiprocessore, permettendo ad una CPU di
essere messa fuori servizio per la manutenzione mentre il sistema
continuava a funzionare.
Il sistema venne modificato nell'arco degli anni seguenti per essere
usato su varie macchine e sopravvisse fin quasi ai nostri giorni, infatti
l'ultimo sistema Multics rimasto in servizio, per il Dipartimento della
Difesa Canadese, fu definitivamente spento il 30 ottobre 2000.
144
Sistema operativo OS/360
La linea di sviluppo più duratura di un sistema operativo è, senza dubbio,
quella dei computer IBM.
† I primi computer IBM, come l'IBM 7090 e l'IBM 7094, sono i primi
esempi di sviluppo di procedure comuni di I/O, seguite da un monitor
residente, da istruzioni privilegiate, dalla protezione della memoria, e da
semplice elaborazione a lotti.
† Questi sistemi furono sviluppati separatamente, spesso in luoghi diversi
e indipendenti. Come risultato, IBM si trovò di fronte a molti computer
differenti, con linguaggi e software di sistema diversi.
†
IBM 7094
145
Sistema operativo OS/360
L'IBM/360 fu progettato per cambiare questa situazione: fu realizzato
come una famiglia di computer che copriva l'intera gamma di macchine
per piccole imprese a grosse macchine per uso scientifico.
† Serviva solo un solo software per questi sistemi, che utilizzavano tutti lo
stesso sistema operativo: OS/360 (Mealy et al. [1966]).
† Si pensava che questa disposizione potesse ridurre i problemi di
manutenzione per l’IBM e che permettesse agli utenti di spostare
liberamente programmi e applicazioni da un sistema all’altro.
†
146
Sistema operativo OS/360
†
Sfortunatamente, OS/360 cercò di fare troppe cose, e, come risultato,
non svolse i propri compiti particolarmente bene.
†
Il file system includeva un campo di informazioni che definiva il genere
di ogni file; erano definiti diversi tipi di file, con record di lunghezza
fissa e variabile, e i file bloccati o non bloccati. Veniva utilizzata
l'allocazione contigua, in modo che l'utente potesse indovinare la
dimensione di ogni file in output.
†
Il Job Control Language (linguaggio di controllo del job: JCL) aggiunse
dei parametri per ogni possibile opzione, rendendolo incomprensibile
all'utente medio.
147
Sistema operativo OS/360
†
Le routine di gestione della memoria fu ostacolata dall'architettura.
Sebbene fosse utilizzata una modalità di indirizzamento tramite
registro base, il programma poteva accedere e modificare tale registro,
in modo da venir generati indirizzi assoluti dalla CPU.
†
Questa modifica impediva la rilocazione dinamica; il programma era
legato alla memoria fisica nella fase di caricamento.
Furono prodotte due versioni diverse del sistema operativo: OS/MFT
che utilizzava regioni fisse e OS/MVT che utilizzava regioni variabili.
† Il sistema fu scritto in linguaggio assembler da migliaia di
programmatori, dando come risultato milioni di righe di codice
richiedendo molta memoria per i propri codici e tabelle, e spesso
l’overhead della CPU consumava metà dei cicli totali.
†
148
Sistema operativo OS/360
†
Col passare degli anni, furono rilasciate nuove versioni per aggiungere
caratteristiche nuove e per correggere gli errori.
†
Tuttavia, la correzione di un errore spesso ne provocava un altro in
qualche parte remota del sistema, in modo che il numero di errori
conosciuti nel sistema restava costante.
†
Ad OS/360 venne aggiunto il supporto per la memoria virtuale con
l’introduzione dell’architettura IBM 370.
†
L’hardware sottostante permetteva la gestione di memoria virtuale a
pagine segmentate. Versioni più recenti del sistema operativo
utilizzavano tale hardware in modalità diverse.
149
Sistema operativo OS/360
†
L’OS/VS1 creava un unico grande spazio di memoria virtuale, ed eseguiva
in esso OS/MFT. In questo modo, il sistema operativo stesso era
paginato, così come i programmi degli utenti.
†
L’OS/VS2 Release 1 eseguiva OS/MVT in memoria virtuale; infine
OS/VS2 Release 2,conosciuto come MVS, forniva ad ogni utente un
proprio spazio di memoria virtuale.
†
MVS è principalmente un sistema operativo a lotti.
†
Il sistema CTSS veniva eseguito su un IBM 7094, ma l’MIT decise che lo
spazio di indirizzamento del 360, successore dell’IBM 7094, era troppo
piccolo per il MULTICS, e così cambiarono fornitore.
150
Sistema operativo TSS/360
†
Come conseguenza, IBM decise di creare un proprio sistema a tempo
condiviso: TSS/360 (Lett e Konigsford [1968]).
†
Come MULTICS, TSS/360 si proponeva di essere una funzione di
sistema per la gestione della condivisione del tempo.
†
L’architettura base del modello 360 fu modificata nel modello 67 per
gestire la memoria virtuale. Molte aziende acquistarono il sistema
360/67 prima dell’uscita di TSS/360.
†
TSS/360, tuttavia, fu ritardato nell’uscita, e così vennero sviluppati
altri sistemi a condivisione del tempo come sistemi temporanei, fino alla
piena disponibilità. Una opzione di condivisone del tempo (time-sharing
optino: TSO) venne aggiunta ad OS/360.
151
Sistema operativo VM/CMS
†
Il sistema VM/CMS (Virtual Machine/Conversational Monitor System,
originariamente chiamato CP/CMS) è un sistema operativo di IBM che
possiede due componenti principali, VM e CMS, ciascuna operante come
un sistema operativo indipendente.
†
VM è un sistema a macchine virtuali il quale fornisce ad ogni singolo
utente un ambiente assimilabile ad un mainframe personale.
†
CMS e' un semplice sistema operativo ad utente singolo progettato per
essere eseguito, pricipalmente, in ambiente VM.
152
Sistema operativo VM/CMS
Ad ogni utente di VM/CMS e' fornita la propria macchina virtuale in cui
eseguire CMS.
† Lo sviluppo partì basandosi su quello che era stato il "CP-40 Project",
lavorando con un System 360 Model 40 modificato, al Cambridge
Scientific Center (CSC) di IBM nell'autunno del 1964.
† CP-40 era un sistema operativo a macchina virtuale: un semplice
ambiente interattivo ad utenza singola e il CMS fu progettato per
lavorare con esso. L'implementazione attuale partì nel 1965 e il sistema
completo fu reso disponibile agli utenti nei primi mesi del 1966.
† VM/CMS non fu formalmente commercializzato come un prodotto IBM
e, per molti anni, ci furono diatribe politiche interne riguardanti quali
risorse avrebbero dovuto essere dedicate ad esso a dispetto di altri
prodotti IBM della stessa tipologia.
†
153
Sistema operativo VM/CMS
†
Dopo l'annuncio del System 360 Model 67 da parte di IBM, il software
fu convertito per funzionare su quella piattaforma hardware ed il CP-40
fu rinominato CP-67. Una prima versione del sistema fu installata ai
laboratori Lincoln del MIT nel 1967 a causa dell'insoddisfazione del
Lincoln per il TSS (Time Sharing System), che era molto lento ed
inaffidabile. Il personale del Lincoln collaborò attivamente con CSC per il
miglioramento del sistema operativo e così fece anche la Union Carbide,
la quale decise, anch'essa, di adottare VM/CMS.
IBM 360/67
154
Sistema operativo VM/CMS
All'inizio del 1968 si ebbe il successo del sistema operativo e la maggior
parte dei System 360/67 installarono VM/CMS e non TSS che era il
sistema "ufficiale" di IBM per quella piattaforma hardware. Questo
portò inevitabilmente alla dismissione di TSS, nel 1971.
† In seguito, l'utilità di VM/CMS impedì ogni tentativo di soppiantarlo e
costrinse IBM ad arrendersi di fronte all'evidente importanza dello
stesso.
†
VM 370 Welcome screen
155
Cosa andò storto con TSS/360 e
MULTICS?
Una parte del problema consisteva nel fatto che questi sistemi avanzati
erano troppo grandi e troppo complessi per essere compresi.
† Un altro problema risiedeva nell’assunto che la potenza di elaborazione
sarebbe stata disponibile tramite un grande computer remoto a
condivisione del tempo.
† Oggi, invece, sembra che la maggior parte delle elaborazioni verrà svolta
da piccole macchine individuali: i personal computer, e non da grandi
computer remoti che si propongono di gestire ogni cosa per ogni singolo
utente.
†
156
Da MULTICS a UNIX
†
Nel 1965, nei laboratori della Bell, una divisione AT&T, veniva aperto un
progetto chiamato Multics (Multiplexed Information and Computing
Service) che vedeva la collaborazione di General Electric e del MIT
(Massachusetts Institute of Technology) per trovare una soluzione
capace di gestire centraline telefoniche, sistemi di calcolo multiutente
con costi ridotti. Nonostante le buone intenzioni, problemi di budget
decretarono la fine del progetto ma questo non fermò Ken Thompson e
Dennis Ritchie che in seguito all'esperienze fatte precedentemente
continuarono a lavorare su un progetto loro.
Thompson e Ritchie
157
Da MULTICS a UNIX
†
La scelta si trovò di fronte ad evidenti problemi di sorta, ovvero la
necessità di trovare un calcolatore per portare avanti il progetto. Venne
preparato un piano di sponsorizzazioni ma questo fu rifiutato e le voci di
corridoio dicono che Bill Baker, il vice-presidente dei Bell Labs, esclamò:
``Bell Labs just doesn't do business this way!''
†
Era un progetto molto vago sotto l'aspetto economico e non fu
abbastanza convincente per ricevere i fondi necessari, là dove era già
stata decretata la fine di Multics in precedenza. Ritchie e Thompson non
si persero d'animo, prepararono un prospetto del sistema operativo e lo
distribuirono tramite l'ufficio stampa dei Bell Labs ad un ampio numero
di ricercatori. Questo scatto ebbe i suoi frutti e venne trovato un
piccolo e usato PDP-7 da utilizzare per la sperimentazione e lo sviluppo
del progetto. L'estate del '69 fu interamente dedicata a realizzare una
bozza significativa per iniziare i lavori del progetto.
158
Sistema operativo UNIX
†
Nel 1970 fu battezzato Unix da Brian Kernighan, come gioco di parole
con Multics, e fu sottoposto un prospetto a due responsabili dei
dipartimenti di ricerca per l'acquisto di un PDP-11; Doug McIlroy e Lee
McMahon furono di fondamentale importanza e una volta trovati i fondi
necessari fu possibile acquistare il calcolatore per il progetto. Il porting
di Unix dal PDP-7 al PDP-11 venne fatto tramite due terminali Teletype
33 e rapidamente attrasse a sè credibilità nei confronti degli altri
dipartimenti di ricerca. Sulla spinta del successo fu ulteriormente
proposto di acquistare un nuovo sistema PDP-11/45 e quest'ultima non
ebbe problemi a concretizzarsi.
PDP-7
PDP-11
159
Sistema Operativo UNIX
†
In origine tutto il sistema operativo era scritto in linguaggio assembly.
Era necessario trovare una soluzione per rendere questo iniziale sistema
operativo portabile su altri calcolatori in maniera semplice.
†
Ken Thompson inventò invece un linguaggio chiamato B, che fu
influenzato da un altro linguaggio chiamato BCPL (Basic Combined
Programming Language, ideato da Martin Richards presso l'università di
Cambridge.). Nel 1971 cominciò il lavoro al linguaggio che sarebbe
diventato il C, un passo evolutivo che svincolava il linguaggio dal
precedente calcolatore utilizzato per lo sviluppo.
160
Sistema Operativo UNIX
Nel 1973 il kernel di Unix fu riscritto in C e poteva funzionare su dieci
macchine.
† Nell'ottobre del 1973, Thompson e Ritchie presentarono un paper al
Symposium for Operating System Principles e l'interesse per il sistema
esplose. All'epoca, la AT&T era indagata per comportamenti
monopolistici e le fu ordinato di rimanere fuori dall'industria dei
computer.
† Ciò costrinse gli utenti a riunirsi per potersi prestare assistenza
reciprocamente, rinforzando i valori che all'inizio avevano portato alla
creazione del sistema.
† Nel 1975 Ken Thompson ritornò all'Università della California a
Berkeley, e portò Unix con sé. Là due dottorandi, Chuck Haley e Bill Joy,
fecero il porting del sistema Pascal, al quale Thompson aveva lavorato,
ad uno stato in cui poteva essere utilizzato, e crearono l'editor di testi
vi.
†
161
Sistema Operativo UNIX
Nacque così la Berkeley System Distribution di Unix o più
semplicemente BSD Unix, una soluzione che veniva distribuita su nastro
su richiesta. Le stesse intenzioni erano ben lontane dagli scopi
commerciali; la diffusione di BSD Unix, come affermò Joy, era un modo
per ampliare la base degli utenti e avere maggior feedback e così fu.
† Nel corso degli anni BSD Unix venne continuamente migliorato e
ampliato. La ``Second Berkeley Software Distribution'' (2BSD) era
pronta nel 1978 e a questa susseguì una nuova versione nel dicembre
1979, la 3BSD. Quest'ultima venne particolarmente apprezzata
all'interno degli ambienti scientifici e universitari. Grazie a Bob Fabry
viene ricevuto un ingente finanziamento dal progetto DARPA (Defense
Advanced Research Project Agency) volto a migliorare e sviluppare le
funzionalità di rete del sistema operativo. Nel 1980 vengono rilasciate le
distribuzioni 4BSD e 4.1BSD, il primo sostanzioso passo nel ramo
networking su TCP/IP.
†
162
Altri Sistemi operativo
†
†
†
†
†
Vi sono, ovviamente, altri sistemi operativi, e molti di essi hanno
caratteristiche interessanti.
Il sistema operativo MPC per la famiglia di computer Burroughs (McKeag
e Wilson[1976]) fu il primo ad essere scritto in un linguaggio di
programmazione per i sistemi.
Esso supportava la segmentazione e CPU multiple.
Il sistema operativo SCOPE per CDC 6600 (McKeag e Wilson [1976])
supportava anch’esso CPU multiple. Il coordinamento e la
sincronizzazione dei processi multipli era sorprendentemente ben
progettata.
Tenex (Bobrow et al.[1972]) fu uno dei primi sistemi con richiesta di
paginazione per il PDP-10, ed ebbe una grande influenza sui successivi
sistemi a condivsione del tempo, come TOPS-20 per DEC-20.
163
I Sistemi operativi usati oggi
†
Moltissimi sono i programmi usati dagli insegnanti e
dagli studenti che girano sotto Windows. Molte sono
le sue versioni in commercio sia per la gestione di un
computer singolo, sia per la gestione di una rete
integrata di PC (Windows NT).
Le versioni di questo sistema operativo si sono
rinnovate negli ultimi anni e la Microsoft, azienda
internazionale, ha provveduto a rinnovare il Windows
aggiungendo nuove funzioni, migliorando la grafica e
l'interfaccia anche se talvolta a discapito della
funzionalità.
Ultima verisone Windows XP.
164
I Sistemi operativi di oggi
Linux è un sistema operativo UNIX-like scritto nel 1991 da Linus
Torvalds.
† GNU/Linux e la gran parte del software con esso distribuiti sono
"software libero" ossia un software che utilizza una licenza che
permette certe libertà che normalmente non sono permesse nelle
licenze del software proprietario chiuso.
† Linux oggi è diventato un sistema operativo maturo e apprezzato:
dopo un importante utilizzo limitato a centri di ricerca, internet
service provider e altri settori di nicchia, Linux si propone come
sistema operativo generico per le più varie applicazioni, soprattutto
per sistemi di rete: web server, mail server, file server,
architetture di rete in genere, ma anche desktop. Questo è avvenuto
anche grazie all'impegno commerciale di importanti aziende: basti
citare RedHat, SuSE e IBM.
†
165
Fine della
presentazione
166