Buscar

Implementação de Processos do MINIX 3 - Parte III

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 19 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 19 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 19 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

Sistemas Operacionais 
Implementação de Processos 
no MINIX 3 
Parte III 
Prof. Sílvio Fernandes 
UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO 
DEPARTAMENTO DE CIÊNCIAS EXATAS E NATURAIS 
CURSO DE CIÊNCIA DA COMPUTAÇÃO 
Comunicação entre processos no 
MINIX 3 
 O código de alto nível do IPC encontra-se em 
proc.c 
 A tarefa de núcleo é transformar uma 
interrupção de HW ou de SW em uma 
mensagem 
 A 1ª é gerada pelo HW e a última é a maneira como 
um pedido de serviço de sistema, i.e., uma chamada 
de sistema 
2 
Comunicação entre processos no 
MINIX 3 
 No arquivo proc.c 
 Duas macros úteis são definidas 
 BuildMess (ausente v.3.2.1) que é usada apenas para 
construir mensagens usandas por notify 
 A única chamada de função é get_uptime que lê uma 
variável mantida pela tarefa de relógio para que a 
notificação possa incluir uma identificação de tempo 
(timestamp) 
 As chamadas aparentes para uma função denominada priv 
são expansões de outra macro, definidas em priv.h: 
 #define priv(rp) ((rp)->p_priv) 
 A outra macro (CopyMess) é uma interface amigável 
para o programador, para a rotina em linguagem 
assembly cp_mess em klib386.s 
3 
Comunicação entre processos no 
MINIX 3 
 No arquivo proc.c 
 Em BuildMess, a macro priv é usada para 2 casos 
especiais 
 Se a origem de uma notificação HARDWARE, ela 
transportará uma cópia do mapa de bits de 
interrupções pendentes do processo de destino 
 Se a origem for SYSTEM, os dados transportados 
correspondem ao mapa de bits de sinais pendentes 
 Quando uma notificação não pode ser enviada, o bit 
correspondente ao remetente é ativado no mapa de 
bits do destinatário 
 Na operação de receive, o mapa de bits é verificado 
e se for encontrado um bit ativado, a mensagem será 
novamente gerada 4 
Comunicação entre processos no 
MINIX 3 
 No arquivo proc.c 
 A primeira função é sys_call (ausente v.3.2.1) 
 Ela converte uma interrupção de SW em uma 
mensagem 
 Após todos os testes terem sido realizados, uma das 
funções mini_send, mini_receive ou mini_notify é 
chamada para fazer o trabalho real 
5 
Comunicação entre processos no 
MINIX 3 
 No arquivo proc.c 
 Mini_send 
 Tem 3 parâmetros: o processo que fez a chamada, o 
processo destino e um ponteiro para o buffer onde a 
mensagem está armazenada 
 O teste (linhas 7606 a 7610) verifica se o processo que 
fez a chamada e o destino não estão tentando um 
enviar para o outro 
 O teste principal (7615 e 7616): verificar se o destino 
está bloqueado em uma operação receive e por 
quem ele está esperando 
 Se o destino não estiver esperando ou se esperar por outro 
remetente ele será bloqueado e o remetente retirado da 
fila (7623 a 7632) 
6 
Comunicação entre processos no 
MINIX 3 
 No arquivo proc.c 
 Mini_send 
 Enfileiramento de processos tentando enviar para o 
processo 0 
 
7 
Comunicação entre processos no 
MINIX 3 
 No arquivo proc.c 
 Mini_receive 
 É chamada por sys_call quando seu parâmetro function é 
RECEIVE ou BOTH 
 Notificações têm prioridades mais altas que mensagens 
normais, mas nunca serão resposta direta para uma 
instrução send 
 Portanto, os mapas de bits só serão consultados para 
verificar se existem notificações pendentes quando o flag 
SENDRED_BUSY não estiver ativado 
 O envio utiliza as macros BuildMess e CopyMess 
 Apenas uma notificação é entregue por vez; mini_send 
retorna após a entrega de uma notificação (7684) 
 
8 
Comunicação entre processos no 
MINIX 3 
 No arquivo proc.c 
 Mini_notify 
 Se o destinatário estiver bloqueado e esperando para 
receber, a notificação será gerada e entregue por 
BuildMess 
 O flag RECEIVING do destinatário é desativado e 
então é recolocado em enqueue 
 Se o destinatário não estiver esperando por 
mensagem, um bit será ativado em seu mapa 
s_notify_pending 
 Quando mini_notify for executada a uma interrupção 
