Linux Kernel Capítulo 3 – Escalonamento de Processos.

Slides:



Advertisements
Apresentações semelhantes
RFGW-10 (RF Gateway) Visão Geral
Advertisements

TADs Vector, Lista e Sequência
Conversores DC-DC DC-AC AC-DC AC-AC.
Electrónica Industrial Mestrado Energia e Automação Industrial Conversores DC-DC DC-AC AC-DC AC-AC.
ADT – Arvore Binária de Pesquisa
Processos no Linux.
Pilhas e Filas.
Estruturas Fundamentais
Listas Encadeadas Circulares Listas Duplamente Encadeadas
Filas circulares.
Listas Encadeadas Circulares Listas Duplamente Encadeadas
2008 LCG/UFRJ. All rights reserved. 1 Standard Template Library STL Claudio Esperança Paulo Roma Cavalcanti.
Sistemas Operacionais
Process Scheduling Renato de Castro Dutra COPPE/UFRJ Jul/2006
1 Interligação IntServ DiffServ: Mapeamento do Serviço CL no PHB AF António Pereira – Instituto Politécnico de Leiria Edmundo Monteiro – Universidade de.
PGF5001 – Mecânica Quântica 1 Prof. Emerson Passos.
Prof. Celso Gramática Prof. Celso
Grupo Paralelismo – Unesp RC
FORTRAN 90 Denise Yumi Takamura.
INTRODUÇÃO À COMPUTAÇÃO PARALELA
Estruturas de Dados para projeto de SGBD. Estruturas de dados analisadas Estruturas de nível Esparso Denso Combinadas Arvore B+ Tabela de hash.
Vetores (2) Continuação.
Sistemas Operacionais
Prof. Dr. Helder Anibal Hermini
Arquiteturas de 4, 3, 2, 1 e 0 endereços.
(Como implementar multiplicação e divisão uma vez só :-)
Twofish Leonardo H. Furlan.
O que é XtremWeb(XW)? Projeto de pesquisa relacionado a light-weight Grids. Plataforma Open Source para a elaboração de grades baseadas em PCs, desenvolvida.
Slide 1 Rede Nacional de Ensino e Pesquisa Treinamento em Gradep - junho 2005 Serviço ContextManager Treinamento no GRADEp Framework Master-Worker.
Slide 1 Rede Nacional de Ensino e Pesquisa Treinamento em Gradep - junho 2005 Serviço Collector Treinamento no GRADEp Serviço Collector CollectorDemo e.
Repensando a Avaliação da Aprendizagem
DÚVIDAS FREQUENTES SOBRE A PROMOÇÃO DE GRAU 1. Como é feita a indicação para promoção de grau? a) O Presidente da Assoc. dos Preletores escolhe os preletores.
Servidores e Programação Web Redes de Computadores.
Geração de Código Algoritmo de Escalonamento de instruções – List Scheduling.
PotenCial ElÉTRICO Universidade Federal do Paraná
Templates e Questões de Design Programas são geralmente construídos segundo um design que é relativamente bem mapeado nos mecanismos oferecidos pela linguagem.
CT-300 – Seminário de Tese 1/25 Um Framework Padrão para Simulação de Modelos de Robôs Móveis de Robôs Móveis Juliano A. Pereira Prof. Carlos H. C. Ribeiro.
Capitulo 3 Técnicas de Diagnóstico CT-282 Tutores Inteligentes Diego Ajukas.
CES-10 INTRODUÇÃO À COMPUTAÇÃO Aulas Práticas – 2013 Capítulo III Comandos de Controle.
Capítulo IX – Ponteiros 9.1 – Introdução 9.2 – Relação entre ponteiros e variáveis indexadas 9.3 – Alocação dinâmica de memória 9.4 – Variáveis indexadas,
Capítulo V Análise Sintática
Business Process Management e Workflow - jBPM Aluno: Filipe Ferraz Salgado Orientador: Francisco Reverbel Novembro 2006.
BlastPhen Aluno: Ricardo Nishikido Pereira
ALOCAÇÃO DINÂMICA DE MEMÓRIA
8.EQUAÇÕES DIFERENCIAIS ORDINÁRIAS Parte 5
Sistemas Lineares Parte 2
Organização de Sistemas de Computadores
Desempenho A rápida taxa de melhoria na tecnologia de computadores veio em decorrência de dois fatores: avanços na tecnologia utilizada na construção.
Redes Embutidas - Prof a Luiza Mourelle 1 1 Topologias As topologias de redes intrachip podem ser agrupadas em duas classes principais: as redes diretas.
Laboratório de Programação Prof. Oscar Luiz Monteiro de Farias
Capítulo 1 Introdução 1.1 O que é um sistema operacional
Recursividade Estrutura de Dados.
PRINCÍPIOS DE SISTEMA OPERACIONAL Prof. Helder Cleber Almeida Pereira
LINGUAGENS DE PROGRAMAÇÃO
Sistemas Operacionais e Windows XP Aula 04 – DCA0302.
04:27 Introdução Tipos de Fluxo de Dados e de Arquivos Manipulação de Arquivos em Java Classes FileReader e FileWriter Classes FileInputStream e FileOutputStream.
Programação Concorrente com Thread Java
OpenGL Computação Gráfica. O que é OpenGL? Uma linguagem de programação gráfica de baixo nível Projetada para gráfico interativo 2D e 3D Uma interface.
Prof. André Laurindo Maitelli DCA-UFRN
Introdução Ciência da Computação estudo de algoritmos –ÊNFASE ao estudo de DADOS armazenamento manipulação refinamento (a partir de dados cru) estrutura.
INPE / CAP-334 Celso L. Mendes Aula 4-D(1) Reestruturação de Programas em Sistemas Vetoriais (II) Tópicos: Suporte à Paralelização Vetorização.
1 Seja o resultado de um experimento aleatório. Suponha que uma forma de onda é associada a cada resultado.A coleção de tais formas de ondas formam um.
Professor: Hyggo Almeida
Sincronização com Locks. Locks É um mecanismo de sincronização de processos/threads em que estas devem ser programadas de modo que seus efeitos sobre.
INPE / CAP-315 Airam J. Preto, Celso L. Mendes Aula 30 (1) Empacotamento de Dados em MPI Tópicos: Buffer de Mensagem Empacotamento/Desempacotamento.
HandyBoard & Interactive C. HandyBoard Especificações –Clock de 2 MHz –32 Kb de RAM –7 entradas para sensores analógicos –9 entradas para sensores digitais.
Mapeamento de CSP para JCSP Patrícia Muniz (pmf) Rafael Duarte (rmd)
RT-EXPERT Artis Corp. C calling program RTSUB [rule set subroutine] RTSUB [rule set subroutine] RTSUB [rule set subroutine]... DSL Decision Support Language.
Tipos Especiais de Listas
1 Uma proposta para migração de páginas no Linux Guilherme A. A. Tesser (HP/PUCRS) Avelino F. Zorzo (PUCRS) PUCRS/HP – Porto Alegre - Brazil.
Transcrição da apresentação:

