Buscar

[RESPOSTAS]Exercícios para estudo sobre Threads e Processos

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 9 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 9 páginas

Prévia do material em texto

https://www.embarcados.com.br/threads-posix/
1. Por que os processos são ditos de agrupadores de recursos? 
R. Processos são considerados agrupadores de recursos, pois em alguns sistemas é possível criar no mesmo processo mais de um thread, ou seja, é criado no mesmo espaço de endereçamento.
2. O que diferenciam os processos dos threads? 
R. Processos são agrupadores de recursos (dados e códigos) e possuem uma identidade, já os threads são criados dentro do contexto de um processo e compartilhar o mesmo espaço de endereçamento. E o que mais vai diferenciar um thread de um processo e que os threads não são independentes como os processos.
3. O que diferenciam um thread dos outros threads de um mesmo processo?
R. Cada thread possui os mecanismos para gerenciar seu contexto de execução, ou seja, cada thread possui seu próprio contador de programa, apontador de pilha e registradores.
4. O que os threads têm em comum com outros threads? 
R. Os threads tem a capacidade de trabalhar em paralelo assim podendo compartilhar o espaço de endereçamento e todos os seus dados entre si.
5. Na Figura 2.2, são mostrados três estados de processos. Na teoria, com três estados, poderia haver seis transições, duas para cada. No entanto, apenas quatro transições são mostradas. Existe alguma circunstância na qual uma delas ou ambas as transições perdidas possam ocorrer? 
R. A transição entre o estado de pronto para o bloqueado não acontece pois o estado pronto não tem como saber que ele precisa de uma entrada ou saída para sair do estado de bloqueado. Outra Transição que não pode ocorrer é a de bloqueado para execução, isso não ocorre porque não é viável o custo benefício desta transição.
6. Em todos os computadores atuais, pelo menos parte dos tratadores de interrupções é escrita em linguagem de montagem. Por quê?
R. Essas interrupções são escritas em linguagem de montagem pois elas têm que serem executadas o mais rápido possível, pois quando é feita uma interrupção ela não pode perder tempo traduzindo o código para a linguagem de máquina.
7. Presuma que você esteja tentando baixar um arquivo grande de 2 GB da internet. O arquivo está disponível a partir de um conjunto de servidores espelho, cada um deles capaz de fornecer um subconjunto dos bytes do arquivo; presuma que uma determinada solicitação especifique os bytes de início e fim do arquivo. Explique como você poderia usar os threads para melhorar o tempo de download. 
R. Os threads poderia ser utilizados para gerenciar os downloads de arquivos, fazendo com que esses arquivos fossem divididos em partes, onde cada therad ficaria responsavel por um determinado pedaço do arquivo, assim o download seria feito de forma conjunta sem perda de velocidade.
8. Se um processo multithread bifurca, um problema ocorre se o filho recebe cópias de todos os threads do pai. Suponha que um dos threads originais estivesse esperando por entradas do teclado. Agora dois threads estão esperando por entradas do teclado, um em cada processo. Esse problema ocorre alguma vez em processos de thread único?
R. O processo nao pode bifurcar enquanto estiver esperando uma entrada do teclado, isso ira fazer ele continuar em estado de espera. Com a entrada resumiria sua execução. Como somente o processo pai estaria em execução, a bifurcação nao poderia ocorrer, por isso nao ocorreria em um processo de thread unico.
9. Um servidor web multithread é mostrado na Figura 2.8. Se a única maneira de ler de um arquivo é a chamada de sistema read com bloqueio normal, você acredita que threads de usuário ou threads de núcleo estão sendo usados para o servidor web? Por quê? 
R. São usados threads de nucleo pois se nao usa-se os mesmo nao seria possivel a implementação de multithread.
10. No texto, descrevemos um servidor web multithread, mostrando por que ele é melhor do que um servidor de thread único e um servidor de máquina de estado finito. Existe alguma circunstância na qual um servidor de thread único possa ser melhor? Dê um exemplo. 
11. Na Figura 2.12, o conjunto de registradores é listado como um item por thread em vez de por processo. Por quê? Afinal de contas, a máquina tem apenas um conjunto de registradores. 
12. Por que um thread em algum momento abriria mão voluntariamente da CPU chamando thread_yield? Afinal, visto que não há uma interrupção periódica de relógio, ele talvez jamais receba a CPU de volta. 
13. Quais as vantagens de se implementar threads no espaço de usuário? Quais as desvantagem?
 14. Quais as vantagens de se implementar threads no espaço de núcleo? Quais as desvantagem? 
