Os leitores que trabalham com dispositivos que processam dados já devem ter ouvido falar em RISC e CISC. Se ainda não sabem o que e a sua importância na escolha, este artigo de1997, que ainda é válido pode lhe ensinar muito.

Levando em conta que uma boa parte de nossos leitores não está suficientemente familiarizada com a arquitetura dos computadores e a própria

Eletrônica Digital e que muitos estudantes acompanham nossos artigos procuraremos ser bastante didáticos em nossas explicações.

Isso não significa, porém que nosso artigo não seja útil para leitores com formação mais avançadas.

Lembramos que ninguém sabe tudo sobre um determinado assunto e mesmo um artigo com finalidade didática ou que ensine algo que pensamos dominar totalmente pode trazer conhecimentos novos e reciclar velhos.

Assim, este artigo também é dirigido aos especialistas que desejam reciclar seus conhecimentos ou ainda sintam falta de algo que talvez não lhes tenha sido ensinado quando estudaram o assunto.

 

A ARQUITETURA DOS COMPUTADORES

Toda atividade de processamento de um computador é feita pela CPU que consiste num elemento de hardware incluído no circuito do microprocessador.

A finalidade da CPU é realizar operações aritméticas, operações lógicas e fazer o teste de sinal de um valor.

Na figura 1 mostramos o diagrama de blocos de uma CPU típica como as encontradas nos microprocessadores.

 

Figura 1 – Diagrama de blocos de um microprocessador típico
Figura 1 – Diagrama de blocos de um microprocessador típico

 

Na CPU também encontramos circuitos de controle responsáveis pelo funcionamento sincronizado de todos os dispositivos usados no computador.

Assim, podemos dizer que os circuitos de controle da CPU têm por finalidade buscar e transferir para a CPU a instrução de máquina a ser executada, interpretar a instrução de modo a identificar qual operação deve ser feita e produzir os sinais de sincronismo e controle que a execução da operação exige.

Veja então que chegamos a uma palavra-chave: instrução.

O computador realiza operações ordenadas segundo um programa, conforme aquilo que desejamos que ele faça.

Estas operações ordenadas são denominadas instruções.

 

A INSTRUÇÃO DE MÁQUINA

O termo instrução foi usado pela primeira vez de uma forma mais específica para caracterizar o funcionamento de um computador por John von Newmann em 1945 a partir dos seguintes enunciados que definiam a operacionalidade de um computador:

Para ser operacional um computador deve: j

a) Fazer o armazenamento prévio de um programa na forma de instruções sequenciais, numa área de memória principal.

b) Executar as instruções uma a uma em sequência, usando para isso a CPU. Após a execução de cada instrução, a seguinte deve ser procurada numa memória, assim como os dados que serão utilizados por ela.

c) Ter a possibilidade de fazer alterações na sequência de execução das instruções através de uma outra instrução apropriada capaz de determinar o desvio da sequência.

d) Deve ser capaz de manter ou alterar a sequência da execução do programa.

Quando os fabricantes de microprocessadores projetam uma nova unidade, eles estabelecem algumas características básicas que determinarão o que a máquina fará e onde será usada.

 

Uma dessas características, muito importante, é o formato, tipo de quantidade de instruções de máquina que podem ser executadas pela CPU.

O conjunto de instruções que cada CPU pode executar é denominado em inglês lnstruction Set.

Em português é comum a utilização do termo traduzido pela metade: "Set de instruções" ou ainda “conjunto de instruções”.

Veja que as instruções de máquina que caracterizam uma CPU de um microprocessador podem ser diretamente interpretadas pelos circuitos sendo uma característica de cada tipo.

 

INSTRUÇÕES E COMANDOS

Quando um microprocessador é usado num microcomputador para realizar algum tipo de trabalho como, por exemplo, rodar um programa de contabilidade, ele opera por comandos que nada mais são do que os equivalentes as instruções.

Esses comandos aparecem nas linguagens de alto nível como o Pascal, C, Basic, etc. e na realidade não podem ser interpretados diretamente pelos circuitos do microprocessador.

Estes comandos precisam ser convertidos ou traduzidos em instruções de máquina num processo denominado compilação ou interpretação.

Isso significa que, para cada operação que "mandamos" o computador fazer, dependendo de sua complexidade, diversas instruções precisam ser executadas pela CPU.

Por exemplo, se desejamos fazer o cálculo X = A x B – C + D, este simples

comando, na verdade precisa ser transformado em três instruções que sao:

1. Fazer a multiplicação do valor armazenado em A pelo valor armazenado em B. O resultado deve ser armazenado em X.

2. Subtrair o valor armazenado em C do valor armazenado em X e guardar o resultado em X (apagando o que estava antes).

3. Somar o valor armazenado em X com o valor armazenado em D e guardar o valor final em X como resultado do comando.

 

 

QUANTIDADE DE INSTRUÇÕES

