Tributo a Edsger Wybe Dijkstra

91
Edsger Wybe Dijkstra Rotterdam, 11 maggio 1930 – Nuenen, 6 agosto 2002

description

Lavoro fatto con cura... ripercorre tutti i passi salienti della vita di un grande... costruzione a partire dalle sue memorie e SENZA l'ausilio di wikipedia. Spero sia utile a qualcuno.

Transcript of Tributo a Edsger Wybe Dijkstra

Page 1: Tributo a Edsger Wybe Dijkstra

Edsger Wybe Dijkstra

Rotterdam, 11 maggio 1930 – Nuenen, 6 agosto 2002

Page 2: Tributo a Edsger Wybe Dijkstra

Biografia

• Madre matematico, padre chimico.

• Istruzione:

• Gymnasium Erasmianum a Rotterdam.

• Università di Leiden - Matematica e Fisica Teorica.

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 3: Tributo a Edsger Wybe Dijkstra

Oh, no! Impara le formule e ricordati sempre chesei sulla strada sbagliata se hai bisogno dipiu’ di cinque righe.

Brechtje Cornelia Kluyver

… il suo stile sarà sempre caratterizzato da

SEMPLICITA’ ed ELEGANZA (qualità e correttezza)…

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 4: Tributo a Edsger Wybe Dijkstra

EDSAC

E’ il terzo computer della storia

a programma memorizzato

basato sull’ architettura di von Neumann.

Note tecniche:

• Composto da 3.000 valvole termoioniche;

• Input « schede perforate »;

• Output « telescrivente »;

• Superfice di 20 m2;

• Capacita di elaborazione 650 [istruzioni/secondo];

Settembre 1951 Cambridge - Corso programmazione

(Electronic Delay Storage Automatic Calculator)

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 5: Tributo a Edsger Wybe Dijkstra

1952…

• Assunzione presso il dipartimento di calcolo al Centro Matematico di

Amsterdam.

• Contributo nella progettazione di:

• ARRA

• ARRA II

• FERTA

• ARMAC

Collaborazione con:

Scholten

Loopstra

Blaauw

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 6: Tributo a Edsger Wybe Dijkstra

Nel 1955 ho preso la decisione di non diventare un fisico teorico, ma unprogrammatore [...] perche’ la programmazione rappresentava una sfidaintellettuale piu’ grande.

Edsger Dijkstra

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 7: Tributo a Edsger Wybe Dijkstra

Nessuno di noi era stato formato come matematico [...] credo fermamente che questo quadro, che comprendeva una solida formazione in 5 lingue straniere,

abbia avuto una grande influenza sul modo in cui abbiamo lavorato.

Edsger Dijkstra

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 8: Tributo a Edsger Wybe Dijkstra

ARRA I…

• Non funzionò mai correttamente…

alla sua presentazione si ruppe e da li non fu più riparato.

Note tecniche:

• 4 anni di sviluppo

• Composto da 1.200 relè connessi alla macchina

• Tempo di switch inaffidabile

• Input « nastro di carta perforata »

• Output « telescrivente »

• Memoria a tamburo

• 3 registri gestivano parole da 30 bit

• Assenza del Clock (segnale di « end-operation »)

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 9: Tributo a Edsger Wybe Dijkstra

ARRA II…

Una copia della macchina (FERTA) fu realizzata con qualche piccola

modifica per la Fokker (avionica).

Note tecniche:

• Non fu un evoluzione di ARRA I, ma una

macchina innovativa

• Introduzione del Clock di sistema

• Input « nastro di carta perforata »

• Output « telescrivente »

• Memoria a tamburo

(1024 parole – 2 istruzione per ogni parola)

• 2 registri

• Routine di controllo introdotte da Dijkstra

(inaffidabilità delle memorie a tamburo)

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 10: Tributo a Edsger Wybe Dijkstra

ARMAC…

• Successore ARRA II (50 volte più veloce)

• Ultima macchina del centro –

– poi società spin-off (Electrologica Nv)