Linux Kernel Capítulo 3 – Escalonamento de Processos

Características principais do mecanismo de escalonamento do Linux: Visão Geral Características principais do mecanismo de escalonamento do Linux: Sistema operacional multitarefas; escalonamento preemptivo; utiliza 3 políticas de escalonamento: FIFO, Round-Robin e por Prioridade; prioridades calculadas dinamicamente; timeslice calculado dinamicamente; tratamento diferenciado para os processos do tipo “tempo-real”; kernel preemptivo.

Características principais do mecanismo de prioridades do Linux: Determinando Prioridades Características principais do mecanismo de prioridades do Linux: Duas escalas de prioridade distintas: nice values e real-time priorities; nice values: -20 a 19 real-time: 1 a MAX_RT_PRIO-1 = 99 tanto o usuário quanto o sistema influenciam na determinação das prioridades dos processos; procura beneficiar processos interativos (como??); task_struct.sleep_avg 0 ---- MAX_SLEEP_AVG = 10 ms; Real-time priorities implementadas de acordo com o padrão POSIX; 1 MAX_RT_PRIO MAX_RT_PRIO+40 real time nice values

Características principais do mecanismo de prioridades do Linux: Determinando Timeslices Características principais do mecanismo de prioridades do Linux: O timeslice destinado a cada processo é calculados com base na sua prioridade dinâmica; Mínimo 10 ms Default 100 ms Máximo 200 ms Maior prioridade ou maior interatividade Menor prioridade ou menor interatividade processos filhos ganham a metade do tempo restante no timeslice do seu pai;

