Buscar

Respostas de Sistemas Operacionais

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

Prévia do material em texto

Respostas do Capítulo 2
2.2	. Execução do programa: O sistema operacional carrega o conteúdo (ou seções) de um arquivo na memória e começa sua execução. Um programa no nível de usuário não pode ser confiável para alocar adequadamente o tempo da CPU.
. Operações de E / S: Discos, fitas, linhas seriais e outros dispositivos devem ser comunicados com um nível muito baixo. O usuário precisa apenas especificar o dispositivo e a operação para executar nele, enquanto o sistema converte essa solicitação em comandos específicos do dispositivo ou do controlador. Os programas de nível de usuário não podem ser confiáveis para acessar apenas os dispositivos que eles devem ter acesso e devem apenas acessá-los quando não utilizados.
. Manipulação do sistema de arquivos: Há muitos detalhes na criação de arquivos, eliminação, alocação e nomeação que os usuários não deveriam ter que executar. Blocos de espaço em disco são usados por arquivos e devem ser rastreados. A exclusão de um arquivo requer a remoção do nome das informações do arquivo e liberando os blocos alocados. As proteções também devem ser verificadas para assegurar o acesso adequado aos arquivos. Os programas de usuários não poderiam garantir adesão aos métodos de proteção, nem ser confiáveis para alocar apenas blocos livres e blocos deslocados na eliminação de arquivos.
. Comunicações: A passagem de mensagens entre os sistemas requer mensagens que são transformadas em pacotes de informações, enviadas para a rede do controlador, transmitido através de um meio de comunicação, e remontado pelo sistema de destino. Correção de pedidos de pacote e dados devem ocorrer. Novamente, os programas de usuários podem não coordenar o acesso ao dispositivo de rede, ou eles podem receber pacotes destinados a outros processos.
. Detecção de erro. A detecção de erros ocorre nos níveis de hardware e de software. No nível de hardware, todas as transferências de dados devem ser inspecionadas para garantir que os dados não tenham sido corrompidos na transição. Todos os dados na mídia devem ser verificados para ter certeza de que eles não mudaram já que foram escritos para a mídia. No nível do software, a mídia deve ser verificada para a consistência dos dados; por exemplo, faça o número de blocos de armazenamento alocados e não alocados combinarem o número total do dispositivo. Lá, os erros são frequentemente independentes do processo (por exemplo, a corrupção de dados em um disco), então deve haver um programa global (o sistema operacional) que lida com todos os tipos de erros. Além disso, tendo erros processados pelo sistema operacional, os processos não precisam conter código para capturar e corrigir todos os erros possíveis em um sistema.
2.3 	a. Passar parâmetros em registros.
b. Registros passam os endereços iniciais de blocos de parâmetros.
c. Os parâmetros podem ser colocados ou empurrados para a pilha pelo programa, e sair da pilha pelo sistema operacional.
2.4 	Um poderia emitir interrupções periódicas do temporizador e monitorar quais instruções ou quais seções de código estão atualmente sendo executadas quando as interrupções são entregues. Um perfil estatístico de quais partes do código foram ativas devem ser consistentes com o tempo gasto pelo programa em diferentes seções do seu código. Uma vez que esse perfil estatístico tenha sido obtido, o programador poderia otimizar as seções de código que são consumidas mais dos recursos da CPU.
2.5	. Criação e exclusão de arquivos
. A criação e exclusão de diretórios
. O suporte de primitivas para manipulação de arquivos e diretórios
. O mapeamento de arquivos no armazenamento secundário
. O backup de arquivos em mídias de armazenamento estáveis (não voláteis)
2.6 	Cada dispositivo pode ser acessado como se fosse um arquivo no arquivo de sistema. Uma vez que a maioria do kernel lida com dispositivos através desta interface de arquivo, é relativamente fácil adicionar um novo driver de dispositivo implementando o código específico do hardware para suportar esta interface de arquivo abstrato. Assim sendo, isso beneficia o desenvolvimento do código do programa do usuário, que pode ser escrito para acessar dispositivos e arquivos da mesma maneira e código do driver do dispositivo, que pode ser escrito para suportar uma API bem definida. A desvantagem com o uso da mesma interface é que pode ser difícil para capturar a funcionalidade de certos dispositivos no contexto da API de acesso a arquivos, resultando em perda de funcionalidade ou perda de desempenho. Parte disso pode ser superada pelo uso da operação ioctl que fornece uma interface de propósito geral para processos, invocando operações em dispositivos.
2.7	Lê comandos do usuário ou de um arquivo de comando se os executa, geralmente, transformando-os em uma ou mais chamadas de sistema. Geralmente não é parte do kernel desde que o interpretador de comando é sujeito a alterações. Um usuário deve ser capaz de desenvolver um novo comando intérprete usando a interface de chamada do sistema fornecida pelo sistema operacional. O interpretador de comando permite que um usuário crie e gerencie processos e também determinar formas pelas quais eles se comunicam (como através de pipes e arquivos). Como toda essa funcionalidade poderia ser acessada por um programa de nível de usuário usando as chamadas do sistema, deveria ser possível para que o usuário desenvolva um novo intérprete de linha de comando.
2.8	Modelo de memória compartilhada.
Pontos Fortes:
A comunicação de memória compartilhada é mais rápida do que no modelo de passagem de mensagem quando os processos estão na mesma máquina.
Pontos Fracos:
Processos diferentes precisam garantir que eles não estão escrevendo no mesmo local simultaneamente.
Processos que se comunicam usando memória compartilhada precisam resolver problemas de proteção de memória e sincronização.
Modelo de passagem de mensagens.
Pontos Fortes:
Mais fácil de implementar do que o modelo de memória compartilhada
Pontos fracos:
A comunicação usando a passagem de mensagens é mais lenta do que a memória compartilhada por causa do tempo envolvido na configuração da conexão.
2.9	O mecanismo e a política devem ser separados para garantir que os sistemas são fáceis de modificar. Nenhuma das duas instalações do sistema são as mesmas, então cada instalação pode querer ajustar o sistema operacional de acordo com suas necessidades. Com mecanismo e política separados, a política pode ser alterada à vontade enquanto o mecanismo permanece inalterado. Este arranjo fornece um sistema mais flexível.
2.10	Os programas Java pretendem ser independentes de plataforma de E / S . Portanto, a linguagem não fornece acesso aos recursos de sistema mais específicos como leitura de dispositivos ou portas de E / S. Para executar uma operação específica de E / S do sistema, você deve escreve-la em um idioma que suporte tais recursos (como C ou C ++.) Tenha em mente que um programa Java que chama um método nativo escrito em outra linguagem não será mais arquitetura neutra.
2.11	O subsistema de memória virtual e o subsistema de armazenamento são tipicamente bem acoplados e requerem um design cuidadoso em uma camada de sistema devido às seguintes interações. Muitos sistemas permitem que arquivos possam ser mapeado no espaço da memória virtual de um processo de execução. Por outro lado, o subsistema de memória virtual geralmente usa o armazenamento do sistema para fornecer backing store para páginas que atualmente não residem em memória. Além disso, as atualizações do sistema de arquivos às vezes são armazenadas em buffer na memória física antes de ser descarregada no disco, exigindo cuidado na coordenação do uso da memória entre a memória virtual do subsistema e o sistema de arquivos.
2.12	Os benefícios normalmente incluem o seguinte (a) adicionar um novo serviço não requer modificação do kernel, (b) é mais seguro quando mais operações são feitas no modo usuário do que no modo kernel, e (c) O design e a funcionalidade do kernel mais simplesgeralmente resultam em um sistema operacional mais confiável. Programas de usuário e serviços de sistema interagem em uma arquitetura de microkernel usando mecanismos de Inter processos de comunicação como mensagens. Essas mensagens são transmitidas pelo sistema operacional. A principal desvantagem da arquitetura microkernel são os custos gerais associados ao Inter processo de comunicação e os frequentes usos das funções de mensagens do sistema operacional para permitir que o processo do usuário e o serviço do sistema interajam um com o outro.
2.13	A abordagem modular do kernel requer subsistemas para interagir um com o outro através de interfaces cuidadosamente construídas que são tipicamente estreitas (em termos da funcionalidade que está exposta aos módulos externos). A abordagem do kernel em camadas é semelhante a esse respeito. Contudo, o kernel em camadas impõe um pedido rigoroso de subsistemas, como que os subsistemas das camadas inferiores não podem chamar operações correspondente aos subsistemas de camada superior. Não existem tal restrições na abordagem do kernel modular, em que os módulos são livres para invocar uns aos outros sem restrições.
2.14	O sistema é fácil de depurar e os problemas de segurança são fáceis de resolver. As máquinas virtuais também fornecem uma boa plataforma para pesquisa de sistema operacional, uma vez que muitos sistemas operacionais diferentes podem ser executados em um sistema físico.
2.15	Java é uma linguagem interpretada. Isso significa que a JVM interpreta as instruções bytecode uma por vez. Normalmente, muitos ambientes interpretados são mais lentos que a execução de binários nativos, para a interpretação o processo requer a conversão de cada instrução em código nativo de máquina. Um compilador just-in-time (JIT) compila o bytecode para um método em código de máquina nativo na primeira vez que o método é encontrado. Isto significa que o programa Java é essencialmente executado como um aplicativo nativo (é claro, o processo de conversão do JIT também leva tempo, mas não tanto quanto a interpretação bytecode.) Além disso, o JIT armazena em cache o código compilado para que possa ser reutilizado na próxima vez que o método for encontrado. Um programa Java que é executado por um JIT em vez de um tradicional intérprete geralmente corre muito mais rápido.
2.16	Um sistema operacional guest fornece seus serviços por mapeamento sobre a funcionalidade fornecida pelo sistema operacional hospedeiro. Uma chave questão que precisa ser considerada na escolha do sistema operacional hospedeiro é se é suficientemente geral em termos de interface da chamada do sistema para poder suportar a funcionalidade associada ao sistema operacional guest(convidado).
2.17	A síntese é impressionante devido ao desempenho que ele atinge através da compilação on-the-fly. Infelizmente, é difícil de depurar problemas dentro do kernel devido à fluidez do código. Além disso, a compilação é específica do sistema, tornando Synthesis difícil de acessar (um novo compilador deve ser escrito para cada arquitetura).
2.18	
// CS 474
// Program Name: homework1.c
// Author: Melissa Duran
// Date: 10/5/2017
// Purpose: Reads and copies what is written in one file to another
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
FILE *cfPtr1;
FILE *cfPtr2;
char whatIWrite;
int main (void) {
char *fileToRead = malloc(101);
char *fileToWrite = malloc(101);
  
printf("Please enter the name of the file to be read: ");
scanf("%s",fileToRead);
  
//if file is read as empty retruns teh text File could not be opened
if ( (cfPtr1 = fopen(fileToRead, "r" )) == NULL) {
puts( "File could not be opened\n");
}
  
printf("Please enter the name of the file where you would like to write: \n");
scanf("%s", fileToWrite);
//if file is read as empty retruns teh text File could not be opened
if ( (cfPtr2 = fopen(fileToWrite, "w" )) == NULL) {
puts( "File could not be opened\n");
}
  
//Everything is well and we can copy the files.
else{
  
//Read from fileToRead
whatIWrite = fgetc(cfPtr1);
while (whatIWrite != EOF){
fputc(whatIWrite, cfPtr2);
whatIWrite = fgetc(cfPtr1);
}
printf("The file has been copied.");
  
//closes the file
fclose ( cfPtr1 );
fclose ( cfPtr2 );
}//End else
return 0;
  
} // end main
Respostas do Capítulo 3
3.1	. Curto prazo (escalonador de CPU) - seleciona de tarefas na memória aquelas tarefas que estão prontos para executar e alocar a CPU para eles.
	. Médio prazo, usado especialmente com sistemas de tempo compartilhado como um nível de escalonamento intermediário. Um esquema de troca é implementado para remover programas parcialmente executados da memória e reintegrá-los mais tarde para continuar onde eles pararam.
	. A longo prazo (escalonador de tarefa) - determina quais tarefas são trazidas dentro da Memória para processamento.
