Você está na página 1de 5

GABARITO AP1 – Organização de Computadores – 2° semestre/2023

1. (3,0 pontos) Imagine que você foi contratado(a) para criar um programa em linguagem de montagem
para um sistema de folha de pagamento de uma empresa. Esse programa deve calcular o ganho total
de cada funcionário com base em diferentes componentes, como o ganho bruto, um bônus, um teto
salarial e um ganho adicional.

Os valores para cálculo estão armazenados em diferentes endereços de memória. Considere os


seguintes endereços em hexadecimal: 15, 16, 17, 18 e 19.
● O valor no endereço 15 representa o ganho bruto salarial de um funcionário.
● O valor no endereço 16 é um bônus que será adicionado ao ganho bruto.
● O valor no endereço 17 é um teto salarial que não pode ser excedido, ou seja, o salário de fato
recebido não pode ultrapassar o teto salarial, o qual é o limite máximo que se pode receber de
salário na empresa. Caso a soma do ganho bruto e do bônus seja maior do que esse teto, o teto
será o valor final do salário.
● Por fim, o valor no endereço 18 é um ganho adicional que deve ser somado ao ganho final, não
necessitando respeitar o teto salarial, já que envolve ganhos advindos de projetos em paralelo.

O cálculo do ganho total, a ser armazenado no endereço 19, é definido pela expressão:

Ganho_Total = min(Ganho_Bruto + Bônus, Teto_Salarial) + Ganho_Adicional

Crie um programa, utilizando as instruções da tabela mostrada a seguir, que realize os


seguintes procedimentos:

i. Carregue o valor armazenado no endereço 15 em um registrador.

ii. Some o valor armazenado no endereço 16 ao valor no registrador.

iii. Compare o valor armazenado no endereço 17 com o valor no registrador e armazene o


menor desses valores no registrador.

iv. Some o valor do registrador ao valor no endereço 18. O resultado deve ser armazenado
no endereço 19.

Cod. Oper. Sigla Descrição

0 HLT Parar a execução do programa

1 LDA Op. ACC ← (Op.), Load

2 STR Op. (Op.) ← ACC, Store

3 ADD Op. ACC ← ACC + (Op.)

4 SUB Op. ACC ← ACC - (Op.)

5 JP Op. Se ACC > 0, então CI ← (Op.)


Cod. Oper. Sigla Descrição

6 JN Op. Se ACC < 0, então CI ← (Op.)

7 JMP Op. CI ← (Op.)

Endereço (hexa) Instrução Descrição


15 Dado
16 Dado
17 Dado
18 Dado
19 Dado
....
20 LDA 15 ACC ← (15)
21 ADD 16 ACC ← ACC + (16)
22 SUB 17 ACC ← ACC - (17)
23 JP 26 se ACC > 0, CI ← 26
24 ADD 17 ACC ← ACC + (17)
25 JMP 27 CI ← 27
26 LDA 17 ACC ← (17)
27 ADD 18 ACC ← ACC + (18)
28 STR 19 ACC ← (19)
29 HLT Encerramento e retorno

Outro exemplo de solução ( pequena alteração na lógica )


Endereço (hexa) Instrução Descrição
15 Dado
16 Dado
17 Dado
18 Dado
19 Dado
....
20 LDA 15 ACC ← (15)
21 ADD 16 ACC ← ACC + (16)
22 SUB 17 ACC ← ACC - (17)
23 JP 27 se ACC > 0, CI ← 27
24 LDA 15 ACC ← (15)
25 ADD 16 ACC ← ACC + (16)
26 JMP 28 CI ← 27
27 LDA 17 ACC ← (17)
28 ADD 18 ACC ← ACC + (18)
29 STR 19 ACC ← (19)
2A HLT Encerramento e retorno

2. (4,0 pontos) Considere que a máquina da Questão 1 tenha palavras de 16 bits. Lembre-se que há 8
(oito) operações no conjunto de instruções (tabela da questão anterior) e uma instrução possui um
código de operação e um operando, que indica um endereço da memória principal. Ao longo desta
questão, assuma que os operandos das instruções conseguem acessar qualquer palavra de memória.
Responda:

a. (0,5 ponto) Suponha que cada instrução (isto é, código e operando) faça uso completo de uma
palavra de memória, e que utilize o número mínimo de bits para armazenar o código de
instrução, sendo o restante usado para armazenar o operando. Indique o tamanho do REM
(utilizado para enviar endereços no barramento de endereços).
Código de operação terá o tamanho necessário para atender 8 instruções
Código de operação = 3bits
Tamanho da intrução = código de operação + operando
Operando = tamanho da instrução – código de operação = 16 -3 = 13 bits
O operando indica um endereço da memória principal, tem o tamanho em bits necessário para
endereçar qualquer posição de memória, assim, podemos concluir que
REM = BE = operando = 13 bits

b. (0,5 ponto) Indique o tamanho do RDM (utilizado para enviar e receber dados para/de o
barramento de dados) supondo que cada acesso à memória obtém uma palavra completa.

RDM = BD deverá ter o tamanho da palavra = 16bits

c. (0,5 ponto) Qual o tamanho máximo que a memória pode ter, em bytes, supondo que a palavra
seja a menor unidade endereçável? (pode deixar as contas indicadas)

e = BE = REM = 13 bits
N (quantidade de células) = 2^e = 2^13 = 8K células

M (quantidade de bits por célula) = palavra, já que é a menor unidade endereçavel = 16bits/célula

T = M x N = 16 bits/célula x 8K células = 128Kbits = 16KBytes

d. (0,5 ponto) Qual o tamanho do RI (utilizado para armazenar uma instrução)?

RI deverá ter o tamanho mínimo para armazenar uma instrução = 16 bits

e. (0,5 ponto) Qual o tamanho do CI (contador de instrução, utilizado para indicar o endereço da
próxima instrução a ser lida da memória) ?

CI tem de ter o tamanho necessário para endereçar toda a memória


CI = REM = BE =13 bits

f. (1,0 ponto) Suponha que agora haja 16 possíveis operações, com as mesmas condições
exploradas nos itens anteriores. Calcule os novos valores de REM, RI e CI.

OBS: as condições anteriores podem ser entendidas como manter o tamanho da instrução ou manter o
tamanho do operando, assim, serão aceitos qualquer uma das soluções abaixo

Entendimento 1 : mantendo o tamanho da instrução


Código de operação passará a ser = 4 bits
Operando = 16 – 4 = 12 bits
REM = BE = operando = 12 bits
RI = 16 bits
CI = REM = BE = 12 bits

Entendimento 2: mantendo o tamanho do operando


Código de operação passará a ser = 4 bits
Operando = 13 bits
Instrução = 4 + 13 = 17bits
REM = BE = operando = 13 bits
RI = 17 bits
CI = REM = BE = 13 bits
g. (0,5 ponto) Suponha que o barramento de dados tenha 8 bits. Um programa nessa máquina
tende a ser mais rápido ou mais lento do que na máquina anterior? Lembre-se que na máquina
anterior cada acesso à memória obtém uma palavra completa.

Com barramento de dados menor, uma quantidade maior de acessos à memória é necessária
para obter uma instrução, tornando mais lento a execução de um programa.

3. (2,0 pontos) Considere uma máquina que pode ter seu ciclo de busca e execução de uma instrução
dividido em 5 estágios: Busca (BI), Decodificação (DE), Execução (EX), Leitura de Dados (LD) e
Escrita de Resultado (ER). Cada um dos estágios BI e ER possui a duração de 8 ns e cada estágio DE,
EX e LD tem duração de 4 ns. Cada instrução desta máquina precisa executar os 5 estágios.

a. (0,5 ponto) Uma implementação desta máquina, no modelo sequencial, sem pipeline, foi
realizada de modo que cada instrução deve ser completamente realizada em um único ciclo de
relógio e uma instrução só começa a ser realizada após o término da anterior. Calcule a duração
do ciclo de relógio que esta implementação deve possuir. Lembre-se que todas as instruções
necessitam dos 5 estágios.

Para uma execução sequencial:


Ciclo de relógio deverá ter o tempo de execução dos estágios BI + DE + EX + LD + ER
= 8ns + 4ns + 4ns + 4ns + 8ns = 28ns
Para execução de N instruções em sequencial => Tex_seq = ( 28 N ) ns

b. (0,5 ponto) Implementou-se uma nova arquitetura utilizando-se um pipeline de 5 estágios.


Nessa arquitetura, quando a máquina utiliza pipeline, é necessário executar duas instruções
extras de inicialização do pipeline. Cada uma dessas instruções dura um ciclo de relógio, e são
excepcionalmente executadas de forma sequencial, isto é, sem pipeline. Calcule a duração do
ciclo de relógio que a implementação pipeline deve ter. Considere que qualquer estágio do
pipeline deve ser realizado em um único ciclo de relógio.

No pipeline, todos os estágios deverão ter o mesmo tempo de execução, sendo adotado o de maior
tempo = 8ns, Testg = 8ns = ciclo de relógio

Tempo para execução instruções extras. As instruções são executadas sequencialmente (uma depois da
outra) levando cada uma um ciclo de relógio . Textra = 2 x ciclo = 2 x 8ns = 16ns

Tempo para execução de uma instrução, Tinst = 5 x Testg = 5 x 8ns = 40ns

