080IN - SISTEMI OPERATIVI 2019
Schema della sezione
-
-
tutti i video del corso, incluse le lezioni in teledidattica, si trovano in questa
-
***
in via sperimentale, durante le lezioni, useremo un gruppo Telegram dedicato (esiste anche la app in versione Desktop)
cliccate su questo link per associarvi al gruppo : https://t.me/SistemiOperativiUnits
***
presentazione corso, programma, modalità di esame
introduzione ai sistemi operativi
installazione di una macchina virtuale per le esercitazioni
-
da Kerrisk (cap. 2), pag. 21-32
Fundamental Concepts: The Core Operating System: The Kernel, bash shell, Users and Groups, Single Directory Hierarchy, Directories, Links and Files, File I/O Model, Programs, Processes
user id, group id, process id, parent process id; root del file system; file regolari, directories;
cartella /etc/; struttura dei file /etc/passwd, /etc/group;
comandi da emulatore terminale: man, ls, cd, pwd, mkdir, rmdir, pico, gedit, echo, which, tree, cp, cat, htop, ps, id, sudo
variabili di environment: $PATH, $?
basi di git: git clone, git pull
differenze tra C e Java: no classi, interfacce, eccezioni, method overloading
da Kernigan&Ritchie (cap. 1), pag. 5-6
esempio C "hello world"; compilatore e linker; make; printf, direttiva include, funzione main, return value di main
-
ripetizione degli aspetti principali trattati nelle prime due lezioni del corso
main, printf, return, while, for, #include, #define, int, char, void, definizione di variabili
da Kernigan&Ritchie (cap. 1), pag. 8-10: esempio https://github.com/marcotessarotto/exOpSys/tree/opsys2020/001fahr_to_celsius_debug
debug di un programma con Eclipse: progetto https://github.com/marcotessarotto/exOpSys/tree/opsys2020/001fahr_to_celsius_debug ,
comandi Eclipse per il debugging: avvio debug (F11), step into (F5), step over (F6), resume (F8)
-
fasi del compilatore gcc (script di esempio : https://github.com/marcotessarotto/exOpSys/blob/opsys2020/000hello-world/run_me.sh)
tipi dati del linguaggio C (Kernigan&Ritchie pag. 9, pag. 36) progetto https://github.com/marcotessarotto/exOpSys/tree/opsys2020/002data-types
printf per scrivere su stdout: char, int, unsigned int, long, unsigned long, float, double (progetto https://github.com/marcotessarotto/exOpSys/tree/opsys2020/002printf)
scanf per leggere da stdin: char, int, unsigned int, long, unsigned long, float, double (progetto https://github.com/marcotessarotto/exOpSys/tree/opsys2020/003scanf)
printf, putchar, scanf; esercizi
-
array statico, array dinamico; leggere array statico da stdin; leggere array dinamico da stding ( progetto https://github.com/marcotessarotto/exOpSys/tree/opsys2020/004arrays)puntatori: progetto https://github.com/marcotessarotto/exOpSys/tree/opsys2020/004.0pointers ; Kernighan&Ritchie pag. 93operazioni con array: allocare, liberare, ridimensionare, copiare, inversione; progetto https://github.com/marcotessarotto/exOpSys/tree/opsys2020/004.1arrays-operationsfunzioni: calloc(), malloc(), free()altri esempi su puntatori (aggiunti 20/04)
-
terminiamo lo studio del progetto https://github.com/marcotessarotto/exOpSys/tree/opsys2020/004.1arrays-operationssystem call read; progetto https://github.com/marcotessarotto/exOpSys/tree/opsys2020/004.2read-to-arrayoperazioni su array: ridimensionare, copiare, concatenare, inversione, sortpassare un array come parametro di funzionefunzione swapcontrollare il risultato di calloc/mallocfunzioni: realloc(), memset(), memcpy(),system call: getpid(), signal(), read()
-
progetto https://github.com/marcotessarotto/exOpSys/tree/opsys2020/004.3return-array
progetto https://github.com/marcotessarotto/exOpSys/tree/opsys2020/004.6array-comparison
esempi con getchar(), putchar():
progetto https://github.com/marcotessarotto/exOpSys/tree/opsys2020/005.1getchar
progetto https://github.com/marcotessarotto/exOpSys/tree/opsys2020/005.2copyfile (vedere anche Kernighan&Ritchie pag.16)
slide Linux process scheduler fino a pag. 17
esercizi per casa:
progetto https://github.com/marcotessarotto/exOpSys/tree/opsys2020/005.3countchars
progetto https://github.com/marcotessarotto/exOpSys/tree/opsys2020/005.4getchar-reverse
-
linux process scheduler (finite slide iniziate la lezione precedente)
system call: fork(), wait(), sleep(), nanosleep()
esempio https://github.com/marcotessarotto/exOpSys/tree/opsys2020/005.5fork-wait
esempio https://github.com/marcotessarotto/exOpSys/tree/opsys2020/005.6fork-wait-2
iniziata analisi dell'esempio https://github.com/marcotessarotto/exOpSys/tree/opsys2020/004.8pointers-cast
-
fork, wait, execve: libro Kerrisk, pag. 513-515completare analisi dell'esempio https://github.com/marcotessarotto/exOpSys/tree/opsys2020/004.8pointers-cast
-
sto preparando degli esercizi di preparazione alla provetta, seguite le istruzioni su come sottoporre la vostra soluzione
per risolvere alcuni esercizi, vi serviranno delle funzioni che vedremo nella lezione di oggi.
stringhe di caratteri:
https://github.com/marcotessarotto/exOpSys/tree/opsys2020/012printargs
https://github.com/marcotessarotto/exOpSys/tree/opsys2020/013strings
https://github.com/marcotessarotto/exOpSys/tree/opsys2020/006.2string-operations
https://github.com/marcotessarotto/exOpSys/tree/opsys2020/006.4string-tokenize
-
test su moodle2 (vedere link qua sotto "Esercitazione pre provetta")
orario provetta: 17:00-20:00
-
quattordici domande in tutto, di cui:
- una domanda di teoria a risposta libera
- due esercizi di programmazione, uno piccolo ed uno un po' meno piccolo
-
-
risposte a quesiti di teoria degli studenti
rivisitazione di alcuni aspetti su variabili, puntatori, segnali (pdf allegato alla lezione di oggi)
https://repl.it/@MarcoTessarotto/esempio-calloc-realloc-free
https://repl.it/@MarcoTessarotto/ksplice-pointer-challenge
esercitazioni per la prima provetta:
per chi non lo ha ancora fatto:
chiedo a tutti gli studenti che intendono sostenere le due provette di iscriversi su Microsoft Teams al team "080IN - SISTEMI OPERATIVI 2019".
-
Useremo moodle2 per fare la provetta.
orario provetta: 15:00 - 18:00Chiedo a tutti gli studenti che intendono sostenere le due provette di iscriversi su Microsoft Teams al team "080IN - SISTEMI OPERATIVI 2019".
Per la parte pratica della provetta, potrebbe esservi utile questo esempio: -
system call open, read, write, close: Kerrisk pag. 69-87mostrare i parametri a linea di comando: https://repl.it/@MarcoTessarotto/mainargumentsopen(): libro Kerrisk pag. 72-77read(): libro Kerrisk pag. 79leggere files, esempio https://github.com/marcotessarotto/exOpSys/tree/opsys2020/005.7readfilewrite(): libro Kerrisk pag. 80scrivere files, esempio https://github.com/marcotessarotto/exOpSys/tree/opsys2020/005.8writefileinotify_init(), inotify_add_watch(): libro Kerrisk pag. 375-380monitorare eventi sul file system"risolvere" percorsi di file
-
esercizio per casa:altro esercizio per casa:stat(): libro Kerrisk pag. 279-286ottenere informazioni su file, controllare se un file è una directorypermessi dei file: libro Kerrisk pag. 294-297ftruncate: libro Kerrisk pag. 103esempio su come impostare la dimensione di un filelseek: libro Kerrisk pag. 81esempio su lseekappend, libro Kerrisk pag.92esempio su appenddup2, libero Kerrisk pag. 97esempio su dup2()pipe: libro Kerrisk, pag. 889-897esempio su pipe()risultati provetta: sono a buon punto con la correzione ma sono stato anche preso da altre attività urgenti. pubblicherò su moodle2 i risultati della prima provetta nei prossimi giorni.per chi è interessato: eventuali approfondimenti sull'esempio 006.3signals4ipc (che tecnicamente è più complesso rispetto alla media degli esempi) li rimando a colloqui individuali o di gruppo tramite MS Teams
-
ripetizione: system call fork(), wait(), exit(), execve() (Kerrisk pag. 513),signal SIGCHLD,Kerrisk cap. 25 (pag. 531): Process terminationterminazione normale ed anormale di un processo (pag. 533)25.2 Details of process terminationKerrisk cap. 26 (pag. 541): Monitoring child processessystem call wait(): pag. 542system call waitpid(): pag. 54426.1.4: Process termination from a signal handler, pag. 54926.2: Orphans and Zombies26.3: The SIGCHLD signal, pag. 55524.2.1 File sharing between parent and child, pag. 5175.4 Relationship between file descriptors and open files, pag. 94-95per process file descriptor tablesystem wide, open file descriptionsfile system i-node tablesystem call dup(), dup2(), pag. 965.6 File I/O at specified offset: pread() and pwrite(), pag. 98
-
libro Kerrisk: sezione 6.1, 6.2, 6.3, 6.4: pag. 113-121memoria virtuale; principio di località, page, page frame, physical memory, resident set, swap area, page fault, virtual address space,ELF file format, text segment, initialized data segment, uninitialized data segment (bss), heap, memory mapping segment, stack segment.system call mmap, munmap: Kerrisk pag. 1017
-
variabili statiche interne: esempio https://repl.it/@MarcoTessarotto/static-variablesesempio con operatori . e -> : https://repl.it/@MarcoTessarotto/struct-accessLittle book of semaphores: syncronization, execution model, serialization with messages, non-determinism, shared variables: concurrent writes, concurrent updates, mutual exclusion with messages. Semaphores: definition.esempio di sincronizzazione sbagliata: https://repl.it/@MarcoTessarotto/counter2proc
-
elenca i files in una directory: esempio https://github.com/marcotessarotto/exOpSys/tree/opsys2020/023listFilesPOSIX semaphores: sem_open, sem_unlink, sem_wait, sem_post, sem_init, sem_destroy : libro Kerrisk pag. 1089-1103esempio di sincronizzazione tra processi tramite segnalazione con semaforo: https://github.com/marcotessarotto/exOpSys/tree/opsys2020/007.07.1proc-sync-signalingesempio di sincronizzazione tra due processi tramite rendezvous: https://github.com/marcotessarotto/exOpSys/tree/opsys2020/007.07.2proc-rendezvousesempio di accessi concorrenti ad una variabile condivisa gestiti attraverso mutex (mutual exclusion): https://github.com/marcotessarotto/exOpSys/tree/opsys2020/007.07mmap-semesempio https://github.com/marcotessarotto/exOpSys/tree/opsys2020/031fork_semaphore con POSIX semaphoresesercizi per casa:
-
esercizio: https://repl.it/@MarcoTessarotto/fork-counterPOSIX threads (Pthreads): Kerrisk, cap. 29: pag. 617-620Pthreads data types: pthread_t, pthread_mutex_t, pthread_cond_t... : pag. 620Pthreads e errnovalori di ritorno dei Pthreads: pag. 621pthread_create(), pag. 622pthread_exit(): pag. 623pthread_self(): pag. 624pthread_equal()pthread_join(): pag. 625pthread_detach(): pag. 627Threads vs processes: pag. 629Pthread mutex: pthread_mutex_t, pag. 635pthread_mutex_lock(), pthread_mutex_unlock()
-
esercizi:svolgimento in classe:
-
svolgimento in classe:
https://github.com/marcotessarotto/esercizio-C-2020-05-12-proc-pipe-mmap
https://github.com/marcotessarotto/esercizio-C-2020-05-08-largest-file
esercizi per casa:
https://github.com/marcotessarotto/esercizio-2020-05-22-ping-pong
https://github.com/marcotessarotto/esercizio-2020-05-23-thread-string
https://github.com/marcotessarotto/esercizio-C-2020-05-24-char-freq-thread
https://github.com/marcotessarotto/esercizio-C-2020-05-25-proc-sem-file
-
****
la lezione si terrà in modalità teledidattica : https://www.twitch.tv/marcotts/ (orari: 15:00-18:00)
per fare domande durante la lezione:
usate la chat testuale di twitch oppure potete usare discord per comunicazioni audio https://discord.gg/Kqz3k6N
****Useremo moodle2 per fare la provetta.
orario provetta: 15:00 - 18:00Chiedo a tutti gli studenti che intendono sostenere le due provette di iscriversi su Microsoft Teams al team "080IN - SISTEMI OPERATIVI 2019".
I risultati finali verranno pubblicati qui nel giro di qualche giorno.Una volta pubblicati i risultati, aprirò un appello riservato a chi ha superato le provette: sarà sufficente iscriversi per avere l'esame registrato.