A principal diferença está na frequência de sua execução. O curto prazo deve selecionar um novo processo com bastante frequência. A longo prazo é usado muito menos muitas vezes, pois lida com a colocação de tarefas no sistema e pode esperar um pouco para que um trabalho termine antes de admitir outro.
3.2	Em geral, o sistema operacional deve salvar o estado do processo em execução e restaurar o estado do processo escalonado para ser executado em seguida. Salvar o estado de um processo normalmente inclui valores de todos os registros da CPU, além da alocação de memória. Trocas de contexto também devem executar muitas operações específicas da arquitetura, incluindo dados de descarga e caches de instruções.
3.3	Se um mecanismo RPC não pudesse suportar as semânticas "no máximo uma vez "ou" pelo menos uma vez ", o servidor RPC não pode garantir que um procedimento remoto não terá invocado várias ocorrências. Considere se um procedimento remoto estava retirando dinheiro de uma conta bancaria em um sistema que não suportava esta semântica. É possível que uma única invocação do procedimento remoto pode levar a múltiplos levantamentos no servidor. Para um sistema suportar qualquer uma dessas semânticas geralmente requer que o servidor mantenha alguma forma de estado do cliente, como o timestamp descrito no texto. Se um sistema não puder suportar qualquer uma dessas semânticas, então um sistema só pode fornecer procedimentos remotos com segurança que não alterem dados ou forneça resultados sensíveis ao tempo. Usando o nosso crédito bancário por exemplo, certamente exigimos "no máximo uma vez" ou "pelo menos uma vez" para realizar uma retirada (ou depósito!) No entanto, um inquérito sobre um saldo da conta ou outra informação adicional, como nome, endereço, etc. não exige essas semânticas.
3.4	Please refer to the supporting Web site for source code solution.
3.5	. Comunicação síncrona e assíncrona: Um benefício na comunicação síncrona é que permite um encontro entre o remetente e receptor. A desvantagem de um envio de bloqueio é que um encontro pode não ser exigido e a mensagem pode ser entregue de maneira assíncrona; recebido em um ponto sem interesse para o remetente. Como resultado, os sistemas de transmissão de mensagens geralmente fornecem as duas formas de sincronização.
	. Buffer Automático e explicito - O buffer automático fornece uma fila com comprimento indefinido; garantindo assim que o remetente nunca tenha que bloquear enquanto espera copiar uma mensagem. Não há especificações de como o buffer automático será fornecido; um esquema pode reservar memória suficientemente grande, onde grande parte da memória é desperdiçado. O buffer rígido explícito especifica o tamanho do buffer. Nessa situação, o remetente pode ser bloqueado enquanto aguarda espaço disponível na fila. No entanto, é menos provável que a memória será desperdiçada com buffering explícito.
	. 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 ele permite o programador escreveruma versão distribuída de uma aplicação centralizada. RMI de Java fornece ambos, no entanto passando um parâmetro por referência requer declarar o parâmetro como um objeto remoto também.
	. Mensagens de tamanho fixo e de tamanho variável - As implicações disso está relacionada principalmente a problemas de buffering; com mensagens de tamanho fixo, um buffer com um tamanho específico pode conter um número conhecido de mensagens. O número de mensagens de tamanho variável que podem ser mantidos por esse buffer é desconhecido. Considere como o Windows 2000 lida com esta situação: com mensagens de tamanho fixo (qualquer coisa <256bytes), as mensagens são copiadas do espaço de endereço do remetente para o espaço de endereço do processo de recebimento. Mensagens maiores (ou seja, mensagens de tamanho variável) usam memória compartilhada para passar a mensagem.

Continue navegando