É lógico que poderíamos pensar que quanto mais tipos diferentes de instruções um microprocessador for capaz de executar, melhor ele será.

As memórias são dispositivos lentos, e muito do que se consegue ganhar em velocidade de processamento é perdido no acesso aos bancos de dados.

Nos primeiros microcomputadores as instruções básicas que a CPU podia executar eram simples como:

- Somar dois valores

- Subtrair dois valores

- Realizar uma operação lógica do tipo AND, NAND, OR ou NOR

Com o tempo, entretanto, exigência de máquinas cada vez mais poderosas, circuitos para a execução de instruções cada vez mais complexas foram agregados ao chip, fazendo crescer o "set de instruções".

É claro que, ter um microprocessador mais poderoso é sempre muito interessante para os projetistas de computadores, no entanto existe um problema a ser considerado: os circuitos que realizam as instruções específicas devem ser fabricados no próprio chip e quanto maior for sua complexidade ou a complexidade da instrução que deve ser executada, mais espaço eles ocupam.

Chega então o momento em que passamos a ter um set de instruções tão grande que passa a afetar o desempenho ou a possibilidade de se incrementar outras funções importantes do mesmo chip como os registradores, os circuitos de controle, etc.

Será que uma grande quantidade de instruções é realmente importante para o desempenho de um computador?

 

 

RISC ou CISC

O laboratório da IBM fez uma análise de como as instruções estavam sendo utilizadas pelos computadores nos diversos tipos de aplicações e o que descobriram foi bastante interessante.

Verificou-se, por exemplo, que para um computador com um microprocessador usando um set com 200 instruções, a maioria do processamento fazia uso de apenas umas 10 delas.

Existia assim urna grande quantidade de instruções muito pouco usadas e às vezes até mesmo se executadas uma única vez num longo programa.

E, mais do que isso: verificou-se que as instruções não executadas poderiam ser implementadas com a utilização das instruções básicas mais usadas.

Por exemplo, você não precisa agregar uma instrução específica para extrair a raiz quadrada de um valor: você pode encontrar a raiz quadrada deste valor, usando a multiplicação e a comparação um certo número de vezes.

É como fazemos "de cabeça", quando queremos encontrar a raiz de um número: experimentamos um valor e multiplicamos por ele mesmo.

Se o valor ultrapassar o número desejado, experimentamos um valor menor, e se não o alcançar, experimentamos um valor maior.

Com este procedimento executado algumas vezes podemos encontrar a raiz desejada.

Em outras palavras, usando menos instruções, o microprocessador não perderia sua capacidade de processamento ou de realização de certas operações, pois elas poderiam ser facilmente substituídas por um procedimento externo usando as instruções existentes.

Para diferenciar os computadores com set de instruções mais complexos ou Complex lnstruction Set Computer (em inglês) que corresponde à sigla CISC, John Cocke da IBM anunciou uma nova arquitetura com menos instruções ou com um set de instruções reduzido, em inglês, Reduced lnstruction Set Computer resultando na conhecida sigla RISC.

 

 

AS VANTAGENS DO RISC

Conforme vimos todo o funcionamento do microprocessador se baseia na execução de instruções.

Mas as próprias instruções não consistem numa única operação da CPU. Cada instrução envolve uma série de pequenos procedimentos ou etapas denominados microcódigos.

Estes microcódigos podem ser usados para executar diversas instruções diferentes e um microprocessador bem projetado tira o máximo proveito do seu desempenho utilizando microcódigos bons.

A ideia básica do microcódigo vem de Maurice Wilkes da Universidade de

Cambridge e consiste na colocação de um microprocessador de uma espécie de camada inferior que executa estas instruções secundárias de forma invisível.

É como se existisse dentro do microprocessador um nanoprocessador, permitindo que o chip seja projetado de modo independente das instruções que deseja executar.

Isso significa também a possibilidade de alterar o microcódigo mesmo depois de elaborado o projeto do microprocessador, o que é muito mais fácil para corrigir um erro do que se o próprio microprocessador tivesse de ser reprojetado.

No entanto, a desvantagem do uso do microcódigo está na diminuição de desempenho causada pela existência de um segundo microprocessador dentro do circuito do primeiro.

A transferência de sinais de um para outro significa mais etapas e isso diminui a velocidade de execução das instruções.

Veja, entretanto, que voltando ao RISC e CISC, não podemos definir exatamente um limite para a quantidade de instruções de um set de microprocessador que indique a passagem de RISC para ClSC.

Isso acontece não apenas pelo fato de haver uma quantidade reduzida de instruções que caracterize este tipo de microprocessador, mas sim a maneira como elas são executadas, ou seja, a eliminação do microcódigo, o aumento da agilização no uso das instruções mais usadas e um relacionamento mais estreito entre a máquina e o projeto otimizado do compilador.

Outra característica da utilização do RISC está no fato de que cada instrução pode ser projetada para realizar uma única função e todas operam de modo mais uniforme trabalhando de forma semelhante.