“Timers” e Gerenciamento
de tempo pelo Kernel
Disciplina: Sistemas Operacionais (COS 773)
Data: 16/11/ 2005
Professor: Vitor Costa
Trabalho de Lúcia C. L. Ferreira
1
Roteiro
•
•
•
•
•
2
Introdução
Conceitos
Gerenciando o tempo
Tratando interrupções de tempo
Utilizando Timers
Introdução
O controle de tempo pelo Kernel é
muito importante, pois várias de suas
funções são dirigidas pelo evento
“passagem do tempo”.
Exemplo:
– “Refresh” de tela
– Desligar o motor do “floppy drive” após
um período de inatividade
3
Conceitos
• “Timer” ou temporizador: hw utilizado pelo
Kernel para controlar a passagem do tempo;
• “Tick rate”: freqüência de operação do
timer (HZ);
Ex: i386 HZ=1000 hertz
• “Tick”: tempo discorrido entre duas
interrupções de tempo sucessivas (período
de 1/HZ segundos);
4
Conceitos
• Jiffies: variável global que armazena o
número de ticks que ocorreram desde o
boot do sistema;
1seg = HZ jiffies
• Timer
interrupt
handler:
trata
as
interrupções relacionadas à passagem de
tempo;
5
Como o Kernel gerencia o tempo
Para gerenciar o tempo o Kernel utiliza dois
componentes de hw:
• Real-Time Clock (RTC): Utilizado para
atualizar o tempo real (wall time / time of
day);
xtime: variável que recebe o valor do
RTC no momento do boot;
6
Como o Kernel gerencia o tempo
• System Timer: relógio eletrônico que oscila
a uma determinada freqüência (tick-rate:
HZ);
Controla as interrupções de tempo
7
Como o Kernel trata as
interrupções de tempo
Timer Interrupt Handler
• Rotina dependente da arquitetura:
responsável por tratar as interrupções
geradas pelo System Timer;
8
Como o Kernel trata as
interrupções de tempo
Timer Interrupt Handler
Funções comumente executadas:
– Obter o xtime-lock (jiffies, xtime)
– Atualiza a RTC (RTC
xtime);
– Chama a rotina que independe da
arquitetura
9
Como o Kernel trata as
interrupções de tempo
Timer Interrupt Handler
• Rotina independente da arquitetura:
do-timer()
– Incrementa o valor da variável jiffies;
– Atualiza o tempo recursos/processos em
execução;
– Atualiza o wall-time (time of day);
– Executa o scheduler_tick();
10
Freqüência do Timer Interrupt
Arquitetura
Frequência (Hertz)
Alpha
i386
Mips
Mips64
Sparc
Sparc64
x86-64
1024
1000
100
100 ou 1000
100
1000
1000
11
Time of Day
Wall-time
Definida na estrutura <linux/time.h>
Struct timespec {
time_t tv_sec;
long tv_nsec;
};
12
/* segundos */
/* nanosegundos */
Utilizando Timers
“Dynamic Timers” ou “Kernel Timers”
• Mecanismo para “atrasar” a execução de
determinadas tarefas por um tempo
específico;
13
Utilizando Timers
Passos:
• Setup inicial;
• Definir tempo de expiração;
• Definir função a ser executada;
• Ativar o timer;
14
Utilizando Timers
Estrutura:
<linux/timer.h>
struct timer_list {
struct list_head entry; /* entrada lista encadeada de timers */
unsigned long expires; /* valor expiração, jiffies */
spinlock_t lock;
/* lock */
void (*function)(unsigned long); /* função a ser executada*/
unsigned long data; /* argumento para o “handler” */
struct tvec_t_base_s *base; /* campo interno – Não Mexer *
};
15
Utilizando Timers
Exemplo
struct timer_list my_timer;
init_timer(&my_timer);
my_timer.expires = jiffies + delay;
my_timer.data = 0;
my_timer.function = my_function;
add_timer(&my_timer);
16
Download

“Timers” e Gerenciamento de tempo pelo Kernel