Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
• 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
Interfaccia utente
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
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
0 300 0 303
0 300
rf
0 rf 303
Sequenza Lavoro
Parte Arrivo
+ tempo in minunti
A 8.30 M1(60) M2(30) M3(2) M4(5)
Problema:
A che ora (al minimo) è possibile cominciare ad
assemblare le quattro parti?
Una Soluzione Ammissibile
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