Diferença entre o escalonador de threads do Windows e do Linux

4

Tanto quanto eu posso dizer, ambos usam:

  • Fila de feedback multinível
  • Níveis de prioridade (intervalo diferente)
  • Ambos gerenciam encadeamentos e não o processo

Mas quais são as grandes diferenças?

    
por Chris911 19.04.2012 / 23:59

3 respostas

6

De acordo com Agendando prioridades no MSDN :

Threads are scheduled to run based on their scheduling priority. Each thread is assigned a scheduling priority. The priority levels range from zero (lowest priority) to 31 (highest priority). Only the zero-page thread can have a priority of zero. (The zero-page thread is a system thread responsible for zeroing any free pages when there are no other threads that need to run.)

The system treats all threads with the same priority as equal. The system assigns time slices in a round-robin fashion to all threads with the highest priority. If none of these threads are ready to run, the system assigns time slices in a round-robin fashion to all threads with the next highest priority. If a higher-priority thread becomes available to run, the system ceases to execute the lower-priority thread (without allowing it to finish using its time slice), and assigns a full time slice to the higher-priority thread. The priority of each thread is determined by the following criteria:

  • The priority class of its process
  • The priority level of the thread within the priority class of its process

Acredito que esse agendador de threads descreve um algoritmo chamado fila multinível , que é um algoritmo de agendamento muito mais simples do que a fila de feedback multinível . Observe que o agendador de processo do Windows usa a fila de feedback multinível , de acordo com Wikipedia . Desde o Windows 7 e Windows Server 2008 R2, há também User-Mode Scheduling que permite que os processos gerenciem seus próprios agendamentos de threads.

Como mencionado por outros, o Linux trata processos e encadeamentos da perspectiva do agendamento. O agendamento de processos / threads no Linux é configurável, existem vários algoritmos de agendamento e alguns podem ser configurados recompilando o kernel:

Observe que o padrão acima significa padrão no kernel vanilla. Algumas distribuições são fornecidas com um kernel padrão que é pré-configurado para usar um agendador padrão diferente.

Além do algoritmo de agendamento, há também políticas do agendador : SCHED_FIFO, SCHED_BATCH, SCHED_IDLE, SCHED_OTHER e SCHED_RR; que pode ser alterado em tempo de execução, que descreve o tipo de carga de trabalho que um processo possui.

O agendador padrão atual Completely Fair Scheduler, usa uma árvore vermelha e preta para manter a integridade do agendamento. De Dentro do Linux 2.6 Completely Fair Scheduler :

The main idea behind the CFS is to maintain balance (fairness) in providing processor time to tasks. This means processes should be given a fair amount of the processor. When the time for tasks is out of balance (meaning that one or more tasks are not given a fair amount of time relative to others), then those out-of-balance tasks should be given time to execute.

To determine the balance, the CFS maintains the amount of time provided to a given task in what's called the virtual runtime. The smaller a task's virtual runtime—meaning the smaller amount of time a task has been permitted access to the processor—the higher its need for the processor. The CFS also includes the concept of sleeper fairness to ensure that tasks that are not currently runnable (for example, waiting for I/O) receive a comparable share of the processor when they eventually need it.

But rather than maintain the tasks in a run queue, as has been done in prior Linux schedulers, the CFS maintains a time-ordered red-black tree (see Figure 1). A red-black tree is a tree with a couple of interesting and useful properties. First, it's self-balancing, which means that no path in the tree will ever be more than twice as long as any other. Second, operations on the tree occur in O(log n) time (where n is the number of nodes in the tree). This means that you can insert or delete a task quickly and efficiently.

Então, principais diferenças:

Windows

  • Agendamento de processo usando fila de feedback multinível + Agendamento de thread usando a fila multinível. O agendador de threads simplesmente escolhe o thread de maior prioridade, o agendador de processos é mais inteligente e usa a fila de feedback.

Linux

  • Processo unificado e agendador de threads, configurável, por padrão, usa o CFS. O escalonador usa uma métrica de justiça e usa a prioridade para distorcer a distribuição da CPU para processos de maior prioridade.
por 17.11.2014 / 16:39
1

Se você está se referindo ao agendador de kernel (e não a um agendador de tarefas periódico como alguns comentários sugerem), no Linux é bem fácil: em termos de agendamento, o Linux não faz diferença entre threads e processos. Do ponto de vista do kernel, eles são apenas unidades de agendamento; a diferença depende do peso da troca de contexto. Às vezes, isso é chamado de modelo de segmentação um-para-um .

Como há menos informações disponíveis sobre os recursos internos do Windows, pouco pode ser dito. No entanto, o Windows tem historicamente diferenciado entre processos e threads, por isso é mais provável que eles sejam tratados de forma diferente em termos de agendamento.

    
por 20.04.2012 / 02:36
1

C2H5OH, Por que você diria que não há documentação sobre Internos do Windows quando tudo estiver disponível? Me bate... Você pode ler o máximo do básico aqui, link

Há um artigo na Wikipédia (Threads (computação)) que mostra a maioria das diferenças, mas sem fontes citadas, então ...

    
por 21.05.2013 / 11:43

Tags