Você está na página 1de 7

Fundação CECIERJ - Vice Presidência de Educação Superior a Distância

Curso de Tecnologia em Sistemas de Computação


Disciplina: Organização de Computadores
AD2 2° semestre de 2023

OBS: As questões marcadas como Bônus não valem nota nem ponto extra e não
são corrigidas. Entretanto, são importantes preparatórios para a AP e para
aprimorar o conhecimento no curso.

1) (2,0 pontos) Realize as seguintes operações considerando dois números


inteiros de 8 bits em complemento a 2. O número inteiro possui 8 bits e é
representado em hexadecimal por 0xWZ, sendo W o valor dos 4 bytes mais
significativos e Z os 4 bytes menos significativos (p.ex., o número binário
11101111 é 0xEF e o binário 00010000 é 0x10). Considerando os valores A e
B de cada item, responda:
● Indique o resultado da operação solicitada no item, realizando operação
com números binários em complemento a 2, mostrando o passo a passo
para realização dessa operação. A resposta deverá estar na forma 0xWZ
e no formato decimal (no caso do decimal, indique o sinal do número).
● Indique o resultado da operação solicitada no item, convertendo
primeiramente A e B para decimal, realizando a operação com números
decimais e depois convertendo o resultado da operação para binário de
8 bits em complemento a 2. A resposta deverá estar na forma 0xWZ e
no formato decimal (no caso do decimal, indique o sinal do número).
● Caso o resultado dos itens anteriores sejam diferentes entre si, explique
o porquê da diferença.
a) (0,5 ponto) A+B, sendo A = 0x4F; B = 0xF3
b) (0,5 ponto) A+B, sendo A = 0x7A; B = 0x43
c) (0,5 ponto) A-B, sendo A = 0x12; B = 0x6F
d) (0,5 ponto) A-B, sendo A = 0x18; B = 0x2F
2) (3,5 pontos) Considere um computador que possua 6 registradores acessíveis
diretamente pelo usuário: A, B, C, D, E e T, sendo este último registrador um
registrador temporário. Além disso, o sistema também possui um registrador
ACC, que serve como acumulador, e que é acessível apenas indiretamente,
conforme visto em aula, e indicado abaixo.
● O programa considerado nesta questão não faz acesso direto à memória
principal para escrever dados – todas as operações aritméticas são
executadas usando registradores
● O operando de uma instrução é um registrador Y, determinado pelo
programador
● O registrador Y pode ser igual a A, B, C, D, E ou T
Considere uma máquina com o seguinte conjunto de instruções, notando que
algumas entradas da tabela foram propositalmente removidas.
Linha Comando Descrição

1 LD Y ACC <- Y

2 Y <- ACC

3 ACC <- ACC + Y

4 SUB Y

5 MUL Y ACC <- ACC * Y

6 DIV Y

a) (1,0 ponto) Preencha as células faltantes na tabela. Basta indicar, em


ordem, para cada linha, o que precisa constar nas células faltantes, de cima
para baixo, explicando o seu raciocínio.
b) (1,0 ponto) Assuma que o registrador E seja inicializado com o valor 4
e não faça nenhuma hipótese sobre o valor inicial dos demais registradores.
Além disso, assuma que os registradores A e B armazenem dois valores
inteiros. Assuma que se deseje armazenar:

i. no registrador C o valor de A-B dividido por 4, ou seja, C=(A-B)/4

ii. no registrador D o quádruplo de A+B, ou seja, D = 4 (A+B).

Escreva um programa, usando o conjunto de instruções desta questão,


para atingir tal fim.

c) (0,5 ponto) Repita a questão acima, assumindo que o registrador E seja


inicializado com o valor 5. O seu programa deve usar a instrução MUL pelo
menos 1 vez.

Dica: repare que 5=4-1, e reflita sobre como obter o número 1 a partir
do número 5, usando as instruções disponíveis.

d) (0,5 ponto) Repita a questão acima, assumindo que o registrador E seja


inicializado com o valor 3. O seu programa deve usar a instrução MUL pelo
menos 1 vez.

Dica: repare que 4=3+1, e note que D = 3 (A+B) + (A+B).

