Buscar

221969147 respostas tanenbaum

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 16 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 16 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 16 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

Prévia do material em texto

CAPÍTULO 1 
1 – Quais são as duas principais funções de um Sistema Operacional? 
Os sistemas operacionais podem ser analisados de dois pontos de vista: 
como máquinas estendidas e como gerenciadores de recursos. Como máquina 
estendida, o SO deve fornecer ao usuário uma visão de máquina virtual que 
seja mais conveniente ao uso do que a máquina real, com abstrações dos 
detalhes complicados da execução das tarefas. Já como gerenciador de 
recursos, o SO tem a função de gerenciar de forma adequada as diferentes 
partes do computador (CPU, memória, acesso ao disco, etc), a fim de 
que as aplicações impostas pelo usuário sejam executadas o mais rápido 
possível. 
 
2 – Qual é a diferença entre modo núcleo e modo usuário? Por que a diferença é 
importante para um Sistema Operacional? 
O modo núcleo (também chamado de modo kernel ou supervisor) diz 
respeito ao modo de execução em que todas as instruções do processador 
podem ser executadas. Os sistemas operacionais (SO) rodam neste modo de 
execução. 
 Já o modo usuário refere-se à um modo de execução em que o 
processador pode executar apenas instruções não-privilegiadas. Os processos do 
usuário (editores de texto, compiladores, etc) rodam neste modo de execução. 
Esta distinção serve para proteger o hardware da ação direta do usuário. 
 Caso um processo rodando em modo usuário necessite da execução de 
uma instrução privilegiada (de acesso ao hardware), o processador deve ser 
chaveado para o modo usuário, por meio de uma chamada de sistema (system 
call). 
 
3 – O que é multiprogramação? 
 Multiprogramação é a capacidade do sistema operacional de executar 
concorrentemente vários processos, alternando-os entre CPU e memória. 
A vantagem da multiprogramação está no fato dela evitar que a CPU 
fique ociosa enquanto outros processos em execução estão realizando 
operações que não requerem seu uso (como, por exemplo, operações de 
entrada/saída). 
 
4 – O que é spooling? Você acredita que computadores pessoais avançados 
terão spooling como um recurso padrão no futuro? 
 Spooling (Simultaneous Peripheral Operation On Line – Operação 
Periférica Simultânea On Line). 
 Spooling de entrada consiste na leitura de jobs (por exemplo, cartões) 
para o disco, para que, assim que o processo em execução termine, haja jobs 
prontos para serem processados pela CPU. 
 Spooling de saída consiste na prévia transferência dos arquivos de 
impressão para o disco. 
 Nos computadores pessoais modernos, não faz mais sentido a utilização 
de spoolings de entrada, já que todos os dados já estão, desde o início, 
carregados no disco. Talvez ainda possa ser encontrado spoolings de saída em 
tarefas de impressão, nas quais é necessário armazenar a fila de impressão para 
que sejam liberados os recursos da CPU. 
 
5 – Nos primeiros computadores, cada byte de dados lidos ou escrito era 
diretamente tratado pela CPU (isto é, não havia DMA - Direct Memory Access - 
acesso direto à memória). Quais são as implicações dessa organização para a 
multiprogramação? 
 A principal função da multiprogramação é não deixar a CPU ociosa 
enquanto outros processos em execução estão realizando operações que 
não requerem seu uso (operações de I/O). No caso de não haver DMA, a CPU 
ficaria ocupada com as operações de I/O, que podem ser muito demoradas, não 
podendo realizar outras tarefas. 
 
6 – Por que o tempo compartilhado não era comum em computadores de 
segunda geração? 
 Nos computadores de segunda geração utilizava-se sistemas de 
processamento em lote (batch systems). 
 Logo, o tempo de compartilhamento não era comum, uma vez que os 
computadores utilizados para os cálculos (maiores e mais caros) eram 
otimizados para o processamento dos programas, ao contrário dos utilizados 
para os programas de leitura de cartões e impressão de resultados (menores e 
mais baratos), que não requeriam grande capacidade de processamento. 
 
7 – Quais das seguintes instruções devem ser permitidas somente em modo 
núcleo? 
(a) Desabilitar todas as interrupções. 
(b) Ler o relógio de hora do dia. 
(c) Configurar o relógio de hora do dia. 
(d) Mudar o mapeamento de memória. 
 
 (a), (c) e (d) só devem ser permitidas em modo kernel, uma vez que 
atuam diretamente sobre o hardware. 
 (b) e poder ser realizadas pelo usuário através de system calls. 
OBS: Chamada de Sistema (system call) constitui uma interface entre 
programas aplicativos e o sistema operacional. Ela é uma rotina que 
provê acesso às funcionalidades do SO, tais como manipulação de arquivos, 
controle de processo, gerenciamento de memória, etc. 
 
8 – Relacione algumas diferenças entre os sistemas operacionais de 
computadores pessoais e os sistemas operacionais de computadores de grande 
porte. 
 SO’s de computadores pessoais são sempre interativos, muitas vezer com 
apenas um usuário. 
 SO’s para mainframes quase sempre dão ênfase ao processamento em 
lote (batch) ou tempo de compartilhamento (timesharing) com muitos usuários. 
Proteção e uso dos recursos são muito mais problemáticos nestes computadores. 
 
9 – Dê um motivo pelo qual um sistema operacional patenteado, de código-fonte 
fechado, como o Windows, deve ter qualidade melhor do que um sistema 
operacional de código-fonte aberto, como o Linux. Agora, dê um motivo pelo 
qual um sistema operacional de código-fonte aberto, como o Linux, deve ter 
qualidade melhor do que um sistema operacional patenteado, de código-fonte 
fechado, como o Windows. 
 Código aberto: Um bug pode ser corrigido por qualquer um e a correção 
disponibilizada publicamente. O mesmo vale para melhorias. 
Código fechado: Maior suporte e padronização para o desenvolvimento de 
softwares. 
 
 
10 – Um arquivo do MINIX, cujo proprietário tem UID = 12 e GID = 1, tem o 
modo rwxr-x---. Outro usuário, com UID =6, GID = 1, tenta executar o arquivo. 
O que acontecerá ? 
 Proprietário: rwx; Grupo: rx; Outros: (nada). 
 r: read; w: write; x: execute 
 
11 – Em vista do fato de que a simples existência de um superusuário pode 
levar a todos os tipos de problemas de segurança, por que existe tal conceito? 
 Superusuário é uma abstração no nível do funcionamento so SO. Seu 
papel é, basicamente, determinar quais usuários e grupos podem ler, escrever e 
executar quais arquivos. 
 Portanto, o conceito de superusuário é necessário para restringir o acesso 
irrestrito a apenas alguns usuários especiais. 
 
12 – Todas as versões do UNIX suportam atribuição de nomes de arquivo 
usando caminhos absolutos (relativos à raiz) e caminhos relativos (relativos ao 
diretório de trabalho). É possível descartar um deles e usar apenas o outro? Se 
for assim, qual deles você sugeriria manter? 
 Sim. Ao meu ver, os caminhos relativos são apenas uma abstração do 
sistema operacional para o usuário, uma vez que o caminho é concatenado e o 
sistema utiliza-se sempre do caminho absoluto. 
 Portanto, seria possível eliminar a utilização de caminhos relativos, 
mantendo apenas a utilização de caminhos absolutos. 
 
13 – Por que a tabela de processos é necessária em um sistema de tempo 
compartilhado? Ela também seria necessária em sistemas operacionais de 
computador pessoal, nos quais existe apenas um processo, com esse processo 
tomando conta da máquina inteira até que termine? 
 A tabela de processos é necessária para manter o estado dos processos 
que estão atualmente suspensos (em estado de espera ou bloqueados). 
No caso de SO’s com apenas um processo, esta tabela não é necessária, 
uma vez que o único processo nunca entra em estado suspenso. 
 
 
14 – Qual é a diferençabásica entre um arquivo especial de bloco e um arquivo 
especial de caractere? 
 Os arquivos especiais são utilizados para fazer com que dispositivos de 
