Pergunta

Explicado em suas próprias palavras, o que é preempção eo que isso significa para um (linux) kernel?

Quais são as vantagens e desvantagens em ter um kernel preemptivo?

Foi útil?

Solução

Preferência multitarefa -. Executando vários processos / threads em um único processador, criando a ilusão de que eles executados simultaneamente, quando na verdade cada um está alocado fatias pequenas de tempo multiplexado para executar em um processo é "antecipou" quando é programado para fora de execução e aguarda a próxima fatia de tempo para ser executado em.

A preferência do kernel é aquele que pode ser interrompido no meio da execução de código - por exemplo, em resposta a uma chamada de sistema -. Para fazer outras coisas e executar outros tópicos, possivelmente, aqueles que não estão no kernel

A principal vantagem de um kernel de preferência é que sys-chamadas não bloquear todo o sistema. Se um sys-call leva um longo tempo para terminar, em seguida, isso não significa que o kernel não pode fazer mais nada neste momento. A principal desvantagem é que isto introduz mais complexidade para o código do kernel, ter de lidar com mais finais casos, executar mais de grão fino de bloqueio ou o uso de bloqueio menos estruturas e algoritmos.

Outras dicas

Você realmente deve usar o termo "preferência". Existem diferentes tipos de preempção. Essencialmente, é muito simples e você provavelmente vai perceber isso por um outro nome. Um sistema operacional de preferência pode alternar contextos entre threads modo de usuário sem qualquer programação especial na aplicação preempção. Isto permite a multitarefa. Um sistema operacional pode mudar para longe e volta a um processo e esta mudança é essencialmente trasnparent. Há também tal coisa a como núcleo de preferência, que permite tópicos do modo kernel para ser apropriado (a maioria dos sistemas operacionais não permitem isso, mas é necessário para certas aplicações, tais como em sistemas de tempo real). Nota, esta é uma explicação muito simplificada.

Outros têm adequadamente explicou o que um kernel preemptivo é.

O que é bom para?

Na maior parte dos benefícios são:

  • Baixa latência em sistemas não-SMP - normalmente utilizados em sistemas de tempo real ou para outras coisas, onde a latência é importante (áudio, vídeo aplicativos talvez)
  • desenvolvedores do kernel Ensino que não têm sistemas SMP como escrever código correto para SMP

Com um kernel não-preemptivo, em um sistema de processador único é possível para os desenvolvedores do kernel a ser preguiçoso e fugir sem qualquer bloqueio na maioria das vezes - é claro que isso é um grande falhar em SMP. kernels preemptivos que lhes permitam obter essa dor, sem mais núcleos.

Eu acho que isso pós explica suas perguntas:

o que é preempção?

A capacidade do sistema operacional para antecipar ou parar uma tarefa agendada no momento em favor de uma tarefa de maior prioridade. O escalonamento pode ser um de, mas não se limitando a, processo ou de I / O agendamento etc.

O que é um kernel preempção?

No Linux, programas de espaço de usuário sempre foram preemptivo: os programas de espaço de usuário interrupções do kernel para mudar para outros tópicos, usando o tique do relógio regular. Assim, o kernel não esperar por programas de espaço de usuário para liberar explicitamente o processador (que é o caso em multitarefa cooperativa). Isto significa que um loop infinito em um programa de espaço de usuário não pode bloquear o sistema.

No entanto, até os kernels 2.6, o próprio kernel não era preemtible: assim que um segmento tenha entrado no kernel, ele não poderia ser apropriado para executar um outro segmento. O processador pode ser usado para executar outro segmento quando um syscall foi terminada, ou quando o fio corrente explictly pediu o programador para executar outro segmento utilizando a função de programação (). Isto significa que um loop infinito no código do kernel bloqueado todo o sistema, mas isso não é realmente um problema: o código do kernel é projetado de modo que não há loops infinitos.

Kernel preempção foi introduzido em kernels 2.6, e pode-se ativar ou desativá-lo usando a opção CONFIG_PREEMPT. Se CONFIG_PREEMPT está habilitado, então o código do kernel pode ser apropriado em todos os lugares, exceto quando o código tem interrupções locais com deficiência. Um loop infinito no código já não pode bloquear todo o sistema. Se CONFIG_PREEMPT está desativado, então o comportamento 2.4 é restaurado.

Pros e contras?

Prós:. O kernel preempção pode melhorar a latência e escalabilidade, e ele pode fazer de alta prioridade de execução da tarefa e responder rapidamente

Contras:. Ele faz escrever código difícil no kernel do preempção, especialmente no SMP, e você deve considerar muitos fatores

preempção significa que o SO suporta múltiplas tarefas (uma parte separada, stand-alone de código) e irá alternar entre as tarefas em uma agenda. Quando uma tarefa é interrompida, ele é chamado de "antecipando". OS Modern apoiar esta - mas não é necessário para sistemas simples incorporado, por exemplo. A sobrecarga de apoiar a alternância de tarefas não é sempre vale a pena.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top