Escolar Documentos
Profissional Documentos
Cultura Documentos
ARQUITETURA E
ORGANIZAÇÃO DE COMPUTADORES
2
ARQUITETURA E
ORGANIZAÇÃO DE COMPUTADORES
U 1 - POR ONDE COMEÇAR PARA
ENTENDER COMO O
COMPUTADOR FUNCIONA?
Ednaldo dos Santos
Introdução
Para começar esse percurso, você vai se deparar com a diferenciação entre dois níveis de
abstrações, que podemos associar aos sistemas computacionais: a arquitetura e a organização.
Para entender essa diferenciação vamos nos perguntar: o que é família de processadores?
Também veremos um histórico dos principais computadores projetados até os dias atuais,
correlacionando-os com a própria evolução da eletrônica. E, para concluir, apresentaremos os
conceitos inerentes ao pipeline e à superescalaridade, para que você possa refletir sobre as
seguintes questões: o que influencia na performance de processamento de um computador?
Como poderemos aumentar o poder de processamento de um sistema computacional?
A partir dos conceitos aqui apresentados, você terá condições de se situar na trajetória dos
sistemas computacionais e aplicar seu conhecimento no seu cotidiano, seja na tomada de
decisões, ou na aplicação no desenvolvimento de aplicações.
aqueles que não são muito importantes, pelo menos, a princípio. Apesar de menos
importantes, esses detalhes devem ser de conhecimento do programador, em
algumas situações, para que se possa alcançar um nível maior de eficiência
computacional, diminuindo-se o tempo de processamento pela otimização de seu
código para um processador específico.
Então, a partir de agora, vamos entender como se organizam os computadores, por
meio de sua arquitetura.
A figura acima utiliza uma abordagem denominada como “top-down” para descrever
os módulos internos. Ao contrário da “bottom-up”, na metodologia “top-down”,
partese dos módulos mais gerais e superiores para que estes sejam decompostos
em submódulos, até que se alcancem módulos que não precisem ser subdivididos,
devido à sua simplicidade e funcionalidade bem determinada.
Observe novamente a figura anterior e perceba que, no primeiro nível de abstração,
o computador é formado pelos seguintes módulos primários (STALLINGS, 2010):
Figura 2 - Ao verificar as funçõ es bá sicas de um computador, percebemos que o mó dulo responsável pela
funcionalidade ‘Controle’ centraliza todas as operaçõ es. Fonte: STALLINGS, 2010, p. 4.
Ao observar os computadores atuais, podemos dizer que eles evoluíram junto com
a eletrônica, desde o tempo das válvulas termiônicas até os atuais circuitos
integrados (chips).
Com a miniaturização do componentes, foi possível construir circuitos mais
complexos em espaços muito menores do que se usava anteriormente. Com os
componentes menores, a construção de memórias com mais capacidade e mais
rápidas, também se tornou possível, o que garante informações processadas de
forma mais eficiente. As novas tecnologias também permitem o emprego de
frequências maiores de operação, dissipando menos potência.
Além dos fatores físicos, novas técnicas de processamento, como o emprego de
pipeline, superescalaridade e execução fora de ordem, vem permitindo o aumento
da performance de processamento.
Então, vamos ver como se sucederam as gerações dos computadores, com um
breve histórico da evolução dos computadores, para que você possa tirar suas
próprias conclusões sobre arquitetura e organização, e do quanto evoluímos nos
aspectos tecnológicos.
A matemática e escritora inglesa Ada Lovelace foi a primeira pessoa a escrever um algoritmo para
computador. Em sua homenagem, foi atribuído o seu nome à uma linguagem de programação. A
linguagem Ada foi criada em 1982, teve como base o Cobol e o Basic e foi referência para a criação da
linguagem de programação Ruby (PORTAL EBC). Saiba mais na
matéria: <http://www.ebc.com.br/tecnologia/2015/03/conheca-historia-da-ada-lovelace-
primeiraprogramadora-do-mundo>.
A partir de agora, vamos observar que a evolução das gerações dos computadores
terá inúmeras consequências, não somente no impacto positivo do poderio de
processamento, quanto também nas funcionalidades exportadas pelos
processadores. Sob o ponto de vista da programação, a evolução pode ser
percebida pela forma de interação e programação, passando da programação pela
atuação direta de chaves e fios, até as linguagens atuais de quarta geração.
8
Figura 3 - Estruturaçã o do IAS com os elementos encontrados nos computadores atuais: programa armazenado em
memó ria, ULA, unidade de controle e E/S. Fonte: STALLINGS, 2010, p. 14.
Por fim, o conjunto do IAS tinha 21 instruções, agrupadas de acordo com as suas
funcionalidades: transferência de dados (entre memória e registrador ou
registradorregistrador), desvio incondicional, desvio condicional, aritméticas e
modificação de endereço (para permitir um endereçamento flexível).
O matemático Alan Turing é considerado como o pai da computação. Desenvolveu várias teorias, que
culminaram na criação da Inteligência Artificial e que contribuíram na criação do computador como
conhecemos atualmente. Quanto à criação do computador, ele teve, simultaneamente a von Neumann, a
mesma ideia do programa armazenado em memória para que pudesse ser processado (NUNES, 2012).
Dos modelos implementados pela IBM, o 7094 merece destaque, pois introduziu
um processador dedicado às operações de E/S (Entrada/ Saída), como veremos na
figura a seguir. Nelas, o processador principal envia um sinal de controle ao
processador de E/S (canal de dados), que fica responsável por realizar a
transferência das informações. Após o término da operação, o canal de dados
emite um sinal ao processador principal para que ele processe os dados recém
transferidos. Dessa forma, ocorre uma liberação de processamento do processador
principal. Esta técnica era conhecida como “buffering”.
Figura 4 - Estruturaçã o do IBM, modelo 7094, no qual se pode notar a presença de vá rios mó dulos de E/S
compartilhando o acesso à CPU e à memó ria. Fonte: STALLINGS, 2010, p. 21.
12
Figura 5 - Neste escalonamento, os trê s processos concorrem ao acesso à CPU, poré m, apenas um, de cada vez, é
detentor do recurso. Fonte: elaborada pelo autor, 2018.
Para finalizar, também não poderíamos deixar de mencionar que a DEC lançou, em seu PDP-8, a
ideia de barramento para interconectar os módulos do computador. A ideia deste barramento, o
“Omnibus”, deu origem aos barramentos que conhecemos atualmente equipando os
microcomputadores.
A quarta geração está vinculada à alta escala de integração dos transistores dentro dos circuitos
integrados. Na ULSI (Ultra Large Scale Integration) temos mais de um milhão de transistores, dentro de
um mesmo chip. Essa redução drástica do espaço ocupado pelos componentes eletrônicos propiciou o
aparecimento dos microprocessadores e multiprocessadores.
Em 1965, o co-fundador da Intel, Gordon Moore, anunciou a profecia de que a capacidade (e o número de
transistores) de um processador dobraria, mantendo-se o custo. Essa profecia se tornou verdade e,
atualmente, é considerada como a “Lei de Moore”. Ainda não se sabe até quando essa lei será mantida
como verdade (MARKOFF, 2016). Leia mais na matéria do New York Times, que mostra que a lei de
Moore ainda é um desafio: <http://www1.folha.uol.com.br/tec/2016/05/1768028-lei-de-moore-esta-se-
esgotandoe-tecnologia-busca-sucessores.shtml>.
Figura 6 - Diferenças entre o tempo de processamento sequencial (a) e com pipeline (b). Fonte: Elaborada pelo
autor, 2018.
Você sabia que você pode usar essa abstração de pipeline também em nível de
software? Para tanto, basta implementar o seu programa usando threads. As threads
são funções do seu programa que se comportarão como se fossem programas
independentes – porém usando o mesmo espaço de endereçamento (por exemplo,
podendo acessar as mesmas variáveis globais). Para saber mais sobre programação
usando threads, você poderá procurar pela biblioteca pthread (POSIX threads).
A família x86 é muito importância para o mundo dos sistemas computacionais, não
somente pela sua ampla utilização mas, também, por implantar vários aspectos
tecnológicos nos projetos de seus processadores.
No momento de seu lançamento, na década de 1980, o processador da Intel 8086 tinha, como
principal concorrente, o Motorola MC68000, que equipava os Apple Macintosh. Eles se
diferenciavam completamente, tanto em relação à arquitetura quanto à organização. Como
exemplo, podemos citar a largura dos registradores: o processador da Intel tinha registradores de 16
bits e o modelo da Motorola manipulava registradores de 32 bits. Em linhas gerais, o 68000 era mais
desejável pelos programadores do que o 8086. Mas, se o modelo da Motorola é mais desejável e
eficiente, porque o mercado atualmente é dominado por processadores derivados do Intel 8086? A
19
Nos processadores atuais, como o Intel Core-i7, comenta-se a existência de processadores (ou núcleos)
lógicos (ou virtuais) e físicos. Mas, o que vem a ser isso? Recomendamos um artigo (TELES, 2009) que
descreve a arquitetura do i7, desde o gerenciamento de memória até a descrição de núcleos virtuais e
físicos: <http://www.ic.unicamp.br/~ducatte/mo401/1s2009/T2/042348-t2.pdf>.
Atualmente, novas pesquisas vem sendo desenvolvidas para que ataque, de forma
ainda mais agressiva, o paralelismo internamente ao processador. Processadores
com mais núcleos (tanto físicos quanto virtuais) estão sendo lançados no mercado,
possibilitando o paralelismo em vários níveis de abstração.
Figura 7 - Funcionalidades bá sicas que podemos encontrar em sistemas embarcados, que podem possuir vá rios nó s
de processamento. Fonte: Fonte: STALLINGS, 2010, p. 37.
21
Como você pode ter notado, desde o primeiro computador eletrônico até os
modelos atuais, houve um grande salto, tanto da tecnologia eletrônica quanto dos
métodos e algoritmos usados para acelerar ainda mais o poder computacional.
Com o que aprendemos até aqui, podemos refletir sobre até quando será válida a
Lei de Moore e quais serão as próximas inovações na informática, como alguns dos
questionamentos atuais desse campo de estudo.
Síntese
Chegamos ao final deste capítulo. Vimos aqui os conceitos iniciais importantes para começar a
entender o funcionamento do computador. Nestes conceitos, estão presentes a definição de como o
computador está organizado, em sua arquitetura e organização, assim como realizar a
Com os pontos aqui apresentados, esperamos que você prossiga os estudos relacionados ao
funcionamento do computador e possa fazer comparações iniciais entre modelos de máquinas
dentro de um processo de consultoria técnica, por exemplo.
Projeto
Vamos praticar
Faça um texto crítico, em uma lauda, que retrate a criação e a evolução dos computadores, o
surgimento de tecnologias como Honeycomb Glacier (computador com tela adicional), os
equipamentos de alto desempenho e atualizável, como o notebook área 51, os processadores
de alto desempenho da Intel que auxiliarão a definir o futuro da computação, e a importância
do profissional de TI conhecer a estrutura computacional conforme as necessidades da
organização (desempenho computacional).
25
No seu texto, você deverá discorrer sobre a importância do conhecimento de hardware para o
mercado de trabalho atual, efetuando uma breve pesquisa sobre as inovações tecnológicas.
ARQUITETURA E ORGANIZAÇÃO DE
COMPUTADORES
U 2 - COMO O COMPUTADOR MANIPULA
INSTRUÇÕES E INFORMAÇÕES?
Introdução
Com a quantidade de informações com que lidamos atualmente, sem o computador, não seria
possível nem encontrar utilidade para tantos dados. Ao aprofundar nossos conhecimentos em
arquitetura e organização de computadores, vamos entender como o computador se estrutura,
segundo uma visão de alto nível, para que possamos mergulhar em seus elementos de
interconexão, na estrutura e função do processador.
Diante disso, já nos deparamos com algumas reflexões: o processador precisa fornecer as
instruções e os dados para os seus módulos internos a fim de que haja o processamento?
Nesse sentido, como armazená-los internamente de modo que não tenhamos de acessar a
memória em toda a etapa da execução da instrução? E, ainda, como uma instrução fica
representada na memória?
Mas, como você deve ter notado, toda forma de armazenamento e manipulação de dados e de
instruções é realizada por intermédio de valores numéricos. E como representar e manipular os
números em seu formato binário? Vamos entender isso também.
E, por fim, falaremos sobre a unidade de controle e os seus sinais de controle, – sinais estes
indispensáveis à sincronização e ao gerenciamento dos módulos do processador.
Além dos módulos em si, precisamos ter em mente que, para que eles atuem, é
necessária toda uma sincronização de trabalho. Essa sincronização é atingida pela
geração de sinais de controle, os quais estão presentes dentro do processador para
que este possa executar as instruções, e, também, estão presentes nos demais
módulos que integram o computador.
Nesse sentido, conhecer os módulos do computador e a sua forma de trabalho é
fundamental para que você possa saber, entre outras questões, quais são os
pontos de gargalos de processamento. Esse conhecimento permitirá que você
otimize os sistemas a serem desenvolvidos ou, ainda, reconfigure o computador
para que sua performance computacional se torne mais eficiente.
27
Figura 1 - Mó dulos bá sicos de um computador e sua interconexã o, em que é possível notar a presença do
barramento do sistema para prover a interconexã o dos mó dulos. Fonte: STALLINGS, 2010, p. 55.
Você sabia que alguns processadores, como o registrador zero, apresentam um valor
fixo em 0 (zero)? Essa escolha é motivada pelo fato de que a frequência de aparição
de instruções do tipo carga do valor 0 (instanciação de dados com o valor zero) é alta.
Dessa forma, economiza-se o tempo de carga da constante já que o valor zero já se
encontra internamente ao processador, bastando, para tal, realizar uma
movimentação de dados do tipo registrador-registrador (por exemplo, Reg1 = Reg0).
Para finalizar essa seção, como exemplo prático, convém mencionarmos que o
processador Intel Core i7, apresenta, em cada núcleo, 16 registradores GPR
(General Purpose Register) em seu banco de registradores (TELES, 2018).
Além dos registradores listados acima, não poderíamos deixar de citar o registrador
de flags. O registrador de flags é instanciado ao término, por exemplo, das
operações aritméticas a fim de armazenar o estado final da operação, bem como
informar se a operação resultou em algum valor negativo, nulo ou, ainda, se houve
estouro de representação numérica (overflow). Mas por que armazenar esse estado
final da operação? Vamos lhe dar um exemplo. Na maioria dos processadores, para
se fazer uma operação de desvio, é necessário testar exatamente esse registrador
de flags. A figura a seguir ilustra a tradução de um desvio condicional a partir de
uma linguagem de alto nível para um assembly (linguagem de máquina) hipotético.
Além dos registradores listados acima, não poderíamos deixar de citar o registrador
de flags. O registrador de flags é instanciado ao término, por exemplo, das
operações aritméticas a fim de armazenar o estado final da operação, bem como
informar se a operação resultou em algum valor negativo, nulo ou, ainda, se houve
estouro de representação numérica (overflow). Mas por que armazenar esse estado
final da operação? Vamos lhe dar um exemplo. Na maioria dos processadores, para
se fazer uma operação de desvio, é necessário testar exatamente esse registrador
de flags. A figura a seguir ilustra a tradução de um desvio condicional a partir de
uma linguagem de alto nível para um assembly (linguagem de máquina) hipotético.
Na parte (b) da figura acima, tem-se o código traduzido da parte (a) para o assembly
de uma máquina hipotética. Suponha que os valores das variáveis a e b já estejam
carregadas nos registradores reg1 e reg2, respectivamente. A linha um realiza a
subtração desses dois registradores e armazenando o resultado no registrador reg 3.
Além do cálculo em si, a instrução de subtração também instancia os campos do
registrador de flags. No nosso exemplo, daremos atenção ao campo S (sinal). Esse
campo será instanciado em um caso a instrução de subtração retorne um valor
negativo e, caso contrário, o campo será instanciado em zero. O campo S será
avaliado na instrução da linha dois: js (jump signal). Caso o campo S esteja
sinalizado em um (resultado negativo), o fluxo de execução do código será
desviado para o endereço apontado pelo rótulo parte_else (caso negativo, então,
significa que a < b). Caso contrário (S = 0), assim, o trecho identificado como
<sequência_if...> será executado.
Caso o fluxo tenha passado pela <sequência_if...>, a linha três, contendo um desvio
incondicional (jmp = jump) será responsável por saltar o trecho <sequência_else...>
para que o fluxo seja direcionado à primeira instrução fora do comando if... else
(<sequência_após_desvio...>).
Por fim, as linhas quatro e cinco representam os rótulos para nortear os desvios
junto às instruções de desvios condicionais e não condicionais.
32
Você sabia que é possível usar desvios não condicionais em linguagens como C/C+
+? Em disciplinas de programação, o desvio não condicional “goto” tem o seu uso
proibido. Porém, em algumas situações, torna-se necessário utilizá-lo. Por exemplo:
ao codificar programas para sistemas embarcados, em que se tem uma forte restrição
de memória (não se pode realizar muitas chamadas de funções para evitar estouro de
pilha – stack), às vezes, o goto é essencial. Não somente em sistemas embarcados
podemos encontrar o “goto” – por exemplo, basta ver a codificação do kernel do
Linux.
qual o caminho que aos dados deverão seguir dentro dele. A figura a seguir ilustra
um possível formato para a instrução de subtração.
Na figura acima, supõe-se que a máquina hipotética em questão tem uma largura
de palavra de 16 bits, sendo que o seu banco de registradores engloba oito
registradores e possui 125 instruções em sua arquitetura de conjunto de instruções
(ISA – Instruction Set Architecture). Fazendo as contas rapidamente, chegamos à
conclusão de que serão necessários três bits (log28 = 3) para endereçar cada
registrador e mais sete bits para mapear as instruções (log2125 ≈ 7).
33
Então, para mapear “sub reg3, reg1,reg2”, atribuindo aleatoriamente (para fins de
ilustração) o valor 0110111 para o opcode da instrução de subtração, tem-se a
palavra: 0110111 011 001 010 (lembrando que 011(2) = 3(10); 001(2) = 1(10); 010(2) =
2(10)).
Cada classe de instrução tem o seu formato de representação dentro da palavra de
16 bits. Sendo assim, os campos podem variar de tamanho e de representação,
exceto o campo do opcode que, nesse caso, será mantido fixo (15 a nove bits).
O início do processo de execução da instrução consiste em sua busca a partir da
memória. Como mencionado antes, o processador coleta toda palavra da memória
(conjunto formado pelo opcode e seus operandos) e armazena no registrador IR,
para que as informações sejam encaminhadas aos submódulos ao longo de sua
organização. Nesse caso, existe um fluxo de informações e de sinais pelos
caminhos do processador – caminhos estes chamados de datapath.
Em certas situações, ao nos depararmos com um problema para o qual temos de ter uma solução que envolva
hardware, surgem algumas dúvidas para reflexão: que tipo de hardware usaremos? Qual
microcontrolador/microprocessador utilizar para a questão? Porém, algumas vezes, a aplicação é muito específica
e usar uma plataforma pronta não é muito adequado. Nesse caso, pode-se desenvolver o próprio processador –
que manipula o seu próprio conjunto de instruções, possui o seu próprio mapeamento de registradores e o seu
próprio fluxo de dados. Os pontos vistos neste capítulo ajudariam no projeto de esboçar o processador otimizado
para o problema. Para tanto, a implementação seria baseada na utilização de hardware reconfigurável (ou lógica
reconfigurável). E, para a implementação, seria usada alguma linguagem de descrição de hardware (HDL
– Hardware Description Language), tal com Verilog ou VHDL. Nessa situação, poderá ser implementado, ainda, o
sistema embarcado baseado na ideia de SoC (system on chip) onda há a integração do mundo do software e do
mundo de hardware na mesma FPGA (Field Programmable Gate Array, em português "Arranjo de Portas
Programáveis em Campo"). Em função da integração de hardware e software, as etapas de análise e projeto de
um SoC também serão particionadas, ou seja, uma frente do projeto se envolverá com o hardware e uma outra
frente se envolverá com o software – esse particionamento é chamado como CoDesign.
Você sabia que existe uma interrupção que é chamada quando o computador fica
ocioso? E que existe outra que é ativada sempre que houver um pulso de clock? E
que no Linux é possível visualizar uma lista de interrupções listando o conteúdo da
pasta /proc/interrupts?
Em algumas ocasiões, é necessário implementar drivers (softwares que interfaceiam com o sistema
operacional para controlar dispositivos de E/S – acessar registradores internos, interrupções etc.). No
portal Labworks (2018) há material para leitura e exemplos de código para a construção de drivers. Seria
um bom começo caso você esteja interessado no assunto:
<https://e-labworks.com/treinamentos/drivers/source>.
Figura 4 - Sequência de etapas para execuçã o das instruçõ es com a manipulaçã o de interrupçõ es: em (a), a
representaçã o bá sica, e em (b), o detalhamento das açõ es. Fonte: STALLINGS, 2010, p. 62-363.
Na figura acima, nota-se que, após a execução de uma instrução ser completada,
verifica-se se há alguma interrupção enfileirada pendente a ser executada. Nesse
caso, ela entraria como um processo normal, ou seja, as instruções vinculadas ao
tratamento da interrupção entrariam no fluxo do pipeline.
Quando um fluxo de execução é adicionado ao pipeline, o que acontece quando
alguma outra interrupção ocorre? Quando esse cenário ocorre, temos duas
maneiras de realizar o tratamento: na primeira forma, assim que o tratamento da
interrupção for iniciado, poderemos desabilitar novas interrupções ou permitir que
as próprias interrupções sejam interrompidas para o atendimento de outras. A figura
abaixo mostra a diferença entre esses dois enfoques.
36
Figura 5 - Tratamento de interrupçõ es com a desabilitaçã o de novas interrupçõ es (a) e tratamento de novas
interrupçõ es de forma aninhada (b). Fonte: STALLINGS, 2010, p. 65.
Até o momento, por vários momentos, citamos o termo pipeline, porém sem nos
aprofundarmos. Você deve estar se perguntando: como o pipeline consegue,
efetivamente, agir em um ambiente com interrupções, desvios e demais fatos que
podem degradar a eficiência computacional? Antes de respondermos a esse
37
Figura 6 - Fluxo de dados na busca da instruçã o (a), na busca de operandos usando endereçamento indireto (b) e no
ciclo de interrupçã o (c). Fonte: STALLINGS, 2010, p. 363-364.
Quando se fala sobre fluxo de dados, correlacionando-o com o fluxo de instruções, vem à mente a
Taxonomia de Flynn. Essa classificação abrange quatro tipos de modelos computacionais: SISD (Single
Instruction, Single Data), SIMD (Single Instruction Multiple Data), MISD (Multiple Instruction, Single Data) e
MIMD (Multiple Instruction, Multiple Data). Saiba mais no artigo (CARVALHO, 2017):
<https://pt.linkedin.com/pulse/o-processamento-paralelo-e-taxonomia-de-flynn-carlos-eduardo>.
Mas, cabe a questão, qual a relação do fluxo de dados com o pipeline? A resposta
reside no fato de que alterações no tempo de execução (havendo ou não a
necessidade de ciclos extras de clock para a finalização de uma etapa) e de que
alterações no chaveamento de comunicação entre os módulos alterará o modo de
processamento e, consequentemente, impactará sobre o pipeline.
No vídeo do professor Ricardo Santos (2015), da UFMS (Universidade Federal de Mato Grosso do Sul),
você pode saber mais sobre o pipeline e seus hazards, acesse a aula disponível em
<https://www.youtube.com/watch?v=9DOVl4aNYa0>.
existem os tipos de dados (por exemplo, em C/C++: char, int, float etc.) que
possuem uma faixa de valores derivada de seu tamanho (em bits). Por exemplo,
caso estejamos manipulando uma variável do tipo char, significa que poderemos
representar valores de -128 a 127, ou seja, metade de sua capacidade de
representação consistirá de valores positivos e metade de valores negativos. Mas
por que esse valor? Nesse caso, quando se manipula tipos cuja largura é de 8 bits,
tem-se 256 valores possíveis (28 = 256). No entanto, cabe o questionamento, como
representar um valor em binário?
Apesar do conceito de lógica binária nos acompanhar desde os primórdios dos tempos (somos seres
dicotômicos), apenas no século XIX é que o pensamento binário foi formalizado através da Álgebra
Booleana. O idealizador dela foi o matemático e filósofo britânico George Boole. Leia mais no artigo
(PIROPO, 2012): <http://www.techtudo.com.br/artigos/noticia/2012/08/uma-algebra-diferente.html>.
Todo valor, em qualquer base numérica, poderá ser fatorado. Por exemplo, o valor
876(10) poderá ser fatorado como:
876(10) = 800 + 70 + 6
= 8*102 + 7*101 + 6*100.
Você pode notar que ao ser realizada a exponenciação da base pelo expoente que
representa o grau de significância do termo, em função de sua localização,
obtémse: [23; 22; 21;20 = 8; 4; 2; 1] (WEBER, 2012). Dessa combinação, originou-se
o nome do modelo de representação binária que utilizamos: BCD 8421 (binary
coded decimal).
Ainda assim como chegamos nos fatores que deverão ser multiplicados à base
exponenciada? Simplesmente fazendo divisões sucessivas pela base e coletando
os restos obtidos. As divisões pela base serão realizadas enquanto pudermos
dividir pela base. Na última divisão, coleta-se o quociente. Esse processo de
divisões sucessivas representa a forma de como convertemos um valor decimal em
binário (realizando divisões sucessivas por 2).
Mas, voltando à programação em C/C++, o que acontece quando utilizamos o
modificador de tipo unsigned? Esse modificador faz com que a variável represente
apenas valores positivos. No caso do unsigned char, todos os 256 valores possíveis
41
Você sabia que, em C/C++, você poderá fazer operações bit-a-bit? Por exemplo, faça
um programa e teste a diferença no resultado entre as atribuições usando operações
lógicas (exemplo: C = A && B; D = E || F) e operações bit-a-bit (exemplo: C = A & B; D
= E | F). Você sabia, também, que poderá realizar divisões, por exemplo, por dois
usando operação lógica? Experimente substituir: A = A / 2 pelo comando: A = A >> 1.
O operador lógico >> denota deslocamento, no caso, deslocamento para a direita
uma vez.
42
Figura 7 - Datapath do processador MIPS destacando-se a interface entre unidade de controle e a ALU e o
chaveamento no fluxo de dados a ser encaminhado à ALU. Fonte: Adaptada de PATTERSON, 1998, p. 209.
roteamento de informações. O que o torna complexo são as técnicas cada dia mais
agressivas para conseguir, continuamente, aumentar o poderio de processamento e
de sua performance computacional. Essas técnicas são baseadas no pipeline e na
superescalaridade. Um outro complicante no quesito de complexidade é
representado pelo processamento paralelo cada vez mais atuante e presente.
Temos vários exemplos e níveis de paralelismo: nível de programação, nível de
pipeline (pseudoparalelismo), nível de superescalaridade e, por fim, nível de
múltiplos núcleos (cores – físicos e virtuais) de paralelismo.
Síntese
Você chegou ao final do capítulo que aborda conceitos inerentes à forma da representação e do
armazenamento de informações dentro do processador para que sejam executados. Novamente, foi
necessário abordar os conceitos de arquitetura e organização – conceitos que ora se mesclam e ora
são totalmente distintos.
A partir dos pontos que abordamos neste capítulo, esperamos que você se sinta confortável e
motivado a prosseguir os estudos relacionados ao funcionamento do computador e a aplicar os
conhecimentos adquiridos em seu dia a dia – seja em atividades de consultoria, na implementação
de sistemas ou, ainda, em seu cotidiano pessoal. Esperamos, também, que você, a partir das
informações até aqui apresentadas, vislumbre soluções, cada vez mais eficientes e “elegantes” para a
implementação de sistemas computacionais.
Projeto
COMPUTADORES E O FUTURO
45
Vamos praticar
Faça um texto crítico, em uma lauda, que retrate como os computadores funcionam, sua
composição, as novas tecnologias de processadores da fabricante Intel, como os processadores
Spring Hill e Spring Crest da Intel, apresentados por Gregory Bryant, vice- presidente da
empresa na CES 2019, e o que podemos esperar para o futuro.
No seu texto, você deverá discorrer sobre a questão da supercomputação e a nova geração de
processadores apresentadas pelas gigantes do ramo.
ARQUITETURA E ORGANIZAÇÃO DE
COMPUTADORES
U 3 - EM QUE CONSISTE O PROCESSAMENTO DAS
INSTRUÇÕES E COMO O PROJETO DA MEMÓRIA
PODE AUXILIAR?
Introdução
Você chegou até aqui vendo muito conteúdo interessante sobre o funcionamento e a
concepção básica dos computadores. Que tal falarmos agora sobre o processamento das
instruções e alguns itens relacionados à memória?
Neste capítulo, vamos estudar essas questões. Começaremos com a unidade de controle, para
que possamos ter a resposta para o possível questionamento: como o processador
efetivamente processa as instruções? Neste ponto, abordaremos o que vêm a ser as
microoperações e como elas são abstraídas e tratadas pelo processador.
49
A essa altura, poderá estar se formando, em sua mente, mais uma pergunta: se existem as
micro-operações, o tratamento de interrupções também é abstraído como uma sequência de
instruções divididas, ainda, em micro-operações? Assim, para encontrar as respostas,
abordaremos a questão das interrupções apresentando um fluxo de execução realizado pelo
processador.
Por fim, serão abordados aspectos do sistema de memória. O sistema de memória é alvo de
muitas pesquisas pelo fato de ser um grande gargalo que impacta a performance
computacional. Então, poderá surgir mais uma questão: como atuar no projeto do sistema de
memória para que se possa melhorar o seu desempenho? A resposta está nos quesitos ligados
à hierarquia de memória e à memória cache.
A partir dos pontos abordados neste capítulo, você terá condições de responder às indagações
inerentes à performance computacional e, também, favorecer o desenvolvimento de sistemas
computacionais ainda mais eficientes.
Os processadores da Intel, como é o caso do Core i7, são tidos como processadores híbridos, pois
mantêm, em sua arquitetura e de forma fortemente acoplada, núcleos baseados no padrão CISC
(Complex Instruction Set Computer) e no padrão RISC (Reduced Instruction Set Computer) (RAISCH, 2010).
Leia mais sobre os processadores:
<https://www.ibm.com/developerworks/community/blogs/tlcbr/entry/computadores_hibridos_a_proxima_fr
onteira_da_computacao?lang=en>.
50
Essa divisão da instrução em etapas menores favorece o pipeline, por meio do qual
consegue-se antecipar, mais facilmente, o início de uma nova instrução.
3.1.1 Micro-operações
Figura 1 - Divisã o das etapas de execuçã o em micro-operaçõ es, sendo que cada micro-operaçã o é executada em
um pulso de má quina. Fonte: STALLINGS, 2010, p. 462.
• có pia do valor buscado da memó ria, que foi salvo no registrador MBR para o
registrador IR (Instruction Register).
Ainda em relação à figura acima, o mesmo processo de divisão de uma fase dentro
do ciclo de instrução pode ser aplicado ao ciclo indireto. O ciclo indireto ocorre na
fase de busca dos operandos. Nessa ocasião, o ciclo pode ser dividido nas
microoperações abaixo listadas:
• registrador MAR recebe o campo do IR, que contém o endereço de memó ria, o
qual contém a referência para que seja acessada a informaçã o requerida;
• acessa-se a memó ria na posiçã o MAR para coletar a referência de memó ria e
armazená -la no MBR;
• atualiza-se o campo de IR para que se possa, na pró xima fase, acessar a
localizaçã o definitiva de memó ria que contém a informaçã o a ser manipulada.
O cientista da computação Maurice Vincent Wilkes (1913-2010), foi o responsável pelo projeto do
computador EDSAC, em 1949, quando a ideia de micro-operações foi concebida. Mais tarde, essa ideia
foi utilizada pela empresa americana IBM em sua série 360, no ano de 1964 (UFRGS, 2010). Em 1967,
Wilkes recebeu o Prêmio Turing, por essa e outras contribuições. Para conhecer mais sobre a trajetória
de Wilkes acesse: <http://www.ufrgs.br/mvs/Periodo02-1949-ElectronicDelay.html>.
Você sabia que o processador Intel Core i7, Nehalem, possui um conjunto de
instruções composto por macro-instruções CISC (Complex Instruction Set Computer)
que são traduzidas em micro-operações RISC (Reduced Instruction Set Computer)? E
que, para executar as micro-operações, o i7 apresenta um pipeline com profundidade
de 14 estágios? Detalhes dessas afirmativas você poderá encontrar em Hennessy
(2014).
Tomemos, para ilustrar a divisão da etapa de execução em micro-operações, duas
instruções hipotéticas quaisquer: a primeira trata de uma escrita na memória do tipo
STORE posição, e, a segunda, um desvio condicional do tipo JZ offset (jump caso
zero).
Para a instrução do tipo STORE posição, vamos supor que o valor a ser salvo na
memória, encontra-se no registrador acumulador. Nesse caso, a instrução poderá
ser decomposta nas seguintes micro-operações:
Figura 2 - Fluxograma da execuçã o das micro-operaçõ es a partir do valor instanciado no registrador ICC.
Fonte: STALLINGS, 2010, p. 467.
Você já deve estar familiarizado com o fato de que o computador tem por finalidade
executar instruções pertencentes a um programa (programas do usuário, do próprio
sistema operacional ou referentes ao tratamento das interrupções). Todas as
instruções estão dentro de uma das seguintes classes: processador-memória,
processador-E/S, processamento propriamente dito e controle.
Então, as micro-operações devem, também, abranger as funcionalidades básicas
do computador. Segundo Stallings (2010), as funcionalidades das micro-operações
estão classificadas da seguinte forma:
Como você pode ter notado, essas funcionalidades das micro-operações são
evocadas para o tratamento das interrupções e, por diversas vezes, acessam os
barramentos do sistema para completar as suas ações. Diante desse fato, vamos,
agora, dar um foco nas interrupções e nos barramentos do sistema computacional.
Figura 3 - Sequência de etapas para execuçã o das instruçõ es, sendo que, apó s cada instruçã o, há a verificaçã o da
existência de solicitaçõ es de interrupçõ es. Fonte: STALLINGS, 2010, p. 363.
Na figura acima, nota-se que, após a execução de uma instrução ser completada,
há a verificação, se há alguma interrupção enfileirada pendente a ser executada.
Nesse caso, ela entraria como um processo normal, ou seja, as instruções
vinculadas ao tratamento da interrupção entrariam no fluxo do pipeline.
Quando um fluxo de execução é adicionado ao pipeline, o que acontece quando
alguma outra interrupção ocorre? Quando esse cenário ocorre, temos duas
maneiras de realizar o tratamento: na primeira forma, assim que o tratamento da
interrupção for iniciado, poderemos desabilitar novas interrupções ou permitir que
as próprias interrupções sejam interrompidas para o atendimento de outras. A figura
abaixo mostra a diferença entre esses dois enfoques.
Figura 4 - Tratamento de interrupçõ es com a desabilitaçã o de novas interrupçõ es (a) e tratamento de novas
interrupçõ es de forma aninhada (b). Fonte: STALLINGS, 2010, p. 65.
56
Mais uma vez retomando as classes das instruções, você pode notar que existem
instruções que dependem de uma estrutura de comunicação com os demais
módulos do computador (memória e dispositivos de E/S), para que possam ser
processadas.
Essa estrutura de comunicação é provida pelos barramentos. A figura a seguir,
ilustra, em linhas gerais, as interfaces requeridas pelos módulos do computador e a
estrutura básica de uma rede de interconexão (barramento).
57
Figura 5 - Interfaces requeridas pelos mó dulos do computador (a) e a estrutura bá sica de um barramento
(b). Fonte: Adaptada de STALLINGS, 2010, p. 67-69.
Como você pode notar na figura acima, as interfaces dos módulos do computador,
em (a), correspondem, em suma, às linhas de dados, endereços e de sinais de
controle. Sendo assim, um barramento deve ter, em sua funcionalidade básica, vias
para o tráfego de tais sinais (exibidos em (b), destacados em vermelho):
• vias de dados: as vias de dados sã o responsáveis pelo trá fego, em paralelo, das
informaçõ es a serem processadas, armazenadas ou enviadas aos dispositivos de
E/S;
• vias de endereçamento: tem por objetivo transmitir endereços de memó ria ou
de mó dulos de E/S;
• vias de sinais de controle: como sinais de controle podemos ter (STALLINGS,
2010):
- leitura/escrita de memória: define a operação a ser realizada quando o acesso à
memória for solicitado;
- leitura/escrita de E/S: define a operação a ser realizada quando o acesso a
algum dispositivo de E/S for solicitado;
- ACK de transferência (acknowledgment): o ACK é um sinal de reconhecimento
cuja função é avisar o término, de forma satisfatória, da operação de transferência;
58
- solicitação de barramento: sinal gerado por algum módulo para que use o
barramento;
- concessão de barramento: resposta à solicitação de barramento, outorgando ao
módulo, o direito do uso do barramento;
- requisição de interrupção: sinal que indica a pendência de alguma interrupção;
- ACK de interrupção: reconhecimento da interrupção que estava pendente;
- clock: pulsos de sincronização;
- reset: efetua a reinicialização dos módulos.
Figura 6 - Configuraçõ es de um barramento: em (a), tem-se uma configuraçã o bá sica e, em (b), uma configuraçã o
de alto desempenho. Fonte: STALLINGS, 2010, p. 71.
Quer saber mais sobre chipsets e barramentos? Recomendamos o artigo de Torres (2012), no endereço:
<https://www.clubedohardware.com.br/artigos/placas-mae/tudo-o-que-voc%C3%AA-precisa-saber-
sobrechipsets-r34158/?nbcpage=1>.
• memória secundária: representa o nível mais baixo da memó ria (mais distante
do processador). A memó ria secundá ria pode ser exemplificada pelo disco rígido
– dispositivo que usa o meio magnético como forma de armazenamento.
No vídeo “Políticas de Atualização da Cache”, você pode conhecer um pouco mais sobre o funcionamento
da memória cache, a partir dos algoritmos de substituição (UNB-GAMA, 2015):
<https://www.youtube.com/watch?v=1wh5gczKNbc>.
• caso exista alguma posiçã o vaga, escreva o item nesta posiçã o; • caso contrá rio,
executa-se a política de troca de bloco, que será descrita adiante.
Por sua vez, o mapeamento direto vem em direção contrária aos custos e da
complexidade do hardware – figura a seguir, item (b). A sua estratégia de busca
segue os seguintes passos:
Figura 7 - Formas de mapeamento da memó ria cache, sendo que em (a) temos o mapeamento associativo, em (b),
o mapeamento direto e, por fim, em (c), o conjunto associativo. Fonte: Elaborada pelo autor, 2018.
Na figura acima, você pode notar o campo “tag” que corresponde à referência do
endereço do bloco armazenado. O campo “válido” tem por objetivo informar se o
conteúdo da linha não pertence a algum processo já finalizado ou algum valor
aleatório produzido no momento da iniciação do sistema.
• write back: nesse tipo de política, qualquer alteraçã o na cache é repassada aos
níveis inferiores de memó ria, deixando todos os níveis sincronizados com o
mesmo valor de conteú do;
67
Você pode estar se perguntando: quando se deve usar uma ou outra política de
escrita? Para responder a essa pergunta, abstraia um ambiente que apresenta
apenas um processador que tenha um núcleo. Neste caso, não há nenhuma
possibilidade de que o valor de um bloco seja alterado por outros nós de
processamento. Sendo assim, neste ambiente não é necessário o write through.
Agora abstraia um ambiente que um certo item possa ser buscado por vários
núcleos. O write through ajuda a manter a coerência dos valores armazenados na
hierarquia de memória.
Síntese
Chegamos ao final de mais uma etapa em nosso caminho de conhecimento. Neste capítulo,
passamos pelos aspectos de processamento das instruções, mais especificamente sobre a unidade
de controle do processador e a divisão das instruções em micro-operações. Pudemos ver, também, a
parte de interconexão dos módulos do computador, representada pelo barramento e, ao final, os
conceitos acerca do sistema de memória. Dentro do sistema de memória, pudemos dar um enfoque
maior no sistema de memória cache.
Esperamos que este conteúdo lhe dê condições de tomar decisões nos quesitos relacionados ao
parque de informática da empresa e implementar soluções de forma mais eficiente.
Projeto
68
Sendo assim, é importante ter conhecimento adequado sobre o hardware que será utilizado
para manipular este tipo de informação tão específica e muito comum atualmente.
Vamos praticar
RIBEIRO, F. Computex: Micron apresenta nova memórias Crucial de 32 GB. 29 maio 2019.
Disponível em: <https://canaltech.com.br/computex/computex-micron-apresenta-
novasmemorias-crucial-de-32-gb-140373>.Acesso em: 13 set. 2019.
ARQUITETURA E ORGANIZAÇÃO DE
COMPUTADORES
U 4 - COMO PODEMOS OBTER E ARMAZENAR AS
INFORMAÇÕES E COMO MANIPULÁ-LAS EM
MÁQUINAS CISC, RISC E SUPERESCALARES?
Introdução
Nessa parte dos estudos em Arquitetura e Organização de Computadores, vamos estudar
armazenamento, interfaceamento com o mundo externo, e um pouco mais de processamento.
Aproveitando o assunto, vamos estudar outro tipo de memória: a ROM (Memória Somente de
Leitura, em inglês, Read Only Memory).
Com esse conhecimento sobre memórias, poderemos avançar para outro questionamento:
como podemos obter dados do mundo externo, usando os dispositivos de entrada e de saída
(E/S)? Essa pergunta será respondida abordando alguns pontos sobre a estruturação e sobre
como podemos manipular os módulos de E/S.
Por fim, entraremos no aspecto de processamento, abordando uma dúvida comum: quais as
diferenças entre os processadores RISC e CISC? A família x86 é, afinal, RISC ou CISC?
Aproveitando o gancho, um outro assunto que estudaremos é em relação aos processadores
superescalares. Você pode, então, ampliar a sua pergunta sobre a família x86: ela é
superescalar? E o que seria superescalaridade?
Esses pontos, sobre RISC, CISC e superescalaridade, serão abordados também neste capítulo.
Com base no conteúdo que veremos a seguir, você terá condições de classificar melhor os
sistemas computacionais existentes, e de solucionar problemas pela adoção de equipamentos
mais específicos para a sua aplicação.
Figura 1 - Mó dulo bá sico de memó ria. Outros pinos poderã o ser encontrados nas implementaçõ es reais de memó ria.
Fonte: Elaborada pelo autor, 2018.
Na figura acima, temos uma possível pinagem de um módulo de memória. Nesta
memória hipotética, podemos encontrar os seguintes pinos:
71
Figura 2 - Estrutura bá sica de uma cé lula de memó ria. Em (a), tem-se uma célula da DRAM e, em (b), uma
configuraçã o bá sica da SRAM. Fonte: STALLINGS, 2010, p. 130.
Você tem dúvidas sobre as diferenças entre as memórias DDR3 e DDR4 e qual a melhor escolha para a
montagem dos computadores? Assista o vídeo que vai te ajudar a diferenciar as memórias:
<https://www.youtube.com/watch?v=Ual7ELvPsJc>.
Você sabia que existem memórias flash do tipo NOR e do tipo NAND? Para saber
mais, recomendamos o especial da revista Guia do Hardware (MORIMOTO, 2007),
sobre memórias: <https://www.hardware.com.br/static/media/RevistaGDH_04.pdf>.
física (por exemplo, usando um cabo serial) para que seja realizada
a programaçã o do dispositivo;
o EPROM (PROM apagável – Erasable PROM) – semelhante à PROM,
porém permite vá rias gravaçõ es. Para se gravar um novo conjunto
de informaçõ es (dados ou có digo), é necessá rio realizar a etapa de
apagamento, submetendo o dispositivo a um banho de luz
ultravioleta. Neste tipo de componente, existe, no invó lucro, uma
regiã o translú cida para permitir que a luz ultravioleta atinja a
regiã o interna do componente;
o EEPROM (PROM apagável eletricamente – Electrically Erasable
PROM) – igualmente à EPROM, permite o apagamento das
informaçõ es para que seja feita uma nova gravaçã o. Porém, em vez
de se utilizar luz ultravioleta, o processo de apagamento se faz
mediante sinais elétricos.
Você sabia que o BIOS (Sistema Básico de Entrada e Saída – Basic Input-Output
System) foi criado a mais de 25 anos e ainda persiste nos computadores? Existe uma
proposta para substituir o BIOS, chamada de UEFI ( Unified Extensible Firmware
Interface, em português, Interface Unificada Extensível para o Firmware) (PACHECO,
2010). Maiores detalhes no artigo: <https://www.hardware.com.br/artigos/bios/>.
Richard Wesley Hamming (1915-1998), foi um matemático nascido nos Estados Unidos, que marcou seu
nome na ciência da computação, com o chamado código de Hamming. O código é usado para detecção e
correção de erros, não somente frente ao armazenamento das informações mas, também, no mundo das
telecomunicações. Para saber mais, leia a tradução de um texto do livro “The Art of Doing Science and
Engineering” (HAMMING, 2016): <http://www.de.ufpe.br/~hmo/TraducaoHamming.pdf>.
Figura 3 - Estrutura bá sica de um mó dulo de E/S, identificando seus componentes externos e suas interfaces para a
interligaçã o com o barramento. Fonte: STALLINGS, 2010, p. 130.
Figura 4 - Fluxogramas relacionados aos trê s modos de manipulaçã o dos mó dulos de E/S: programada, controlada
por interrupçã o e DMA. Fonte: STALLINGS, 2010, p. 130.
Às vezes, para acessar dispositivos de E/S, há a necessidade de se escrever um device driver. No artigo
“Aprendendo a escrever drivers para o Linux” (SCHARDONG, 2012), você tem uma orientação inicial:
<http://www.jack.eti.br/aprendendo-a-escrever-drivers-para-o-linux/>.
Figura 5 - Mó dulo bá sico de DMA. Nota-se a presença das linhas de dados, de endereço e de controle (divididas em
linhas específicas para a ló gica de controle). Fonte: STALLINGS, 2010, p. 192.
Figura 6 - Exemplo de janelas de registradores sendo usadas por quatro funçõ es aninhadas. A funçã o A passa
parâ metros para a funçã o B, e assim por diante. Fonte: STALLINGS, 2010, p. 402.
Na figura acima vemos a alocação de uma janela para cada função. Na medida em
que as funções vão sendo chamadas, ocorre a alocação de uma janela (de forma
sequencial) para que possam ser armazenadas as variáveis locais de cada função.
A transição das janelas é usada para armazenar os valores relativos aos
parâmetros passados de uma função para outra.
No momento do retorno, na finalização de uma função, a janela ativa volta a ser a
antecessora. Dessa forma, as variáveis não são perdidas e, consequentemente,
não precisam ser buscadas, novamente, junto à memória.
No caso das janelas de registradores, listamos algumas perguntas que podem
surgir.
É constante a comparação, para saber qual a melhor tecnologia: CISC ou RISC? Cada uma apresenta
pontos vantajosos sobre a outra. Por exemplo, processadores RISC tem uma implementação mais
simples, consomem menos energia e fazem uso mais eficiente de seu pipeline e do banco de
registradores. Processadores CISC conseguem manipular, de forma mais eficiente, instruções
complexas. Mas, então, por que não juntar os dois modelos?
85
Pensando nisso e na compatibilidade em relação a modelos anteriores, a família x86 passou a adotar,
desde o Pentium Pro (1995), o modelo híbrido. Esse processador era um CISC dotado de um núcleo
RISC. Na ocasião, o processador contava com decodificadores responsáveis pela conversão de
instruções complexas para sequências de instruções simples. Com isso, introduziu-se, também, a
execução fora de ordem.
No artigo “Arquiteturas Superescalares” (FREITAS, 2016), podemos entender mais sobre as principais
limitações que ocorrem na execução paralela de instruções na arquitetura. Também podemos conhecer
os principais processadores de mercado com arquitetura superescalar, para aprofundar nossos estudos.
Leia o artigo completo:
<http://www.ic.unicamp.br/~rodolfo/Cursos/mo401/2s2005/Trabalho/029043superescalar.pdf>.
4.4.1 Características
A motivação principal para o desenvolvimento de arquiteturas superescalares
consiste na possibilidade de se executar instruções de forma paralela. Para tanto,
são replicadas unidades funcionais, sendo que, cada uma, apresenta o seu próprio
pipeline.
A figura abaixo, ilustra uma implementação de um processador superescalar típico.
4.4.2 Tendências
Como você pode notar, estamos em uma ascensão em relação ao uso de
paralelismo nos computadores. Historicamente, tivemos como ponto de partida, a
introdução do pipeline, que representa um pseudoparalelismo. Na sequência, houve
a incorporação da superescalaridade, adicionando, de fato, o paralelismo para
dentro dos processadores.
Porém, a tendência é que não fiquemos limitados ao paralelismo em nível de
instrução, mas, sim, que possamos ampliar o paralelismo em nível de threads e de
núcleos.
No paralelismo em nível de threads, o processador tem condições de escalonar
threads na ocorrência de conflitos no pipeline. Tratando-se de um escalonamento
em nível de hardware, torna-se muito mais eficiente, se compararmos com o
escalonamento realizado pelo sistema operacional (LEME, 2016).
Por sua vez, o paralelismo em nível de núcleos, incorpora a ideia das máquinas
multiprocessadores. Os vários processadores foram transformados em núcleos –
cada núcleo independente, com suas estruturas de controle e memória cache L1.
Não devemos deixar de destacar a volta da ênfase aos processadores vetoriais.
Uma arquitetura vetorial consiste em um modelo paralelo, dotado de pipeline, do
tipo SIMD
(Single Instruction, Multiple Data, em português, Instrução Única, Múltiplos Dados).
Neste modelo, vários dados são executados por uma única instrução. Como
exemplo, podemos falar das GPUs (Graphics Processing Unit, em português,
Unidade de Processamento Gráfico), no qual os dados a serem processados são
representados por vetores e as instruções são otimizadas para esse tipo de
manipulação.
Por fim, diversas são as pesquisas para explorar outras formas de paralelismo, não
se limitando às abstrações arquiteturais (OLIVEIRA; CAVALCANTE, 2010).
Podemos deixar, por exemplo, uma provocação para sua pesquisa e, por
consequência, para sua formação acadêmica, sugerindo um estudo sobre
paralelismo em nível de aplicações, por exemplo, o paralelismo em nível de dados
(DLP – Data Level Parallelism).
Síntese
Chegamos ao final de mais um capítulo. Esperamos que a sua trajetória tenha sido satisfatória e que o
conteúdo aqui abordado tenha ampliado seus horizontes e conhecimentos. Neste capítulo,
estudamos alguns aspectos físicos da memória interna, assim como pudemos abordar aspectos
inerentes aos módulos de E/S. Pudemos ver, também, aspectos relacionados à execução das
instruções em máquinas RISCs e CISCs e superescalares.
Projeto
UMA NOVA REALIDADE EM PROCESSAMENTO E
ARMAZENAMENTO DE DADOS
Vamos praticar
Com a importância do hardware para proporcionar alto desempenho em sistemas
computacionais, é importante que nesta atividade você seja capaz de retratar o sistema de
entrada e saída, tipos de memórias internas, a nova geração de processamento e
armazenamento quântico e a relação com paralelismo quântico.
O seu texto deverá conter uma lauda e deverá conter uma proposta de análise que discorra
sobre novas tecnologias de processamento, armazenamento e paralelismo quântico.
TARANTOLA, A. Drive quântico guarda dados por 100 vezes mais tempo e quebra recorde. Giz
Modo, São Paulo, 15 jan. 2015. Disponível em: <https://gizmodo.uol.com.br/drive-
quanticohoras>. Acesso em: 13 set. 2019.
UNIVERSIDADE DE SÃO PAULO. Computador Quântico. Ciência Mão, São Paulo, s/d. Disponível
em: <https://www.ime.usp.br/~map/tcc/2018/WagnerJorcuvichV3.pdf>. Acesso em: 13 set.
2019.