Lezioni Anno Accademico 2017/18 I semestre
scrivete qui idee, riassunti dei concetti espressi, commenti approfondimenti sulle lezioni.
Lezione del 26 settembre 2017
Titolo della lezione: W H Y
- What:
- Who:
- When:
Il corso ha durata annuale. Verrà svolto ogni martedì e venerdì dalle 15:30 alle 18:30.
- La lezione del martedì sarà dedicata alla programmazione concorrente;
- La lezione del venerdì sarà dedicata alla parte generale. Terminerà circa 15 minuti prima dell'orario stabilito.
- Where:
Sempre in Aula 1 Ercolani (E1): DISI, Scuole Ercolani, Mura Anteo Zamboni 2B.
- How:
- Why:
- Fonti e strumenti del corso: wiki creata di gruppo, lezioni frontali e esercitazioni.
- Non esiste un vero e proprio testo consigliato. Tutte le informazioni sono date DURANTE il corso.
- Per domande specifiche scrivere su mailing list (so@cs.unibo.it);
- Per esercizi, appunti e programma svolto rivolgersi al wiki (so.v2.cs.unibo.it);
- Per live streaming (www.cs.unibo.it/~renzo/live/).
- Modalità di esame: esame scritto (diviso in due parti: una parte generale e una di programmazione concorrente) + progetto + orale (facoltativo), possibilità di dare solo lo scritto per ottenere un massimo di 18. La modalità per studenti in "difficoltà" è disponibile solo fino agli appelli autunnali.
- Si parlerà del progetto indicativamente a partire da Dicembre 2017.
- L'orale può essere sostenuto da chi vuole migliorare (peggiorare) il voto ottenuto, o da chi vuole ottenere la lode.
- Orario di ricevimento per il primo semestre (fino al 15/09/17): martedì alle 11:30.
- Università = docenti + studenti.
- Informatica = come generare informazione automatica.
- Hardware, Software, Elaborazione, Comunicazione, Memorizzazione, Digitale/Analogico.
La principale distinzione che facciamo tra dato e informazione è che il dato, da solo, è privo di significato. Se, tuttavia, viene interpretato in un particolare contesto allora può diventare informazione significativa per chi sta interpretando i dati.
Un algoritmo è un insieme non ambiguo di passi che, dato un problema, ci permette di risolverlo.
Il nostro algoritmo, scritto in un qualche linguaggio formale, diventa un programma (sostanzialmente un testo, un insieme di istruzioni).
Un linguaggio non è altro che una quadrupla (alfabeto, sintassi, lessico, semantica) dove:
- l'alfabeto è l'insieme di simboli che compone il linguaggio.
- la sintassi determina quali delle sequenze scritte sono effettivamente corrette.
- il lessico si può vedere come una funzione che va dai simboli a un booleano e ci dice quali sono le parole ben formate.
- la semantica associa un significato alle parole ben formate.
Lezione del 29 settembre 2017
Cos'è un sistema operativo e un po' di storia
Un sistema operativo è un programma che gestisce i processi, le risorse e interfaccia le applicazioni con l'hardware dell'elaboratore.
In particolare, il sistema operativo (laddove esiste) è il primo processo ad essere attivato e resta in vita fino allo spegnimento del calcolatore o al sopraggiungere di un errore fatale per il sistema.
A cosa serve un sistema operativo? Principalmente, ha i seguenti scopi:
- facilitare l'utilizzo del sistema;
- rendere affidabile, protetto e sicuro l'utilizzo del sistema (e.g. un processo potrebbe recar danno all'intero sistema se non controllato o potrebbe ignorare i permessi di visualizzazione di un file);
- astrarre l'hardware (e.g. filesystem);
- garantire l'efficienza (e.g. non tenere la CPU in idle adottando opportuni algoritmi di scheduling);
- assicurare portabilità;
Astraendo il nostro calcolatore possiamo piazzare al livello più basso l'hardware e, subito sopra, il sistema operativo. I due layer comunicano usando il linguaggio ISA (Instruction Set Architecture), nativo della CPU stessa, al quale si aggiungono quelli che permettono di comunicare con i vari dispositivi come la scheda di rete, la stampante, etc. Sopra il livello del sistema operativo possiamo collocare quello delle librerie e, infine, quello degli applicativi.
Nella generazione zero (1800 ca.) possiamo include Babbage con la sua macchina analitica e lady Ada Lovelace.
Nella generazione uno vediamo la comparsa delle valvole con tutti i problemi connessi. Non c'erano utilizzatori delle macchine, le stesse persone che le costruivano erano anche programmatori e utilizzatori.
Nella generazione due arriva il transistor. Quest'ultimo è molto più veloce e piccolo della valvola e, soprattutto, meno incline a guasti. Le macchine iniziano ad essere più economiche grazie alla possibilità di avere un'economia di scala e quindi più accessibili al grande pubblico. Questo fa si che, in queste prime fasi, i costruttori non siano più gli unici utilizzatori. A questo punto, poiché pur essendo diventata più accessibile, una macchina costava ancora molto, nasce l'esigenza di non lasciare mai un processore senza lavoro (al fine di massimizzare i ricavi) e di condividere i dati. In questa fase, infatti, abbiamo sistemi operativi di tipo batch (che collezionano tutto l'input all'inizio per calcolare e restituire l'output) dove l'inserimento di programmi e dati veniva fatto tramite schede perforate e non c'era interazione. Dai sistemi batch nasce lo SPOOL (Simultaneous Peripheral Operations On-Line).
Si comincia a pensare di utilizzare i tempi di I/O per poter eseguire altri processi. Questo però solleva almeno due problematiche: da un lato serve un modo per sapere quando un input è davvero finito mentre, dall'altro, bisogna fare in modo che un processo che non richieda I/O occupi la CPU per un tempo indefinito. Per la prima problematica la soluzione è rappresentata dall'introduzione degli interrupt, segnali elettrici inviati alla CPU alla fine di ogni input. Per la seconda, invece, è stato introdotto il cosiddetto interval timer che non è altro che un dispositivo che invia interrupt dopo un determinato quanto di tempo assicurando che un processo non occupi per troppo tempo il processore.