Version 42 (modified by 16 years ago) ( diff ) | ,
---|
Laboratorio di Sistemi Operativi
Lezione 1: Introduzione
Slide
- Turno 1 (4 Marzo 2009): slide (Versione stampa)
- Turno 2 (6 Marzo 2009): slide (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)
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
- NASM
- PC Assembly Language, by Paul A. Carter
- Manuali Intel
- QEmu
- Immagine Qemu MINIX 3.1.2a con Vim, ssh, ecc.
Lezione 2
Slide
- Turno 1 (11 Marzo 2009): slide (Versione stampa)
- Turno 2 (13 Marzo 2009): slide (Versione stampa)
Esercizi
fork
- un programma che "forca" un nuovo processo export:trunk/fork.c IncludeSource(trunk/fork.c, line_numbers=0)
Esecuzione in sequenza e parallelo
- programma di prova export:trunk/hello.c IncludeSource(trunk/hello.c, line_numbers=0)
# In sequenza ./hello ; ./hello # In parallelo ./hello & ./hello echo $?
Cosa fa?
/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!
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
for i in dog cat fish; do if ls /bin/$i; then echo Trovato $i; else echo $i non trovato; fi; done
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
- Vi cheat sheet
- VIM: Scheda di riferimento rapido
- Immagine Qemu MINIX 3.1.2a con Vim, ssh, ecc.
- BASH Programming -- Intoduction HOWTO
- Guida avanzata di scripting BASH
Lezione 3
Slide
- Turno 1 (18 Marzo 2009): slide (Versione stampa)
- Turno 2 (20 Marzo 2009): slide (Versione stampa)
Materiale
- 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
Lezione 4
Slide
- Turno 1 (25 Marzo 2009): slide (Versione stampa)
- Turno 2 (23 Marzo 2009): slide (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)
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)
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): slide (Versione stampa)
Concorrenza
- Turno 2 (3 Aprile 2009): slide (Versione stampa)
Programmi
Vedi Lezione 4 -- Turno 1
Lezione 6
Slide
Assembly, primi esperimenti col kernel
- Turno 1 (8 Aprile 2009): slide (Versione stampa)
Permessi, Make e primi esperimenti con il kernel
- Turno 2 (17 Aprile 2009): slide (Versione stampa)
Altro materiale
Lezione 7
Slide
Memorie di massa
- Turno 1 (22 Aprile 2009): slide (Versione stampa)
System e kernel call
- Turno 2 (24 Aprile 2009): slide (Versione stampa)
Lezione 8
Slide
- Turno 1 (29 Aprile 2009): slide (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): slide (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
- Articolo di riferimento
- Aggiunta di un server semaforo (singolo) diff:tags/minix-3.1.2a//tags/server-add-single-semaphore IncludeSource(tags/server-add-single-semaphore/test/testsema.c, line_numbers=0)
Note:
See TracWiki
for help on using the wiki.