Universidade do Algarve Faculdade de Ciências e Tecnologia Departamento de Engenharia Electrónica e Informática Periféricos e Interfaces 2006/2007 Curso de Informática e Ensino de Informática Exame época recurso 18 de Julho de 2007 Duração: 2 horas Consulta limitada a 30 páginas A4 Deve ser indicado na folha de teste se pretende incluir na nota final da disciplina a avaliação prática. Se nada for indicado é assumido que NÃO pretende. 1. (1v) Considere a seguinte chamada ao sistema, que retorna o PID do processo corrente: int pid = syscall (SYS_getpid); Descreva o que sucede em termos de mecanismo de chamadas ao sistema, considerando os espaços de utilizador e núcleo, desde que a função syscall ( ) é executada até que seja devolvido o PID do processo. 2. (1v) Considerando que as duas linhas de código seguintes são executadas através de chamadas ao sistema: int t0 = time(&t0); int t1 = syscall (SYS_time, &t1); proponha código para a função int time(int* ). 3. (1v) Explique porque para transferências de grandes quantidades de dados, o modo DMA burst permite transferir a informação mais rapidamente que o modo DMA cycle stealing. 4. Considere o código do módulo mod.c, onde é omitido apenas a inclusão de headers: int init_module(void) { return 0; } void cleanup_module(void) { } a) (1v) Adicione código para que quando o módulo for inserido com: insmod mod.ko par=1, seja impresso no registo do núcleo o valor do parâmetro par, que foi passado no comando de inserção, no exemplo: 1. b) (0.5v) Adicione código para que quando o módulo for inserido com: insmod mod.ko seja impresso no registo do núcleo o valor por defeito do parâmetro par, que deve ser "0" (zero). c) (0.75v) Adicione código para que quando for executado o comando modinfo mod.ko seja também impressa a seguinte informação sobre o parâmetro par: par: Inteiro 32 bits d) (0.75v) Modifique o código para que a função init_module() seja descarregada da memória após o módulo ter sido inserido. 5. (1v) Explique em termos físicos e/ou lógicos porque é que num DVD é possível gravar mais informação que num CD. 1-2 6. Considere um módulo onde está implementado um driver que permite controlar o alarme do relógio de tempo real, e onde a entrada de directório para acesso a este driver é: /dev/alarm. a) (1.5v) Implemente uma função do driver que, quando inserido, ao comando cat /dev/alarm, retorne a hora do alarme no formato HH:MM:SS. b) (1v) Adicione código, indicando a função ou local apropriado, para que após o driver estar inserido, se for dada na linha de comandos o comando cat /proc/misc, seja impressa informação semelhante a: 1 psaux 70 alarm 135 rtc 7. Considere um disco rígido com 16 450 560 000 bytes, onde cada sector tem 512 bytes. a) (1v) Considerando que cada pista tem 63 sectores e o disco tem 255 superfícies, qual o número de cilindros? b) (1v) Descreva como a partir da informação no MBR pode ser determinado o sector inicial e o número de sectores da segunda partição primária. c) (1.5v) Escreva um programa que leia o MBR do disco /dev/hda, e através da informação neste sector determine o sector final da segunda partição primária. 8. (1v) Explique porque é que a velocidade de transferência de dados é superior num barramento PCI, quando comparado com um ISA. 9. A função seguinte implementa uma simplificada rotina de atendimento da interrupção IRQ1: irqreturn_t kbd_interrupt(int irq, void *dev_id, struct pt_regs *regs) { static unsigned char scancode; local_irq_disable(); if (!(inb(0x64) & 0x01)) return IRQ_NONE; scancode = inb(0x60); local_irq_enable(); //trata scancode return IRQ_HANDLED; } a) (0.5v) Explique o que sucede se o bit 0 do registo acedido pelo porto 0x64 for nulo. b) (0.75v) Explique o que é uma interrupções rápida (fast interrupt). c) (1v) Escreva, indicando a função apropriada, um segmento de código que permita registar a rotina de atendimento de interrupção acima para que seja uma interrupção rápida. d) (0.5v) Considerando que a rotina foi registada como uma interrupção rápida fará sentido continuar a chamar as funções: local_irq_disable() e local_irq_enable()? Porquê? e) (0.75v) O que se deve substituir no código acima para que seja apenas desligada a linha de interrupção IRQ1 durante a leitura do scancode? 10. (0.5v) Calcule a ocupação de memória de vídeo, em bytes, para um ecrã em modo gráfico com resolução 800x600 e que pode apresentar 256 cores diferentes. 11. (2v) Considerando modo texto 25 linhas e 80 colunas e 16 cores, escreva um programa que dada uma coordenada de ecrã por dois inteiros linha e coluna, imprima os valores dos três componentes RGB da cor do carácter nessa posição. 2-2