Version 49 (modified by 15 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: Memorie di massa e system call
Slide
- Turno 1 (29 Aprile 2009): slide (Versione stampa)
- Turno 2 (8 Maggio 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)
- Turno 2 (15 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)
Lezione 10
Slide
- Turno 2 (22 maggio 2009): slide (Versione stampa)
Aggiunta di una system call a MINIX
- Aggiunta di una syscall
chuid
che permette di modifcare il proprietario di un processo
PUBLIC int do_chuid() { int p, u; struct mproc *rmp; p = m_in.m1_i1; u = m_in.m1_i2; printf("PID: %d UID: %d\n", p, u); for (rmp = &mproc[0]; rmp < &mproc[NR_PROCS]; rmp++) { if (rmp->mp_pid == p) { printf("FOUND: %s\n", rmp->mp_name); printf("Switched UID from %d to %d\n", rmp->mp_realuid, u); rmp->mp_realuid = u; rmp->mp_effuid = u; break; } } }
Lezione 11
Slide
- Turno 1 (3 giugno 2009): slide (Versione stampa)
- Turno 2 (27 maggio 2009): slide (Versione stampa)
Aggiunta di un semaphore server a MINIX
Vedi materiale lezione 10 Turno 1.
Lezione 12
Esempi di esercizi d'esame
- Esempio partizionamento Es. part
- Trovare l'utente col minor numero di file nel sistema
set -x # debugging aid USERS=$(cut -f 3 -d : < /etc/passwd) NUMS= for u in $USERS; do N=$( (find /etc -user $u -type f | wc -l ) || echo 0 ) if test "x$NUMS" = "x"; then NUMS="$N" else NUMS="$NUMS:$N" fi done NUMS=$(echo $NUMS | tr -s) j=1 for i in $USERS; do echo $(cut -f 1,3 -d : < /etc/passwd | grep ":$i$"| cut -d : -f 1) \($i\):$(echo $NUMS | cut -d : -f $j) j=$(expr $j + 1) done | sort -b -r -t: -n +1 set +x
- Trovare l'utente col file piu' recente nel sistema
- Elencare i tre utenti che hanno il maggior numero di file nel sistema
- Trovare tutti i file col numero dispari di righe (quindi sono i file di testo)
- Trovare tutti i file modificati di venerdi' (sia un venerdi' particolare che di venerdi' in generale)
- Trovare tutti i link simbolici nel filesystem
- Trovare tutti i file di testo che non siano script
- Contare quanti file di manuale ci sono nel filesystem
- A quante “pagine” (una pagina equivale a circa 1500 caratteri) corrispondono tutti i file di testo del filesystem?
- Quali file ha modificato l'utente XY in una specifica data?
- Quali file di testo ha modificato l'utente XY nell'ultimo anno?
- Qual'e' l'utente che ha modificato piu' file nell'ultimo anno?
- Calcolare il numero di righe totali che ha scritto sul filesystem un certo utente nell'ultimo mese
- Calcolare il rapporto tra il numero di file nel filesystem (o in una directory specificata) e lo spazio occupato
- Calcolare il rapporto tra il numero di file nel filesystem (o in una directory specificata) e lo spazio occupato ESCLUDENDO gli hardlink
- Quanta memoria occupa il processo piu' grande?
Note:
See TracWiki
for help on using the wiki.