Sei sulla pagina 1di 46

DEFINIZIONI

• Cosa è il software
Il software non è solo un insieme di linee di codice ma comprende anche tutta la documentazione, i case test e
i manuali.
• Prodotti generici vs Prodotti specifici
I prodotti generici sono dei software prodotti da aziende e utilizzati da un ampio bacino di utenza diversificato.
I prodotti specifici sono software sviluppati ad hoc per uno specifico cliente, visionato dallo stesso. Il costo dei
prodotti generici è maggiore rispetto a quello dei prodotti specifici.
• Programma vs prodotto
Un programma è una semplice applicazione sviluppata, testata e usata dallo stesso sviluppatore. Il prodotto
software viene sviluppato per terzi, è un software industriale che ha un costo di circa 10 volte superiore ad un
normale programma e deve essere corredato di documentazione, manuali e case test.
• Costi
Il costo del software viene calcolato in base alle ore di lavoro, il software e hardware utilizzato e altre risorse di
supporto. Il costo della manutenzione è superiore a quello di produzione.
• Manutenzione
Il software dopo il suo rilascio, specie se lo stesso ha una vita lunga, ha bisogno di alcune fasi di manutenzione.
Per manutenzione intendiamo sia la correzione di eventuali bug, sia l’estensione/modifica di alcune
caratteristiche. Il costo della manutenzione è più elevato rispetto a quello di produzione.
DEFINIZIONI
• Software engineering
Disciplina che cerca di fornire le regole per il processo di produzione del software. Lo scopo dell’ingegneria del
software è di pianificare, progettare, sviluppare il software tramite lavoro di gruppo. E’ possibile che vengono
rilasciate più versioni del prodotto software. Tale attività ha senso per progetti di grosse dimensioni e di
notevole complessità ove si rende necessaria la pianificazione.
• Differenza tra software engineering e computer science
Mentre la computer science si occupa di creare e ottimizzare algoritmi e si occupa degli aspetti teorici
dell’informatica, il software engineering si occupa della pianificazione e della progettazione con la finalità di
ottenere un prodotto software.
• Fondamenti dell’ingegneria del software
L’ingegneria del software si occupa principalmente di tre aspetti fondamentali: i principi, i metodi, le
metodologie e gli strumenti.
• Principi
1. Rigore e formalità
2. Affrontare separatamente le varie problematiche dell’attività
3. Modularità (divide-et-impera)
4. Anticipazione del cambiamento (scalabilità)
DEFINIZIONI
• Principi
5. Generalità (tentare di risolvere il problema nel suo caso generale)
6. Incrementalità (lavorare a fasi di sviluppo, ognuna delle quali viene terminata con il rilascio di una release, anche se
piccola).
• Metodi e metodologie
Un metodo è una particolare procedimento per risolvere problemi specifici, mentre la metodologia è un’insieme di
principi e metodi che serve per garantire la correttezza e l’efficacia della soluzione al problema.
• Strumenti, procedure
Uno strumento è un artefatto che viene usato per fare qualcosa in modo migliore. Una procedura è una combinazione
di strumenti e metodi finalizzati alla realizzazione di un prodotto.
• Qualità del software
La qualità può essere riferita sia al prodotto che al processo applicato per ottenere il risultato finale.
Un particolare modello di qualità (modello di McCall) dice che la qualità si basa su i seguenti tre aspetti principali:
1. Revisione: manutenibilità, flessibilità e verificabilità (deve rispettare i requisiti del cliente)
2. Transizione: portabilità, riusabilità, interoperabilità (capacità del sistema di interagire con altri sistemi esistenti)
3. Operatività: correttezza (conformità dello stesso rispetto ai requisiti), affidabilità, efficienza (tempo di risposta o
uso della memoria), usabilità, integrità (capacità di sopportare attacchi alla sicurezza).
DEFINIZIONI
Cosa significa throughput?
La velocità effettiva si riferisce all'esecuzione di attività da parte di un servizio o dispositivo
informatico in un determinato periodo. Misura la quantità di lavoro completato rispetto al tempo
impiegato e può essere utilizzato per misurare le prestazioni di un processore, memoria e / o
comunicazioni di rete.
l throughput è stato concepito per valutare la produttività dei processori per computer. Questo è
stato generalmente calcolato in termini di lavori o attività al secondo e milioni di istruzioni al
secondo. Alcuni derivati ​misurano il rendimento complessivo di un sistema valutando la quantità e
la complessità del lavoro, il numero di utenti simultanei e la reattività di applicazione / sistema.
Analogamente, per le comunicazioni di rete, il throughput viene misurato calcolando la quantità di
dati trasferiti tra le posizioni durante un periodo specificato, generando generalmente bit per
secondo (bps), che si è evoluto in byte al secondo (Bps), kilobyte al secondo (KBps), megabyte al
secondo (MBps) e gigabyte al secondo (GBps).
DEFINIZIONI
• Che cos'è il kernel in informatica?
Il kernel è il componente centrale di ogni sistema operativo. Utilizzando varie
modalità di gestione – tra le quali la comunicazione tra processi e le chiamate di
sistema – fa da ponte tra le componenti hardware di un computer – come
processore, RAM e hard disk – e i programmi in esecuzione sul computer stesso.
• A cosa serve il kernel?
Il kernel si occupa della gestione della memoria, della gestione dei processi, della
gestione delle attività e della gestione del disco. Il kernel controlla lo spazio di
memoria per la corretta esecuzione del programma applicativo. Crea e distrugge la
memoria che aiuta nell'esecuzione del software.
• Qual è il kernel di Windows?
Il kernel di Microsoft Windows fornisce operazioni di base di basso livello, ad
esempio la pianificazione di thread (insieme di istruzioni o di codice per
l'esecuzione di una programmazione) o l'interruzione dell'hardware di routing. È il
cuore del sistema operativo e tutte le attività eseguite devono essere veloci e
semplici.
DEFINIZIONI
• Dove viene caricato il kernel del sistema operativo?
Il kernel si trova al centro del sistema operativo e controlla tutte le funzioni più
importanti di un hardware, sia che si tratti di un sistema Linux, macOS o Windows,
di uno smartphone, un server o persino di una virtualizzazione, come ad esempio
KVM, o qualsiasi altro tipo di computer.
• Quando viene caricato il kernel?
Quando un computer è avviato, il primo software da eseguire è il boot loader.
Questo è un "pezzo" di codice il cui unico scopo è caricare un kernel e consegnargli
il controllo. Il kernel caricherà i driver necessari, inizializzerà l'hardware e quindi
caricherà il resto del sistema operativo.
• Come si aggiorna il kernel?
Il modo più facile per farlo è di installare sul proprio sistema uno dei pacchetti
forniti con un'immagine del kernel Linux. Possono essere ottenuti usando apt-get o
aptitude, se si vuole usare la riga di comando, oppure Synaptic se si vuole usare
un'interfaccia grafica.
DEFINIZIONI
• Dove viene caricato il kernel del sistema operativo?
Il kernel si trova al centro del sistema operativo e controlla tutte le funzioni più
importanti di un hardware, sia che si tratti di un sistema Linux, macOS o Windows,
di uno smartphone, un server o persino di una virtualizzazione, come ad esempio
KVM, o qualsiasi altro tipo di computer.
• Su quale kernel è basato Android? (kernel Linux)
È basato sul kernel Linux ed è da considerarsi propriamente una distribuzione
embedded Linux e non un sistema unix-like né una distribuzione GNU/Linux (dato
che la quasi totalità delle utilità GNU è sostituita da software in Java).
• In che linguaggio è scritto il kernel?
Il kernel è scritto nel linguaggio di programmazione C [it-c-language].
DEFINIZIONI

• Chi ha inventato il kernel?


Linus Benedict Torvalds, (Helsinki, 28 dicembre 1969), è un informatico e blogger
finlandese, conosciuto soprattutto per essere stato l'autore e programmatore della
prima versione del kernel Linux nonché il coordinatore del progetto di sviluppo
dello stesso.
Caratteristiche e Differenza tra Sistema
operativo e Kernel
Caratteristiche del sistema operativo
• Il sistema operativo (abbreviato con SO, operating system) è un
software di sistema che gestisce le risorse del sistema stesso.
Il sistema operativo funge da interfaccia tra l’utente e
l’hardware del sistema. L’interfaccia fornita dal sistema
operativo consente all’utente di visualizzare il risultato del
comando immesso dall’utente. L’esecuzione di un sistema
senza il sistema operativo è impossibile. Il programma
applicativo viene eseguito nell’ambiente fornito dal sistema
operativo.
Caratteristiche e Differenza tra Sistema
operativo e Kernel
• Il sistema operativo è un programma di sistema che viene
eseguito continuamente sul computer fino allo spegnimento. Il
sistema operativo è il primo programma che viene caricato
nella memoria principale all’avvio di un computer. Una volta
caricato il sistema operativo nella memoria principale, è pronto
per l’esecuzione dei programmi applicativi.
Caratteristiche e Differenza tra Sistema
operativo e Kernel
• Il sistema operativo è costituito da un importante programma
chiamato kernel. Il sistema operativo non può funzionare senza
il kernel. Il sistema operativo è responsabile della gestione della
memoria, della gestione dei processi, della gestione della
memoria, della protezione e della sicurezza. Il sistema operativo
è anche responsabile della gestione degli interrupt che si
verificano durante l’esecuzione di un programma.
• Infine, il sistema operativo è classificato come sistema
operativo singolo e multiutente, sistema operativo
multiprocessore, sistema operativo distribuito, sistema
operativo in tempo reale.
Caratteristiche del Kernel
In informatica, il kernel rappresenta il nucleo del sistema
operativo (SO). Esso è il primo programma del sistema operativo
che viene caricato nella memoria principale per avviare il
funzionamento del sistema. Il kernel rimane nella memoria
principale (memoria RAM) fino allo spegnimento del sistema.
Kernel fondamentalmente traduce i comandi immessi dall’utente
in modo da far capire al computer ciò che l’utente ha richiesto.
Caratteristiche del Kernel
• Il kernel funge da ponte tra il software applicativo e l’hardware
del sistema. Il kernel comunica direttamente con l’hardware e
informa ciò che il software applicativo ha richiesto. Un sistema
operativo non è in grado di funzionare senza il kernel in quanto
è il programma importante per il funzionamento del sistema.
• Il kernel si occupa della gestione della memoria, della gestione
dei processi, della gestione delle attività e della gestione del
disco. Il kernel controlla lo spazio di memoria per la corretta
esecuzione del programma applicativo. Crea e distrugge la
memoria che aiuta nell’esecuzione del software.
Caratteristiche del Kernel
• Il kernel è classificato come kernel monolitico e microkernel. In
un kernel monolitico, tutti i servizi del sistema operativo corrono
lungo il thread principale del kernel che risiede nella stessa area
di memoria in cui è collocato il kernel. Il kernel monolitico
fornisce un ampio accesso all’hardware del sistema. Il
microkernel è un’astrazione sull’hardware che utilizza le
primitive o le chiamate di sistema per implementare i servizi del
sistema operativo.
Sistema operativo VS Kernel
Le due differenze principali tra sistema operativo e kernel sono
sicuramente le seguenti:
1.La differenza fondamentale tra un sistema operativo e un
kernel è che il sistema operativo è il programma di sistema che
gestisce le risorse del sistema e che il kernel è la parte
importante (programma) nel sistema operativo.
2.Il kernel funge da interfaccia tra software e hardware del
sistema. D’altra parte, il sistema Operativo funge da interfaccia
tra utente e computer.
Kernel del Sistema Operativo
• Kernel (nocciolo, nucleo)
Contiene i programmi per la gestione delle funzioni base del
calcolatore

• Kernel suddiviso in moduli. Ogni modulo ha una funzione


diversa

• Funzioni più importanti:


–gestione processore e dei processi
–gestione memoria (principale e virtuale)
Gestore dei processi

Struttura del Sistema operativo


Componenti

Interfaccia utente

Gestore dell’I/O Gestore del File System

Gestore della
Gestore dei Processi
Memoria Centrale

*KERNEL
Gestore dei processi
• Un sistema operativo con supporto per il multitasking (multiprocessualità) permette di
eseguire più programmi contemporaneamente
• Sistema Operativo time sharing
– Permette la condivisione della CPU tra più processi concorrenti
• Il tempo di esecuzione del processore è condiviso tra più processi / utenti
• Ogni processo in esecuzione ha a disposizione dei quanti di tempo della CPU
Time sharing
• Se viene chiesto al sistema di eseguire contemporaneamente due
processi A e B, la CPU attuerà un meccanismo di time-sharing 
eseguirà per qualche istante (quanto di tempo) il processo A, poi per
qualche istante il processo B, poi tornerà ad eseguire il processo A e
così via…
• Il passaggio dal processo A al processo B e viceversa viene definito
cambio di contesto (context switch)
Scheduler
• Le decisioni riguardanti l'esecuzione di un cambio di
contesto tra due programmi vengono intraprese da un
componente del sistema operativo (software) detto
scheduler
• Scheduler (da schedule = mettere in lista)
– Programma che, dato un insieme di richieste di accesso ad
una risorsa (processi che contemporaneamente richiedono
CPU per essere eseguiti), stabilisce un ordinamento
temporale per l'esecuzione di tali richieste
Scheduling
• Lo scheduler attua lo scheduling
– Ripartizione del tempo di CPU tra tutti i processi
concorrenti (i processi attivi nello stesso momento sul
calcolatore che si contendono l’uso della CPU)
• Lo scheduling è un'operazione molto importante
per il corretto ed efficiente funzionamento del
calcolatore
• Consente di migliorare l'utilizzo del processore
Algoritmi di scheduling
• Esistono vari algoritmi di scheduling che tengono conto
di varie esigenze e che possono essere più indicati in
alcuni contesti piuttosto che in altri
• CRITERI da ottimizzare:
–Massimizzare l’utilizzo del processore
–Massimizzare la produttività
–Minimizzare il tempo di completamento
–Minimizzare il tempo di attesa
–Minimizzare il tempo di risposta

• NOTA: generalmente si tende ad ottimizzare i valori


medi
Criteri

1.Utilizzo del processore: la CPU deve essere attiva il


più possibile (ovvero devono essere ridotti al
minimo i possibili tempi morti)
2.Produttività (throughput): il numero di processi
completati in una determinata quantità di tempo
3.Tempo di completamento: il tempo che intercorre tra
l’inizio di un processo ed il completamento della sua
esecuzione
4.Tempo d'attesa: il tempo in cui un processo pronto
per l'esecuzione rimane in attesa della CPU (waiting
time)
5.Tempo di risposta: il tempo che trascorre tra l’inizio
del processo e l'ottenimento della prima risposta
(dato)
Round Robin
• Algoritmo di scheduling Round Robin (RR)
• Il più diffuso
• Esegue i processi nell'ordine d'arrivo assegnando ‘a turno’ un quanto di tempo di CPU ai
processi in attesa
• Qualora il processo in esecuzione duri più del quanto di tempo assegnato, alla fine del quanto lo si
pone alla fine della coda dei processi in attesa e si fa proseguire l'esecuzione al successivo
processo in attesa
Il nome Round Robin
La locuzione inglese round-robin indica, in più contesti, la modalità di organizzazione di un'attività i cui partecipanti
(umani o no) si alternano a ciclo continuo nello svolgere un compito o nell'accedere ad una risorsa.

