| 14 |  | Chi si preoccupa di tenere traccia dell'uso diretto e' lo stesso dispatcher, che fara' un timestamp prima del caricamento del pcb, e, una volta reinvocato per la successiva ri-schedulazione, calcolera' la differenza.  | 
                      
                        |  | 14 | Chi si preoccupa di tenere traccia dell'uso diretto e' lo stesso dispatcher, che fara' un timestamp prima del caricamento del pcb, e, una volta reinvocato per la successiva ri-schedulazione, calcolera' la differenza. Nel caso di uso indiretto, il compito e' ripartito fra i gestori delle eccezioni: essi addebiteranno il proprio tempo di esecuzione al processo chiamante (procCurr) nel caso di syscall, trap  e breakpoint, oppure al processo realmente interessato nel caso di interrupt; in questo ultimo scenario l'identificazione dell'interessato avviene al momento di verhogen-are un semaforo. | 
            
                      
                        | 16 |  | Nel caso di uso indiretto, il compito e' ripartito fra i gestori delle eccezioni: essi addebiteranno il proprio tempo di esecuzione al processo chiamante (procCurr) nel caso di syscall, trap  e breakpoint, oppure al processo realmente interessato nel caso di interrupt; in questo ultimo scenario l'identificazione dell'interessato avviene al momento di verhogen-are un semaforo. | 
                      
                        |  | 16 | Problema: cosi' facendo l'uso diretto comprenderebbe anche la parte di uso indiretto relativo all'interrupt handling. | 
                        |  | 17 |  | 
                        |  | 18 | Chi si fa carico del calcolo di accounting e' il dispatcher, | 
                        |  | 19 |  | 
                        |  | 20 |  | 
                        |  | 21 | {{{ | 
                        |  | 22 | Dispatcher     Process1   Proces2   Syscall        Interrupt | 
                        |  | 23 | ___ | 
                        |  | 24 | |> 1            |. . . . . . . | 
                        |  | 25 | | | 
                        |  | 26 | | | 
                        |  | 27 | | | 
                        |  | 28 | |. . . . . . . . . . . | 
                        |  | 29 | | | 
                        |  | 30 | | | 
                        |  | 31 | | | 
                        |  | 32 | || 1                                            wait I/O | 
                        |  | 33 |  | 
                        |  | 34 | |. . . . . . . . . . . . . | 
                        |  | 35 | |> 2                                     | | 
                        |  | 36 | | | 
                        |  | 37 | | | 
                        |  | 38 | || 2                                     |. . . . . . . . . . . end I/O | 
                        |  | 39 | |> 1                                                               | | 
                        |  | 40 | | | 
                        |  | 41 | | | 
                        |  | 42 | || 1                                                            wait CPU | 
                        |  | 43 |  | 
                        |  | 44 |  | 
                        |  | 45 |  | 
                        |  | 46 |  | 
                        |  | 47 | ||  CPUTIME += TOD - lastTOD | 
                        |  | 48 |  | 
                        |  | 49 | |>  lastTOD = TOD | 
                        |  | 50 |  | 
                        |  | 51 |  | 
                        |  | 52 | }}} |