• Coesistenza di memoria a tamburo e memoria

magnetica

• Registro di Jump (implementazione di subroutine

di «salto»)

• Completa divisione tra:

Progettazione e

Costruzione

Programmazione

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 11: Tributo a Edsger Wybe Dijkstra

La prima cosa che abbiamo fatto è stata quella di scrivere un manuale di programmazioneper la prossima macchina, compresa la sua completa descrizione funzionale […] Questodocumento e’ servito da contratto tra me e loro: essi sapevano quello che avrebberodovuto costruire e io sapevo quello che avrei dovuto sviluppare.

…basi dell’analisi delle specifiche funzionali del Software…

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Edsger Dijkstra

Page 12: Tributo a Edsger Wybe Dijkstra

“A note on two problems in connection with graphs”

(1959)

Consideriamo n nodi, alcuni o tutti accoppiati, i quali sono connessi

da un ramo. Ogni ramo ha una lunghezza nota. Ci limitiamo al caso

in cui esiste almeno un percorso tra due nodi qualsiasi.

• Algoritmo dell’albero ricoprente minimo (o Minimum Spanning

Tree, MST).

• L’algoritmo dei cammini minimi (o Shortest Paths, SP), passato

poi alla storia come « L’ Algoritmo di Dijkstra ».

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 13: Tributo a Edsger Wybe Dijkstra

Algoritmo dell’albero ricoprente minimo

Problema 1: Costruire l’albero della lunghezza minima totale tra n nodi.

Definiamo

• « I » rami definitivamente assegnati all’albero in costruzione.

• « II » rami tra i quali il prossimo ramo sarà aggiunto a I.

• « III » rami scartati o non ancora considerati.

• « A » nodi connessi dai rami I.

• « B » nodi rimanenti tali che uno ed uno solo ramo II porterà ad essi.

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 14: Tributo a Edsger Wybe Dijkstra

Algoritmo dell’albero ricoprente minimo

Poniamo:

• Arbitrariamente un solo nodo come unico nodo A.

• Tutti i rami che terminano nel nodo A come rami di tipo II.

Step 1: Il più breve ramo II è promosso a I, quindi il nodo collegato è promosso ad A.

Step 2: Consideriamo i rami che vanno dal nuovo A ad ogni B. Se il ramo considerato è

più breve del rispettivo II, allora il primo rimpiazza il secondo (che viene scartato),

altrimenti viene scartato.

Ripetere: fino a quando non abbiamo più rami di tipo II e i nodi di tipo B.

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 15: Tributo a Edsger Wybe Dijkstra

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

III

III

III

IIIIII

III

IIIIIIIII

IIIIII

Page 16: Tributo a Edsger Wybe Dijkstra

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

III

II

III

IIIIII

III

IIIIIIII

IIII

Page 17: Tributo a Edsger Wybe Dijkstra

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

II

I

III

IIIIII

III

IIIIIIII

IIIII

Page 18: Tributo a Edsger Wybe Dijkstra

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

II

I

III

IIIIII

II

IIIIII

IIIIII

Page 19: Tributo a Edsger Wybe Dijkstra

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

I

I

II

IIIII

II

IIIIIII

IIIIII

Page 20: Tributo a Edsger Wybe Dijkstra

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

I

I

III

III

III

IIIIII

IIIIII

Page 21: Tributo a Edsger Wybe Dijkstra

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

I

I

III

II

III

IIIIII

IIIIII

Page 22: Tributo a Edsger Wybe Dijkstra

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

I

I

III

II

III

IIIII

IIIIII

Page 23: Tributo a Edsger Wybe Dijkstra

Algoritmo dei cammini minimi

Problema 2: Trovare il cammino della lunghezza minima totale tra due nodi dati P e Q,

costruito in modo incrementale.

Definiamo

• « A » nodi per i quali il cammino minimo da P è noto.

• « B » nodi connessi ad almeno un A, tra i quali il prossimo nodo sarà aggiunto ad A.

• « C » nodi rimanenti.

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 24: Tributo a Edsger Wybe Dijkstra