15. Na Figura 2.15 as criações dos thread e mensagens impressas pelos threads são intercaladas ao acaso. Existe alguma maneira de se forçar que a ordem seja estritamente thread 1 criado, thread 1 imprime mensagem, thread 1 sai, thread 2 criado, thread 2 imprime mensagem, thread 2 sai e assim por diante? Se a resposta for afirmativa, como? Se não, por que não? 
16. Considere um sistema no qual threads são implementados inteiramente no espaço do usuário, com o sistema de tempo de execução sofrendo uma interrupção de relógio a cada segundo. Suponha que uma interrupção de relógio ocorra enquanto um thread está executando no sistema de tempo de execução. Qual problema poderia ocorrer? Você poderia sugerir uma maneira para solucioná-lo? 
17. Em um sistema com threads, há uma pilha por thread ou uma pilha por processo quando threads de usuário são usados? E quando threads de núcleo são usados? Explique. 
18. Considere o fragmento de código C seguinte: 
void main( ) {
 fork( );
 fork( ); 
exit( );
 } 
Quantos processos filhos são criados com a execução desse programa? 
entregar a partir daqui.
Comunicação entre processos 
1. O que é a comunicação entre processos?
R. Comunicação entre processos é um grupo de mecanismos que permite aos processos transferir informações entre si.
 2. A comunicação entre processos aplica-se a somente processos ou threads ou a ambos? 
R. É aplicado em ambos.
3. Qual a finalidade da sincronização entre processos?
R. A sincronização dos processos serve para gerenciar o acesso concorrente a recursos dos sistema operacional de maneira controlada pelos processos, de modo que os recursos não sejam modificados simultaneamente, ou que os processos não fique na espera de recursos até que o mesmo seja liberado corrida
 4. O que é condição de corrida? 
R. Condição de corrida é um erro, que pode ocorrer em sistemas ou processos onde o resultado do processo é inesperadamente dependente da sequência ou sincronia de outros eventos.
5. O que é região crítica ou seção crítica?
R. Região crítica é uma parte do código de um algoritmo que acessa um recurso compartilhado que não pode ser acessado por mais de uma linha de execução.
 6. O que é exclusão mútua?
R. Exclusão mútua é uma técnica usada para evitar que threads ou processos tenham acessos simultaneamente a um recurso compartilhado, acesse esse denominado por seção crítica.
 7. Quais as características, vantagens e desvantagens da exclusão mútua desabilitando interrupções? 
R. A forma mais simples de garantir a exclusão mútua, é fazer com que cada processo, ao entrar na região crítica, desabilitar interrupções, e as reabilite antes de sair, impedindo que as UCP seja chaveada para outro processo.
Vantagens: o usuário pode decidir quando deve ser feito essas interrupções.
Desvantagens: Como os usuários têm o direito de desabilitar as interrupções e se esquecer de ativar o S.O. não pode mais executar; Usuários mal intencionado pode desabilitar interrupções a fim de que seu programa seja o único a executar dentro do processador.
8. Quais as características, vantagens e desvantagens da exclusão mútua usando variáveis de trava (variáveis do tipo trava)?
R. Variáveis de trava usa-se uma variável auxiliar que quando em 0 indica que a seção crítica está livre e quando em 1 está com a região críticaestá ocupada.
vantagens: facilidade na programação ( não exige linguagem de programação concorrente )
desvantagens: a disputa apenas se transferiu da região crítica para a variável de trava.
 9. Quais as características, vantagens e desvantagens da exclusão mútua usando alternância explícita? 
R. Alternância explícita é a solução que obriga que a região crítica seja dada a um dos processos por vez, em uma alternância explicita. O teste contínuo de uma variável na espera de um certo valor é chamado de espera ocupada, e representa um grande desperdício de UCP.
desvantagens: requer precisão na alternância entre dois processos e o número de acessos de cada processo deve ser igual ao do outro.
10. O que é uma trava giratória (spin lock)? 
R. Um spinlock é um bloqueio que faz com que um thread tente adquiri-lo para simplesmente aguardar em um loop enquanto verificar repetidamente se o bloqueio está disponível.
11. Quais as características, vantagens e desvantagens da exclusão mútua usando a solução de Peterson? 
R. A exclusão mútua usando a solução de peterson permite que dois ou mais processos compartilhem um recurso sem conflitos, utilizando apenas a memória compartilhada para a comunicação.
12. Quais as características, vantagens e desvantagens da exclusão mútua usando a instrução TSL? 
R. 
Vantagens: Simples de usar; Não dá aos processos de usuários o poder de desabilitar interrupções; Funciona em máquinas com multiprocessadores.
Desvantagens: Espera ocupada; Possibilidade de postergação infinita
13. Quais os problemas na exclusão mútua com espera ocupada? 
R. Como os usuários podem inibir as interrupções isso pode ser usado de maneira errada transformando o S.O. em um sistema monoprogramado, com apenas aquele processo rodando; Quando a vários processadores a inibição de interrupção só pode ocorrer naquele que estiver executando o processo no momento.
14. Quais as características, vantagens e desvantagens da primitiva Dormir/Acordar? 
R. Dormir/Acordar é usado para nao gastar tempo de uso da CPU durante um bloqueio, é chamado a função sleep onde o processo que a chama é suspenso até que o outro processo desperte novamente , para ele ser despertado e realizado uma chamada de Wakeup.
15. Explique como funciona o problema da inversão de prioridade. 
R. O problema é que em um sistema preemptivo onde a tarefa a ser executada é a tarefa com a prioridade mais alta, pode haver circunstância onde a tarefa que está executando com mais alta prioridade necessida aceder a um recurso que ja se encontra ocupado por uma tarefa de prioridade inferior, ou seja os problemas de inversão de prioridade ocorre quando uma tarefa de prioridade alta fica bloqueada pois tem que esperar uma tarefa com prioridade inferior liberar os recursos necessários para que a tarefa de maior prioridade possa continuar a executar. 
16. Em que consiste o problema do produtor-consumidor? 
R. O problema consiste garantir que o produtor não irá tentar adicionar dados no buffer quando estiver cheio, e que o consumidor não vai tentar remover dados quando o buffer estiver vazio.
17. Quais os problemas que existem no problema do produtor-consumidor usando Dormir/Acordar? 
R.
18. Quais as características, vantagens e desvantagens dos semáforos? 
R. Semáforos é uma variável especial protegida que tem como função o controle do acesso a recursos compartilhados como por exemplo um espaço de armazenamento em um ambiente multitarefa foi criada por Edsger Dijkstra em 1965 e usado no S.O. THEOS.
A principal desvantagem dos semáforos é que semáforos necessitam de BUSY WAITING que consiste em que quando um processo estiver na seção crítica qualquer outro processo que tentar entrar vai entrar em um loop esperando até que o processo saia da seção crítica, isso faz com que o loop consome muita CPU.
19. Além dos semáforos, Dijkstra é bastante conhecido em outra área/assunto, pesquise um pouco sobre o assunto. 
R. Dijkstra foi um grande desenvolvedor de algoritmos e programas recebeu o Prêmio Turing . Criou o algoritmo para o problema do caminho mínimo que logo ficou conhecido como algoritmo de Dijkstra, esse algoritmo consiste na minimização do custo de travessia de um grafo entre dois nós ou vértices, custo este dado pela soma dos pesos de cada aresta percorrida. Dijkstra também foi quem liderou um time de programadores na criação do sistema operacional THE , descrito em monografia em 1965 e 1966. Esse sistema THE é basicamente um sistema batch que suporta multitarefas.
E como vimos na pergunta acima ele foi o criador dos SEMÁFOROS que é um algoritmo que coordena múltiplos programas e processadores.
20. O que é uma ação atômica?
R. Ação atômica é quando uma ação se torna indivisível, não pode ser quebrada numa sequência simples de ações mais simples, ou seja, é quando um ação/processo não pode ser interrompido.
 21. Quando usamos semáforos para solucionar o problema do produtor-consumidor, explique a razão para ter três semáforos – full, empty e mutex.
R. Full é usado para contar o número de vagas que estão cheias; empty é usado para contar o número de vagas que estão vazias ; mutex serve para se certificar de que o produto e o consumidor não acessem o buffer ao mesmo tempo.
 22. Quais as características, vantagens e desvantagens dos mutexes? 
R. Mutex técnica que tem como função evitar que dois processos/threads tenham acesso simultâneo a um recurso compartilhado.
23. Qual diferença dos semáforos para os mutexes? 
24. O que são variáveis de condição?
25. O que são monitores e quais suas características?
26. Quais as características, vantagens e desvantagens das trocas de mensagens? 
Comunicação entre processos (questões do livro que são aplicadas aos conceitos) 
1. A solução da espera ocupada usando a variável turn (Figura 2.23) funciona quando os dois processos estão executando em um multiprocessador de memória compartilhada, isto é, duas CPUs compartilhando uma memória comum? 
R. Em multiprocessadores com memória compartilhada, os processadores têm acesso ao mesmo local de memória, ou seja, um recurso ou processo que estiver neste local de memória pode ser acessado por duas ou mais CPUs ao mesmo tempo.
Então conclui que a solução dada na figura 2.23 funciona para dois processos executando em multiprocessadores de memória compartilhada.
2. A solução de Peterson para o problema da exclusão mútua mostrado na Figura 2.24 funciona quando o escalonamento de processos é preemptivo? E quando ele é não preemptivo?
R. Com escalonamento não preemptivo a solução não funcionaria pois o valor inicial da variável turn é 0, porém o processo 1 é executado primeiro, ou seja, a solução dada só funcionaria com escalonamento preemptivo.
 3. O problema da inversão de prioridades discutido na Seção 2.3.4 acontece com threads de usuário? Por que ou por que não? 
