Qual é a diferença entre o Kernel Não Preventivo, Preemptivo e Preemptivo Seletivo?

13

Qual é a diferença entre um Kernel "não preemptivo", "Preemptivo" e "Preferência Seletiva"?

Espero que alguém possa lançar alguma luz sobre isso.

    
por Sen 28.12.2010 / 07:24

3 respostas

9

Em um kernel preemptivo, um processo em execução no modo kernel pode ser substituído por outro processo enquanto no meio de uma função do kernel.

Isso se aplica apenas aos processos em execução no modo kernel, uma CPU executando processos no modo de usuário é considerada "inativa". Se um processo no modo de usuário quiser solicitar um serviço do kernel, ele deve emitir uma exceção que o kernel possa manipular.

Como exemplo:

Processo A executa um manipulador de exceções, Processo B é ativado por uma solicitação de IRQ, o kernel substitui o processo A por B (um comutador de processo forçado). O processo A é deixado inacabado. O agendador decide depois se o processo A recebe ou não o tempo de CPU.

Em um kernel não preemptivo, o processo A teria usado todo o tempo do processador até que ele termine ou voluntariamente decida permitir que outros processos o interrompam (uma comutação de processo planejada).

Os sistemas operacionais atuais baseados em Linux geralmente não incluem um kernel totalmente preventivo, ainda existem funções críticas que precisam ser executadas sem interrupção. Então eu acho que você poderia chamar isso de "kernel preventivo seletivo".

Além disso, existem abordagens para tornar o kernel Linux (quase) totalmente preventivo.

por 28.12.2010 / 13:48
1

the preemption is -> The ability of the operating system to preempt or stop a currently scheduled task in favour of a higher priority task. The scheduling may be one of, but not limited to, process or I/O scheduling etc.

Under Linux, user-space programs have always been preemptible : the kernel interrupts user-space programs to switch to other threads, using the regular clock tick. So, the kernel doesn't wait for user-space programs to explicitly release the processor (which is the case in cooperative multitasking). This means that an infinite loop in an user-space program cannot block the system.

However, until 2.6 kernels, the kernel itself was not preemtible : as soon as one thread has entered the kernel, it could not be preempted to execute an other thread. However, this absence of preemption in the kernel caused several problems with regard to latency and scalability. So, kernel preemption has been introduced in 2.6 kernels, and one can enable or disable it using the CONFIG_PREEMPT option. If CONFIG_PREEMPT is enabled, then kernel code can be preempted everywhere, except when the code has disabled local interrupts. An infinite loop in the code can no longer block the entire system. If CONFIG_PREEMPT is disabled, then the 2.4 behaviour is restored.

ReQuote e formatado de: link

    
por 28.12.2010 / 08:19
0

Um kernel preemptivo permite que um processo seja preempted enquanto ele está sendo executado no modo kernel. Um kernel não preempitivo não permite que um processo em execução no modode do kernel seja preterido; um processo no modo kernel será executado até sair do modo kernel, bloqueia ou voluntariamente gera o controle da CPU. Obviamente, um não-preemptivo O kernel é essencialmente livre de condições de corrida nas estruturas de dados do kernel, já que apenas um processo está ativo no kernel por vez. Nós não podemos dizer o mesmo sobre núcleos preemptivos, por isso devem ser cuidadosamente projetados para garantir que os dados do kernel estão livres de condições de corrida. Kernels preemptivos são especialmente difícil projetar para arquiteturas SMP, já que nesses ambientes é possível para dois processos do modo kernel para executar simultaneamente em diferentes processadores. Um kernel preemptivo é mais adequado para programação em tempo real, já que permitir que um processo em tempo real anteceda um processo atualmente em execução no kernel. Além disso, um kernel preemptivo pode ser mais responsivo, já que há menos risco de que um processo no modo kernel seja executado por um período arbitrariamente longo antes renunciando o processador aos processos de espera. Claro, esse efeito pode ser minimizado projetando o código do kernel que não se comporta dessa maneira. Mais tarde Neste capítulo, exploramos como vários sistemas operacionais gerenciam a preempção dentro do kernel.

    
por 23.10.2017 / 07:32

Tags