080IN - SISTEMI OPERATIVI 2018
Section outline
-
-
la seconda provetta dell'esame di Sistemi Operativi, per l'anno 2018-2019, si terrà il giorno venerdì 7 giugno 2019, dalle ore 10:00 alle ore 13:00, nell'aula Aula 2 - Edif. C5 - 1° piano (la stessa aula dove si tiene il corso).
-
-
presentazione corso, programma, modalità di esame
questionario (google forms)
prime slide fino a pagina 35 (sisop00.pdf)
esercizi per casa
installazione di una macchina virtuale
-
sisop00 File PDF
-
-
-
slide sisopfiles.ppt; tree, root, subroot, leaves, parent, children; linux file system structure; java.io.File
start della vm debian su virtualbox
comandi shell: pwd, ls, cd, rm, touch, gedit
cat /proc/cpuinfo
man
environment della shell (bash); come la shell ricerca un eseguibile ($PATH)
introduzione pipe
percorso relativo e percorso assoluto
dot
dot-dot
directory di lavoro del processo
file system "virtuale" /proc
correzione esercizi del 18/02
nuovi esercizi individuali per la lezione successiva
-
sisopfiles PDF
-
-
-
unix design philophy
stdin, stdout, stderr
scripting (esercitazioni)
linguaggio C (esercitazioni): printf, fprintf, #include, main, int, stdout
system call: getpid
shell: pipe, redirezioni
Eclipse: creazione nuovo progetto C, "hello world", run, debug, breakpoint
linux: ps, pico, apt (update, install, /etc/apt/sources.list), sudo, su
fino a pagina 9 di sisopstreams.pptx
-
-
-
stack, heap, variabili globali, codice
variabili
visibilità variabili
processi concorrenti, quasi concorrenti
process control block
process management
process scheduler
argomenti di main
puntatori, array di char
-
-
-
ppt strutture dati: tutto
array statici, dinamici
calloc
sizeof
free
srtrlen
variable length array (C99)
realloc
controlli su indice quando si accede ad array
linked list: head, tail, inserimento, ricerca, rimozione
da pagina 10 a pagina 20 di sisopstreams.pptx
esercizio in classe:
00array e 00puntatori
gli esercizi per le lezioni si trovano qui: da https://github.com/marcotessarotto/exOpSys
-
-
-
git clone, git pull
tipi dati del linguaggio C: basic types, enumerated types, void, derived types
struct, struct con bitfield
enum
typedef
printf e scanf
system calls: open, read, write, close
fino a pag. 20 di sisopclang-syscall
-
Per favore, datemi un feedback sulle lezioni svolte fino a qui.
Le vostre risposte sono importantissime per migliorare il corso, fin da subito!
Sono aperto a qualsiasi suggerimento, ne possiamo parlare anche in classe.
Grazie!
-
-
-
Discussione con la classe dei risultati del feedback sulla prima parte del corso.
Riprendiamo e "rimpolpiamo" la formazione su Linguaggio C, seguiremo il seguente libro di testo:
C Programming Language, 2nd Edition - Kernighan, Ritchie
newline character, escape sequence: \n \t \\
esercizio conversione Fahrenheit-Celsius
while
troncamento nelle operazioni int (es. 5 / 9)
formattazione di int e float nella stringa di formattazione di printf
esercizio per casa: scrivere un programma per la conversione da Celsius a Fahrenheit (esercizio 1-4, pag 13)
-
Dedicate qualche minuto alla fine di ogni lezione, il vostro aiuto è fondamentale! grazie.
Segue il metodo "START-STOP-CONTINE".
http://www.bu.edu/ctl/teaching-resources/start-stop-continue/
-
-
discussione con la classe sulle modalità di esame, in seguito a feedback e comunicazioni ricevute dagli studenti.
***
soluzione esercizio 1-4 (Celsius to Fahrenheit) pag.13
the for statement
#define
Input Output di caratteri
text stream
getchar e putchar - pag. 15
esempio: copia di file - pag. 16
esempio: contare caratteri - pag. 17
esempio: contare linee - pag. 19
esempio: contare parole - pag 20
esempio: programma per contare il numero di occorrenze di ciascuna cifra, spazio tab e newline, caratteri restanti - pag. 22
dichiarazioni, definizioni di funzioni - pag. 24
prototipo di funzione - pag. 26
si consiglia di svolgere a casa i seguenti esercizi:
1-8, 1-9, 1-10 - pag. 20
1-12 - pag- 21
-
ASCII Table File PDF
ASCII significa American Standard Code for Information Interchange.
E' uno standard di codifica dei caratteri che utilizza 7 bit.
-
Dedicate qualche minuto alla fine di ogni lezione, il vostro aiuto è fondamentale! grazie.
Segue il metodo "START-STOP-CONTINE".
http://www.bu.edu/ctl/teaching-resources/start-stop-continue/
-
sulla base di feedback e comunicazioni ricevute dagli studenti in questi ultimi giorni, questa è la modifica del calcolo del voto finale che tiene conto degli esercizi svolti fino a qui.
Discussa ed approvata nella lezione del 18/03.
-
-
-
discussione soluzione esercizi 1-8, 1-9, 1-10 - pag. 20
come leggere le variabili di environment
switch
argomenti di funzione passati "by value" (tranne array)
funzione che restituisce struct
funzione strncmp; equivalente del metodo Java: String.startsWith()
differenze tra Java e C: no overloading di funzioni
Argomenti di funzione - passati "by value" (tranne array) - pag. 27
Array di caratteri pag. 28 : esempio (getline, copy...)
Esercizi consigliati:
1-13, 1-14 - pag 24
1-16, pag. 30
1-17, 1-18, 1-19, pag. 31
1-20, 1-21,1-22, 1-23, 1-24: pag. 34
-
-
-
una parte della lezione sarà dedicata ad una "simulazione" di provetta, su tutto il programma svolto finora (slide, repository, esercizi, libro...)
dato che è un test senza voto, svolgeremo la provetta utilizzando moodle, quindi per favore cercate di essere a lezione ognuno con pc o simile.
-
esercitazione per la prima provetta del 5/4.
Eclipse & vm non dovrebbero servire...
-
-
-
esempi studiati in aula:esempi avanzati con scanfesempi con puntatoristrtolopendir, readdir, closedirfstat, open, close, mmap, munmap
-
-
-
esempi studiati in classe:
https://github.com/marcotessarotto/exOpSys/tree/master/01strings
strcat, strlen, strchr, strstr, strcasestr, strtok_r, strdup, strcmp, realloc
soluzioni esercizi del 2019/03/29:
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/01esercizi
-
-
-
Prima provetta (domande di teoria ed esercizi).
La provetta si svolgerà su Moodle. Se qualche studente non avrà a disposizione un pc, mi deve informare in anticipo via email e provvederò a stampare delle copie cartacee della provetta.
La provetta si effettua in aula (non da remoto); ogni studente deve portare il proprio pc.
Raccoglierò in aula i nominativi delle persone presenti: ogni partecipante porti il libretto universitario o un documento di identificazione.
Nel corso della provetta potete usare la vm debian ed Eclipse, se lo ritenete opportuno.
-
-
-
Utilizzeremo anche il libro "The Linux Programming Interface: A Linux and UNIX System Programming Handbook" di Michael Kerrisk
dal libro:
definizione operating system
compiti del kernel: process scheduling, memory management, file system, crezione e terminazione dei processi, accesso ai dispositivi, networking, system calls
kernel mode e user mode
isolamento dei processi; memoria virtuale.
shell, shell scripts
utenti e gruppi
superuser
struttura a cartelle
tipi di file: file regolari, device, pipes, sockets, cartelle, symbolic links
definizione di directory (cartella); link: (associazione filename, riferimento a file)
symbolic link
proprietà e permessi dei file
principali system call per file I/O: open, read, write, close, lseek
file descriptor
definizione di processo
organizzazione della memoria di un processo: segmenti text, data, heap, stack
system call: fork(), execve(), wait()
process identifier (PID), parent process identifier (PPID)
terminazione di processo con exit()
-
-
-
system calls: execve, fork, wait
esempio 01files, funzione test_mmap()
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/01files
esempio 07fork_wait
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/07fork_wait
system call: access, open (flag O_CREAT, O_TRUNC, O_WRONLY, O_RDWR, O_APPEND), read, write, close, lseek, stat, unlink
esempio 01filesrw
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/01filesrw
-
-
schema libro di Kerrisk, pag. 515 : Overview of the use of fork(), exit(), wait(), and execve()
esempi con fork, execve, wait, dup2
esempio equivalente al comando shell "ls -l > output.txt" [esempio non fatto a lezione ma introduttivo a 02_simple_pipes]
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/02dup_exec
esempio equivalente al comando shell "ls -l /home/utente | wc"
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/02simple_pipes
-
-
Esempio che utilizza ALSA - PulseAudio:
https://github.com/marcotessarotto/pafft
organizzazione della memoria: little endian (Intel/AMD), big endian
race condition, critical region:
https://www.kernel.org/doc/htmldocs/kernel-locking/races.html
esempio 13fork_semaphore:
semafori con nome; sem_unlink, sem_open, sem_wait, sem_post, sem_close
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/13fork_semaphore
-
esercizio File PDF
-
-
-
esercizi in aula
semafori senza nome; sem_init, sem_trywait
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/14fork10
system call ftruncate
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/15write_fork
-
-
-
correzione di alcuni esercizi assegnati in precedenza.
POSIX threads (pthreads):
dal libro:
Capitolo 29, "Threads: introduction" (fino a pag .626)
pthread_t, pthread_create, pthread_exit, pthread_self, pthread_join
fino a pag. 626
-
-
introduzione ai segnali Unix
cap. 20 "Signals: fundamental concepts" pag. 387-397
esempio https://github.com/marcotessarotto/exOpSys/tree/opsys2019/18signals
esempio https://github.com/marcotessarotto/exOpSys/tree/opsys2019/16sem_signal
esempio https://github.com/marcotessarotto/exOpSys/tree/opsys2019/17thread_start
pthreads:
cap 29, pag. 626-636
-
-
-
soluzione in classe dell'esercizio "due processi" (il testo dell'esercizio si trova nel codice sorgente pubblicato, vedere link qui sotto)
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/22two_procs
introduzione al problema "produttore-consumatore"
-
-
-
mutex per POSIX threads:
pthread_mutex_t, PTHREAD_MUTEX_INITIALIZER, pthread_mutex_lock, pthread_mutex_unlock
esempio:
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/19thread_counter
condition variables per POSIX threads:
pthread_cond_t, PTHREAD_COND_INITIALIZER, pthread_cond_wait, pthread_cond_signal, pthread_cond_broadcast; clock_gettime
esempi:
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/20sharedcounterloop
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/21sharedcounter-condvar
-
esercizi File PDF
-
slide File PDF
-
-
-
la lezione della mattina (orario 9-13) si terrà nell'aula 2B dell’edificio H3, secondo piano.
La lezione del pomeriggio (orario 15-17) si terrà nell'aula usuale.
TEST DI PROGRAMMAZIONE senza valutazione - esercizio di programmazione (no domande teoria), come preparazione alla seconda provetta
via MOODLE, start ore 11:00, fine ore 13:00
esempi ed esercizi:
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/24mmapwrite
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/27forkmmapwrite
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/28threads4
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/29altprocs
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/30alt3procs
-
TEST DI PROGRAMMAZIONE senza valutazione - esercizio di programmazione (no domande teoria), come preparazione alla seconda provetta
-
-
-
per gli studenti che effettuano l'esame in modalità 9 CFU:
per chi vuole verificare il lavoro aggiuntivo (anche se non ancora completo), ci troviamo in aula.
-
-
-
la seconda provetta dell'esame di Sistemi Operativi, per l'anno 2018-2019, si terrà il giorno venerdì 7 giugno 2019, dalle ore 10:00 alle ore 13:00, nell'aula Aula 2 - Edif. C5 - 1° piano (la stessa aula dove si tiene il corso).
La provetta si svolgerà su Moodle. Se qualche studente non avrà a disposizione un pc, mi deve informare in anticipo via email e provvederò a stampare delle copie cartacee della provetta.
La provetta si effettua in aula (non da remoto); ogni studente deve portare il proprio pc.
Raccoglierò in aula i nominativi delle persone presenti: ogni partecipante porti il libretto universitario o un documento di identificazione.
Nel corso della provetta potete usare la vm debian ed Eclipse.
*** ISTRUZIONI PER LA REGISTRAZIONE DEL VOTO ***
pubblicherò qui i risultati della seconda provetta ed il voto complessivo (round 1, round 2, round 3 opzionale, provetta 1, provetta 2).
Per avere il voto registrato (se entrambe le provette hanno voto >= 18), è sufficiente iscriversi all'appello del 13/6.
****
-
-
-
follow-up del corso su LINUX SOCKETS E NETWORKING
dalle 10 alle 12, presso aula Aula 2 - Edif. C5 - 1° piano (la stessa aula dove si è tenuto il corso)
esercitazioni:
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/35socketexamples
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/34nanows
https://github.com/marcotessarotto/exOpSys/tree/opsys2019/33sockets
nell'esercitazione si utilizza ngrok; si possono usare alternative a ngrok, le trovate qui:
-
sockets File PDF
-