Etimologia
L'espressione deriva dal termine francese «ruban rond» ("nastro rotondo"), che in inglese assunse all'inizio del XVII
secolo il significato metaforico di "serie di firme disposte circolarmente intorno al testo firmato", indicando l'usanza di
disporre in cerchio le firme di un documento o una petizione inviata a un'autorità, così da rendere impossibile
l'identificazione di un capo o di un ordine gerarchico tra i firmatari.
Era un'usanza comune anche tra i marinai della Royal Navy, che firmavano così le lettere di reclamo indirizzate agli
ufficiali (il primo esempio certo è del 1731).

Nello sport
Una competizione di sport di squadra con il formato del round-robin prevede che ogni squadra affronti tutte le altre;
l'organizzazione è basata su un apposito programma e su un'apposita classifica.

Nella narrativa
In narrativa, una storia "round-robin" nasce dalla collaborazione degli autori che si alternano nella stesura di brani e
capitoli: è una caratteristica tipica dei romanzi di fantascienza, nati intorno al XIX secolo. L'accezione attuale indica
invece le fan fiction in collaborazione, proprie di Internet.
Round Robin
• Algoritmo di scheduling Round Robin (RR)
• Il più diffuso
• Esegue i processi nell'ordine d'arrivo assegnando ‘a turno’ un
quanto di tempo di CPU ai processi in attesa
• Qualora il processo in esecuzione duri più del quanto di tempo
assegnato, alla fine del quanto lo si pone alla fine della coda dei
processi in attesa e si fa proseguire l'esecuzione al successivo
processo in attesa
Esempio
Ipotesi: i seguenti processi siano in coda con relativa durata in
millisecondi, e quanto di tempo stabilito di 20 ms (50 quanti in un
secondo):
p1 (30) → p2 (15) → p3 (60) → p4 (45)
• p1 (20 ms, ne rimangono 10) → p2 (termina la propria esecuzione perché
dura meno di 20 ms) → p3 (20 ms, ne rimangono 40) → p4 (20 ms, ne
rimangono 25) → p1 (termina perché erano rimasti meno di 20 ms) → p3 (20
ms, ne rimangono 20) → p4 (20 ms, ne rimangono 5) → p3 (termina perché
rimanevano 20 ms) → p4 (termina)

