Como o agendador do kernel sabe que um timeslice passou?

1

Na minha pergunta anterior Como o agendador de kernel sabe como antecipar-se a um processo? Foi-me dada uma resposta sobre como ocorre a preempção.

Agora eu estou querendo saber, como o agendador do kernel sabe que um timeslice passou? Eu li na solução de temporizador de hardware que faz sentido para mim, mas então eu li que os sistemas operacionais mais atuais (por exemplo, Windows, Linux, etc.) não usam temporizadores de hardware, mas sim temporizadores de software.

Como os temporizadores de software podem ser usados para antecipar um processo uma vez que ele tenha tomado o seu prazo (por exemplo, ele não se antecipou a si mesmo). Parece que algum temporizador de hardware seria necessário?

    
por Adam Thompson 22.07.2018 / 23:40

1 resposta

2

It seems like some hardware timer would be necessary?

Sim, o kernel depende do hardware para gerar uma interrupção em intervalos regulares. Nos PCs, esse era, historicamente, o temporizador de intervalo programável 8253/8254 , ou uma emulação dele, então o local APIC local e, em seguida, o HPET .

Os kernels Linux atuais podem ser construídos para rodar “sem marcas” quando possível: o kernel programará temporizadores para serem acionados somente quando necessário, e se uma determinada CPU estiver executando um único processo, isso pode ser “nunca”. Na maioria dos casos, ticks dinâmicos são usados, então o kernel configura temporizadores para disparar em intervalos variados, dependendo de seus requisitos - menos interrupções significam menos wake-ups, o que significa que CPUs inativas podem ser mantidas em modos de baixa energia por períodos mais longos, o que economiza energia.

    
por 23.07.2018 / 11:12