Você está na página 1de 4

SISTEMAS OPERACIONAIS

Atividade 4 - 05/03/21
Samuel de Castro Ribeiro 0032743

1.2) ATIVIDADE: Faça os exercícios nº 14, 15, 18, 27 do livro-texto do autor


TANENBAUM (4ª ed., pág.s 121 do cap. 2).

14. 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.

Isso ocorre porque cada thread necessita de sua própria área de registro.
Quando um thread é interrompido, ele salva seus valores nos registradores
assim como quando um processo é interrompido.

15. 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.

Isso ocorre porque os threads cooperam em um processo. Caso seja necessário,


um thread cederá a CPU para o bem de uma determinada aplicação. Desse
modo, é importante que os threads sejam educados e voluntariosos entregando
a CPU de tempos em tempos para dar chance de outros threads serem
executados.

18. Qual é a maior vantagem de se implementar threads no espaço de


usuário? Qual é a maior desvantagem?

A maior vantagem dos threads no espaço de usuário é a eficiência, já que não


são necessárias traps, nem chaveamento de contextos, nem a memória cache
precisa ser esvaziada, etc. Isso torna o escalonamento da thread muito mais
rápido. Já a maior desvantagem é que se um thread fizer uma chamada
bloqueante, todo o processo será bloqueado.
27. 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.

Há uma pilha por thread quando threads de usuário são usados. Isso ocorre já
que cada um deles chama rotinas diferentes e, portanto, tem um modo história
de execução diferente. Assim, necessitam que a pilha armazene as variáveis
locais e endereços de retorno para usar quando a chamada de rotina for
encerrada. O mesmo ocorre para threads no nível do kernel.

2.2) ATIVIDADE: Faça os exercícios nº 4.2, 4.4, 4.7, 4.8 do livro-texto do autor
SILBERSCHATZ (9ª ed., pág. 191-192 do cap. 4).

4.2 Cite duas diferenças entre threads de nível de usuário e threads de nível
de kernel. Sob que circunstâncias um tipo é melhor do que o outro?

Os threads de nível de usuário utilizam uma biblioteca no espaço do usuário sem


suporte do kernel o que resulta em uma chamada de função local (tornando-os
mais rápidos e eficientes), enquanto que os threads de nível de kernel invocam
uma biblioteca do nível do kernel com suporte direto do sistema operacional e
isso resulta em uma chamada de sistema para o kernel, resultando em um
desempenho mais baixo (mais lento) deste tipo de thread. Outra diferença seria
que threads de nível usuário são desconhecidos pelo kernel, tornando a
biblioteca responsável pelo particionamento da CPU do processo entre os
diversos threads existentes, enquanto que o thread em modo kernel é conhecido
pelo sistema operacional podendo ser escalonados individualmente.

O thread de usuário pode ser implementado por um sistema operacional que não
tenha suporte a abstração de threads, enquanto o thread de kernel não. Já o
thread de kernel é ideal para eventos assíncronos.
4.4 Que recursos são usados quando um thread é criado? Em que eles
diferem daqueles usados quando um processo é criado?

A quantidade de recursos usados na criação do thread geralmente é menor que


na criação de processos. Para criar um processo é necessário um bloco de
controle de processos, onde são incluídos estados de processos, contador do
programa, registradores da CPU, lista de arquivos abertos, informações de
gerenciamento da memória e informações de scheduling da CPU, e isso tudo
requer uma estrutura de dados grande. Já a criação de um thread envolve uma
estrutura de dados menor onde são mantidos um conjunto de registradores, uma
pilha, um contador de programa e um ID de thread.

4.7 Sob que circunstâncias uma solução com múltiplos threads, usando
múltiplos threads de kernel, fornece melhor desempenho do que uma
solução com um único thread em um sistema com apenas um
processador?

Por exemplo quando acontece um erro de paginação do thread do kernel outro


thread do kernel pode usar o tempo de intercalação de forma útil. Se é um thread
único, ele não será capaz de realizar sua tarefa quando o erro acontecer, já em
cenários em que ocorre esse tipo de falha ou que precisa aguardar outros
eventos do sistema, a solução multithread teria um desempenho melhor mesmo
em um sistema com apenas um processador.

4.8 Qual dos seguintes componentes de estado de um programa são


compartilhados pelos threads em um processo com múltiplos threads?
 Valores do registrador
 Memória do heap
 Variáveis globais
 Memória da pilha
Os componentes são compartilhados são memória heap e as variáveis globais.
Cada thread tem sua própria pilha e conjunto de valores do registrador
separados.

Você também pode gostar