= Laboratorio di Sistemi Operativi = [[TOC(noheading)]] == Lezione 1: Introduzione == === Slide === * '''Turno 1 (4 Marzo 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab01.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab01-handout.pdf Versione stampa]) * '''Turno 2 (6 Marzo 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab01b.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab01b-handout.pdf Versione stampa]) === Programmi === * Accesso diretto alla macchina fisica export:trunk/mioboot-nobios-simple.asm [[IncludeSource(trunk/mioboot-nobios-simple.asm, line_numbers=0)]] * Uso dei servizi del BIOS export:trunk/mioboot.asm [[IncludeSource(trunk/mioboot.asm, line_numbers=0)]] {{{ #!sh nasm -l mioboot.lst -o mioboot.img mioboot.asm qemu mioboot.img # con qemu -d in_asm potete vedere (in /tmp/qemu.log) il codice eseguito dalla macchina virtuale: per la maggior parte istruzioni del BIOS }}} * Programma che esegue il codice letto da standard input export:trunk/exec.c [[IncludeSource(trunk/exec.c, line_numbers=0)]] {{{ gcc -o exec exec.c echo -ne "\xB8\x11\x22\x33\x44" | ./exec echo -n "ciao" | ./exec ... }}} === Link === * [http://nasm.sourceforge.org NASM ] * [http://www.drpaulcarter.com/pcasm/ PC Assembly Language, by Paul A. Carter] * [http://www.intel.com/products/processor/manuals/ Manuali Intel] * [http://fabrice.bellard.free.fr/qemu_0.10.0-1_i386.deb QEmu] * [http://homes.dico.unimi.it/sisop/qemu-0.9.0-win32.zip QEmu 0.9.0 per windows] * [http://www.coresystems.de/%7Epatrick/qemu-0.10.0-bin.zip QEmu 0.10.1 per Windows] * [http://homes.dico.unimi.it/sisop/qemu_0.10.0-1_i386.deb QEmu 0.10.1 per Linux (Debian & Ubuntu)] * [http://www.puredarwin.org/downloads/qemu-0.10.1.dmg QEmu 0.10.1 per Mac OS X] * [http://homes.dico.unimi.it/~sisop/qemu/minix3-full.qcow Immagine Qemu MINIX 3.1.2a con Vim, ssh, ecc.] ---- == Lezione 2 == === Slide === * '''Turno 1 (11 Marzo 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab02.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab02-handout.pdf Versione stampa]) * '''Turno 2 (13 Marzo 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab02b.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab02b-handout.pdf Versione stampa]) === Esercizi === ==== {{{fork}}} ==== * un programma che "forca" un nuovo processo export:trunk/fork.c [[IncludeSource(trunk/fork.c, line_numbers=0)]] * exit status export:trunk/exit.c [[IncludeSource(trunk/exit.c, line_numbers=0)]] ==== Esecuzione in sequenza e parallelo ==== * programma di prova export:trunk/hello.c [[IncludeSource(trunk/hello.c, line_numbers=0)]] {{{ #!sh # In sequenza ./hello ; ./hello # In parallelo ./hello & ./hello echo $? }}} ==== Cosa fa? ==== {{{ #!sh /usr/bin/touch piripacchio while /bin/ls piripacchio; do /usr/bin/sleep 2 /bin/echo ciao done & ( /usr/bin/sleep 10 ; /bin/rm piripacchio ) }}} Consultate il manuale! {{{ #!sh man man man touch man ls man 1 sleep # man 3 sleep รจ il manuale della funzione della libreria C man echo man rm }}} ==== Uso del {{{for}}} e {{{if}}} ==== {{{ #!sh for i in dog cat fish; do if ls /bin/$i; then echo Trovato $i; else echo $i non trovato; fi; done }}} {{{ #!sh man test for i in dog cat fish; do if test -f /bin/$i; then echo Trovato $i; else echo $i non trovato; fi; done }}} === Link === * [http://jrmiii.com/attachments/Vim.pdf Vi cheat sheet] * [http://tnerual.eriogerg.free.fr/vimqrc-it.pdf VIM: Scheda di riferimento rapido] * [http://homes.dico.unimi.it/~sisop/qemu/minix3-full.qcow Immagine Qemu MINIX 3.1.2a con Vim, ssh, ecc.] * [http://www.pluto.it/files/ildp/HOWTO/Bash-Prog-Intro-HOWTO/Bash-Prog-Intro-HOWTO.html BASH Programming -- Intoduction HOWTO] * [http://www.pluto.it/files/ildp/guide/abs/index.html Guida avanzata di scripting BASH] == Lezione 3 == === Slide === * '''Turno 1 (18 Marzo 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab03.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab03-handout.pdf Versione stampa]) * '''Turno 2 (20 Marzo 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab03b.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab03b-handout.pdf Versione stampa]) === Materiale === * [UnixShell UNIX Shell: kit di sopravvivenza (in aggiornamento)] * scrive su stdout(1) gli argomenti ricevuti sulla riga di comando export:trunk/stdout.c [[IncludeSource(trunk/stdout.c, line_numbers=0)]] * scrive su stdout(1)e stderr (2) gli argomenti ricevuti sulla riga di comando export:trunk/stdouterr.c [[IncludeSource(trunk/stdouterr.c, line_numbers=0)]] === Esercizi online con la shell === * [http://idea.sec.dico.unimi.it/~lorenzo/SisOp0809/ Esercizi online] == Lezione 4 == === Slide === * '''Turno 1 (25 Marzo 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab04.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab04-handout.pdf Versione stampa]) * '''Turno 2 (23 Marzo 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab04b.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab04b-handout.pdf Versione stampa]) === Programmi === ==== Esempi con la syscall `clone`, specifica di Linux ==== * Thread '''senza''' memoria condivisa export:trunk/threads-isolated.c [[IncludeSource(trunk/threads-isolated.c, line_numbers=0)]] * Thread '''con''' memoria condivisa export:trunk/threads-shared.c [[IncludeSource(trunk/threads-shared.c, line_numbers=0)]] * Thread '''con''' memoria condivisa, mutua esclusione ottenuta con Peterson export:trunk/threads-peterson.c [[IncludeSource(trunk/threads-peterson.c, line_numbers=0)]] * Thread '''con''' memoria condivisa, mutua esclusione con TSL export:trunk/threads-tsl.c export:trunk/enter.asm [[IncludeSource(trunk/threads-tsl.c, line_numbers=0)]] [[IncludeSource(trunk/enter.asm, line_numbers=0)]] {{{ #!sh nasm -felf enter.asm cc threads-tsl.c enter.o -o threads-tsl }}} * Thread '''con''' memoria condivisa, mutua esclusione ottenuta con semaforo export:trunk/threads-sem.c [[IncludeSource(trunk/threads-sem.c, line_numbers=0)]] {{{ #!sh cc -o threads-sem threads-sem.c -lrt }}} ==== Esempi in Java ==== * Creazione di thread export:trunk/Basic.java [[IncludeSource(trunk/Basic.java, line_numbers=0)]] * Memoria condivisa export:trunk/Shared.java [[IncludeSource(trunk/Shared.java, line_numbers=0)]] * Memoria condivisa, mutua esclusione ottenuta con `synchronized`, export:trunk/Shared2.java [[IncludeSource(trunk/Shared2.java, line_numbers=0)]] * Produttore e consumatore, export:trunk/PC.java [[IncludeSource(trunk/PC.java, line_numbers=0)]] * Produttore e consumatore con semafori export:trunk/PCSem.java [[IncludeSource(trunk/PCSem.java, line_numbers=0)]] * Produttore e consumatore con monitor export:trunk/PCMon.java [[IncludeSource(trunk/PCMon.java, line_numbers=0)]] == Lezione 5 == === Slide === ==== find, archivi, segnali ==== * '''Turno 1 (1 Aprile 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab05.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab05-handout.pdf Versione stampa]) ==== Concorrenza ==== * '''Turno 2 (3 Aprile 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab05b.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab05b-handout.pdf Versione stampa]) === Programmi === Vedi Lezione 4 -- Turno 1 == Lezione 6 == === Slide === ==== Assembly, primi esperimenti col kernel ==== * '''Turno 1 (8 Aprile 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab06.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab06-handout.pdf Versione stampa]) ==== Permessi, Make e primi esperimenti con il kernel ==== * '''Turno 2 (17 Aprile 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab06b.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab06b-handout.pdf Versione stampa]) === Altro materiale === * [http://a2.pluto.it/introduzione_al_linguaggio_c.htm Introduzione al linguaggio C] == Lezione 7 == === Slide === ==== Memorie di massa ==== * '''Turno 1 (22 Aprile 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab07.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab07-handout.pdf Versione stampa]) ==== System e kernel call ==== * '''Turno 2 (24 Aprile 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab07b.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab07b-handout.pdf Versione stampa]) * export:trunk/mykill.c [[IncludeSource(trunk/mykill.c, line_numbers=0)]] * export:trunk/mykill-raw1.c [[IncludeSource(trunk/mykill-raw1.c, line_numbers=0)]] * export:trunk/mykill-raw2.c [[IncludeSource(trunk/mykill-raw2.c, line_numbers=0)]] == Lezione 8 == === Slide === * '''Turno 1 (29 Aprile 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab08.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab08-handout.pdf Versione stampa]) ==== Aggiunta di una system call a MINIX ==== * aggiunta della syscall {{{foo}}} diff:tags/minix-3.1.2a//tags/syscall-add-simple-foo [[IncludeSource(tags/syscall-add-simple-foo/test/testfoo.c, line_numbers=0)]] * aggiunta della syscall {{{foo}}} con un parametro intero diff:tags/syscall-add-simple-foo//tags/syscall-add-foo-with-arg [[IncludeSource(tags/syscall-add-foo-with-arg/test/testfoo.c, line_numbers=0)]] == Lezione 9 == === Slide === * '''Turno 1 (13 maggio 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab09.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab09-handout.pdf Versione stampa]) ==== Aggiunta di una system call a MINIX ==== * aggiunta della syscall {{{foo}}} che stampa processi ready diff:tags/syscall-add-foo-with-arg//tags/syscall-add-foo-print-ready [[IncludeSource(tags/syscall-add-foo-print-ready/test/testfoo.c, line_numbers=0)]] === Aggiunta di un server === * server "semaforo"