e) (0,5 ponto) Repita o item b).ii) supondo que não seja possível utilizar
instruções de MUL nem DIV, ou seja, assumindo que o conjunto de instruções
não possui essas duas instruções.
3) (2,0 pontos) No contexto de RISC e CISC responda de forma concisa:
a) (1,0 ponto) Pesquise sobre o conceito de máquina de Turing. Quais
operações uma máquina de Turing pode realizar, ao nível de hardware?
Note que Turing propôs uma máquina extremamente simples ao nível
de hardware, delegando ao software implementar a complexidade.
Relacione o conjunto limitado de operações que uma máquina de
Turing pode realizar com as noções de máquinas RISC e CISC.
Finalmente, indique a relação entre RISC, CISC e a diminuição da
cardinalidade do conjunto de instruções considerada no último item da
questão 2) acima.
b) (1,0 ponto) Apesar de processadores de uso geral, como Intel i7, serem
geralmente baseados em CISC, há uma tendência recente no uso de
RISC em processadores de uso geral. Faça uma pesquisa sobre os chips
M1 da Apple e explique as motivações para uso de RISC.

4) (2,5 pontos) Considere um sistema com um relógio de frequência de 400 MHz.


O sistema pode realizar operações de Entrada e Saída (E/S) de duas maneiras:
por programação (polling) ou por interrupção.
Entrada e saída por programação (polling):
● O processador precisa gastar ciclos de relógio monitorando o
dispositivo, independentemente de sua atividade.
● O número de ciclos de relógio necessários para atender uma operação
por programação é 180 (isso inclui a chamada à rotina de “polling”, acesso ao
dispositivo e retorno da chamada).
Entrada e saída por interrupção:
● O processador só gasta ciclos de relógio para monitorar o dispositivo se
ele estiver ativo.
● O número de ciclos de relógio necessários para atender uma operação
por interrupção é 400.

"Overhead" é definido como o percentual de ciclos de relógio usados para a


operação de E/S em relação ao total de ciclos disponíveis em 1 segundo.
Estamos utilizando um disco rígido para E/S. Ele transfere dados ao
processador em blocos de 16 bytes à taxa de 8MB/segundo. Assim, são
necessários 500K atendimentos por segundo, onde cada atendimento a um
bloco é considerado uma operação. Vamos definir "X" como a utilização do
disco, representando a porcentagem de tempo em que o dispositivo está ativo.
Seu desafio: Determine o valor de X a partir do qual a operação de E/S por
programação se torna mais vantajosa do que a operação por interrupção.
Dica: O overhead na operação por programação é constante, enquanto na
operação por interrupção ele varia com X.
Questões bônus:

B1) (bônus) Qual é a classificação de Flynn que descreve os seguintes casos?


Para cada caso, responda SISD, SIMD, MISD, MIMD, e ilustre um exemplo
de um sistema prático que se enquadre nesta categoria.
a) um sistema avançado com múltiplas unidades de controle e inúmeros
núcleos de processamento de dados
b) um sistema que, apesar de contar com múltiplas unidades de controle,
possui uma única unidade de processamento de dados
c) um sistema simples, sem capacidades paralelas, que realiza uma
operação de cada vez, com uma única unidade de controle e uma
única unidade de processamento de dados
d) um sistema com uma única unidade de controle, mas que se aproveita
de múltiplas unidades de processamento de dados para realizar
tarefas simultâneas

B2) (bônus) Assista o seguinte vídeo sobre supercomputadores

​https://www.youtube.com/watch?v=qfIyuEPIzvU

e responda às seguintes questões.

a) Explique a solução apresentada no vídeo, que emprega a ideia de


clusters com placas Raspberry Pi.
b) Faça uma pesquisa e descreva como o Google emprega clusters em
suas aplicações.
c) Escreva um pseudocódigo para realizar a soma de duas matrizes
quadradas. Esse pseudocódigo poderia se beneficiar de um cluster
computacional, para tornar mais rápida sua execução?
d) Nem todas as aplicações podem se beneficiar de um cluster, pois são
difíceis de se paralelizar. Cite uma delas e explique o porquê de sua
dificuldade de paralelização.

(B3) (bônus) Considere a seguinte interação entre um usuário e o ChatGPT.

Usuário Considere o número 11b, já representado em binário, ou seja, 11 já é


o valor de 2 bits com o qual desejamos trabalhar. Como dividir 11
por dois, usando o deslocamento de bits?

ChatGPT, Se o número 11b já está representado em binário, então podemos


Resposta 1 dividir por 2 usando o deslocamento de bits fazendo um shift binário
para a direita de 1 posição, o que equivale a uma divisão inteira por
2. O número 11 em binário é representado por 1011. Fazendo um
shift binário para a direita de 1 posição, obtemos 0101, que é igual a
5 em decimal. O bit mais à direita é descartado e um novo bit mais
significativo com valor "0" é adicionado na posição mais significativa.
Portanto, para dividir o número 11b por 2 usando o deslocamento de
bits, basta fazer um shift binário para a direita de 1 posição,
resultando em 0101b (que é 5 em decimal).

Usuário tem certeza?

ChatGPT, Peço desculpas, cometi um engano novamente em minha resposta


Resposta 2 anterior. Se o número 11 está representado em binário com apenas
2 bits, então não é possível fazer um shift binário para a direita de 1
posição, pois isso resultaria em um número com apenas 1 bit, o que
não é suficiente para representar o número 5 em decimal.

Nesse caso, podemos dividir o número 11 por 2 usando o seguinte


procedimento: como o número 11 tem apenas 2 bits, podemos
simplesmente dividir por 2 por meio da operação de divisão inteira,
que nos dá o quociente 5 e o resto 1. Portanto, dividir o número 11b
por 2 resulta em 0101b como quociente e 0001b como resto.

Peço desculpas novamente por qualquer confusão causada pela


minha resposta anterior.

O usuário Considere o número 11b, já representado em binário, ou seja, 11 já é


abre uma o valor de 2 bits com o qual desejamos trabalhar. Como dividir 11
nova aba, por dois, usando o deslocamento de bits?
e pergunta
novamente

ChatGPT, Para dividir 11 por 2 usando o deslocamento de bits, podemos


Resposta 3 simplesmente deslocar todos os bits de 11 uma posição para a
direita. Isso é equivalente a uma divisão por 2, porque o
deslocamento de bits para a direita por uma posição é o mesmo que
a divisão por 2 na base 10.

Assim, temos:

11b >> 1

Onde ">>" representa o deslocamento de bits para a direita. Isso


resultará em:

5b

Isso significa que dividir 11 por 2 na base 10 é o mesmo que


deslocar todos os bits de 11 uma posição para a direita na base 2,
resultando no número binário 101b, que representa o valor decimal
5.
Alguma das respostas do ChatGPT está correta? Caso sim, qual? O que está errado
em cada uma das outras respostas?

Reflita sobre o papel da inteligência artificial em nosso cotidiano, e discorra sobre as


possíveis implicações éticas associadas ao uso indevido da inteligência artificial.
Caso deseje, acesse o ChatGPT e coloque mais algumas respostas geradas pelo
ChatGPT para esta pergunta sobre quanto vale 11 deslocado para a direita de 1 bit,
indicando se as respostas do ChatGPT estão certas ou erradas.

B4) (bônus) O site https://gcc.godbolt.org/ pode ser usado para ajudar na


solução de exercícios envolvendo Assembly. Copie e cole o código abaixo
no site mencionado e responda às seguintes perguntas.

int main() {
int num=3;
return num * num;
}

a. Explique, passo a passo, cada uma das linhas de 4 a 6 em Assembly


correspondentes ao código acima.
b. Considere uma arquitetura alternativa, com um registrador acumulador
ACC, conforme visto em aula, além dos registradores de trabalho
padrões, A e B, e que o registrador A seja inicializado com o valor 3.
Nessa máquina alternativa, considere o seguinte programa:

LD A
MUL A
STR B

O que será armazenado no registrador B? Relacione este programa


com o programa original em Assembly acima, indicando as
semelhanças e diferenças. Em particular, reflita sobre os diferentes
modos de endereçamento.

c. Substitua o sinal de vezes (*) pelo sinal de adição (+) no código em C


e estude o código gerado em Assembly. Explique o que ocorreu. O
que ocorre se você trocar agora a operação de num+num pela
operação 2*num em C? Alguma coisa muda no Assembly? E se você
trocar a operação de num+num pela operação 4*num em C? Alguma
coisa diferente ocorre? Explique a nova instrução introduzida no
código Assembly.
d. Substitua o sinal de vezes (*) pelo sinal de subtração (-) e estude o
código gerado. Explique o que ocorreu.

Você também pode gostar