gabarito comentado

Propaganda
CURSO - TADS
TURMA 2008.1 – 2° PERÍODO – 3° MÓDULO
AVALIAÇÃO MP2 – DATA 02/10/2008
SISTEMAS OPERACIONAIS
2008/2
GABARITO COMENTADO
SISTEMAS OPERACIONAIS
PROF. Cláudio de C. Monteiro, Evanderson S. de Almeida, Vinícius de M. Rios
A. A técnica em que, cada processo enquanto está acessando uma variável compartilhada exclui
todos os outros processos de fazê-lo simultaneamente, chamamos de:
1. Exclusão mútua
2. Monitores
3. Deadlock
4. Processamento paralelo
COMENTÁRIOS: A alternativa 1 está correta, visto que, para que um processo possa ter um
acesso a uma variável compartilhada, deve esperar a sua vez, para que não haja erros de dados no
processamento paralelo, como pode ser comprovado no terceiro parágrafo da página 139 da
apostila. A alternativa 2 está incorreta, já que, é denominada como monitor, uma coleção de
procedimentos, variáveis, e estruturas de dados que são todos agrupados em um tipo especial de
módulo ou pacote, como pode ser comprovado no terceiro parágrafo da página 145 da apostila. A
alternativa 3 está incorreta, visto que, deadlock é quando o processo está parado a espera de um
evento particular que jamais ocorrerá. A alternativa 4 está incorreta, já que, o processamento
paralelo executa certas operações em paralelo, como pode ser comprovado no primeiro parágrafo
da página 136 da apostila. Portanto, as alternativas 2, 3 e 4 estão incorretas.
B. Um processo pode ser temporariamente retirado da memória para uma área de armazenamento
de trocas, de forma que mais tarde seja trazido de volta para a memória para que continue
executando. Esse procedimento é denominado de:
1. Stub
2. Ligação dinâmica
3. Swapping
4. Nenhuma das alternativas anteriores
COMENTÁRIOS: A alternativa 3 está correta, visto que, a "área de troca" ou swapping é
utilizada quando se acaba a área da memória, requerendo uma área de armazenamento,
normalmente, este espaço para armazenamento é um disco, como pode ser comprovado no terceiro
parágrafo da página 162 da apostila. A alternativa 1 está incorreta, já que, o stub é um pequeno
código que indica como localizar a rotina de biblioteca apropriada residente em memória, ou
ainda como carregar a biblioteca se a rotina ainda não está presente na memória. A alternativa 2
está incorreta, visto que, na ligação dinâmica ao invés da carga de rotinas ser adiada até o
1
momento da execução do programa, a ligação de rotinas é adiada até o tempo de execução, como
pode ser comprovado no quarto parágrafo da página 159 da apostila. A alternativa 4 está
incorreta, visto que, uma das alternativas está correta. Portanto, as alternativas 1, 2 e 4 estão
incorretas.
C. Classifique em V (verdadeira) ou F (falsa) as afirmações a seguir, selecionando em seguida a
alternativa que representa a seqüência correta.
( ) Um arquivo é constituído de um conjunto de informações logicamente relacionadas.
( ) A referência a um dado arquivo é feita por meio do uso do seu nome, sendo usadas tabelas de
tradução chamadas diretórios, para identificar, a partir do nome, o endereço no qual o arquivo
se encontra armazenado.
( ) A implementação do conceito de arquivo requer que o sistema operacional se preocupe com
aspectos tais como organização, proteção e compartilhamento.
( ) Quanto à forma de armazenamento nas unidades de disco, os arquivos são mantidos como uma
seqüência de blocos, sendo cada bloco maior que o tamanho de um setor no disco.
1. V, V, F, F
2. V, V, F, V
3. V, V, V, V
4. V, V, V, F
COMETÁRIOS: A alternativa 4 está correta, visto que, a primeira afirmação é verdadeira, porque
o conteúdo de um arquivo geralmente guarda informações úteis para um determinado fim. A
segunda afirmação é verdadeira, porque a cada nome de um arquivo é referenciado um endereço
para identificá-lo, de forma que possa haver arquivos com mesmo nome em áreas diferentes. A
terceira afirmação é verdadeira, porque os arquivos devem conter segurança contra outros
usuários que o queiram acessar, organizados de forma que se possa achá-los através de pesquisas
no computador e possam ser compartilhados afim de serem copiados para outras áreas. A quarta
afirmação é falsa, porque cada bloco deve ser do mesmo tamanho de um setor de disco. Como pode
ser comprovado no subtópico "6.2 Conceito de Arquivo" da página 174 da apostila. Portanto, as
alternativas 1, 2 e 3 são incorretas.
D. Considerando o estudo de memória do Sistema Operacional, qual a unidade de gerenciamento
utilizado pelo gerente de memória:
1. MDC (Memory Data Control)
2. MMU (Memory Management Unity)
3. MUM (Management Undefined Memory)
4. UMM (Unit Management Module)
COMENTÁRIOS: A alternativa 2 está correta, visto que, MMU (Memory Managemente Unity) é a
unidade de gerenciamento de memória utilizada pelo gerente de memória, para mapear em tempo
de execução de endereços virtuais para endereços físicos. Portanto, as alternativas 1, 3 e 4 estão
incorretas.
E. Analise as afirmações abaixo e assinale a alternativa correta.
I - Processos concorrentes implicam compartilhamento de recursos do sistema, tais como arquivos,
registros, dispositivos de I/O e áreas de memória.
II - Memória é um importante recurso que deve ser cuidadosamente gerenciado.
2
III - As informações são normalmente armazenadas nas memórias no formato de arquivos, sendo
implementadas, em nível de sistema operacional.
1. Somente a alternativa I é verdadeira.
2. As alternativas I e II são verdadeiras.
3. As alternativas I e III são verdadeiras.
4. Nenhuma das alternativas anteriores.
COMENTÁRIOS: A alternativa 2 está correta, visto que, a afirmação I é verdadeira, porque um
sistema operacional deve fornecer mecanismos de garantir a comunicação inter-processos, como
pode ser comprovado no terceiro parágrafo da página 135 da apostila. A afirmação II é
verdadeira, porque a memória é um recurso importante para que haja uma rápida disponibilização
dos recursos utilizados pelo sistema operacional, como pode ser comprovado no primeiro
parágrafo da página 155 da apostila. A afirmação III é falsa, visto que, as informações são
armazenadas nos discos e não na memória, como pode ser comprovado no primeiro parágrafo da
página 173 da apostila. Portanto, as alternativas 1, 3 e 4 estão incorretas.
F. Com base em seus conhecimentos sobre os mecanismos de comunicação entre processos,
assinale a alternativa correta em relação ao conceito de pipeline (aquele símbolo “|”):
1. É a implementação, nativa nos sistemas operacionais, de um mecanismo de comunicação entre
processos, mais conhecido como semáforo.
2. É um mecanismo de validação de comandos.
3. É uma ferramenta usada apenas para ajudar na sintaxe dos comandos.
4. Nenhuma das anteriores.
COMENTÁRIO: A alternativa 1 está correta, visto que, o símbolo “|”, que representa pipeline,
refere-se a uma ferramenta implementada pelo shell de sistemas operacionais, com o intuito de
possibilitar ao utilizador de um S.O., executar vários processos, fazendo com que os mesmos se
comuniquem, sincronizando suas entradas e saídas. Portanto, as alternativas 2, 3 e 4 estão
incorretas.
G. Analise o código abaixo e marque a alternativa correta em relação ao resultado de sua execução.
#include <stdio.h>
#include <stdlib.h>
int le_semaforo();
int escreve_semaforo(char k);
main()
{
int i;
int x;
escreve_semaforo('0');
x=fork();
if(x>0)
{
i=le_semaforo();
while(i==1)
{
i=le_semaforo();
}
3
escreve_semaforo('1');
printf("ola, sou o pai\n");
escreve_semaforo('0');
}
else if(x==0)
{
i=le_semaforo();
while(i==1)
{
i=le_semaforo();
}
escreve_semaforo('1');
printf("ola, sou o filho\n");
escreve_semaforo('0');
}
}
int le_semaforo()
{
FILE *fp;
int j=0;
char c;
char num[3];
fp=fopen("semaforo.txt", "r");
if(fp==NULL)
{
printf("Erro na abertura do arquivo\n");
exit(0);
}
c=fgetc(fp);
num[j]=c;
j++;
num[j]='\0';
j=atoi(num);
fclose(fp);
return(j);
}
int escreve_semaforo(char k)
{
FILE *fp;
fp=fopen("semaforo.txt", "w");
if(fp==NULL)
{
printf("Erro na abertura do arquivo\n");
exit(0);
}
fputc(k,fp);
fclose(fp);
return(1);
}
4
1. Apenas o filho executa, visto que o pai encerra sua execução logo depois da criação do filho.
2. Acontece um deadlock, onde um processo fica esperando pela finalização do outro, que nunca
acontecerá.
3. Nenhum dos dois executa, visto que não há sincronização.
4. Os dois processos (pai e filho) executam normalmente e devidamente sincronizados, visto que
quando um entra em sua região crítica, ele fecha o semáforo (coloca ele em 1) e abre o mesmo
assim que sai de sua região crítica (coloca ele em 0). Isso permite que os dois compartilhem o
vídeo de forma sincronizada, cada um imprimindo sua mensagem.
COMENTÁRIO: A alternativa 4 está correta, visto que, esse programa gera um processo filho, que
concorre a um recurso compartilhado com o pai (a tela), sendo assim, os dois querem imprimir
uma mensagem. No início do código, um semáforo, usando um arquivo em disco foi criado,
contendo o valor 0. Esse valor, para esse código, indica que o semáforo está aberto, portando o
recurso está disponível. Antes de acessar suas regiões críticas (linhas onde ocorrem os printf), pai e
filho lêem o semáforo até que encontrem um valor diferente de 1. Como o valor inicial do semáforo
é 0, o primeiro processo que conseguir ler esse valor, entrará em sua região crítica e, antes de
executar o acesso ao dispositivo vídeo (printf), ele escreve o valor 1 no semáforo, visando garantir
que, enquanto ele imprime na tela, o outro processo não conseguirá imprimir, pois encontrará o
semáforo fechado. Portanto o que irá acontecer? Acontecerá o que chamamos de sincronização de
processos. Os dois processos conseguirão acessar suas regiões críticas um de cada vez, não
havendo sobreposição de impressão na tela. É bom notar que, após usar o recurso, visando não
ocasionar o travamento do mesmo, os processos devem abrir o semáforo, inserindo o valor 0 no
mesmo. Portanto, as alternativas 1, 2 e 3 estão incorretas.
H. Em relação ao sistema de alocação de memória por partição única, podemos afirmar que:
1. É uma estratégia do gerente de processos onde o sistema operacional é alocado no início da
primeira partição (bloco) de memória.
2. É uma estratégia do gerente de processos onde o sistema operacional é alocado no final da
primeira partição (bloco) de memória.
3. É uma estratégia do gerente de processos onde o sistema operacional é alocado no início da
última partição (bloco) de memória.
4. É o esquema mais simples de gerenciamento de memória possível é ter apenas um processo em
memória a qualquer momento, e permitir que ele use toda a memória disponível.
COMENTÁRIO: A alternativa 4 está correta, visto que, o esquema de memória com partição
única, refere-se a uma forma de gerenciar memória disponibilizando toda a memória do sistema
computacional a um único processo de cada vez, tornando tal esquema o mais simples possível,
porém nem sempre o mais eficiente. Portanto, as alternativas 1, 2 e 3 estão incorretas.
I. Quanto à forma de armazenamento nas unidades de disco, os arquivos são mantidos como:
1. Uma seqüência de blocos na memória principal.
2. Uma seqüência de blocos na memória secundária.
3. Uma seqüência de blocos gerada pela CPU.
4. Uma seqüência de blocos gerada pelo gerente de memória.
COMENTÁRIO: A alternativa 2 está correta, visto que, todo arquivo em disco é armazenado como
uma seqüência de blocos, nem sempre contíguos, usando um dispositivo de memória secundária e
de massa. Portanto, as alternativas 1, 3 e 4 estão incorretas.
J. Analise o código abaixo e marque a alternativa correta em relação ao resultado de sua execução.
5
#include <stdio.h>
#include <stdlib.h>
int le_semaforo();
int escreve_semaforo(char k);
main()
{
int i;
int x;
escreve_semaforo('1');
x=fork();
if(x>0)
{
i=le_semaforo();
while(i==1)
{
i=le_semaforo();
}
printf("ola, sou o pai\n");
}
else if(x==0)
{
i=le_semaforo();
while(i==1)
{
i=le_semaforo();
}
printf("ola, sou o filho\n");
}
}
int le_semaforo()
{
FILE *fp;
int j=0;
char c;
char num[3];
fp=fopen("semaforo.txt", "r");
if(fp==NULL)
{
printf("Erro na abertura do arquivo\n");
exit(0);
}
c=fgetc(fp);
num[j]=c;
j++;
num[j]='\0';
j=atoi(num);
fclose(fp);
return(j);
6
}
int escreve_semaforo(char k)
{
FILE *fp;
fp=fopen("semaforo.txt", "w");
if(fp==NULL)
{
printf("Erro na abertura do arquivo\n");
exit(0);
}
fputc(k,fp);
fclose(fp);
return(1);
}
1. Apenas o processo filho executa.
2. Apenas o processo pai executa.
3. Os dois processos executam devidamente, cada um a seu tempo, imprimindo na tela o que
deviam.
4. Os dois processos criados ficam esperando o semáforo abrir indefinidamente, sem imprimir nada
na tela, provocando um deadlock.
COMENTÁRIO: A alternativa 4 está correta, visto que, esse programa gera um processo filho,
que concorre a um recurso compartilhado com o pai (a tela), sendo assim, os dois querem imprimir
uma mensagem. No início do código, um semáforo, usando um arquivo em disco foi criado,
contendo o valor 1.esse valor, para esse código, indica que o semáforo está fechado, portando o
recurso não está disponível. Antes de acessar suas regiões críticas (linhas onde ocorrem os printf),
pai e filho lêem o semáforo até que encontrem um valor diferente de 1,coisa que nunca vai
acontecer, visto que em nenhum lugar do código o valor inicial do semáforo é alterado. Portanto o
que irá acontecer? Acontecerá o que chamamos de deadlock!!! Os dois processos ficarão para
sempre esperando o semáforo abrir. a sensação visual que teremos ao executar esse código é de
travamento do programa, portanto nada será impresso na tela. Portanto, as alternativas 1, 2 e 3
estão incorretas.
Coordenação do curso de Tecnólogo em Análise e Desenvolvimento de Sistemas
UNITINS - EAD
7
Download