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

14

Ok, eu sei 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 paralelização.

No entanto, no nível do SO, parece óbvio que o SO dividirá 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ê recebe algumas tarefas intensivas da CPU - esses processos podem estar sobrecarregando 100% de seus núcleos, mas ainda posso navegar na Web e fazer perguntas sobre o SuperUser no meu último núcleo ... certo?

    
por Doug T. 12.09.2010 / 01:38

4 respostas

12

O sistema operacional não pode dividir um processo individual de encadeamento único em vários núcleos (embora possa alterar em qual núcleo um aplicativo está sendo executado, mas essa é uma questão diferente), mas 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 você ainda tenha um núcleo sobressalente por aí fazendo pouco ou nada que possa usar para executar outros aplicativos.

    
por 12.09.2010 / 01:46
3

Para adicionar à resposta do @superd, a razão para isso é que o sistema operacional não tem a capacidade de determinar quais partes do processo estão corretas para serem executadas em paralelo e quais não são. Se um programa não for projetado para ser executado em núcleos paralelos, você poderá ter rotinas dentro do aplicativo projetadas para serem executadas em seqüência 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, uma vez que faz isso de qualquer maneira, mas espalhar um aplicativo de núcleo único por vários núcleos causará todo tipo de comportamento inesperado.

    
por 12.09.2010 / 01:52
3

Quando se trata disso, não importa se um processador tem 1% de uso ou 95% de uso (contanto que seja estável em 95% e não em pico), os programas estarão rodando na mesma velocidade contanto que não esteja atingindo 100%. Ciclos de CPU não utilizados são simplesmente desperdiçados.

Por causa disso, o Windows 7 (em processadores compatíveis) tem uma tecnologia conhecida como "core parking", que basicamente desativa os núcleos não usados no seu computador para economizar eletricidade.

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

    
por 12.09.2010 / 01:55
2

Seus sentimentos iniciais estão corretos - existe uma tendência negativa em relação a vários núcleos, e não é realmente tudo o que merecia.

De volta ao dia em que a maioria dos usuários usava seu PC de mesa apenas para processamento de texto simples, pode ter havido um argumento. Mas atualmente, com coisas como navegadores com múltiplas abas, cada uma em seu próprio processo (chrome e isto é, separação de nível de processo para abas), mais coisas como decodificadores de vídeo dentro de páginas web e tarefas extras que poderiam ser facilmente descarregadas como on-the-fly renderização de efeitos aka css3, até mesmo o navegador sozinho pode justificar uma razão para muito mais ram e alguns núcleos.

Adicione a isso o fato de que alguns usuários também podem estar jogando neste PC, ou usando ferramentas como garageband, imovie, handbrake, múltiplos núcleos pode ser um grande benefício.

Não é verdade assumir que você precisa 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 comutação de tarefas dentro de uma cpu geralmente realiza 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, embora o núcleo esteja bloqueado.

Basicamente, você está certo, mas qual é o número mais eficiente de núcleos? 2? 4? 12? Isso provavelmente dependeria dos hábitos dos usuários ... Eu cuido disso 2-4 para a maioria dos usuários, mas estou apenas supondo.

    
por 12.09.2010 / 10:17