[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: