410 likes | 512 Views
TRACCIA PER LE LEZIONI 11-12 martedì 25 maggio, ore 16 30 -18 15 , aula 5. ARGOMENTI (EVOLUZIONE DEL SOFTWARE: ALCUNI PERCORSI) SOFTWARE: DI COSA PARLIAMO?
E N D
TRACCIA PER LE LEZIONI 11-12 martedì 25 maggio, ore 1630-1815, aula 5 ARGOMENTI (EVOLUZIONE DEL SOFTWARE: ALCUNI PERCORSI) SOFTWARE: DI COSA PARLIAMO? PERIODO PIONIERISTICO: LINGUAGGIO MACCHINA = STRUTTURA HARDWARE LINGUAGGI DI PROGRAMMAZIONE INGEGNERIA E INDUSTRIA DEL SW APPENDICE: ESEMPI FORTRAN E COBOL storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
ARGOMENTI (EVOLUZIONE DEL SOFTWARE: ALCUNI PERCORSI) SOFTWARE: DI COSA PARLIAMO? PERIODO PIONIERISTICO: LINGUAGGIO MACCHINA = STRUTTURA HARDWARE LINGUAGGI DI PROGRAMMAZIONE INGEGNERIA E INDUSTRIA DEL SW APPENDICE: ESEMPI FORTRAN E COBOL storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
Nella letteratura di carattere storico, solo una minoranza di lavori si occupano in profondità dell’evoluzione del software nei suoi molteplici aspetti; in particolare quasi tutte le “storie generali” la trascurano del tutto o la liquidano con cenni fugaci.[1] Solo i linguaggi di programmazione possono vantare un buon numero di opere specialistiche.[2] La natura immateriale del software rende poi problematica, se non impossibile, la sua esibizione nelle istituzioni museali che sono invece ormai numerose e ricche di reperti di interesse storico che documentano l’evoluzione dell’hardware. Un autorevole richiamo verso una maggiore attenzione alla storia del software è stato lanciato in un recente convegno intitolato “History of Computing: Software Issues”.[3] In tale convegno … [1]Una notevole eccezione è il recente saggio di Paul E. Ceruzzi, tradotto anche in italiano (n.[5] nella bobliografia), che vi dedica l’intero Capitolo 3 - “Gli albori del software, 1952-1968” - e altri ampi passaggi. [2] Tra queste, i nn.[2], [3] e [4] nella bibliografia. [3] Gli atti del convegno sono rubricati al n.[6] della bibliografia. storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
… si è proposto di adottare come criterio storiografico l’osservazione del “fenomeno software” secondo i seguenti punti di vista: - il software “come arte” (periodo pionieristico), - il software “come scienza logico-linguistica” (teoria; linguaggi; sistemi operativi), - il software “come attività economica” (professioni; industria del sw), - il software “come tecnica ingegneristica” (ingegneria del sw). storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
Il termine “software” è un neologismo entrato in voga intorno al 1960 come contrapposto a “hardware”, parola in uso già da tempo[1]; si dava così una connotazione riconoscibile ed emblematica - una “dignità” insomma - a quella che potremmo chiamare “l’altra faccia dell’informatica”. Inizialmente per “software” s’intendevano i programmi, di qualsiasi genere, necessari a rendere operante un computer. Questa accezione ristretta venne gradualmente estesa fino ad abbracciare tutto il ventaglio di metodologie e di attività associate alla semplice scrittura dei programmi. Il quadro è diventato estremamente complesso; vediamo di chiarire …… [1]Il termine “hardware”, come inteso nel gergo informatico, è invece un traslato della parola inglese che corrisponde all’italiano “ferramenta”. storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
LINGUAGGI DI PROGRAMMAZIONE SISTEMI OPERATIVI PROTOCOLLI TLC SOFTWARE: IL “NOCCIOLO DURO” storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
APPLICAZIONI LINGUAGGI DI PROGRAMMAZIONE UTENZA / MERCATO “ORIZZONTALI” (D’INTERESSE GENERALE) SISTEMI OPERATIVI PROTOCOLLI TLC “VERTICALI” (D’INTERESSE SETTORIALE) SOFTWARE: A QUALE SCOPO? storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
APPLICAZIONI LINGUAGGI DI PROGRAMMAZIONE “ORIZZONTALI” (D’INTERESSE GENERALE) SISTEMI OPERATIVI PROTOCOLLI TLC “VERTICALI” (D’INTERESSE SETTORIALE) INGEGNERIA DEL SOFTWARE TOOLS DI SVILUPPO SOFTWARE: COME FARLO? storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
APPLICAZIONI LINGUAGGI DI PROGRAMMAZIONE “ORIZZONTALI” (D’INTERESSE GENERALE) SISTEMI OPERATIVI PROTOCOLLI TLC UTENZA / MERCATO “VERTICALI” (D’INTERESSE SETTORIALE) INGEGNERIA DEL SOFTWARE AUTOPRODUZIONE INDUSTRIA DEL SOFTWARE TOOLS DI SVILUPPO SOFTWARE “FREE” SOFTWARE: CHI LO FA? storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
STANDARD “DI FATTO” / “ LEGALI” LINGUAGGI DI PROGRAMMAZIONE INFORMATICA TEORICA (COMPUTER SCIENCE) SISTEMI OPERATIVI PROTOCOLLI TLC ARCHITETTURE HARDWARE (PROCESSORI, FIRMWARE, PERIFERICHE, RETI) INGEGNERIA DEL SOFTWARE TOOLS DI SVILUPPO SOFTWARE: ENTRO QUALI CONTESTI? storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
STANDARD “DI FATTO” / “ LEGALI” APPLICAZIONI LINGUAGGI DI PROGRAMMAZIONE “ORIZZONTALI” (D’INTERESSE GENERALE) SISTEMI OPERATIVI PROTOCOLLI TLC INFORMATICA TEORICA (COMPUTER SCIENCE) UTENZA / MERCATO “VERTICALI” (D’INTERESSE SETTORIALE) ARCHITETTURE HARDWARE (PROCESSORI, FIRMWARE, PERIFERICHE, RETI) INGEGNERIA DEL SOFTWARE AUTOPRODUZIONE INDUSTRIA DEL SOFTWARE TOOLS DI SVILUPPO SOFTWARE “FREE” SOFTWARE: UN POSSIBILE QUADRO DI RIFERIMENTO Ogni casella e ogni relazione dovrebbe avere una sua storia! Noi seguiremo solo alcuni percorsi. storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
ARGOMENTI (EVOLUZIONE DEL SOFTWARE: ALCUNI PERCORSI) SOFTWARE: DI COSA PARLIAMO? PERIODO PIONIERISTICO: LINGUAGGIO MACCHINA = STRUTTURA HARDWARE LINGUAGGI DI PROGRAMMAZIONE INGEGNERIA E INDUSTRIA DEL SW APPENDICE: ESEMPI FORTRAN E COBOL storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
Il programma “inaugurale” (1948) preparato per il test della Baby Machine dell’Università di Manchester (vedi una precedente lezione). Il programma effettivo, scritto bit per bit in linguaggio macchina e introdotto in memoria mediante una serie di switches, si trova nelle due colonne sulla destra. Fonte: [8] nella bibliografia di questa lezione storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
Appunti autografi di A.M.Turing: programmazione del computer Mark I (Manchester, 1953) Fonte: [8] nella bibliografia di questa lezione storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
Appunti autografi di A.M.Turing: programmazione del computer Mark I (Manchester, 1953) A caccia di un errore: How did this happen ? Fonte: [8] nella bibliografia di questa lezione (con adattamenti del docente) storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
Fonte: [1] nella bibliografia di questa lezione storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
Nei computer pionieristici della prima generazione, compresi quelli prodotti in ambiente industriale, il software era praticamente inesistente e quindi il suo sviluppo rimaneva completamente a carico di ogni utilizzatore. Il gruppo inglese diretto da Maurice Wilkes, lavorando sul loro EDSAC (1949) all’Università di Cambridge, fu tra i primi ad affrontare in maniera sistematica anche il problema “primigenio” del software mettendo a punto e dando alle stampe una libreria di componenti software (sottoprogrammi o subroutines) per risolvere una volta per tutte i problemi che più di frequente ricorrono nel calcolo matematico. Abbiamo detto “una volta per tutte”, ma bisogna intendersi: i sottoprogrammi della libreria EDSAC, pur utilissimi come esemplificazione di un approccio sistematico, non erano infatti applicabili a nessun computer diverso da esso. Fatto che era esplicitamente avvertito nel sottotitolo del libro: With special reference to the EDSAC. Il software EDSAC si basava su due elementi chiave destinati a fare scuola in quanto preludevano a fondamentali componenti del cosiddetto “software di base”. Il primo era il programma di caricamento che leggeva il simbolico da nastro, lo traslitterava in codice binario di macchina e trasferiva il controllo a tale codice eseguibile. Questo ingegnoso ed elegante programma, di appena 40 istruzioni designate come initial orders, svolgeva quindi le funzioni di traduttore e di loader. I programmi non potevano essere “salvati” in codice di macchina e quindi ogni loro esecuzione doveva ripartire dal nastro simbolico; in questo senso il processo di traduzione può essere considerato affine alla tecnica degli intrpretatori piuttosto che a quella dei compilatori. Il secondo era il meccanismo di chiamata dei sottoprogrammi e di ritorno al programma chiamante: una invenzione di David Wheeler passata alla storia come Wheeler’s Jump. Considerata l’importanza storica dell’EDSAC e il suo valore paradigmatico nei confronti di molti computer dell’epoca, nel seguito vi farò riferimento a titolo esemplificativo. storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
Sruttura generale dell’EDSAC (1949), rappresentativa dei computer pionieristici. Input e output sono ancora rudimentali: - lettore/perforatore di banda di carta - telescrivente. Notare inoltre l’esiguità degli organi aritmetici (no Floating Point): - registro moltiplicatore - accumulatore (addizioni e sottrazioni). Ne conseguono le caratteristiche salienti del corredo di istruzioni native ovvero del linguaggio macchina, unico linguaggio inizialmente disponibile per costruire il software. MULTIPLIER REGISTER ACCUMULATOR Fonte: [1] nella bibliografia di questa lezione (con adattamenti del docente) storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
Il corredo di istruzioni native (Order Code) dell’EDSAC. Fonte: [1] nella bibliografia di questa lezione (con adattamenti del docente) storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
Nella rappresentazione simbolica delle istruzioni il primo carattere (lettera maiuscola) costituisce il codice operativo e il secondo (n, quando presente) designa l’indirizzo dell’operando (o argomento) su cui agisce l’istruzione stessa. Per brevità sorvoliamo sul significato della seconda lettera maiuscola, quando presente. storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
Unica struttura di controllo: il salto condizionato storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
Registro accumulatore: un passaggio obbligato storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
MULTIPLIER REGISTER Registro accumulatore: un passaggio obbligato ACCUMULATOR Fonte: [1] nella bibliografia di questa lezione (con adattamenti del docente) storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
Si tratta quindi di istruzioni a un solo indirizzo, che aderiscono strettamente alla struttura fisica della macchina. Questo implica l’intervento di un organo non dichiarato nel corpo dell’istruzione ma individuato univocamente dalla descrizione (“semantica”) dell’istruzione stessa. Nel caso dell’EDSAC, come in quasi tutti i computer coevi, tale organo poteva essere l’accumulatore (vedi p.e. l’istruzione A n) oppure il registro moltiplicatore (come nell’istruzione H n). I prospetti che seguono illustrano alcune caratteristiche del linguaggio macchina dei computer pionieristici; si nota quante poche siano state le eccezioni rispetto al formato a un solo indirizzo. storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
codice operativo argomento (indirizzo di memoria) Formato delle istruzioni a un solo indirizzo Il secondo argomento (tipicamente un organo aritmetico come l’accumulatore o il moltiplicatore) è implicito e lo si evince dalla semantica dell’istruzione specificata dal codice operativo. storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
codice operativo T A T argomento (indirizzo di memoria) n2 n1 n2 Formato delle istruzioni a un solo indirizzo Il secondo argomento (tipicamente un organo aritmetico come l’accumulatore o il moltiplicatore) è implicito e lo si evince dalla semantica dell’istruzione specificata dal codice operativo. Esempio 1 (codice EDSAC): copiare il contenuto della posizione di memoria n1 nella posizione di memoria n2 Tranfer the contents of the accumulator to storage location n2 and clear the accumulator. (N.B.: questa istruzione serve solo per azzerare l’accumulatore; dato lo scopo finale dell’esempio, il precedente contento dell’accumulatore è irrilevante) Add the number in storage location n1 into the accumulator. Tranfer the contents of the accumulator to storage location n2 and clear the accumulator. (N.B.: nel caso non si volesse lasciare azzerato l’accumulatore, andrebbe usata l’istruzione Un2) storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
T A T A n3 n1 n2 n2 Esempio 2 (codice EDSAC): sommare i contenuti delle posizioni di memoria n1 e n2 e mettere il risultato nella posizione di memoria n2 (con parole più immediate: sommare il contenuto di n1 al contenuto di n2) Tranfer the contents of the accumulator to storage location n3 and clear the accumulator. (N.B.: questa istruzione serve solo per azzerare l’accumulatore; la posizione di memoria n3 è usata come area “di comodo”) Add the number in storage location n1 into the accumulator. Add the number in storage location n2 into the accumulator. Tranfer the contents of the accumulator to storage location n3 and clear the accumulator. (N.B.: nel caso non si volesse lasciare azzerato l’accumulatore, andrebbe usata l’istruzione Un2) storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
I due esempi precedenti, per quanto banali, mostrano quanto la programmazione in linguaggio macchina fosse complicata e prona ad errori. La semplice struttura dell’EDSAC, e il conseguente formato a un solo indirizzo delle istruzioni, è stata peraltro adottata da quasi tutti i progettisti dei computer pionieristici, come evidenziato nelle due tavole che seguono. storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
1948 1949 1950 1952 1953 1953 Fonte: [8] nella bibliografia di questa lezione (con adattamenti del docente) storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
Fonte: [8] nella bibliografia di questa lezione (con adattamenti del docente) Nel formato a 3 indirizzi, il quarto elemento dell’istruzione (indicato da “+1”) contiene l’indirizzo della prossima istruzione da eseguire; indirizzo che, di norma, è invece contenuto in un apposito registro denominato Instruction (o Program) Counter. storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
Nei primi computers, il corredo delle istruzioni di macchina (istruzioni “native”) raramente ne prevedeva più di una ventina. Fonte: [8] nella bibliografia di questa lezione (con adattamenti del docente) storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
Nel computer EDSAC II (1951) Maurice Wilkes introdusse il concetto di macchina microprogrammata. Il microprogramma era una ROM che conteneva un interprete capace di tradurre in comandi effettivamente eseguibili a livello hardware (e inaccessibili al programmatore) le istruzioni scritte in un linguaggio più sintetico e più potente: era questo il linguaggio disponibile al programmatore, al quale appariva come il vero linguagggio macchina (o linguaggio “nativo”). Con riferimento all’Esempio 1, la slide illustra come il microprogramma potrebbe ad esempio sovrapporsi a una modesta struttura hardware tipo EDSAC (primo modello) per trasformarla, agli occhi dell’utente, in una più potente macchina con istruzioni a 2 indirizzi (la generalizzazione a 3 indirizzi è intuitiva). La microprogrammazione fu una delle idee più innovative e di maggior successo nella storia dell’informatica moderna e dette luogo alla tecnologia cosiddetta firmware che ha avuto e ha tuttora innumerevoli applicazioni. Esempi tipici di macchine microprogrammate sono state le famiglie di computer IBM 360 e 370 e la serie VAX della DEC (Digital Equipment Corporation) nonché, in Italia, la CEP (Calcolatrice Elettronica Pisana) e l’ELEA 6001, dell’Olivetti. Nel modello a strati, in cui lo strato più esterno è l’interfaccia utente, il firmware è rappresentato come come lo strato più interno che avvolge il nucleo hardware: una sorta di ibrido in cui l’immaterialità del software possiede stabilmente una sede fisica che ne realizza le funzioni. storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
T A T n2 n1 n2 LINGUAGGIO MACCHINA (istruzione a due indirizzi) Livello utente C (Copy) n1 n2 MICROPROGRAMMA (su ROM) Livello firmware COMANDI ESEGUIBILI (istruzioni a un indirizzo) Livello hardware storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
Questo è l’elenco dei tipi (Category) di sottoprogrammi, quasi un centinaio, approntati per la libreria EDSAC Fonte: [1] nella bibliografia di questa lezione (con adattamenti del docente) storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
L’aritmetica floating point era realizzata via software e le subroutines necessarie furono un classico adempimento a carico di ogni team di programmatori, fino a quando i computer non furono dotati degli appositi dispositivi hardware e delle corrispondenti istruzioni native. EDSAC, per di più, non disponeva neppure di hardware per la divisione; a tale operazione provvedevano quindi le subroutines della categoria D. storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
Le subroutines per l’input e per l’output formattato (print and layout), nella pratica, erano non meno utili dei sottoprogrammi matematici. Programmare la ricezione di dati dal lettore di nastro perforato o l’invio alla telescrivente, carattere per carattere, erano infatti operazioni particolarmente ostiche. storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
Esempio di subroutine della Libreria EDSAC: il caso più semplice di divisione. Fonte: [1] nella bibliografia di questa lezione (con adattamenti del docente) Le istruzioni, qui incorniciate in colore, venivano digitate sulla telescrivente e perforate su nastro di carta in una forma simbolica che, sebbene ancora piuttosto criptica, segnava un progresso notevole rispetto alla codifica puramente binaria. storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
I programmi erano perforati su nastro e il corredo di software risiedeva quindi su una collezione di strisce di carta perforata. Sulla sinistra della foto si distinguono i nastri dei programmi da eseguire in giornata (job queue). storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
Fonte: [1] nella bibliografia di questa lezione Folclore protoinformatico: preparazione dei programmi per l’EDSAC. storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
La foto ritrae un’operatrice intenta alla telescrivente “fuori linea” (cioè non collegata al computer né a una linea telefonica) dotata di un lettore e di un perforatore di banda di carta. Le istruzioni del programma, scritte sul modulo nel leggìo, vengono digitate sulla tastiera e registrate sul nastro perforato. I sottoprogrammi vengono invece letti dal nastro di libreria e, al punto opportuno, riprodotti automaticamente sul nastro principale. L’intera libreria dei sottoprogrammi è custodita nella cassettiera sulla sinistra. L’input e l’output al/dal computer erano effettuati rispettivamente per mezzo di un lettore di nastro di carta e di una telescrivente collegati direttamente alla macchina. Queste modalità operative continuarono a far parte del folclore protoinformatico anche quando i lettori veloci di schede, mutuati dalla meccanografia, divennero il mezzo di input preferito; alle strisce di carta si sostituirono allora i “pacchi” (deck) di schede. storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12
ARGOMENTI (EVOLUZIONE DEL SOFTWARE: ALCUNI PERCORSI) SOFTWARE: DI COSA PARLIAMO? PERIODO PIONIERISTICO: LINGUAGGIO MACCHINA = STRUTTURA HARDWARE LINGUAGGI DI PROGRAMMAZIONE INGEGNERIA E INDUSTRIA DEL SW APPENDICE: ESEMPI FORTRAN E COBOL storia dell'informatica - uniud 2009-10 - corrado bonfanti - traccia lez. 11-12