Algoritmo dei cammini minimi

Definiamo:

• « I » rami che si trovano sul cammino minimo tra P e i nodi A.

• « II » rami tali che uno ed un solo ramo II porterà a ciascun B, tra i quali il prossimo

ramo sarà aggiunto a I.

• « III » rami scartati o non ancora considerati.

Poniamo:

• Tutti i nodi come C, tutti i rami come III.

• P come unico nodo A.

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 25: Tributo a Edsger Wybe Dijkstra

Algoritmo dei cammini minimi

Step 1:

• Ogni ramo che collega il nuovo A ad un B viene confrontato con i rispettivi II: se il

cammino è minore allora il primo sostituisce il secondo, altrimenti viene scartato.

• I nodi C collegati al nuovo A vengono promossi a B, i rispettivi rami a II.

Step 2:

• Ogni B può essere connesso a P in un solo modo: usando rami I ed un solo ramo II.

Il nodo B alla distanza minima da P è promosso ad A, il corrispondente ramo a I.

Ripetere: Fino a quando il nodo Q è promosso a tipo A.

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 26: Tributo a Edsger Wybe Dijkstra

P

Q

1415

7

9

11

10

9

62

G

H

E

F

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

III

III

III

IIIIII

III

III

III

III

Page 27: Tributo a Edsger Wybe Dijkstra

P

Q

1415

7

9

11

10

9

62

G

H

E

F

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

II

III

III

IIIII

II

III

III

III

Page 28: Tributo a Edsger Wybe Dijkstra

P

Q

1415

7

9

11

10

9

62

G

H

E

F

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

III

III

III

IIIII

I

III

III

II

Page 29: Tributo a Edsger Wybe Dijkstra

P

Q

1415

7

9

11

10

9

62

G

H

E

F

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

III

III

II

IIII

I

III

II

III

Page 30: Tributo a Edsger Wybe Dijkstra

P

Q

1415

7

9

11

10

9

62

G

H

E

F

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

III

II

I

IIII

I

III

III

III

Page 31: Tributo a Edsger Wybe Dijkstra

P

Q

1415

7

9

11

10

9

62

E

F

G

H

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

III

I

I

IIII

I

III

III

III

Page 32: Tributo a Edsger Wybe Dijkstra

Linguaggio «ALGOL 60» & «Compilatore»

Sviluppato congiuntamente da un comitato di informatici statunitense ed europeo

o Per quasi 30 anni considerato lo standard nella rappresentazione di algoritmi.

o Blocchi di istruzione delimitati da BEGIN END;

o Introdusse il concetto di Stack;

o Celebre la frase di Tony Hoare (inventore del quick sort);

« Qui c’è un linguaggio cosi avanzato che non è solo un

miglioramento rispetto ai suoi predecessori, ma anche rispetto ai suoi

successori »

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 33: Tributo a Edsger Wybe Dijkstra

Abbiamo scritto il compilatore in doppia copia, pienamenteconsapevoli che stavamo facendo la storia.

Apporto significativo di due grandi menti:

John Backus

Peter Naur

Edsger Dijkstra

Grammatiche

BNF

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 34: Tributo a Edsger Wybe Dijkstra

“Recursive programming”

Definiamo:

• Subroutine (o funzione) un particolare costrutto sintattico che permette

di raggruppare, all'interno di programma « main » , una sequenza

di istruzioni in un unico blocco espletando così una determinata

operazione o elaborazione sui dati del programma, in modo tale che a

partire da determinati input restituisca determinati output.

«Stack, vettore e mutua esclusione» attribuiti a Dijkstra dall’Oxford Dictionary

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

(1960)

Page 35: Tributo a Edsger Wybe Dijkstra

Considerazione iniziale:

• Ogni subroutine ha il proprio spazio di memoria privato.

Conseguenze:

• Spreco di memoria: Lo spazio allocato per tutte le subroutine è

generalmente maggiore di quello di cui hanno simultaneamente bisogno.

