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

Re: [OFF-TOPIC] Multiprocessadores / Processamento paralelo



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?


--
Atenciosamente,

          Junior Polegato

          Um peregrino de problemas; Um pergaminho de soluções!
          Página Profissional: http://www.juniorpolegato.com.br


Reply to: