20801961 - SISTEMI OPERATIVI

Fornire (1) competenze sulla struttura di un generico sistema operativo moderno, (2) competenze sulla struttura di un sistema operativo Unix con particolare riferimento al sistema Linux, (3) conoscenza delle particolari metodologie usate per risolvere le problematiche tipiche della gestione delle risorse in un sistema operativo moderno, (4) abilità nel usare e una piattaforma Unix a livello utente, (5) abilità nella programmabilità di un sistema Unix (scripting), (6) abilità di base nella programmazione di sistema.
scheda docente | materiale didattico

Programma

- Computer Architecture, CPU, Registry, execution, interrupt, memory hierarchy, I/O, procedure
- Panoramica sui sistemi operativi moderni: definizione di sistema operativo, scopi, architettura a strati, kernel/user mode, caratteristiche salienti
processi: dispatching, stati, descrizione e controllo, modelli tipici di sistemi operativi e di uso della memoria nei processi
- tecniche di gestione della memoria centrale: allocatori di memoria, partitioning, best/first/next fit, buddy algorithm, paging, segmentation
- Memoria virtuale. (parte del materiale è solo su slides),
- Generalità: process address space, page fault, trashing, policies: fetch cleaning eviction placement, page buffering, load control, disk caching, memory mapped files.
- Hw support: paginazione, page tables a più livelli, inverted page tables, modelli MAS e SAS, TLB, considerazioni sulla grandezza delle pagine, segmentazione, segmentazione paginata
- Resident set management: OPT, LRU, FIFO, CLOCK, CLOCK con bit di modifica, Aging.
- Working set: definizione, comportamento in transitorio, relazione con LRU, approssimazione mediante PFF.
- Scheduling a breve medio e lungo termine, algoritmi per cpu scheduling: FCFS, RR, VRR, SPN, SRT, FB, comparazioni, linux 2.6
- Disk Scheduling, RAID (materiale solo su slides)
- UNIX File Management, inode, Linux VFS, ext2

-gestione dei processi in linguaggio C

- introduzione a linux
- documentazione in linea (man, info, less), organizzazione del filesystem, primi comandi (ls, pwd, cd, cat).
- la shell: bash, prompt, comandi interni ed esterni, help, variabili di abiente, env, $PATH, export;
- comandi per la gestione di file e directory: touch, mv, rm, cp, mkdir, rmdir
- editors e ambienti grafici: vi, emacs, X, window manager, gnome, kde, kwrite, gedit
- linux: shell, ambiente, filtri, piping
- Linux e shell: i processi, gli stati sleeping ready/running e stopped, terminali di controllo, standard input, output, error, I/O, redirection, ps, top, pstree, ^C, ^Z, processi in background, bg, fg, &, kill, kill -9, segnali
- linux: espressioni regolari e grep, sed, stdin, stdout, stderr, redirection (,,, 2), esecuzione in background (&), and (&&), or (||), time, alias, du, df, g(un)zip, b(un)zip, (un)lzma, tar
- Scripting e awk (patterns, statements, costrutti per il controllo di flusso, variabili, array, $0..$n, FS, RS, NR, NF, esempi d'uso).
- linux filesystem: mount, stat, ln
- Debugger: gdb stepping, breakpoints, watching, backtrace. Comandi gdb: r, quit, b, info br, help, l, n, s, dis, del, bt, frame, c, ignore, cond, p, display.

- virtualizzazione di servizi: Docker
- Docker Run
- Terminology -2.0 Webapps with Docker
- Docker Images
- Dockerfile
- Docker on AWS -3.0 Multi-container Environments
- Docker Network
- Docker Compose

Testi Adottati

Il corso è in parte basato sul testo

W. Stallings, "Operating Systems: Internals and Design Principles", 6th edition. Prentice Hall.

Tuttavia alcuni argomenti sono trattati solo sulle slide linkate nel programma del corso. Per le parti pratiche non vi sono testi di riferimento e si presume che lo studente segua le lezioni ma la seguente documentazione può essere molto utile.

Documentazione on-line dei comandi Unix/Linux installati nel sistema stesso.
M. Cooper - Advanced Bash-Scripting Guide
Uno qualsiasi dei Tutorial per Awk
Uno qualsiasi dei Tutorial per Programmazione in Linguaggio C

Modalità Valutazione

Nel periodo di emergenza COVID-19 l’esame di profitto sarà svolto secondo quanto previsto all’art.1 del Decreto Rettorale n°. 703 del 5 maggio 2020. E' prevista una prima prova scritta che sarà svolta sul portale di Moodle e richiederà la risoluzione di 3 esercizi di codifica. Tale prova ha una valenza di pura indagine dell'acquisizione dei livelli minimi per i concetti e le competenze richieste. A seguire ci sarà la principale prova orale che sarà determinante per l’attribuzione della valutazione finale.