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