ARQUITETURA DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br - Aula 1 ARQUITETURA DE COMPUTADORES Em arquitetura de computadores serão estudados aspectos da estrutura e do funcionamento dos computadores. O objetivo é apresentar de forma clara e abrangente a natureza e as características dos sistemas de computação modernos. O grande problema que encontramos nesta disciplina é acompanhar as novas tecnologias que vem surgindo e se aperfeiçoando dia-a-dia. 1. INTRODUÇÃO Um sistema de computação consiste em um conjunto de componentes interrelacionados, por isso é mais fácil entender o funcionamento dos computadores se o estudarmos de forma estruturada, de acordo com sua estrutura hierárquica. Do ponto de vista da arquitetura é importante conhecer os atributos que são visíveis para um programador em linguagem de máquina, e do ponto de vista da organização as unidades operacionais e suas interconexões. Neste sentido, o conceito de computador digital é que norteará todo o estudo da arquitetura e organização dos computadores. Computador digital é uma máquina que pode resolver problemas executando uma série de instruções que lhe são fornecidas (programas). Partindo do princípio que o computador é um equipamento que não pode resolver problemas sem que haja instruções para tal é preciso que haja recursos de hardware ou de software para que o computador adote determinado comportamento. As instruções fornecidas, ou o programa, é um conjunto de instruções que descreve como o computador realizará tal tarefa. Um exemplo perfeito disso é um robô, que realiza somente um conjunto de instruções previamente estabelecidas. Ainda neste prisma, é importante ressaltar que o computador não é capaz de entender nossa linguagem de instruções, nem mesmo aquelas linguagem que usamos para programar (Java, Pascal, C, C++, etc). É necessário que tais instruções, escritas em linguagens de programação, sejam traduzidas para uma linguagem conhecida pela máquina, denominada linguagem de máquina. A Linguagem de máquina é um conjunto de instruções muito básicas e simples implementadas pelos projetistas a fim de dar funcionalidade ao computador. Devido a sua simplicidade, sua utilização é difícil e tediosa. A linguagem de máquina (binária - baixo nível) está muito distante de uma linguagem natural (humana - alto nível). Devido a esta dificuldade foi que surgiu a proposta de uma maneira estruturada de organizar os computadores, denominada Organização Estruturada de Computadores. Os circuitos de um computador (Hardware) reconhecem e executam um conjunto limitado e simples de instruções (linguagem de máquina - binária), como por exemplo, a soma, comparação, transferência de dados de uma parte da memória para outra. 1 ARQUITETURA DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br As instruções da linguagem de máquina devem: - Ser simples; - Ser compatível com o uso da máquina; - Ser compatível com a performance requerida; - Ter custo e complexidade da eletrônica reduzida (aplicação). 2. LINGUAGENS, NÍVEIS E MÁQUINAS VIRTUAIS Supondo a existência das linguagens: L1: linguagem natural, do usuário (alto nível e complexa) L0: linguagem da máquina (baixo nível e simples) Um questionamento a ser respondido é como compatibilizar L1 com L0? Existem duas soluções: - Usar um tradutor, ou - Usar um interpretador 2.1. Tradutor - Cada instrução de L1 é substituída por um conjunto de instruções equivalentes de L0; Assim, o processador executa o programa em L0; Todo programa em L0 é carregado em memória e é executado; O Programa pode ser traduzido uma única vez e executado várias vezes. 2.2. Interpretador - Cada instrução de L1 é substituída por um conjunto de instruções equivalentes de L0; - O Processador executa instrução de L1 (transformada para L0) antes de executar a próxima instrução; - Cada instrução de L1, transformada para L0, é carregada na memória e executada; - Não é criado um programa em L0; - Programa deve ser novamente interpretado para ser executado. No entanto, é possível utilizar uma metodologia híbrida: tradutor + interpretador. Ao invés de pensar em tradução ou interpretação, pode-se imaginar a existência de um computador hipotético, ou de uma máquina virtual M1, cuja linguagem de máquina seja L1 (e uma máquina real M0 com linguagem L0). Os programas poderiam ser escritos em L1, para a máquina M1 e: 1. Serem executados diretamente em M1, se esta máquina fosse de custo de construção baixo; ou 2. Serem traduzidos ou interpretados para L0 e executados em M0; 2 ARQUITETURA DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br Na prática, se implementa a solução 2. As pessoas escrevem programas para máquinas virtuais como se elas realmente existissem. Muitos níveis de máquinas virtuais podem ser implementados. Cada linguagem usa a sua linguagem antecessora como base, de modo que um computador que use essa técnica pode ser visto como um conjunto de camadas ou níveis, um em cima do outro, como mostra a figura que se segue. Figura 1- Máquina Multinível 3. MÁQUINAS MULTINÍVEIS CONTEMPORÂNEAS A grande maioria dos computadores modernos é formada por dois ou mais níveis. A Figura 2 mostra o esquema de um computador com seus níveis: 3 ARQUITETURA DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br Figura 2 - Máquina Multiníveis (Níveis) O método por meio do qual cada nível é suportado aparece indicado abaixo do nível (junto com o nome do nível que o suporta)1. 3.1. Nível 0: Nível da Lógica Digital Este é o Nível mais baixo da estrutura. Os objetos de interesse são conhecidos como portas lógicas, onde cada porta lógica tem uma ou mais entradas digitais (0 ou 1) e calculam funções lógicas simples sobre essas entradas. Embora construídas com componentes analógicos, como transistores, as portas podem ser modeladas com precisão como dispositivos digitais. Cada porta tem uma ou mais entradas digitais (sinais que representam O ou 1) e computa como saída alguma função simples dessas entradas, como E (AND) ou OU (OR). Cada porta é composta de, no máximo, um conjunto de transistores. Um pequeno número de portas pode ser combinado para formar uma memória de 1 bit, que pode armazenar um 0 ou um 1. As memórias de 1 bit podem ser combinadas em grupos de, por exemplo, 16, 32 ou 64 para formar registradores. Um registrador pode conter de um único número binário até algum valor máximo. Portas também podem ser combinadas para formar o próprio mecanismo principal de computação. 1 Tanenbaum, 2001 4 ARQUITETURA DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br 3.2. Nível 1: Nível da Microarquitetura Normalmente, um conjunto de 8 a 32 registradores que formam uma memória local e um circuito denominado ALU (Arithmetic Logic Unit), ou ULA (Unidade Lógica e Aritmética), que é capaz de executar operações aritméticas simples. Os registradores são conectados à ALU para formar um caminho de dados através do qual os dados transitam. A operação básica do caminho de dados consiste em selecionar um ou dois registradores, fazendo com que a ALU efetue algo com eles (por exemplo, some-os) e armazene o resultado em algum registrador. Em algumas máquinas a operação do caminho de dados é controlada por um programa denominado microprograma2. Em outras, ela é controlada diretamente por hardware. No princípio este nível era denominado “nível de microprogramação” porque, no passado, ele era quase sempre um interpretador de software. Atualmente o caminho de dados costuma ser, de modo parcial, controlado diretamente por hardware. Em máquinas nas quais o caminho de dados é controlado por software, o microprograma é um interpretador para as instruções no nível 2. Ele busca, examina e executa instruções uma por uma, usando o caminho de dados para fazê-lo. Por exemplo, no caso de uma instrução ADD (SOME), a instrução seria buscada, seus operandos, localizados e trazidos para dentro do registrador, a soma seria calculada pela ALU e, por fim, o resultado seria enviado de volta ao lugar a que pertence. Em uma máquina com controle incorporado do caminho de dados, ocorreriam etapas semelhantes, mas sem um programa explícito armazenado para controlar a interpretação das instruções do nível 2. 3.3. Nível 2: Nível da Arquitetura do Conjunto de Instruções ( nível ISA - Instruction Set Architeture) É um nível definido pelo fabricante e dependente da arquitetura da máquina. Os fabricantes disponibilizam um "Manual de Referência da Linguagem de Máquina" ou "Princípios de operação do Computador Modelo XYZ4W), ou algo similar. Nestes manuais deve constar a descrição de como as instruções são executadas interpretativamente pelo microprograma ou como elas são executadas diretamente pelo hardware. Quando descrevem o conjunto de instruções da máquina, estão de fato descrevendo as instruções executadas por interpretação pelo microprograma ou pelos circuitos de execução do hardware. Essas informações são necessárias para os desenvolvedores de sistemas operacionais. 3.4. Nível 3: Nível do Sistema Operacional No nível 3 as instruções da linguagem deste nível também podem conter instruções do nível ISA. 2 Microprograma é um interpretador para as instruções do nível 2. 5 ARQUITETURA DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br Suporta uma organização diferente de memória e tem capacidade de rodar dois ou mais programas simultaneamente, suportando inclusive sistemas de comandos ou de janelas (windows); Programadores deste nível, e também dos níveis mais baixos, são conhecidos como programadores de sistema. Os programadores dos níveis mais altos que são chamados programadores de aplicação. 3.5. Nível 4: Nível da linguagem do montador ou de montagem (Assembly language) Neste nível encontra-se a Linguagem de montagem que é uma forma simbólica de representação das linguagens do nível mais baixo. Esse nível fornece um método para as pessoas escreverem programas para os níveis 1,2 e 3 em uma forma que não seja tão desagradável quanto as linguagens de máquina real em si. Programas em linguagem de montagem são primeiro traduzidos para linguagem de nível 1, 2 ou 3, e em seguida interpretados pela máquina real ou real adequada. O programa que realiza a tradução é denominado assembler (montador). 3.6. Nível 5: Nível das linguagens orientadas para solução dos problemas O nível 5 habitualmente consiste em linguagens projetadas para ser usadas por programadores de aplicações que tenham um problema a resolver. Essas linguagens costumam ser denominadas linguagens de alto nível. Neste nível encontram-se as conhecidas linguagens de alto nível como Basic, C, Pascal, Java, LISP, etc; Os Programas construídos por estas ferramentas são geralmente traduzidos para os níveis 3 e 4 por compiladores; Alguns são interpretados: Exemplo: programas em Java, MatLab, etc. OBSERVAÇÕES IMPORTANTES - Computadores são projetados como uma série de níveis, cada um deles é construído em cima de seu precursor. - Cada nível representa uma abstração distinta, com diferentes objetos e operações; - A abstração permite ignorar, "abstrair", temporariamente detalhes irrelevantes, de níveis mais baixos, reduzindo uma questão complexa há algo muito mais fácil de ser entendido. - O conjunto de tipos de dados, operações e características de cada um dos níveis é chamado arquitetura do nível. - São parte da arquitetura as características que um programador do nível deve enxergar, como por exemplo, a disponibilidade de memória. 4. EVOLUÇÃO DAS MÁQUINAS DE VÁRIOS NÍVEIS Os programas escrito na verdadeira linguagem de máquina de um computador (Nível 1) podem ser executados diretamente pelos circuitos eletrônicos/hardware (nível 0) desse computador sem necessidade da intervenção de interpretadores ou de tradutores. 6 ARQUITETURA DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br Em contraste ao hardware, o software é composto de algoritmos e por suas representações computacionais, que podem ser armazenados em discos, sendo sua essência o conjunto de instruções e não o meio físico no qual eles são gravados. Com a evolução dos sistemas, a fronteira entre hardware e software tem desaparecido, por conta do acréscimo, da remoção e da combinação de níveis. Hardware e software são equivalentes logicamente Qualquer operação realizada por software pode também ser realizada por hardware, pois o hardware é simplesmente o software petrificado. Neste caso, a recíproca é verdadeira e o inverso pode ocorrer. Exemplo claro são os DVD's e placas criptográficas. A decisão em deixar algumas funções a cargo de hardware ou de software baseia-se em fatores como custo, velocidade, confiabilidade e freqüência esperada de mudanças. 4.1. A invenção da microprogramação Na década de 40 os computadores tinham somente dois níveis: O nível ISA, onde toda programação é realizada e o nível da lógica digital, onde os programas são executados. Os circuitos do nível da lógica digital eram complicados, difíceis de entender e construir, além de pouco confiáveis. Na década de 50, surgiu a idéia de se construir um computador em três níveis. Este deveria ter acoplado a si um interpretador (microprograma) com a função de executar programas escritos no nível ISA por interpretação, fazendo com que os computadores precisassem de menos circuitos eletrônicos. Há de se considerar que os computadores da época eram construídos com válvulas e sua diminuição aumentava a confiabilidade dos sistemas. Em 1970 essa prática tornou-se comum. 4.2. A invenção do Sistema Operacional Nos primórdios, os computadores eram operados pelo próprio programador, o qual com seus cartões perfurados carregavam um programa na memória e ele executava sua tarefa. Por volta de 1960, pare reduzir o tempo gasto na execução de programas, automatizando os trabalhos de operação da máquina, foi criado o sistema operacional. Este era mantido na memória do computador durante todo o tempo automatizava e gerenciava as atividades antes desenvolvidas pelo programador. Com o tempo os sistemas operacionais evoluíram incorporando novas funções ao nível ISA, incluindo novas operações para tratamento de entrada e saída. Estas instruções foram conhecidas como macros do sistema operacional ou como chamadas ao supervisor. Atualmente é usada a expressão chamada de sistema. Os primeiros Sistemas Operacionais eram conhecidos como sistemas batch e consumiam algumas horas para execução de alguns programas. Ainda em 1960, foram concebidos os primeiros sistemas de tempo compartilhado, onde vários usuários poderiam compartilhar o uso do processador. 7 ARQUITETURA DE COMPUTADORES Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com.br 4.3. Migração de Funcionalidade para o Microcódigo Nos idos de 1970 o conceito de microprograma tornou-se muito comum, oportunidade em que os projetistas acrescentaram novas instruções ao conjunto de instruções do processador simplesmente expandindo o microprograma. Instruções como as abaixo relacionadas foram incorporadas: - Instruções para multiplicação e para divisão de números inteiros; - Aritmética em ponto flutuante; - Chamada e retorno de procedimentos; - Acelerar a execução de loops; - Manipular strings e caracteres. Pela facilidade incluíram algumas funcionalidades: - Funcionalidade para acelerar o processamento de programa envolvendo cálculo matricial; - Funcionalidade para permitir que os programas pudessem ser deslocados de posição na memória pós o início da execução; - Sistemas de interrupção que enviam um sinal para o processador tão logo uma operação de entrada ou de saída termine; - Capacidade de suspender a execução de um programa e iniciar a execução de outro, usando para isso um número muito pequeno de instruções. 4.4. A Eliminação da Microprogramação Durante a chamada era de ouro da microprogramação (1960-1970), os microprogramas cresceram muito e tornaram-se muito lentos. Em alguns casos, o projeto dos computadores dava uma volta de 360º voltando à situação anterior à invenção da microprogramação. Com isso, pode-se provar que a fronteira entre o hardware e o software é arbitrária e está sempre em mudança. Do ponto de vista do programador não interessa muito como uma instrução é realmente implementada, exceto se a implementação influir na velocidade de execução da instrução. 5. CONCLUSÃO Com isso, verificamos principalmente os níveis de organização dos sistemas computacionais bem como um breve relato de sua evolução. Sabe-se que tal posicionamento nunca é constante, podendo evoluir no decorrer dos tempos de acordo com a evolução da tecnologia, como visto com a eliminação da microprogramação. Contudo, tais circunstâncias sevem para nos trazer uma noção de como os sistemas computacionais estão estruturados e organizados em níveis bastante distintos. 6. BIBLIOGRAFIA TANENBAUM, Andrew S. de. Organização Estruturada de Computadores, 4ª Edição, 2001 STALLINGS, William. Arquitetura de Computadores. 8