wiki:WikiStart

Version 49 (modified by monga, 9 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 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?