Como cada núcleo da CPU pode processar um ou dois encadeamentos de uma só vez, como o SO fica estável mesmo se houver vários encadeamentos em execução?

0

Para explicar mais, suponha que tenhamos uma CPU dual core sem hyper-threading, isso significa que ela pode processar apenas 2 threads de uma só vez, bem, suponha que tenhamos um aplicativo de rede executando dois threads de rede em segundo plano, cada um esperando para conexões de entrada para manipular, para que esses segmentos devem estar executando o tempo todo, agora, por que os processos e segmentos do outro OS ainda estão funcionando ?! como parece para mim, eles não podem ser processados porque há dois encadeamentos que drenam completamente a unidade de processamento da CPU porque eles estão esperando por conexões de entrada de rede e, portanto, eles devem estar prontos a cada nanossegundo para conexões ... Como isso acontece e funciona? Como a CPU pode lidar com muitos e muitos threads de uma vez sem qualquer congelamento perceptível ?! (Eu sei, às vezes, o Windows fica lento e maluco se há muitos programas pesados sendo executados de uma só vez, mas isso não é um problema geral)

Obrigado.

    
por Ayman_Hilal 16.08.2014 / 01:24

3 respostas

5

A resposta é relativamente simples: quando um thread está esperando por um evento de E / S, ele produz o resto de sua fatia de tempo para o SO, que pode então agendar outro thread. Quando a E / S de alta latência for concluída, o encadeamento será marcado como pronto para execução.

Isso é amplamente possível porque a maioria das E / S é gerenciada com interrupções em vez de verificar repetidamente para ver se a solicitação de E / S foi concluída (conhecida como polling).

    
por 16.08.2014 / 01:53
2

Se você usa multitarefa cooperativa e tem um programa ruim: então sim, você está certo.

No entanto, no mundo real, o seguinte deve acontecer:

  1. Multitarefa cooperativa: eu não passo a usar a CPU para sempre. Em vez disso, dará a chance a outro programa depois de algum tempo ou quando ele for bloqueado. A resposta de Paul descreve o segundo.

  2. Multitarefa preventiva (usada praticamente em qualquer lugar): O sistema operacional (não o programa) fornecerá a CPU por um curto período de tempo a um programa e, em seguida, o removerá. Isso pode ser tão simplista quanto a execução de um cronômetro e, uma vez que expira, interrompe o processo e o entrega ao próximo nível / programa que está aguardando.


No seu caso, pense nisso como um escritório com dois trabalhadores e três (ou mais) tarefas. (Vamos chamá-los de tarefa-A, tarefa-B e tarefa-C).

O primeiro trabalhou verifica as ordens dos supervisores que afirmam:

  • Defina um temporizador 10 minutos. Quando ele parar, pare de trabalhar na sua tarefa atual, coloque-a na parte inferior da lista TODO e continue lendo este documento.
  • Em seguida, remova o primeiro item da parte superior da lista TODO e comece a trabalhar nele.
  • Repetir.

Trabalhador 1 define o temporizador e obtém a primeira tarefa da lista TODO (neste caso, a tarefa A).

O Trabalhador 2 faz a mesma coisa: define um temporizador e obtém o que está agora no topo da lista TODO. Desde que o trabalhador 1 removeu a tarefa A do trabalhador 2, agora começa na tarefa B.

Dez minutos depois, o timer se apaga. O trabalhador 1 pára de trabalhar na tarefa A e recebe as instruções dos supervisores. Esses estados colocam a tarefa atual na parte inferior da lista TODO. Continuando as instruções do supervisor, ele agora reinicia o timer e começa a trabalhar no que está agora no topo da lista TODO (que é task-C).

O Trabalhador 2 faz o mesmo e pára a tarefa B e começa com o topo da lista TODO (que no exemplo é tarefa-A)

Etc etc ..

Isso é um pouco simplificado. Mas isso deve lhe dar uma ideia de como dois passos (trabalhadores) podem trabalhar 100% do tempo em três ou mais tarefas.

Em agendadores reais, existem muitas outras coisas. Por exemplo. interrupções (compare com um telefone tocando no meio de uma tarefa e como lidar com isso), agendamento inteligente (dar a mesma tarefa para o mesmo trabalhador provavelmente resultará em uma conclusão mais rápida, já que o trabalhador já está familiarizado com ela), E / S (se um trabalhador precisar de um livro de uma biblioteca, ele não esperará até que o temporizador expire, mas continuará imediatamente com a próxima tarefa, etc. etc.

    
por 16.08.2014 / 14:16
0

O sistema operacional permanece estável praticamente da mesma maneira que permanece estável quando há vários segmentos sendo executados em CPUs diferentes. Do lado de fora do núcleo da CPU, há muito pouca diferença aparente no comportamento entre dois LPs no mesmo núcleo e um LP em cada um dos dois núcleos diferentes. Todas as mesmas técnicas de programação "multiprocessador-seguro", como semáforos, devem ser usadas em ambos os casos.

    
por 31.03.2018 / 02:45