Prévia do material em texto
SISTEMAS OPERACIONAIS Atividade 2 - 22/01/20 Samuel de Castro Ribeiro 0032743 1.2) ATIVIDADE: Faça os exercícios nº 20, 22, 23, 26, 28, 31 do livro-texto do autor TANENBAUM (4ª ed., pág. 57-58 do cap. 1). 20. Para cada uma das chamadas de sistema a seguir, dê uma condição que a faça falhar: fork, exec e unlink. A chamada de sistema “fork” falhará caso não exista espaços livres na tabela de processos. O “exec” falhará caso não exista o nome do arquivo passado como parâmetro. Já o “unlink” falhará caso o arquivo a ser desvinculado passado como parâmetro não exista. 22. A chamada count = write(fd, buffer, nbytes); pode retornar qualquer valor em count fora nbytes? Se a resposta for sim, por quê? Sim, pode haver retorno de valor diferente de nbytes. Isso se justifica pelo fato de que a chamada pode falhar caso o arquivo seja inválido ou não possa ser lido, retornando o valor -1. Outra forma para que o nbytes não seja retornado, se deve ao fato de que caso o disco esteja cheio, não será possível escrever o número de bytes que foram solicitados, ou seja, o final do arquivo pode ter sido encontrado antes. 23. Um arquivo cujo descritor é fd contém a sequência de bytes: 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5. As chamadas de sistema a seguir são feitas: lseek(fd, 3, SEEK_SET); read(fd, &buffer, 4); onde a chamada lseek faz uma busca para o byte 3 do arquivo. O que o buffer contém após a leitura ter sido feita? Como a chamada lseek posiciona o arquivo no byte 3 (que no caso é representado pelo número 4) e a chamada read tem como segundo parâmetro o endereço do buffer do arquivo fd e terceiro parâmetro o nbytes a serem lidos, que no caso são 4, portanto o buffer contém os bytes: 1, 5, 9, 2. 26. No exemplo dado na Figura 1.17, a rotina de biblioteca é chamada read e a chamada de sistema em si é chamada read. É fundamental que ambas tenham o mesmo nome? Se não, qual é a mais importante? Não é necessário que a rotina de biblioteca e a chamada de sistema tenham o mesmo nome. O nome da rotina de biblioteca é o mais importante, já que este consta de forma “nativa” ao sistema operacional. O que a rotina de biblioteca faz é ler traps para o kernel colocando o número da chamada de sistema em um registro ou em uma pilha. Esse número é indexado em uma tabela de ponteiros. 28. Para um programador, uma chamada de sistema parece com qualquer outra chamada para uma rotina de biblioteca. É importante que um programador saiba quais rotinas de biblioteca resultam em chamadas de sistema? Em quais circunstâncias e por quê? Sim. Quando as rotinas de biblioteca resultam em chamadas de sistema, o programa será executado de forma mais lenta do que as rotinas de biblioteca que não resultam em chamadas de sistema. Isso acontece porque a cada chamada de sistema há uma mudança de contexto do usuário para o kernel, e isso toma tempo o que acarreta em uma queda de desempenho. 31. Explique como a separação da política e mecanismo ajuda na construção de sistemas operacionais baseados em micronúcleos. Quando há a separação entre mecanismo e políticas em sistemas operacionais baseados em micronúcleos a um extremo, permite que os designers implementem um conjunto básico de blocos de construção primitivos no núcleo. Esses blocos são praticamente independentes da política e isso ajuda na implementação de mecanismos e políticas mais avançadas para que estas sejam adicionadas por meio de módulos de kernel criados pelo usuário ou por meio dos próprios programas de usuário. 2.2) ATIVIDADE: Faça os exercícios nº 2.1, 2.6, 2.8, 2.16, 2.21, 2.22 do livro-texto do autor SILBERSCHATZ (9ª ed., pág. 94-96 do cap. 2). 2.1 Qual é a finalidade das chamadas de sistema? As chamadas de sistema têm a finalidade de fornecer uma interface entre os processos e o sistema operacional. São a partir delas que se tem acesso as rotinas do sistema. As chamadas de sistemas são usadas pelos programas para a solicitação da execução de algum serviço junto ao núcleo (kernel) do sistema operacional. Além disso, a criação e finalização dos processos dependem da permissão dessas chamadas de sistema. É através dessas chamadas de sistema que são definidos os acessos aos recursos de baixo nível como alocação de memória, periféricos e arquivos. 2.6 Que chamadas de sistema têm de ser executadas por um interpretador de comandos ou shell para iniciar um novo processo? Com base no sistema UNIX, o interpretador de comandos deve executar uma chamada de sistema fork() que cria o processo filho idêntico ao pai 9exceto por alguns atributos e recursos), onde em seguida o programa selecionado é carregado na memória e executado através da chamada de sistema exec(). Com base no Windows, o shell deve executar a chamada de sistemas CreateProcess(). 2.8 Qual é a principal vantagem da abordagem em camadas para o projeto de sistemas? Quais as desvantagens da abordagem em camadas? A abordagem em camadas tem como vantagem a simplicidade de construção e depuração. Isso se deve ao fato de que as camadas selecionadas só podem usar as funções e serviços de camadas de nível mais baixo. Um exemplo seria a primeira camada pode ser depurada sem se preocupar com o restante do sistema já que ela usa somente o hardware mais básico (que por suposição está correto) para implementar suas funções. Uma vez que esta camada esteja depurada e que não haja nenhum erro, a camada seguinte é depurada e seu funcionamento correto é assumido. E assim, em sequência as depurações e verificações do funcionamento correto de cada camada segue. Em caso de erro encontrado em alguma camada durante a depuração, o erro estará nesta camada, já que as camadas anteriores já foram depuradas. Essa abordagem simplifica a verificação e a depuração do sistema. Como desvantagem dessa abordagem tem-se a definição apropriadas das diversas camadas além de uma tendência em ser menos eficientes. A primeira desvantagem pode ser explicada pelo fato de que uma camada só pode usar as camadas de nível mais baixo, exigindo um planejamento cuidadoso. Já a segunda se deve ao fato de que uma camada se comunicará com outra diretamente com a seguinte podendo seus parâmetros serem modificados e dados serem passados. Além disso, cada camada adiciona overhead à chamada de sistema e isso tem como resultado uma demora da execução maior do que a de um sistema não estruturado em camadas. 2.16 Quais são as vantagens e desvantagens do uso da mesma interface de chamadas de sistema para manipular tanto arquivos quanto dispositivos? Vantagem: fácil de adicionar um novo dispositivo de driver implementando o código específico do hardware para suportar esta interface, beneficiando o desenvolvimento do código do programa usuário, onde este já pode ser escrito para acessar dispositivos e arquivos da mesma maneira. Desvantagem: pode ser difícil capturar a funcionalidade de certos dispositivos no contexto. 2.21 Qual é a principal vantagem da abordagem de microkernel para o projeto de sistemas? Como os programas de usuário e serviços do sistema interagem em uma arquitetura de microkernel? Quais são as desvantagens do uso da abordagem de microkernel? O método de microkernel estrutura o sistema operacional onde os componentes não essenciais do kernel são removidos e implementados como programas de nível de sistema e de usuário, resultando em um kernel menor. Tem como principal vantagem facilitar a extensão do sistema operacional, onde todos os serviços novos são acrescentados ao espaço do usuário e por isso não requerem modificação do kernel. Além disso, é mais seguro e confiável, ao passo que a maioria dos serviços são executados como processos de usuários. Assim, se um processo falha, o resto do sistema operacional permanece intocado. Ainteração entre os programas de usuário e serviços ocorrem de forma indireta através de troca de mensagens que ambos enviam ao microkernel. Dentre as desvantagens desse método estão: queda de desempenho devido a overheads de funções de sistema, implementação difícil e queda de desempenho devido à necessidade de mudança de modo de acesso a cada comunicação entre clientes e serviços. 2.22 Quais são as vantagens do uso de módulos de kernel carregáveis? Os módulos de kernel carregáveis tem como característica de projeto que o kernel forneça serviços nucleares enquanto outros serviços são implementados dinamicamente quando o kernel estiver em execução. Eles têm como vantagem serem mais flexíveis em comparação a um sistema em camadas já que um módulo pode chamar qualquer outro módulo, sem a necessidade de chamar diretamente um módulo seguinte. Outra vantagem seria sua semelhança com a abordagem microkernel, já que o módulo principal tem apenas funções nucleares e o conhecimento de como carregar e se comunicar com outros módulos, porém ele é mais eficiente já que os módulos não precisam invocar a transmissão de mensagens para se comunicar.