R. Não , pois o threads de usuário são criados em espaço de usuário somente , o núcleo não tem conhecimento de sua existência, por isso os threads de usuários não sofrem com o problema de inversão de prioridade.
4. Na Seção 2.3.4, uma situação com um processo de alta prioridade, H, e um processo de baixa prioridade, L, foi descrita, o que levou H a entrar em um laço infinito. O mesmo problema ocorre se o escalonamento circular for usado em vez do escalonamento de prioridade? Discuta. 
R. O problema de inversão de controle não ocorreria caso fosse usado o escalonamento circular pois o mesmo aloca um intervalo de tempo específico para cada processo, assim a competição por tempo de CPU entre processos é eliminada. Já o escalonamento de prioridade escalona os processos de acordo com sua prioridade , isso pode gerar uma briga por CPU caso o processo de alta prioridade tiver que esperar dados de um processo de prioridade inferior.
5. O problema produtor-consumidor pode ser ampliado para um sistema com múltiplos produtores e consumidores que escrevem (ou leem) para (ou de) um buffer compartilhado. Presuma que cadaprodutor e consumidor executem seu próprio thread. A solução apresentada na Figura 2.28 usando semáforos funcionaria para esse sistema? 
R. O uso de semáforos no problema resolve o problema de perca de sinal ao acordar, mas para funcionar perfeitamente e necessários colocar de maneira atômica ( de forma indivisível ) . Portanto a solução dada funcionaria para o sistema dado.
6. Considere a solução a seguir para o problema da exclusão mútua envolvendo dois processos P0 e P1. Presuma que a variável turn seja inicializada para 0. O código do processo P0 é apresentado a seguir.
 /* Outro codigo */
 while (turn != 0) { } /* Nao fazer nada e esperar */
 Critical Section /* . . . */ 
turn = 0;
 /* Outro codigo */ 
Para o processo P1, substitua 0 por 1 no código anterior. Determine se a solução atende a todas as condições exigidas para uma solução de exclusão mútua. 
 R. para cumprir todas as condições exigidas para uma solução seria necessário corrigir o processo P1 pois o mesmo apesar de não está na região crítica ele não deixa o P0 acessar a região crítica, sendo assim a solução que foi dada não atende todas as condições exigidas.
7. Como um sistema operacional capaz de desabilitar interrupções poderia implementar semáforos? 
R. Para implementar semáforos nesses S.O. é necessário que após o envio do comando de interrupção o valor do semáforo seja lido. Se esse valor for igual a 0 e a operação for de espera, o processo é colocado numa lista de processos bloqueados. Caso seja uma operação de sinalização, é verificado se existe processos bloqueados, caso existir processos bloqueados um deles deve ser acordado e removido da fila. Se o valor do semáforo for maior do que 0 e tivermos uma operação de espera, esse valor é decrementado. Após o término de todas as operações de espera e sinalização, as interrupções são habilitadas.
8. Se um sistema tem apenas dois processos, faz sentido usar uma barreira para sincronizá-los? Por que ou por que não?
R. Faz sentido sim usar barreiras para sincronizá los pois 1 processo pode terminar primeiro do que o outro, assim ele ocuparia espaço na CPU a espera do processo 2 terminar, sendo assim usamos uma barreira para sincronizá los para que os 2 possam avançar para a próxima fase simultaneamente .
 9. É possível que dois threads no mesmo processo sincronizem usando um semáforo do núcleo se os threads são implementados pelo núcleo? E se eles são implementados no espaço do usuário? Presuma que nenhum thread em qualquer outro processo tenha acesso ao semáforo. Discuta suas respostas. 
R. Como o processador é definido em dois modos ( modo núcleo e modo usuário ), no modo núcleo não existem restrições, enquanto no modo usuário algumas instruções não podem ser executadas. O processo sincronizado usando um semáforo de núcleo, com os threads implementados pelo núcleo conseguiriam controlar essa sincronização. No caso dos threads implementados em modo usuário, poderia esbarrar com instruções privilegiadas e assim não conseguiria sincronizar corretamente.
10. A sincronização dentro de monitores usa variáveis de condição e duas operações especiais, wait e signal. Uma forma mais geral de sincronização seria ter uma única primitiva, waituntil, que tivesse um predicado booleano arbitrário como parâmetro. Desse modo, você poderia dizer, por exemplo, waituntil x < 0 ou y + z < n A primitiva signal não seria mais necessária. Esse esquema é claramente mais geral do que o de Hoare ou Brinch Hansen, mas não é usado. Por que não? (Dica: pense a respeito da implementação.)
R. Esse esquema apresentado não é usado pois o custo de execução é muito alto, sendo assim essa execução faria com que se perdesse eficiência.

Continue navegando