UNIVERSIDADE FEDERAL FLUMINENSE
INSTITUTO DE COMPUTAÇÃO
DEPARTAMENTO DE CIÊNCIA DA COMPUTAÇÃO
Sistemas de Computação 2015.2
Profa.: Simone Martins
Lista 2
1.
Considere duas máquina M1 e M2 que implementam um mesmo conjunto de instruções que possui 4
tipos de instrução A, B, C e D. As características das máquinas se encontram nas tabelas abaixo:
Máquina M1, freqüência do relógio: 500 MHZ
Classe de instrução
A
B
C
D
Valor médio de CPI da classe
1,0
2,0
3,0
4,0
Máquina M2, freqüência do relógio: 750 MHZ
Classe de instrução
A
B
C
D
Valor médio de CPI da classe
2,0
2,0
4,0
4,0
Um mesmo programa P foi executado nas duas máquinas e 60% das instruções executadas foram do tipo A,
25 % do tipo B, 10% do tipo C e 5% do tipo D. No total, foram executadas 1,5 × 109 instruções.
a) Calcule o valor médio de CPI apresentado na execução deste programa P para as máquinas M1 e M2.
b) Calcule o tempo de execução deste programa P em M1 e em M2.
c) Calcule a freqüência de relógio que a máquina M1 deve ter para que o programa P execute no
mesmo tempo em que é executado na máquina M2.
d) O arquiteto chefe de hardware da máquina M1 informa que a freqüência do relógio de M1 pode ter
seu valor aumentado para 800 MHz , desde que a CPI da classe de instrução A seja aumentada para
2,0. Indique se o programa P será executado de forma mais eficiente caso estas mudanças sejam
adotadas.
2.
Em uma determinada máquina dois tipos de melhoramentos podem ser realizados:
I. As operações de multiplicação podem ser executadas 4 vezes mais rapidamente
II. As operações de acesso à memória pode ser executadas 2 vezes mais rapidamente
Um programa P é executado na máquina original e demora 100 segundos para ser executado, sendo que
20 % do tempo é utilizado para operações de multiplicação, 50 % para acesso à memória e 30 % para
outras tarefas.
a) Qual será a melhoria de desempenho na execução do programa P quando somente a melhoria
nas operações de multiplicação for implementada?
b) Qual será a melhoria de desempenho na execução do programa P quando somente a melhoria
nas operações de acesso à memória for implementada?
3.
Dado o conjunto de bits abaixo
1000 1100 1110 1111 1000 0000 0000 0000
indique o que ele representa, assumindo-se que ele é:
a)
b)
c)
d)
4.
um inteiro em complemento a 2 (decimal)
um inteiro sem sinal (decimal)
um número ponto flutuante em precisão simples padrão IEEE 754 (decimal)
uma instrução MIPS
Considere o formato abaixo utilizado para representar números em ponto flutuante, utilizando-se as
mesmas premissas do padrão IEEE 754.
S
Exp. em excesso de
31
1
6
Mantissa
9
a) Mostre como será a representação de -10,25.
b) Calcule o valor em decimal dos seguintes números:
b.1) Maior número normalizado positivo
b.2) Menor número normalizado positivo
b.3) Maior número denormalizado positivo
b.4) Menor número denormalizado positivo
5.
As instruções na tabela abaixo não existem para o processador MIPS. Elas são chamadas pseudo
instruções e podem ser utilizadas pelo programador porque são traduzidas pelo montador para uma
seqüência de instruções MIPS existentes. Produza para cada uma delas uma seqüência de instruções
MIPS reais que executem o que está indicado na definição da instrução. Você pode utilizar o registrador
$at como auxiliar, se precisar. O identificador big indica uma constante número que precisa de 32 bits
para ser representada e o identificador small indica uma constante número que precisa de 16 bits para
ser representada
Pseudo instrução
li $t5, small
li $t5, big
lw $t5, big ($t3)
addi $t5, $t3, big
bgt $t5, $t3, L
bge $t5, $t3, L
6.
Definição
$t5 = small
$t5 = big
$t5=Memória[$t3+big]
$t5 = $t3+big
if ($t5 > $t3) go to L
if ($t5 >= $t3) go to L
Suponha que para implementar um controle de estoque de uma pequena farmácia, você utilize um vetor
de registros. Cada registro é uma estrutura implementada em C que contém o código do remédio, a
quantidade total do remédio em estoque, o valor unitário do remédio e o código do fornecedor do
remédio.
Suponha que a seguinte estrutura de dados seja definida para este problema:
typedef struct registroremedio{
short codigo;
int quantidade;
float preco;
char fornecedor[20];
} remedio;
remedio estoque[1000];
a)
As variáveis do tipo char ocupam 1 byte, do tipo short ocupam 2 bytes, do tipo float e do tipo int
ocupam 4 bytes, e do tipo ponteiro ocupam 4 bytes e os endereços das variáveis devem ser alinhados
de acordo com o espaço que elas ocupam. Indique como cada elemento do vetor será armazenado na
memória respeitando-se as restrições de alinhamento.
b) Suponha que você deseje implementar uma função em MIPS equivalente à função C mostrada
abaixo. Esta função recebe como parâmetros de entrada o endereço inicial do estoque e o código do
remédio e retorna a quantidade do remédio em estoque. Caso o código não tenha sido encontrado, o
valor -1 deve ser retornado.
int consultaquant ( remedio estoque[1000], short codigo);
{
int achou;
int i;
int quant;
/* aponta para início do vetor */
i=0;
/* inicializa variável de controle da busca */
achou=0;
while ((i< 1000) && (achou==0)) {
if (estoque[i].codigo == codigo) {
/* achou remedio com código, então atualiza quantidade no estoque */
quant=estoque[i].quantidade;
achou=1;
}
else {
/* aponta para próximo elemento */
i=i+1;
}
}
/* caso código do remédio não tenha sido encontrado, retorna valor -1 */
if (achou != 1)
return(-1)
else
return (quant);
}
Assuma que o endereço inicial do vetor é passado no registrador $a0 e o código do remédio em $a1.
O valor de retorno deve ser colocado em $v0. Você pode utilizar a pilha para salvar valores que
achar necessários.
7.
Considere os três procedimentos com algumas instruções especificadas como a seguir:
Procedimento A:
Segmento de texto
Segmento de dados
(último dado)
Endereço (hexadecimal)
0
4
...
24
...
FC
0
4
...
1C
Instrução
lw $al, Y
jal C
...
sw $s0,W
...
jr $ra
(Y)
...
(W)
Procedimento B:
Segmento de texto
L1
Segmento de dados
(último dado)
Endereço (hexadecimal)
0
4
8
...
20
2FC
0
4
...
2C
Instrução
lw $a1, X
jal C
beq $v0, 0, L1
...
lw $t1,Z
jr $ra
(X)
(Z)
...
(K)
Endereço
0
...
3C
0
...
C
Instrução
sw $al, M
...
jr $ra
(M)
...
(T)
Procedimento C:
Segmento de texto
Segmento de dados
(último dado)
Para cada um dos três procedimentos, complete a tabela abaixo referente ao código gerado pelo montador
para as instruções e dados mostrados acima. O montador assume que o segmento de texto e o segmento de
dados de cada procedimento iniciam no endereço 0. O registrador $gp é utilizado para endereçar as variáveis
localizadas no segmento de dados.
Cabeçalho
Segmento de texto
Nome
Tamanho de texto
Tamanho de dados
Endereço
Instrução
.
Segmento de dados
Endereço
Informação de relocação
Endereço
Tipo de instrução
Tabela de símbolos
Label
Endereço
Dependência
Após o procedimento de montagem os três procedimentos são ligados na ordem A, B e C. O segmento de
texto deve ser localizado a partir do endereço 400000, o segmento de dados a partir do endereço 10000000
(todos expressos em hexa) e o registrador $gp é carregado com o valor 10008000. Complete a tabela abaixo
com as informações geradas pelo ligador.
Cabeçalho
Segmento de texto
Nome
Tamanho de texto
Tamanho de dados
Endereço
Segmento de dados
Endereço
Instrução