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