Baixe o app para aproveitar ainda mais
Prévia do material em texto
1 Sistemas OperacionaisSistemas Operacionais Escalonamento da CPU 2 Escalonamento de CPUEduardo Nicola F. Zagari EscalonamentoEscalonamento dada CPUCPU n Conceitos Básicos n Escalonamento de Processador n Critérios de Escalonamento n Escalonamento Não Preemptivo n Escalonamento Preemptivo n Mecanismos de Interrupção em Intervalos de Tempo n Prioridades n Algoritmos de Escalonamento n Escalonamento para Vários Processadores n Escalonamento em Tempo Real n Estudo de Casos: Escalonamento no Unix, Windows XP, Linux e de Threads 2 3 Escalonamento de CPUEduardo Nicola F. Zagari ConceitosConceitos BásicosBásicos n Multiprogramação: corresponde a diversos programas distintos executando em um mesmo processador l maximiza utilização da CPU n No entanto, somente um processo é executado a cada instante em um processador n Toda vez que um processo tiver que esperar (evento ou E/S) outro processo usa a CPU (“ciclo de vida” de um processo) l A execução de um processo consiste de um ciclo de execução de CPU e espera de I/O pronto bloqueado execução E/S ou evento interrupção espera por E/S ou evento escalonado EscalonadorEscalonador 4 Escalonamento de CPUEduardo Nicola F. Zagari SeqüênciaSeqüência AlternadaAlternada de “de “RajadasRajadas” de CPU e I/O” de CPU e I/O 3 5 Escalonamento de CPUEduardo Nicola F. Zagari Escalonamento de ProcessadorEscalonamento de Processador n Conhecido como Escalonador de Processsos n Determina/Escolhe, dentre os processos que estão em memória, qual processo será associado a uma CPU, quando esta estiver disponível n Age sobre os processos prontos para executar (processos do estado de pronto) n Segue uma política de escolha n Executado várias vezes por segundo n Reside permanentemente na memória 6 Escalonamento de CPUEduardo Nicola F. Zagari Escalonamento de ProcessadorEscalonamento de Processador n Situação para escalonamento: l processo passa do estado em execução para pronto l processo passa de em execução para espera/bloqueado l processo passa de espera/bloqueado para pronto l processo termina n Preempção: é quando um processo em estado de pronto tem precedência sobre o que está usando a CPU. n Escalonamenteo Não-Preemptivo: não contempla as preempções, isto é, o escalonador não interrompe os processos que estão em execução. n Escalonamento Preemptivo: que contempla a preempção das tarefas, isto é, provoca uma interrupção forçada de um processo para que outro, com a preempção, possa usar a CPU. 4 7 Escalonamento de CPUEduardo Nicola F. Zagari Escalonamento de Curto PrazoEscalonamento de Curto Prazo n Determina qual processo no estado pronto para executar será associado a uma CPU, quando esta estiver disponível n É executado várias vezes por segundo n Reside permanentemente na memória 8 Escalonamento de CPUEduardo Nicola F. Zagari Escalonamento de Médio PrazoEscalonamento de Médio Prazo (Nível Intermediário)(Nível Intermediário) n Determina quais os processos que poderão competir pela CPU n Responsável pela suspensão e ativação de processos, o que significa flutuações na carga do sistema visando um melhor balanceamento n Atua como um buffer entre a admissão de jobs e a associação da CPU aos processos que constituem os jobs admitidos n Job: é um conjunto de atividades necessárias para a realização do trabalho computacional requerido por um usuário (divide-se em diversos steps (passos) ) 5 9 Escalonamento de CPUEduardo Nicola F. Zagari Escalonamento de Longo Prazo (Alto Nível)Escalonamento de Longo Prazo (Alto Nível) n Determina quais jobs serão admitidos e poderão competir pelos recursos do sistema (admission scheduling) n Permite que não existam jobs em demasia no sistema, o que acarretaria uma eterna competição pelos recursos n Todo job, uma vez admitido, acarreta na criação de um ou mais processos 10 Escalonamento de CPUEduardo Nicola F. Zagari DispatcherDispatcher n O módulo Dispatcher dá o controle da CPU para o processo selecionado pelo escalonador de curto prazo. Isto envolve: l Troca de contexto l Mudança do processador para o Modo Usuário l Salto para a localização adequada no programa do usuário para o seu reinício n Latência de Despacho – tempo que leva para o dispatcher parar um processo e reiniciar a execução de outro 6 11 Escalonamento de CPUEduardo Nicola F. Zagari Critérios de EscalonamentoCritérios de Escalonamento n Utilização da CPU: % do tempo que a CPU fica ocupada (0 - 100%) n Throughput: número de processos completados por unidade de tempo n Turnaround: intervalo de tempo entre a submissão de um processo e sua finalização (soma dos intervalos esperando para ser carregado na memória, fila de pronto, em execução e em espera) n Tempo de espera: tempo que cada processo fica na fila de pronto n Tempo de resposta: tempo que o processo demora para produzir alguma resposta à uma requisição (importante para processos interativos) n É desejável maximizar os 2 primeiros e minimizar os 3 últimos n Para sistemas interativos, é importante minimizar a variância do tempo de resposta (previsibilidade) 12 Escalonamento de CPUEduardo Nicola F. Zagari ObjetivosObjetivos n Objetivos das políticas de escalonamento: l maximizar a utilização da CPU l maximizar o throughput l minimizar o turnaround l minimizar o tempo de espera l minimizar o tempo de resposta l ser justa l maximizar o número de usuários interativos l ser previsível l minimizar o uso de recursos l balancear o uso de recursos l balancear usuários interativos com os demais l priorizar processo que segurem recursos chave l não degradar o sistema l etc 7 13 Escalonamento de CPUEduardo Nicola F. Zagari Escalonamento Não Escalonamento Não PreemptivoPreemptivo n Não permite a retirada da CPU de um processo após este tê-la conseguido n Tempo de resposta é mais previsível É mais justo? n Processos curtos precisam esperar pelos longos n Permite monopolização da CPU 14 Escalonamento de CPUEduardo Nicola F. Zagari Escalonamento Escalonamento PreemptivoPreemptivo n Permite que a CPU seja retirada de um processo para ser entregue a outro n Garante que os processos possam progredir uniformemente n Não permite a monopolização da CPU n Usado para: l atendimento rápido de processos mais importantes l tratamento de interrupções em sistemas de tempo real l atender os usuários em sistemas de tempo compartilhado n A mudança de contexto envolve sobrecarga 8 15 Escalonamento de CPUEduardo Nicola F. Zagari Mecanismos de Interrupção Mecanismos de Interrupção em Intervalos de Tempoem Intervalos de Tempo n Para prevenir processos do usuário de monopolizar o sistema (CPU), por acidente ou de propósito, uma interrupção por tempo é usada 4é o tempo limite para uso da CPU, após o qual ocorre a interrupção por tempo n Um processo do usuário, uma vez interrompido por término do seu quantum, volta à fila de pronto para executar e permite o escalonamento de outro processo n Um processo em execução mantém controle sobre a CPU até: l voluntariamente liberá-la l quantum time expirado l outra interrupção exija atenção da CPU para que seja tratada l erro de execução quantum ou time-slice 16 Escalonamento de CPUEduardo Nicola F. Zagari PrioridadesPrioridades n Podem ser fixas (estáticas) durante a vida do processo ou modificáveis (dinâmicas) n Podem ser associadas externamente ou de maneira automática n Podem ser calculadas e associadas de forma racional ou arbitrária 9 17 Escalonamento de CPUEduardo Nicola F. Zagari Algoritmos de EscalonamentoAlgoritmos de Escalonamento n FIFO (First-In First-Out) (também conhecido por FCFS (First- Come First-Served)) n SJF (Shortest Job First) n Round-Robin n SRT (Shortest Remaining Time) n Prioridade n Múltiplas Filas n Múltiplas Filas com Realimentação n Escalonamento para Vários Processadores n Escalonamento de Tempo Real l Earliest Deadline 18 Escalonamento de CPUEduardo Nicola F. Zagari FIFO (FIFO (FirstFirst--InIn FirstFirst--OutOut)) FCFS (FirstFCFS(First--Come, FirstCome, First--Served)Served) n Não preemptivo (Uma vez em execução, é executado até o término) n O processo que chegar primeiro (first-in) é o primeiro a ser selecionado para execução (first-out) n Implementado através de fila n Inicialmente criado para sistemas batch n Injusto com jobs curtos (veja exemplos!) n Ineficiente para sistemas de tempo compartilhado n Combinado com outros esquemas 10 19 Escalonamento de CPUEduardo Nicola F. Zagari n Turnaround médio = ( 10 + 12 + 14 ) / 3 = 12 u.t. n Tempo de espera médio = ( 0 + 10 + 12) / 3 = 7,33 u.t. FIFO (FIFO (FirstFirst--InIn FirstFirst--OutOut)) FCFS (FirstFCFS (First--Come, FirstCome, First--Served)Served) Suponha que os processos cheguem na ordem P1, P2 e P3 20 Escalonamento de CPUEduardo Nicola F. Zagari FIFO (FIFO (FirstFirst--InIn FirstFirst--OutOut)) FCFS (FirstFCFS (First--Come, FirstCome, First--Served)Served) n Turnaround médio: ( 14 + 2 + 4 ) / 3 = 6,67 u.t. n Tempo de espera médio = ( 4 + 0 + 2) / 3 = 2 u.t. Suponha que os processos cheguem na ordem P2, P3 e P1 11 21 Escalonamento de CPUEduardo Nicola F. Zagari SJF (ShortestSJF (Shortest--JobJob--First)First) n Não preemptivo n O processo com o menor tempo para ser completado é escolhido l quando a informação sobre o tempo de execução não se encontra disponível deve ser estimado ou usa-se o da última vez l desempate pode ser, por exemplo, por FIFO n Reduz tempo médio de espera mais do que isto: SJF é ótimo, pois dá o tempo de espera mínimo para um dado conjunto de processos n No entanto, apresenta uma grande variância no tempo de espera 22 Escalonamento de CPUEduardo Nicola F. Zagari SJF (ShortestSJF (Shortest--JobJob--First)First) n Turnaround médio FIFO: (6+14+21+24)/4 = 16,25 u.t. n Tempo de espera médio: (0 + 6 + 14 + 21)/4 = 10,25 u.t. n Turnaround médio SJF: (3 + 9 + 16 + 24) / 4 = 13 u.t. n Tempo de espera médio: (3 + 16 + 9 + 0) / 4 = 7 u.t. 12 23 Escalonamento de CPUEduardo Nicola F. Zagari Escalonamento CooperativoEscalonamento Cooperativo n O processo em execução libera voluntariamente a CPU retornando para a fila de pronto sem a interrupção do sistema operacional (não preemptivo) n Um programa mal escrito pode monopolizar a CPU n Fila de mensagem é verificada periodicamente (Win 3.11) 24 Escalonamento de CPUEduardo Nicola F. Zagari Round Robin (RR)Round Robin (RR) ouou Escalonamento CircularEscalonamento Circular n Define-se uma unidade de tempo denominada quantum ou time- slice (usualmente de 10 a 100ms) que corresponde ao tempo limite para uso da CPU por cada processo n Após este tempo ter sido passado, o processo sofre preempção e é colocado no final da fila de pronto n A fila de pronto é tratada como uma fila circular (FIFO) n O escalonador “pega” o primeiro processo da fila de pronto para ser executado e define um timer para o tempo de 1 quantum n Se o tempo de execução for maior que 1 quantum, o timer gera uma interrupção e o SO faz o chaveamento de contexto n Projetado para sistemas de tempo compartilhado l Se houver n processos na fila de pronto e o tempo do quantum for q, então cada processo obtém 1/n do tempo da CPU e fatias de no máximo q unidades de tempo por vez. Nenhum processo espera por mais que (n-1)q unidades de tempo. 13 25 Escalonamento de CPUEduardo Nicola F. Zagari Round Robin (RR)Round Robin (RR) ouou Escalonamento CircularEscalonamento Circular n Claramente preemptivo n O tempo médio de espera é alto n O desempenho depende do tamanho do quantum l se for muito grande (infinito) FIFO l se for muito pequeno, o overhead com ochaveamento de contexto se torna alto demais... Quantum Tempo de chaveamento % 20 5 1/5 500 5 ~1/100 tende a 26 Escalonamento de CPUEduardo Nicola F. Zagari Round Robin (RR)Round Robin (RR) ouou Escalonamento CircularEscalonamento Circular Quantum = 1 u.t. n Turnaround médio RR: (16 + 8 + 9) /3 = 11 u.t. n Tipicamente, o turnaround médio é maior que o do SJF, mas o tempo de resposta é melhor 14 27 Escalonamento de CPUEduardo Nicola F. Zagari SRT (SRT (ShortestShortest RemainingRemaining Time)Time) n É a contra-partida preemptiva do SJF n O processo com menor tempo para ser completado é escolhido n Um processo em execução é interrompido se um novo processo, com menor tempo para ser completado aparece na fila de pronto n Apresenta sobrecarga maior que o SJF l Variações: 4Tempo para ser completado pequeno 4Tempo para ser completado do processo que chega é pouco menor 28 Escalonamento de CPUEduardo Nicola F. Zagari n Turnaround médio SRT: ((17-0)+(5-1)+(26-2)+(10-3))/4 = 13 u.t. n E qual é o turnaround médio se fosse escalonado segundo SJF? l Resp.: 14,25 u.t. Processo Tempo de chegada Tempo de execução P1 0 8 P2 1 4 P3 2 9 P4 3 5 SRT (SRT (ShortestShortest RemainingRemaining Time)Time) 15 29 Escalonamento de CPUEduardo Nicola F. Zagari Escalonamento por PrioridadeEscalonamento por Prioridade n Uma prioridade é associada a cada processo e a CPU é alocada ao processo de maior prioridade n SJF é um caso de escalonamento por prioridade em que a prioridade é maior para os processos de menor tempo de execução n A prioridade é geralmente representada por um número (entre 0- 7 ou 0-255), mas não existe uma convenção de qual número (o maior ou o menor) é o de maior prioridade n Pode ser preemptivo ou não n SJF é um Escalonamento por Prioridade onde a prioridade é definida de acordo com o tempo de CPU estimado do processo 30 Escalonamento de CPUEduardo Nicola F. Zagari (cont.) Escalonamento por Prioridade(cont.) Escalonamento por Prioridade n Turnaround médio: (16+1+6+18+19)/4 = 15 u.t. Processo Tempo de execução Prioridade P1 10 3 P2 1 1 P3 2 3 P4 1 4 P5 5 2 16 31 Escalonamento de CPUEduardo Nicola F. Zagari (cont.) Escalonamento por Prioridade(cont.) Escalonamento por Prioridade n Prioridade definida: l internamente: usa alguma quantidade mensurável para computar a prioridade. (dinâmica) 4Ex.: memória, arq. abertos, razão I/O por CPU usada l externamente: importância do processo, departamento de origem, fatores políticos, hierarquia. (estática) n Problema: starvation - processos de baixa prioridade podem ficar indefinidamente no estado de pronto (IBM 7094 no MIT processo rodando por 6 anos) n Solução: aumentar progressivamente a prioridade dos processos que estão aguardando 32 Escalonamento de CPUEduardo Nicola F. Zagari Possibilidade de starvation n Os processos são previamente divididos em grupos em função do tipo de processamento realizado l Interativo (foreground) l Batch (background) n A cada grupo é aplicado um mecanismo de escalonamento adequado l Interativo – RR l Batch – FIFO Múltiplas FilasMúltiplas Filas Fila de processos batch Fila de processos batch Fila de processos interativos Fila de processos interativos Fila de processos do sistema Fila de processos do sistema Alta prioridade Baixa prioridade nOutra alternativa: time-slices entre filas (ex.: 80% para os interativos em RR e 20% para os batch em FIFO) 17 33 Escalonamento de CPUEduardo Nicola F. Zagari Múltiplas Filas com RealimentaçãoMúltiplas Filas com Realimentação n Os processos não permanecem em uma mesma fila até o término do processamento n O SO faz um ajuste dinâmico (mecanismo adaptativo) para ajustar os processos em função do comportamento do sistema n Os processos não são previamente associados às filas, mas direcionados pelo sistema entre as diversas filas com base no seu comportamento n Parâmetros: l número de filas, l algoritmo de escalonamento para cada fila, l método para mudar (promover ou rebaixar) o processo de fila, l método para determinar em que fila um processo entra n Método mais complexo 34 Escalonamento de CPUEduardo Nicola F. Zagari Múltiplas Filas com RealimentaçãoMúltiplas Filas com Realimentação n Um exemplo (existem outras variações): l Processos novos entram no fim da primeirafila l Nas filas, os processos são escalonados segundo Round Robin l O quantum varia de uma fila para outra (aumenta em direção às últimas, quantum 1 para a primeira, 2 para a segunda, etc) l Os processos das primeiras filas têm maior prioridade (um processo não pode ser escolhido, a menos que, as filas anteriores estejam vazias) l Um processo em execução é interrompido, caso apareça um processo em uma das filas anteriores à sua l Sempre que um processo esgotar seu quantum , ele é suspenso na fila da próxima classe de prioridade l Se o processo liberar a CPU, sem preempção, sai da estrutura de filas l Quando um processo volta à estrutura, é colocado em uma fila de prioridade mais alta do que estava antes de sair 18 35 Escalonamento de CPUEduardo Nicola F. Zagari Múltiplas Filas com RealimentaçãoMúltiplas Filas com Realimentação Fila 3Fila 3 Fila 2Fila 2 Fila 1Fila 1 Alta prioridade Baixa prioridade Fila NFila N ... Menor quantum Maior quantum 36 Escalonamento de CPUEduardo Nicola F. Zagari Múltiplas Filas com RealimentaçãoMúltiplas Filas com Realimentação n Vantagens de uma política como esta: l Processos CPU-bound vão caindo em filas de prioridade mais baixas, sendo escolhidos para rodar com menos freqüência; no entanto, eles recebem quanta maiores, necessitando receber a CPU por um número menor de vezes, o que reduz a quantidade trocas de contexto l Processos interativos (I/O-bound), normalmente pequenos, são favorecidos, reduzindo-se o tempo de resposta médio do sistema l Processos interativos grandes, após interação com usuários, retornam em filas de prioridade mais alta n Problema: pressionar <ENTER> em terminais processando longos jobs não interativos (CPU-bound) n Moral da história: implementar uma boa política na prática é muitíssimo mais difícil do que idealizá-la 19 37 Escalonamento de CPUEduardo Nicola F. Zagari EscalonamentoEscalonamento para Vários Processadorespara Vários Processadores n Escalonamento mais complexo n Processadores idênticos (homogêneos) l Compartilhamento de carga (load sharing) l Fila por processador: processador pode ficar ocioso l Fila única: compartilhamento de dados (problemas!) n Abordagens: l Processamento simétrico 4Cada processador faz seu próprio escalonamento (exclusão mútua!) l Mestre-Escravo: processamento assimétrico 4um algoritmo, executado em um processador reservado para esse fim, é o escalonador dos outros processadores (alivia a necessidade de compartilhamento de dados) 38 Escalonamento de CPUEduardo Nicola F. Zagari Escalonamento de Tempo RealEscalonamento de Tempo Real n Sistemas de tempo real: requisitos temporais l Tempo compartilhado puro não funciona l Hard real-time: requisitos temporais rígidos à requer que uma tarefa crítica seja completada dentro de um tempo garantido 4Ex.: tráfego aéreo, armas, sistemas médicos, controle industrial, etc l Soft real-time: requisitos temporais flexíveis à requer que um processo crítico receba prioridade sobre outros menos importantes 4Ex.: multimídia, realidade virtual, etc n Sistemas de TR rígidos: processadores dedicados n Sistemas de TR flexíveis: l Implementados com outros esquemas l Processos críticos devem ter prioridade sobre outros l Implica na degradação do serviço dos outros usuários 20 39 Escalonamento de CPUEduardo Nicola F. Zagari EarliestEarliest DeadlineDeadline n Escalonamento baseado em prioridades dinâmicas n A idéia básica é atribuir sempre a maior prioridade ao processo que apresentar o prazo mais próximo a expirar (earliest deadline) n Sempre que um novo processo chega na fila de pronto, são calculadas e atribuídas novas prioridades a todos n O Earliest Deadline é um algoritmo ótimo, isto é, o fator de utilização da CPU é 100% n Se os processos não forem independentes: l Problema da Inversão de Prioridades 4Solução: Protocolo de Herança de Prioridade – Conseqüência: queda no fator de utilização da CPU 40 Escalonamento de CPUEduardo Nicola F. Zagari EscalonamentoEscalonamento no Solaris 2no Solaris 2 21 41 Escalonamento de CPUEduardo Nicola F. Zagari Escalonamento no UnixEscalonamento no Unix n Unix à Sistema de Tempo Compartilhado l Meta: bom tempo de resposta aos processos interativos n Escalonamento de 2 níveis n Escalonador de baixo nível: Filas Múltiplas (prioridade) com realimentação l Processos executando em modo kernel: prioridade negativa (que são as maiores) l Processos executando em modo usuário: prioridade positiva l Roda primeiro processo da fila prioritária não vazia à interrupções de tempo: incremento do contador de utilização da CPU (que aumentará o valor da prioridade do processo) l Round-Robin dentro de cada fila l A cada segundo as prioridades são recalculadas: 4Contadores de uso da CPU divididos por 2 4Nova prioridade = base + nice + contador de uso da CPU l Processos interativos voltam do bloqueio com prioridade negativa. 42 Escalonamento de CPUEduardo Nicola F. Zagari PrioridadesPrioridades no Windows XPno Windows XP 22 43 Escalonamento de CPUEduardo Nicola F. Zagari EscalonamentoEscalonamento no Linuxno Linux n Dois algoritmos: time-sharing e real-time n Time-sharing l Prioridades baseadas em créditos – processo com mais créditos é o próximo a ser escalonado l Crédito subtraído quando ocorre uma interrupção por tempo l Quando crédito = 0, outro processo é escolhido l Quando todos os processos têm crédito = 0, ocorre “recarregamento” de créditos 4Baseado em alguns fatores como prioridade e histórico n Real-time l Soft real-time (TR Flexível) l Aderente ao Posix.1b – duas classes 4FIFO e RR 4Processos de maior prioridade sempre executam primeiro 44 Escalonamento de CPUEduardo Nicola F. Zagari EscalonamentoEscalonamento de Threadsde Threads n Escalonamento Local – Como a biblioteca de threads decide qual thread do usuário executar quando há um LWP disponível n Escalonamento Global – Como o kernel decide qual kernel thread deve ser a próxima a ser executada 23 45 Escalonamento de CPUEduardo Nicola F. Zagari EscalonamentoEscalonamento API API PthreadPthread #include <pthread.h> #include <stdio.h> #define NUM THREADS 5 int main(int argc, char *argv[]) { int i; pthread t tid[NUM THREADS]; pthread attr t attr; /* get the default attributes */ pthread attr init(&attr); /* set the scheduling algorithm to PROCESS or SYSTEM */ pthread attr setscope(&attr, PTHREAD SCOPE SYSTEM); /* set the scheduling policy - FIFO, RT, or OTHER */ pthread attr setschedpolicy(&attr, SCHED OTHER); /* create the threads */ for (i = 0; i < NUM THREADS; i++) pthread create(&tid[i],&attr,runner,NULL); 46 Escalonamento de CPUEduardo Nicola F. Zagari EscalonamentoEscalonamento API API PthreadPthread /* now join on each thread */ for (i = 0; i < NUM THREADS; i++) pthread join(tid[i], NULL); } /* Each thread will begin control in this function */ void *runner(void *param) { printf("I am a thread\n"); pthread exit(0); } 24 47 Escalonamento de CPUEduardo Nicola F. Zagari EscalonamentoEscalonamento de Thread Javade Thread Java n JVM usa um algoritmo de escalonamento baseado em prioridades e preemptivo n Uma fila FIFO é usada se houver múltiplas threads com a mesma prioridade n JVM escalona uma thread para executar quando: 1. A thread “em execução” sai do estado de “executável” 2. Uma thread de maior prioridade entra no estado “executável” * Nota – a JVM não especifica se threads são “Time-Sliced” ou não 48 Escalonamento de CPUEduardo Nicola F. Zagari TimeTime--SlicingSlicing Uma vez que a JVM não assegura Time-Slicing, o método yield() pode ser usado: while (true) { // perform CPU-intensive task . . . Thread.yield(); } Isto passa o controle a uma outra thread de igual prioridade 25 49 Escalonamento de CPUEduardo Nicola F. Zagari PrioridadesPrioridades de Threads de Threads Prioridade Comentário Thread.MIN_PRIORITY Prioridade Mínima de Thread Thread.MAX_PRIORITY Prioridade Máxima de Thread Thread.NORM_PRIORITY Prioridade Defaultde Thread As prioridades podem ser ajustadas usando-se o método setPriority(): setPriority(Thread.NORM_PRIORITY + 2);
Compartilhar