Como funciona a chamada do sistema sleep?

1

Um aplicativo pode solicitar que o SO pause o processo por 0,5 segundo, mas como isso funciona?

A CPU simplesmente não para de rodar durante esse 0.5 segundo, já que outros programas funcionam bem simultaneamente, então, como podemos pausar a execução de um aplicativo por algum tempo?

Acho que, no entanto, isso é feito para todos os sistemas operacionais.

    
por yanpas 17.01.2015 / 18:43

1 resposta

4

Em um sistema operacional multitarefa, o sistema operacional não precisa fazer nada tão extremo quanto impedir completamente a execução do processador ou preencher o tempo que esse processo estaria usando com outras instruções. Pode fazer algo infinitamente mais simples. Ele simplesmente não pode agendar a tarefa para ser executada.

Esse é o objetivo de um sistema operacional multitarefa. Se todas as tarefas precisarem ser executadas ao mesmo tempo, o SO trancará uma no processador, permitirá que ela seja executada por um período de tempo e, em seguida, realizará a próxima tarefa e continuará até que todas as tarefas que precisam ser executadas tenham suas tarefas executadas. .

Quando uma tarefa sinaliza que deseja suspender por um período de tempo ou aguardar uma tecla, o que efetivamente está dizendo ao sistema operacional é don't bother swapping me onto the processor unless time X has passed ou don't bother running me unless you have event X waiting for me to action it .

Basicamente, o sistema operacional tem uma longa lista de tarefas que precisam ser executadas e, para cada uma delas, seria um descritor "aguardando o evento". Todas as tarefas que estão prontas para serem executadas poderão ser agendadas e quaisquer que não sejam, simplesmente serão ignoradas, simples assim.

Se literalmente houver nenhuma tarefas para rodar no processador em um intervalo de tempo específico, então o sistema operacional agenda um " Idle " tarefa que realmente H a LT a CPU e diga para não executar instruções até que ela seja ativada, geralmente por algum tipo de interrupção. Usar esse método de agendamento de tempo para "não fazer nenhum trabalho" se encaixa bem com o paradigma de um sistema operacional multitarefa também.

Para acordar novamente, a CPU interrompe os "ticks" via RTC (relógio de tempo real) e, além disso, pode configurar o HPET (temporizador de evento de alta precisão) para disparar uma interrupção em um intervalo de tempo específico. Isso permite que o SO interrompa a CPU por períodos de tempo muito precisos e, em seguida, interrompa a CPU para iniciar o processamento das tarefas novamente.

    
por 18.01.2015 / 00:47