Buscar

Introdução à Organização e Arquitetura de Computadores

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 80 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 80 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 80 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

Introdução à Organização e Arquitetura de Computadores
Nesta unidade, estudaremos os conceitos de Organização e Arquitetura de Computadores e sua evolução até os dias de hoje. Para isso, vamos iniciar compreendendo a diferença entre estrutura e função do computador:
Estrutura: É o conjunto de dispositivos que compõem um computador;
Função: A função primordial do computador é executar programas. Para isso, sua estrutura precisa funcionar de forma organizada e harmônica.
No mundo computacional, tornou-se unânime o uso dos conceitos de Organização e Arquitetura de Computadores:
Arquitetura de computador refere-se aos atributos de um sistema visíveis a um programador ou, em outras palavras, aqueles atributos que possuem um impacto direto sobre a execução lógica de um programa. Organização de computador refere-se às unidades operacionais e suas interconexões que realizam as especificações arquiteturais (STALLINGS, 2010, p. 22).
Para compreender melhor, podemos utilizar como exemplo uma linha de computadores de determinado fabricante. Toda linha pode ter a mesma arquitetura e os produtos podem parecer idênticos, porém, podem ter uma organização variada, chegando ao consumidor com preços diferentes de acordo com sua configuração e capacidade.
Nesta unidade, estudaremos um breve histórico da arquitetura dos computadores, incluindo a arquitetura Von Neumann e sua importância para os modelos que são produzidos até hoje. Veremos, também, a organização de sistemas, as arquiteturas RISC e SISC e o conceito pipeline.
Histórico da arquitetura de computadores
Vivemos numa era na qual a tecnologia está presente em todos os lugares, nos auxiliando nas mais diversas atividades e necessidades, mas nem sempre foi assim. Não se sabe ao certo quando surgiram as primeiras máquinas capazes de realizar cálculos, sabe-se que elas não eram digitais e dependiam do trabalho manual do programador.
Vamos estudar a evolução dos computadores através das quatro gerações para compreender suas características, funcionamento e diferenças entre uma geração e outra.
GERAÇÃO ZERO: COMPUTADORES MECÂNICOS
Centenas de anos antes do surgimento dos computadores elétricos já existiam máquinas para realizar cálculos, chamadas de computadores mecânicos ou geração zero. A primeira calculadora mecânica foi criada em meados de 1642 pelo francês Blaise Pascal. A calculadora Pascaline era capaz de realizar cálculos de adição e subtração de forma simples, já divisão e multiplicação, por um sistema de repetição. A máquina funcionava pelo uso de uma manivela.
Em 1672, Gottfried Leibniz aperfeiçoou a Pascaline, melhorando sua agilidade e acrescentando a função de raiz quadrada.
Em 1801, foi criado o primeiro modelo que utilizava um tecido perfurado, capaz de ser programado de acordo com esses furos. Esta espécie de tear foi criada por Joseph-Marie Jacquard.
A Máquina Analítica foi criada em 1834 tinha unidades de entrada e saída, unidade de memória e unidade de computação, similares à arquitetura utilizada nos dias de hoje.
Em 1890, Herman Hollerith criou uma máquina que também utilizava a tecnologia de cartões perfurados, mas o seu modelo possuía pinos que transpassavam somente os furos dos cartões, podendo assim realizar os cálculos necessários.
Em 1944, a IBM lançou o Mark I, computador que possuía uma estrutura gigantesca e era considerado lento, porém conseguia realizar cálculos extensos.
PRIMEIRA GERAÇÃO: VÁLVULAS (1945-1955)
Os primeiros computadores considerados digitais para uso geral contavam com a utilização de milhares de válvulas. A válvula era um dispositivo semelhante a uma lâmpada, feita de vidro transparente e totalmente fechada, com uma estrutura interna que continha eletrodos. Ao ser aquecida, o vácuo fazia com que os elétrons fossem transmitidos pela estrutura de metal para outro filamento, conhecido como efeito termoiônico. O problema das válvulas era que, devido ao seu superaquecimento, consumiam muita energia elétrica e queimavam constantemente.
// ENIAC: o primeiro computador digital
O primeiro computador digital começou a ser construído durante a Segunda Guerra Mundial. O Laboratório de Pesquisa Balística (BRL) do Exército dos Estados Unidos tinha cerca de 200 pessoas realizando cálculos para auxiliar a artilharia. Porém, os cálculos podiam levar horas para ficarem prontos, processo este extremamente oneroso.
Devido à necessidade de reduzir esse tempo, iniciou-se a construção do primeiro computador eletrônico digital de uso geral, o ENIAC (Electronic Numerical Integrator and Computer), pela parceria dos cientistas John Eckert e John Mauchly, ambos da Universidade da Pensilvânia. O projeto durou de 1943 a 1946, desta forma, não foi utilizado para o seu propósito inicial de auxiliar na guerra.
O gigantesco computador pesava cerca de 30 toneladas, possuía mais de 18.000 válvulas e consumia mais de 140.000 kilowatts. Sua capacidade era decimal e permitia realizar cerca de 5.000 cálculos por segundo, porém, sua programação era manual e, para mudar o tipo de cálculo, era necessário reprogramar o equipamento alterando chaves e cabos. Utilizava cartões perfurados que na época eram fabricados pela IBM para processamento de dados.
Figura 1. ENIAC. Fonte: Shutterstock. Acesso em: 04/04/2019.
O ENIAC foi utilizado para outras finalidades, entre elas, analisar a viabilidade de um projeto da bomba termo nuclear de hidrogênio. Em 1955, foi desmontado e partes da sua estrutura estão expostas em diversos museus pelo mundo.
CONTEXTUALIZANDO
O projeto ENIAC contou com cerca de 80 mulheres programadoras. Na época, elas não eram reconhecidas e não participavam dos eventos e premiações sobre o computador. Somente em 1997, seis delas entraram para o Hall Internacional da Fama de mulheres na tecnologia.
// A arquitetura de John Von Neumann
Consultor do projeto ENIAC e professor de matemática na Universidade de Princeton, John Von Neumann acreditava que o processo de programação dos computadores poderia ser facilitado se os programas e os dados ficassem armazenados no mesmo espaço de memória (conceito de programa armazenado). Em 1946, Neumann começou a trabalhar no projeto do IAS, primeiro computador criado pelo Instituto de Estudos Avançados de Princeton (IAS).
Figura 2. Unidade Central de Processamento (CPU).
O IAS foi baseado na arquitetura de Von Neumann, possuía uma Unidade Central de Processamento que continha uma Unidade Lógica e Aritmética (CA) e uma Unidade de Controle do Programa (CC) que interagiam com a Memória Principal (M) e os Dispositivos de Entrada e Saída (E/S).
De acordo com Von Neumann, cada item tinha a seguinte função:
· Memória principal: local onde ficam armazenados os programas utilizados e os dados;
· Unidade de Processamento (CPU):
· Unidade de controle: contém as instruções que devem ser executadas;
· Unidade lógica e aritmética: responsável por executar as instruções;
· Dispositivos de entrada e saída: por onde entram as informações inseridas pelo usuário. Faz a interface com equipamentos externos, como mouse e teclado, por exemplo.
Essa arquitetura se tornou referência e é utilizada pela maioria dos computadores até os dias de hoje.
// EDVAC
Em 1949, surgiu o EDVAC (Electronic Discrete Variable Automatic Computer), criado por Von Neumann e os mesmos criadores do ENIAC. No mesmo ano, na Universidade de Cambridge – no Reino Unido – foi criado o EDSAC (Electronic Delay Storage Automatic Calculator) por Maurice Wilker.
Em 1951, os mesmos criadores do ENIAC apresentaram sua nova máquina: o UNIVAC1. Ele foi o primeiro computador comercial criado e foi instalado no escritório do censo dos Estados Unidos no mesmo ano. Não usava mais os conhecidos cartões perfurados, mas sim fita magnética.
A IBM, que até então produzia e comercializava os cartões perfurados, lançou seu primeiro computador em 1953, o IBM 701, que utilizava a tecnologia da fita magnética. Posteriormente, a empresa lançou vários outros computadores, criando uma extensa linha de equipamentos.
// FORTRAN: primeira linguagem de programação
Em 1957,surgiu a primeira linguagem de programação para computadores: FORTRAN (FORmula TRANslation). Desenvolvida por John Backus e sua equipe de 13 programadores, a linguagem era considerada de alto nível e foi utilizada pela IBM no modelo 704. Em seguida, outros fabricantes desenvolveram compiladores para o Fortran e conseguiram assim produzir diversos tipos de programas para seus computadores.
SEGUNDA GERAÇÃO: TRANSISTORES (1954-1965)
O transistor era um dispositivo semicondutor, criado em 1947 para substituir as válvulas, porém, somente na década de 1950 começou a ser utilizado em computadores. A IBM foi pioneira no fornecimento da tecnologia e algumas empresas começaram a utilizá-la em pequenos computadores. Posteriormente, a IBM entrou no mercado com sua linha 7000. As vantagens da substituição das válvulas pelos transistores eram inúmeras: seu tamanho era menor, dissipava melhor o calor economizando energia elétrica e era mais resistente.
TERCEIRA GERAÇÃO: CIRCUITOS INTEGRADOS (1965-1980)
O circuito integrado (CI) foi criado em 1958 e recebeu este nome pois integrava em sua estrutura de silício vários componentes como capacitores, resistores, transistores, diodos, entre outros. Tais componentes, até então, eram fabricados e instalados separadamente. O pequeno dispositivo revolucionou a eletrônica. Em 1964, a IBM lançou uma família de computadores que utilizava a tecnologia dos circuitos integrados: System/360.
O modelo fez tanto sucesso que colocou a IBM como maior fornecedora de computadores da época, pois os programas eram compatíveis com os diversos modelos da mesma linha.
GERAÇÕES POSTERIORES: VLSI (1980-ATUAL)
A década de 1980 foi responsável pela comercialização de computadores em larga escala para uso pessoal. Com o surgimento da tecnologia VLSI (Very Large Scale Integration), tornou-se possível colocar em um único chip milhões de transistores, fazendo com que os computadores fossem ainda menores, mais rápidos e mais baratos.
Computadores capazes de executar múltiplas funções começaram a ser produzidos na década de 1990 e, de lá pra cá, surgiram computadores portáteis, computadores para carros e atualmente os computadores podem ser integrados a diversos objetos, tecnologia chamada de “internet das coisas” e a “computação vestível”, utilizada em roupas, relógios e outros produtos que se pode usar.
GERAÇÕES POSTERIORES: VLSI (1980-ATUAL)
A década de 1980 foi responsável pela comercialização de computadores em larga escala para uso pessoal. Com o surgimento da tecnologia VLSI (Very Large Scale Integration), tornou-se possível colocar em um único chip milhões de transistores, fazendo com que os computadores fossem ainda menores, mais rápidos e mais baratos.
Computadores capazes de executar múltiplas funções começaram a ser produzidos na década de 1990 e, de lá pra cá, surgiram computadores portáteis, computadores para carros e atualmente os computadores podem ser integrados a diversos objetos, tecnologia chamada de “internet das coisas” e a “computação vestível”, utilizada em roupas, relógios e outros produtos que se pode usar.
Organização de sistemas de computadores
Um computador é um conjunto de módulos que possuem funções específicas e se comunicam para realizar processamento de dados. Esses módulos são: Unidade Central de Processamento, Memória e dispositivos de entrada e saída. A comunicação entre esses módulos é feita através de linhas de transmissão ou barramento (veremos esse item adiante).
Figura 3. Unidade Central de Processamento (CPU).
UNIDADE CENTRAL DE PROCESSAMENTO (CPU)
O processador, conhecido como Unidade Central de Processamento (CPU), é um chip instalado na placa-mãe do computador responsável por processar dados de acordo com instruções previamente armazenadas na memória principal.
Muitos confundem esse termo com toda a estrutura contida no gabinete do computador, mas esse conceito está incorreto.
O processador funciona de forma parecida ao cérebro humano. Ele executa tarefas que nos são perceptíveis e outras não. Por exemplo, não temos que lembrar constantemente de respirar, pois o processo é automático, mas se precisamos escovar os dentes precisamos nos lembrar (buscar na memória) de como fazê-lo.
O processador é composto por uma Unidade de Controle e uma Unidade Lógica e Aritmética. Juntamente com a memória e os dispositivos de entrada e saída realizam o processo de busca, leitura, execução, processamento e gravação das instruções previamente armazenadas. Esse ciclo é conhecido como “buscar-decodificar-executar”.
Os processadores em geral mantêm uma busca de instrução em uma sequência de endereço de memória mais alto. Por exemplo, se ele localizou uma palavra no local 100, na seguinte busca ele irá procurar no local 101, 102, 103 e adiante. Isso significa que a instrução lida foi carregada em um registrador de instrução (IR), e é lá que ficam as “ações” que o processador deve tomar nas próximas pesquisas.
UNIDADE DE CONTROLE, UNIDADE LÓGICA E ARITMÉTICA, REGISTRADORES
// Unidade de Controle (UC)
Podemos considerar que a Unidade de Controle (UC) é o cérebro do processador. Ela fica armazenada dentro do chip juntamente com a ULA e é responsável por controlar a operação da CPU. A UC busca as instruções na memória principal e as envia para a ULA, informando também a sequência em que elas devem ser executadas. Devemos lembrar que a UC não processa dados, ela apenas gerencia esses processos, servindo como ponte entre a memória e a ULA.
// Unidade Lógica e Aritmética (ULA)
O local onde os dados são processados na CPU é chamado de Unidade Lógica e Aritmética (ULA). Ela tem a capacidade de executar diversos processos de acordo com a instrução recebida. Nos primeiros computadores, a quantidade de instruções era menor e a execução mais demorada, mas, com o passar do tempo, os programas de computadores foram projetados com o propósito de auxiliar o hardware a aumentar sua capacidade de processamento, tornando-se mais rápido para o usuário.
// Registradores
Os registradores são um conjunto de unidades de armazenamento, também conhecidos como memória de rascunho. Eles podem ser divididos em dois tipos: visíveis ao usuário e controle e estado.
// Registradores visíveis ao usuário
Podem ser acessados através de linguagem de programação e são classificados como:
Registrador de uso geral
– Utilizado para realizar funções diversas e armazenar dados e/ou endereços;
Registrador de dados
– Dedicado apenas para o registro de dados;
Registrador de endereços
– Dedicado à endereçamento em geral;
Registrador de código de condução
– Armazena os resultados das operações em forma de bits.
// Registradores de controle e estado
Os registradores são locais de armazenamento dentro da CPU. Neles ficam guardados diversas informações, incluindo os resultados gerados pela ULA, podendo ou não serem enviados para a memória, dependendo do que for solicitado. Existem diversos tipos de registradores, sendo os principais (STALLINGS, 2010, p. 15):
Registrador de Buffer de Memória (MBR)
– Determina a quantidade de bits (palavra) a ser enviada ou recebida da memória ou da E/S;
Registrador de Endereço de Memória (MAR)
– Especifica o endereço da palavra (da MBR) na memória;
Registrador da Instrução (IR)
– Contém a instrução que está sendo executada;
Registrador de Buffer de Instrução (IBR)
– Mantém temporariamente a próxima instrução a ser executada;
Contador de Programa (PC)
– Contém o endereço da próxima instrução a ser trazida da memória.
MEMÓRIA PRIMÁRIA, MEMÓRIA SECUNDÁRIA, ENTRADA E SAÍDA
// Memória primária
A memória primária tem como principal função manter disponíveis as informações que serão utilizadas pelo processador. Este tipo de memória não pode ser acessada pelo usuário para guardar arquivos, o acesso é feito pela unidade de controle da CPU.
A maioria das memórias primárias são voláteis, ou seja, temporárias. Elas mantêm as informações ativas enquanto estão em contato com a energia elétrica e vão perdendo gradativamente quando a energia é desligada. Por esse motivo, sua capacidadede armazenamento é bem menor do que as memórias secundárias (não voláteis). Veremos a seguir os tipos de memória primária:
// Memória RAM
A memória RAM (Random Access Memory) é um chip composto por transistores e capacitores que faz uma leitura em código binário. A capacidade de armazenamento e a velocidade do processamento dos dados vão depender do barramento do periférico.
A memória RAM é dividida em dois tipos:
SRAM (Static Random Access Memory) : Memória estática, rápida e volátil. Essa memória perde as informações quando a energia é desligada.
DRAM (Dynamic Random Access Memory) : Memória dinâmica, mais complexa e mais lenta que a SRAM. Essa memória precisa que a informação seja utilizada constantemente para que permaneça armazenada.
// Memória ROM
A memória ROM (Read-Only Memory), ou, em português, "memória apenas de leitura", é a memória que não se pode alterar, dessa forma, os dados são gravados somente uma vez e essa memória não é volátil. Existem diversos tipos de memória ROM, conforme abaixo:
1 – PROM (Programmable Read-Only Memory)
Pode ser programada uma vez, porém, após a gravação, não pode mais sofrer alterações.
2 – EPROM (Erasable Programmable Read-Only Memory)
Esse tipo de memória permite que seus dados sejam apagados, porém esse processo é feito em um equipamento específico, que utiliza luz ultravioleta.
3 – EEPROM (Electrically-Erasable Programmable Read-Only Memory)
Esta memória pode ser programada e apagada sem ser removida do computador para outro equipamento.
4 – EAROM (Electrically-Alterable Programmable Read-Only Memory)
As informações podem ser alteradas ou apagadas parcialmente.
// Cache
A memória cache tem como função armazenar os principais dados e recursos utilizados pelo processador e trazê-los de forma muito mais rápida quando solicitados. É uma memória extremamente pequena se comparada à memória RAM.
Figura 6. Comunicação entre cache, processador e memória principal. Fonte: STALLINGS, 2010, p. 117.
// Memória secundária
A memória secundária é o armazenamento não volátil do computador. Seus dados permanecem intactos mesmo quando o computador é desligado ou reiniciado. As informações podem ser gravadas, alteradas ou excluídas a qualquer momento, pois o usuário tem acesso a este periférico através do sistema operacional.
Por esses motivos, sua capacidade de armazenamento é muito maior do que as memórias primárias. Existem diversos tipos de memórias secundárias, veremos alguns a seguir.
// Hard Disk (HD)
A grande maioria dos computadores contém um dispositivo que armazena informações do sistema operacional, programas instalados, arquivos do usuário e muito mais, que é conhecido como HD. Nos últimos anos, este dispositivo vem diminuindo de tamanho e aumentando sua capacidade de armazenamento.
Existem também os HDs portáteis, que podem ser levados para qualquer lugar e conectados via USB em outros dispositivos, facilitando muito a vida do usuário.
// Pen-drive e cartão de memória
A cada dia menores e com maior capacidade de armazenamento, os Pen-drives e cartões de memória cabem no bolso e até mesmo na carteira. Esses pequenos dispositivos facilitam a vida do usuário permitindo que suas informações sejam transportadas e transferidas de modo rápido e seguro.
As entradas (conexões) compatíveis com tais periféricos já estão disponíveis em computadores, equipamentos médicos, equipamentos de som e televisão e nos mais diversos objetos para as mais diversas finalidades.
// CD, DVD e blu-ray
Existem no mercado mídias de CD-ROM, DVD-ROM e blu-ray graváveis (só se pode gravar uma vez) e regraváveis (permitem que as informações sejam regravadas quantas vezes forem preciso).
Com essa facilidade, o usuário pode acessar seus dados também em diversos aparelhos que aceitem esse formato de mídia.
// Entrada e saída (E/S)
A execução dos processos de dados depende também de dispositivos de entrada e saída (E/S). Isso ocorre porque, para que a CPU execute as instruções, é necessário haver uma solicitação por meio de um dispositivo de entrada, enquanto que o resultado desse processo é exibido por meio de um dispositivo de saída.
EXEMPLIFICANDO
Para imprimir um documento, você utiliza um dispositivo de entrada (mouse). E, para tê-lo em mãos, é necessário acionar um dispositivo de saída (a impressora).
Podemos classificar esses dispositivos em três tipos:
Dispositivo de entrada
Interface do usuário com a máquina, dispositivo através do qual ele pode inserir informações e dar comandos que serão executados pelo computador. Exemplo: teclado, mouse, microfone, scanner, entre outros.
Dispositivo de saída
Exibem o resultado do processamento solicitado. Exemplo: monitor, impressora, caixas de som, entre outros.
EXEMPLIFICANDO
Existem dispositivos que executam as funções tanto de entrada quanto de saída, como, por exemplo, impressoras multifuncionais (têm função de scanner e impressora), e monitores touch screen (permitem tanto a inserção de dados quanto mostram o resultado na mesma tela).
Para que os periféricos se comuniquem corretamente com os módulos do computador através do barramento, eles são instalados em controladores, que por sua vez são instalados em uma grande placa eletrônica, chamada placa-mãe.
// Placa-mãe (Motherboard)
A placa-mãe é uma grande placa de circuito impresso que agrega todos os itens necessários para o computador funcionar. Nela ficam instalados transistores, diodos, capacitores, o chip da CPU, barramentos, slots para memórias e diversos conectores para periféricos externos. Ao ligar o computador, a energia elétrica é distribuída para toda a sua estrutura.
A placa-mãe fica instalada numa caixa de metal chamada de gabinete.
// Controlador
O controlador é o dispositivo responsável por fazer a comunicação entre E/S e a placa-mãe. Ele liga a placa e o conector de entrada através de cabos, assim os dispositivos são instalados e fixados de forma segura e duradoura.
Para cada periférico instalado haverá um controlador em contato com o barramento:
Figura 13. E/S e seus controladores.
// Barramento
A comunicação entre os módulos dos computadores são feitos através de linhas de transmissão; esses grupos de linhas são chamados de barramento. 
São classificados em três grupos:
Barramento de dados
Cada linha pode transportar 1 bit por vez, dessa forma, a quantidade de bits que pode ser transferida de uma única vez depende da quantidade de linhas (largura do barramento.
Barramento de endereços
Designa o acesso à determinada palavra na memória. Sem essas linhas informando o local, o endereço correto da origem ou o destino, os dados seriam armazenados de forma aleatória e seria quase impossível localizá-los.
Barramento de controle
Responsável por controlar o uso das linhas de dados e endereços, já que elas são utilizadas por todos os componentes. Os sinais de controle transmitem informações de comando e sincronização entre os módulos do sistema. Os sinais de sincronização indicam a validade da informação de dados e endereço. Os sinais de comando especificam operações a serem realizadas.
CONTEXTUALIZANDO
Bit é a menor parcela de informação processada por um computador.
// Padrões de barramento
Como estudamos no item anterior, barramentos são conjuntos de linhas que permitem a comunicação entre os dispositivos. Além dos tipos que vimos, existem os barramentos padrão, que possuem uma largura específica compatível com itens similares. Vamos ver alguns exemplos:
// Barramento PCI (Peripheral Component Interconnect)
Lançado pela Intel na década de 1990, o barramento PCI ficou muito conhecido por permitir conectar diversos dispositivos à placa-mãe do computador. Esse padrão tem a capacidade de transferir dados a 32 bits e clock de 33 MHz.
// Barramento AGP (Accelerated Graphics Port)
O padrão AGP surgiu em 1996 para a utilização exclusiva de placas de vídeo. Pelo fato de seus recursos não serem compartilhados com outros dispositivos, permitia a utilização total da sua capacidade, ou seja, sua taxa de transferência de dados era extremamente alta.
// BarramentoPCI - Express
A Intel lançou esse padrão em 2004 e substituiu os modelos anteriores PCI e AGP. Um de seus modelos permite trabalhar com uma taxa de transferência de até 4GB por segundo.
ARQUITETURAS RISC E CISC, PIPELINE
// Arquiteturas RISC e CISC
A necessidade de processar instruções cada vez mais complexas fez aumentar o estudo sobre arquiteturas que permitissem realizar esses processos de forma mais rápida. Vamos falar agora sobre duas arquiteturas muito importantes: RISC (Reduced Instruction Set Computer) e CISC (Complex Instruction Set Computer).
// Arquitetura RISC
O processador RISC (computador com conjunto de instruções reduzidas) surgiu na década de 1980 com o intuito de utilizar instruções mais simples e em menor quantidade, mas que pudessem ser executadas de forma mais rápida. Ele era incompatível com os modelos existentes na época.
Por ter um baixo nível de instruções e complexidade, o processo é executado diretamente pelo hardware, não sendo necessária a utilização de microcódigo. Essa arquitetura utiliza a técnica de pipeline de instruções para otimizar seus processos.
// Arquitetura CISC
O processador CISC (computador com conjunto de instruções complexas) tem uma capacidade de processar grandes conjuntos de instruções, desde as mais simples até as mais complexas. Muitas vezes esse processo precisa ser dividido e executado em diversas partes, o que o torna mais lento em relação aos processadores RISC.
// Processador híbrido
Existem também os processadores híbridos, que utilizam a tecnologia RISC para conjuntos de instruções menores e SISC para instruções mais complexas.
// Pipeline
O conceito pipeline (ou paralelismo) surgiu com os processadores MIPS, capazes de emitir milhões de instruções por segundo. Com essa quantidade de processos, foi necessário paralelizar as atividades do computador. As instruções passaram a ser executadas de acordo com a disponibilidade de determinado recurso da CPU, em vez de seguir uma ordem obrigatória.
Vamos usar um exemplo simples para melhor compreensão: três pessoas precisam tomar banho, vestir-se e ir para o trabalho. Cada uma leva cerca de 40 minutos para realizar esse processo e o tempo total para que todas terminem é de duas horas. O conceito de paralelismo sugere que quando a primeira pessoa terminar o banho a segunda já deve iniciar o seu banho. Em resumo, conforme cada parte do processo vai sendo liberada já vai sendo preenchida por outro.
O paralelismo pode ocorrer de duas maneiras: a nível de instrução e a nível de processador.
// Paralelismo em nível de instrução
Explora cada instrução individualmente, otimizando as operações por segundo. Esta execução também pode ser dividida em várias partes, passando por diversos estágios até ser concluída.
Figura 14. Visão geral de paralelismo em cinco estágios.
Podemos ver na Fig. 14 um modelo de pipeline com cinco estágios:
Estágio 1
Obtém a instrução e a coloca no buffer
Estágio 2
Decodifica a instrução e determina os especificadores do comando
Estágio 3
Calcula o endereço dos operandos e os busca
Estágio 4
Executa a instrução
Estágio 5
Armazena o resultado na memória
Ainda de acordo com a Fig. 14, podemos ver que essa divisão em partes permite que conforme as instruções forem processadas as demais venham preenchendo o espaço.
EXPLICANDO
Buffer é uma pequena área da memória ultrarrápida, utilizada para armazenar informações importantes temporariamente.
Quando se trata de processamento em larga escala, o melhor conceito de paralelismo a ser utilizado em nível de processador, ou seja, processadores com maior capacidade de executar corretamente essa função. Para uma grande demanda utilizam-se computadores paralelos ou computadores construídos com diversas CPUs (multiprocessadores).
// Multiprocessadores
Computadores projetados com mais de uma CPU são chamados de multiprocessadores. Essas CPUs podem utilizar um barramento único e dividir a mesma memória ou podem ter um pouco de memória dedicada (vide imagem).
Figura 15. Multiprocessadores com memória compartilhada e com memórias locais.
// Multicomputadores
Diferente do sistema de multiprocessadores, o uso de multicomputadores funciona com diversos computadores utilizando sua memória dedicada, processadores e armazenamento, interligados via rede executando tarefas. 
Esse modelo ocupa mais espaço físico e tem um consumo de energia muito maior do que o uso de multiprocessadores.
Agora é a hora de sintetizar tudo o que aprendemos nessa unidade. Vamos lá?!
SINTETIZANDO
Chegamos ao final desta unidade e conseguimos compreender o conceito de Organização e Arquitetura de Computadores e sua evolução nas últimas décadas. Vimos que, desde Von Neumann até os dias de hoje, temos melhorado a arquitetura dos computadores e feito mudanças que permitiram um grande avanço no que diz respeito à capacidade, à velocidade e ao tamanho.
Vimos que as primeiras máquinas chegavam a tomar salas inteiras, mas, com os computadores cada dia mais compactos, as informações chegam a caber no bolso. Compreendemos a importância da organização dos módulos do computador e da CPU e como eles se comunicam, buscando, executando e mostrando as instruções.
Nos aprofundamos nos tipos de memória e suas funções, tanto de memórias que fazem parte do conjunto do computador quanto de memórias externas. Estudamos outras arquiteturas, como RISC e CISC, e vimos como o conceito pipeline (ou paralelismo) é importante para melhor uso dos módulos do processador.
O conteúdo desta unidade foi desenvolvido como base para qualquer profissional de TI. Os conhecimentos aqui adquiridos são imprescindíveis para uma carreira de sucesso, independentemente do ramo escolhido pelo aluno, por isso, sugerimos que você leia este material quantas vezes foram necessárias e busque sempre se aprofundar nos temas abordados.
Representação de números binários com sinal
Os computadores trabalham com um sistema binário. Isso significa que, enquanto digitamos ou realizamos cálculos, as informações que vemos são diferentes da forma como o computador interpreta: ele faz a conversão dos números e letras para este sistema.
O sistema de numeração que utiliza base dois é igual a um número binário, sendo estes números zero e um (0, 1): 
CURIOSIDADE 
Você sabia? O sistema binário surgiu séculos antes da criação dos computadores. Estudos mostram que a civilização de Mangareva já utilizava este sistema, usando elementos da natureza, como animais e frutas, para representar seus valores (1, 2, 4, 8). 
Para termos uma visão inicial da diferença entre números decimais e binários observe a tabela 1:
Tabela 1. Conversão de números.
Como vemos na Tabela 1, após a conversão para binários, só existem números zero e um. A conversão para números binários é feita pelo computador de forma automática, mas a partir de agora vamos estudar como funciona esta conversão.
CONVERSÃO: DECIMAL PARA BINÁRIO
Para converter determinado número para binário, devemos seguir um passo a passo. Vamos usar como exemplo o número 30. Observe a imagem:
A conversão consiste em dividir o número decimal por dois até não haver mais possibilidade de divisão. Os números que sobram devem ser contados de baixo para cima e este é o resultado em binário. Vamos analisar a Figura 1:
Iniciamos com o número que será convertido (30, em azul). Devemos dividi-lo por dois (em amarelo), em seguida dividir seu resultado (15) e assim sucessivamente até o fim; 
Os valores que sobram (em ciano) devem ser lidos de baixo para cima (b). Este é o resultado da conversão: 11110.
CONVERSÃO: BINÁRIO PARA DECIMAL
Agora que você aprendeu a converter números decimais em binários, vamos fazer o inverso: utilizar a mesma numeração da conversão anterior, na qual o número binário é 11110. Observe a figura 2:
Figura 2. Conversão de binário para decimal.
Vamos analisá-la:
Um modo simples de converter o número binário 11110 é colocá-lo de trás para frente em uma coluna (b) e multiplicá-lo por dois elevados à potência (iniciar sempre do zero – em ciano);Os resultados somados (c) chegam ao número decimal: 30 (d).
Com os exemplos anteriores, conseguimos concluir que 30 e 11110 resultam no mesmo número, porém em sistemas numéricos diferentes.
BIT DE SINAL
Utilizamos o sinal + para números positivos e - para negativos, quando realizamos cálculos no papel, calculadora, computador etc. No sistema binário, também existe uma forma de identificar se os números são positivos ou negativos, através do bit de sinal.
No número binário, o último bit à esquerda é chamado de MSB (Most Significant Bit) e é utilizado como sinal para identificar se é positivo ou negativo:
Figura 3. Representação do bit de sinal.
Para exemplificar, imagine que o registrador possui em determinada posição X os bits 0100101 e na posição Y os bits 1100101. O primeiro bit, à esquerda, é o que define se o número é positivo ou negativo. 
Observe a figura 4:
Figura 4. Binários positivos e negativos.
Por se tratar de números binários, os valores posicionais são elevados à potência dois (a). O primeiro bit à esquerda informa se o valor é positivo ou negativo (b). O último bit, à direita, é chamado de LSD (Least Significant Bit). Na Figura 4, (d), podemos ver a diferença na conversão para decimal: número positivo ou negativo.
Aritmética binária com operandos representados em complemento para dois
Antes de falarmos sobre complemento de dois, vamos entender como funciona o complemento de um. Neste complemento, os números são trocados, mantendo a mesma posição.
No complemento de um, onde é zero se torna um. E onde é um se torna zero. Observe a imagem a seguir:
Figura 5. Aritmética binária.
O complemento de dois tem uma pequena diferença, veja a seguir:
Figura 6. Complemento de dois.
No complemento de dois, o primeiro passo é fazer a substituição dos números, mantendo na mesma posição, como no complemento um (Figura 6, a). A seguir, é acrescentado o número um ao LSB (b) e, por fim, chega-se ao número binário representado em complemento para 2.
SOMA
Como já sabemos, o sistema decimal utiliza os números de 0 a 9. No sistema binário, as possibilidades de soma são somente 0 e 1, por isso a forma de executar as operações é diferente. Veja um exemplo de soma em decimal e binário: 
Tabela 2. Soma decimal e binária.
Para iniciarmos os cálculos, é importante aprender como os números binários podem ser somados. Observe a Figura 7.
Figura 7. Somando números binários.
Assim como na soma de números decimais, nos números binários também colocamos um número embaixo do outro e, assim, começamos o cálculo da direita para esquerda. Os números que sobram devem ser somados com o da posição seguinte:
O cálculo deve iniciar sempre da direita para a esquerda (a). Quando no resultado sobra 1, o número deve ser somado com a próxima posição (b). No nosso cálculo, somamos os números 5 e 4 em binário e o resultado foi 9, ou seja, 1001.
SUBTRAÇÃO 
Para a subtração vamos utilizar a Figura 9
Figura 9. Subtraindo números binários.
Vamos realizar uma subtração utilizando o cálculo 5 - 4 = 1 em binário. Observe a Figura 10.
Assim como na soma, na subtração devemos iniciar da direita pra esquerda (a). Se houver a necessidade de subtrair 0 - 1, devemos tomar emprestado da próxima posição à esquerda, assim como em números decimais: 
Figura 11. Subtração em números binários.
Detecção de overflow em operações de adição e subtração em binário
Você deve ter notado que em alguns casos o resultado obtido está com o sinal errado. No sistema binário, quando o resultado é incorreto, ou a palavra possui um tamanho maior do que já está sendo utilizado, acrescenta-se um bit à esquerda. Esta ação é chamada de overflow, que em português significa "transbordar", "estourar". Essa condição de overflow acontece apenas quando somamos dois números positivos ou dois números negativos, o que sempre produz um resultado errado (CORRÊA, 2017, p. 55).
Para compreender melhor o overflow, vamos analisar a Figura 12: a soma dos números gera um resultado negativo (a). Para corrigir, o sistema acrescenta um bit à esquerda com o sinal correto, nesse caso, sinal positivo (b). Por fim, temos a palavra correta (c):
Figura 12. Overflow em operações de adição e subtração binárias.
Nível lógico-digital
O nível lógico-digital, ou o nível 0, é o onde operam as memórias. Estas memórias podem ser combinadas em grupos e são armazenadas pelos registradores. É o nível mais baixo. Nesse nível, um transistor pode funcionar como um comutador binário muito rápido.
ÁLGEBRA BOOLEANA
A álgebra booleana trabalha em sistema binário, dessa forma, por utilizar apenas zero e um, pode ser considerada mais simples que a álgebra convencional. É utilizada com o intuito de facilitar a relação entre entrada e saída (E/S) através de diversas portas, além de poder ser utilizada para representar o nível de tensão de uma conexão (nível-lógico).
TABELAS-VERDADE
As tabelas-verdade descrevem uma função lógica listando todas as combinações possíveis de valores de entrada e indicando, para cada combinação, um valor de saída (STALLINGS, 2010, p. 610).
Observe as tabelas da figura 13:
Figura 13. Tabelas-verdade. Fonte: MOSS; TOCCI; WIDMER, 2011, p. 50.
Vamos analisar as tabelas da Figura 13. Podemos ver que existem duas entradas (a e b) e uma saída (x) que são representadas nas colunas. As linhas são os níveis que cada tabela poderá ter. Para sabermos quantos níveis a tabela deve ter, devemos considerar a quantidade de entradas e elevá-las à potência dois (binário). Neste caso, temos duas entradas, então consideramos 22 = 4 (quatro linhas).
A primeira coluna da direita para a esquerda vai ter sempre a sequência de 1 em 1 binário. Na coluna B, temos 0-1-0-1. 
Na coluna A, temos a sequência de 2 em 2 binário: 0-0-1-1.
A coluna x mostra a combinação correta para cada nível. Por exemplo, na primeira linha, para as entradas A = 0 e B = 0, a saída é X = 1; e na segunda linha, para as entradas A = 0 e B = 1, a saída é X = 0.
Podemos observar claramente nas tabelas (b) e (c) que, não importa a quantidade de entradas (colunas), elas sempre seguirão a sequência utilizada no primeiro exemplo (a): 
Primeira coluna: sequência de 1 em 1;
Segunda coluna: sequência de 2 em 2;
Terceira coluna: sequência de 4 em 4;
Quarta coluna: sequência de 8 em 8.
E assim por diante.
Circuitos lógico-digitais básicos
Um circuito lógico-digital é um circuito com diversos mecanismos chamados portas. Cada porta possui uma operação diferente e, conforme cada mecanismo é acionado, uma saída é gerada, até que por fim todo o processo seja completo. Os computadores têm a capacidade de executar essas ações milhões de vezes e numa velocidade muito alta.
A partir de agora, veremos os diferentes tipos de porta, como funcionam suas entradas e saída e a forma que elas são representadas na tabela-verdade.
OR (OU)
A porta OR (ou) é um circuito que possui duas ou mais entradas e uma saída (Figura 14). Ela opera com a expressão booleana: x = A + B.
Como podemos ver na imagem, a tabela-verdade (a) mostra todas as possibilidades de acordo com a quantidade de entradas da porta. Por exemplo, vamos considerar que 0 é negativo e 1 positivo. Na linha 1, a entrada A e B são 0, dessa forma, a saída X também é 0. Na quarta linha a entrada, A possui 1 e a entrada B possui 0, dessa forma a, saída é positiva: 1.
AND (E)
A porta AND (e) possui duas ou mais entradas e uma saída (Figura 15). Diferentemente da porta OR, ela opera com a expressão booleana x = AB. 
Observe a Figura 15:
Figura 15. AND. Fonte: MOSS; TOCCI; WIDMER, 2011, p. 54.
A operação AND consiste no fato de que, se uma das entradas for zero, a saída será sempre zero. Veja que, na Figura 15, em todas as linhas em que existe uma entrada zero o resultado é zero.
NOT (NÃO) OU INVERSÃO
A porta NOT (não) também é conhecida pela inversão, além de possuir uma entrada. Ela opera com a expressão booleana:
Observando a Figura 16 podemos ver um círculo que representa a inversão, desta forma na, tabela-verdade notamos que quando A = 0, x = 1; e quando A =1, x = 0.
NAND
A porta NAND é representada pelo mesmo símbolo da porta AND, porém acrescentado de um círculo que significa inversão. Nesta operação, é utilizada a expressão booleana:
Vamos analisar a tabela-verdade na Figura 18: na primeira linha, temos as entradas A = 0 e B = 0. Na operação AND, o resultado é x = 0, porém com a inversão o resultado NAND é x = 1. Também podemos ver que na quarta linha as entradas são A = 1 e B = 1.Na operação AND, o resultado é x = 1, porém com a inversão, na tabela NAND, vemos x = 0.
NOR
Basicamente, o símbolo utilizado para porta NOR é o mesmo da porta OR acrescentado de um círculo que representa a inversão. Ela opera com a expressão booleana:
Isso significa que, primeiramente, é feita a operação OR e em seguida a operação de inversão.
Vamos analisar a tabela-verdade: na primeira linha, temos as entradas A = 0 e B = 0. Na operação OR, o resultado é x = 0, e após a inversão, a tabela NOR é x = 1.
Na quarta linha, temos as entradas A = 1 e B = 1. Na operação OR, o resultado é x = 1, mas após a inversão a tabela NOR mostra que x = 0.
XOR
Na porta XOR, a saída vai a nível alto sempre que uma entrada for diferente da outra. Esta operação usa a expressão booleana:
Observe a imagem a Figura 19:
Podemos ver na tabela-verdade da Figura 19, que sempre que os valores das entradas forem diferentes, a saída vai a nível alto. Na primeira linha, vemos as entradas A = 0 e B = 0 e na quarta linha as entradas A = 1 e B = 1, dessa forma, a saída em cada uma delas é x = 0. Na segunda e terceira linhas, os valores são diferentes. Na segunda linha, vemos as entradas A = 0 e B = 1 e na terceira linhas as entradas A = 1 e B = 0, dessa forma, a saída em ambas é x = 1.
SOMADOR
Você já aprendeu nesta Unidade como é feita a soma nos computadores usando números binários. A partir de agora, você vai ver o comportamento do computador durante esta operação utilizando o somador ou somadores.
Precisamos compreender que as operações realizadas pelos computadores ocupam espaço na memória. Se consideramos que determinada palavra possui 6 bits e ocorre um overflow, a memória precisa disponibilizar mais espaço para o bit a mais que será utilizado. Ou quando na soma existe um número que “sobra” e deve ser somado com os números da posição seguinte, este número que sobra precisa de um espaço na memória.
Como vimos anteriormente, a soma é feita sempre da direita para a esquerda, começando pelo LSB. Analisando a imagem acima, vemos que os dois números a serem somados estão posicionados um em cima do outro: primeira parcela e segunda parcela. Veja que a soma de 1 + 1 = 0, e sobra 1. Esta sobra é chamada de carry.
Para esta operação são utilizados 5 bits:
3 bits para a soma: carry, primeira parcela e segunda parcela;
2 bits para o resultado: resultado da soma e o carry.
Os circuitos lógicos possibilitam que este processo seja multiplicado, tornando-o mais rápido e eficaz. Este circuito é chamado de somador completo.
Esta operação usa a expressão:
Analisando a tabela-verdade de um circuito somador completo (Figura 22), temos as seguintes colunas:
A: refere-se aos bits da primeira parcela;
B: refere-se aos bits da segunda parcela;
Cin: refere-se ao carry;
S: refere-se à Saída;
Cout: refere-se à saída do carry (aquela que será somada com a posição seguinte).
Observe a Figura 23: o circuito lógico mostra os mecanismos de entrada e saída referentes à tabela-verdade da Figura 22. Podemos ver que, além das entradas A e B, existe também a entrada Cin referente ao carry da posição anterior. Vemos também que, além da saída S, temos a Cout referente ao valor que será somado juntamente com a próxima posição.
Simulador de circuitos lógico-digitais (software)
Existem dezenas de simuladores de circuitos digitais no mercado. Vamos utilizar aqui uma versão gratuita e on-line, a The Logic Lab, pois consideramos ser muito útil para sua prática.
O site possui dispositivos de entrada e saída, portas lógicas e outros itens para que você possa montar diversos circuitos;
Vamos fazer uma simulação: você lembra que a porta AND só tem uma saída em nível alto quando as duas entradas são iguais a 1? Vamos testar! Colocamos dois interruptores na entrada e um ventilador na saída. Imagine que, quando o interruptor está ligado, a entrada tem valor 1 e, quando está desligado, a entrada tem valor 0:
Podemos ver agora que mesmo se um dos interruptores for ligado, não ocorre o acionamento do ventilador;
Por fim, ao acionar os dois interruptores, o ventilador foi acionado. Conseguimos testar aqui o uso da porta AND;
A partir de agora, você pode utilizar o simulador da sua preferência para exercitar as operações e portas vistas nesta Unidade. Aproveite também para criar tabelas-verdade enquanto simula diversos circuitos lógico-digitais. 
Agora é a hora de sintetizar tudo o que aprendemos nessa unidade. Vamos lá?!
SINTETIZANDO
Nesta unidade, conseguimos alcançar os objetivos propostos e compreendemos como os computadores utilizam o sistema binário para realizar diversas operações, ao mesmo tempo que controla a quantidade de bits utilizados pela memória. Além disso, podemos perceber que a álgebra booleana é mais simples do que a álgebra convencional por trabalhar apenas com binários, e aprendemos o que são as tabelas-verdade.
Vimos também os diferentes circuitos lógicos e como eles são representados nas tabelas-verdade. E, por fim, utilizamos um simulador de circuito lógico-digital on-line e gratuito, plataforma esta que permitirá que o aluno realize diversas experiências e pratique os conhecimentos aprendidos.
UNIDADE 3.
Linguagens de máquina e de montagem, conjuntos de instruções e MIPS
Linguagem de máquina e linguagem de montagem (assembly language)
Os computadores possuem circuitos eletrônicos que enviam sinais elétricos ao receber e executar instruções. Para que estes sinais sejam interpretados pelo computador foram criados os programas de computadores.
Como sabemos, os computadores operam com sistema binário, pois este é o sistema que ele consegue compreender. Você pode imaginar, portanto, que, se todos os programas desenvolvidos fossem feitos apenas na linguagem que o computador consegue compreender, seria mais trabalhoso e até mesmo mais demorado.
Você pode estar se perguntando se existe mais de uma forma de criar programas para os computadores, e a resposta é: sim! Por isso, a partir de agora, você irá estudar a linguagem de máquina e a linguagem de montagem (assembly language) e entenderá como cada uma pode ser utilizada dentro da programação de computadores.
Antes de começar, vamos explicar o que significam alguns termos que utilizaremos bastante a partir de agora:
Opcode
Operação básica de instrução, cada instrução contém um um código único
Compilador
É o programa que transforma o código criado em linguagem-fonte (pode ser de alto nível) para a linguagem que o computador utiliza, isto é, código-objeto.
Depurador
Tem a função de testar (depurar) o programa e encontrar possíveis erros, auxiliando o programador a corrigi-los antes de finalizá-lo.
Montador
Programa que traduz a linguagem de montagem em linguagem de máquina
Linguagem-alvo
A linguagem convertida
Linguagem-fonte
A linguagem na qual o programa original foi escrito
LINGUAGEM DE MÁQUINA
A linguagem de máquina é a linguagem que o computador consegue compreender; é a linguagem operada pelo processador. Ela está mais próxima ao hardware e, para ser desenvolvida, o programador precisa ter um bom conhecimento da arquitetura do computador para que a sua capacidade seja bem aproveitada e custos sejam evitados.
A programação em linguagem de máquina é feita através de números binários e todo computador possui um conjunto de instruções (ISA – Instruction Set Architecture ou em português: Arquitetura do Conjunto de Instrução). 
Em linguagem de máquina, cada instrução é executada individualmente, ou seja, para cada instrução uma execução (processo 1 para 1). Essas instruções “nativas” podem ser substituídas por um novo conjuntode instruções de acordo com a necessidade, desenvolvido pelo programador.
Existem duas formas de substituir estas instruções, através das técnicas de tradução e interpretação (TANENBAUM; AUSTIN, 2013, p. 2):
Tradução: Nesta técnica, cada nova instrução é substituída por uma instrução equivalente do conjunto nativo. O novo programa é convertido para programa nativo para ser executado pelo computador e em seguida é descartado. Este novo programa é chamado de programa-objeto, que é lido e executado pelo computador;
Interpretação: No caso da interpretação, após cada instrução ser lida e decodificada já é executada, não havendo a tradução. Para executar este processo, é necessário um programa chamado interpretador.
Cada instrução na linguagem de máquina do processador é traduzida em uma sequência
de instruções da unidade de controle de baixo nível. Essas instruções de baixo nível são conhecidas como microinstruções e o processo de tradução conhecido como microprogramação (STALLINGS, 2010, p. 460).
LINGUAGEM DE MONTAGEM (ASSEMBLY LANGUAGE)
A linguagem de montagem tem como uma das suas principais características a facilidade ao programar. Enquanto na linguagem de máquina é necessário que o programador tenha um bom conhecimento sobre a arquitetura do computador e conheça os valores que utilizará em binário ou hexadecimal, na linguagem de montagem ele pode utilizar códigos muito mais simples de se decorar.
Por exemplo, para realizar soma, subtração, multiplicação e divisão, ele não precisa saber como representá-los em 0 e 1, podendo utilizar códigos como ADD, SUB, MUL e DIV.
Esta linguagem possui diversas vantagens, e uma delas é o acesso à máquina. Com este acesso o programador pode desenvolver programas menores que melhorem o desempenho
do computador.
A linguagem de montagem também pode ser usada em sistemas embarcados de pequeno a grande porte, que são sistemas menores desenvolvidos para uma função específica, como marca-passos, semáforos, satélites etc.
// Estrutura da linguagem de montagem
De acordo com Stallings, a estrutura da linguagem de montagem possui quatro elementos: rótulo, mnemônico, operando(s) e comentário. Vamos ver, a seguir, como funciona cada um deles:
Figura 1. Elementos da estrutura de montagem. Fonte: STALLINGS, 2010.
// Rótulo
Quando falamos em rótulo, do que você lembra? Você pode lembrar da etiqueta colada a um produto, que traz informações sobre ele. Na linguagem de montagem o intuito é o mesmo. Um rótulo pode ser utilizado para nomear uma instrução, um endereço ou outros dados, fazendo, assim, com que eles sejam localizados mais facilmente.
Vejamos um exemplo:
Como podemos ver na Figura 2, o trecho do programa descreve a ação de extrair informações de um registrador e armazenar em outro, e só saltar para o L2 se o resultado for positivo, ou seja, se o resultado for negativo, ele continua nesse loop até obter um resultado diferente. Para o programador, porém, não existem números, cálculos e símbolos; ele apenas utiliza os rótulos que condizem com as instruções que devem
ser utilizadas.
CITANDO 
“Se um rótulo direto é usado, ele é interpretado como endereço (ou offset) de dados. Se o rótulo é colocado dentro de colchetes, ele é interpretado como dado no endereço” (STALLINGS, 2010, p. 587).
// Mnemônico
Mnemônico é o nome dado a uma sentença de linguagem de montagem. Ele segue a lógica de que uma abreviação pode ser mais fácil para representar esta sentença do que ter que reescrevê-la sempre que necessário.
Ele pode nomear a função que será executada ou mesmo a operação.
// Operando(s)
Todas as operações dos computadores utilizam dados. Um operando é um valor utilizado por uma instrução, podendo ser um endereço, número, caractere ou dado lógico. Estudaremos este tema mais adiante.
// Comentário
A linguagem de montagem permite ao programador incluir comentários no seu programa. O comentário pode ser colocado após um comando ou em uma linha específica, e deve ser sinalizado por um caractere que indique que aquele conteúdo não deve ser executado.
// Sentenças da linguagem de montagem
Na linguagem de montagem, uma sentença é a ação que o programa deve executar com base em instruções definidas pelo programador. Por exemplo, em determinado trecho, o programa deve buscar determinado valor e só passar para o próximo passo ao encontrá-lo. Até a ação ser concluída ele deve ficar em um loop fazendo essa busca.
Dentro da linguagem de montagem, existem três tipos de sentenças: instrução, diretiva e definição de macro. Veja a seguir:
1
Instrução
As instruções são responsáveis por dizer ao computador o que deve ser feito. Quando desenvolvidas em linguagem de montagem, são traduzidas por um montador para linguagem de máquina, uma a uma. Isso significa que para cada instrução de linguagem de montagem existe uma para linguagem de máquina.
2
Diretiva
Diferente da instrução, a sentença diretiva não é traduzida para linguagem de máquina. Ela é responsável por dar as diretrizes para o montador realizar seus processos corretamente.
Observe a imagem a seguir:
Podemos ver na Figura 3 como a sentença dá ao montador as diretivas de como iniciar, copiar e armazenar. Mais uma vez, você pode compreender que através das sentenças não é necessário que o programador esteja sempre digitando textos e números gigantescos, mas usando abreviações para tal.
Vamos analisar mais um exemplo:
Observe na Tabela 1 (a) que cada letra faz referência a uma unidade. Na Tabela 1 (b), temos as diretivas que trazem estas unidades em forma de letra. Veja que, na primeira linha, temos DB, DW, DD, DQ e DT, que se referem a palavra dupla e têm sua descrição como Inicializa posições, definindo, assim, onde a palavra será inicializada.
3
Definição de macro
Macro é um trecho de um programa com um nome específico. Imagine que determinada ação deve ser executada diversas vezes, o que faria com que o programador tivesse que repetir aquele trecho do código pela quantidade de vezes necessária, tornando-o mais extenso. Com o uso da macro, o programador pode dar um nome a esse trecho e, sempre que a mesma sentença tiver que ser executada, ele inclui apenas o nome dado a ela.
Quando o programa chega no ponto da sentença que possui uma macro, ele faz um processo chamado de extensão de macro, que consiste em chamar aquele trecho da macro e incluí-lo na sentença.
EXPLICANDO
A programação em linguagem de montagem pode ser considerada mais difícil por muitos, porém, para programadores experientes, ela pode ser considerada melhor e mais fácil, pois permite que o profissional tenha acesso à arquitetura do computador. A única linguagem de nível alto que permite este acesso é a linguagem C.
Conjuntos de instruções
Um programa de computador é composto por diversas instruções, também chamadas de conjuntos de instruções. Estes conjuntos são o meio pelo qual o programador pode acessar e controlar o processador. Como já vimos nesta unidade, todo computador tem um conjunto de instruções original, mas outros conjuntos podem ser desenvolvidos com o intuito de alterar ou substituir o conjunto original.
A partir de agora, vamos compreender como funcionam estes conjuntos.
REPRESENTAÇÃO DAS INSTRUÇÕES
Um código de um programa pode ser escrito através de uma representação simbólica. Cada instrução possui uma sequência de bits, que podem ser divididos de acordo com os elementos que serão utilizados.
Veja o exemplo a seguir:
O formato mostrado na Tabela 2 não é obrigatório, pois os campos podem ser diferentes de acordo com a instrução. Os opcodes são representados por abreviações, chamadas mnemônicos, que indicam a operação.
Alguns exemplos comuns são (STALLINGS, 2010):
TIPOS DE INSTRUÇÕES
Temos os seguintes tipos de conjuntos de instruções:
Processamento de dados
São operações de processamento realizadas pela CPU, sejam operações lógicas ou aritméticas.
Armazenamento de dados
Dados podem ser armazenados tanto na memória quanto nos registradores, por isso existem instruções capazes de acessar estas informações durantea operação.
Movimentação de dados
São instruções de entrada e saída (E/S)
Controle
Teste e desvio
TIPOS DE OPERANDOS
Qualquer operação só pode ser realizada utilizando dados. Esses dados, porém, podem ser de diversos tipos, como podemos ver a seguir:
Endereços;
Números;
Caracteres;
Dados lógicos.
Vamos ver cada um desses tipos a partir de agora.
// Endereços
Podemos imaginar que, para realizar uma operação, são necessários mais de um endereço. Por exemplo, se a instrução solicitar a soma de dois números, podemos contar com um endereço (operando) para cada número e um endereço para o resultado.
A quantidade de operandos pode variar de acordo com as instruções, mas não é comum com menos de três. Veja o exemplo a seguir:
A quantidade de endereços deve ser definida no início do projeto. Devem ser levados em consideração a quantidade e o tamanho das instruções, e se elas deverão ter um endereço ou múltiplos endereços. Múltiplos endereços necessitam de múltiplos registradores de uso geral.
Veja a seguir mais um exemplo de instruções com um, dois e três operadores:
// Números
Sabemos que os computadores trabalham com sistemas binários, e a linguagem de máquina utiliza números até mesmo para operações não numéricas. Qualquer texto escrito em qualquer linguagem é traduzido para números binários para ser trabalhado pelo computador.
Diferentemente dos números decimais, que são infinitos, os computadores têm sua limitação. A memória do computador possui um limite, por isso é importante que ao desenvolver um programa essa questão seja levada em consideração. Situações como overflow, por exemplo, podem fazer diferença.
Vamos ver os principais tipos de dados numéricos utilizados pelos computadores:
Inteiros binários ou ponto fixo binário: Os números binários (0 e 1) podem ser inteiros ou utilizar um ponto fixo, para armazenar a parte fracionária do número;
Ponto flutuante binário: Números muito grandes podem não ter espaço suficiente para serem escritos por extenso, desta forma, é utilizado o ponto flutuante. A expressão usada neste caso é valor x 2^-mantissa;
Decimal: Não é utilizado na linguagem de máquina, mas é utilizado pelo usuário, portanto, precisa existir.
// Caracteres
Estamos acostumados a utilizar textos e símbolos quando utilizamos o computador (caracteres), mas sabemos que enquanto isso ele está trabalhando com números binários. Para simplificar este processo, foram criados diversos códigos para transformar estes caracteres em bits.
Um dos códigos mais utilizados atualmente é o ASCII, ou American Standard Code for Information Interchange. Neste código, cada caractere utiliza um padrão de 7 bits. Veja a seguir uma parte da tabela ASCII e analise como os caracteres são representados em decimal, binário e hexadecimal:
// Dados lógicos
Dados lógicos são utilizados para representar os valores 1 (verdadeiro) ou 0 (falso). Essa forma é chamada de visão orientada a bits, pois, neste caso, uma palavra ou unidade não é vista como uma unidade de dados, e sim como n bits, ou n itens de 1 bit que podem ter valor de 0 ou 1.
TIPOS DE OPERAÇÕES
Os computadores, em geral, utilizam os mesmos tipos de operações, que são:
Transferência de dados;
Aritmética;
Lógica;
Conversão;
E/S;
Controle do sistema;
Transferência de controle;
Registradores.
Vamos utilizar a Tabela 7 para analisar alguns desses tipos de operação:
// Transferência de dados
A operação de transferência de dados é uma das principais utilizadas pela máquina. Como o próprio nome diz, esta operação precisa transferir dados de um local para outro, desta forma, é necessário que sejam especificados os locais dos operandos, a extensão de dados e o modo de endereçamento para cada operando.
// Aritmética
Os computadores, em geral, têm a capacidade de realizar operações aritméticas básicas, utilizando números inteiros com sinal (ponto fixo), mas também números de ponto flutuante e decimal agrupado.
Existem, também, operações para instruções de um único operando (STALLINGS, 2010):
Absolute
Apanha o valor absoluto do operando
Negate
Inverte o sinal do operando
Increment
Soma 1 ao operando
Decrement
Subtrai 1 do operando
// Lógica
As operações lógicas têm como principal vantagem ser aplicadas bit a bit. Entre as principais operações lógicas temos: NOT (inversão), AND (e), OR (ou) e XOR. Veja o exemplo a seguir:
As colunas P e Q contêm os valores 0 ou 1; as demais colunas contêm as operações e seus resultados. Por exemplo, na coluna NOT P, sabemos que a operação NOT inverte os valores, logo, onde o valor de P é 0, este se torna 1, e vice-versa.
As operações lógicas também permitem o deslocamento de bits para a direita ou para a esquerda. Este processo é chamado de deslocamento lógico.
// Conversão
A operação de conversão pode ser executada para converter códigos de determinado tamanho para outro e de determinada numeração para outra, por exemplo. Uma das conversões que mais temos falado nesta unidade é a que o computador utiliza para transformar números decimais e textos em números binários.
// E/S (Entrada e Saída)
Os dispositivos de E/S precisam se comunicar com o processador o tempo todo. O módulo da E/S consegue controlar o fluxo de dados através de uma função chamada controle e temporização.
Operações de E/S podem ser executadas com o mínimo de envolvimento da CPU. Neste caso, o processador é responsável por enviar dados para a E/S através de linhas de controles (ou barramentos). Essas informações ficam armazenadas em um buffer, ou mesmo em um registrador da E/S, e podem ser executadas pelo próprio módulo, que faz a interface com os dispositivos externos.
Dentro do módulo de E/S, cada item possui um endereço, desta forma, se houver diversos dispositivos externos, cada um deles terá um endereço também.
Veja a seguir como é a estrutura de um módulo E/S:
// Controle do sistema
Os processadores conseguem operar em modo usuário ou em modo supervisor, também chamado de modo privilegiado. Esse segundo modo permite a execução de processos que não estão disponíveis no modo usuário, e também a execução de programas que precisem executar todas as instruções do computador.
// Transferência de controle
As operações de transferência de controle são extremamente úteis para a organização dos sistemas. Sabemos que as instruções iniciam a partir de um ponto e, ao finalizar, o processador já possui a informação da próxima instrução a ser executada.
Muitas instruções são utilizadas diversas vezes, desta forma a transferência de controle é necessária para que a sequência de instruções seja alterada sempre que necessário.
REGISTRADORES
Existem registradores visíveis ao usuário e de controle e estado. Os registradores visíveis ao usuário são acessíveis ao programador, que pode definir alterações para otimizar o seu uso.
Apesar de não executar operações diretamente, os registradores conseguem armazenar as últimas instruções executadas e outros dados importantes.
Instruções de linguagem de montagem MIPS
A linguagem de montagem trabalha com conjuntos de instruções responsáveis por diversas ações. Entre elas temos: Carga, Aritméticas, Lógicas, Operandos Imediatos, Transferência de Dados e Desvios.
Vamos ver a seguir como se comporta cada um destes tipos de instruções:
CARGA
Para que a carga seja realizada, primeiramente é feita a leitura do cabeçalho do arquivo executável para a identificação do tamanho dos dados. Posteriormente, esses dados são copiados para um espaço endereçado e para a pilha de argumentos transmitidos ao programa.
Os registradores são inicializados e ocorre o desvio dos argumentos para a pilha de rotina, que é responsável também por chamar a rotina principal do programa (HENNESSY; PATTERSON, 2005).
ARIMÉTICAS
Sabemos que as operações aritméticas utilizam abreviaturas, como por exemplo ADD (soma), SUB (subtração), MUL (multiplicação) e DIV (divisão). Veja como são realizadas as operações aritméticas na linguagem de montagem do MIPS:
Soma ADD a, b, c: Esta sentença determina a soma de b + c e o resultado deveser armazenado em a. Se houver mais variáveis, o computador segue a mesma lógica, somando e armazenando em a. Por exemplo, se a sentença for ADD a, b, c, d, o computador faz o seguinte cálculo:
ADD, a, b, c
ADD, a, d
Subtração SUB a, b, c: Subtrai os valores de b e c e guarda no registrador a;
Multiplicação MUL a, b, c: Multiplica os valores de b e c e guarda no registrador a;
Divisão DIV a, b, c: Divide os valores de b e c e guarda no registrador a.
LÓGICAS
Vimos nesta unidade como funcionam as operações lógicas e as principais instruções utilizadas. Veremos, agora, mais algumas instruções e como operar cada uma delas:
OPERANDOS IMEDIATOS
Um operando imediato também pode ser chamado de constante. Para adicionar uma constante a uma operação aritmética você pode utilizar o termo ADDI e assim reduzir o tamanho do código. 
Veja a diferença no exemplo a seguir, onde a sentença é a soma da constante 4 ao registrador $s3 (a) e a escrita correta considerando o operando imediato (b):
TRANSFERÊNCIA DE DADOS
Para a transferência de dados entre memória/registrador ou registrador/memória é necessário que cada operando seja devidamente especificado na instrução. O tamanho dos bits a serem transferidos também deve ser especificado no projeto.
Observe o exemplo a seguir:
A tabela 10 mostra, na primeira coluna, o mnemônico de cada operação, bem como os nomes na segunda coluna. Podemos ver também o número de bits transferidos e a descrição de cada operação.
// Desvios
Falamos sobre a necessidade de utilizar uma instrução por diversas vezes. As instruções seguem uma sequência automática de execução e, para ler uma instrução em outro local, é necessário o desvio.
Para que isso seja possível, é utilizada a instrução de desvio, ou instrução de salto, que possui o endereço da próxima instrução a ser executada, diferente da sequência automática.
Existem dois tipos de desvios:
Incondicional
Não contém nenhuma condição, o salto é sempre tomado
Condicional
Contém uma condição para que ocorra o salto para o endereço, se não, continua na sequencia automática.
Simulador de linguagem de montagem MIPS (software)
Simuladores são extremamente importantes para um melhor aprendizado, pois com esta ferramenta você aprende de forma prática e pode treinar quantas vezes quiser. Agora, iremos simular a linguagem de montagem MIPS usando o simulador SPIM.
Existem diversos simuladores no mercado e você pode escolher o que mais lhe agradar.
Primeiramente, vamos conhecer a interface do simulador SPIM:
O simulador SPIM possui uma interface de fácil compreensão. Numa visão geral, podemos ver quatro espaços horizontais utilizados para as seguintes informações:
Mostra todos os registradores, inclusive os registradores de ponto flutuante
Exibe diversas mensagens, como informações e status
Mostra o conteúdo da memória do SPIM e seus endereços
Exibe o código que foi carregado no SPIM e mostra informações como endereço da instrução, valor em hexadecimal, instrução em linguagem de montagem e o código original.
Para carregar um programa no simulador, é preciso que ele esteja salvo com a extensão .asm. Na nossa simulação, salvamos o arquivo como Simulação.asm:
Vamos começar a escrever o nosso código. Usaremos como base o texto a seguir para todos os testes que vamos realizar, mudando apenas o conteúdo da linha “código”:
globl_start
_start:
Main:
(código)
syscall
No Bloco de Notas já salvo com a extensão correta, vamos digitar o seguinte código:
Nas três primeiras linhas, é feita a soma das constantes com o conteúdo do registrador e o resultado é armazenado no próprio registrador.
Na quarta linha, temos uma subtração do conteúdo de $s1 e $s0 e o resultado deve ser armazenado em $t0.
Na quinta linha, temos uma soma dos conteúdos de $s2 e $t0 e o resultado deve ser armazenado em $t0.
Por fim, temos uma subtração de $t0 e $s0 e o resultado deve ser armazenado em $s2.
Vamos carregar o arquivo Simulação.asm no SPIM clicando em File > Open e escolhendo o local e o arquivo.
Note que, quando o arquivo for carregado, o código aparecerá no SPIM, mas não há ainda nenhuma alteração no registrador, pois a simulação não foi executada:
Agora, vamos executar a simulação clicando em Simulator > Go.
Como vemos na Figura 11, nossa simulação foi executada corretamente e todos os números correspondem ao código digitado.
A utilização de simuladores é muito importante, pois é a forma mais próxima da programação real, por isso, escolha um simulador de sua preferência e bom trabalho!
Agora é a hora de sintetizar tudo o que aprendemos nessa unidade. Vamos lá?!
SINTETIZANDO
Conseguimos alcançar os objetivos desta unidade de nos aprofundar melhor na linguagem de montagem de máquina MIPS e compreender as instruções e operações e conseguimos simular operações de adição e subtração no simulador SPIM.
Esperamos que você leia este material por diversas vezes e coloque em prática o que aprendeu, propondo-se a realizar diversas simulações para que o aprendizado seja ampliado pela prática.
Unidade 4 – Organização de memória interna e externa, periféricos, multiprocessadores e multicomputadores
Organização da memória
A cada dia a capacidade dos computadores de processar e armazenar dados aumenta. Por isso, desde o computador que você utiliza em casa e no escritório até os supercomputadores usados nos campos de pesquisas científicas e em diversas áreas têm algo em comum: precisam ter uma organização que favoreça e otimize seus processos.
Neste capítulo vamos abordar o tema memória. Lembre-se que sempre que falarmos sobre memória estaremos falando de hardware, ok? Vamos lá!
HIERARQUIA DA MEMÓRIA
O computador possui diversos tipos de memórias em seu conjunto, cada uma realizando uma função diferente. Temos memórias menores com menor capacidade de armazenamento, mas com alta velocidade e, consequentemente, mais caras. Temos também as memórias com maior capacidade de armazenamento e menor velocidade de acesso, que custam bem menos.
Existem também memórias externas, ou memórias auxiliares, que o usuário pode utilizar para aumentar a capacidade de armazenamento do computador ou mesmo para manter seus arquivos disponíveis em outro local.
Veremos agora a organização das seguintes memórias:
· Registradores;
· Cache;
· Memória principal;
· Memória secundária
Vamos analisar a hierarquia de memória em pirâmide:
 Na pirâmide, as memórias estão organizadas de cima para baixo de acordo com três importantes itens:
- Velocidade de acesso;
- Capacidade de armazenamento;
- Custo por bit.
As memórias na parte de cima da pirâmide possuem alta velocidade de acesso. São estes os locais onde o processador faz buscas em primeiro lugar, e só vai para os outros módulos se a busca não for positiva. Estas memórias possuem pouco espaço, mas têm um custo mais elevado, o chamado custo por bit.
Descendo na pirâmide, aumenta a capacidade de armazenamento das memórias, porém diminui a velocidade de acesso. Na parte de baixo da pirâmide as memórias possuem um custo por bit mais baixo.
Podemos concluir que:
Memórias com maior velocidade = maior custo por bit;
Memórias com maior capacidade de armazenamento = menor custo por bit.
// Registradores
No topo da pirâmide, ou seja, na primeira linha, temos os registradores. Essas memórias ficam dentro da CPU e, por isso, sua velocidade de acesso é extremamente rápida. Por estarem dentro de um módulo dentro de um chip, são pequenas e possuem uma limitada capacidade de armazenamento, por mais que muitas vezes existam centenas de registadores em um processador.
Devido a sua alta velocidade de acesso, esse é um tipo de memória com um custo por bit muito alto.
// Cache
Na segunda linha da pirâmide temos a memória cache, que possui alta velocidade e uma capacidade de armazenamento maior que os registradores, tendo, assim, um custo alto em relação às memórias mais abaixo da pirâmide.
A memória cache armazena informações muito utilizadas pelo processador, então, antes de buscar determinada informação na memória principal, o processadorbusca na memória cache. Se a informação for localizada, sua leitura é imediata, porém, se não for localizada, a busca passa a ser feita na memória principal, que copia um bloco de informações para a cache e por mim é feita a leitura pela CPU. Este processo é mais lento do que a leitura direta do cache.
A memória cache fica entre a CPU e a memória principal, podendo ter somente um nível ou três (L1, L2 e L3). A velocidade de acesso desses níveis vai diminuindo conforme o distanciamento da CPU, como podemos ver na Figura 2:
Na organização de cache única, o processador procura a informação na cache e, se não localizar, é transferido um bloco de informações da memória principal para a cache (processo mais lento) e só então as informações são lidas pelo processador.
Na organização de cache em três níveis, o processador busca a informação no primeiro nível da cache (L1 – processo mais rápido). Se ele não localiza a informação, passa a buscar no segundo nível da cache (L2 – processo rápido). Se ainda assim não localizar, ele busca no terceiro nível da cache (L3 – processo menos rápido). Por fim, se a informação não estiver em nenhum dos níveis da cache, é feita a busca na memória principal 
(processo lento).
// Memória principal
A memória principal é responsável por armazenar informações enquanto o computador realiza suas operações. Essa memória é mais lenta que a cache e não pode ser acessada pelo usuário, é utilizada diretamente pelo processador. Algumas memórias primárias são voláteis, ou seja, perdem as informações quando a energia é desligada. Temos o exemplo da memória RAM (Random Access Memory), que pode ser de dois tipos diferentes:
1
SRAM (Static Random Access Memory): memória estática, volátil, perde as informações quando a energia é desligada. Memória rápida;
2
DRAM (Dynamic Random Access Memory): memória dinâmica, mais complexa e mais lenta que a SRAM. Essa memória precisa que a informação seja atualizada constantemente para que permaneça armazenada.
· 
CITANDO
“O projeto de um sistema de memória principal é uma batalha sem fim entre três requisitos de projeto concorrentes: grande capacidade de armazenamento, acesso rápido e baixo custo. Com a evolução da tecnologia de memória, cada uma dessas três características está mudando, de modo que as decisões de projeto na organização da memória principal devem ser revisadas novamente a cada nova implementação.” (STALLINGS, 2010, p. 47).
A memória cache e a memória principal possuem estruturas diferentes.
// Memória secundária
Na base da pirâmide temos as memórias secundárias, que são acessíveis ao usuário. Já imaginou se o local onde você salva seus trabalhos escolares, fotos de família e suas músicas preferidas perdesse essas informações sempre que a energia fosse desligada? Isso não ocorre porque as memórias secundárias não são voláteis, você pode deixar as informações salvas lá o tempo que precisar.
A memória secundária não faz parte dos itens de processamento do computador. Para que suas informações sejam lidas, são copiadas para a memória principal do computador.
Existem diversos tipos de memória secundária, veja abaixo alguns exemplos:
· HD interno;
· HD externo;
· Pen drive;
· Cartão de memória;
· CD-ROM, DVD-ROM, Blu-ray;
· Disquete;
· Fita magnética. 
Memória auxiliar
Como vimos no item anterior, existem diversos tipos de memória secundária, e entre os citados existem aqueles que não fazem parte da estrutura do computador. Por exemplo, um HD interno faz parte da estrutura, já vem instalado de fábrica no micro; já o HD externo não faz parte desse conjunto.
Pen drives, cartões de memória, mídias de CD ou DVD-ROM também são memórias auxiliares. A leitura dos dados desses itens é feita normalmente, porém passa pelo módulo de E/S. Existem diversas vantagens em utilizar estes itens, veja alguns exemplos:
O usuário pode manter um backup dos dados do computador;
Informações importantes para o usuário podem estar sempre à mão, sendo levadas para onde ele precisar;
Com as impressoras que leem USB, já é possível imprimir um documento sem utilizar o computador;
Podem ser usados em outros equipamentos, como TVs, aparelhos automotivos e em diversos itens que compõem a chamada “internet das coisas”.
Existe uma infinidade de itens que aceitam este tipo de memória, mas citamos aqui alguns exemplos para você compreender melhor.
DISPOSITIVOS DE ARMAZENAMENTO
A seguir, observe os tipos de dispositivos de armazenamento utilizados.
// Disco magnético
Essa tecnologia consiste em um disco de alumínio revestido por material magnético que contém uma bobina denominada “cabeça de gravação”. Através de pulsos elétricos positivos ou negativos é criado um campo magnético que possibilita ao cabeçote gravar ou ler bits.
Como o disco é circular, uma volta completa é chamada trilha, e cada trilha é dividida em setores. O disco também contém uma parte chamada preâmbulo, que é um espaço que indexa os dados que serão lidos.
Discos magnéticos podem conter mais de um prato, sendo que cada lado é considerado uma superfície e para cada superfície contém um cabeçote:
EXPLICANDO
Os discos magnéticos podem parecer extremamente sensíveis por terem um cabeçote muito próximo à superfície fazendo a leitura e a gravação de dados. Na verdade, hoje em dia já existe a tecnologia antiqueda, que evita muitos danos ao disco e, mesmo que ocorram danos maiores, em muitos casos é possível recuperar os dados com o trabalho de um perito forense computacional. Se em um caso de investigação um suspeito atear fogo ao computador, ou mesmo em casos de desastres, como desabamentos, pode ser possível retirar os discos e recuperar os dados, ou pelo menos parte deles.
// Disco óptico
Um disco óptico é um disco de formato circular que pode armazenar diversos tipos de arquivos. Tanto a gravação quanto a leitura nesse tipo de mídia são feitas através de laser.
Algumas mídias que usam essa tecnologia são: CD-ROM, CD-R (regravável), DVD-ROM e DVD-R (regravável), e nem todos os drives que leem essas mídias são capazes de fazer gravações.
Estamos acostumados a utilizar essas mídias, pois elas se popularizaram através da venda de CDs e DVDs de música, filmes, séries, cursos e muito mais. Mesmo com o surgimento de equipamentos que fazem leituras direto de cartões de memória e pen drives, as mídias de CD continuam sendo usadas pela indústria do cinema e do entretenimento como meio de vender suas produções. Essas mídias são encontradas para venda nas mais diversas lojas físicas e on-line, e as mídias em branco ou regraváveis são muito utilizadas pelos usuários para guardar diversos materiais, como fotos e vídeos de formatura, por exemplo. 
Discos ópticos não perdem as informações com o tempo e por isso ainda são tão utilizados.
// RAID
A tecnologia RAID (Redundant Array of Independent Disks) é mais utilizada quando há necessidade de grande desempenho, como no caso de servidores, por exemplo. Ela consiste na utilização de diversos discos de armazenamento independentes, mas de forma paralela.
Fisicamente são diversos discos, mas sistemicamente é apenas uma unidade de armazenamento. Esses discos são organizados em níveis; observe a Tabela 1 para compreender como funciona cada um deles:
DICA
Você sabia que no Brasil existem diversos museus de tecnologia e computação? Você pode ver a evolução dos computadores, inclusive a evolução das memórias de armazenamento, e perceber o quanto diminuíram de tamanho ao longo dos anos. O Portal do Instituto Brasileiro de Museus pode te ajudar a pesquisar o museu mais próximo a você.
Acessando periféricos
ENTRADA E SAÍDA (I/O)
Computadores não são máquinas fechadas que não se comunicam com outros equipamentos. Pelo contrário, através dos dispositivos de entrada e saída (E/S) é possível ampliar a capacidade do computador de realizar as mais diversas atividades. Um ótimo exemplo para compreendermos é a impressora; o computador por si só não tem a capacidade de imprimir, não possui espaço para colocarmos papel ou as tintas, mas através da E/S pode

Outros materiais