Frequência I, 7 de Abril de 2014
Transcrição
Frequência I, 7 de Abril de 2014
UNIVERSIDADE DA BEIRA INTERIOR Departamento de Informática SISTEMAS OPERATIVOS Frequência I, 7 de Abril de 2014, 14Horas Escala 0:20 Sem Consulta Duração: 1h30m Nº ___________NOME__________________________________________________________________________ Grupo A: História, Estrutura e Arquitectura dum Sistema Operativo (6 valores) 1. Operação em Dual-Mode é o termo dado a um sistema computacional que permite a execução de dois sistemas operativos. Um Computador Moderno “Multi-Core” não exibe multi-programação mas multi-processamento. A função log() é uma chamada ao sistema A função printf() invoca sempre uma chamada ao sistema. O “temporizador” serve apenas para acertar a data e hora dum sistema. Um sistema operativo de tempo real é projectado para executar todos os processos num tempo mínimo. O mecanismo de Acesso directo à Memoria (DMA) faz obrigatoriamente parte dum sistema operativo. O DMA é usado em Linux nos dispositivos de tipo Bloco e do tipo Caracter Sistemas operativos escondem a utilização de instruções privilegiados mas fornecem mecanismos específicos para aceder e manipular recursos e dispositivos. O conceito dum Sistema Operativo com Partilha de Tempo veio do facto de ter mais dum utilizador a usar o sistema computacional. Verdadeiro (V) ou Falso (F) f f f f f f f f v v 2. Entre este conjunto de operações qual é o conjunto mínimo que necessita de ser protegido? a. Change to user mode. b. Change to monitor(kernel) mode. c. Read from monitor memory. d. Write into monitor memory. e. Fetch an instruction from monitor memory. f. Turn on timer interrupt. g. Turn off timer interrupt. Escolher uma das opções : (i) abcdefg (ii) bcdg (iii) abdg (iv) bdfeg (v) abdeg (vi) bcdeg 3. Considere o seguinte (sintacticamente correto) programa em C compilado com a opção cc -Wall main() { printf("ola "); asm("addl %edx,%eax"); printf(" adeus\n"); asm("cli"); } Verdadeiro (V) ou Falso (F) Compile e crie um executável sem avisos Execute e imprima “ola” e “Adeus” no ecrã Execute e imprima “ola” e “Adeus” no ecrã e a seguir mostre um erro Execute e imprima “ola” no ecrã e a seguir mostre error A chamada ao sistema write é invocada duas vezes F - (sem stdio.h) VVFF (apenas uma) 4. (Responder na Folha de Teste) Um sistema operativo precisa de saber quando um cartão é removido dum dispositivo de Entrada/Saída, nomeadamente um leitor de Smart Cards para comunicar este evento às aplicações. Também para poupar energia necessita de entrar em modo “sleep” (poupança de energia) quando o sistema não está a fazer nada de útil. Para comunicar com este dispositivo qual dos mecanismos “polling” ou “interrupts” é mais apropriado – explique detalhadamente a sua resposta. Ler este blog : http://ludovicrousseau.blogspot.pt/2010/08/new-ccid-140-and-card-movement.html Departamento de Informática, UBI. Frequência I 2014 1/2 Grupo B: Programas e Processos (7 valores) 5. O que poderá ser o output do seguinte programa? int main() { int pid, x = 1; pid = fork(); if (0 = pid) { pid = fork(); x--; if (0==pid) x--; } x=x+2; printf(“%d ”, x); } Escolher Apenas UMA opção C / G (a) 2 2 3 (b) 3 1 1 (c) 2 3 1 (d) 1 1 2 (e) 0 1 2 (f) 2 3 2 (g) 3 2 1 (h) 1 1 2 6. Um sistema de tempo real tem 3 processos onde o processo 1 tem período 12 e tempo de execução 4, o processo 2 tem período 20 e tempo de execução 5 e o processo 3 tem período 7 e tempo de execução 12. (i) Calcular a carga computacional. Resposta 4/12 + 5/20+12/7 =1/3+1/4+12/7 = (28+21+144)/84 = 193/84 (ii) O sistema é escalonável, sim ou não? Resposta 193/84 >1 NÂO 7. (Responder na Folha de Teste) Desenhe o diagrama de cinco estados dum processo mostrando as transições . 8. (Responder na Folha de Teste) Faça o diagrama temporal do processamento dos processos indicados na tabela abaixo seguindo o algoritmo de escalonamento por prioridades fixas com preempção e calcule o tempo médio de circulação (Turnaround). processo tempo de chegada prioridade duração P1 1 3 3 P2 2 4 2 P3 2 2 3 P4 3 1 2 Grupo C: Exercícios Práticos (7 valores) 9. Corrija o seguinte Bash Shell que tem como objectivo dizer se há notícias sobre UBI no ficheiro “noticias.txt” Versão Errada Versão Corrigida /bin/bash #!/bin/bash char *SD=”UBI”; SD=”UBI” cat noticias.txt || grep #SD >>> /devnull cat noticias.txt | grep $SD >> /dev/null if [ ? –eq 0]; then echo Ha Noticias; endif if [ $? –eq 0 ]; then echo “Ha Noticias”; fi 10. (Responder na Folha de Teste) Escreva a função contarLinhas que retorne o número de linhas dum ficheiro. A função terá de usar apenas as funções Entrada/Saída de baixo nível. A função deverá abrir o ficheiro (parâmetro nome) em modo de apenas leitura e leia o ficheiro para memória em blocos dum tamanho especificado (parâmetro blockSize). A contagem de número de linhas dum ficheiro é feita detectando os bytes com valor ‘ \n’ (O valor decimal ASCII é 10). A função devolverá -1, caso ocorra um erro. Protótipo: int contarLinhas( char *nome, int blockSize ); Exemplo Utilização : n = contarLinhas( “ficheiro.txt”, 512); Não é necessário especificar as bibliotecas padrão (#include <fcntl.h> etc.) no seu programa. Departamento de Informática, UBI. Frequência I 2014 2/2