Você está na página 1de 7

Exame de Época Normal

Arquitectura de Computadores
(Duração 45+45 minutos)

Nome: Número:

1. (5)
Classifique cada uma das alíneas seguintes como Verdadeira ou Falsa.

1.1. Num sistema baseado no processador Intel Pentium em modo protegido,


a) V  o barramento externo de dados tem 64 bits de largura.
b) V utilizam-se Call Gates para implementar chamadas a procedimentos menos privilegiados.

c) V são utlizados dois TLB (Tanslation Lookaside Buffer) integrados.

d) F a dimensão de cada página de memória é especificada na tabela de páginas.

e) V utilizam-se endereços físicos de 32 bits.

f) F os registos de uso genérico têm 64 bits.

g) F pode ser utilizado um mecanismo de segmentação de memória a dois níveis.

h) V a dimensão de um segmento de memória é definida na tabela de segmentos.

1.2.
a) F O processador Intel 386DX possui uma unidade processamento SIMD (Single Instruction Multiple Data)
integrada.
b) V O processador Intel Pentium 4 utiliza 2 níveis de cache integrados.

c) V O processador Intel Pentium possui uma unidade de vírgula flutuante integrada.

d) V Um processador Intel Pentium III utiliza um Buffer de Reordenação.

e) V O processador Intel Pentium III utiliza dois TLBs distintos.

f) F Um BTB (Branch Target Buffer) só se justifica em arquitecturas com segmentação.

g) V Um TLB (Tanslation Lookaside Buffer) só se justifica em arquitecturas com paginação de memória.

h) V Um TLB pode utilizar políticas de substituição do tipo LRU (Least Recently Used).

1.3.
a) F Uma cache vítima utiliza-se para acelerar o processo de segmentação

b) V É possível utilizar políticas de leitura do tipo Read-Through com uma cache completamente associativa.

c) V Uma cache pode utilizar blocos de dados mais largos do que o barramento de dados externo.

d) V É possível utilizar políticas de escrita do tipo Write-Back com uma cache de mapeamento direto.

e) V Um TLB pode ser implementado com uma cache completamente associativa.

f) V Uma cache vítima pode ser completamente associativa.

Arquitectura de Computadores 19-Jan-2016


Mestrado em Eng. Electrotécnica e de Computadores

g) V Uma cache externa pode ser gerida por políticas de substituição do tipo LRU (Least Recently Used)

h) F Uma cache externa pode ser virtualmente indexada.


1.4.
a) F Uma tabela de partições reside normalmente numa partição do tipo FAT.

b) F Um dispositivo de armazenamento tem sempre uma tabela de partições.

c) V Um bootloader pode utilizar recursos do BIOS (Basic Input Output System).

d) F Um bootloader é gravado na tabela de partições.

e) V O Journaling é uma técnica utilizada para facilitar a recuperação de sistemas de ficheiros.

f) F O uso de Journaling é importante em sistemas de ficheiros voláteis.

g) F Os sistemas de ficheiros do tipo FAT utilizam Journaling.

h) V Um sistema de ficheiros do tipo UnionFS pode juntar, no mesmo directório, conteúdos voláteis e
conteúdos armazenados num CD.

1.5.
a) V Um kernel Linux pode ser compilado numa máquina com uma arquitectura distinta da máquina a que se
destina.
b) V Um kernel Linux pode incluir módulos desenvolvidos por entidades distintas.

c) V Uma biblioteca pode utilizar funcionalidades disponibilizadas pelo kernel Linux.

d) F Os ficheiros de dispositivos (device files) residem normalmente no directório /proc/devices

e) F A lista de módulos carregados pode ser obtida com o comando modinfo

f) F Num sistema Linux, todos os módulos de kernel têm associados os números Major e Minor.

g) V Um ficheiro de dispositivos pode implementar uma comunicação bidireccional entre uma aplicação e o
kernel.
h) V O comando insmod é utilizado para carregar módulos de sistema operativo.

2. (2)
“Em alguns processadores, utilizam-se como apontadores para a memória, registos internos mais estreitos do
que o barramento externo de endereços.”
Comente esta afirmação, referindo exemplos de processadores que conhece.
Justifique esta opção técnica e as consequências respectivas.

