La gestione del clock in Minix Sistemi Operativi Lez. 13 Segnale di clock • Periodo di clock (o cliclo di clock) : l’intervallo di tempo che intercorre tra l’istante in cui il segnale di clock inizia a valere 0 e l’instante di tempo in cui termina di valere 1 • Frequenza: inverso del periodo • Es. ciclo di 10ns => 100 Mhz, ciclo 500psec => 2GHz La periferica • Il cristallo di quarzo sottoposto a tensione genera un segnale con periodicità che varia tipicamente da 5 a 200 MHz • Ad ogni ciclo il contatore viene decrementato quando raggiunge il valore zero: – La periferica invia un Interrupt HW (IRQ 8) – Il contatore viene ri-inizializzato – L’intervallo di tempo che intercorre tra un interrupt ed il successivo è denominato clock tick Esempio • Un clock chip che contiene un contatore a 16 bit ed un cristallo che genera segnali a 5 MHz, genererà clock tick della durata compresa tra 0,2 microsecondi e 13,1 millisecondi • E se il clock è a 100 Mhz? • Solitamente all’interno di un PC esistono più clock chip programmabili • I clock chip usati per la sincronizzazione di CPU e BUS di sistema usano circuiti diversi da quelli usati per la gestione degli eventi Funzionalità svolte • Time of the day: solitamente ottenuto memorizzando il numero di secondi (in termini di tick) trascorsi a partire dalle 12 A.M. del 1/01/1970 Universal Coordinated Time (UTC) • Segnalare la terminazione dei quanti di tempo: i quanti di tempo sono definiti in termini di tick ad ogni interrupt di clock si decrementa il quanto di 1 • Accounting per l’uso della CPU Funzionalità svolte • Gestire segnali a tempo per conto dei processi eseguiti dal sistema: alcuni processi basano le loro azioni sull’avverarsi o meno di certi eventi, entro intervalli di tempo predeterminati (es. ack di TCP) Funzionalità svolte • Watchdog timers: simili ai precedenti, con la differenza che allo scadere del tempo prefissato invece di inviare segnali richiamano opportune procedure di gestione • Profiling: raccogliere i tempi di esecuzione di diverse componenti del sistema o dei processi utente Implementazione • Le componenti del sistema operativo coinvolte nella gestione del clock sono: • Clock driver (clock task) • Che si appoggia su do_clocktick per svolgere le operazioni richieste • Interrupt handler • Routine di servizio: leggere il clock, leggere l’ora del sistema, leggere dei registri all’interno del chip Driver • È la prima componente che si occupa del clock ad essere eseguita sul sistema e quindi deve provvedere alla inizializzazione del dispositivo • Viene avviata in fase di boot • Costituita da un loop infinito che riceve solo un tipo di messaggi provenienti da HARD_INT e generati dall’interrupt handler pr_number Clock driver init_clock() • Terminata l’esecuzione di init_clock(), dopo 16,67 millisecondi arriverà il primo clock interrupt interrupt_handler() • Per prima cosa aggiorna realtime (n.ro di ticks trascorsi dal boot) interrupt_handler • Aggiorna il PCB del processo • nel caso di processo di sistema (quindi non billable) addebita i tick al processo billable di riferimento interrupt_handler • Nel caso di quanto terminato, o di watchdog timers scaduto viene richiamato il clock driver do_clocktick do_clocktick