A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Linux Kernel – Escalonamento de Processos 09/2005, Por Ângelo N. Vimeney baseado em LOVE, Robert – Linux kernel Development – Developers Library Capítulo.

Apresentações semelhantes


Apresentação em tema: "Linux Kernel – Escalonamento de Processos 09/2005, Por Ângelo N. Vimeney baseado em LOVE, Robert – Linux kernel Development – Developers Library Capítulo."— Transcrição da apresentação:

1 Linux Kernel – Escalonamento de Processos 09/2005, Por Ângelo N. Vimeney baseado em LOVE, Robert – Linux kernel Development – Developers Library Capítulo 3 – Escalonamento de Processos Linux Kernel

2 Linux Kernel – Escalonamento de Processos 09/2005, Por Ângelo N. Vimeney baseado em LOVE, Robert – Linux kernel Development – Developers Library Visão Geral 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 escalonamento do Linux:

3 Linux Kernel – Escalonamento de Processos 09/2005, Por Ângelo N. Vimeney baseado em LOVE, Robert – Linux kernel Development – Developers Library Determinando Prioridades 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 MAX_SLEEP_AVG = 10 ms; Real-time priorities implementadas de acordo com o padrão POSIX; Características principais do mecanismo de prioridades do Linux: real time 1 MAX_RT_PRIOMAX_RT_PRIO+40 nice values

4 Linux Kernel – Escalonamento de Processos 09/2005, Por Ângelo N. Vimeney baseado em LOVE, Robert – Linux kernel Development – Developers Library Determinando Timeslices O timeslice destinado a cada processo é calculados com base na sua prioridade dinâmica; Características principais do mecanismo de prioridades do Linux: processos filhos ganham a metade do tempo restante no timeslice do seu pai; Mínimo 10 ms Default 100 ms Máximo 200 ms Maior prioridade ou maior interatividade Menor prioridade ou menor interatividade

5 Linux Kernel – Escalonamento de Processos 09/2005, Por Ângelo N. Vimeney baseado em LOVE, Robert – Linux kernel Development – Developers Library O Algoritmo de Escalonamento 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. Metas (alcançadas) para novo escalonador desenvolvido a partir da versão 2.5 do kernel:

6 Linux Kernel – Escalonamento de Processos 09/2005, Por Ângelo N. Vimeney baseado em LOVE, Robert – Linux kernel Development – Developers Library Fila de expirados Fila de ativos Round n: O Algoritmo de Escalonamento Fila de expirados Fila de ativos Round n+1: Starvation??

7 Linux Kernel – Escalonamento de Processos 09/2005, Por Ângelo N. Vimeney baseado em LOVE, Robert – Linux kernel Development – Developers Library O Algoritmo de Escalonamento struct runqueue { spinlock_tlock;/* spin lock which protects this runqueue */ unsigned longnr_running;/* number of runnable tasks */ unsigned longnr_switches;/* number of context switches */ unsigned longexpired_timestamp;/* time of last array swap */ unsigned longnruninterruptible;/* number of tasks in uinterruptible sleep */ struct task_struct*curr;/* this processors currently running task */ struct task_struct*idle;/* this processors 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_arrayarrays[2];/* the actual priority arrays */ intprev_cpu_load[NR_CPUS];/* load on each processor */ struct task_struct*migration_thread;/* the migration thread on this processor */ struct list_headmigration_queue;/* the migration queue for this processor */ atomic_tnr_iowait;/* number of tasks waiting on I/O*/ }

8 Linux Kernel – Escalonamento de Processos 09/2005, Por Ângelo N. Vimeney baseado em LOVE, Robert – Linux kernel Development – Developers Library O Algoritmo de Escalonamento struct prio_array { unsigned intnr_active;/* number of taks */ unsigned longbitmap[BITMAP_SIZE];/* priority bitmap */ struct list_headqueue[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 */ };

9 Linux Kernel – Escalonamento de Processos 09/2005, Por Ângelo N. Vimeney baseado em LOVE, Robert – Linux kernel Development – Developers Library queue[0] = queue[1] = queue[MAX_PRIO] = queue[0] = queue[1] = queue[MAX_PRIO] = arrays[0] arrays[1] active expired O Algoritmo de Escalonamento

10 Linux Kernel – Escalonamento de Processos 09/2005, Por Ângelo N. Vimeney baseado em LOVE, Robert – Linux kernel Development – Developers Library O Algoritmo de Escalonamento void schedule(){ structtask_struct *next; structprio_array *array; structlist_head *queue; intidx; … 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); }

11 Linux Kernel – Escalonamento de Processos 09/2005, Por Ângelo N. Vimeney baseado em LOVE, Robert – Linux kernel Development – Developers Library O Algoritmo de Escalonamento 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) Principais trabalhos realizados pela função context_swith() :

12 Linux Kernel – Escalonamento de Processos 09/2005, Por Ângelo N. Vimeney baseado em LOVE, Robert – Linux kernel Development – Developers Library O Algoritmo de Escalonamento Função scheduler_tick(), chamada via interrupção de tempo (Capítulo 9): Privilegiando processos interativos sem starvation : 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 ); }

13 Linux Kernel – Escalonamento de Processos 09/2005, Por Ângelo N. Vimeney baseado em LOVE, Robert – Linux kernel Development – Developers Library Balanceamento de Carga 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: Características principais do balanceamento de carga no Linux: 1.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. 2.Decide qual priority array dentro da runqueue mais sobrecarregada será escolhido. O expired é o mais indicado. Por quê? 3.Escolhe a fila de processos de maior prioridade. Por quê? 4.Cada processo desta prioridade é analisado. São escolhidos os melhores. Quais??? 5.Enquanto houver filas desbalanceadas, repete passo 1.

14 Linux Kernel – Escalonamento de Processos 09/2005, Por Ângelo N. Vimeney baseado em LOVE, Robert – Linux kernel Development – Developers Library Perguntas??? ? ? ? ? ? ? ?


Carregar ppt "Linux Kernel – Escalonamento de Processos 09/2005, Por Ângelo N. Vimeney baseado em LOVE, Robert – Linux kernel Development – Developers Library Capítulo."

Apresentações semelhantes


Anúncios Google