I/O se comportem como arquivos normais. Assim, eles podem ser lidos ou 
escritos utilizando-se as mesmas chamadas de sistema que se usa para arquivos 
convencionais. 
Os arquivos especiais de bloco são utilizados para modelar dispositivos 
que consistem em um conjunto de blocos endereçáveis aleatóriamente, como os 
discos. Pode-se, por exemplo, acessar um bloco específico deste arquivo sem se 
preocupar com a estrutura do sistema de arquivos do disco por ele 
representado. 
Os arquivos especiais de caractere são utilizados para modelar 
dispositivos que aceitam como entrada, ou têm como saída, um fluxo de 
caracteres, tais como impressoras ou modems. 
 
15 – No MINIX 3, se o usuário 2 cria um vínculo (link) para o arquivo 
pertencente ao usuário 1 e, então, o usuário 1 remove esse arquivo, o que 
acontece quando o usuário 2 tenta ler o arquivo? 
 O arquivo continuará acessível. 
Um arquivo pode ser considerado um apontador para a região do 
endereço contendo seus dados. Links nada mais são outros apontadores para a 
mesma região da memória de um arquivo. Portanto, ao remover um arquivo, 
remove-se apenas o apontador, mantendo-se os dados na memória. Somente 
quando todos os links forem removidos é que os dados serão excluídos. 
 
16 – Os pipes são um recurso fundamental? Alguma funcionalidade importante 
seria perdida se eles não estivessem disponíveis? 
 Não, uma vez que seria possível criar um arquivo de saída de um 
processo e utilizá-lo como entrada de outro, o que realizaria a mesma tarefa dos 
pipes. 
 Entretanto, os pipes facilitam muito a vida do usuário, uma vez que a 
técnica utilizada acima necessitaria de uma atenção do usuário quanto à 
exclusão dos arquivos criados, depois de utilizados. 
 
 
 
17 – Os instrumentos modernos para o consumidor, como equipamentos 
estéreos e câmeras digitais, frequentemente têm uma tela na qual podem ser 
inseridos comandos e os resultados podem ser vistos. Muitas vezes, esses 
equipamentos têm interiormente um sistema operacional primitivo. A que parte 
de um software de computador pessoal o processamento de comandos por meio 
da tela de um equipamento estéreo ou de uma câmera é semelhante? 
 Ao shell, ou seja, ao interpretador de instuções do sistema operacional. 
 
18 – O Windows não tem uma chamada de sistema fork, embora seja capaz de 
criar novos processos. Dê um palpite abalizado sobre a semântica da chamada 
de sistema utilizada pelo Windows para criar novos processos. 
 O Windows nao possui a system call “fork”, mas possui o “CreateProcess” 
(algo similar a fork + execve). 
 
19 – Por que a chamada de sistema chroot é limitada ao superusuário? (Dica: 
pense nos problemas de proteção). 
 chroot é uma system call utilizada para alterar a raíz da árvore de 
diretórios. Pode ser utilizado para que usuários normais (sem privilégios de 
superusuário) só possam acessar a estrutura de arquivos a partir de um certo 
nível da árvore. 
 Portanto, por se tratar de uma chamada que envolve a segurança do 
sistema operacional, deve ser limitada apenas ao superusuário. 
 
20 – Examine a lista de chamadas de sistema da Figura 1-9 (As principais 
chamadas de sistema do MINIX). Qual delas você acha que provavelmente será 
executada mais rapidamente? Explique sua resposta. 
 exit, pois não precisara armazenar nenhuma informação do processo, já 
que este está sendo terminado. 
 
21 – Suponha que um computador possa executar 1 bilhão de 
instruções/segundo e que uma chamada de sistema ocupe 1000 instruções, 
incluindo a interrupções e toda a troca de contexto. Quantas chamadas de 
sistema o computador pode executar por segundo e ainda ter a metade da 
capacidade da CPU para executar código de aplicativos? 
 Precisaria executar 0,5 bilhões de instruções/s. Logo, se cada system call 
