UNIVERSIDADE DA BEIRA INTERIOR Departamento de Informática SISTEMAS OPERATIVOS Frequência I, 11 de Abril de 2008, 14Horas Escala 0:20 Sem Consulta Duração: 1h30m Grupo A: História, Estrutura e Arquitectura dum Sistema Operativo (SO) (8 valores) 1) Discute o termo “Interpretador de Comandos” no contexto de sistemas operativos e dê exemplos. (2-Valor) 2) Qual é a diferença entre multi-programação e multi-processamento? (1-Valor) 3) Qual o papel das interrupções num sistema operativo moderno? (2-Valores) 4) No modelo de computação de Von-Neumann qualquer operação de Input/Output envolve a movimentação de dados entre, o CPU, memoria RAM e o diapositivo de I/O. Numa arquitectura de 32 bits a movimentação de dados pode ser feita apenas em blocos de 32 bits usando buses de 32 bits. Qual o mecanismo que permite então operações de I/O eficazes e rápidos ? (1-Valor) 5) Quais das instruções seguintes deverão ser privilegiadas? (2 -Valores) Nota: Na sua folha de teste basta a respectiva alínea e a resposta Sim ou Não Instrução: i ii iii iv v vi Privilegiada (sim/não) Modificar entradas na tabela dos diapositivos Modificar o relógio Limpar memória Desligar interrupções Aceder um diapositivo de I/O Mudar para Modo Monitor/Kernel Grupo B: Programas, Processos e Escalonamento (8 valores) 6) Mostre as transições e desenhe o diagrama de 7(sete) estados dum processo - este é uma simples extensão ao modelo de 5 estados apresentados nas aulas. Neste modelo existem mais dois estados, para indicar processos que já não se encontram em memória RAM – estão em memoria secundária/temporária (disco) e podem ser bloqueados ou desbloqueados. Justifique as transições de e para estes dois novos estados. (2-Valores) 7) A eficácia do CPU (E) é definida como o valor do CPU gasto em computações úteis dividido pelo tempo total gasto pelo CPU. Mediações dum sistema computacional mostram que o processo médio executa durante um tempo T antes de ser bloqueado com uma operação de I/O. O tempo duma comutação de contexto é S (que é tempo efectivamente perdido e inútil). Para escalonamento do tipo Round Robin com time quantum Q diga o valor de E quando : (A) (B) (C) (D) (E) Q=Infinito Q=Quase Zero Q=S Q>T S<Q<T E=S/(T+S), E=T/(T+S) ou E=Q/(Q+T) ?. E=0, E=0,5 ou E=1 ? E=0, E=0,5 ou E=1 ? E=S/(T+S), E=T/(T+S) ou E=Q/(Q+T) ? dê uma formula para E (Justifique.) (3-Valores) Departamento de Informática, UBI. Frequência I 2008 1/2 8) Qual é o output do seguinte programa? (Deverá mostrar o funcionamento do programa como fluxograma como foi feito nas aulas teóricas) (2-Valores) int main() { int pid, x = 3; pid = fork(); if (0 == pid) { fork(); pid = fork(); x--; if (0 == pid) x--; } else x++; printf(“x=%d\n”,x); } 9) O programa seguinte utilize as estruturas e funções definidos nas aulas práticas e imprime o string completo “olá mundo” duas vezes para o ficheiro ! Explique porquê #include <soio.h> main() { SOFILE*f=sofopen(“res.txt”,”c”); sofputc(‘o’,f); sofput(‘l’,f); sofputc(‘a’,f);sofputc(‘ ‘); fork(); sofputc...os caracteres “mundo\n”... sofclose(f); } (1 Valor) Grupo C: Exercício Prático (4 valores) 10) Considere o caso dum diapositivo de I/O que está a funcionar com erro. É necessário escrever uma função que dado o nome dum ficheiro copie o ficheiro do disco (a funcionar bem) para este diapositivo. Protótipo: int safeCopy ( char *src, char *destino) Exemplo Utilização: safeCopy( “passwd.txt”, “/mnt/badtape/passwd-backup.txt”) Deverá utilizar I/O de baixo-nível. A cópia deverá ser efectuada lendo/escrevendo blocos de 124 bytes. No entanto cuidado ! O diapositivo do destino tem um problema, a seguir cada operação de escrita a cabeça de leitura/escrita avança sempre 1000 bytes para frente ! Dicas: As funções open(), creat(), read(), write() e lseek() Não é necessário especificar as bibliotecas padrão (#include <stdio.h> etc.) no seu programa. Testes de Sistemas Operativos . Normas, Bibliotecas de linguagem C e a Biblioteca Pthreads Leitura e Escritura de Baixo Nivel int open(char *filename, int access); Opens a file. int creat(const char *filename, int perms); Creates a file Access: example : O_RDONLY Permission: examples : S_IRUSR , S_IWUSR etc int read (int handle, void *buf, unsigned len); read attempts to read len bytes from the file associated with handle into the buffer pointed to by buf. On success, read returns the number of bytes placed in the buffer. int write (int handle, void *buf, unsigned len); write writes a buffer of data to the file or device named by the given handle. write returns the number of bytes written. lseek(int fildes, off_t offset, int whence); repositions the offset of the file descriptor fildes to the argument offset according to the directive whence. ..SEEK_SET, the offset is set to offset bytes. SEEK_CUR, the offset is set to its current location plus offset bytes. SEEK_END, the offset is set to the size of the file plus offset bytes. Departamento de Informática, UBI. Frequência I 2008 2/2