O próprio agendador de processos do Unix é um processo?

6

O próprio agendador de processos do Unix é um processo, ou ele se conecta a outros processos da mesma forma que uma chamada de sistema (executando o código do kernel no processo do usuário com o conjunto de bits do kernel)?

    
por Ellen Spertus 15.09.2014 / 22:49

1 resposta

5

Um agendador de processos Unix não é realmente "piggy back" em uma chamada de sistema. A execução do agendador faz parte de praticamente qualquer chamada de sistema.

Uma chamada de sistema read() ou uma chamada de sistema exit() tem absolutamente que fazer com que o agendador seja executado. No caso de um read() , um acesso ao disco pode levar muito tempo. A menos que você queira que tudo fique muito lento, você precisa executar o agendador para ver qual processo deve ser executado enquanto o primeiro processo espera que o disco retorne com dados. Um read() pode acontecer em um soquete - o tempo que leva para os dados retornarem de algum servidor remoto é indeterminado. O kernel deve reprogramar algum outro processo. No caso de um exit() , o processo que faz a chamada do sistema não deseja mais existir, portanto, algum outro processo deve ser planejado. Para um pause() ou um alarm() , o processo deseja executar algum tempo no futuro. Novamente, o agendador precisa escolher outro processo para executar.

Acredito que a maioria das chamadas de sistema, mas não todas, fazem com que o programador Unix / Linux / * BSD seja executado. Às vezes, gettimeofday() não faz com que o agendador seja executado - o Solaris costumava funcionar dessa maneira. Mas, em geral, você pode pensar com segurança em uma chamada do sistema executando o trabalho (enviando dados pela NIC, configurando uma leitura ou gravação em disco, fazendo o trabalho de saída do processo, bifurcando, etc.), executando o agendador e executando qualquer o processo deve ser executado em seguida. Às vezes, esse é o mesmo processo que fez a chamada do sistema, mas na maior parte do tempo, não é.

    
por 16.09.2014 / 00:23