ocupa 1000 instruções, então serão realizadas 500.000 chamadas a system 
calls/s. 
22 – Existe uma chamada de sistema mknod na Figura 1-9, mas não há 
chamada rmnod. Isso significa que você precisa tomar muito cuidado ao criar i-
nodes dessa maneira porque não há meios de remover todos eles? 
 Não. Os arquivos especiais (dispositivos de I/O) são abstraídos de forma a 
serem tratados como arquivos normais. Desta forma, podemos removê-los 
normalmente através do uso de “rm”. 
 
23 – Por que o MINIX 3 tem o programa update executando em segundo plano 
(background) o tempo todo? 
 O programa “update”, que é lançado na inicialização do MINIX, executa 
uma chamada “sync” a cada 30 segundos, com o objetivo de esvaziar o cache 
(flushing). 
 Portanto, é necessário que este programa rode em background para não 
manter o sistema constantemente ocupado. 
 
24 – Faz algum sentido ignorar o sinal SIGALARM? 
 Se um sinal de alarme não for capturado, a ação padrão será executada, e 
o processo sinalizado será terminado. 
 Portanto, faz sentido o processador ignorar o sinal SIGALARM, no caso do 
responsável pelo processo desejar que este seja eliminado ao receber um sinal 
de alarme. 
 
25 – O modelo cliente-servidor é popular em sistemas distribuídos. Ele também 
pode ser utilizado em um sistema de um único computador? 
 Sim. Um exemplo é o próprio MINIX 3. 
 Nestes casos, o kernel é chamado de microkernel, pois passa requisições 
do usuário para servidores (FS, PM, etc), que rodam em modo usuário. Estes 
servidores têm o objetivo de diminuir a quantidade de processos executando em 
modo kernel. Desta forma, se um servidor falhar, a máquina não será 
derrubada. 
Outra vantagem desta arquitetura é sua capacidade de adaptação para 
uso em sistemas distribuídos. Se um cliente se comunica com um servidor por 
meio de mensagens, o cliente não precisa saber se a mensagem é manipulada 
de forma local ou se foi enviada por um servidor em uma máquina remota. Para 
o cliente, a situação é a mesma: uma requisição foi enviada e uma resposta 
retornou. 
26 – As versões iniciais do Pentium não suportavam um monitor de máquina 
virtual. Qual característica fundamental é necessária para permitir que uma 
máquina possa se tornar virtual? 
 A característica fundamental necessária para que uma máquina possa se 
tornar virtual é o tratamento de sinais de interrupção. 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
CAPÍTULO 2 
1 – Por que a multiprogramação é fundamental para a operação de um sistema 
operacional moderno? 
 Um SO moderno precisa se adequar a um grande compartilhamento de 
tempo e a uma grande demanda de processos, isso seria praticamente 
impossível sem a multiprogramação, com uma organização adequada no 
armazenamento dos processos através, principalmente, da tabela de processos. 
 
2 – Quais são os três principais estados que um processo pode estar? Descreva 
sucintamente o significado de cada um. 
 
 
 Running (executando): processo utilizando a CPU; 
 Ready (pronto): processo executável. Temporariamente parado, de forma 
a permitir que outro processo seja executado; 
 Blocked (bloqueado): processo incapaz de executar até que algum evento 
externo aconteça (e desbloqueie este processo); 
 
3 – Suponha que você fosse projetar uma arquitetura de computador avançada 
que fizesse a troca de processo em hardware, em vez de ter interrupções. De 
quais informações a CPU precisaria? Descreva como a troca de processo em 
hardware poderia funcionar. 
 A CPU precisaria saber o momento em que o processo em execução é 
bloqueado para fazer a troca por um processo no estado Pronto. Em uma 
arquitetura mais avançada, a CPU precisaria saber o tempo que o processoestá 
executando e sua prioridade em relação aos outros processos que estão no 
estado Pronto para realizar alternância entre processos e gerar sensação de 
simultaneidade de execução de processos. Isto é, o escalonamento de processos 
precisaria ser implementado em hardware. 
Para realizar a troca de processos o hardware deve empilhar o registrador 
de estado e o "program counter" (PC) e salvar o estado dos registradores do 
processo em execução. Quando este processo voltar a executar, o hardware 
desempilha o registrador de estado, o "program counter" (PC) e recupera o 
estado dos registradores do processo que irá executar. 
4 – Em todos os computadores atuais, pelo menos parte das rotinas de 
tratamento de interrupção é escrita em linguagem assembly. Por quê? 
 Pois os tratamentos de interrupções requerem que a rotina começe 
salvando o estado dos registradores na tabela de processos e configurando o 
ponteiro da pilha para uma pilha temporária, utilizada no tratamento da 
interrupção. Entretanto, estas ações não podem ser expressas em linguagens de 
alto nível, como C, e, portanto, devem ser escritas em assembly. 
 
5 – Redesenhe a Figura 2-2, adicionando dois novos estados: novo e terminado. 
Quando um processo é criado, ele está inicialmente no estado novo. Quando ele 
sai, está no estado terminado. 
 
 
6 – No texto, foi dito que o modelo da Figura 2-6(a) não era conveniente para 
um servidor de arquivos usando uma cache na memória. Por que não? Cada 
processo poderia ter a sua própria cache? 
 Se o servidor de arquivos for programado para utilizar o modelo da figura 
2-6(a), mostrada abaixo, cada thread deste servidor possuirá uma área 
específica de endereçamento de memória. Esta área é utilizada para 
implementar cache. Logo, cada processo teria cache em uma área diferente da 
memória. Desta maneira, se uma thread realizar operação de escrita no arquivo 
X e logo em seguida outra thread realizar uma operação de leitura ou escrita no 
arquivo X, existe o risco de que a operação realizada pela primeira tenha efeito 
apenas no cache e não no arquivo gravado, por exemplo, no HD. Logo, a 
segunda thread estaria operando com um arquivo desatualizado. No momento 
que uma das threads realizar flushing do cache no HD, poderá existir o problema 
de uma das versões do arquivo, modificada em uma das threads, ser perdida. 
Desta maneira, concluí-se que cada processo não poderia ter sua própria 
cache. 
 
 
7 – Qual é a diferença fundamental entre um processo e uma thread? 
Uma thread compartilha seu espaço de endereçamento com outras 
threads mas tem fluxo de controle próprio, ao passo que um processo possui um 
espaço de endereçamento e fluxo de controle únicos e portanto, não compartilha 
recursos com outros processos. 
 
8 – Em um sistema com threads, existe normalmente uma pilha por thread ou 
uma pilha por processo? Explique. 
 Cada thread possui seu próprio controle e fluxo e, portanto, sua própria 
pilha. Isso é necessário para que cada thread possa ser interrompida (por 
escalonamento ou bloqueio) e retomada do mesmo ponto, independente uma 
das outras. 
 
9 – O que é uma condição de corrida? 
 Condição de corrida é a situação em que dois ou mais processos realizam 
leitura ou escrita de dados compartilhados e o resultado final depende da ordem 
e tempo de execução dos processos. 
 
 
10 – Dê um exemplo de uma condição de corrida que poderia acontecer no 
momento de comprar passagens de avião por duas pessoas que desejam viajar 
juntas. 
 O comprador A verifica que existem dois acentos juntos disponíveis; 
 Neste mesmo instante, um comprador B realiza a compra de um dos 
acentos desejados por A; 
 Quando o comprador A tenta concluir sua compra, verifica que um dos 
acentos não se encontra mais disponível, impossibilitando-o de comprar 
os dois acentos juntos. 
Conclusão: o resultado da compra foi afetado pela ordem das compras 
realizadas pelos compradores A e B. 
 
17 – Na seção 2.2.4, foi descrita uma situação com um processo de alta 
prioridade, H, e um processo de baixa prioridade, L, que leva H a entrar em um 
laço infinito. O mesmo problema ocorrerá se for usado escalonamento round-
robin, em vez de escalonamento por prioridade? Discuta. 
 Não, uma vez que, no escalonamento round-robin, o controle da ordem 
