Re: [OFF-TOPIC] Multiprocessadores / Processamento paralelo
Junior Polegato - Linux escreveu:
> Edson Marquezani Filho escreveu:
>> Pessoal, tenho uma dúvida conceitual com relação a processamento
>> paralelo com múltiplos processadores, ou os atuais dual core.
>> Bom, depois que a gente estuda um pouquinho percebe que nem tudo em
>> computação é mágica. Portanto, pra que possa ser aproveitar o poder de
>> mais de um processador, é necessário que tenhamos mecanismos que
>> possibilitem dividir as tarefas entre eles.
>> Tudo bem, é pra isso que temos kernel SMP, certo ? Imagino que a
>> função mais básica desse tipo de kernel seja escalonar os processos
>> para mais de um processador.
>> Então, se você tem uma máquina dual core ou com mais de um
>> processador real, mas não tem um kernel que faça processamento
>> paralelo, de nada adianta. Mas, se você o tem, todos os processos
>> usarão essa capacidade total, creio eu, devido ao escalonamento.
>> Agora, a dúvida vem quando ouço falar, e inclusive passo adiante, a
>> informação de que o Squid, por exemplo, não faz uso desses recursos, o
>> que torna seus vários processadores carésimos indeferentes, nesse
>> caso. Mas, se quem distribui o processamento é o próprio kernel, não
>> deveria ser assim. Ou deveria ?
>> Como fica essa história ? Afinal, o que o kernel faz, e o que o
>> programa faz, com relação a multiprocessadores ? Ter um kernel SMP já
>> garante que o processamento de todos seja aproveitado ?
>> Bom, eu já vi arquitetura, microprocessadores e sistemas
>> operacionais na faculdade, mas não sei o quão bem absorvi todos esse
>> conceitos. Mas pelo que me lembro, no caso de SOs, o processamento
>> distribuído deveria depender do kernel e deveria ser transparente aos
>> processos, a não ser em casos em que eles usassem instruções
>> específicas desse tipo de arquitetura.
>> Tô meio confuso. =@
>> Abraço a todos.
>>
>
> Olá,
>
> Quem distribui os processos entre os processadores e dita quanto
> tempo esse processo pode usar o processador sem ser interrompido é o
> kernel. Até aí tudo bem? Ok.
> Um processo em uma máquina com um processador vai ser interrompido
> para que outros processos tenham a chance de serem executados ou pelo
> motivo deste esperar uma resposta de algum dispositivo lento (hd,
> teclado, mouse, rede, modem, etc). Entende isso, né?
> Agora um processo A em uma máquina com vários processadores vai
> ser interrompido quando se tem um processo B com prioridade maior que a
> deste A e nos outros processadores as prioridades são maiores que a de
> B. Repare que o sistema de prioridades do Linux usa um algoritmo
> complexo para definir o valor dessa prioridade, que é completamente
> dinâmico, onde a prioridade do processo atribuída "manualmente" não é
> fixa e sim uma forma de dar pesos para as prioridades dinâmicas. Acho
> que ficou meio complexo mas deu para entender?
> Então, entendido isso, se o processo pode ser divido em vários
> (thread e fork), este executa muito melhor do que com um só processador,
> mas se não poder ser, ou este ficar mais "dormindo" do que "acordado",
> esperando resposta do HD por exemplo, não adianta quase nada ter vários
> processadores se o gargalo está no HD... Entendeu?
>
>
O kernel vai distribuir os processos nos processadores (bruta
retundância) segundo o algorítmo que ele tem para isso. Um kernel SMP
será capaz de distribuir processos entre os núcleos/processadores. Até
aqui estamos de acordo.
Entretanto, o que o kernel não faz (não é o trabalho dele fazer isso) é
que os processos sejam capazes de usar mais de um processador/núcleo
para que sejam processados. Isso é trabalho do processo em sí, aliás, o
programador tem que ser capaz de criar um programa que possa fazer essa
"paralelização".
Alguns processos que venham a ser criados por outro processo poderiam
ser processados em outro núcleo/processador com menor carga. Entretanto,
o processo como um todo "se mantem" no mesmo núcleo/processador.
Já faz um tempinho que estou trabalhando com PC's de mais de 1 núcleo
(em casa, no trabalho ou na universidade) e pude conversar sobre esse
assunto com companheiros de trabalho, de sala de aula, professores, etc
e tal. A conslusão é mais ou menos a mesma... é muito difícil fazer
software para processamento paralelo real.
Até!!!
--
Miguel Da Silva
Administrador de Red
Centro de Matemática - http://www.cmat.edu.uy
Facultad de Ciencias - http://www.fcien.edu.uy
Universidad de la República - http://www.rau.edu.uy
Reply to: