Você está na página 1de 5

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.
A interaçã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.

Você também pode gostar