dos processos é feito através do quantum. Portanto, caso um processo entre em 
seu estado crítico, em loop infinito, o escalonamento irá alternar para outro 
processo da fila após o fim de seu quantum. 
 
18 – Dentro dos monitores, o sincronismo utiliza 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 como parâmetro um 
predicado booleano arbitrário. Assim, alguém poderia escrever, por exemplo: 
 WAITUNTIL x < 0 or y + z < n 
A primitive SIGNAL não seria mais necessária. Esse esquema é claramente mais 
geral do que o de Hoare ou Brinch Hansen, mas não é utilizado. Por que não? 
(Dica: pense a respeito da implementação.) 
 Pois seria de implementação custosa, uma vez que, cada vez que há uma 
mudança em alguma variável que aparece em um predicado no qual algum 
processo está esperando, a rotina de sistema reavalia o predicado para ver se o 
processo pode ser desbloqueado. 
 Com os monitores de Hoare e Brinch Hansen, os processos só podem ser 
acordados por meio de uma primitiva de sinal. 
19 – Um restaurante fast food tem quatro tipos de funcionários: (1) os 
atendentes, que anotam os pedidos dos clientes; (2) os cozinheiros, que 
preparam o alimento; (3) os embaladores, que colocam o alimento em 
saquinhos; e (4) os caixas, que entregam os saquinhos para os clientes e 
recebem o dinheiro. Cada funcionário pode ser considerado um processo de 
comunicação seqüencial. Que forma de comunicação entre processos eles 
utilizam? Relacione este modelo com os processos no MINIX 3. 
 A comunicação entre os empregados se dá por meio de mensagens: 
pedidos, comida e saquinhos. 
 Se compararmos com a comunicação de processos do MINIX 3, podemos 
dizer que os quatro processos estão conectados através de pipes. 
 
20 – Suponha que temos um sistema de passagem de mensagens usando caixas 
de correio (mailbox). Ao enviar para uma caixa de correio cheia ou ao tentar 
receber de uma caixa vazia, um processo não é bloqueado. Em vez disso, ele 
recebe um código de erro. O processo responde ao código de erro apenas 
tentando novamente, repedidamente, até ser bem-sucedido. Esse esquema leva 
a condições de corrida? 
 Não, uma vez que nada nunca é perdido. Mas trata-se de uma espera 
ativa (loop de espera). 
 
21 – Na solução do problema da janta dos filósofos (Figura 2-20), por que a 
variável de estado é configurada como HUNGRY na função take_forks? 
 Pois caso o filósofo seja bloqueado, seus vizinhos podem, depois, por 
meio de um teste, verificar seu estado (faminto) através da variável, para que 
este possa ser desbloqueado assim que os garfos estiverem disponíveis. 
 
22 – Considere a função put_forks da Figura 2-20. Suponha que a variável 
state[i] tenha sido configurada como THINKING após as duas chamadas para 
test e não antes. Como essa alteração afetaria a solução para o caso de 3 
filósofos? E para 100 filósofos? 
 Nessas condições, assim que o filósofo terminasse de comer, nenhum de 
seus vizinhos seriam escolhidos para comer, mesmo com os garfos disponíveis. 
 Desta forma, o sistema convergiria para um estado em que todos os 
filósofos ficam pensando (tanto para 3 quanto para 100 filósofos). 
 
23 – O problema dos leitores e escritores pode ser formulado de várias maneirascom relação a qual categoria de processos pode ser iniciada e quando. Descreva 
completamente três variações diferentes do problema, cada uma favorecendo 
(ou não favorecendo) alguma categoria de processos. Para cada variação, 
especifique o que acontece quando um leitor ou um escritor se torna pronto para 
acessar a base de dados e o que acontece quando um processo tiver terminado 
de usar a base de dados. 
 Variação 1: leitores têm prioridade. Assim, nenhum escritor pode iniciar 
