== Organização e Funcionamento do Computador //// FIXME: Os objetivos não estão focados no aluno. //// .Objetivos do capítulo ____________________ Ao final deste capítulo você deverá ser capaz de: - Descrever a arquitetura geral de um computador - Descrever seus componentes básicos e suas funções, como por exemplo a UCP, a memória principal, e os dispositivos de E/S - Descrever o ciclo de máquina responsável pela execução de programas de computador ____________________ Um sistema de computador é integrado pelo seu ((hardware)) e seu ((software)). O hardware é o equipamento propriamente dito, e seus elementos básicos são: unidade central de processamento, memória principal e seus dispositivos de entrada e saída. O software é constituído pelos programas que lhe permitem atender às necessidades dos usuários. Ele abriga programas fornecidos pelos fabricantes do computador e programas desenvolvidos pelo usuário. Neste capítulo, iremos identificar como estes dois elementos unidos permitem que atividades pré-programadas, através de uma linguagem, sejam executas de forma automática pelo computador. === Arquitetura de um Computador (((Arquitetura))) Os circuitos de um computador que executam operações sobre dados, tais como adição e subtração, são isolados em uma região chamada Unidade Central de Processamento UCP (CPU – 'Central Processing Unit'), ou processador. Os dados que estão armazenados na memória principal do computador são transferidos através de barramentos que interligam estes componentes. A comunicação com o mundo externo, os usuários, se dá pelos dispositivos de Entrada e Saída (E/S). A comunicação entre o computador e estes dispositivos se dá através dos controladores de cada dispositivo de E/S. Em computadores comuns, estes controladores correspondem a placas de circuito encaixadas na placa principal do computador (placa mãe). Está ilustrada na <>, a arquitetura básica de um computador, demonstrando a organização de seus componentes básicos. [[fig_arquitetura_geral]] .Arquitetura geral de um computador image::images/organizacao-computador/arquitetura_computador.png[scaledwidth="60%"] Nas seções a seguir são apresentas descrições sobre cada unidade desta Arquitetura, descrevendo seus componentes e funções básicas. ==== Memória Principal (((Memória Principal))) A memória do computador consiste numa coleção de ((registradores)) numerados consecutivamente (endereçados), onde cada um possui um tamanho denominado de *tamanho da palavra*, que pode variar em 16, 32, 64 e 128 bits, com a palavra de 32 bits sendo a mais comum hoje em dia, e a palavra de 64 bits aumentando de popularidade. Cada registrador tem um *endereço*, chamado de localização na memória, estas são organizadas linearmente em ordem consecutiva. O número único que identifica cada palavra é chamado de endereço. A memória possui um espaço de endereçamento representado pelo tamanho em bits do seu endereço, logo, um espaço de endereçamento de 32 bits pode acessar qualquer palavra de memória em qualquer lugar no intervalo de 0 a 2^32^-1. O espaço de endereçamento pode ser dividido em regiões distintas usadas pelo sistema operacional, dispositivos de E/S (Entrada e Saída), programas de usuário e pilha de execução do sistema operacional. [[fig_mapa_memoria]] .Mapa de Memória do Computador image::images/organizacao-computador/memoria_principal.png[] As regiões ilustradas na <> compõem um possível mapa de memória. Os endereços disponíveis são dividos da seguinte forma: Reservados para o sistema operacional:: Os endereços acima de 2048 (0-2048) são reservados para uso do sistema operacional. Reservados para os dispositivos de E/S:: A porção do espaço de endereçamento entre 2^31^ e 2^32^ – 1 está reservada para dispositivos de E/S. Disponível para o usuário:: Corresponde ao restante do espaço, é onde os programas do usuário serão carregados. ===== Endereços vs Dados É importante manter clara a distinção entre o que é *((endereço))* e o que é *((dado))*. Uma palavra na memória, pode ter distintas representações dependendo do seu uso. Ela pode armazenar uma instrução contendo a operação e os operandos (dados de entrada) para a realização de uma específica operação, mas também pode armazenar o endereço de uma outra região de memória. Logo, _o endereço é um apontador para uma posição de memória que contém dados_, e estes são informações significativas para a realização de alguma atividade no computador, ou a representação de alguma informação. ==== Unidade Central de Processamento (UCP) A ((Unidade Central de Processamento)), ilustrada na <>, é composta por duas partes principais: a *((unidade lógica e aritmética))* (ULA), formada por circuitos que manipulam os dados através de operações binárias (dois operandos) e unárias (um operando). Exemplos incluem a 'soma' e operadores lógicos: 'and', 'or' e 'not'. E a *((unidade de controle))*, cujos circuitos são responsáveis por coordenar as operações da UCP. [[fig_ucp]] .Componente lógicos da UCP image::images/organizacao-computador/ucp.png[scaledwidth="70%"] Para o armazenamento e a comunicação entre estas duas unidades a UCP contém circuitos de armazenamento chamados de *((registradores))*, que se assemelham às células de armazenamento da memória principal. Alguns registradores funcionam como _posições intermediárias de armazenamento_ para os dados manipulados pela UCP. Nestes registradores são armazenados os dados de entrada para a ULA e ainda proporcionam um local de armazenamento para o resultado das operações. _Os dados a serem manipulados pela ULA tem origem na memória principal_, sendo de responsabilidade da unidade de controle transferir estes dados aos registradores, informar à ULA sobre quais registradores estão os dados de entrada, ativar o circuito da operação apropriada e informar em que registrador deve guardar o resultado da operação. A transferência desta informação oriunda da memória principal se dá através do *((barramento))* que é responsável por transmitir padrões de bits entre a UCP, os dispositivos de E/S e a memória principal. NOTE: Executar uma simples operação de soma é mais complexo que apenas somar estes números. Coordenado pela unidade de controle, os registradores intermediam a comunicação da memória principal e a ULA. .Passos para a operação de soma . Obter da memória um dos valores da soma e guardar em um registrador; . Obter da memória o outro número a ser somado e armazená-lo em outro registrador; . Acionar o circuito de adição tendo os registradores do passo 1 e 2 como entrada, e escolher outro registrador para armazenar o resultado; . Armazenar o resultado na memória principal; . Finalizar operação. ==== Unidades de Entrada/Saída (((Unidade de Entrada))) (((Unidade de Saída))) (((Entrada/Saída))) Entrada/Saída (E/S) compreende todas as maneiras como o computador se comunica com os usuários e outras máquinas ou dispositivos. Os dispositivos de entrada aceitam dados e instruções do usuário, os dispositivos de saída retornam os dados processados. ===== Tipos de dispositivos de Entrada/Saída Os dispositivos de entrada/saída são classificados da seguinte forma: Dispositivos de entrada:: São os dispositivos que possuem a função básica de enviar dados. Os dispositivos de entrada mais conhecidos são teclado, mouse, 'scanner' e microfone. Dispositivos de saída:: São os dispositivos que possuem a função básica de receber ou apresentar dados. Os dispositivos de saída mais comuns são a tela de vídeo (monitor), a impressora e o auto-falante. Dispositivos de entrada e saída:: São os dispositivos que possuem a função de enviar, receber ou apresentar dados. Exemplos de dispositivos de entrada e saída são: discos rígidos, pen-drives, placas de redes e telas 'touch-screen'. Um dispositivo especial de E/S de um computador é o disco rígido (HD), nele são armazenados todos os dados que devem persistir num sistema computacional, mesmo na ausência de energia. Todos os programas que não estão em execução se encontram no disco, seu único problema é o tempo excessivo para a recuperação e escrita de uma informação, havendo assim a necessidade de se trabalhar com a memória volátil (memória principal), mais rápida, porém mais cara. ===== Funcionamento dos dispositivos de Entrada e Saída Os dispositivos de E/S trabalham com a memória do computador do seguinte modo: os dados captados pelos dispositivos de entrada são representados em pulsos elétricos e transmitidos ao computador. Estes pulsos são convertidos em dados binários e armazenados na memória do computador. No caminho inverso, a informação binária é transformada em pulso elétrico e encaminhada para o dispositivo de saída especialista para tratá-lo e gerar uma saída ao usuário. ==== O Modelo de Barramento (((Barramento))) O objetivo do barramento é reduzir o número de interconexões entre a UCP e seus subsistemas. Em lugar de mantermos um caminho de comunicação entre a memória e cada um dos dispositivos de entrada e saída, a UCP é interconectada com os mesmos via barramento de sistema compartilhado. [[fig_modelo_barramento]] .Modelo de Barramento do Computador image::images/organizacao-computador/barramentos.png[] Os componentes são interconectados ao barramento da forma ilustrada na <>. A UCP gera endereços que são colocados no *barramento de endereços*,footnote:[O caminho inverso desta operação não é possível, como pode ser observado na figura.] e a memória recebe endereços do mesmo. Durante a execução de um programa, cada instrução é levada até à ULA (Unidade Lógica e Aritmética) a partir da memória, uma instrução de cada vez, junto com qualquer dado que seja necessário para executá-la. A saída do programa é colocada em um dispositivo, tal como display de vídeo ou disco. A comunicação entre os três componentes (UCP, memória e E/S) é feita sempre pelos barramentos. === Programando um computador A grande evolução na arquitetura dos computadores foi a flexibilidade da unidade de controle quanto ao tratamento de instruções. Em suas primeiras versões existiam circuitos físicos montados na unidade de controle que realizavam algumas atividades específicas, e sempre que o usuário quisesse utilizar outras operações, era necessário reprogramar fisicamente a fiação do circuito para que a nova operação pudesse ser executada. O leitor deve perceber que esta estratégia tornaria qualquer programação inviável para leigos da área de circuitos eletrônicos. Esta seção apresenta o funcionamento atual da UCP para executar os programas do sistema e de usuários. ==== Linguagem de Máquina (((Linguagem de Máquina))) A unidade de controle moderna é projetada para reconhecer *((instruções))* codificadas como padrões de bits. Ao conjunto de instruções é dado o nome de *((linguagem de máquina))*, e cada uma destas instruções é chamada de *((instrução de máquina))*. [NOTE] Algo que pode surpreender o leitor é a pequena quantidade de instruções necessária para a UCP decodificar, sendo através da combinação destas poucas instruções, bem planejadas, que o computador desenvolve tarefas de usos gerais nas mais diversas situações em nosso cotidiano. E a grandeza da Ciência da Computação é que se tivermos projetado instruções bem planejadas, a adição de outras instruções mais específicas se torna desnecessária, pois uma combinação das instruções básicas tem o mesmo efeito lógico da instrução específica. ===== Arquiteturas RISC e CISC A decisão entre instruções específicas ou instruções de uso geral levou a disputa de duas filosofias de projetos para as UCPs. ((RISC)) ('Reduced Instruction Set Computer'):: Possui um *conjunto mínimo de instruções*, tem em sua defesa o fato de criar máquinas simples e eficientes. ((CISC)) ('Complex Instruction Set Computer'):: Possui um *conjunto de instruções complexas*, que tem como argumento a facilidade de programação, já que uma única instrução é capaz de realizar várias tarefas individuais do RISC. As duas filosofias tem entrada no mercado, sendo o CISC adotado pela família Pentium da Intel e o RISC adotado pela Apple Computer, IBM e Motorola. ===== Tipos de instruções Existem três tipos de instruções: Instruções de transferência de dados:: realizam cópia de valores entre registradores da UCP e a memória principal, como por exemplo `STORE` e `LOAD`; Instruções lógicas e aritméticas:: ativam os circuitos específicos da ULA para a realização das operações, como por exemplo `ADD`, `SHIFT`, `OR`, `AND` e etc.; Instruções de controle:: responsáveis por tratar a sequência da execução do programa sem haver manipulação de seus dados, como por exemplo o `JUMP` e `CALL`, usadas para a mudança do fluxo normal de um programa, implementando assim os desvios condicionais, códigos de repetição, chamada de função e retorno. ===== Codificação de instruções A codificação de uma instrução é composta de duas partes, o *campo código da operação* e o *campo do operando*. image::images/organizacao-computador/codigo_comando.png[scaledwidth="70%"] Podemos observar no exemplo a seguir, a codificação da operação `STORE` e seus operandos: [[fig_exemplo_instrucao]] .Codificação de uma instrução STORE em código de máquina image::images/organizacao-computador/exemplo_instrucao.png[scaledwidth="70%"] O primeiro dígito hexadecimal, o `B`, representa, neste exemplo, a operação `STORE` (armazena o conteúdo de um registrador em memória). O dígito hexadecimal seguinte representa o identificador do registrador (valor `C`) que possui o conteúdo a ser gravado, e já o par de dígitos hexadecimais `F3` representa o endereço na memória principal onde o conteúdo do registrador `C` será guardado. Podemos traduzir este código da seguinte forma: ____ _Armazene o padrão de bits contido no registrador `C` para a célula de memória de endereço `F3`._ ____ ==== Executando Programas em Linguagem de Máquina Um programa é uma sequência de instruções em uma linguagem a ser executada com o objetivo de realizar uma determinada atividade pré-programada. O programa em linguagem de máquina fica posto na memória principal, sendo de responsabilidade da unidade de controle, a busca por cada instrução de máquina, sua decodificação e o gerenciamento da execução desta instrução com o auxílio da ULA. Após o término de cada instrução o processo se repete dando continuidade ao ciclo de máquina, este ciclo está ilustrado na <>. [[ciclo_de_maquina]] .As três fases do ciclo de máquina image::images/organizacao-computador/ciclo_de_maquina.png[scaledwidth="70%"] Para o controle deste ciclo a unidade de controle possui dois registradores de propósito específico: o *((contador de instruções))* e o *((registrador de instruções))*. No contador de instruções é armazenado o endereço de memória da próxima instrução a ser executada, assim a unidade de controle fica informada sobre a posição do programa em execução. Já o registrador de instruções guarda a instrução de máquina que está em execução. Como ilustrado na <>, o ciclo de máquina é divido em três fases. Em cada fase a unidade de controle utiliza seus registradores para auxiliá-la na execução das instruções: Busca:: a unidade de controle pede para a memória principal transferir a instrução contida no endereço de memória indicado pelo contador de instruções e este conteúdo é armazenado no registrador de instruções. Por fim, o conteúdo do contador de instruções é incrementado, ficando pronto para a próxima fase de busca; Decodificação:: a unidade de controle separa os campos da instrução contida no registrador de instruções de acordo com o tipo de operação, identificando os operandos da instrução; Execução:: os circuitos específicos da ULA são ativados, os dados de entrada carregados e a tarefa indicada na instrução é executada. Ao final da execução, a unidade de controle recomeçará o ciclo, partindo da fase de busca. [[sec_animacao_arquitetura]] === Animação demonstrando o funcionamento da arquitetura O vídeo a seguir demonstra o funcionamento interno da UCP (ou CPU), nele é possível ver como as intruções são carregas, decodificadas e executadas. .Funcionamento básico da UCP: http://youtu.be/69svptJTE9Y ifdef::livro-pdf[] ["qrcode", size=10, scaledwidth="30%"] ------------------------- http://youtu.be/69svptJTE9Y ------------------------- endif::livro-pdf[] ifdef::livro-html[] +++ +++ endif::livro-html[] === Recapitulando Neste capítulo estudamos a Arquitetura básica de um computador, identificamos cada um dos seus componentes, descrevendo suas funcionalidades principais e um resumo de seu funcionamento interno. Descrevemos como estes componentes interagem entre si para o funcionamento do computador, dentre estes componentes estudamos a Unidade Central de Processamento, a Memória Principal, os dispositivos de Entrada e Saída e os Barramentos. Por fim, demos uma introdução sobre como o computador consegue executar um programa desenvolvido em linguagem de máquina, apresentando, para isso, o conceito de ciclo de máquina. // TODO ponte para o próximo capítulo. === Atividades 1. Qual o papel de cada unidade dentro da UCP? 2. Qual a função dos registradores existentes na UCP? 3. Qual a importância dos Barramentos na Arquitetura de um computador? 4. Como a unidade de controle gerencia o ciclo de máquina de um computador? 5. Descreva o caminho percorrido entre os componentes de um computador para que uma soma de dois operandos tenha seu resultado apresentando em um monitor de vídeo. // Sempre manter uma linha em branco no final