de SW, as interrupções serão desativadas, exceto as 
tarefas de relógio ou de sistema (futuras) 
9 
Escalonamento no MINIX 3 
 O MINIX 3 usa um algoritmo de escalonamento 
multinível 
 Os processos recebem prioridades iniciais, 
relacionadas à estrutura de camadas do MINIX 
3, mas existem mais camadas e a prioridade 
de um processo pode mudar durante sua 
execução 
 O escalonador mantém 16 filas de processos 
prontos para executar (aptos) 
10 
Escalonamento no MINIX 3 
11 
 
Escalonamento no MINIX 3 
12 
 A figura anterior mostra as filas e os processos 
que estão em vigor no instante em que o 
núcleo termina a inicialização e começa a 
executar, isto é, na chamada para restart em 
main.c 
 O array rdy_head tem uma entrada para cada fila, com 
essa entrada apontando para o processo que está no 
início da fila 
 Analogamente, rdy_tail é um array cujas entradas 
apontam para o último processo em cada fila 
 Esses 2 arrays são definidos com a macro 
EXTERN em proc.h 
Escalonamento no MINIX 3 
13 
 O enfileiramento inicial de processos durante a 
inicialização do sistema é determinado pela 
tabela image em table.c 
 O algoritmo de escalonamento é simples 
 Encontrar a fila de prioridade mais alta que não 
esteja vazia e escolher o processo que está no início 
dessa fila 
 O processo IDLE está sempre pronto e fica na fila de 
prioridade mais baixa 
 Se todas as filas de prioridades mais altas estiverem 
vazia, o processo IDLE será executado 
Escalonamento no MINIX 3 
14 
 Em proc.c, enqueue é chamada com um 
ponteiro para uma entrada na tabela de 
processos como argumento 
 Ela chama a função sched (na v. 3.2.1 chama-se 
smp_schedule), com ponteiros para variáveis que 
determinam m qual fila o processo deve estar e se 
ele deve ser adicionado no início ou no final dessa fila 
 Quando um processo deve sair da fila de aptos 
a executar, a função dequeue é chamada 
 Um processo deve está executando para ser 
bloqueado; portanto, o processo a ser removido 
provavelmente estará no início de sua fila 
Escalonamento no MINIX 3 
15 
 A função sched escolhe a fila em que vai colocar 
um processo que se tornou pronto recentemente e 
se vai inseri-lo no início ou no final dessa fila 
 É verificada se o quantum do processo inteiro foi usado 
 Se não foi, ele será reiniciado com o que tiver restado da 
sua última vez 
 Em caso afirmativo, então é verificado se o processo teve 
dois turnos seguidos, sem que nenhum outro tenha 
executado; então é atribuída uma penalidade +1; se o 
quantum foi inteiramente utilizado e outros processos 
tiveram chance de executar, o valor da penalidade se 
tornará -1 
Escalonamento no MINIX 3 
16 
 Em seguida é determinada a fila a ser usada 
 A fila 0 é a de mais alta prioridade 
 A fila 15 a de mais baixa 
 Todos os processos começam com suas 
prioridades máxima; portanto, uma penalidade 
negativa não muda nada, até que tenham 
sido atribuídas penalidades positivas 
 Também existe um limite inferior de prioridades 
 Processos normais nunca podem ser colocados na 
mesma fila que IDLE 
Escalonamento no MINIX 3 
17 
 Basicamente, o escalonador é pick_proc 
 Sua principal função é configurar o next_ptr 
 Toda alteração nas filas que possa afetar a escolha 
do processo a ser executado em seguida exige que 
pick_proc seja novamente executada 
 As funções restantes em proc.c são lock_send, 
lock_enqueue e lock_dequeue 
 Dão acesso às suas funções básicas usando lock e 
unlock, da mesma maneira como para lock_notify 
Utilitários e a biblioteca do núcleo 
18 
 Finalmente, o núcleo tem um biblioteca de funções 
de suporte escritas em linguagem assembly, que 
são incluídaspela compilação de klib.s (ausente 
v.3.2.1), e alguns programas utilitários escritos em C, 
no arquivo misc.c (ausente v.3.2.1) 
 Klib.s, semelhante a mpx.s, seleciona a versão 
específica da máquina apropriada com base na 
definição de WORD_SIZE 
 O código de klib386.s possui cerca de 2 dezenas 
de rotinas utilitárias em assembly, por eficiência ou 
porque não podem ser escritas em C 
Referências 
 TANENBAUM, Andrew S.; WOODHULL, Albert S. 
Sistemas Operacionais: Projeto e 
Implementação. 3ª Ed., Prentice Hall, 2008. 
19

Outros materiais