LiiS:CorsiSOI
Da Wikipedia, l'enciclopedia libera.
Sistemi Operativi
Anno: II Periodo: secondo Crediti Formativi Universitari: 9 Corso di Laurea: Ingegneria dell'Informazione
Docente
Prof. Franco Tommasi
Obiettivi del corso
Introdurre ai concetti alla base dei sistemi operativi moderni attraverso lo studio di un caso reale. Il sistema operativo prescelto allo scopo è UNIX, nelle sue varianti Linux e FreeBSD (MacOS X): di esse sono illustrate caratteristiche, affinità e particolarità. Il sistema viene approfondito dal punto di vista dell'utenza e da quello della programmazione a livello utente (shell scripting). Sempre privilegiando un approccio pratico (durante lo svolgimento delle lezioni gli studenti hanno accesso a delle macchine UNIX sulle quali sono incoraggiati a sperimentare di persona quanto esposto), sono illustrate e approfondite alcune tra le principali astrazioni alla base del sistema (processi, file system e permessi, memoria virtuale, shell).
Requisiti
Conoscenza pratica di un qualunque linguaggio di programmazione (preferibilmente il linguaggio C). Nessuna propedeuticità.
Programma
Argomenti trattati:
Il File System UNIX (la sua organizzazione interna e la disposizione dei file tipica di ciascuna variante)
Il sistema dei privilegi in UNIX (significato dei privilegi per files e directory) SUID bit, SGID bit, Sticky bit
I tipi di file
Le named pipe
I processi (creazione, identificazione, distruzione, relazioni, monitoraggio, gestione)
Lo spazio di memoria di un processo
Memoria virtuale (uso dello spazio virtuale da parte di un processo e strumenti di monitoraggio)
Affinità, interoperabilità e compatibilità tra Linux, MacOS X e FreeBSD
MacOS X come client per l'accesso a un server Linux
L'editor TextWrangler
L'applicazione Terminale
Il montaggio di volumi di rete ospitati da un server Linux sulla scrivania di MacOS X
Il programma gcc: compilazione e linking di programmi in C
Il comando make e la sintassi del Makefile
Librerie statiche e dinamiche (significato, costruzione, istallazione, utilizzo, collocazione nello spazio di memoria del processo)
Il debugger gdb
Il comando grep e le espressioni regolari
Introduzione ai Segnali
Le distribuzioni Linux
Comandi utente presentati nel corso:
apropos, bc, cat, chmod, cksum, comm, cp, curl, cut, date, dd, dig, echo, false, file, find, free, gcc, grep, gunzip, gzip head, hexdump, iconv, ifconfig, info, jot, kill, ldd, less, ln, ls, lsof, lynx, make, man, manpath, md5sum, mkdir, mkfifo, more, mv, passwd, paste, ping, printf, ps, pwd, rev, rm, rmdir, rs, sleep, sort, ssh, stat, strings, stty, tac, tail, tar, tee, test, top, touch, tr, true, uniq, wc, who.
Bash:
Tipi di invocazione e opzioni, File di configurazione, Metacaratteri per i filename, Quoting, Modi per
dare i comandi e combinarli (&;!|``), Standard Input e Output, Ridirezione, Job control, Variabili, Sintassi per command
substitution $(...), Sintassi per espressioni aritmetiche $((...)), Variabili built-in, Modifica del prompt, History, Priorita' nell'espansione della linea di comando, La programmazione Bash, Il passaggio di parametri agli script, Cicli ed espressioni condizionali, Aritmetica, Arrays, Funzioni, Gestione dei segnali e trap, Il passaggio dell'environment ad un comando, espansione dei parametri, costrutto "a=100 script" per passare un valore d'ambiente allo script.
Comandi built-in di Bash presentati nel corso:
#, #!, alias, bg, break, case, cd, echo, enable, eval, exec, exit, export, fg, for, getopts, history, if, jobs, kill, let, pwd, read, return, select, set, source (.), test, time, times, trap, type, umask, while.
Inoltre su Linux:
Il file system /proc
cat /proc/<pid>/maps
vmstat
e su Mac OS X:
otool -L e otool -tv, open, say, screencapture, system_profile, sysctl, pbcopy, pbpaste, vm_stat
mdfind (vedi http://macdevcenter.com/pub/a/mac/2006/01/04/mdfind.html)
Si fa infine presente che dei seguenti comandi è dimostrato un uso minimale senza approfondire troppo i manuali, in alcuni casi piuttosto corposi:
comm
dd
curl
dig
ifconfig
lsof -p <pid>
gcc
gdb
make
rs
vmmap <pid>
vm_stat
Testi consigliati per la preparazione dell'esame
Sugli argomenti trattati dal corso è disponibile un gran quantità di testi liberamente consultabili o scaricabili dalla rete. A titolo di riferimento (per il livello della trattazione e gli argomenti) si possono citare i testi (in larghissima parte identici): Learning the UNIX Operating System; Learning Red Hat Enterprise Linux and Fedora; Learning Unix for Mac OS X Tiger. Inoltre sono strettamente attinenti al contenuto del corso i testi: Unix in a Nutshell; Linux in a nutshell; Learning the bash Shell, Unix Shell Programming. Oltre alla documentazione on-line su ogni macchina UNIX (pagine man e info, della cui consultazione si richiede perfetta padronanza) si suggerisce la consultazione del testo, gratuitamente disponibile in rete, Advanced Bash Scripting Guide.
Documenti relativi al corso
Queste slide contengono materiale utilizzato per l'introduzione al corso: Presentazione Sistemi Operativi I
Modalita' d'esame
Svolgimento pratico di alcuni esercizi al computer (a seconda dei casi, puo' essere richiesto un colloquio addizionale).
Fin dal primo esame svolto si scelto di agire come segue: durante il compito è possibile consultare propri testi, utilizzare supporti di memorizzazione propri (pendrive, CD ecc.) e consultare Internet (tranne, ovviamente, che per comunicare con altri).
L'abilità che si chiede di maturare non è, infatti, quella di memorizzare pagine di manuale! Si richiede invece la capacità di recuperare dai più diffusi canali le informazioni necessarie e di interpretarle correttamente.
Ecco alcuni testi di precedenti prove di esame
Link relativi alla lezione introduttiva del corso di Sistemi Operativi I (Anno Accademico 2007-2008)
http://www.top500.org/stats/list/30/osfam il database, aggiornato ogni sei mesi, dei computer più veloci del mondo
http://www.securityoffice.net/mssecrets/hotmail.html il famoso Hallowen document, il confronto tra UNIX e Windows fatto dagli ingegneri Microsoft (vedi anche Wikipedia in inglese sull'argomento)
http://www.kernel.org The Linux Kernel Archives
http://lxr.linux.no/ Un repositorio nel quale è possibile esplorare i kernel di diversi sistemi UNIX (es. Linux e Darwin) in maniera ipertestuale
http://www.tldp.org/ The Linux Documentation Project
http://developer.apple.com/darwin/ I sorgenti di Darwin (lo UNIX "sotto" Mac OS X) liberamente scaricabili
http://punto-informatico.it/p.aspx?i=2066523 La multa dell'UE alla Microsoft
http://www.comune.pisa.it/supp-istituzionale/Circolari/Dir19-12-2003pcm-InnTec.htm La "direttiva Stanca" sui programmi a sorgente aperto nella Pubblica Amministrazione
http://marketshare.hitslink.com/report.aspx?qprid=9 Statistiche sull'utilizzo reale dei vari sistemi operativi, browsers, motori di ricerca
http://www.w3schools.com/browsers/browsers_stats.asp Un altro sito di statistiche
http://jeremy.linuxquestions.org/2008/01/11/is-apple-killing-linux-on-the-desktop/ Un'analisi che concorda con le opinioni che ormai da diversi anni va esprimendo il titolare di questo corso
http://www.levenez.com/unix/ L'albero genealogico di UNIX
Un altro albero genealogico di UNIX
http://www.isinet.it/~marco/unix/index.shtml Una guida introduttiva a UNIX
http://www.freebsd.org/doc/it_IT.ISO8859-15/books/handbook/index.html Documentazione su FreeBSD
http://it.tldp.org/guide/GuidaUtente/index.html Una guida a Linux
http://it.tldp.org/guide/abs/ Una guida a bash
Link utili per il corso di Sistemi Operativi I (Anno Accademico 2007-2008)
The Open Group Base Specifications Issue 6 Il manuale delle Single UNIX Specification '03
