Baixe o app para aproveitar ainda mais
Prévia do material em texto
Sistemas Operacionais Tarefas de Sistema Prof. Sílvio Fernandes UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO DEPARTAMENTO DE CIÊNCIAS EXATAS E NATURAIS CURSO DE CIÊNCIA DA COMPUTAÇÃO A tarefa de sistema do MINIX 3 Uma consequência de tornar os principais componentes do sistema em processos independentes fora do núcleo é que eles são proibidos de fazer E/S real A solução é ter um núcleo que ofereça um conjunto de serviços para os drivers e servidores Esses serviços (tarefas de sistema), permitem que drivers e servidores façam E/S real, acessem tabelas do núcleo e façam outras coisas necessárias, tudo sem estar dentro do núcleo 2 A tarefa de sistema do MINIX 3 No MINIX 3, as chamadas de sistema feitas por processos de usuário são transformadas em mensagens para processos servidores Os servidores se comunicam entre si, com drivers de dispositivos e com o núcleo, por meio de mensagens As requisições de serviços do núcleo são referidas como chamadas de núcleo Em muitos casos, uma chamada de sistema originada por um processo de usuário resulta em uma chamada de núcleo com um nome semelhante sendo feita por um servidor 3 Chamadas de sistema 4 Chamadas de sistema 5 Visão geral da tarefa de sistema A tarefa de sistema aceita 28 tipos de mensagens, conforme a tabela a seguir 6 Visão geral da tarefa de sistema A tarefa de sistema aceita 28 tipos de mensagens, conforme a tabela a seguir 7 Visão geral da tarefa de sistema As chamadas chamadas de sistema são feitas por sys_call() que envia mensagem para a tarefa de sistema Ela recebe e despacha para a função adequada A lista atualizadas das chamadas estão em: http://wiki.minix3.org/doku.php?id=releases:3.2.0:develo persguide:kernelapi&s[]=signal 8 Visão geral da tarefa de sistema Para a versão 3.2.1 A tarefa de sistema está implementada em src/kernel/system.c Os protótipos dos manipuladores das funções estão declarados em src/kernel/system.h A implementação de cada função está em arquivos separados no diretório src/kernel/system/ Os número das chamadas de núcleo e seus parâmetros estão definidos em src/include/minix/com.h 9 Visão geral da tarefa de sistema As 1ª chamadas de núcleo estão relacionadas com o gerenciamento de processos Sys_fork, sys_exec, sys_exit e sys_trace estão, intimamente relacionadas com as chamadas de sistema padrão POSIX Nice não é uma chamada exigida pelo POSIX, mas resulta na chamada de núcleo sys_nice (ausente na v.3.2.1) O sys_privctl altera os privilégios de um processo, por exemplo, para que ele faça chamadas de núcleo É utilizada quando drivers e servidores que não fazem parte da imagem de boot são iniciados pelo sript /etc/rc 10 Visão geral da tarefa de sistema O próximo grupo está relacionado com os sinais Sys_kill está relacionada com a chamada de sistema kill acessível para o usuário As outras chamadas nesse grupo, sys_getksig, sys_endksig, sys_sigsend e sys_sigreturn são usadas pelo gerenciador de processos para obter ajuda do núcleo no tratamento de sinais 11 Visão geral da tarefa de sistema As chamadas de núcleo sys_irqctl, sys_devio, sys_sdevio e sys_vdevio são exclusivas do MINIX Elas fornecem o suporte necessário para drivers de dispositivos em espaço de usuário 12 Visão geral da tarefa de sistema As 3 chamadas seguintes envolvem a memória de maneiras distintas. (ausente na v.3.2.1) Sys_newmap é chamada pelo gerenciador de processos sempre que a memória utilizado por um processo é alterada para permitir que a tabela de processos, pertencente ao núcleo, possa ser atualizada Sys_segctl e sys_memset fornecem uma maneira segura de dar a um processo acesso à memória fora de seu próprio espaço de endereçamento de dados 13 Visão geral da tarefa de sistema O próximo grupo de chamadas de núcleo serve para copiar memória Sys_map converte endereços virtuais em endereços físicos Sys_vircopy e sys_physcopy copiam regiões da memória, usando endereços virtuais ou endereços físicos As chamadas sys_virvcopy e sys_physvcopy são versões das 2 anteriores que usam vetores 14 Visão geral da tarefa de sistema Sys_times tem a ver com a chamada de sistema times do POSIX Sys_setalarm está relacionada com a chamada de sistema alarm do POSIX, mas o parentesco é distante 15 Visão geral da tarefa de sistema As 2 últimas chamadas servem para controle do sistema Sys_abort pode ser originada no gerenciador de processos, após um pedido normal de desligamento do sistema (shutdown) ou após um pânico Ela também pode originar do driver de dispositivo tty, em resposta a um usuário pressionando a combinação de teclas Ctrl-Alt-Del Finalmente, sys_getinfo trata de uma variedade de requisições de informações do núcleo 16 Processos no Unix Signals O tratamento das exceções e de eventos assíncronos tem, no Unix, particular importância, tendo extrapolado a função de mero mecanismo de tratamento de exceções para se tornar uma dos mecanismos mais importantes para o controle da execução dos processos, em particular no shell Os eventos assíncronos podem ser sinalizados a um processo em execução através da ativação de um signal 17 Processos no Unix Signals Quando um signal é enviado a um processo, a ação provocada por default pode ser finalizar o processo(abort) ou ignorar o signal Para evitar que o processo seja abortado é necessário associar uma rotina de tratamento do signal A única exceção é o SIGKILL, que não pode ser ignorado ou tratado e que resulta sempre na finalização incondicional do processo que o recebe 18 Processos no Unix Signals A CS que associa uma função a signal void (*signal (int signum, void (*handler) (int))) (int) 19 Identificador do sinal Ponteiro para a rotina de tratamento Processos no Unix Signals 20 Interrupção de terminal “ctrl+c” A associação é feita novamente, caso contrário será ignorada depois da 1ª. vez Processos no Unix Signals Um signal pode ser ignorado explicitamente (SIG_IGN) ou, depois de atribuído a uma rotina, reposto na situação de tratamento por default (SIG_DFL) TratamentoAnterior = signal (SIGINT, SIG_IGN) TratamentoAnterior = signal (SIGINT, SIG_DFL) 21 Processos no Unix Signals Uma utilização interessante dos signals é a possibilidade de um processo poder enviar uma sinalização explicitamente para outro Por meio da primitiva kill Não termina necessariamente o processo destinatário se o signal estiver sendo tatado Se o destinatário ainda não lhe associou um tratamento diferente do tratamento predefinido este será terminado, e daí o nome “kill” int kill (int pid, int sig) Um processo só pode enviar signals aos processos que possuem o mesmo UID Os superusuários podem ultrapassar esta proteção 22 Processos no Unix Signals Se o pid especificado na chamada kill for zero, o signal é enviado a todos os processos que pertencem ao mesmo grupo Um processo pode se bloquear à espera de um signal através da função pause A função alarm é usada à espera de um temporizador que lhe será enviado pelo signal do tipo SIGALARM int alarm (int segundos) A função que conjuda alarm e pause é int sleep (int segundos) 23 Implementação dos Signals O envio de um signal desencadeia uma transição para modo núcleo Provocada poruma exceção, interrupção ou chamada de sistema O núcleo detecta quando um processo retorna do modo núcleo para modo usuário Tratamento No contexto do processo há uma tabela que indica para cada sinal o respectivo tratamento Pode indicar que o signal será ignorado, indicar o tratamento predefinido ou o endereço da rotina de tratamento 24 Referências TANENBAUM, Andrew S.; WOODHULL, Albert S. Sistemas Operacionais: Projeto e Implementação. 3ª Ed., Prentice Hall, 2008. MARQUES, José Alves; RIBEIRO, Carlos. Sistemas Operacionais. LTC, 2011. 25
Compartilhar