A afirmação é verdadeira. Um exemplo é o Intel 8086 que usa registos de 16 bits e tem barramento externo de
endereços de 20 bits.
Com esta solução, só é possível aceder a um conjunto limitado de segmentos de cada vez. Para aceder a outras posições
é necessário alterar a segmentação.
Usa-se para permitir alargar a capacidade de endereçamento de memória sem alargar a arquitectura interna.

Arquitectura de Computadores 19-Jan-2016


Mestrado em Eng. Electrotécnica e de Computadores

3. (1)
Compare as tecnologias MMX e SSE2 (SIMD Streaming Extensions 2) em termos de desempenho espectável no
tratamento de cadeias de dados do tipo inteiro de 16 bits.

Com MMX é possível tratar 4 dados do tipo inteiro de 16 bits empacotados nos registos MM (de 64 bits) com única
instrução.
Com SSE2 é possível tratar 8 dados do tipo inteiro de 16 bits empacotados nos registos XMM (de 128 bits) com única
instrução.
Logo, é expectável que o desempenho com SSE2 seja o dobro do obtido com MMX.

4. (2)
Um determinado fabricante pretende adicionar à sua linha de processadores uma memória cache associativa por
conjuntos com 4 vias, que permita o armazenamento de 4096 blocos de 512 bits de dados.
Sabendo que os processadores em causa possuem barramentos de endereços de 24 bits, barramento de dados de 32
bits e que utilizam endereçamento ao Byte, indique qual deverá ser, para esta cache:
a) O número de comparadores.
NComp = NVias = K = 4

b) O número de bits utilizados na indexação.


NSets = NBlocos / NVias = 4096/4 = 1024
#Idx = log(1024)/log(2) = 10 bits

c) A dimensão das etiquetas


Bloco = 512 bits = 64 Bytes
#BO = log2(64) = 6 bits
#Tag = 24 - #BO - #Idx = 24 - 6 - 10 = 8 bits

Arquitectura de Computadores 19-Jan-2016


Mestrado em Eng. Electrotécnica e de Computadores

Parte B - 45 minutos

5.
O dispositivo de armazenamento de um sistema dedicado encontra-se ligado a uma estação de trabalho GNU/Linux,
tendo ficado associado ao ficheiro de dispositivo /dev/sdb. O sistema dedicado é baseado numa distribuição GNU/Linux,
com executáveis baseados na biblioteca GNU Libc.
a) Analise o output do comando apresentado abaixo.
$ cat /proc/partitions | grep sd
8 0 31457280 sda
8 1 512000 sda1
8 2 24576000 sda2
8 16 1000000 sdb
8 17 200000 sdb1
8 18 500000 sdb2
i) (0.5) Pretende-se criar uma nova partição no dispositivo associado a /dev/sdb. Indique o tamanho máximo para essa
partição, assumindo que não se pretende alterar as partições existentes.

Sdb-sdb1-sdb2 = 1000000-200000-500000 = 300000 blocos

ii) (0.5) Apresente o(s) comando(s) necessário(s) para criar um sistema de ficheiros do tipo ext2 na partição criada na
alínea anterior.

mkfs -t ext2 /dev/sdb3

iii) (1.0) Apresente os comandos necessários para copiar o conteúdo da pasta ./build (incluindo eventuais diretórios)
para a partição preparada nas alíneas anteriores.

mkdir part

mount /dev/sdb3 part

