Existem dois agendadores separados nos principais sistemas operacionais, um para processos e um para seus threads? [fechadas]

1

Vamos supor que um processo receba a CPU em um sistema de CPU de núcleo único pelo planejador e vamos supor que esse processo tenha 10 threads. Quem decide qual dos dez threads recebe a CPU?

Em outras palavras, existem dois agendadores separados no sistema operacional? Um para processos e outro para seus segmentos?

    
por JohnnyFromBF 29.06.2014 / 17:27

1 resposta

3

No Windows, o agendador agenda os segmentos. Ou seja, todas as decisões relacionadas a "o que deve ser executado a seguir" são realmente "qual segmento deve ser executado a seguir" e são feitas com base nos atributos do encadeamento (sua prioridade, sua configuração de afinidade, (às vezes) há quanto tempo . Não de processos.

Sim, o Gerenciador de tarefas permite alterar a prioridade ou a afinidade de um processo. Mas essas mudanças são simplesmente propagadas para - ou seja, herdadas por todos os seus segmentos. E a prioridade de um thread, a afinidade, etc., podem ser alteradas a partir do que herdou de seu processo.

Como um encadeamento faz parte de um processo, e um encadeamento em execução precisa ter seu processo mapeado, faria pouco sentido agendar processos de forma independente.

Quando o planejador seleciona um novo encadeamento para execução, se o novo encadeamento estiver em um processo diferente do anterior que foi executado no processador que está "alternando", uma alternância de contexto do processo será feita como parte do comutador de contexto do encadeamento . Essa é a extensão em que os processos são "programados".

Alterar o contexto do processo envolve pouco mais do que carregar o registrador CR3 com o número da página física da tabela de páginas de nível superior do novo processo.

    
por 31.01.2017 / 09:14