O Algoritmo de Escalonamento Metas (alcançadas) para novo escalonador desenvolvido a partir da versão 2.5 do kernel: Garantir complexidade assintótica constante - O(1); implementar escalabilidade SMP (Symmetric Multiprocessing) perfeita; implementar afinidade SMP aprimorada; garantir boa interatividade; garantir justiça entre os processos; otimização para o caso comum onde existem apenas 1 ou 2 processos prontos para execução e ainda funcionar bem para múltiplos processadores cada um com vários processos.

O Algoritmo de Escalonamento Fila de expirados Fila de ativos Round n: Fila de expirados Fila de ativos Round n+1: Starvation??

O Algoritmo de Escalonamento struct runqueue { spinlock_t lock; /* spin lock which protects this runqueue */ unsigned long nr_running; /* number of runnable tasks */ unsigned long nr_switches; /* number of context switches */ unsigned long expired_timestamp; /* time of last array swap */ unsigned long nruninterruptible; /* number of tasks in uinterruptible sleep */ struct task_struct *curr; /* this processor’s currently running task */ struct task_struct *idle; /* this processor’s idle task */ struct mm_struct *prev_mm; /* mm_struct of last running task */ struct prio_array *active; /* pointer to the active priority array */ struct prio_array *expired; /* pointer to the expired priority array */ struct prio_array arrays[2]; /* the actual priority arrays */ int prev_cpu_load[NR_CPUS]; /* load on each processor */ struct task_struct *migration_thread; /* the migration thread on this processor */ struct list_head migration_queue; /* the migration queue for this processor */ atomic_t nr_iowait; /* number of tasks waiting on I/O*/ }

O Algoritmo de Escalonamento struct prio_array { unsigned int nr_active; /* number of taks */ unsigned long bitmap[BITMAP_SIZE]; /* priority bitmap */ struct list_head queue[MAX_PRIO]; /* priority queues */ }; struct list_head { struct list_head *next; /* ponteiro para o próximo nó da lista */ struct list_head *prev; /* ponteiro para o no anterior */

O Algoritmo de Escalonamento arrays[0] queue[0] = queue[1] = . . . . . . queue[MAX_PRIO] = active arrays[1] queue[0] = expired queue[1] = . . . . . . queue[MAX_PRIO] =

O Algoritmo de Escalonamento void schedule(){ struct task_struct *next; struct prio_array *array; struct list_head *queue; int idx; … array = rq->active; ... idx = sched_find_first_bit(array->bitmap); queue = array->queue + idx; next = list_entry(queue->next, task_t, run_list); prev = context_switch(rq, prev, next); }

Principais trabalhos realizados pela função context_swith() : O Algoritmo de Escalonamento Principais trabalhos realizados pela função context_swith() : Chaveamento do mapeamento da memória virtual do processo antigo para o novo processo: através de chamada a função switch_mm() (definida em include/asm/context.h) Salvamento e recuperação de dados de pilha e registradores: através de chamada a função swith_to() (definida em include/asm/system.h)

Privilegiando processos interativos sem starvation : O Algoritmo de Escalonamento Privilegiando processos interativos sem starvation : Função scheduler_tick(), chamada via interrupção de tempo (Capítulo 9): struct task_struct *task = current; struct runqueue *rq = this_rq(); If (! - - task->time_slice){ if ( ! TASK_INTERACTIVE(task) || EXPIRED_STARVING( rq ) ){ enqueue_task( task, rq->expired ); }else{ enqueue_task( task, rq->active ); }

Características principais do balanceamento de carga no Linux: Implementado em kernel/sched.c na função load_balance(); É chamada por schedule() quando a runqueue corrente está vazia ou pelo temporizador do sistema. Em sistemas monoprocessados, nem sequer é compilada com o kernel. Algoritmo: Encontra a runqueue mais ocupada. Se não existe nenhuma runqueue com pelo menos 25% a mais de carga do que a runqueue atual, termina. Decide qual priority array dentro da runqueue mais sobrecarregada será escolhido. O expired é o mais indicado. Por quê? Escolhe a fila de processos de maior prioridade. Por quê? Cada processo desta prioridade é analisado. São escolhidos os melhores. Quais??? Enquanto houver filas desbalanceadas, repete passo 1.

Perguntas??? ? ? ? ? ? ? ?