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.