enquanto um leitor estiver ativo. Quando um leitor aparece, pode ser iniciado 
imediatamente, a não ser que um escritor esteja ativo. Neste caso, quando o 
escritor terminar, se houver leitores esperando, todos são iniciados, 
independente da presença de escritores esperando. 
 Variação 2: escritores têm prioridade. Neste caso, nenhum leitor pode 
iniciar enquanto houver escritoires esperando. Quando o último processo ativo 
terminar, o escritor é iniciado, se houver um. Caso contrário, todos os leitores, 
se houver algum, são iniciados. 
 Variação 3: versão simétrica. Quando um leitor está ativo, novos leitores 
podem ser iniciados imediatamente. Quando o escritor terminar, um novo 
escritor tem prioridade, se algum estiver esperando. Ou seja, uma vez iniciado 
os leitores, continua-se com leitores até não haver mais nenhum. Da mesma 
forma, uma vez iniciado escritores, todos os escritores pendentes estão 
habilitados para rodar. 
 
24 – Os computaodres CDC 6600 podiam manipular até 10 processos de E/S 
simultaneamente, usando uma forma interessante de escalonamento round-
robin, chamada compartilhamento de processador. Uma troca de processo 
ocorria após cada instrução, de modo que a instrução 1 vinha do processo 1, a 
instrução 2 vinha do processo 2, etc. A troca de processo era feita por um 
hardware especial e a sobrecarga era zero. Se um processo precisasse de T 
segundos para terminar na ausência de concorrência, de quanto tempo ela 
precisaria se fosse usado compartilhamento de processador com n processos? 
 Iria precisar de n*T segundos. 
 
 
 
 
 
25 – Normalmente, os escalonadores round-robin mantêm uma lista de todos os 
processo executáveis, com cada processo ocorrendo exatamente uma vez na 
lista. O que aconteceria se um processo ocorresse duas vezes na lista? Você 
pode imaginar um motivo para permitir isso? 
 Se um processo ocorre múltiplas vezes na lista, significa múltiplos quanta 
por ciclo para este processo. Isto pode ser usado para dar um maior 
compartilhamento da CPU para processos de maior importância (uma espécie de 
prioridade). Entretanto, caso este processo seja bloqueado, é preciso remover 
todas suas entradas na lista de processos Prontos. 
 
26 – Medidas de determinado sistema mostraram que o processo médio é 
executado por um tempo T antes de ser bloqueado na E/S. Uma troca de 
processo exige um tempo S, que é efitivamente desperdiçado (sobrecarga). Para 
escalonamento round-robin com quantum Q, escreva uma fórmula para a 
eficiência da CPU para cada uma das opções a seguir: 
(a) Q = infinito 
(b) Q > T 
(c) S < Q < T 
(d) Q = S 
(e) Q quase 0 
 
 
 
 
 
 
 
(a) 
 
 
 
(b) 
 
 
 
(c) 
 
 
 
 
 
 
 
 
(d) 
 
 
 
(e) (
 
 
) 
 
 
27 – Cinco tarefas estão esperando para serem executadas. Seus tempos de 
execução esperados são 9, 6, 3, 5 e X. Em que ordem elas devem ser 
executadas para minimizar o tempo de resposta médio? (Sua resposta 
dependerá de X.) 
 Para minimizar o tempo de resposta médio, utiliza-se o algoritmo de 
escalonamento SJT (Shortest Job First): 
 Se X < 3  X, 3, 5, 6, 9; 
 Se X = 3  X, 3, 5, 6, 9 ou 3, X, 5, 6, 9; 
 Se X = 4  3, X, 5, 6, 9; 
 Se X = 5  3, X, 5, 6, 9 ou 3, 5, X, 6, 9; 
 Se X = 6  3, 5, X, 6, 9 ou 3, 5, 6, X, 9; 
 Se X = 7 ou X = 8  3, 5, 6, X, 9; 
 Se X = 9  3, 5, 6, X, 9 ou 3, 5, 6, 9, X; 
 Se X > 9  3, 5, 6, 9, X;

Outros materiais