• Terminazione incorretta: impossibilità di chiamare una subroutine

mentre una o più precedenti attivazioni della stessa non sono ancora

terminate, senza perdere la possibilità di terminare correttamente in seguito.

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

“Recursive programming”(1960)

Page 36: Tributo a Edsger Wybe Dijkstra

Stack

Idea: memorizzare una sequenza di unità informative, che cresce e decresce

da una sola estremità. Quando un’unità non interessa più viene rimossa.

n locazioni di memoria consecutiveStack pointer: quantità amministrativa

che punta alla prima locazione di

memoria libera

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 37: Tributo a Edsger Wybe Dijkstra

Analogia con le espressioni algebriche

Associando parentesi tonde alla operazioni di push e pop, si ottiene una

struttura nidificata corretta di parentesi tonde.

Lo stack è usato per memorizzare i risultati intermedi delle operazioni

elementari richieste nella valutazione di un’espressione algebrica.

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 38: Tributo a Edsger Wybe Dijkstra

Stack reservations

All’interno di una subroutine distinguiamo:

• Parametri: argomenti della funzione.

• Variabili locali: introdotte dalla subroutine.

• Risultati intermedi: analoghi a quelli del main.

L’esecuzione di una subroutine richiede:

• Link: indirizzo dove salvare i dati dell’unità aritmetica nello stack.

• Return address: indirizzo per il ripristino dei dati dallo stack all’unità aritmetica.

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 39: Tributo a Edsger Wybe Dijkstra

Le subroutine devono comparire solo una volta nella memoria, ma possonoavere piu’ « incarnazioni » da un punto di vista dinamico: l’attivazione « piu’interna » provoca la stessa porzione di testo in una parte superiore dello stack.Quindi la subroutine e’ sviluppata in un elemento definito che puo’ essere usatoin maniera completamente ricorsiva.

Edsger Dijkstra

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 40: Tributo a Edsger Wybe Dijkstra

• 1962 – nominato prof. di matematica presso l’Università

Technische Hogeschool di Eindhoven, (corso di Analisi numerica).

• Forma un piccolo gruppo di studenti (scienziati del computer)

che insieme a lui daranno i natali ad una serie di progetti

riguardanti:

Operating system T.H.E.

GoTo Statement & Programmazione strutturata

Risoluzione di problematiche relative alla

« programmazione concorrente ».

Introduzione a concetto di semaforo.

Page 41: Tributo a Edsger Wybe Dijkstra

“Hierarchical ordering of sequential processes” (1971)

Problema dei 5 filosofi

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 42: Tributo a Edsger Wybe Dijkstra

• I filosofi condividono un tavolo rotondo con 5 posti.

• Passano la vita pensando e mangiando

Problema

• Gli spaghetti sono difficili da mangiare; un filosofo

per mangiare deve usare due bacchette (risorse)

Conseguenza

• Due filosofi consecutivi, non potranno mai mangiare

contemporaneamente

Begin

think;

eat;

end

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 43: Tributo a Edsger Wybe Dijkstra

Semafori (Mutex)

Sezione critica

• è una porzione di codice che accede a

una risorsa condivisa, tra più processi in

esecuzione in un sistema concorrente

• Variabile intera non negativa «di scopo

speciale» ovvero garantire l’accesso in

mutua esclusione alla sezione critica

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 44: Tributo a Edsger Wybe Dijkstra

• Problema: «è necessario caratterizzare un processo in attesa»

• Soluzione: «tratteremo la variabile « s » non come un semplice valore integer,

ma con un significato particolare… quello di semaforo… e per far ciò essa

dovrà essere sempre non-negativa»

• Dijkstra definisce due operazioni atomiche complementari:

"prolagen" (testare & decrementare) P(s) : s : = s-1

"verhogen" (incrementare) V(S) : s : = s+1

1 0

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 45: Tributo a Edsger Wybe Dijkstra

• Ciò impone che:

• Sempre eseguita => incremento

• Se « S = 0 » => fase di verifica

operazione rigettata (vincolo violato).

