sábado, 14 de maio de 2011

EVOLUÇÃO E ARQUITETURAS DOS COMPUTADORES

ArquiteturaNeste artigo iremos estudar os conceitos fundamentais de arquitetura, a evolução, o padrão proposto por Von Newmann, histórica dos computadores. Fazendo uma apresentação da técnica de maquinas multiniveis. 

Conceitos Fundamentais de Arquitetura dos Computadores

Computador: Um computador é uma máquina composta de um conjunto de partes eletrônicas e eletromecânicas, com capacidade de coletar, armazenar e manipular dados, além de fornecer informações, tudo isso de forma automática.

Instrução: Operação que realiza algum processamento básico de informação.

Instruções de Máquina: “Instruções que o computador é capaz de reconhecer e executar, para o qual todos os programas devem ser convertidos antes que eles possam ser executados”.
-          Em geral não são muito complicadas.
-          Exemplos:
o   “Somar dois números”
o   “Verificar se um número é zero”
o   “Mover um dado de uma parte da memória para a outra”

Linguagem de Programação: Conjunto de instruções associadas a uma sintaxe e uma semântica específicas.

Linguagem de Máquina: “Linguagem que torna possível as pessoas se comunicarem com o computador, composta pelas instruções primitivas de máquina”.

-          Quanto mais complexa a linguagem e, portanto as instruções, mais complicados são os circuitos eletrônicos para implementá-las.
-          Quanto mais simples a linguagem, mais difícil é a sua utilização.

Programa: “É uma seqüência de instruções que descrevem como executar uma determinada tarefa”.

Tradução: É o método pelo qual um programa escrito numa linguagem L2 é substituído por outro programa escrito em L1, então executado pela máquina M1, cuja linguagem de máquina é L1. Toma-se o programa L2 e substitui-se cada instrução pela correspondente L1. O resultado é um programa totalmente escrito em L1.

Interpretação: É o método pelo qual um programa escrito em L1 executa cada instrução do programa escrito em L2, através de uma seqüência de instruções L1 equivalentes. Escreve-se um programa em L1 cujas entradas são as instruções L2, tomadas uma por uma e imediatamente executadas. Não existe a criação de um novo programa em todo em L1.

Máquina Virtual: É um computador hipotético de linguagem de máquina de um nível mais elevado do que a linguagem inerente do computador.

Arquitetura de Computadores:

                         Há várias definições para o termo “arquitetura de computadores”:

                         É a estrutura e comportamento de computadores digitais (John P. Hayes. Computador Arquitetura e Organização.)

                         O conjunto de tipos de dados, operações e características dos diversos níveis de projeto de um computador (Andrew S. Tanenbaum. Organização Estruturada de Computadores.)

                         A Arquitetura de Computadores trata do comportamento funcional de um sistema computacional.

Por que estudar Arquitetura de Computadores?

Quem quiser trabalhar em áreas afins...

-          Arquitetura de computadores
-          Sistemas operacionais
-          Sistemas paralelos e distribuídos
-          Projeto e análise de sistemas
Quem quiser conhecer os sistemas que estarão no mercado neste século
Quem desenvolve sistemas “afinar” o software para características específicas de uma arquitetura

Máquina Multinível


Para aproximar os seres humanos da máquina, é usada uma divisão em camadas das arquiteturas de computadores. Assim, quanto mais camadas tiver uma arquitetura, mais próxima da linguagem humana será a linguagem de alto nível do computador. Veja na ilustração a seguir:
 
Nível 0 - de Lógica Digital 
 
Neste nível encontra-se a descrição da máquina como uma malha de portas lógicas interconectadas. Subconjuntos destas portas lógicas definem dispositivos lógicos combinacionais e seqüenciais, que podem ser formalmente descritos através da álgebra booleana. Neste nível não existe o conceito de programa como uma seqüência de instruções.
 
Nível 1 - Nível de Microprogramação Microarquitetura

                          
Neste nível encontram-se dispositivos e recursos, tais como, ULAs, registradores, decodificadores, multiplexadores, vias de dados, etc. Cada um destes dispositivos e recursos é capaz de executar um número limitado de operações, definidas por sinais de controle. O nível de microprogramação já suporta o conceito de programa (microprograma) como uma seqüência instruções a serem executadas. Pode-se dizer também que o nível de microprogramação oferece uma visão detalhada do processador/microprocessador (microarquitetura ou caminho de dados).

Nível 2 - Máquina Convencional/ Conjunto de Instruções


Neste nível existe o que normalmente conhecemos como linguagem de máquina. Ou seja, para cada microprocessador, este nível define uma ou mais máquinas virtuais, cuja linguagem é interpretada por um ou mais microprogramas.

Para se ter uma idéia mais clara, quando um fabricante define a instrução de nível 2 ADD R, que adiciona o conteúdo do registrador R ao conteúdo de um acumulador (default), nada é especificado sobre a estrutura de hardware, ou a seqüência de microoperações capaz de executa-la. O microprograma, por sua vez, é inteira mente baseado nestas informação.

O nível de máquina convencional oferece uma visão da macroarquitetura da máquina (interação do processador/microprocessador com barramentos externos, unidades de memória, dispositivos de I/O, etc.).

