Você está na página 1de 4
 
QUESTÕES SOBRE PROCESSO
1.
 
Descreva as diferenças entre o escalonamento de curto prazo, médio prazo e longo prazo. Resposta:
 
Curto prazo(escalonador de CPU)
 – 
 seleciona as tarefas na memória cujas tarefas não estejam  prontas para execução e aloca a CPU para elas.
 
Médio prazo
 – 
 usado especialmente com sistemas de tempo compartilhado, como um nível de escalonamento intermediário. Um esquema de swap é implementado para retirar da memória  programas parcialmente executados e reinstanciá-los mais tarde, a fim de continuar a partir de onde pararam.
 
Longo prazo(escalonador de tarefa)
 – 
 determina quais tarefas são trazidas para a memória, para  processamento. A diferença principal está na freqüência de sua execução. O escalonamento de curto prazo precisa selecionar um novo processo com muita freqüência. O de longo prazo é usado muito menos freqüentemente,  pois trata de colocar tarefas no sistema e pode esperar até que uma tarefa termine, antes de admitir outra. 2.
 
Descreva as ações tomadas por um kernel para a troca de contexto entre os processos. Em geral, o sistema operacional precisa salvar o estado do processo correntemente em execução e restaurar o estado do processo escalonado para ser executado em seguida. Salvar o estado de um  processo normalmente inclui os valores de todos os registradores da CPU, além da alocação de memória. As trocas de contexto também precisam realizar muitas operações específicas da  plataforma, incluindo o esvaziamento de caches de dados e instruções. 3.
 
Quais são os benefícios e as desvantagens de cada um dos seguintes? Considere os níveis tanto do sistema quanto do programador. a. Comunicação síncrona e assíncrona.  b. Buffer automático e explícito. c. Enviar por cópia e enviar por referência. d. Mensagens de tamanho fixo e de tamanho variável. Resposta: a.
 
Comunicação síncrona e assíncrona
 – 
 Um benefício da comunicação síncrona é que ela  permite um encontro entre o emissor e o receptor. Uma desvantagem de um envio com  bloqueio é que um ponto de encontro pode não ser exigido e a mensagem poderia ser entregue de forma assíncrona, recebida em um ponto de nenhum interesse ao emissor. Como resultado, os sistemas de troca de mensagem normalmente oferecem as duas formas de sincronismo.  b.
 
Buffer automático e explícito
 – 
 O buffer automático oferece uma fila com tamanho indefinido, garantindo assim que o emissor nunca terá de bloquear enquanto espera para copiar uma mensagem. Não existem especificações de como o buffer automático será fornecido; um esquema pode reservar uma memória suficientemente grande, na qual grande parte da memória é desperdiçada. O buffer explícito especifica o tamanho do buffer. Nessa situação, o emissor pode ser bloqueado enquanto espera pelo espaço disponível na fila. Porém, há menos probabilidade de que a memória seja desperdiçada com o buffer explícito. c.
 
Enviar por cópia e enviar por referência
 – 
 Enviar por cópia não permite que o receptor altere o estado do parâmetro; enviar por referência permite isso. Um benefício de enviar por referência é que permite que o programador escreva uma versão distribuída de uma aplicação centralizada. A RMI da Java oferece ambos, porém, a passagem de um parâmetro por referência exige a declaração do parâmetro também como um objeto remoto. d.
 
Mensagens de tamanho fixo e de tamanho variável
 – 
 As implicações disso estão relacionadas, na maioria da vezes, a aspectos da bufferização; com mensagens de tamanho fixo, um buffer com tamanho específico pode manter uma quantidade de mensagens conhecida. A quantidade
 
de mensagens de tamanho variável que podem ser mantidas por esse buffer é desconhecida. Considere a forma como o Windows 2000 trata dessa situação: com mensagens de tamanho fixo (qualquer coisa < 256 bytes), as mensagens são copiadas do espaço de endereços do emissor para o espaço de endereços do processo receptor. Mensagens maiores (ou seja, mensagens de tamanho variável) utilizam memória compartilhada para passar a mensagem.
QUESTÕES DE THREADS
1.
 
Forneça dois exemplos de programação em que o uso de multithreads oferece melhor desempenho do que uma solução com única thread. Resposta: (1) Um servidor Web que atende a cada requisição em uma thread separada. (2) Uma aplicação paralelizada, como uma multiplicação de matriz em que diferentes partes da matriz  podem ser atuadas em paralelo. (3) Um programa GUI interativo, como um depurador em que uma thread é usada para monitorar a entrada do usuário, outra thread representa a aplicação em execução e uma terceira thread monitora o desempenho. 2.
 
Forneça dois exemplos de programação em que o uso de multithreadsnãooferece melhor desempenho do que uma solução com uma única thread. Resposta: (1) Qualquer tipo de programa seqüencial não é um bom candidato para usar threads. Um exemplo disso é um programa para calcular a devolução de imposto de renda individual. (2) Outro
exemplo é um programa de “shell”, como o C
-shell ou o Korn shell. Esse tipo de programa  precisa monitorar de perto seu próprio espaço de trabalho, como arquivos abertos, variáveis de ambiente e diretório de trabalho atual. 3.
 