processo in esecuzione passa in stato wait e viene posto in un buffer (di

processi relativi allo specifico semaforo) nell’attesa che un altro processo

esegua una V su di esso e risvegli un «dormiente» (FIFO) che potrà cosi

completarsi.

• Se « S = 1 » => decremento

V

P

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 46: Tributo a Edsger Wybe Dijkstra

Rischio

«deadlock»

repeat

P(bacchetta[i]);

P(bacchetta[i+1 mod 5]);

eat();

V(bacchetta[i]);

V(bacchetta[i+1 mod 5]);

think();

until false;

Soluzione

«banale»

« Se tutti i filosofi avranno fame contemporaneamente, essi prenderanno la

forchetta alla propria sinistra… e nell’attesa che qualcuno lasci la

forchetta… moriranno di fame… »

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 47: Tributo a Edsger Wybe Dijkstra

Soluzione « strutture condivise »

• state [5] Vettore dello stato di ciascun filosofo

(valori possibili: PENSA {0}, AFFAMATO {1}, MANGIA{2})

• Mutex = 1 Semaforo per mutua esclusione in Sezione critica

- inizializzato a 1 - ( libero )

• prisem[5] = 0 Vettore di semafori mutex (uno per ogni risorsa -

forchetta-) inizializzato a 0 ( occupato )

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 48: Tributo a Edsger Wybe Dijkstra

while (TRUE) {

think();

take_forks(i);

eat();

put_forks(i);

}

Soluzione « definitiva »

Se le forchette non sono

libere si blocca

Segnala che le forchette

sono libere

Ogni filosofo [i] esegue questo pezzo di codice « concorrentemente »

con gli altri filosofi per tutta la durata della sua vita

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 49: Tributo a Edsger Wybe Dijkstra

{

P (mutex);

state[i] = AFFAMATO;

test(i);

V (mutex);

P (prisem[i]);

}

« take_fork(i) »

L’ i-esimo filosofo

segnala di essere affamato

L’i-esimo filosofo verifica se ha la

disponibilità delle due forchette

L’ i-esimo filosofo si blocca se le

forchette non sono libere; egli è

affamato ma deve aspettare che l’

(i-1)-esimo o (i+1)-esimo finisca

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 50: Tributo a Edsger Wybe Dijkstra

{

if (state[i] == AFFAMATO &&

state[(i+5-1) mod 5] != MANGIA &&

state[(i + 1) mod 5)] != MANGIA)

state[i] = MANGIA;

V(prisem[i]);

}

« test (i) »

sem[i] va a 1 solo se l’ i-esimo

filosofo può mangiare; altrimenti

esso si blocca dopo la test(i) nella

take_forks(i)

Forchetta a SX dell’

i-esimo filosofo

L’ i-esimo filosofo può mangiare

Forchetta a DX dell’

i-esimo filosofo

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 51: Tributo a Edsger Wybe Dijkstra

P (mutex);

state[i] = PENSA;

test ((i + 1) mod 5);

test ((i + 5 - 1) mod 5);

V (mutex);

« put_forks(i) »

Esso deve quindi allertare i vicini di

posto (DX e SX) che le sue forchette

sono libere

Se il filosofo i-esimo decide di

smettere di mangiare e tornare a

pensare

Se i filosofi DX e/o SX sono affamati (e quindi in attesa sul relativo semaforo

della risorsa ove hanno invocato la P in precedenza) e le loro forchette sono

libere, allora vengono sbloccati dalla test

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 52: Tributo a Edsger Wybe Dijkstra

• L’ algoritmo di Dijkstra « I 5 filosofi » risolve quindi 2 problematiche

critiche nella programmazione concorrente:

Il deadlock che può verificarsi se ciascuno dei filosofi tiene in mano una

forchetta senza mai riuscire a prendere l'altra

Come??? Con questo algoritmo, un filosofo prende le forchette solo se

sono entrambe libere…

La starvation che può verificarsi indipendentemente dal deadlock se uno dei

filosofi non riesce mai a prendere entrambe le forchette.