cp -a ./build/* part/

umount part

b) No diretório atual encontram-se os seguintes ficheiros, correspondentes a uma aplicação dedicada: makefile, myapp,
libutils.a, libutils.so, myapp.h, myapp.o, utils.c, myapp_devices.c e myapp_main.c. Analise o output dos seguintes
comandos:
[user@localhost]$ file myapp
setuid ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared
libs), stripped
[user@localhost]$ readelf -d myapp | grep NEEDED
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x0000000000000001 (NEEDED) Shared library: [libutils.so]

i) (1.0) Pretende-se instalar esta aplicação no sistema de ficheiros principal do sistema dedicado. Indique que ficheiros
teria que copiar para o sistema alvo, indicando o diretório mais indicado para cada um deles.

myapp -> /bin /usr/bin /usr/local/bin

libutils.so -> /lib /usr/lib /usr/local/lib

Arquitectura de Computadores 19-Jan-2016


Mestrado em Eng. Electrotécnica e de Computadores

ii) (0.5) Analise o resultado do seguinte comando, executado na estação de trabalho:


[user@localhost]$ uname -a
Linux localhost.localdomain 4.1.6-200.fc22.x86_64 #1 SMP Mon Aug 17 19:54:31 UTC 2015 x86_64
x86_64 x86_64 GNU/Linux
Seria possível executar o ficheiro myapp mencionado acima numa linha de comando da estação de trabalho? Justifique.

Não porque as arquitecturas não coincidem. ARM != x86_64

Arquitectura de Computadores 19-Jan-2016


Mestrado em Eng. Electrotécnica e de Computadores

6.
Considere um processador da família x86 a funcionar em modo real em que o estado de alguns dos registos é o
apresentado na tabela seguinte:

ax bx cx dx si di Listagem 1 Listagem 2
0x215 0x300 0x600 0x4A0 0x5C0 0x7C0 mov [0xFF], ax entry start
bp sp cs ds ss es mov si, #0xFF start:
mov bx, [si] run_system
0x10C 0x40A 0x100 0x800 0x4400 0x5000 mov bp, cx
mov ax, [bp] evento1:
mov [bx], cx iret

var1: db 100
a) i) (1,5) Determine os endereços físicos das posições de memória lidas ou escritas pela sequência de instruções da
Listagem 1.

mov [0xFF], ax ; EndFis = DS*0x10 + 0xFF = 0x800*0x10+0xff= 0x8000+0xff=0x080ff


mov si, #0xFF ; SI := 0xff
mov bx, [si] ; EndFis = DS*0x10 + SI = 0x080ff
mov bp, cx ; BP := 0x600
mov ax, [bp] ; EndFis = SS*0x10 + BP = 0x44000+0x600 = 0x44600
mov [bx], cx ; EndFis = DS*0x10+BX = 0x8000+0x215 = 0x08215

ii) (0,5) Indique o valor contido no registo bx após a execução da sequência de instruções da Listagem 1.

BX = AX’ = 0x215

b) (0,5) Altere o código da rotina evento1, na Listagem 2, de modo a que o valor da variável var1 seja carregado para o
registo ax. Assuma que o programa é carregado no endereço 0x7100. Os registos podem ter qualquer valor no
arranque da rotina e deverão manter os mesmos valores após a execução da mesma.
entry start
start:
run_system

evento1:
push ds
mov ax, 0x710
mov ds, ax
mov al, [var1]
mov ah, 0x0
pop ds
iret

var1: db 100

7.
Pretende-se implementar, na forma de um módulo de Linux, um controlador orientado ao carácter para o dispositivo
XYZCrypt, com o nome de dispositivo mod2, major number 1100 e minor number 0.

Arquitectura de Computadores 19-Jan-2016


Mestrado em Eng. Electrotécnica e de Computadores

a) (1) Implemente uma função que faça o registo do dispositivo aquando do carregamento do módulo, incluindo o
registo da função mod_read, definida abaixo, como função de tratamento de leituras do dispositivo.

struct file_operations fops = {


.owner = THIS_MODULE,
.read = mod_read
};

static ssize_t mod_read(struct file *f, char *buf, size_t len, loff_t *off) {
int bytes_read = 0;
while ( len && *msgp ) {
put_user( *(msgp++), buf++);
len--;
bytes_read++;
}
return bytes_read;
}

int init_module(void) {
return register_chrdev(1100, "mod2", &fops);
}

b) (3.0) O ficheiro ../build/initrd.img é o initrd de um sistema GNU/Linux. Pretende-se enviar a string “HELLO” para o
dispositivo o XYZCrypt durante a execução do script linuxrc desse initrd. Apresente a sequência de comandos
necessária para alterar esse initrd, assim como eventuais edições do respetivo script linuxrc, de modo a implementar
essa operação.

mkdir initrd

mount ../build/initrd.img initrd/

mknod initrd/dev/mod2 c 1100 0

vi initrd/linuxrc

( acrescentar : )

insmod /modules/XYZCrypt.ko

echo HELLO >/dev/mod2

mkdir initrd/modules

cp XYZCrypt.ko initrd/modules/

umount initrd

cp ../build/initrd.img (Sistema alvo)

Arquitectura de Computadores 19-Jan-2016

Você também pode gostar