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
Download

Enunciado - Universidade do Algarve