Come??? Utilizzando come meccanismo di mutua esclusione le code di

attesa, assicurando cosi un equo accesso alle risorse

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 53: Tributo a Edsger Wybe Dijkstra

Sistema Operativo <<THE >>

• 1° SO a strati della storia (6 ma in realtà solo una convenzione progettuale,

poiché tutte le parti del sistema venivano alla fine collegate insieme in un unico

programma oggetto).

• Sistema di tipo Batch

• Multi-programming System: processi concorrenti sequenziali cooperavano

mediante l’impiego di semafori per la sincronizzazione.

• Utilizzo di un algoritmo di schedulazione della CPU basato su 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).

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 54: Tributo a Edsger Wybe Dijkstra

Sistema Operativo <<THE >>

Page 55: Tributo a Edsger Wybe Dijkstra

Sistema Operativo <<THE >>

Page 56: Tributo a Edsger Wybe Dijkstra

Sistema Operativo <<THE >>

Page 57: Tributo a Edsger Wybe Dijkstra

Sistema Operativo <<THE >>

Page 58: Tributo a Edsger Wybe Dijkstra

Sistema Operativo <<THE >>

Page 59: Tributo a Edsger Wybe Dijkstra

<< Go to statement considered harmful 1968>>

<< Notes on Structured Programming 1969 >>

Problema Soluzione

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 60: Tributo a Edsger Wybe Dijkstra

La qualità dei programmi e’ una funzione decrescente della densitàdi dichiarazioni GOTO […] sono sempre piu’ convinto che la struttura inquestione debba essere abolita da tutti i linguaggi di programmazione ad altolivello.

Edsger Dijkstra

…The go to statement as it stands is just too primitive, it is too

much an invitation to make a mess of one's program…

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 61: Tributo a Edsger Wybe Dijkstra

• Un qualunque algoritmo puòessere implementato in codicesorgente, pseudocodice odiagramma di flusso,utilizzando tre sole strutturedette strutture di controllo:

I. la sequenza;

II. la selezione;

III. il ciclo (iterazione);

• Applicare ricorsiva ad istruzioni elementari (ad es. di istruzioni eseguibili con ilmodello di base della macchina di Turing).

Teorema di Böhm-Jacopini

Operazioni I/O

Operazioni di

Assegnazione

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 62: Tributo a Edsger Wybe Dijkstra

“Notes on structured programming”

COMPUTAZIONE

• « Dimensionamento » in termini di

quantità di informazioni ed operazioni

coinvolte.

EFFICACIA

• « Organizzazione » delle risorse HW.

MASSIMA RESA

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

(1969)

Page 63: Tributo a Edsger Wybe Dijkstra

Non si puo’ considerare la programmazione come la minimizzazione delcosto di una performance. L’arte di programmare e’ l’arte di organizzarela complessità, di gestire il caos bastardo nel modo più efficace possibile.

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Edsger Dijkstra

Page 64: Tributo a Edsger Wybe Dijkstra

PROGRAMMAZIONE

• Costrutti e diagrammi di flusso:

• If-Then-Else;

• Case Of;

• While-Do;

• Repeat-Until;

• (In)affidabilità del Testing.

• « Linguaggio ad alto livello » ed astrazione dall’hardware sottostante.

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

“Notes on structured programming”

(1969)

Page 65: Tributo a Edsger Wybe Dijkstra

CORRETTEZZA DI UN PROGRAMMA

• Programma ha senso solo durante l’esecuzione, un teorema ha senso di per sé.

• Programmazione ben strutturata attraverso successive scomposizioni.

dimostrazione di correttezza senza ricorrere a dispendioso processo intellettuale

Induzione per enumerazione Principio di induzione Astrazione

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

“Notes on structured programming”

(1969)

Page 66: Tributo a Edsger Wybe Dijkstra

Il programma e la prova di correttezza andrebbero sviluppati in parallelo.Inizialmente ci si chiede quale struttura dovrebbe avere la dimostrazione, poi sicostruisce un programma per soddisfare i requisiti della stessa, infine lo si usa in

