wiki:WikiStart

Version 47 (modified by lorenzo, 10 years ago) (diff)

--

Laboratorio di Sistemi Operativi

TOC(noheading)?

Lezione 1: Introduzione

Slide

Programmi

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 
gcc -o exec exec.c
echo -ne "\xB8\x11\x22\x33\x44" | ./exec
echo -n "ciao" | ./exec
...

Lezione 2

Slide

Esercizi

fork

Esecuzione in sequenza e parallelo

# 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

Lezione 3

Slide

Materiale

Esercizi online con la shell

Lezione 4

Slide

Programmi

Esempi con la syscall clone, specifica di Linux

nasm -felf enter.asm
cc threads-tsl.c enter.o -o threads-tsl

cc -o threads-sem threads-sem.c -lrt

Esempi in Java

Lezione 5

Slide

find, archivi, segnali

Concorrenza

Programmi

Vedi Lezione 4 -- Turno 1

Lezione 6

Slide

Assembly, primi esperimenti col kernel

Permessi, Make e primi esperimenti con il kernel

Altro materiale

Lezione 7

Slide

Memorie di massa

System e kernel call

Lezione 8: Memorie di massa e system call

Slide

Aggiunta di una system call a MINIX

Lezione 9

Slide

Aggiunta di una system call a MINIX

Aggiunta di un server

Lezione 10

Slide

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

Aggiunta di un semaphore server a MINIX

Vedi matreriale lezione 10 Turno 1.