O SO aloca cada processo em um núcleo separado?

15

Ok, eu conheço o argumento clássico para evitar quad core. No nível do aplicativo, a maioria dos aplicativos não foi gravada para vários núcleos. A maioria dos softwares de desktop nem precisa de paralelismo.

No entanto, no nível do sistema operacional, parece óbvio que o sistema operacional dividiria os processos entre os vários núcleos. Isso não seria, por si só, um argumento para obter mais núcleos? Isso não ajuda muito em muitas situações? Você realiza algumas tarefas intensivas de CPU - esses processos podem estar consumindo 100% de seus núcleos, mas ainda posso navegar na Web e fazer perguntas sobre o SuperUser no meu último núcleo ... certo?

Doug T.
fonte
Um fluxo fundamental para essa pergunta e as respostas é a suposição de que um único processo é de thread único. Este não é o caso em muitos casos. E mesmo que o processo seja de thread único, várias bibliotecas de sistema / dll adicionam seus próprios threads.
harrymc 12/09/10

Respostas:

12

O sistema operacional não pode dividir um processo individual de thread único em vários núcleos (embora possa alterar em que núcleo um aplicativo está sendo executado, mas essa é uma pergunta diferente); no entanto, ele pode executar vários processos, cada um em seu próprio núcleo. Portanto, sim, se você tiver vários aplicativos com uso intensivo de processador em execução em segundo plano, é provável que ainda tenha um núcleo sobressalente fazendo pouco ou nada que possa usar para executar outros aplicativos.

pesado
fonte
A palavra-chave aqui é se você tiver vários aplicativos intensivos de processador - essa é uma situação incomum para a maioria dos usuários.
Gilles 'SO- stop be evil'
Obrigado pela resposta. Sim, o último caso é o que estou tentando descrever.
Doug T.
3

Para adicionar à resposta do @ heavyd, o motivo disso é que o sistema operacional não tem a capacidade de determinar quais partes do processo são corretas para serem executadas em paralelo e quais não são. Se um programa não foi projetado para ser executado em núcleos paralelos, é possível ter rotinas no aplicativo projetadas para serem executadas sequencialmente ao mesmo tempo. Isso pode causar todos os tipos de problemas (como se duas rotinas usassem o mesmo bloco de memória, mas não fossem executadas ao mesmo tempo).

O sistema operacional pode usar vários núcleos para vários processos, pois faz isso de qualquer maneira, mas espalhar um aplicativo de núcleo único por vários núcleos causará todo tipo de comportamento inesperado.

JNK
fonte
Obrigado. Eu entendi aquilo. Minha pergunta pode ter sido mal formulada. Eu pretendia perguntar mais sobre o sistema operacional, colocando processos em núcleos separados. De alguma forma, magicamente, o processo com rosca única abrange os núcleos.
Doug T.
3

Quando se trata disso, não importa se um processador está com 1% de uso ou 95% de uso (desde que seja estável a 95% e sem pico), os programas serão executados na mesma velocidade, desde que não está atingindo 100%. Os ciclos de CPU não utilizados são simplesmente desperdiçados.

Por esse motivo, o Windows 7 (em processadores compatíveis) possui uma tecnologia conhecida como "estacionamento principal", que basicamente desativa os núcleos não utilizados no seu computador para economizar eletricidade.

Aplicativos de thread único são automaticamente inseridos em núcleos alternativos - não tenho certeza da tecnologia por trás disso, mas sei que funciona muito bem.

William Hilsum
fonte
2

Seus sentimentos iniciais estão corretos - há uma inclinação negativa em relação a múltiplos núcleos, e não é realmente tudo o que merecia.

No passado, quando a maioria dos usuários usava apenas o PC de mesa para processamento de texto simples, pode ter havido um argumento. Hoje em dia, porém, com navegadores com várias guias, cada um em seu próprio processo (chrome e, por exemplo, separa o nível do processo para guias), além de itens como decodificadores de vídeo em páginas da web e tarefas extras que podem ser facilmente descarregadas on-the-fly renderização de efeitos aka css3, mesmo o navegador pode justificar uma razão para muito mais memória RAM e alguns núcleos.

Acrescente a isso o fato de que alguns usuários também podem jogar neste PC ou usar ferramentas como banda de garag, imovie, freio de mão e vários núcleos pode ser um grande benefício.

Não é verdade supor que você precise maximizar (ou seja, 100% de uso da CPU em um único núcleo) um núcleo para que outro núcleo seja útil. Porque estamos falando de paralelismo aqui. A alternância de tarefas em uma CPU geralmente executa um lote de operações antes de trocar sua pilha para outro processo. Nem todas essas tarefas são vinculadas à CPU, portanto você não verá um pico de CPU, mesmo que o núcleo esteja bloqueado.

Basicamente, você está certo, mas qual é o número mais eficiente de núcleos? 2? 4? 12? Provavelmente isso dependeria dos hábitos dos usuários ... Eu costumo usar esse número 2-4 para a maioria dos usuários, mas estou apenas adivinhando.

Roubar
fonte