Cite duas diferenças entre as threads no nível do usuário e threads no nível do kernel. Sob que circunstâncias um tipo é melhor que o outro? Resposta: (1) As threads no nível do usuário são desconhecidas pelo kernel, enquanto o kernel está ciente das threads do kernel. (2) As threads do usuário são escalonadas pela biblioteca de threads e o kernel escalona as threads do kernel. (3) As threads do kernel não precisam estar associadas a um processo, enquanto cada thread do usuário pertence a um processo. 4.
 
Descreva as ações tomadas por um kernel para a troca de contexto entre as threads no nível do kernel. Resposta: A troca de contexto entre as threads do kernel normalmente exige salvar o valor dos registradores da CPU da thread que está saindo e restaurar os registradores da CPU da nova thread que está sendo escalonada. 5.
 
Descreva as ações tomadas por uma biblioteca de threads para a troca de contexto entre threads no nível do usuário. Resposta: A troca de contexto entre as threads do usuário é bem semelhante à troca entre as threads do kernel, embora seja dependente da biblioteca de threads e de como ela mapeia as threads do usuário em threads do kernel. Em geral, a troca de contexto entre as threads do usuário envolve  pegar uma thread do usuário do seu LWP e substituí-la por outra thread. Essa ação normalmente envolve salvar e restaurar o estado dos registradores. 6.
 
Que recursos são usados quando uma thread é criada? Como eles diferem daqueles usados quando um processo é criado?
 
Resposta: Como uma thread é menor do que um processo, a criação de thread normalmente utiliza menos recursos do que a criação de um processo. A criação de um processo exige a alocação de um bloco de controle de processo (PCB), uma estrutura de dados um tanto grande. O PCB inclui um mapa de memória, uma lista de arquivos abertos e variáveis de ambiente. A alocação e o gerenciamento do mapa de memória normalmente é a atividade mais demorada. A criação de uma thread do usuário ou do kernel envolve a alocação de uma estrutura de dados pequena para manter um conjunto de registradores, pilha e prioridade. 7.
 
Suponha que um sistema operacional mapeie threads no nível do usuário no kernel usando o modelo muitos-para-muitos, no qual o mapeamento é feito através de LWPs. Além disso, o sistema  permite que os desenvolvedores criem threads de tempo real. É necessário associar uma thread de tempo real a um LWP? Explique. Resposta: Sim. A temporização é fundamental para aplicações de tempo real. Se uma thread for marcada como tempo real, mas não estiver ligada a um LWP, a thread pode ter de esperar para ser conectada a um LWP antes de sua execução. Considere se uma thread de tempo real está executando (está conectado a um LWP) e depois bloqueie (ou seja, precisa realizar E/S, foi  preemptado por uma thread de tempo real de maior prioridade, está esperando por um lock de exclusão mútua etc.). Enquanto a thread de tempo real está bloqueada, o LWP ao qual foi conectado foi atribuído a outra thread. Quando a thread de tempo real tiver sido escalonada para executar novamente, primeiro terá de esperar para ser conectada a um LWP. Vinculando um LWP a uma thread de tempo real, você está garantindo que a thread poderá ser executada com um mínimo de atraso depois de escalonada.
QUESTÕES SOBRE ESCALONAMENTO
1.
 
Um algoritmo de escalonamento de CPU determina a ordem para a execução de seus  processos escalonados. Dados n processos a serem escalonados em um processador, quantos escalonamentos possíveis existem? Dê uma fórmula em termos de n. Resposta:n!(nfatorial =n×n
 – 
 1 ×n
 – 
 2 × ... × 2 × 1) 2.
 
Defina a diferença entre escalonamento preemptivo e não-preemptivo. Indique por que o escalonamento não-preemptivo estrito provavelmente não será usado em um centro de computação. Resposta: O escalonamento preemptivo permite que um processo seja interrompido no meio de sua execução, afastando a CPU e alocando-a a outro processo. O escalonamento não- preemptivo garante que um processo abandonará o controle da CPU somente quando terminar com seu burst de CPU atual. 3.
 
Considere uma variante do algoritmo de escalonamento RR, em que as entradas na fila de  prontos são ponteiros para os PCBs. a. Qual seria o efeito de colocar dois ponteiros para o mesmo processo na fila de prontos?  b. Quais seriam as vantagens e desvantagens mais importantes desse esquema? c. Como você modificaria o algoritmo RR básico para conseguir o mesmo efeito sem os  ponteiros duplicados? Resposta: a.
 
Esse processo terá aumentado sua prioridade, pois ao obter tempo com mais freqüência ele está recebendo tratamento preferencial  b.
 
A vantagem é que tarefas mais importantes poderiam receber mais tempo, em outras  palavras, maior prioridade no tratamento. A conseqüência, naturalmente, é que tarefas menores sofrerão mais.

Recompense a sua curiosidade

Tudo o que você quer ler.
A qualquer hora. Em qualquer lugar. Em qualquer dispositivo.
Sem compromisso. Cancele quando quiser.
576648e32a3d8b82ca71961b7a986505