p1 p2 p3 p4 p1 p3 p4 p3 p4 Tempo
0 145 150
20 35 55 75 85 105 125
Criterio di ottimizzazione
• Per valutare l’algoritmo di scheduling facciamo riferimento al
tempo medio di attesa
• Tempo di attesa = istante finale di esecuzione – istante di
arrivo - durata del processo

p1 p2 p3 p4 p1 p3 p4 p3 p4 Tempo
0 20 35 55 75 85 105 125 145 150

• p1 termina all’istante 85, p2 a 35, p3 a 145, p4 a 150 (tutti


arrivati all’istante 0)
• Tempo medio di attesa:
[(85-30)+(35-15)+(145-60)+(150-45)]/4 = 66,25 ms
Shortest Next Process First (SNPF)
• SNPF prevede che venga eseguito sempre il processo con il tempo di esecuzione più
breve tra quelli in attesa
• Esempio: siano sottomessi contemporaneamente i processi dell’esempio precedente,
riportati sotto con la rispettiva durata di esecuzione in ms:
p1 (30) → p2 (15) → p3 (60) → p4 (45)
• I processi vengono eseguiti nel seguente ordine: p2 → p1 → p4 → p3
• p2 termina all’istante 15, p1 a 45, p4 a 90, p3 a 150
[(15-15)+(45-30)+(90-45)+(150-60)]/4 = 37,5 ms
SNPF
• Si può dimostrare che questo algoritmo è ottimale, in
quanto consente di ottenere sempre il valore più basso
di tempo d'attesa medio
• Allora perché non è il più usato?
Sfortunatamente non è possibile applicarlo, in quanto
non è possibile conoscere anticipatamente quanto
durerà l'esecuzione del processo
Potrebbe essere possibile predirlo, ma solo in
determinati contesti
Scheduling con priorità
• Una priorità (numero intero) è assegnata ad ogni
processo
• La CPU è assegnata al processo con più alta
priorità
– es: il più piccolo intero = la più alta priorità
• Possibile uso di preemption (o pre-rilascio): un
processo in esecuzione viene interrotto, con
l'intenzione di ripristinarlo in un secondo momento,
per dare spazio ad un altro processo a priorità più
alta
– Preemptive
– Non preemptive
Scheduling con priorità
• Una priorità (numero intero) è assegnata ad
ogni processo
• La CPU è assegnata al processo con più alta
priorità
– es: il più piccolo intero = la più alta priorità
• Possibile uso di preemption (o pre-rilascio): un
processo in esecuzione viene interrotto, con
l'intenzione di ripristinarlo in un secondo
momento, per dare spazio ad un altro processo a
priorità più alta
– Preemptive
– Non preemptive
Scheduling per multiprocessori