Nível 3 – Nível de Sistema Operacional


 Este nível é a fronteira entre o hardware e o software. O sistema operacional, normalmente, assume as funções de gerenciar os recursos de hardware e oferecer uma interface simplificada. Os usuários deste nível podem ser programas do nível 4 ou usuários humanos.

Nível 4 - Nível de Linguagem de Montagem


Este é o primeiro nível desenvolvido para usuários (programadores) comuns (aqueles que simplesmente traduzem a solução de problema em programas). O nível 4, ao contrário dos níveis 1, 2 e 3, oferecem linguagens orientadas a utilização humana, constituídas de palavras e mnemônicos, que permitem uma compreensão mais simbólica dos problemas tratados. Outra diferença básica entre os níveis 1, 2 e 3, de um lado, e os níveis 4 e 5, de outro, é que, estes últimos, são normalmente suportados por tradução, enquanto que os demais são normalmente suportados por interpretação.

Nível 5 - Nível de linguagem de programação


Não há um nome de aceitação gera para este nível, pode ser chamado, com e o faz Tanenbaum, de "nível de linguagem orientada para problemas", ou qualquer outro nome que indique que este é um nível de linguagem voltada para o usuário final. Neste nível a máquina virtual oferecida é suficientemente abstrata para que possa ser utilizada por qualquer programador com conhecimentos razoáveis em algoritmos, estruturas e na linguagem disponível a este nível. Bons exemplos para este nível de máquina virtual são as ditas linguagens de alto nível. Para estas linguagens, tais como, C, C++, java, pascal, FORTRAN, etc. A máquina virtual neste nível é, como dito anteriormente, suportada por tradução, através dos compiladores destas linguagens.


Os computadores atuais contam com esses níveis citados, embora alguns autores já defendam que exista um sexto nível, porém isso ainda não se configura como uma realidade, visto que um sexto nível implicaria que estes equipamentos seriam tão fáceis de programar quanto um eletrodoméstico qualquer. Entretanto, sabemos que muitos usuários ainda não conseguem usufruir nem de metade das funcionalidades de seus eletro-eletrônicos de uso doméstico.
 
Máquinas von Neumann


O modelo (ou arquitetura) de von Neumann foi concebido a partir de 1946, quando John von Neumann, matemático húngaro e sua equipe desenvolveram um novo projeto de “computador de programa armazenado”, conhecido como IAS(Princeton Institute for Advanced Studies). O IAS, concluído em 1952, constitui os princípios de funcionamento de todos os computadores de propósito geral e foi largamente difundido, influenciando muitos projetos subseqüentes de outras máquinas.

Ainda hoje, a maior parte dos computadores é concebida tendo, como idéia fundamental, os princípios desta arquitetura. Suas principais características são:

-          Possuir uma Unidade de Processamento Central (CPU ou UCP), constituída de três blocos principais:
  • Unidade de Controle (UC), responsável por determinar o seqüenciamento das instruções a serem executadas por meio de sinais de controle;
  • Unidade Logico-Aritmética (ALU), para a execução de operações lógicas e aritméticas;
  • Registrador Contador de Programa (PC), dedicados ao armazenamento dos operandos e dos resultados das operações, indicam a posição da instrução a executar as instruções dos programas armazenadas de maneira seqüencial, facilitando a busca;
-          Unidade de armazenamento central (Memória), na qual são guardados programas e dados, de forma compartilhada;
-          Existência de um único barramento do sistema, o qual deve ser usado de forma compartilhada para a transferência de dados e instruções entre os diversos blocos.

Dentre todas as características supracitadas, as duas últimas resultam em restrições severas para a tentativa de aumento de desempenho de computadores baseados no modelo de von Neumann. Levando-se em conta que os tempos de execução das instruções que envolvem apenas operações internas na CPU são muito menores do que o tempo necessário para transferências entre a memória e CPU, o fato de instruções e dados utilizarem o mesmo caminho para serem transferidos da memória principal para a CPU limita a possibilidade de exploração do paralelismo entre operações. Este problema é comumente referido como gargalo do modelo de Von Neumann.

Durante sua operação, a execução de um programa é uma seqüência de ciclos de máquina von Neumann, compostos 2 subciclos:

1. Busca da instrução (fetch): transfere instrução da posição de memória apontada por PC para a CPU.
2. Execução da instrução: a unidade de controle decodifica a instrução e gerencia os passos para sua execução pela ALU.

O computador IAS tinha um total de 21 instruções que podem ser agrupadas como a seguir:

-          Transferência de dados: os dados são transferidos entre a memória e os registradores da ULA ou entre dois registradores da ULA.
-          Desvio incondicional: normalmente a unidade de controle executa as instruções na seqüência em que se encontram na memória. Essa seqüência de instruções pode ser alterada por uma instrução de desvio. Isto é usado para executar seqüências de instruções repetidamente.
-          Desvio condicional: o desvio é efetuado dependendo do teste de uma condição, o que permite a introdução de pontos de decisão.
-          Aritmética: operações executadas pela ULA.
-          Alteração de endereço: possibilita calcular endereços, utilizando a ULA, para então inseri-los em instruções armazenadas na memória. Isto permite ao programa uma considerável – flexibilidade de endereçamento.

Problemas com a Arquitetura de Von Neumann:

-          Há apenas um barramento de dados e um de endereço.
-          As Instruções e os dados ocupam o mesmo endereçamento de memória.
-          As Instruções e os dados trafegam pelo mesmo barramento (barramento de Dados).