Tempo total para execução de N instruções em pipeline = Textra + Tinst + (N -1) Testg
= 16ns + 40ns + (N -1) 8ns = 56ns + 8ns N – 8ns => Texc_pip = ( 8 N + 48 )ns

c. (0,5 ponto) Mostre o tempo em que um programa que contenha 2 instruções será executado
pela implementação do item a e do item b. Considere que estas 2 instruções podem ser
executadas em fluxo constante.

Para N = 2

Na máquina do item a
Texc_seq = ( 28 N ) ns = 28 x 2 = 56 ns

Na máquina do item b
Texc_pip = ( 8 N + 48 ) ns = 8 x 2 +48 = 64ns
d. (0,5 ponto) Calcule o mínimo de instruções que um programa deve ter para que o tempo de
execução do programa com o pipeline do item 'b' seja menor ou igual ao tempo da máquina
sem pipeline do item 'a'.

Texc_pip ≤ Texc_seq

8ns N + 48ns ≤ 28 N => 48 ≤ 20 N => 2,4 ≤ N

Para ser vantajoso a máquina do item b deverá executar programas igual ou maior que 3
instruções

4. (1,0 ponto) Hierarquia de memória e cache.


a. (0,5 ponto) Explique o conceito de hierarquia de memória em um sistema de computador.
Utilize três exemplos para ilustrar os diferentes níveis de memória presentes nessa hierarquia.

Hierarquia de memória é um conceito em ciência da computação que se refere à organização de


diferentes tipos de memória em um sistema computacional de forma hierárquica, com o objetivo de otimizar o
desempenho e reduzir os custos. A hierarquia de memória é composta por diferentes níveis de memória, que
variam em termos de velocidade, capacidade e custo. Geralmente, os níveis mais altos da hierarquia têm menor
capacidade, mas são mais rápidos e caros, enquanto os níveis mais baixos têm maior capacidade, mas são mais
lentos e baratos. Podemos representar essa organização, conforme as características das memórias, usando a
forma de uma pirâmide dividida em 4 níveis. Destas, foi escolhidos 3 para comparação que são: os registradores,
memória cache e memória principal.

No topo da pirâmide temos os registradores, que são pequenas unidades de memória que armazenam
dados dentro do núcleo da UCP. Os registradores são dispositivos de maior velocidade com tempo de acesso em
torno de 1 ciclo de memória, possui a menor capacidade de armazenamento e também o menor tempo de
armazenamento.
Em um nível abaixo temos a memória cache, cuja função é acelerar a velocidade de transferência das
informações entre UCP e a memória principal (MP), aumentando, assim, o desempenho do sistema. A UCP
procura informações primeiro na cache e caso não as encontre, estas serão transferidas da MP para a cache. A
cache possui tempo de acesso menor que a da MP, embora seja superior aos dos registradores. A capacidade da
cache é bem inferior à da MP, mas possui um tamanho capaz de armazenar uma apreciável quantidade de
informações. O tempo de permanência do dado é menor do que o tempo de duração do programa a que pertence.
Abaixo da memória cache temos a memória básica de um sistema de computação, que é a memória
principal (MP). A MP armazena e disponibiliza o programa (e seus dados) à UCP para que este, durante a
execução, busque instrução a instrução. A MP é mais lenta que a cache e mais rápida que a memória secundária,
possui capacidade bem superior à da cache e os dados ou instruções permanecem na MP enquanto durar a
execução do programa.

b. (0,5 ponto) Explique o conceito de cache e como ele se relaciona à hierarquia de memória.
Descreva a função principal do cache e como ele ajuda a melhorar o desempenho do acesso à
memória.

A cache é uma memória de alto desempenho localizada dentro do chip do processador,


compartilhando a tecnologia de fabricação o que justifica a sua velocidade. A memória principal é
muito mais lenta que a memória cache, assim cópias de trechos (blocos) da memória principal são
transferidas para a cache, aproveitando-se do conceito de localidade, onde na maioria dos programas
os mesmos dados são acessados mais de uma vez, e geralmente agrupados no tempo e no espaço
A função principal do cache é atuar como um buffer entre a CPU e a memória principal. Na
hierarquia de memória, a cache fica em um nível intermediário entre os registradores e a memória
principal. A memória cache armazena cópias dos dados e instruções frequentemente usados, de modo
que a CPU possa acessá-los mais rapidamente do que se tivesse que buscar diretamente na memória
principal. Quando a CPU precisa de um dado ou instrução, primeiro verifica o cache antes de acessar
a memória principal. Se o dado estiver no cache (cache hit), a CPU pode buscá-lo muito mais
rapidamente, economizando tempo e aumentando o desempenho geral do sistema.

Você também pode gostar