olá hoje nós temos a quinta aula de organização de computadores depois de conversar sobre as características gerais dos computadores suas classes questões de desempenho e de falar do modelo de economia da arquitetura raiva de deus manda modo de organizar esse computador para que ele possa executar instruções para que ele possa funcionar como um computador programado hoje nós vamos discutir justamente a arquitetura do conjunto de instruções ou seja essas características que permitem que o computador seja programado mas antes da gente falar das características do computador das características do conjunto de instruções é importante nós nos atentarmos
as duas definições a definição do que a organização de um computador e do que é a arquitetura de um computador são dois elementos extremamente importantes que andam juntos mas têm diferenças conceituais a organização de computador ela se relaciona as unidades operacionais e suas interconexões que vão realizar essas especificações arquiteturais portanto quando nós falamos do modelo de forma que tinha cinco elementos entrada sair da memória e um processador dividido em fluxo de dados unidade de controle e que eu tinha um único barramento que ligava o processador ea memória tudo isso está ligado à organização do meu
computador a então todas as quais são os elementos quais são os os elementos contra interligando quais são os como essa interconexão tudo isso caracteriza a organização outro aspecto agora com relação à arquitetura né ela vai estar mais próxima daquilo que é visível programador ou seja quais são as instruções que eu posso executar quanto os beats tem essa instrução e se esse processador de 32 bits e 64 de 16 neco é que o acesso à memória então essas características que que fazem questão importante que o programador que vão afetar o desempenho de um programa tão mais
associadas à arquitetura do computador e é justamente disso que nós vamos discutir hoje é o que caracteriza a arquitetura do meu computador ou mais precisamente a arquitetura do conjunto de instruções do inglês nós temos o termo em seus 17 architect ou isa é uma sigla que aparece com outros significados também no ambiente de computação mas aqui no nosso domínio e já entregues 17 architectour ou a arquitetura do conjunto de instruções e justamente esse conjunto de instruções de maneira simplificada ele vai dizer pra mim qualquer o repertório de instruções de um computador ou seja quais as
instruções que eu posso executar o que eu posso acessar em termos de memória tudo isso caracteriza bom porque isso é importante porque nós temos computadores diferentes nós temos por exemplo no caso da intel se a gente observar temos os 7 5 e 3 voltando mais um tempo pentium 4 863 86 todos esses processadores da intel eles têm características internas diferentes eles vão executar um determinado programa em tempos de execução diferentes mas eles compartilham um mesmo conjunto de instruções eles compartilham a mesma isa essa é uma característica que a intel se propôs a carregar desde os
primeiros computadores a do fim da década final da década de 70 eles procuram garantir essa compatibilidade da arquitetura de instruções do conjunto de instruções então uma vez que eu tenho esses esse código compilado eu consiga executar em diversas plataformas diferentes então por isso que a gente fala diferentes implementações para o mesmo conjunto de instruções as mesmas características para o programador gerar esse código em assembléia mas ele é capaz de rodar em qualquer elemento em qualquer implementação dessa minha arquitetura do conjunto de instruções apesar de existirem muitos computadores diferentes por exemplo arntz a espart para pc
a própria intel essas esse conjunto de instruções ele tem vários elementos que são comuns a gente tem principais elementos aqui são cinco elementos principais que justamente vão caracterizar como funciona esse repertório como função 'essa isa a a idéia é justamente hoje a gente explorar o que significam esses cinco elementos que tipo de impacto e cinco elementos podem ter na nuca nas características que a gente vai ter um conjunto de instruções bom primeiro item aqui é o repertório das operações quanto às operações eu preciso quanto as instruções eu preciso é bom a gente pode começar pelas
instruções aritméticas é preciso saber somar subtrair adicionar a dividir multiplicar a gente tem as instruções lógicas que posso fazer em que posso fazer a operação hora posso fazer a negação né eu tenho as instruções de deslocamento à esquerda deslocamento à direita então todas essas instruções que a gente chama de instruções lógico aritméticas depois outras instruções de movimentação de dados mesmo que eu tenha a uma arquitetura memória memória né eu posso precisar fazer alguma movimentação de dado mais tipicamente as arquiteturas envolvem algum uso de registrador ou de pilha eu preciso ser capaz de tirar um dado
da memória e levar para esses registradores então a gente usa as instruções de loudi história tirar da memória por registrador world e no registrador para memórias instruções de histórico outro conjunto de instruções que a gente tem aqui só as instruções de controle um dos princípios de forma que o programa é executado seqüencialmente mas quando a gente vai programar a gente usa por exemplo condições e e fiel se se for uma igualdade eu executar uma instrução se for diferente um outro conjunto muitas vezes nós cremos lupes né contínuos para repetir um determinada conta para permitir por
exemplo a multiplicação de uma matriz fazemos dois looks de fora então essas interações todas são relacionadas a seqüência do programa ea ou seja o controle do programa então as instruções que desviu que vão mudar a ordem que executando as instruções também são importantes e nós temos podemos agrupar as instruções de controle em dois tipos as instruções incondicionais por exemplo quando existe um salto onde antes a gente associa além do jump tem um retorno desse diante por exemplo a que retorna para o endereço prévio ea gente tem as instruções de desvio condicional por exemplo se uma
igualdade for verdade se o valor for igual a zero eu executo desviu caso contrário o executivo seqüencialmente então esses são todos instruções que entram aqui no nosso repertório a gente pode ainda há instruções associados dispositivos de entrada e saída segundo aspecto importante é os tipos tamanhos dos meus operando os meus dados tá então por exemplo a gente tem arquiteturas hoje de 64 bits há algum tempo atrás depois eram de 32 bits para quem trabalha com sistemas embarcados foi trabalhar com os sistemas embarcados a gente vai ver que alguns positivos são de 8 bits ou 16
bits cada uma dessas plataformas têm um tamanho tipo de palavra então uma arquitetura de 8 bits a minha palavra tem 8 bits na arquitetura de 64 minha palavra tem 64 bits então eu preciso ser capaz de fazer operações todas essas operações do meu repertório inicialmente sobre a palavra da minha arquitetura bom mas não é porque eu tô numa arquitetura de 64 bits que eu não posso querer fazer uma operação em cima de um byte ou em cima de meia palavra então a arquitetura também precisa definir quais são os tipos e tamanhos superando os tipicamente a
gente pode fazer operações combate com o meia palavra ou com a palavra inteira da minha arquitetura é importante também definir neco a gente como é que a gente mapear esses tipos de dados por exemplo as instruções nos tipos de dados das linguagens de alto nível como ser o inteiro enquanto os beats ele tem só depende da minha plataforma então a gente também pode utilizar nas declarações da linguagem de alto nível dizer que o inteiro por exemplo de 16 bits usual 2016 isso não vai fazer diferença eu tenho uma plataforma de 16 32 ou 64 bits
aquele dado vai ter sempre o mesmo tamanho se tratado sempre da mesma forma bom terceiro aspecto que a gente tem é o endereçamento nos operamos então na minha instrução se for uma instrução de soma como é que eu vou fazer essa soma eu vou apontar para um registrador que está os meus alterando seu vou apontar para o endereço da memória eu vou aprontar ditador que tem um endereço de memória onde eu vou ter que carregar operando então a gente tem várias formas que a gente pode acessar os operando e tudo isso é caracterizado pela nossa
arquitetura do conjunto de instruções ela precisa definir quais são os modos de endereçamento e como funcionam esses modos de endereçamento quarto aspecto o formato da instrução então eu preciso definir como é que a unidade de controle do processador vai reconhecer que aquela instrução é uma instrução de soma de movimentação de dados ou uma instrução de controle são tipicamente eu preciso definir um conjunto de bits pro meu código de operação para o code então isso é um dos primeiros componentes que a gente tem aqui no formato da instrução além do aplicou hoje para caracterizar essa minha
instrução eu preciso determinar como é que eu sei quais são os operando se uma instrução de soma eu vou ter dois operando os 93 operamos se eu tiver três operando um destino e duas origens isso tentar explícito eu tenho que ter uma sequência escrito no formato de instrução a gente pode ter uma instrução que tem 2 operando onde o primeiro deles é naturalmente o destino e ambos operando os isso simplifica o formato da minha instrução mas por outro lado a unidade de controle tem que saber entender que aquele mesmo valor vai ser utilizado de duas
formas diferentes como operando e como destino a além disso também é característica do formato de instrução quando os beats e latência ela tem tamanho fixo o tamanho variável para algumas arquiteturas todas as instruções têm por exemplo 32 bits como é o caso do mix que nós vamos conversar em algumas aulas à frente outras arquiteturas como é o caso da intel a instrução tem tamanho variável como existe esse legado essa compatibilidade com as com as várias com as ampliações que a gente teve nas arquiteturas pode ser que as instruções de 8 bits instruções de 16 instruções
de 32 64 então precisa saber lidar a interpretar com esses vários formatos de instrução e finalmente o nosso último aspecto aqui é o armazenamento dos operando os eu posso pegar um operando que está na própria instrução por exemplo uma constante faz parte da instrução eu posso ter um período que está um registrador que está no acumulado por eu posso operando que está na memória então tudo isso tem que ser definido nunca na fritura do meu conjunto de instrução para saber como eu vou fazer essa busca desse operando e esse aspecto está associado também ao endereçamento
e o meu formato de instruções essas essas informações todas são extremamente relacionadas tá e por exemplo no caso do acumulador ele ele já destina onde vai ser armazenado resultado então também preciso determinar onde o armazém no meu resultado das minhas operações tudo isso são características da isa então toda e qualquer criatura vai ter que definir esses aspectos todos a seja ela a textura da intel de 32 bits seja ela o a arquitetura da arm seja ela a futura do mitsubishi não importa com a arquitetura ela tem que definir esses aspectos todos bom e aí então
dependendo de todas essas características a gente tem a arquiteturas com características diferentes uma possibilidade infinita de uma possibilidade muito grande de combinação desses parâmetros para resultar nessas escolhas nessas possibilidades de novo colocando agora em perspectiva a nossa evolução histórica da computação nós tivermos lá os primeiros computadores com o propósito específico programação através de chaves e relês aí na década de 40 veio modelo de economia com o conceito de armazenamento do programa e determinando como é que a gente poderia ter se programa para ser executado a memória é alguma coisa que era cara naquela época e
não era muito grande nós não tínhamos computadores como hoje que tem 8 gb de ram facilmente era muito menor as quantidades naquela época então o código armazenado é o resultado do programa que eu escrever que eu gostaria de armazenar no programa tinha que ser pensado para ser eficiente porque eu tinha pouca memória tinha que se dividir entre dado e instrução então o que fez com que nessa época na década de 50 se tivesse uma abordagem de que as minhas instruções e compactas então a gente é o que a gente vê nessa época é são as
instruções ou o conjunto de instruções de características esq complexo strokes 17 quem queira ou o computador com um conjunto de instrução complexo que quer dizer esse complexo primeiro lugar eu tenho muitas instruções uma infinidade de instruções possíveis não é só soma soma e faz mais alguma coisa depois disso então existe uma combinação muito grande de tipos de instruções instruções com duas funções associadas mas porque associar duas funções é uma mesma instrução justamente porque a memória era cara eu quero que essa instrução ela faça bastante coisa para uma mesma informação que está codificada então por isso
que houve essa motivação para desenvolver esses tipos de instruções complexas trazer na medida do possível uma proximidade das instruções que estavam sendo programadas no meu computador com as instruções como a gente vê nós humanos temos a definição do problema e um conceito importante para permitir a esse uso das instruções cisc foi o conceito de micro micro programação que ele permite que a gente tivesse instruções complexas escritas na memória e que ela fosse executada ou micro programada para ser executado no nosso processador ou então falando um pouquinho mais disse fique aqui nós temos três exemplos de
instrução a primeira dela caso com peres a própria ou seja duas instruções a primeira vou comparar dois operamos dependendo do mês esse é o resultado de comparação eu vou trocar esses operamos aqui por exemplo a rtr eu vou retornar e restaura códigos então essas instruções todas que a gente tem aqui esses três exemplos eu estou fazendo duas instruções com uma única qualificação então quando a gente pensa nas características de projeto dos isso que a gente tem o primeiro formato de 2 operando mais comum eu estou simplificando a minha instrução então por exemplo vou somar o
conteúdo do registrador cx com um determinado endereço de mora e armazenado no registrador se x segundo aspecto tenho vários modos de combinar essas instruções eu posso trabalhar com dois registradores como operando registadora memória que é exemplo ou memória registrador então não importa ordem poderia ter aqui um endereço de memória como define como operando então essa grande flexibilidade nos modos é uma característica das organizações cisc a gente tem múltiplos modos de endereçamento também associado a esses múltiplos modos né ea própria maneira como você está a memória eu posso simplesmente acessar o endereço de memória específico eu
posso acessar o endereço de memória um registrador para pegar o endereço que eu quero ler depois então essa combinação essa flexibilidade permite com que a gente se torna essas instruções na mais complexas bom se eu tenho múltiplos modos de instrução múltiplas combinações isso vai fazer com que as instituições tenham largura variável eu tenho instruções podem ser menores ou maiores eu posso ter dois operando os trens operando os endereços memória endereço do ditador tudo isso leva a uma instrução com largura variável com essas instruções são complexas por exemplo posso ter duas instruções a ser especificada por
uma única instrução isso vai fazer com que eu preciso de múltiplos ciclos de relógio para executar essa instrução então programador é uma única instrução mas pro meu hardware processador eu vou ter múltiplas múltiplas instruções serão executadas naquele ciclo isso faz com que eu tenho um tempo de execução maior para mandar de instrução e último aspecto que o hardware possui poucos registradores até porque eu tenho bastante flexibilidade com a maneira de fazer esse endereçamento bom em contraposição a esse caminho todo de de abordagem de conjunto de instruções disse que surgiu na década de 50 em meados
da década de 70 mais forte no começo da década de 80 a gente teve um outro movimento de projeto que tratava de um conjunto reduzido de instruções ou seja o risk o rei dos números tem sexo sete campi ou um conjunto de instruções reduzido reduzido traz várias implicações tá então primeiro eu tenho - instruções têm instruções mais simples então cabe é o programador ou a compilador usar mais instruções para atingir essa tarefa de alto nível que foi especial diferente do que acontecia no cisc né a a todas as instruções em tamanho fixo em uma arquitetura
de 32 bits todas as minhas instruções risco e vão ter exatamente 32 bits isso simplifica o meu projeto do rádio simplifica o meu processo de decodificação porque eu sempre vou trabalhar com o tamanho da minha palavra para instrução eu tenho poucos modos de endereçamento porque eu tenho poucos modos de endereçamento porque a instrução para ter poucos formatos de instrução para ter essa previsibilidade essa simplicidade no processo eu preciso conseguir capturar esses modos todos de endereçamento dentro desses poucos tipos de instrução que eu tenho há então a simplicidade desse conjunto de instrução reduzido vai fazer com
que o meu rádio seja mais simples e vai sob alguns aspectos têm menos flexibilidade do que a gente tem uma organização científica num computador cisc bom mas se tudo isso aqui é mais estável mais simples mais regular isso vai permitir que eu tenho um desempenho melhor no hardware a unidade de controle é feita toda errada e ela consegue captar muitas vezes com as instruções serão executadas num único ciclo de relógio então apesar do ter mais instruções para o mesmo programa numa organização no computador risk eu vou precisar posso eu posso precisar de menos tempo do
que num computador cisc no computador se eu tenho poucas instruções mas que duram muito no risco que eu posso ter muitas instruções mas com um ciclo de execução é importante a gente lembrar o número de instruções não há uma métrica para desempenho preciso saber com que o meu tempo de ciclo são justamente essa contra a posição de risk se com relação ao número de instruções ea o tem um número de ciclos para executar cada instituição pode fazer com que a gente tenha um desempenho parecido sou diferentes dependendo de como foi esse projeto do rápido bom
pra gente contextualizar aqui há como eu falei pra você é isso aqui tem uma vários projetos risqué a ira da década de 80 que eu gostaria de estar aqui pra vocês é que esse projeto da década de 80 o risco aqui ele dá justamente início a linhagem do arm do processador que a gente tem bastante utilizado em domínio de sistemas embarcados hoje aqui aparece também o spark e outros processadores que aparecem no uso de servidores bom que a gente tem implementado hoje né nem tanto risco nem tanto se que a gente já tem alguns computadores
risk sendo implementados sendo utilizados como foi o caso do alho mas por exemplo a própria intel que começou com essa característica de cisc hoje ela não apesar do conjunto de instruções para esses que a implementação não é completamente cisc porquê porque a gente teve avanços na tecnologia nas memórias tem muito mais capacidade então não tem essa restrição que a gente tem com relação ao espaço que o código vai gerar né e por outro lado a arquitetura risc permitir uma série de evoluções com relação às estratégias de desempenho que levaram à o uso dessas técnicas dentro
da sua arquitetura risc e não dentro dessas organizações micro programadas então não tem mais essa distinção clara desses dois da dança a mudança dos requisitos ea essa evolução das técnicas que a gente teve para o projeto de arquitetura que acabaram sendo levadas para os dois ambientes a hicks que eu fiz aqui a gente tem vários elementos para considerar gostaria de destacar que o 486 comuns um cisc de 32 bits pente então a gente tem aqui as arquiteturas da intel nessa região e aqui a gente vê o arm como um exemplo clássico de esqui e aí
como referência a gente tem um capítulo 2 do livro do paterson do iene se o capítulo 10 do livro do estado