Difference between revisions of "Lezioni Anno Accademico 2018/19 I semestre"
(29 intermediate revisions by 2 users not shown) | |||
Line 37: | Line 37: | ||
livelli - linguaggi - servizi - astrazioni | livelli - linguaggi - servizi - astrazioni | ||
+ | |||
linguaggio = (alfabeto, lessico, sintassi, semantica) | linguaggio = (alfabeto, lessico, sintassi, semantica) | ||
UNIX: storia e principi costruttivi | UNIX: storia e principi costruttivi | ||
+ | |||
Motivazioni del linguaggio C | Motivazioni del linguaggio C | ||
+ | |||
C-toolchain (ed esempi di uso della shell UNIX). | C-toolchain (ed esempi di uso della shell UNIX). | ||
== Lezione del 2 ottobre 2018 == | == Lezione del 2 ottobre 2018 == | ||
+ | |||
+ | Principi del linguaggio C. | ||
+ | |||
+ | Assegnati esercizi di lettura di programmi in C. | ||
+ | |||
+ | Esperimenti sulla portabilità dei compilatori. | ||
+ | |||
== Lezione del 9 ottobre 2018 == | == Lezione del 9 ottobre 2018 == | ||
+ | |||
+ | Esercizi di lettura su puntatori e vettori e su puntatori a funzione | ||
+ | unioni e strutture | ||
+ | |||
+ | mascheramento di bit | ||
+ | |||
+ | Introduzione ai sistemi di versioning (git) e ai sistemi di gestione delle compilazioni (cmake). | ||
+ | |||
== Lezione del 11 ottobre 2018 == | == Lezione del 11 ottobre 2018 == | ||
+ | |||
+ | * installazione di GNU-Linux | ||
+ | * gruppi lab | ||
+ | * UNIX: struttura standard del file system (ma cosa e' il file system: 3 definizioni) | ||
+ | * user/group | ||
+ | * tipi di file in UNIX | ||
+ | |||
== Lezione del 16 ottobre 2018 == | == Lezione del 16 ottobre 2018 == | ||
+ | |||
+ | Programmazione in C:<br> | ||
+ | :-Utilizzo delle keyword Static/extern/auto/register | ||
+ | :-Preprocessore, compilazione condizionale,inizializzazioni const | ||
+ | |||
+ | parametri a linea comando<br> | ||
+ | link fisici e simbolici <br> | ||
+ | processi: foreground/background <br> | ||
+ | quoting | ||
+ | |||
== Lezione del 18 ottobre 2018 == | == Lezione del 18 ottobre 2018 == | ||
+ | |||
+ | Ruoli delle persone in rapporto ai sistemi operativi: utenti, programmatori(applicazioni), programmatori (sistema), amministratori, sviluppatore kernel. | ||
+ | |||
+ | Librerie e System call. | ||
+ | librerie statiche e dinamiche | ||
+ | Libreria standard C (stdio, errno, string, stdlib-allocazione dinamica). | ||
+ | |||
== Lezione del 23 ottobre 2018 == | == Lezione del 23 ottobre 2018 == | ||
+ | Il catalogo delle system call di UNIX... | ||
+ | *File I/O | ||
+ | *Device I/O | ||
+ | *Memoria | ||
+ | *Process mgmt | ||
+ | *Networking | ||
+ | *IPC | ||
+ | |||
+ | |||
+ | Ritorno alla teoria... | ||
+ | *Breve storia dei sistemi anche operativi. | ||
+ | *Richiami di architettura: von newmann, interrupt/trap DMA, gerarchia di memoria, cache... | ||
+ | |||
== Lezione del 25 ottobre 2018 == | == Lezione del 25 ottobre 2018 == | ||
+ | === Architettura === | ||
+ | Macchina di von Neumann: | ||
+ | * dati programma e istruzioni da eseguire sono nello stesso spazio di memoria | ||
+ | * bus complesso di fili paralleli ai quali sono collegate le unità | ||
+ | |||
+ | |||
+ | === Ciclo di CPU === | ||
+ | fetch/decode/load operandi/execute/store (+controllo interrupt) | ||
+ | |||
+ | tipi di archihtetture | ||
+ | * RISC, tutte le istruzioni hanno la stessa lunghezza | ||
+ | * CISC, istruzione di lunghezza diversa, passate al livello microcodice | ||
+ | |||
+ | RISC più efficiente rispetto a CISC, ma per fare le stesse operazioni ha bisogno di più istruzioni | ||
+ | |||
+ | I modi del processore: | ||
+ | * modo kernel: accesso completo a memoria e hardware | ||
+ | * modo user: accesso solo alla sua memoria e a operazioni base | ||
+ | |||
+ | modalità controllata da un bit sulla CPU. nell'architettura intel i livelli di privilegi sono chiamati ring | ||
+ | |||
+ | Comunicazione coi controllori dei device | ||
+ | |||
+ | Interrupt | ||
+ | * il ciclo di una istruzione ha una fase in più di controllo per gli interrupt ( Non viene mai interrotto il ciclo di una istruzione) | ||
+ | * interrupt di priorità maggiore vengono eseguiti prima mascheramento degli interrupt (mono e multiprocessore) | ||
+ | * cpu ha registro che consente di mascherarsi dagli interrupt | ||
+ | |||
+ | |||
+ | Senza interrupt = Polling | ||
+ | * polling = azione ripetuta | ||
+ | (esempio dalla vita: quello che fanno i bambini in macchina: siamo arrivati? siamo arrivati?) | ||
+ | * esempio prima degli interrupt: la cpu chiede al processo: hai finito? hai finito? prima o poi risponderà sì | ||
+ | |||
+ | |||
+ | DMA (Direct Memory Access). | ||
+ | * Operazioni di buffer fatte dal controller | ||
+ | * Migliora l'efficienza e semplifica la scrittura di SO | ||
+ | |||
+ | |||
+ | Gerarchia di memoria | ||
+ | Tipi di memoria: | ||
+ | * primaria | ||
+ | (codice e dati delle elaborazioni correnti); | ||
+ | (nanosecondo); | ||
+ | * secondaria | ||
+ | (attivazione esecuzioni e programmi); | ||
+ | (grosse moli di dati che vengono scambiati con la mem. promaria poco alla volta) | ||
+ | (millisecondo); | ||
+ | * terziaria | ||
+ | (lente e off-line, esempio CD, DVD, chiavette USB); | ||
+ | |||
+ | |||
+ | concetto di Cache: località (se faccio un accesso è probabile che dopo poco accedo al memoria subito vicina) | ||
+ | |||
+ | Concetto generale di Cache (hw o sw) | ||
+ | |||
+ | Protezione di memoria => MMU (Memory Management Unit) | ||
+ | * alcuni indirizzi accessibili e altri no | ||
+ | * limita l'accesso a determinati indirizzi e nel caso scaturisce una Trap call | ||
+ | * fa in modo che in usermode siano visibili solo alcuni indirizzi. | ||
+ | |||
+ | Casi semplici: registri base/limite, | ||
+ | cenni di funzionamento MMU moderne | ||
+ | |||
== Lezione del 30 ottobre 2018 == | == Lezione del 30 ottobre 2018 == | ||
+ | |||
+ | Fork/wait/getpid/getppid | ||
+ | |||
+ | execve e exec* | ||
+ | |||
+ | Gestione file (open/close/read/write/pread/pwrite) | ||
+ | |||
+ | file aperti: regole relative a fork/exec. | ||
+ | |||
+ | ioctl | ||
+ | |||
+ | [[File:20181030.tgz| esempi visti a lezione]] | ||
+ | |||
== Lezione del 6 novembre 2018 == | == Lezione del 6 novembre 2018 == | ||
+ | |||
+ | PROGETTO: umps2 prima presentazione dell'emulatore. | ||
+ | Compito a casa per i gruppi: installare umps2 e scrivere programmi (eleganti, orinali e professionali) per prvarne le funzionalità. | ||
+ | |||
+ | approfondimento su azioni atomiche dup2, APPEND mode, pread/pwrite | ||
+ | |||
+ | * System call file system prefissi: L/F | ||
+ | * System call file system: stat, access, umask, chmod, chown, truncate, link, symlink, unlink, rename, mkdir, rmdir, | ||
+ | * chdir/fchdir (...at system call) | ||
+ | * navigazione directory: getdents. (Lib: opendir/readdir/rewinddir/closedir) | ||
+ | |||
+ | esperimenti svolti in aula: [[File:20181106.tgz]] | ||
+ | |||
== Lezione del 8 novembre 2018 == | == Lezione del 8 novembre 2018 == | ||
+ | |||
+ | file senza aree dati associate (o parzialmente allocati). | ||
+ | mknod, pipe, mkfifo/named pipe. | ||
+ | |||
+ | select/poll | ||
+ | kill, signal | ||
+ | |||
+ | [[File:20181108.tgz]] | ||
+ | |||
== Lezione del 13 novembre 2018 == | == Lezione del 13 novembre 2018 == | ||
+ | |||
+ | Segnali affidabili. | ||
+ | |||
+ | python primi esempi. | ||
+ | |||
+ | [[File:20181113.tgz]] | ||
+ | |||
== Lezione del 15 novembre 2018 == | == Lezione del 15 novembre 2018 == | ||
+ | |||
+ | Python... presentazione del linguaggio con esempi. | ||
+ | |||
+ | Programmazione concorrente: | ||
+ | Race condition, prima introduzione ai problemi deadlock/starvation... | ||
+ | |||
+ | [[File:20181115.tgz]] | ||
+ | |||
== Lezione del 20 novembre 2018 == | == Lezione del 20 novembre 2018 == | ||
+ | |||
+ | Programmazione concorrente: | ||
+ | notazione | ||
+ | azioni atomiche | ||
+ | proprieta' safety e liveness | ||
+ | |||
+ | il problema della mutua esclusione | ||
+ | soluzione di Dekker | ||
+ | |||
+ | [[File:20181120.tgz]] | ||
+ | |||
== Lezione del 22 novembre 2018 == | == Lezione del 22 novembre 2018 == | ||
+ | |||
+ | Dimostrazione dell'algoritmo di Dekker. | ||
+ | |||
+ | Spinlock. Test&set. | ||
+ | |||
+ | Semafori. Mutex con semafori. Produttore/consumatore coi semafori. | ||
+ | |||
+ | [[File:20181122.tgz]] | ||
+ | |||
== Lezione del 27 novembre 2018 == | == Lezione del 27 novembre 2018 == | ||
+ | |||
+ | Semafori: implementazione | ||
+ | |||
+ | Problema del BUffer limitato e cena dei filosofi coi semafori. | ||
+ | |||
+ | Libreria per speriemntare semafori in C e python. | ||
+ | |||
+ | [[File:20181127.tgz]] | ||
+ | |||
== Lezione del 29 novembre 2018 == | == Lezione del 29 novembre 2018 == | ||
+ | |||
+ | Semafori binari, equivalenza. Lettori-Scrittori. Passaggio del testimone (passing le batôn) | ||
+ | |||
+ | [[File:20181129.tgz]] | ||
+ | |||
== Lezione del 4 dicembre 2018 == | == Lezione del 4 dicembre 2018 == | ||
== Lezione del 6 dicembre 2018 == | == Lezione del 6 dicembre 2018 == | ||
== Lezione del 11 dicembre 2018 == | == Lezione del 11 dicembre 2018 == | ||
== Lezione del 13 dicembre 2018 == | == Lezione del 13 dicembre 2018 == | ||
+ | |||
+ | == Copia della pagina https://etherpad.wikimedia.org/p/so.cs.unibo.it == | ||
+ | |||
+ | [[Copia di https://etherpad.wikimedia.org/p/so.cs.unibo.it (25 febbraio 2019)]] |
Latest revision as of 11:10, 25 February 2019
questa pagina serve per scrivere idee, riassunti dei concetti espressi, commenti approfondimenti sulle lezioni.
Lezione del 25 settembre 2018
Presentazione Corso
Introduzione generale sui concetti di:
- Università
- Informatica
- hardware software
- codice
- rivoluzione digitale
Risorse del corso:
- il docente: mailinglist-mail-ricevimento
- la mailinglist
- lezioni live (cercate davoli-live con un motore di ricerca e fate click su qui)
- il sito web www.cs.unibo.it/~renzo/so
- il wiki so.v2.cs.unibo.it
- il bot so.cs.unibot
- la macchina virtuale soho
- i vostri sistemi BYOD (bring your own device)
- i lab del dipartimento (ercolani+ranzani)
Cose da fare per gli studenti (compiti a casa):
- avere account di laboratorio
- avere un sistema GNU-Linux
- creare i gruppi di laboratorio
- iscriversi alla mailing list
Lezione del 27 settembre 2018
prima definizione di sistema operativo (astrazione-unificazione-gestione-controllo)
algoritmo - programma - processo
livelli - linguaggi - servizi - astrazioni
linguaggio = (alfabeto, lessico, sintassi, semantica)
UNIX: storia e principi costruttivi
Motivazioni del linguaggio C
C-toolchain (ed esempi di uso della shell UNIX).
Lezione del 2 ottobre 2018
Principi del linguaggio C.
Assegnati esercizi di lettura di programmi in C.
Esperimenti sulla portabilità dei compilatori.
Lezione del 9 ottobre 2018
Esercizi di lettura su puntatori e vettori e su puntatori a funzione unioni e strutture
mascheramento di bit
Introduzione ai sistemi di versioning (git) e ai sistemi di gestione delle compilazioni (cmake).
Lezione del 11 ottobre 2018
- installazione di GNU-Linux
- gruppi lab
- UNIX: struttura standard del file system (ma cosa e' il file system: 3 definizioni)
- user/group
- tipi di file in UNIX
Lezione del 16 ottobre 2018
Programmazione in C:
- -Utilizzo delle keyword Static/extern/auto/register
- -Preprocessore, compilazione condizionale,inizializzazioni const
parametri a linea comando
link fisici e simbolici
processi: foreground/background
quoting
Lezione del 18 ottobre 2018
Ruoli delle persone in rapporto ai sistemi operativi: utenti, programmatori(applicazioni), programmatori (sistema), amministratori, sviluppatore kernel.
Librerie e System call. librerie statiche e dinamiche Libreria standard C (stdio, errno, string, stdlib-allocazione dinamica).
Lezione del 23 ottobre 2018
Il catalogo delle system call di UNIX...
- File I/O
- Device I/O
- Memoria
- Process mgmt
- Networking
- IPC
Ritorno alla teoria...
- Breve storia dei sistemi anche operativi.
- Richiami di architettura: von newmann, interrupt/trap DMA, gerarchia di memoria, cache...
Lezione del 25 ottobre 2018
Architettura
Macchina di von Neumann:
- dati programma e istruzioni da eseguire sono nello stesso spazio di memoria
- bus complesso di fili paralleli ai quali sono collegate le unità
Ciclo di CPU
fetch/decode/load operandi/execute/store (+controllo interrupt)
tipi di archihtetture
- RISC, tutte le istruzioni hanno la stessa lunghezza
- CISC, istruzione di lunghezza diversa, passate al livello microcodice
RISC più efficiente rispetto a CISC, ma per fare le stesse operazioni ha bisogno di più istruzioni
I modi del processore:
- modo kernel: accesso completo a memoria e hardware
- modo user: accesso solo alla sua memoria e a operazioni base
modalità controllata da un bit sulla CPU. nell'architettura intel i livelli di privilegi sono chiamati ring
Comunicazione coi controllori dei device
Interrupt
- il ciclo di una istruzione ha una fase in più di controllo per gli interrupt ( Non viene mai interrotto il ciclo di una istruzione)
- interrupt di priorità maggiore vengono eseguiti prima mascheramento degli interrupt (mono e multiprocessore)
- cpu ha registro che consente di mascherarsi dagli interrupt
Senza interrupt = Polling
- polling = azione ripetuta
(esempio dalla vita: quello che fanno i bambini in macchina: siamo arrivati? siamo arrivati?)
- esempio prima degli interrupt: la cpu chiede al processo: hai finito? hai finito? prima o poi risponderà sì
DMA (Direct Memory Access).
- Operazioni di buffer fatte dal controller
- Migliora l'efficienza e semplifica la scrittura di SO
Gerarchia di memoria
Tipi di memoria:
- primaria
(codice e dati delle elaborazioni correnti); (nanosecondo);
- secondaria
(attivazione esecuzioni e programmi); (grosse moli di dati che vengono scambiati con la mem. promaria poco alla volta) (millisecondo);
- terziaria
(lente e off-line, esempio CD, DVD, chiavette USB);
concetto di Cache: località (se faccio un accesso è probabile che dopo poco accedo al memoria subito vicina)
Concetto generale di Cache (hw o sw)
Protezione di memoria => MMU (Memory Management Unit)
- alcuni indirizzi accessibili e altri no
- limita l'accesso a determinati indirizzi e nel caso scaturisce una Trap call
- fa in modo che in usermode siano visibili solo alcuni indirizzi.
Casi semplici: registri base/limite, cenni di funzionamento MMU moderne
Lezione del 30 ottobre 2018
Fork/wait/getpid/getppid
execve e exec*
Gestione file (open/close/read/write/pread/pwrite)
file aperti: regole relative a fork/exec.
ioctl
Lezione del 6 novembre 2018
PROGETTO: umps2 prima presentazione dell'emulatore. Compito a casa per i gruppi: installare umps2 e scrivere programmi (eleganti, orinali e professionali) per prvarne le funzionalità.
approfondimento su azioni atomiche dup2, APPEND mode, pread/pwrite
- System call file system prefissi: L/F
- System call file system: stat, access, umask, chmod, chown, truncate, link, symlink, unlink, rename, mkdir, rmdir,
- chdir/fchdir (...at system call)
- navigazione directory: getdents. (Lib: opendir/readdir/rewinddir/closedir)
esperimenti svolti in aula: File:20181106.tgz
Lezione del 8 novembre 2018
file senza aree dati associate (o parzialmente allocati). mknod, pipe, mkfifo/named pipe.
select/poll kill, signal
Lezione del 13 novembre 2018
Segnali affidabili.
python primi esempi.
Lezione del 15 novembre 2018
Python... presentazione del linguaggio con esempi.
Programmazione concorrente: Race condition, prima introduzione ai problemi deadlock/starvation...
Lezione del 20 novembre 2018
Programmazione concorrente: notazione azioni atomiche proprieta' safety e liveness
il problema della mutua esclusione soluzione di Dekker
Lezione del 22 novembre 2018
Dimostrazione dell'algoritmo di Dekker.
Spinlock. Test&set.
Semafori. Mutex con semafori. Produttore/consumatore coi semafori.
Lezione del 27 novembre 2018
Semafori: implementazione
Problema del BUffer limitato e cena dei filosofi coi semafori.
Libreria per speriemntare semafori in C e python.
Lezione del 29 novembre 2018
Semafori binari, equivalenza. Lettori-Scrittori. Passaggio del testimone (passing le batôn)
Lezione del 4 dicembre 2018
Lezione del 6 dicembre 2018
Lezione del 11 dicembre 2018
Lezione del 13 dicembre 2018
Copia della pagina https://etherpad.wikimedia.org/p/so.cs.unibo.it
Copia di https://etherpad.wikimedia.org/p/so.cs.unibo.it (25 febbraio 2019)