• Lo scheduling nei sistemi multiprocessore è più


complesso
• Si possono avere processori omogenei (tutti uguali)
o disomogenei (processori diversi)
• Problema del bilanciamento del carico (load
balancing)
Problemi di scheduling

• I problemi di scheduling nascono nel contesto dell’automazione


della produzione
• Generalmente si tratta di trovare un opportuno sequenziamento
di un insieme di attività che impiegano risorse scarse,
tipicamente macchinari dedicati a specifiche operazioni
• Più in generale, sono tutti i problemi decisionale in cui ha
importanza il tempo, visto come risorsa scarsa da allocare in
modo ottimo
• I modelli di scheduling trovano applicazione anche in molte
altre aree, dalla logistica al project management
Esempio 1: industria meccanica

• In una industria meccanica, i centri di lavorazione devono effettuare


delle lavorazioni (per es. taglio, fresatura, tornitura) per produrre vari
pezzi che vengono poi assemblati insieme
• Ognuna di queste lavorazioni richiede un certo tempo e impegna un
certo macchinario
• Spesso esistono tempi di riconfigurazione (set-up) delle macchine (per
es. cambio della lama, della fresa, etc.), per cui un pezzo non può essere
immediatamente lavorato quando la macchina si libera
• Il problema consiste, ad esempio, nel determinare l'ordinamento delle
operazioni in modo da terminare tutte le lavorazioni il prima possibile
Esempio 2: elaborazione dati

