RISC versus CISC
Introdução (Histórico)
Durante o final da década de 1970, houve experiências com instruções muito complexas que eram possibilitadas pelo interpretador. Os projetistas tentavam fechar a “lacuna semântica” entre o que as máquinas podiam fazer e o que as linguagens de programação de alto nível demandavam. Quase ninguém pensava em projetar máquinas mais simples, exatamente como agora não há muita pesquisa na área de projeto de planilhas, redes, servidores Web etc. menos poderosos (o que talvez seja lamentável).
Um grupo que se opôs à tendência e tentou incorporar algumas das ideias de Seymour Cray em um minicomputador de alto desempenho foi liderado por John Cocke na IBM. Esse trabalho resultou em um minicomputador denominado 801. Embora a IBM nunca tenha lançado essa máquina no mercado e os resultados tenham sido publicados só muitos anos depois (Radin, 1982), a notícia vazou e outros começaram a investigar arquiteturas semelhantes.
Em 1980, um grupo em Berkeley, liderado por David Patterson e Carlo Séquin, começou a projetar chips para CPUs VLSI que não usavam interpretação (Patterson, 1985; Patterson e Séquin, 1982). Eles cunharam o termo RISC para esse conceito e deram ao seu chip de CPU o nome RISC I CPU, seguido logo depois pelo RISC II. Um pouco mais tarde, em 1981, do outro lado da baía de São Francisco, em Stanford, John Hennessy projetou e fabricou um chip um pouco diferente, que ele chamou de MIPS (Hennessy, 1984). Esses chips evoluíram para produtos de importância comercial, o SPARC e o MIPS, respectivamente.
Esses novos processadores tinham diferenças significativas em relação aos que havia no comércio naquela época. Uma vez que essas novas CPUs não eram compatíveis com os produtos existentes, seus projetistas tinham liberdade para escolher novos conjuntos de instruções que maximizassem o desempenho total do sistema. Embora a ênfase inicial estivesse dirigida a instruções simples, que podiam ser executadas rapidamente, logo se percebeu que projetar instruções que podiam ser emitidas (iniciadas) rapidamente era a chave do bom desempenho. Na verdade, o tempo que uma instrução demorava importava menos do que quantas delas podiam ser iniciadas por segundo.
Na época em que o projeto desses processadores simples estava no início, a característica que chamou a atenção de todos era o número relativamente pequeno de instruções disponíveis, em geral cerca de 50. Esse número era muito menor do que as 200 a 300 de computadores como o VAX da DEC e os grandes mainframes da IBM. De fato, o acrônimo RISC quer dizer Reduced Instruction Set Computer (computador com conjunto de instruções reduzido), em comparação com CISC, que significa Complex Instruction Set Computer (computador com conjunto de instruções complexo), uma referência nada sutil ao VAX que, na época, dominava os departamentos de ciência da computação das universidades. Hoje em dia, poucas pessoas acham que o tamanho do conjunto de instruções seja um assunto importante, mas o nome pegou.
Encurtando a história, seguiu-se uma grande guerra santa, com os defensores do RISC atacando a ordem estabelecida (VAX, Intel, grandes mainframes da IBM). Eles afirmavam que o melhor modo de projetar um computador era ter um pequeno número de instruções simples que executassem em um só ciclo do caminho de dados, ou seja, buscar dois registradores, combiná-los de algum modo (por exemplo, adicionando-os ou fazendo AND) e armazenar o resultado de volta em um registrador. O argumento desses pesquisadores era de que,
mesmo que uma máquina RISC precisasse de quatro ou cinco instruções para fazer o que uma CISC fazia com uma só, se as instruções RISC fossem dez vezes mais rápidas (porque não eram interpretadas), o RISC vencia. Também vale a pena destacar que, naquele tempo, a velocidade de memórias principais tinha alcançado a velocidade de memórias de controle somente de leitura, de modo que a penalidade imposta pela interpretação tinha aumentado demais, o que favorecia muito as máquinas RISC.
Era de imaginar que, dadas as vantagens de desempenho da tecnologia RISC, as máquinas RISC (como a SunUltraSPARC) passariam como rolo compressor sobre as máquinas CISC (tal como a Pentium da Intel) existentes no mercado. Nada disso aconteceu. Por quê?
Antes de tudo, há a questão da compatibilidade e dos bilhões de dólares que as empresas tinham investido em software para a linha Intel. Em segundo lugar, o que era surpreendente, a Intel conseguiu empregar as mesmas ideias mesmo em uma arquitetura CISC. A partir do 486, as CPUs da Intel contêm um núcleo RISC que executa as instruções mais simples (que normalmente são as mais comuns) em um único ciclo do caminho de dados, enquanto interpreta as mais complicadas no modo CISC de sempre. O resultado disso é que as instruções comuns são rápidas e as menos comuns são lentas. Mesmo que essa abordagem híbrida não seja tão rápida quanto um projeto RISC puro, ela resulta em desempenho global competitivo e ainda permite que softwares antigos sejam executados sem modificação.
CISC
CISC ou Complex Instruction Set Computer é uma arquitetura de processadores capaz de executar centenas de instruções complexas diferentes o que a torna extremamente versátil. Exemplos de processadores que utilizam essa arquitetura são os Celeron e a série iX da Intel. Os processadores baseados na computação de conjunto de instruções complexas contêm uma micro-programação, ou seja, um conjunto de códigos de instruções que são gravados no processador, permitindolhe receber as instruções dos programas e executá-las, utilizando as instruções contidas na sua microprogramação. Seria como quebrar estas instruções, já em baixo nível, em diversas instruções mais próximas do hardware (as instruções contidas no microcódigo do processador).
Como característica marcante esta arquitetura contém um conjunto grande de instruções, a maioria deles em um elevado grau de complexidade.
Algumas características dessa arquitetura são:
- Controle microprogramado;
- Modos registrador-registrador, registrador-memória, e memória registrador;
- Múltiplos modos de endereçamento à memória, incluindo indexação (vetores);
- Instruções de largura (tamanho) variável, conforme modo de endereçamento utilizado;
- Instruções requerem múltiplos ciclos de máquina para execução, variando também com o modo de endereçamento;
- Poucos registradores;
- Registradores especializados.
RISC
RISC (acrônimo de Reduced Instruction Set Computer; em português, “Computador com um conjunto reduzido de instruções”) A arquitetura RISC é constituída por um pequeno conjunto de instruções simples que são executadas diretamente pelo hardware, onde não há a intervenção de um interpretador (microcódigo), o que significa que as instruções são executadas em apenas uma micro-instrução (de uma única forma e seguindo um mesmo padrão). As máquinas RISC só se tornaram viáveis devido aos avanços de software otimizado para essa arquitetura, através da utilização de compiladores otimizados e que compensem a simplicidade dessa arquitetura. Existe um conjunto de características que permite uma definição de arquitetura básica RISC, são elas:
- Utilização de apenas uma instrução por ciclo do datapath (ULA, registradores e os barramentos que fazem sua conexão);
- O processo de carregar/armazenar, ou seja, as referências à memória são feitas por instruções especiais de load/store;
- Inexistência de microcódigo, fazendo com que a complexidade esteja no compilador;
- Instruções de formato fixo;
- Conjunto reduzido de instruções, facilitando a organização da UC de modo que esta tenha uma interpretação simples e rápida;
- Utilização de pipeline (é uma técnica de dividir a execução de uma instrução em fases ou estágios, abrindo espaço para execução simultânea de múltiplas instruções);
- Utilização de múltiplos conjuntos de registradores.
Ao contrário dos complexos CISC, os processadores RISC são capazes de executar apenas poucas instruções simples, e justamente por isso que os chips baseados nesta arquitetura são mais simples e muito mais baratos.
Uma outra vantagem dos processadores que utilizam essa arquitetura é o fato de terem um menor número de circuitos internos, permite que se trabalhe com clocks mais altos. Um bom exemplo são os processadores Alpha, que em 97 já operavam a 600 MHz.
Os processadores ARM são RISC mas devido a importância destes processadores no contexto atual (2021) falaremos sobre estes.
ARM
ARM, originalmente Acorn RISC Machine, e depois Advanced RISC Machine, é uma família de arquiteturas RISC desenvolvida pela empresa britânica ARM Holdings. Tais arquiteturas são licenciadas pela ARM para outras empresas, que implementam-nas em seus próprios produtos. A ARM também desenvolve chips que utilizam tal arquitetura e que são licenciados para uso exclusivo de outras empresas em seus produtos.
Microprocessadores com uma arquitetura RISC em geral necessitam de menos transistores do que microprocessadores CISC, como os da arquitetura x86, comumente encontrada em computadores pessoais. Essa característica permite um consumo menor, custo menor, e dissipação de calor menor, o que faz dessa arquitetura algo desejado por fabricantes de dispositivios pequenos, portáteis, e movidos a bateria, como smartphones, laptops, e outros sistemas embarcados. Supercomputadores também podem se beneficiar dessas características, e alguns utilizam arquitetura ARM.
A ARM Holdings publica periodicamente atualizações para suas arquiteturas, todas elas com espaço de endereçamento de 32 bits (apenas chips pré-ARMv3, feitos antes da ARM Holdings ser formada, como no Acorn Archimedes, tinham espaços de endereçamento menores) e aritmética de 32 bits; instruções para chips da ARM possui tamanho fixo de 32 bits, mas versões mais recentes também suportam instruções de tamanho variável para melhorar a densidade de código. Alguns cores também providenciam a execução em hardware de bytecode Java. A arquitetura ARMv8-A, anunciada em Outubro de 2011, suporta ainda endereçamento de 64 bits e aritmética de 64 bits, com instruções de tamanho fixo de 32 bits.
Com 100 bilhões de cores produzidos até 2017, ARM é a arquitetura mais popular em termos de quantidade.
Histórico
Resultado do projeto inovador de um bem sucedido fabricante britânico de computadores chamado Acorn Computer Group. Inicialmente desenvolvido pela Acorn Computers Limited de Cambridge, Inglaterra, entre outubro de 1983 e abril de 1985, foi o primeiro processador RISC desenvolvido para uso comercial. Projeto baseado no processador Berkeley RISC I. O Núcleo ARM se manteve basicamente com o mesmo tamanho durante sua evolução. ARM2 tinha 30,000 transistores, enquanto o ARM6 evoluiu para apenas 35,000. Em 2009 alguns fabricantes de netbooks utilizaram processadores Arm em seus produtos para concorrer com o Atom da Intel.
Em 1985 surgiram os primeiros exemplares do microprocessador ARM1 (Acorn RISC Machine 1) e, no ano seguinte, a versão comercial ARM2. Esses microprocessadores possuíam um barramento de dados de 32 bits e outro de endereços de 26 bits (que permitiam endereçar até 64MB de memória). Incluíam também um conjunto de 16 registradores de 32 bits, sendo um deles destinado ao contador de programa e bits de estado do processador. As versões iniciais dos microprocessadores ARM (ARM2 e ARM3) foram utilizadas nos primeiros computadores RISC pessoais (Archimedes 300, 400 e 500) fabricados pela Acorn.
Em 1990, a Acorn Computer Group, a Apple Computer e a VLSI Technology uniram-se para formar a ARM Limited (Advanced RISC Machines), e em 1991 foi lançada a primeira versão comercial, o ARM6, juntamente com o primeiro microprocessador da ARM, o ARM610. Os principais conceitos por trás da arquitetura ARM são a simplicidade, baixo custo e baixo consumo.
Atualmente, a ARM Limited não fabrica chips, apenas desenvolve o projeto e licencia o uso de suas CPUs (a sua propriedade intelectual) para que outros fabricantes (como Cirrus Logic, STMicroelectronics, NXP, Texas Instruments, Atmel, Samsung, Sharp, Qualcomm, Nvidia, etc) possam produzir ou alterar as CPUs.
- Outubro/1983, a Acorn Computers LTDA desenvolve o primeiro processador ARM.
- 26 de abril de 1985 protótipos do ARM são fabricados pela VLSI Technilogy e são utilizados pela primeira vez em BBC Micros: primeiro processador RISC a ser comercializado.
- 80’s, os ARMs são utilizados nos desktops da Acorn (BBC MAster e Acorn Archimedes).
- 80’s, é criada uma versão estática, o ARM2aS.
- Fim 80’s, visando uma versão totalmente estática, a Apple junta-se a Acorn para desenvolver novas versões do ARM.
- Novembro/1990, a AdvancedRM LTDA é fundada resultante de uma junção da Acorn com a Apple Computer e a VLSI Technology.
- 1991, são lançados os primeiros do ARM6.
- 1995, DEC e ARM lançam o StrongARM. (Intel compra DEC e ganha o StrongARM de “presente”).
- 1998, ARM LTDA é introduzida nas bolsas de Londres e NASDAQ.
- Ao longo dos anos 90, ARM torna-se líder no mercado de processadores embarcados de alto desempenho e baixo consumo de energia.
Atualmente a ARM foi comprada pela NVidia por 40 bilhões de dólares (link).
Características da arquitetura
O padrão RISC do processador permite que estes processadores tenham menos transístores que processadores CISC (x86). Essa abordagem reduz custos, liberação de calor e consumo de energia. Essas são características desejáveis para dispositivos portáteis, como smartphones, laptops, tablets e outros dispositivos embarcados. Uma estrutura mais simples facilita a criação de multi-core CPUs, o que impacta na redução de custos de produção. Os processadores ARM são 90% dos processadores embarcados RISC de 32 bits.
O processador ARM possui sete modos de operação que podem ser intercambiados através do software, interrupções externas e processamento de execuções. Normalmente as aplicações são executadas a nível de usuário. Enquanto o processador esta no modo usuário o programa sendo executado é incapaz de acessar alguns recursos protegidos do sistema ou mudar de modo. Os outros modos além do modo usuário são denominados modos privilegiados. Eles tem acesso completo aos recursos do sistema e podem mudar de modo livremente.
Principais Características
- Arquitetura Load-Store: as instruções somente processarão (soma, subtração, etc) valores que estiverem nos registradores e sempre armazenarão os resultados em algum registrador.
- Instruções fixas de 32 bits de largura (com exceção das instruções Thumb compactas de 16 bits) alinhadas em 4 bytes consecutivos da memória, com execução condicional, com poderosas instruções de carga e armazenamento de múltiplos registradores, capacidade de executar operações de deslocamento e na ULA com uma única instrução executada em um ciclo de clock.
- Formato de instruções de 3 endereços (isto é, os dois registradores operandos e o registrador de resultado são independentemente especificados)
- 16 registradores de 32 bits para uso geral
- Manipulação de periféricos de I/O como dispositivos mapeados na memória com suporte à interrupções.
- Conjunto de instruções aberto a extensões através de coprocessador, incluindo a adição de novos registradores e tipos de dados ao mInodelo do programador.
- Pipelines de 3 a 15[21] estágios.
- Baixo Consumo de energia;
- Tamanho do núcleo reduzido;
Interrupções são definidas por configurações programáveis. FIQ: Fast Interrupt Request, maior prioridade. IRQ: Vectorred Interupt Request, intermediária (0 à 15). Não – Vectored Interupt Request, menor prioridade. As prioridades das interrupções dos diversos dispositivos são ajustadas dinamicamente.
Bloco de conexão de pinos, este bloco permite selecionar pinos do microcontrolador que possuem mais que uma função. registros de configuração controlam os multiplexadores para permitir a conexão entre os pinos e os periféricos no chip. Periféricos devem ser conectados a pinos apropriados antes de serem habilitados e antes de qualquer interrupção relacionada seja ativada. Ativação de qualquer função periférica que não é mapeada para um pino relacionado devem ser consideradas indefinidas.
Propósitos gerais Paralell I/O e Fast I/O: pinos que não são conectados a específicas funções periféricas são controlados pelos registros do GPIO. Pinos podem ser configurados dinamicamente como entrada ou saída. Separar os registros permite configurar ou limpar qualquer número de saídas simultaneamente, o valor do registro de saída pode ser lido novamente, bem como os estados atuais das portas. No paralell e Fast I/O há controle de direção individual dos bits e todas as I/O viram input no reset.
Registradores: Os registradores podem ser utilizados para manipular dados de um byte, de meia palavra (16 bits) ou de uma palavra completa (32 bits). Quando instruções de um byte são utilizadas somente o byte menos significativo é utilizado. Quando instruções de meia palavra são utilizadas somente a palavra menos significativa é utilizada. Ao fazer referência a algum destes registros de propósito específico deve-se sempre levar em consideração qual o modo de operação corrente. Um outro registrador importante é o CPSR (Current Processor Status Register), que carrega informações sobre o estado corrente do processador, inclusive o modo de execução atual.
RISC-V (link)
RISC-V é um conjunto de instruções (ISA) baseado em princípios RISC (acrônimo de Reduced Instruction Set Computing, em português, “Computação de conjunto de instruções reduzidas”). RISC-V é livre para ser usado para qualquer finalidade, permitindo a qualquer pessoa ou empresa projetar e vender chips e software RISC-V sem precisar pagar royalties.
Embora não seja o primeiro conjunto de instruções livre, ele é importante porque foi projetado com foco para dispositivos computadorizados modernos, como computação em nuvem, aparelhos móveis, sistemas embarcados e internet das coisas. O conjunto também possui uma gama considerável de software de suporte, o que evita um problema usual de novos conjuntos de instruções.
O projeto começou em 2010 na Universidade da Califórnia, em Berkeley, mas muitos colaboradores são voluntários ou fazem parte de outra empresas e trabalham no projeto de fora da universidade.
O RISC-V foi projetado para implementações de alto desempenho e baixo consumo de energia. Sendo um conjunto limpo e modular, trabalhando com bases de 32, 64 e 128 bits, com várias opções de extensão em ponto flutuante.
O objetivo dos autores do RISC-V era de fornecer diversos designs de CPU diferentes sob a licença BSD. Tal licença permite que designs baseados em RISC-V possam ser implementados tanto de maneira aberta como proprietária, ao contrário de outros designs como ARM ou MIPS, que cobram taxas pelo uso de suas patentes além de requererem acordos de não-divulgação para liberação de suas respectivas documentações.
O seu caráter aberto também facilita um possível uso educacional, a escrita de compiladores e sistemas operacionais otimizados além da auditoria de segurança da arquitetura.
Desenvolver uma nova arquitetura de CPU requer um esforço conjunto de experts de diversas áreas, o que torna a criação de uma arquitetura aberta viável extremamente complicada. O sucesso do RISC-V foi possível graças ao trabalho de diversos especialistas e voluntários, o que de acordo com seus contribuidores o torna um projeto provindo do esforço comunitário.
Computadores de Placa Única
Computador de placa única é um computador onde todos os componentes electrónicos necessários para o seu funcionamento estão situados numa única placa de circuito impresso. Estes computadores são geralmente usados em sistemas de controle, alarmes, sistemas de medidas, entre outros.
Atualmente os computadores de placa única estão muito demandados em educação e prototipagem. Estes computadores são poderosos (para o custo e tamanho) e versáteis (CPUs genéricas). Abaixo discutiremos sobre os mais famosos.
Arduino
Arduino é uma plataforma de prototipagem eletrônica de hardware livre e de placa única, projetada com um microcontrolador Atmel AVR com suporte de entrada/saída embutido, uma linguagem de programação padrão, a qual tem origem em Wiring, e é essencialmente C/C++. O objetivo do projeto é criar ferramentas que são acessíveis, com baixo custo, flexíveis e fáceis de se usar por principiantes e profissionais. Principalmente para aqueles que não teriam alcance aos controladores mais sofisticados e ferramentas mais complicadas.
Pode ser usado para o desenvolvimento de objetos interativos independentes, ou ainda para ser conectado a um computador hospedeiro. Uma típica placa Arduino é composta por um controlador, algumas linhas de E/S digital e analógica, além de uma interface serial ou USB, para interligar-se ao hospedeiro, que é usado para programá-la e interagi-la em tempo real. A placa em si não possui qualquer recurso de rede, porém é comum combinar um ou mais Arduinos deste modo, usando extensões apropriadas chamadas de shields. A interface do hospedeiro é simples, podendo ser escrita em várias linguagens.
Raspeberry PI
Raspberry Pi é uma série de computadores de placa única do tamanho reduzido, que se conecta a um monitor de computador ou TV, e usa um teclado e um mouse padrão, desenvolvido no Reino Unido pela Fundação Raspberry Pi. Todo o hardware é integrado numa única placa. O principal objetivo é promover o ensino em Ciência da Computação básica em escolas, inclusão e empoderamento social, sendo multiplataforma, considerando as mais consagradas marcas de videogames do mundo é também como parte deste processo uma excelente plataforma, tanto para a indústria quanto para as casas inteligentes e os IOT – Internet das Coisas, marcando e melhorando o nivel de empregabilidade, por tecnologias que nos permitem adentrar na era dos exabytes, da revolucao digital, ad-hoc, promovendo procedimentos únicos, específicos, Inovação tecnológica, que é uma saída resiliente aos entraves sociais, tendo muito mais dados sobre a vida a partir desta fase de nuvens e Big Data, os negócios e as atividades finas, core business, e portanto, com conceitos de qualidade total, competitividade em maior escala, primeiro mundo de um modo mais abrangente, tudo neste fino e poderoso hardware a todas as idades também.
A Fundação Raspberry Pi começou a aceitar pedidos do modelo de US$35 a partir de 29 de fevereiro de 2012.
O Raspberry Pi 1 é baseado em um system on a chip (SoC) Broadcom BCM2835, que inclui um processador ARM1176JZF-S de 700 MHz, GPU VideoCore IV, e 512 MB de memória RAM em sua última revisão. O projeto não inclui uma memória não-volátil – como um disco rígido – mas possui uma entrada de cartão SD para armazenamento de dados.
O Raspberry Pi 3 model B contem um processador 1.2GHz 64-bit quad-core ARMv8 CPU, 1 GB de RAM, Bluetooth 4.1.
Exitem vários “clones” do Raspeberry PI que vale a pena conhecer e estudar.
Nota – A lista anterior contém apenas “clones” open-source, existem computadores de placa única fabricados pela Intel, NVidia, etc que são bem caros.