Carla Cavalcante de Godoy - BP3040135
Iago Felipe S. Bacci - BP3044246
Jonas Ribeiro da Rosa - BP304422X
Tainara Cristina Lucindo Bueno - BP3044211
Questionário de Sistemas Operacionais: Threads
Trabalho apresentado ao Curso de Análise e
Desenvolvimento de Sistemas do Instituto
Federal de Educação, Ciência e Tecnologia de
São Paulo – Campus Bragança Paulista, como
requisito parcial da disciplina Sistemas
Operacionais sob a orientação do Prof. Rosalvo
Soares Cavalcante Filho.
Bragança Paulista
2024
1. Como uma aplicação pode implementar concorrência em um ambiente
monothread?
Uma aplicação monothread pode implementar concorrência por meio de técnicas como
event-driven programming (programação orientada a eventos) ou corrotinas (co-routines).
Nesse modelo, o programa alterna entre tarefas com base em eventos ou condições específicas,
como quando uma tarefa está esperando por uma operação de entrada/saída. O conceito de
concorrência é gerido pelo próprio código da aplicação, que simula a execução simultânea de
múltiplas tarefas, sem precisar de múltiplos threads. Um exemplo comum é o uso de bibliotecas
como async/await para implementar concorrência de maneira cooperativa.
2. O que é um ambiente multithread e quais as vantagens de sua utilização?
Um ambiente multithread permite que um processo tenha múltiplos threads de execução
dentro do mesmo espaço de endereçamento. Cada thread pode executar independentemente, o
que possibilita que várias tarefas sejam realizadas simultaneamente, dentro de um mesmo
processo.
As principais vantagens da utilização de um ambiente multithread são:
• Melhor uso do processador: múltiplos threads podem rodar em paralelo em
sistemas com múltiplos núcleos de CPU.
• Compartilhamento de recursos: threads dentro de um processo compartilham
o mesmo espaço de endereçamento e outros recursos como memória e arquivos abertos,
reduzindo a sobrecarga de comunicação.
• Maior responsividade: ao dividir o trabalho em múltiplos threads, a interface
do usuário pode continuar a ser responsiva enquanto tarefas demoradas são realizadas em
segundo plano.
3. Qual a vantagem do scheduler activations comparado ao pacote híbrido?
Scheduler activations é uma técnica usada para coordenar melhor a comunicação entre
o kernel e a biblioteca de threads do usuário. A vantagem sobre o modelo híbrido (many-to-
many threads) é que scheduler activations permite ao kernel e à aplicação trabalharem de forma
mais integrada, dando à biblioteca de threads mais controle sobre como as threads de usuário
são mapeadas para as threads do kernel. Isso resulta em:
• Melhor gerenciamento de threads do usuário: a aplicação pode ser informada
quando eventos relevantes de scheduling ocorrem, permitindo que ela otimize a troca entre
threads de maneira mais eficiente.
• Menor sobrecarga e latência: reduz o overhead de gerenciamento entre
múltiplos níveis de threads, melhorando a performance em certos cenários.
4. Explique a diferença entre unidade de alocação de recursos e unidade de
escalonamento.
• Unidade de alocação de recursos: refere-se à entidade à qual os recursos do
sistema (como memória, arquivos e dispositivos) são atribuídos. Em geral, essa unidade é o
processo. Cada processo tem seu próprio espaço de endereçamento e recursos associados.
• Unidade de escalonamento: refere-se à entidade que é atribuída tempo de CPU
para ser executada. Em um ambiente multithread, a unidade de escalonamento geralmente é o
thread. Isso significa que, dentro de um mesmo processo, diferentes threads podem ser
escalonados para execução de forma independente.
5. Quais as vantagens e desvantagens do compartilhamento do espaço de
endereçamento entre threads de um mesmo processo?
Vantagens:
Comunicação eficiente: como os threads compartilham o mesmo espaço de endereçamento, a
troca de dados entre eles é muito rápida, sem a necessidade de copiar dados de um espaço de
memória para outro.
Uso eficiente de recursos: não há necessidade de duplicar recursos como alocação de memória
para cada thread, tornando o uso de memória mais eficiente.
Desvantagens:
Riscos de concorrência: threads podem interferir nos dados uns dos outros se não houver
controle adequado, como com locks ou mecanismos de sincronização. Isso pode levar a race
conditions (condições de corrida) e corrupção de dados.
Dificuldade na depuração: bugs envolvendo múltiplos threads que compartilham o mesmo
espaço de memória são frequentemente mais difíceis de encontrar e corrigir devido à natureza
imprevisível da execução concorrente.