Changes between Version 49 and Version 50 of WikiStart


Ignore:
Timestamp:
Mar 1, 2010, 2:45:05 PM (14 years ago)
Author:
Mattia Monga
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • WikiStart

    v49 v50  
    11= Laboratorio di Sistemi Operativi =
    22
    3 [[TOC(noheading)]]
     3 * [wiki:MaterialeVecchio Materiale 2008/2009]
    44
    5 == Lezione 1: Introduzione ==
    6 
    7 === Slide ===
    8 
    9  * '''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])
    10  * '''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])
    11 
    12 
    13 === Programmi ===
    14 
    15  * Accesso diretto alla macchina fisica export:trunk/mioboot-nobios-simple.asm
    16    [[IncludeSource(trunk/mioboot-nobios-simple.asm, line_numbers=0)]]
    17 
    18  * Uso dei servizi del BIOS export:trunk/mioboot.asm
    19    [[IncludeSource(trunk/mioboot.asm, line_numbers=0)]]
    20 
    21 {{{
    22 #!sh
    23 nasm -l mioboot.lst -o mioboot.img mioboot.asm
    24 qemu mioboot.img
    25 # con qemu -d in_asm potete vedere (in /tmp/qemu.log) il codice eseguito dalla macchina virtuale: per la maggior parte istruzioni del BIOS
    26 }}}
    27 
    28  * Programma che esegue il codice letto da standard input export:trunk/exec.c
    29   [[IncludeSource(trunk/exec.c, line_numbers=0)]]
    30 
    31 
    32 {{{
    33 gcc -o exec exec.c
    34 echo -ne "\xB8\x11\x22\x33\x44" | ./exec
    35 echo -n "ciao" | ./exec
    36 ...
    37 }}}
    38 
    39 === Link ===
    40 
    41  * [http://nasm.sourceforge.org NASM ]
    42  * [http://www.drpaulcarter.com/pcasm/ PC Assembly Language, by Paul A. Carter]
    43  * [http://www.intel.com/products/processor/manuals/ Manuali Intel]
    44  * [http://fabrice.bellard.free.fr/qemu_0.10.0-1_i386.deb QEmu]
    45    * [http://homes.dico.unimi.it/sisop/qemu-0.9.0-win32.zip QEmu 0.9.0 per windows]
    46    * [http://www.coresystems.de/%7Epatrick/qemu-0.10.0-bin.zip QEmu 0.10.1 per Windows]
    47    * [http://homes.dico.unimi.it/sisop/qemu_0.10.0-1_i386.deb QEmu 0.10.1 per Linux (Debian & Ubuntu)]
    48    * [http://www.puredarwin.org/downloads/qemu-0.10.1.dmg QEmu 0.10.1 per Mac OS X]
    49  * [http://homes.dico.unimi.it/~sisop/qemu/minix3-full.qcow Immagine Qemu MINIX 3.1.2a con Vim, ssh, ecc.]
    50 
    51 ----
    52 
    53 == Lezione 2 ==
    54 
    55 === Slide ===
    56 
    57  * '''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])
    58  * '''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])
    59 
    60 === Esercizi ===
    61 
    62  ==== {{{fork}}} ====
    63 
    64  * un programma che "forca" un nuovo processo export:trunk/fork.c
    65    [[IncludeSource(trunk/fork.c, line_numbers=0)]]
    66 
    67  * exit status export:trunk/exit.c
    68    [[IncludeSource(trunk/exit.c, line_numbers=0)]]
    69 
    70 
    71  ==== Esecuzione in sequenza e parallelo ====
    72 
    73  * programma di prova export:trunk/hello.c
    74    [[IncludeSource(trunk/hello.c, line_numbers=0)]]
    75 
    76 
    77 
    78 {{{
    79 #!sh
    80 # In sequenza
    81 ./hello ; ./hello
    82 # In parallelo
    83 ./hello & ./hello
    84 echo $?
    85 }}}
    86 
    87 ==== Cosa fa? ====
    88 
    89 {{{
    90 #!sh
    91 /usr/bin/touch piripacchio
    92 while /bin/ls piripacchio; do
    93  /usr/bin/sleep 2
    94  /bin/echo ciao
    95 done & ( /usr/bin/sleep 10 ; /bin/rm piripacchio )
    96 }}}
    97 
    98 Consultate il manuale!
    99 
    100 {{{
    101 #!sh
    102 man man
    103 man touch
    104 man ls
    105 man 1 sleep # man 3 sleep è il manuale della funzione della libreria C
    106 man echo
    107 man rm
    108 }}}
    109 
    110 ==== Uso del {{{for}}} e {{{if}}} ====
    111 
    112 {{{
    113 #!sh
    114 for i in dog cat fish; do if ls /bin/$i; then echo Trovato $i; else echo $i non trovato; fi; done
    115 }}}
    116 
    117 {{{
    118 #!sh
    119 man test
    120 for i in dog cat fish; do if test -f /bin/$i; then echo Trovato $i; else echo $i non trovato; fi; done
    121 }}}
    122 
    123 === Link ===
    124 
    125  * [http://jrmiii.com/attachments/Vim.pdf Vi cheat sheet]
    126  * [http://tnerual.eriogerg.free.fr/vimqrc-it.pdf VIM: Scheda di riferimento rapido]
    127  * [http://homes.dico.unimi.it/~sisop/qemu/minix3-full.qcow Immagine Qemu MINIX 3.1.2a con Vim, ssh, ecc.]
    128  * [http://www.pluto.it/files/ildp/HOWTO/Bash-Prog-Intro-HOWTO/Bash-Prog-Intro-HOWTO.html BASH Programming -- Intoduction HOWTO]
    129  * [http://www.pluto.it/files/ildp/guide/abs/index.html Guida avanzata di scripting BASH]
    130 
    131 == Lezione 3 ==
    132 
    133 === Slide ===
    134 
    135  * '''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])
    136  * '''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])
    137 
    138 === Materiale ===
    139  * [UnixShell UNIX Shell: kit di sopravvivenza (in aggiornamento)]
    140 
    141  * scrive su stdout(1) gli argomenti ricevuti sulla riga di comando export:trunk/stdout.c
    142    [[IncludeSource(trunk/stdout.c, line_numbers=0)]]
    143 
    144  * scrive su stdout(1)e stderr (2) gli argomenti ricevuti sulla riga di comando export:trunk/stdouterr.c
    145    [[IncludeSource(trunk/stdouterr.c, line_numbers=0)]]
    146 
    147 === Esercizi online con la shell ===
    148  * [http://idea.sec.dico.unimi.it/~lorenzo/SisOp0809/ Esercizi online]
    149 
    150 == Lezione 4 ==
    151 
    152 === Slide ===
    153 
    154  * '''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])
    155  * '''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])
    156 
    157 === Programmi ===
    158 
    159 ==== Esempi con la syscall `clone`, specifica di Linux ====
    160 
    161  * Thread '''senza''' memoria condivisa  export:trunk/threads-isolated.c
    162    [[IncludeSource(trunk/threads-isolated.c, line_numbers=0)]]
    163 
    164  * Thread '''con''' memoria condivisa export:trunk/threads-shared.c
    165    [[IncludeSource(trunk/threads-shared.c, line_numbers=0)]]
    166 
    167  * Thread '''con''' memoria condivisa, mutua esclusione ottenuta con Peterson export:trunk/threads-peterson.c
    168    [[IncludeSource(trunk/threads-peterson.c, line_numbers=0)]]
    169 
    170  * Thread '''con''' memoria condivisa, mutua esclusione con TSL export:trunk/threads-tsl.c export:trunk/enter.asm
    171    [[IncludeSource(trunk/threads-tsl.c, line_numbers=0)]]
    172    [[IncludeSource(trunk/enter.asm, line_numbers=0)]]
    173  
    174 {{{
    175 #!sh
    176 nasm -felf enter.asm
    177 cc threads-tsl.c enter.o -o threads-tsl
    178 }}}
    179 
    180  * Thread '''con''' memoria condivisa, mutua esclusione ottenuta con semaforo export:trunk/threads-sem.c
    181    [[IncludeSource(trunk/threads-sem.c, line_numbers=0)]]
    182  
    183 {{{
    184 #!sh
    185 cc -o threads-sem threads-sem.c -lrt
    186 }}}
    187 
    188 
    189 ==== Esempi in Java ====
    190 
    191  * Creazione di thread export:trunk/Basic.java
    192    [[IncludeSource(trunk/Basic.java, line_numbers=0)]]
    193 
    194  * Memoria condivisa export:trunk/Shared.java
    195    [[IncludeSource(trunk/Shared.java, line_numbers=0)]]
    196 
    197  * Memoria condivisa, mutua esclusione ottenuta con `synchronized`, export:trunk/Shared2.java
    198    [[IncludeSource(trunk/Shared2.java, line_numbers=0)]]
    199 
    200 
    201  * Produttore e consumatore, export:trunk/PC.java
    202    [[IncludeSource(trunk/PC.java, line_numbers=0)]]
    203 
    204 
    205  * Produttore e consumatore con semafori export:trunk/PCSem.java
    206    [[IncludeSource(trunk/PCSem.java, line_numbers=0)]]
    207 
    208  * Produttore e consumatore con monitor export:trunk/PCMon.java
    209    [[IncludeSource(trunk/PCMon.java, line_numbers=0)]]
    210 
    211 == Lezione 5 ==
    212 
    213 === Slide ===
    214 
    215 ==== find, archivi, segnali ====
    216 
    217  * '''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])
    218 
    219 ==== Concorrenza ====
    220 
    221  * '''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])
    222 
    223 
    224 === Programmi ===
    225 
    226 Vedi Lezione 4 -- Turno 1
    227 
    228 
    229 == Lezione 6  ==
    230 
    231 === Slide ===
    232 
    233 ==== Assembly, primi esperimenti col kernel ====
    234 
    235  * '''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])
    236 
    237 
    238 ==== Permessi, Make e primi esperimenti con il kernel ====
    239 
    240  * '''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])
    241 
    242 === Altro materiale ===
    243 
    244  * [http://a2.pluto.it/introduzione_al_linguaggio_c.htm Introduzione al linguaggio C]
    245 
    246 
    247 == Lezione 7  ==
    248 
    249 === Slide ===
    250 
    251 ==== Memorie di massa ====
    252 
    253  * '''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])
    254 
    255 ==== System e kernel call ====
    256 
    257  * '''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])
    258 
    259  * export:trunk/mykill.c
    260    [[IncludeSource(trunk/mykill.c, line_numbers=0)]]
    261 
    262  * export:trunk/mykill-raw1.c
    263    [[IncludeSource(trunk/mykill-raw1.c, line_numbers=0)]]
    264 
    265  * export:trunk/mykill-raw2.c
    266    [[IncludeSource(trunk/mykill-raw2.c, line_numbers=0)]]
    267 
    268 == Lezione 8: Memorie di massa e system call ==
    269 
    270 === Slide ===
    271 
    272  * '''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])
    273  * '''Turno 2 (8 Maggio 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab08b.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab08b-handout.pdf Versione stampa])
    274 
    275 
    276 ==== Aggiunta di una system call a MINIX ====
    277 
    278 
    279    * aggiunta della syscall {{{foo}}} diff:tags/minix-3.1.2a//tags/syscall-add-simple-foo
    280    [[IncludeSource(tags/syscall-add-simple-foo/test/testfoo.c, line_numbers=0)]]
    281    * aggiunta della syscall {{{foo}}} con un parametro intero diff:tags/syscall-add-simple-foo//tags/syscall-add-foo-with-arg
    282    [[IncludeSource(tags/syscall-add-foo-with-arg/test/testfoo.c, line_numbers=0)]]
    283 
    284 
    285 == Lezione 9  ==
    286 
    287 === Slide ===
    288 
    289  * '''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])
    290 
    291  * '''Turno 2 (15 maggio 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab09b.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab09b-handout.pdf Versione stampa])
    292 
    293 ==== Aggiunta di una system call a MINIX ====
    294 
    295    * Aggiunta della syscall {{{foo}}} che stampa processi ready diff:tags/syscall-add-foo-with-arg//tags/syscall-add-foo-print-ready
    296    [[IncludeSource(tags/syscall-add-foo-print-ready/test/testfoo.c, line_numbers=0)]]
    297 
    298 ===  Aggiunta di un server ===
    299 
    300    * [http://www.usenix.org/publications/login/2006-04/openpdfs/herder.pdf Articolo di riferimento]
    301    * Aggiunta di un server semaforo (singolo) diff:tags/minix-3.1.2a//tags/server-add-single-semaphore
    302    [[IncludeSource(tags/server-add-single-semaphore/test/testsema.c, line_numbers=0)]]
    303 
    304 == Lezione 10 ==
    305 
    306 === Slide ===
    307 
    308    * '''Turno 2 (22 maggio 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab10b.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab10b-handout.pdf Versione stampa])
    309 
    310 ==== Aggiunta di una system call a MINIX ====
    311 
    312    * Aggiunta di una syscall {{{chuid}}} che permette di modifcare il proprietario di un processo
    313 
    314 {{{
    315 #!c
    316 PUBLIC int do_chuid()
    317 {
    318    int p, u;
    319    struct mproc *rmp;
    320 
    321    p = m_in.m1_i1;
    322    u = m_in.m1_i2;
    323 
    324    printf("PID: %d UID: %d\n", p, u);
    325 
    326    for (rmp = &mproc[0]; rmp < &mproc[NR_PROCS]; rmp++) {
    327         if (rmp->mp_pid == p) {
    328            printf("FOUND: %s\n", rmp->mp_name);
    329            printf("Switched UID from %d to %d\n", rmp->mp_realuid, u);
    330            rmp->mp_realuid = u;
    331            rmp->mp_effuid = u;
    332            break;
    333         }
    334    }
    335 }
    336 }}}
    337 
    338 == Lezione 11 ==
    339 
    340 === Slide ===
    341 
    342    * '''Turno 1 (3 giugno 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab11.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab11-handout.pdf Versione stampa])
    343    * '''Turno 2 (27 maggio 2009)''': [http://homes.dico.unimi.it/sisop/lucidi0809/solab11b.pdf slide] ([http://homes.dico.unimi.it/sisop/lucidi0809/solab11b-handout.pdf Versione stampa])
    344 
    345 ==== Aggiunta di un semaphore server a MINIX ====
    346 
    347 Vedi materiale lezione 10 Turno 1.
    348 
    349 == Lezione 12 ==
    350 
    351 === Esempi di esercizi d'esame ===
    352 
    353     * Esempio partizionamento [http://homes.dico.unimi.it/sisop/lucidi0809/part.pdf Es. part]
    354     * Trovare l'utente col minor numero di file nel sistema
    355 
    356 
    357 {{{
    358 #!sh
    359 set -x # debugging aid
    360 USERS=$(cut -f 3 -d : < /etc/passwd)
    361 NUMS=
    362 for u in $USERS; do
    363         N=$( (find /etc -user $u -type f | wc -l ) || echo 0 )
    364         if test "x$NUMS" = "x"; then
    365           NUMS="$N"
    366         else
    367           NUMS="$NUMS:$N"
    368         fi
    369 done
    370 NUMS=$(echo $NUMS | tr -s)
    371 j=1
    372 for i in $USERS; do
    373         echo $(cut -f 1,3 -d : < /etc/passwd | grep ":$i$"| cut -d : -f 1) \($i\):$(echo $NUMS | cut -d : -f $j)
    374         j=$(expr $j + 1)
    375 done | sort -b -r -t: -n +1
    376 set +x
    377 }}}
    378 
    379     * Trovare l'utente col file piu' recente nel sistema
    380     * Elencare i tre utenti che hanno il maggior numero di file nel sistema
    381     * Trovare tutti i file col numero dispari di righe (quindi sono i file di testo)
    382     * Trovare tutti i file modificati di venerdi' (sia un venerdi' particolare che di venerdi' in generale)
    383     * Trovare tutti i link simbolici nel filesystem
    384     * Trovare tutti i file di testo che non siano script
    385     * Contare quanti file di manuale ci sono nel filesystem
    386     * A quante “pagine” (una pagina equivale a circa 1500 caratteri) corrispondono tutti i file di testo del filesystem?
    387     * Quali file ha modificato l'utente XY in una specifica data?
    388     * Quali file di testo ha modificato l'utente XY nell'ultimo anno?
    389     * Qual'e' l'utente che ha modificato piu' file nell'ultimo anno?
    390     * Calcolare il numero di righe totali che ha scritto sul filesystem un certo utente nell'ultimo mese
    391     * Calcolare il rapporto tra il numero di file nel filesystem (o in una directory specificata) e lo spazio occupato
    392     * Calcolare il rapporto tra il numero di file nel filesystem (o in una directory specificata) e lo spazio occupato ESCLUDENDO gli hardlink
    393     * Quanta memoria occupa il processo piu' grande?