Programação Paralela em Arquiteturas Multi-Core/Programação em Pthreads: diferenças entre revisões

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Flores (discussão | contribs)
Flores (discussão | contribs)
Linha 120:
O compartilhamento do espaço de endereçamento é permitido por causa da representação de um processo no ''kernel'' do Linux. Existe uma única estrutura de dados de ''kernel'' para cada processo no sistema. Entretanto, em vez de armazenar os dados para cada processo nesta estrutura de dados, ele contém ponteiros para outras estruturas de dados onde estes dados são armazenados. Por exemplo, esta estrutura de dados por processo contém ponteiros para outras estruturas de dados que representam a lista de arquivos abertos, informação de manipulação de sinais e memória virtual. Quando '''fork''' é invocada, um novo processo é criado com uma ''cópia'' de todas as estruturas de dados associadas do processo pai. Quando a chamada de sistema '''clone''' é realizada, um novo processo é criado. Entretanto, em vez de copiar todas as estruturas de dados, o novo processo ''aponta'' para as estruturas de dados do processo pai, desse modo permitindo que o processo filho compartilhe a memória e outros recursos do processo pai. Um conjunto de ''flags'' é passado com um parâmetro para a chamada de sistema '''clone'''. Este conjunto de ''flags'' é utilizado para indicar quanto do processo pai é para ser compartilhado com o filho. Se nenhum dos ''flags'' for posicionado, não ocorrerá compartilhamento e ambas as chamadas de sistema mencionadas atuarão igualmente. Se todos os cinco ''flags'' forem posicionados, o processo filho irá compartilhar todos os recursos com o processo pai. Outras combinações de ''flags'' permitem vários níveis de compartilhamento entre estes dois extremos.
 
Curiosamente, o Linux não faz distinção entre processos e ''threads''. De fato, o Linux utiliza em geral o termo ''tarefa'' - em vez de processo ou ''thread'' - quando se refere a um fluxo de controle dentro de um programa. À parte o processo clonado, o Linux não suporta geração de ''multithreads'', estruturas de dados separadas ou rotinas do ''kernel''. Entretanto, várias implementações de Pthreads estão disponíveis para geração de ''multithreads'' de nível de usuário. <ref>Silberschatz, A. Galvin, P.B. and Gagne, G., "Fundamentos de Sistemas Operacionais, Sexta Edição."</ref>
 
==== Modelos de programação ====