senso euristico. In questo modo il programma risulta corretto per costruzione.

Edsger Dijkstra

• Utilizzo di strutture ben conosciute e/o familiari.

• Scelta di programmi intellettualmente gestibili (soluzione algoritmica).

• Lunghezza delle dimostrazioni: a « misura d’uomo ».

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 67: Tributo a Edsger Wybe Dijkstra

• I grandi sistemi devono essere costruiti partendo da molti piccoli componenti;

• Ogni componente deve essere definito solo dalla sua interfaccia e non dalla sua

implementazione;

• La progettazione dovrebbe iniziare dalla “separazione degli interessi”, cioè

separando i diversi aspetti del problema e concentrando l’attenzione su

ciascuno di essi;

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

“Notes on structured programming”

(1969)Filosofia

Page 68: Tributo a Edsger Wybe Dijkstra

Algoritmo del banchiere“Een algorithme ter voorkoming van de dodelijke omarming” (EWD-108)

• Indica se un sistema, in cui operano processi concorrenti su

istanze di risorse disponibili, si troverebbe in uno stato sicuro o

meno, nel caso soddisfacesse una specifica richiesta di risorse da

parte di un determinato processo evitando una situazione di

deadlock.

• Il deadlock (o stallo) è una situazione in cui due o più processi si

bloccano a vicenda, aspettando che uno esegua una certa azione.

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 69: Tributo a Edsger Wybe Dijkstra

Clienti Processi

……

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 70: Tributo a Edsger Wybe Dijkstra

• Fissata una situazione di allocazione di k-istanze di

m-risorse ad n-processi al tempo « t0 »

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 71: Tributo a Edsger Wybe Dijkstra

• Il processo P1 richiede l’allocazione di risorse (1,0,2)

• Ricavo il vettore Necessità (Max - Assegnate)

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 72: Tributo a Edsger Wybe Dijkstra

R ≤ N

R ≤ D

Simulazione

allocazione

risorse per Pj

D = D – RA = A + RN = N – R

Verifica:

Stato

SICURO

Assegnazione effettiva delle

risorse

D = D – RA = A + RN = N – R

• Pj deve attendere.• Ripristino vecchio

stato di allocazione risorse

ERRORE.

Superato

Max n

richieste

• Pj deve

attendere.

• Risorse non

disponibili

si

si

sino

no

no

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 73: Tributo a Edsger Wybe Dijkstra

Sicuro

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

“Simulazione”

• Il processo P1 richiede l’allocazione di risorse (1,0,2)

Page 74: Tributo a Edsger Wybe Dijkstra

STATO SICURO

• Concetto introdotto da Dijkstra tra il 1965 e 1966 quando sviluppò il suo

sistema operativo multiprogrammabile THE.

• E’ uno stato in cui è possibile allocare tutte le risorse richieste

da un processo senza che quest'ultimo comporti

un deadlock con un altro processo.

• Osservazioni:

Uno stato sicuro non implica che tutte le allocazioni di risorse avverranno con

successo, MA solo che esiste almeno un modo sicuro per allocare tutte le risorse.

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 75: Tributo a Edsger Wybe Dijkstra

Valutazione SICUREZZA

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 76: Tributo a Edsger Wybe Dijkstra

Valutazione SICUREZZA

<P1>

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 77: Tributo a Edsger Wybe Dijkstra

Valutazione SICUREZZA

<P1>

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 78: Tributo a Edsger Wybe Dijkstra

Valutazione SICUREZZA

<P1 – P3>

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 79: Tributo a Edsger Wybe Dijkstra

Valutazione SICUREZZA

<P1 – P3 – P4>

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 80: Tributo a Edsger Wybe Dijkstra

Valutazione SICUREZZA

<P1 – P3 – P4 – P0>

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 81: Tributo a Edsger Wybe Dijkstra

Valutazione SICUREZZA

<P1 – P3 – P4 – P0 – P2>

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 82: Tributo a Edsger Wybe Dijkstra

• L’esecuzione dell’algoritmo di sicurezza mostra che la

sequenza < P1, P3, P4, P0, P2 >soddisfa i requisiti di sicurezza.

• La Richiesta (1,0,2) può essere

soddisfatta senza rischiare un deadlock.

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 83: Tributo a Edsger Wybe Dijkstra

… Oggi …

• Difficile applicazione

• costoso in termini economici.

• allocazione delle risorse non deterministica (concetto richiesto dall’Algoritmo

del Banchiere).

• la maggior parte dei S.O. non considera il problema di eventuali deadlock, in

quanto evento raro, data l'abbondanza delle risorse a disposizione.

• oggigiorno la gestione dei deadlock è sicuramente più critica nei database che

non nei sistemi operativi.

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 84: Tributo a Edsger Wybe Dijkstra

L’induzione matematica puo’ portare ad argomentazioni molto compatte edefficaci – in breve: Belle! – e, quando riconosciamo la battaglia contro ilcaos, il disordine e l’indomita complessita’, come una delle principalivocazioni dell’informatica, dobbiamo ammettere che…

Edsger Dijkstra

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Beauty is our Business

Page 85: Tributo a Edsger Wybe Dijkstra

“The humble programmer” – Turing Award (1972)

La nostra metodologia di programmazione migliorerà se:

• Avremo apprezzamento della sua tremenda difficoltà.

• Utilizzeremo linguaggi di programmazione modesti ma

eleganti.

• Rispetteremo le intrinseche limitazioni della mente umana.

avvicinarsi alla programmazione UMILMENTE

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

A.C.M. – Association for Computing Machinery

Page 86: Tributo a Edsger Wybe Dijkstra

«…un oceano tra me ed il mio capo…»

• Ingresso nel mondo dell’industria (ricercatore presso la Burroughs

Corporation) – il grosso del lavoro nel suo studio a casa (Olanda).

• Fonda l’ETAC noto come il « Club del martedì pomeriggio ».

• Periodo florido per gli articoli.

• Forte attaccamento al mondo dell’ Università.

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 87: Tributo a Edsger Wybe Dijkstra

Ventotto anni fa (1959) ho scritto EWD 0 […] dopo che ebbi mischiato le pagine tra imanoscritti per la seconda volta, decisi che sarebbe stato meglio mettere fine allaconfusione e li numerai (Ewd0, Ewd1, Ewd3…).

Questo è il modo in cui e’ iniziata.

Edsger Dijkstra

Le relazioni EWDUn informale ma efficace veicolo di diffusione delle idee

Scritti con la macchina da scrivere o con la penna stilografica

L’ultimo (Ewd1318) risale all’ aprile 2002

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 88: Tributo a Edsger Wybe Dijkstra

Università del Texas – Austin –

• Cattedra di Informatica in cui ripercorre tutti gli argomenti

affrontati nella sua vita.

• La sua semplicità si nota anche dal suo stile di insegnamento:

tutto alla lavagna, senza proiettore e senza seguire un libro di

testo.

• Fonda l’ETAC noto come il « Club del martedì pomeriggio ».

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Page 89: Tributo a Edsger Wybe Dijkstra

Conclusioni

• Dijkstra lavorò tutta la vita alla professionalizzazione

accademica della programmazione ed all’autonomia

dell’informatica come scienza.

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014

Computer inteso come strumento

Page 90: Tributo a Edsger Wybe Dijkstra

In Memorium Edsger W. Dijkstra

« Semplicità, bellezza ed eloquenza sono state le sue caratteristiche distintive, e la sua insistenza senza compromessi sull’eleganza nella

programmazione e sulla matematica e’ stata una fonte d’ispirazione per migliaia »

A.C.M. – Association for Computing Machinery

Page 91: Tributo a Edsger Wybe Dijkstra

Grazie per la cortese attenzione…

Presentazione a cura di Nava Giovanni & Semperboni Cristian

Informatica Teorica Cristian Semperboni & Giovanni NavaA.A 2013-2014