sinais seminário de lab. so – etapa 1 alunos: agostinho barone ribeiro da silva – 264300...

24
Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Upload: internet

Post on 17-Apr-2015

103 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

SinaisSeminário de Lab. SO – Etapa 1

Alunos:Agostinho Barone Ribeiro da Silva – 264300

Vinicius Valls Blanch Maimone Santos – 264385

Page 2: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

O que é um sinal?

Page 3: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

O que é um Sinal?

• Um sinal é uma pequena mensagem que pode ser enviada a um processo ou grupo de processos.

• A única informação fornecida ao processo geralmente é o código identificador do sinal.

• Não há espaço em sinais padrões para argumentos, mensagens ou outras informações.

Page 4: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

O que é um Sinal?

• Sinais têm dois propósitos principais:– Deixar um processo ciente de que algum evento ocorreu.– Fazer com que um processo execute uma função de

tratamento embutida em seu código.

• Estes dois propósitos não são mutuamente exclusivos.

Page 5: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Os Sinais

Page 6: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Os Sinais

• Para a arquitetura x86, o kernel 2.6 do Linux trata 31 sinais por padrão.

• O padrão POSIX introduziu uma nova classe de sinais (32~64), chamados real-time signals.

• A diferença básica entre estes é que os real-time signals são enfileiráveis.

• Apesar do kernel não suportá-los, é possível utilizá-los através de algumas syscalls.

Page 7: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Os Sinais

• Alguns sinais:# Nome Ação Descrição

1 SIGHUP Terminar Enforca o terminal ou processo

2 SIGINT Terminar Interrupção do Teclado

9 SIGKILL Terminar Força o processo a terminar

11 SIGSEGV Dump Referência inválida de memória

13 SIGPIPE Terminar Escrita num pipe já fechado

15 SIGTERM Terminar Termina um processo

17 SIGCHLD Ignorar Processo filho parou ou terminou

18 SIGCONT Continuar Continua um processo parado

19 SIGSTOP Parar Para a execução de um processo

Page 8: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Os Sinais

• Algumas chamadas de sistema permitem:– Enviar sinais.– Determinar a resposta dos processos ao

receberem um sinal.

Page 9: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Os Sinais

• As principais syscalls relativas a sinais:syscall Descrição

kill() Envia um sinal a um grupo de threads

tkill() Envia um sinal a um processo

tgkill() Envia um sinal a um processo num grupo específico de threads

sigaction() / signal() Altera a ação associada a um sinal

sigpending() Checa se há sinais pendentes

sigprocmask() Modifica o conjunto de sinais bloqueados

sigsuspend() Espera um sinal

Page 10: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Os Sinais

• As syscalls relativas a sinais real-time:syscall Descrição

rt_sigaction() Altera a ação associada a um sinal

rt_sigpending() Checa se há sinais pendentes

rt_sigprocmask() Modifica o conjunto de sinais bloqueados

rt_sigqueueinfo() Envia um sinal para um grupo de threads

rt_sigsuspend() Espera um sinal

rt_sigtimedwait() Similar a rt_sigsuspend()

Page 11: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Os Sinais

• Sinais podem ser enviados a qualquer momento a qualquer processo.

• Se este processo não estiver sendo executado o sinal deve ser salvo pelo kernel até que o processo retorne.

• Bloquear um sinal faz com que o kernel o salve até que sua entrega seja desbloqueada.

• Isso evita que sinais sejam capturados antes de poderem ser tratados.

Page 12: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Os Sinais

• Assim, o kernel divide a transmissão do sinal em duas fases:– Geração do sinal:• O kernel atualiza a estrutura de dados do processo de

destino para representar que um sinal foi enviado.

– Entrega do sinal:• O kernel força o processo de destino a reagir:

– Mudando seu estado de execução.– Iniciando a execução da rotina de tratamento.– Realizando ambos os procedimentos.

Page 13: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Os Sinais

• Apesar da noção de sinais ser intuitiva, a implementação é complexa. O kernel deve:– Lembrar os sinais bloqueados de cada processo.– Quando alterna entre Kernel Mode e User Mode,

checar se algum sinal chegou a algum processo.– Determinar se o sinal pode ser ignorado.– Tratar o sinal (isso pode exigir troca de contexto).

Page 14: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Ações de Resposta

Page 15: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Ações de Resposta

• Ao receber um sinal, um processo pode:– Ignorar o sinal explicitamente.– Tratar o sinal através de uma função específica.– Executar a ação padrão associada ao sinal.

Ação Descrição

Terminar O processo é terminado

Dump O processo é terminado e um “core dump” é criado

Ignorar O sinal é ignorado

Parar O processo é parado (i.e. Estado TASK_STOPPED)

Continuar O processo em TASK_STOPPED é colocado em TASK_RUNNING

Page 16: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Estruturas de Dados

Page 17: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Estruturas de Dados• As estruturas de dados mais significativas no tratamento de

sinais:

Page 18: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Gerando um Sinal

Page 19: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Gerando um Sinal• Quando um sinal é enviado a um processo, oriundo do kernel

ou de outro processo, uma das seguintes funções é chamada:

Função Descrição

send_sig() Envia um sinal a um único processo

send_sig_info() Como o send_sig(), mas com mais informações

force_sig() Envia um sinal que não pode ser ignorado ou bloqueado.

force_sig_info() Como force_sig(), mas com mais informações

force_sig_specific() Como force_sig(), mas otimizado para SIGSTOP e SIGKILL

sys_tkill() syscall handler para a função tkill()

sys_tgkill() syscall handler para a função tgkill()

Page 20: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Gerando um Sinal• Quando um sinal é enviado para um grupo de threads, o

kernel chama uma das seguintes funções:

Função Descrição

send_group_sig_info() Envia um sinal para um grupo de threads identificado pelo descritor de processo de um de seus membros

kill_pg() Envia sinal p/ todos os grupos de threads num grupo de processos

kill_pg_info() Como kill_pg(), mas com informações adicionais

kill_proc() Envia sinal p/ grupo de threads identificado pelo pid de um dos membros

kill_proc_info() Como kill_proc(), mas com informações adicionais

sys_kill() syscall handler para a função kill()

sys_rt_sigqueueinfo() syscall handler para a função rt_sigqueueinfo()

Page 21: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Tratando um Sinal

Page 22: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Tratando um Sinal• A figura abaixo ilustra o fluxo de execução na captura

de um sinal:

Page 23: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Tratando um Sinal• A figura abaixo ilustra um frame, estrutura utilizada

para armazenar o contexto do sistema:

Page 24: Sinais Seminário de Lab. SO – Etapa 1 Alunos: Agostinho Barone Ribeiro da Silva – 264300 Vinicius Valls Blanch Maimone Santos – 264385

Bibliografia

• Understanding Linux Kernel 3• for ($i=1; i<=5; i++)• {

echo “http://www.comp.ufscar.br/~helio/Lab_SO/sinais”.$i;

}• http://elearning.algonquincollege.com/coursemat/Test/

allisor/cst8229/lectures/4-Signals.html