• Ogni programma che gira su un computer vorrebbe usare la CPU, ma vogliamo


poter far girare più programmi contemporaneamente su uno stesso computer
• Uno dei compiti di un sistema operativo è allora quello di disciplinare l’utilizzo
della CPU da parte dei diversi programmi
• Ciascun programma ha una certa priorità
• L'obiettivo del sistema operativo è quello di gestire l'insieme dei programmi in
modo tale da minimizzare il tempo complessivo di attesa dei programmi,
tenendo conto della priorità
• Il sistema operativo può eventualmente interrompere (e poi magari riprendere)
certi programmi prima del loro termine per consentire la prosecuzione anche
degli altri. Questa modalità operativa prende il nome di preemption
• L’impossibilità di interrompere processi una volta avviati si chiama invece no-
preemption (in alcuni problemi sarà così)
Esempio 3: officina meccanica

• In un'officina di carrozzeria, vi sono quattro stazioni, dedicate


rispettivamente a messa in forma, ribattitura, verniciatura, essiccatura
a forno
• In ciascuna stazione è attivo un operaio, che può lavorare su una sola
autovettura alla volta
• Le autovetture sinistrate richiedono il servizio da parte di alcune
stazioni, in un dato ordine (ad esempio non si può riverniciare la
carrozzeria prima di avere aggiustato le parti danneggiate)
• Il problema consiste nel gestire le varie operazioni in modo da
terminare tutte le lavorazioni nel minor tempo possibile, rispettando
l’ordine di sequenziamento sulle macchine
Esempio 4: voli in atterraggio
• In un aeroporto abbiamo l’insieme dei velivoli prossimi all’atterraggio
• Il sistema di controllo dell’aeroporto permette di far atterrare al più un
volo alla volta per ogni pistae la durata della manovra diatterraggio è
nota per ogni velivolo
• Ad ogni velivolo è inoltre associato un tempo previsto di atterraggio
• Obiettivo del controllore puòessere quello di decidere la esquenza in
modo da minimizzare la somma (pesata) dei ritardi
• Vincoli aggiuntivi:
- precedenze fra voli dovute alle coincidenze
- ….
Come condurre una analisi: esempio fotocopie
Silvia e Francesca giungono nello stesso momento ad una macchina
fotocopiatrice. F deve fare 1 fotocopia, S ne deve fare 100
Il galateo imporrebbe a S di lasciar passare per prima F, che
impegna la macchina per un tempo breve e poi la lascia libera
Come valutare se è una buona idea? Serve una analisi quantitativa
Supponiamo che l’esecuzione di una fotocopia richieda 3 secondi
Due casi:

S precede F 303 F precede S


3

0 300 0 303

Attesa totale = 300 + 303 = 603 Attesa totale = 3 + 303 = 306


Come condurre una analisi: esempio fotocopie
E se F giungesse dopo che S ha già cominciato? (ad esempio
all’istante rf ) Se F attende che S finisca, abbiamo:
S F
303

0 300
rf

Attesa totale = 300 + 303 – rf = 603 – rf

Se invece S interrompe le proprie copie, lascia F fare la sua copia e


poi riprende: rf + 3

0 rf 303

Attesa totale = 3 + 303 = 306


Primo approccio alla risoluzione
• Quattro parti meccaniche (A), (B), (C), (D) devono essere lavorate e poi
assemblate per realizzare un prodotto finale
• Ogni parte deve subire 4 processi su 4 macchinari diversi e condivisi. La
sequenza di macchine e il tempo di processamento è fissato per ogni parte,
così come l’istante di arrivo del pezzo in catena

Sequenza Lavoro
Parte Arrivo
+ tempo in minunti
A 8.30 M1(60) M2(30) M3(2) M4(5)

B 8.45 M2(75) M3(3) M1(25) M4(10)

C 8.45 M3(5) M2(15) M1(10) M4(30)

D 9.30 M4(90) M1(1) M2(1) M3(1)


Caratteristiche del problema

• Nessuna parte cede la macchina su cui è lavorata prima di


aver completato la lavorazione (no-preemption)
• La sequenza di lavoro che serve per ottenere una parte non
può essere modificata: se per fare B devo usare prima M2 e
poi M3 (e poi altre) non posso usare prima M3 e poi M2 (e
poi altre)
• Tutte le parti devono essere completate per poter cominciare
l’assemblaggio

Problema:
A che ora (al minimo) è possibile cominciare ad
assemblare le quattro parti?
Una Soluzione Ammissibile

• Il problema equivale a determinare in quale sequenza


ciascuna macchina lavorerà le singole parti meccaniche, in
modo da minimizzare il tempo di completamento totale

Una possibile soluzione è :

Macch. P1 P2 P3 P4

M1 A D C B
M2 B C A D
M3 C B A D
M4 D A C B
Diagramma di Gantt
Macc P1 P2 P3 P4
.
M1 A D C B Un modo di rappresentare la
M2 B C A D soluzione è il diagramma di Gantt:
M3 C B A D
M4 D A C B
D
M1 A C B

D
M2 B C A

B A D
M3 C

A
M4 DD C B
8.30 9.00 10.00 11.00 11.51
Commenti
D
M1 A C B

D
M2 B C A • Un pezzo può essere
inattivo (in idle) in certi
B A D periodi
M3 C
(C in [10.15, 11.01])
A
M4 DD C B
8.30 9.00 10.00 11.00 11.51

• Ci può essere una macchina che deve restare “ferma” anche se c’è una
parte che deve ancora essere lavorata: M4 potrebbe lavorare B alle
11.05, ma ciò violerebbe la sequenza di B; M1 potrebbe lavorare C alle
9.30 ma ciò violerebbe la sequenza di C
Soluzione Ottima

D
M1 C A B

D
C
M2 B A

B A D

M3 C

M4 C D B

8.30 9.00 9.30 10.00 10.30 11.30

Potrebbero piacerti anche