ORGANIZAÇÃO DE COMPUTADORES
autor do original
MARCO FÁBIO POLLI
1ª edição SESES rio de janeiro 2015
Conselho editorial fernando fukuda, simone markenson, jeferson ferreira fagundes Autor do original marco fábio polli Projeto editorial roberto paes Coordenação de produção rodrigo azevedo de oliveira Projeto gráfico paulo vitor bastos Diagramação fabrico Revisão linguística aderbal torres bezerra Imagem de capa nome do autor — shutterstock
Todos os direitos reservados. Nenhuma parte desta obra pode ser reproduzida ou transmitida por quaisquer meios (eletrônico ou mecânico, incluindo fotocópia e gravação) ou arquivada em qualquer sistema ou banco de dados sem permissão escrita da Editora. Copyright seses, 2015.
Dados Internacionais de Catalogação na Publicação (cip) P771o
Polli, Marco Organização de computadores / Marco Polli. Rio de Janeiro: SESES, 2014. 128 p. : il. ISBN 978-85-60923-49-6 1.Ciências da computação. 2. Organização de computadores.
3. Arquitetura de computadores. 4. Processamento. I. SESES. II. Estácio CDD 004.22
Diretoria de Ensino — Fábrica de Conhecimento Rua do Bispo, 83, bloco F, Campus João Uchôa Rio Comprido — Rio de Janeiro — rj — cep 20261-063
Sumário Prefácio 5
1. Processamento de Dados e Estrutura Básica do Computador Organização e arquitetura de computadores Processamento de dados, Informação e Conhecimento Breve histórico dos computadores Visão geral do computador pessoal Elementos Básicos da Arquitetura de Von Neumann Construção de algoritmos simples
2. Representação de Dados Elementos binários fundamentais: bits, bytes e words. Bases numéricas Representação de caracteres Tipos de dados e uso de variáveis em algoritmos
8 9 9 12 19 22 25
34 34 38 44 46
3. Álgebra Booleana e Operações Lógicas em Algoritimos 56 Álgebra booleana Portas lógicas Operações aritméticas e lógicas em algoritmos
57 64 65
4. Instruções e Processamento Componentes fundamentais para o processamento Instruções de computador Aspectos de arquitetura nos computadores pessoais
5. Memória e Dispositivos de Entrada e Saída
78 78 80 85
98
Memória 99 Dispositivos de entrada e saída E/S 110 Tipos de Computadores 111
Prefácio Prezados(as) alunos(as) No fim da década de 1970, os computadores pessoais começam a ser introduzidos no mercado. Ferramentas de processamento de dados que antes eram apenas disponíveis para grandes empresas, por meio de máquinas que ocupavam salas inteiras, passaram a estar em cima da mesa dos escritórios e das casas das pessoas. Só esse desenvolvimento já seria suficente para mudar a nossa sociedade, mas a história não parou aí. A interligação desses computadores e dos servidores na internet, transformou a maneira com que as pessoas se comunicam, compram, se divertem e criam. Por fim, o próprio computador pessoal deixou de ser o centro desse modo de vida, com smartphones, tablets e dispostivos que ainda estão sendo criados. Em sua história, os computadores mostraram ser uma base de inovações contínuas e de uso criativo, uma história que ainda continua e podemos influenciar. Para tanto, devemos conhecer como os computadores funcionam e são organizados. Esse conhecimento é essencial tanto para o desenvolvimento de hardware, de software ou mesmo para se fazer um bom uso dessa tecnologia.Com essa preocupação, o conteúdo da disciplina é organizado do seguinte modo: • Capítulo 1 – Entenderemos o que é processamento de dados e o funcionamento básico de um computador. • Capítulo 2 – Será explicada a linguagem binária. • Capítulo 3 – Entenderemos a álgebra booleana e a sua implementação em algoritmos simples. • Capítulo 4 – Veremos com mais detalhes como o computador trata dados e instruções na Unidade Central de Processamento. • Capítulo 5 – Exploraremos os tipos de memória e suas inter-relações. Bons estudos!
6
1 Processamento de Dados e Estrutura Bรกsica do Computador
1 Processamento de Dados e Estrutura Básica do Computador Computadores não se limitam aos notebooks e aos desktops nos escritórios, eles estão nos equipamentos médicos, carros, aparelhos de TV, celulares e em simples brinquedos. É impossível dissociar a computação do nosso estilo de vida. Porém, são poucas pessoas que de fato entendem como funciona um computador e como dados são processados. Esse conhecimento é importante para que os computadores e seu modo de usar continuem a se desenvolver. Aqui vamos descrever os elementos básicos de computação e sua história, servindo de base para os demais capítulos da disciplina. Vamos entender o conceito de dados e seu processamento. Um breve panomora da trajetória histórica dos computadores será apresentado para que depois discutamos a arquitetura da Von Neumann. Dessa forma, teremos uma visão fundamental sobre o funcionamento do computador.
OBJETIVOS • Compreender a diferença entre organização e arquitetura de computadores. • Dominar o conceito de dados e do seu processamento. • Entender a trajetória de evolução dos seus computadores e seus tipos principais. • Identificar as partes principais de um computador segundo a arquitetura de Von Neumann.
REFLEXÃO Você já deve ter visto diversos filmes e artigos que discutem o tema da inteligência artificial. Seria possível mesmo que computadores sejam inteligentes? Eles poderiam ter vontade ou consciência? Ao ler esse capítulo, busque refletir sobre o que um computador pode ou não fazer, relembrando as obras de ficção e opiniões sobre o assunto.
capítulo 1
•9
1.1 Organização e arquitetura de computadores A organização dos computadores trata da estrutura dessas máquinas, preocupando-se com circuitos, tipos de memória e demais componentes físicos usados, como os periféricos. Ou seja, busca-se saber como se dá o funcionamento do computador. Já a arquitetura dos computadores fornece elementos críticos a serem usados pelo programador: dados e suas representações, operações lógicas e rotinas, etc. Por isso, a da descrição da arquitetura possui uma natureza mais abstrata. Devido à importância de se integrar conhecimento de hardware e software, esta disciplina cobrirá aspectos tanto de organização quanto arquitetura, seguindo o caminho de obras de referência na área (NULL & LOBUR, 2010; MURDOCA & HEURING; 2000; STALLINGS, 2002; MONTEIRO, 2007). Por mais simples ou complexa que seja a estrutura de um computador, a sua função básica é o processamento de dados. A seguir, vamos discutir qual é o significado dessa atividade e a sua relação com o conhecimento.
1.2 Processamento de dados, Informação e Conhecimento Vamos discutir um pouco esses conceitos e as diferenças entre eles? A seguir, apresento trechos da definição dada pelo professor Dr. Valdemar W. Setzer, disponibilizada em: <http://www.ime.usp.br/~vwsetzer/dado-info.html>. Segundo o professor Dr. Valdemar Setzer, podemos dizer que dado é: [...] uma sequência de símbolos quantificados ou quantificáveis. Portanto, um texto é um dado. De fato, as letras são símbolos quantificados, já que o alfabeto, sendo um conjunto finito, pode por si só constituir uma base numérica (a base hexadecimal emprega tradicionalmente, além dos 10 dígitos decimais, as letras de A a E). Também são dados fotos, figuras, sons gravados e animação, pois todos podem ser quantificados a ponto de se ter eventualmente dificuldade de distinguir a sua reprodução, a partir da representação quantificada, com o original. É muito importante notar-se que, mesmo se incompreensível para o leitor, qualquer texto constitui um dado ou uma sequência de dados [...]. (SETZER)
Segundo o Dr. Setzer, o dado é uma entidade matemática puramente sintática, ou seja, os dados podem ser descritos por estruturas de representação. Assim sendo, podemos dizer que o computador é capaz de armazenar dados.
10 •
capítulo 1
Esses dados podem ser quantificados, conectados entre si e manipulados pelo Processamento de Dados. Podemos definir dado também como unidades básicas a partir das quais as informações poderão ser elaboradas ou obtidas. São fatos brutos, ainda não organizados nem processados. Já a informação seria: [...]umaabstraçãoinformal(istoé,nãopodeserformalizadaatravésdeumateorialógicaoumatemática),queestánamentedealguém,representandoalgosignificativoparaessapessoa.Note-se que isto não é uma definição, é uma caracterização, porque “algo”, “significativo” e “alguém” não estão bem definidos; assumo aqui um entendimento intuitivo (ingênuo) desses termos. Por exemplo, a frase “Paris é uma cidade fascinante” é um exemplo de informação – desde que seja lida ou ouvida por alguém, desde que “Paris” signifique para essa pessoa a capital da França (supondo-se que o autor da frase queria referir-se a essa cidade) e “fascinante” tenha a qualidade usual e intuitiva associada com essa palavra.
Assim, a informação depende de algum tipo de relacionamento, avaliação ou interpretação dos dados. Veja também que informação e dado mantêm relações: [...] Se a representação da informação for feita por meio de dados, como na frase sobre Paris, pode ser armazenada em um computador. Mas, atenção, o que é armazenado na máquina não é a informação, mas a sua representação em forma de dados. Essa representação pode ser transformada pela máquina, como na formatação de um texto, o que seria uma transformação sintática. A máquina não pode mudar o significado a partir deste, já que ele depende de uma pessoa que possui a informação. Obviamente, a máquina pode embaralhar os dados de modo que eles passem a ser ininteligíveis pela pessoa que os recebe, deixando de ser informação para essa pessoa. Além disso, é possível transformar a representação de uma informação de modo que mude de informação para quem a recebe (por exemplo, o computador pode mudar o nome da cidade de Paris para Londres). Houve mudança no significado para o receptor, mas no computador a alteração foi puramente sintática, uma manipulação matemática de dados. Assim, não é possível processar informação diretamente em um computador. Para isso é necessário reduzi-la a dados. No exemplo, “fascinante” teria que ser quantificado, usandose por exemplo uma escala de zero a quatro. Mas então isso não seria mais informação [...].
capítulo 1
• 11
Podemos agrupar dados isolados e torná-los consistentes ao se transformarem em informações. Por exemplo, se tivermos um conjunto de dados que descreva a temperatura do ambiente num local, horário e data, poderíamos ter a seguinte relação:
15h10 3 de fevereiro
ADAPTADO DE (CÔRTES, 2008)
Em Ribeirão Preto, SP, no dia 3 de fevereiro, às 15h10 estava uma temperatura de 24°. Processamento
Entrada
Classificar
Saída
(Dados)
Filtrar
(Informações)
Organizar 24°
Ribeirão Preto- SP
Figura 1 - Geração de informações a partir do processamento de dados.
Assim, o conjunto de dados inicial foi organizado de maneira que “faça sentido” àqueles que o estiverem lendo. Isto os torna informação. No entanto, a representação no computador é feita baseada nos dados. E como fica o conhecimento? Caracterizo Conhecimento como uma abstração interior, pessoal, de algo que foi experimentado, vivenciado, por alguém. Continuando o exemplo, alguém tem algum conhecimento de Paris somente se a visitou.
Desta maneira, o conhecimento precisa ser descrito por informações.
12 •
capítulo 1
[...] A informação pode ser inserida em um computador por meio de uma representação em forma de dados (se bem que, estando na máquina, deixa de ser informação). Como o conhecimento não é sujeito a representações, não pode ser inserido em um computador. Assim, neste sentido, é absolutamente equivocado falar-se de uma “base de conhecimento” em um computador. O que se tem é, de fato, é uma tradicional “base (ou banco) de dados”. Um nenê de alguns meses tem muito conhecimento (por exemplo, reconhece a mãe, sabe que chorando ganha comida etc.). Mas não se pode dizer que ele tem informações, pois não associa conceitos. Do mesmo modo, nesta conceituação não se pode dizer que um animal tem informação, mas certamente tem muito conhecimento. [...]
A informação, segundo o Dr. Setzer, associa-se à semântica, enquanto o conhecimento está associado à pragmática, ou seja, algo existente no mundo real.
CONEXÃO Recomendações 1.3 Leia na íntegra o artigo do Dr. Setzer em: <http://www.ime.usp.br/~vwsetzer/dado-info.html>. Acesso em: 24 jul. de 2014.
1.3 Breve histórico dos computadores Um dos pontos interessantes na história do surgimento dos computadores foi a rápida evolução das tecnologias utilizadas para sua produção. O primeiro computador de grande porte a usar eletrônica digital foi o ENIAC (Electrical Numerical Integrator and Calculator). Ele era de grande porte, devido à quantidade de cálculos que ele era capaz de realizar: cerca de 5 mil somas ou 360 multiplicações por segundo (muito pouco comparado à capacidade de nossos computadores atuais).
capítulo 1
• 13
WIKIMEDIA
Figura 2 – ENIAC (Parte dele, na verdade, pois aqui vemos sua interface de operação.)
O ENIAC começou a ser desenvolvido por John Eckert e John Mauchly. O desenvolvimento iniciou-se em 1943, com financiamento militar, para ser usado na Segunda Guerra Mundial, mas só se tornou operacional em 1946. Tinha cerca de 30 toneladas e ocupava 180 m2 de área. Em 1944, juntou-se ao grupo de pesquisadores o engenheiro John Von Neumann. Este criou a arquitetura (chamada de arquitetura de Von Neumann) que é usada até hoje nos computadores comerciais. WIKIMEDIA
Figura 3 – O ENIAC numa visão mais ampla
14 •
capítulo 1
WIKIMEDIA
O ENIAC não tinha sistema operacional e todas as operações eram inseridas diretamente na máquina usando códigos numéricos. Foi produzido usando a tecnologia de válvulas a vácuo, que foi a tecnologia inicial para computadores eletrônicos. Por isto, ele é o marco da Primeira Geração de Computadores. O problema das válvulas era o custo alto para manutenção. Para você ter uma ideia, o ENIAC foi construído usando mais de 17 mil válvulas e gastava mais de 200.000 watts, aquecendo muito! As válvulas eletrônicas possuíam o tamanho aproximado de uma lâmpada elétrica. A era da computação comercial iniciou-se no ano de 1951, quando o UNIVAC (Universal Automatic Computer) foi entregue ao primeiro cliente: o escritório do Censo do Estados Unidos para tabulação dos dados do censo do ano Figura 4 – Foto de uma válvula anterior. Pode-se dizer que o UNIVAC foi o resultado de modificações positivas no ENIAC. eletrônica ANNEDAVE / DREAMSTIME.COM
Figura 5 – Foto de um transistor simples
Em 1947, os cientistas John Bardeen, Walter H. Brattain e William Shockley desenvolveram o transistor. O transistor é um pequeno dispositivo que transmite sinais eletrônicos usando um resistor. Os transistores revolucionaram a eletrônica e a maneira de construir computadores. Além de serem muito menores do que as válvulas, consumiam muito menos energia e geravam menos calor. Também eram mais rápidos e mais confiáveis do que as válvulas. Um novo avanço, nesta
mesma época, foi a criação de uma linguagem simbólica para manipular instruções das máquinas em vez de códigos numéricos, e isto tornou um pouco capítulo 1
• 15
menos ardil a tarefa de criar programas para os computadores. Depois das linguagens assembly (as linguagens simbólicas), surgiram as linguagens de “mais alto nível”, como Fortran e COBOL. São linguagens com comandos em inglês, em vez de símbolos e marcações como nas linguagens assembly. E esta foi chamada a segunda geração dos computadores. Nesta época, os computadores ainda não atingiam as pessoas “comuns” da sociedade, sendo usados apenas por universidades e por organizações do governo e militares. Entre 1965 e 1970, surgiu o Circuito Integrado (CI). Trata-se de um circuito eletrônico completo num pequeno chip feito de silício. Em 1965, os CIs começaram a substituir os transistores nos computadores e aí nós tivemos os Computadores de Terceira Geração. ALEXSKOPJE / DREAMSTIME.COM
Figura 6 – Foto de circuitos integrados
O silício é um material chamado semicondutor, pois conduz corrente elétrica quando misturado com impurezas químicas em sua constituição (você pode pesquisar os detalhes de materiais semicondutores se ficar curioso!). O marco importante desta terceira geração foi o lançamento do computador da série IBM 360 em 1964. Trata-se de uma linha de computadores projetada pela IBM tanto para uso comercial quanto científico. Foi uma série com o intuito de inserir o uso de computadores nos negócios e em operações comerciais.
16 •
capítulo 1
NASA / WIKIMEDIA
Figura 7 – O IBM 360
Já a quarta geração de computadores, com início na década de 1970, traz consigo a criação do microprocessador. Os computadores atuais são muito menores, mais de 100 vezes menores que aqueles de primeira geração, mas um único chip é mais poderoso que o próprio ENIAC. Para você ter uma ideia, em 1977 uma calculadora podia fazer cerca de 250 multiplicações por segundo, custava de 300 a 500 dólares e pesava mais de 500 gramas. Hoje, uma calculadora pesa muito pouco, custa 1 dólar ou menos às vezes (depende da cotação) e realiza muito mais cálculos. Em comparação ao ENIAC, um Pentium de 150 MHz era capaz de mais de 300 milhões de operações de soma por segundo, enquanto que o ENIAC processa apenas 5.000 operações.
CONCEITO International Business Machines (IBM) – trata-se de uma empresa de desenvolvimento de hardware e software, estadunidense, com quase um século de existência. Mais informações em <http://www.ibm.com/ibm/br/pt/>.
capítulo 1
• 17
Dê uma olhada na figura a seguir.
Figura 8 – Evolução dos computadores
Retirado de A história dos processadores, desde ENIAC até Nehalem/INTEL. Claro que a história mais recente dos computadores você já conhece, mas vamos apenas comentar um pouco sobre os computadores pessoais. Estes computadores mudaram completamente o paradigma do uso de computadores. O primeiro computador pessoal que foi disponibilizado ao público em geral foi o MITS Altair, produzido em 1975. Na época, foi “choque” grande, pois os computadores só faziam sentido para empresas, universidades, o governo ou os militares! Para que ter um computador em casa? Se fosse para investir, investiria em maquinários, em ferramentas, mas um computador? Não teria serventia! Esse seria um típico discurso de um pai cujo filho acabou de lhe fazer um pedido naquela época!
18 •
capítulo 1
ATENÇÃO A evolução na velocidade dos microprocessadores é tida para alguns como a quinta geração dos computadores. O marco seria o microprocessador Intel 386, que permitia a execução de várias tarefas ao mesmo tempo.
Quando Steve Jobs e Steve Wozniak mostraram ao público jovem o Apple I, todo mundo foi ao delírio! Ele possuía um teclado fácil de usar e tela! A Apple mostraria, mais tarde, sua facilidade em conseguir sucesso comercial com o Apple II e o software de planilha eletrônica VisiCalc. VOLKER STEGER / SCIENCE PHOTO LIBRARY / SPL DC / LATINSTOCK
VOLKER STEGER / SCIENCE PHOTO LIBRARY / SPL DC / LATINSTOCK
Figura 10 – Apple I
Figura 11 – Apple II
Em 1981, a IBM lançou seu primeiro computador pessoal e capturou a maior fatia de mercado em 18 meses. O padrão IBM PC foi adotado e copiado por outras empresas. HO / IBM / AFP
Figura 12 – IBM PC
capítulo 1
• 19
Não podemos nos esquecer de um nome importantíssimo no século passado. Claro, ainda é um nome muito importante: Microsoft. A hoje gigante empresa de software forneceu o sistema operacional para o computador pessoal da IBM. Este software, chamado de MS-DOS, foi usado pela IBM e pelas empresas que criaram computadores pessoais baseadas no padrão IBM PC. Com grande expansão, a Microsoft logo evoluiu para novas versões de seu sistema operacional até que “descobriram” e popularizaram a interface gráfica com o sistema operacional Windows! Os sistemas Windows mudaram o conceito de interface entre usuário e computador. Não foi a Microsoft que criou o conceito de interface gráfica, mas foi uma das principais empresas (senão a principal) a popularizá-lo!
CONEXÃO Recomendações 2.1 Assista ao filme história do computador em minutos disponível em <www.youtube.com/watch?v=F3qWg1JBPZg>. Acesso em: 24 jul. de 2014.
1.4 Visão geral do computador pessoal O hardware de seu computador pessoal precisa dos seguintes componentes para um efetivo funcionamento: • dispositivos de entrada; • dispositivos de saída; • dispositivos de armazenamento secundário; • unidade de processamento. O funcionamento básico de um computador convencional acontece de acordo com a figura a seguir:
20 •
capítulo 1
ADAPTADO DE: (CAPRON E JOHNSON, 2004)
Armazenamento secundário O dispositivo de armazenamento secundário armazena dados e programas
O dispositivo de entrada envia dados à unidade central de processamento
Entrada
A unidade central de processamento (UCP) executa instruções de computador
A memória mantém dados e programas em uso no momento Processamento
O dispositivo de saída disponibiliza os dados processados (as Informações)
Saída
Figura 13 – Componentes principais de um computador e mecanismo de funcionamento.
As informações são inseridas no ambiente computacional por meio dos dispositivos de entrada. Estes dispositivos permitem que nós, seres humanos, ou equipamentos forneçamos informações para serem processadas. Exemplos seriam o mouse, o teclado, leitores óticos, dentre outros. Estas informações de entrada são armazenadas na memória, e a unidade central de processamento (UCP) realiza o devido tratamento destas. Após isto, dispositivos de saída podem exibir o resultado do processamento. Exemplos de dispositivos de saída são monitores, impressoras, dispositivos de som etc.
CONEXÃO Recomendações 2.3 Veja o vídeo do Olhar Digital sobre o que considerar na hora de comprar um computador, em <www.youtube.com/watch?v=vYo6IceDsVQ>.
capítulo 1
• 21
Além disso, existem componentes que permitem a gravação de dados de maneira permanente e também o intercâmbio de dados. Estes dispositivos são chamados de dispositivos de armazenamento secundário. Detalhando um pouco mais os componentes de um computador, temos a figura a seguir.
2
3 4 5
1
6 7 8
9 Figura 14 – Componentes básico do computador: 1 – monitor, 2 – placa-mãe, 3 – processador, 4 – memória RAM, 5 – placas de expansão, 6 – fonte de alimentação, 7 – leitor ótico (DVD, CD etc.), 8 – disco rígido (hd), 9 – mouse, 10 – teclado.
Dispositivos de entrada: 10 e 9 Dispositivos de saída: 1 Armazenamento secundário: 7 e 8 Elementos da UCP: 2, 3, 4, 5 e 6. A UCP representa toda a unidade que faz o processamento, mas não é um único componente, pois reúne diversos outros. Por exemplo, a placa-mãe, que recebe este nome em razão de todos os demais componentes da UCP, periféricos de entrada e de saída, dependerem dela para conexão. É uma placa que faz a interligação entre todos os componentes do computador. Nela há os slots de memória, onde fica a memória RAM do computador. A memória RAM (memória de acesso randômico) é a memória de trabalho da máquina. Nela ficam os
22 •
capítulo 1
programas que estão sendo processados e todas as informações necessárias. Além da memória RAM, temos o próprio processador, a unidade capaz de realizar complexas operações matemáticas, e as placas de expansão, que permitem adicionarmos novas funcionalidades ao nosso computador, como uma placa que faça processamento dedicado de vídeo. Enquanto a memória RAM guarda as informações de trabalho, os discos rígidos guardam todas as informações e todos os programas. Quando desligamos o computador, as informações são salvas no disco. Quando ligamos o computador, os programas necessários para utilização dele, bem como aquele que desejarmos, são carregados do disco para a memória RAM. Além dos componentes vistos, podemos enumerar um outro tipo de dispositivo: Dispositivo para Comunicação Externa. No hardware de seu computador, ele é tratado com um dispositivo de entrada e saída, mas é interessante diferenciá-lo. Exemplos destes dispositivos são: • placas de rede; • hub; • switch; • modems.
1.5 Elementos Básicos da Arquitetura de Von Neumann Lembra-se de termos comentado sobre John Von Neumann, que participou da criação do ENIAC? Apesar de Von Neumann ter sua formação na área de matemática, sua contribuição foi muito importante em diversas outras áreas e, ele popularizou a chamada Arquitetura de Von Neumann, que será nosso objeto de estudo agora. A arquitetura de Von Neumann é a base da construção da principal arquitetura dos computadores modernos, os PCs. De maneira bem simples, ela funciona assim: A unidade central de processamento (UCP) faz operações com 1. Informações. Estas operações podem ser: a) operações de entrada e saída, como leitura de dados do teclado e escrever dados na tela. São operações para inserção de dados na memória do computador ou para exibição de informações que estejam armazenadas nesta.
capítulo 1
• 23
b) operações aritméticas como adição, subtração, multiplicação e divisão de valores inteiros ou ponto flutuante (basicamente, números reais representados num formato definido); c) operações lógicas e relacionais como comparações, testes de condições lógicas etc.; d) movimentação de dados entre os vários componentes, ou seja, resgate e inserção de informação na memória ou em dispositivos de entrada e saída. 2. Para fazer estas operações, necessitará de que as informações estejam na memória. Trata-se de um componente eletrônico para armazenar informações. 3. Além da memória, existem os dispositivos de entrada e saída, como teclado e mouse (entrada) ou monitor e impressora (saída), que emitirão as informações num formato legível ao usuário do computador.
Dados
Dados
Dados
Memória Primária
Unidade Lógico e Aritmética
Unidade de Controle
Unidade de Entrada e Saída
Controle
Figura 15 – A arquitetura de Von Neumann – Visão interna do funcionamento de um computador.
Então, basicamente, na arquitetura de Von Neumann, o que ocorre é que uma máquina pode armazenar seus programas e executá-los numa unidade responsável por diferentes operações. Pela figura, pudemos ver que as informações podem ser dados ou informações de controle. As informações de controle são aquelas que dizem o que deve ser feito com os dados. Por exemplo, se tivéssemos, de alguma maneira,
24 •
capítulo 1
na memória a informação da expressão “5 + 7 < 10 ?”, saberíamos que estamos tentando comparar a soma de 5 e 7 com o valor 10 e saber quem é maior. Logo, 5, 7 e 10 são dados e “+” , “<” e “?” são informações de controle. O computador entenderia que deve somar os dados 5 e 7 (controle +) e verificar se o resultado é menor que 10 (controle < e resultado ?). As duas outras unidades da figura são a ULA (Unidade Lógica e Aritmética) que serve para realizar as operações, efetivamente, e a UC (Unidade de Controle), que serve para decodificar as operações, ou seja, entender o que precisa ser feito, e disparar novas operações, caso necessário. A UCP entende operações num determinado formato. Vamos aqui chamar formato de linguagem, ok? Bom, o computador entende a linguagem eletrônica que popularmente é chamada de binária, devido à sua representação. Como um programador vai escrever códigos que descrevam operações em binário? Não vai (geralmente)! Nesse ponto, entrará em cena uma camada intermediária que cuidará disto para ele! Um programador de hoje escreve código em linguagem de alto nível. Isto quer dizer que a linguagem é de mais fácil compreensão humana! Os passos seguidos por um programador são: 1. Ele pensa no problema e o analisa; 2. depois formula algoritmos que possam resolver este problema; 3. na sequência, transforma os algoritmos em código de alto nível (esta fase é chamada de codificação ou programação); 4. após isto, traduz o código de alto nível, que resultará num “executável”; 5. um executável é um programa que roda sobre uma plataforma; 6. uma plataforma é um computador com sua arquitetura e um sistema “principal” de gerenciamento de seus recursos, chamado sistema operacional; 7. o sistema operacional “sabe” como fazer o executável funcionar, usando memória, dispositivos de entrada e saída etc. 8. o Windows, o Linux, o Solarix e o Unix, dentre outros, são exemplos de sistemas operacionais (veremos mais sobre sistemas operacionais no capítulo seguinte). 9. mas sistema operacional – por exemplo Windows–, não é aquela interface que você vê com editores de texto e planilhas. Ele compreende os programas, as rotinas que estão por trás de todo o funcionamento de seu computador (também veremos mais disto no capítulo seguinte). capítulo 1
• 25
1.6 Construção de algoritmos simples Algoritmos são conjuntos sistemáticos e formalizados de intruções voltados para resolução de um problema (PIVA JR. et al, 2012). O conceito de algoritmo não é exclusivo da computação: uma receita de bolo, por exemplo, pode ser considerado como tal. Porém, a estrutura de algoritmos se tornou mais difundida a partir da programação. Nos próximos dois capítulos, vamos relacionar os conceitos de organização e arquitetura de computadores com sua implementação em algoritmos simples. Para tanto, vamos apresentar um ambiente de programação que pode ser facilmente usado pelo aluno, além de uma explicação introdutória sobre a estrutura de algoritmos. 1.6.1 Indicação de ambiente de desenvolvimento Para simplificar o processo de codificação de algoritmos por meio de pseudocódigos que utilizaremos neste e no próximo capítulo um ambiente de desenvolvimento conhecido como VisuAlg. Esse ambiente pode ser obtido gratuitamente e permite a construção e simulação de algoritmos. O programa VisuAlg é muito indicado para programadores iniciantes, uma vez que possui uma interface simplificada e de fácil compreensão. O quadro 1.1 apresenta os endereços principais do ambiente de desenvolvimento VisuAlg.
SITE OFICIAL http://www.facom.ufu.br/~claudio/Cursos/PP/Docs/Visualg2.pdf Download (endereço abreviado) goo.gl/n8YLk Download (endereço completo) http://www.guanabara.info/2007/09/visualg-v25/ Quadro 1.1 – Ambiente de Desenvolvimento VisuALg.
26 •
capítulo 1
Inicialmente utilize um dos endereços apresentados no quadro 1.1 para realizar o download do ambiente. Escolha uma pasta no seu computador para armazenar o arquivo. Finalizado o processo de download clique duas vezes sobre o arquivo e você visualizará uma tela semelhante a ilustrada na figura 15.
Figura 16 – Tela inicial do instalador do VisuAlg.
Clicando no botão avançar você poderá definir o diretório para instalação do programa. Geralmente não é necessário modificar o diretório, assim, clique novamente no botão avançar. Na tela Componentes Selecionados, você também não precisará realizar nenhuma alteração, dessa forma, clique novamente no botão avançar. A tela Selecione o grupo do menu Iniciar, permite a especificação do nome que será definido para menu, o que novamente não necessita de modificação. A tela seguinte Selecionar Tarefas Adicionais, também já possui as principais configurações definidas, com isso, você pode clicar no botão avançar, e em seguida, clique no botão instalar. A instalação é rápida e dura apenas alguns segundos. No final, você já poderá iniciar o ambiente VisuAlg. Para a criação de um novo algoritmo no ambiente VisuAlg, você deverá utilizar o menu Arquivo>Novo, ou simplesmente pressionar as teclas de atalho CTRL+N. Dessa forma, um novo algoritmo será criado conforme ilustra a figura 2. Para salvar os algoritmos codificados você deverá utilizar o menu Arquivo>Salvar (CTRL+S). O ambiente VisuAlg utiliza a extensão .alg para representar os arquivos com algoritmos. capítulo 1
• 27
Figura 17 – Criação de um novo algoritmo no ambiente VisuAlg.
Nesse momento você já tem o ambiente para desenvolvimento de algoritmos VisuAlg instalado no seu computador. Além disso, você já sabe como criar um novo algoritmo. Poderemos agora iniciar um estudo mais detalhado a respeito da construção de algoritmos. 1.6.2 Estrutura básica de um algortimo O primeiro passo para a construção de algoritmos computacionais é o entendimento do conceito de algoritmo. Segundo Forbellone (2005), um algoritmo é uma sequência de passos que visa atingir um objetivo bem definido. Outra definição pode ser encontrada em Ascencio e Edilene (2002), em que um algoritmo é descrito como uma sequência de passos que deve ser seguida para a realização de uma tarefa. Dentro deste contexto, você pode entender o termo algoritmo como um conjunto de passos que busca a solução de um problema. No cenário computacional, os algoritmos têm como fundamento a elaboração de uma sequência de passos de forma que o computador seja capaz de solucionar um determinado problema. Em geral, os algoritmos são utilizados para abstrair1 problemas do mundo real, e transformá-los em soluções no mundo computacional. 1
Avaliar características e propriedades em separado; considerar à parte.
28 •
capítulo 1
A escrita de algoritmos é a base para o processo de desenvolvimento dos programas de computador. No ciclo de vida do desenvolvimento de um programa, o primeiro estágio é a elaboração da representação algorítmica. Assim, inicialmente, os programadores criam uma especificação algorítmica do problema computacional, antes de transformá-lo no código fonte de uma determinada linguagem de programação. Com a representação algorítmica do problema é possível especificar quais as principais funcionalidades do futuro programa, bem como, identificar possíveis erros que ocorrerão com a execução do programa. Para a construção de um algoritmo computacional é necessário a utilização de uma estrutura básica, que é definida a partir de uma sintaxe específica e contém blocos pré-determinados para codificação. Nesta estrutura, é especificado, por exemplo, o nome do algoritmo, quais variáveis serão utilizadas e o bloco de instruções que contém a lógica do programa. O código 1 apresenta a estrutura básica de um algoritmo computacional, a qual foi definida utilizando uma representação conhecida como pseudocódigo. Esse tipo de representação também é comumente descrita como português estruturado ou portugol. Código 1 1 algoritmo “semnome” 2 // Função : 3 // Autor : 4 // Data : 20/10/2011 5 // Seção de Declarações 6 var 7 8 inicio 9 // Seção de Comandos 10 fimalgoritmo Na primeira linha do algoritmo é necessário especificar um nome, da mesma maneira que você define nomes para documentos em editores de texto. As linhas 2, 3 e 4 apresentam informações gerais a respeito dos algoritmos.
capítulo 1
• 29
É importante destacar que estas linhas começam pelos caracteres //, os quais são chamados de comentários. Uma linha de comentário tem como objetivo auxiliar o entendimento do algoritmo, assim, você poderá utilizá-las sempre que necessário. Outro detalhe interessante sobre os comentários, é que as linhas comentadas não influenciam na execução do algoritmo, dessa forma, você poderá escrever comentários em português da maneira que determinar mais adequada. Na linha 5 temos a seção de declarações, a qual será utilizada para declaração das variáveis que fazem parte do programa. A linha 8 define o início do algoritmo, e as linhas seguintes (Seção de Comandos), especificam a lógica de programação utilizada no algoritmo. Por fim, a linha 10, denominada fimalgoritmo, representa o término do algoritmo. Para demonstrar a utilização do ambiente VisuAlg na codificação de algoritmos, vamos escrever nosso primeiro algoritmo. Este algoritmo tem como objetivo exibir seu nome completo na tela, assim, inicialmente você deverá abrir o ambiente e escrever o algoritmo conforme apresentado na figura 17.
Figura 18 – Codificação do algoritmo para exibir o nome na tela.
Finalizada a codificação do algoritmo é fundamental salvar o código antes de realizar a execução. Para isso, utilize o menu Arquivo>Salvar, ou simplesmente pressione a tecla de atalho Ctrl+S. Você pode escolher a pasta de sua preferência para armazenar o arquivo. A escolha do nome do algoritmo é im-
30 •
capítulo 1
portante, assim, recomenda-se não utilizar espaços, acentos, ou caracteres especiais. Para este exemplo, utilizaremos o seguinte nome unid3_exemplo01. alg. A extensão .alg é utilizado pelo ambiente VisuAlg para identificar arquivos do tipo algoritmo. Para facilitar o acompanhamento da codificação, você pode exibir os números das linhas, dessa forma, utilize o menu Exibir>Número de linhas para habilitar o recurso. Em seguida, poderemos executar o algoritmo e visualizar o resultado na tela. A execução de um algoritmo no ambiente VisuAlg é realizada por meio do menu Algoritmo > Executar, alternativamente, você poderá utilizar a tecla de atalho F9. A figura 4 apresenta o resultado da execução do algoritmo.
Figura 19 – Resultado da execução do algoritmo no ambiente VisuAlg.
Com isso, você aprendeu os procedimentos para codificação de um algoritmo no ambiente VisuAlg, bem como, sua execução e visualização dos resultados.
ATIVIDADE 1. Especifique a diferença entre organização e arquitetura de computadores. 2. Descreva a arquitetura de Von Neumann. 3. Pode-se dizer que o computador pessoal extinguiu os mainframes? Justifique. 4. Pesquise sobre outras arquiteturas de computadores além daquela de Von Neumann.
capítulo 1
• 31
REFLEXÃO Vimos até aqui que há muito mais sobre computadores do que simplesmente entender como eles funcionam. A história e a evolução dos computadores determinaram, de certa forma, como as pessoas passaram a pensar em tecnologia e a “consumir” tecnologia. Mesmo que você não se torne especialista na área de tecnologia da informação, é sempre importante saber como funcionam os equipamentos que serão usados no dia a dia. Isto facilita o diálogo entre nós e as novas tecnologias.
LEITURA Artigo – O papel da informação no processo de capacitação tecnológica das micro e pequenas empresas. Escrito por Paulo César Rezende de Carvalho Alvim. Disponível em: <http://www.scielo.br/scielo.php?script=sci_arttext&pid=S0100-19651998000100004> Livro – Administração de Sistemas de Informação, do autor Pedro Luiz Cortes. Livro muito interessante e abrangente sobre o uso de sistemas de informação nas empresas.
REFERÊNCIAS BIBLIOGRÁFICAS CAPRON, H. L.; JOHNSON, J. A. Introdução à Informática. São Paulo: Pearson Prentice Hall. 2004. LAUDON, K. C. e LAUDON, J. P. Sistemas de Informação Gerenciais. São Paulo: Prentice Hall. 2007. MONTEIRO, M. A. Introdução à Organização de Computadores. 5a ed. São Paulo: LTC, 2007. MURDOCA, M. J.; HEURING, V. P. Introdução à Arquitetura de Computadores. Rio de Janeiro: Campus, 2000.
32 •
capítulo 1
NULL, L.; LOBUR, J. Princípios Básicos de Arquitetura e Organização de Computadores. 2a ed. Porto Alegre: Bookman, 2010. PIVA JR., D.; NAKAMITI, G. S.; ENGELBRECHT, A. M.; BIANCHI, F. Algoritmos e Programação de Computadores. Rio de Janeiro: Elsevier, 2012. STALLINGS, W. Arquitetura e Organização de Computadores. São Paulo: Prentice Hall, 2002.
NO PRÓXIMO CAPÍTULO No próximo capítulo, entederemos como os dados são representados na computação. Serão vistos os conceitos de bit, byte, bases e a conversão entre elas.
capítulo 1
• 33
2 Representação de Dados
2 Representação de Dados No capítulo prévio, entendemos o computador como uma máquina que processa dados. Deve-se notar que existem artefatos mecânicos que, mesmo com capacidade limitada, conseguem fazer também processamento – tal como calculadoras mecânicas criadas no séc. XVII. Claro que pela sua capacidade e flexibilidade, o nosso interesse reside nos computadores baseados em dispositivos eletrônicos, e assim descrevemos no capítulo anterior a evolução das máquinas baseadas em válvulas, transistores simples e microprocessadores. Porém, não foi respondida uma pergunta importante: como os computadores eletrônicos conseguem reconhecer dados. Para tratar dessa questão, este capítulo começa com a definição de elementos fundamentais da linguagem binária, partindo para bases numéricas fundamentais.
OBJETIVOS • Compreender o que são bits, bytes e palavras (words). • Conhecer as principais bases numéricas. • Saber como o computador representa números e caracteres. • Entender, sob a perspectiva de programação, o relacionamento entre variáveis e tipos de dados.
REFLEXÃO Ao preencher dados em formulários eletrônicos, muitas vezes recebemos mensagens de erro, indicando incompatibilidade entre os dados que entramos e o tipo de dados esperado. Qual seria a consequência de não haver esse controle?
2.1 Elementos binários fundamentais: bits, bytes e words. Pode-se pensar em diversas propriedades relacionadas ao componente eletrônico e à corrente elétrica, tais como voltagem, amperagem, frequência de sinal, etc. Porém, fundamentalmente, um dispositivo tem ou não corrente elétrica passando por ele, em suma, está desligado ou ligado. Por isso, a forma básica de representação de dados em componentes eletrônicos se baseia na linguagem binária (LAUDON & LAUDON, 2007; CAPRON & JOHNSON, 2004). capítulo 2
• 35
Essa linguagem contém dois dígitos apenas, os quais vão corresponder aos dois estados básicos. A representação desses dois dígitos foi convencionada como sendo 0 ou 1. Deve-se comentar que a linguagem binária foi desenvolvida antes mesmo da eletrônica e da computação, porém se mostrou perfeitamente adequada para esses campos de desenvolvimento (NULL & LOBUR, 2010). À unidade de dígito binário (zero ou um) se dá o nome de bit, termo vindo do inglês binary digital unit (STALLINGS, 2002). Como bits isolados podem conter apenas dois estados, números e palavras são representados por diversos bits seguindo determinada convenção. À época do desenvolvimento do IBM 360, os engenheiros da empresa passaram a usar conjuntos de 8 bits como unidade básica de endereçamento de memória – este sendo um assunto tratado no capítulo 4. Esse conjunto de 8 bits é chamado de byte. Deve-se notar que a definição do byte estava ligada à arquitetura e características do hardware. Com o tempo, as unidades de endereçamento foram crescendo, sendo 32 bits e 64 bits as mais encontradas hoje. O termo word ou palavra é usado para identificar esses conjuntos de bits adjacentes, sendo o seu número variável segundo o uso (MONTEIRO, 2007), ver quadro 2.1.
Bit
• Digito binário
Byte
• Conjunto de 8 bits
WORD
• Número convencionado de bits adjacentes
Figura 1 – Elementos fundamentais de Linguagem Binária (MONTEIRO, 2007).
CONEXÃO Assista a um vídeo sobre o funcionamento do computador e o uso de bits e bytes: <https://www.youtube.com/watch?v=6oDiJLg6xbE> Acesso em: 24 jul. de 2014.
36 •
capítulo 2
Tamanho bits nibble byte 16 bits 32 bits
Exemplo 1 1 1 0 0 0 0 0 0
0 0 1 1
1 1 1 1 1 1 1 1 0 0 0 0 0 1 1 0 0 0 1 1 0 1 1 1 1 0 1 1 0 0 0 0 0 1 1 1 0 0 0 0 1 1 0 0 0 1 1 0
Quadro 2.1 – Conjunto de Dados mais Comuns
Fonte: adaptado de (MONTEIRO, 2007, p. 94) O aumento de capacidade de processamento e armazenamento de dados nos deixou familiares com termos como megabyte, gigabyte, etc. Essas unidades se referem a potências de dez de quantidade de bytes, conforme está relacionado no quadro 2.2.
MÚLTIPLOS
SÍMBOLO
VALOR
kilo
k
1000
mega
M
10002
giga
G
10003
tera
T
10004
peta
P
10005
exa
E
10006
zetta
Z
10007
yotta
Y
10008
Quadro 2.2 – Múltiplos decimais de bytes
Fonte: (STALLINGS, 2002)
capítulo 2
• 37
A definição simples desses múltiplos pode ser melhor ilustrada com algumas estimativas de uso: • A Biblioteca do Congresso Americano guardava em 2011 cerca de 235 terabytes (MCKENNA, 2013). • Em 2008, o Google já processava 20 mil terabytes ao dia (SCHONFELD, 2010). • Os serviços de mapas do Google disponibilizam certa de 20 petabytes de imagens (MCKENNA, 2013). • Em 2014, estima-se que o Facebook tinha nada menos do que 258 petabytes em arquivos de fotos e vídeos (LEUNG, 2014). • A capacidade do cérebro humano para armazenar memória seria equivalente a 2,5 petabytes (SMITH, 2010). Deve-se reforçar que esses números são apenas estimativas, sendo o cálculo preciso bastante complexo e sujeito a diversas questões metodológicas.
Figura 2 – Biblioteca do Congresso Americano, Washington.
<http://commons.wikimedia.org/wiki/File:Library_of_Congress_Interior_ Jan_2006.jpg> Acesso em: 24 jul. de 2014
38 •
capítulo 2
Figura 3 – Um dos datacenter do Facebook, Oregon.
Fonte: <http://commons.wikimedia.org/wiki/File:Facebook_Data_Center.jpg> Acesso em: 24 jul. de 2014 Até este ponto tratamos de alguns elementos básicos de linguagem binária e demos alguma noção de escala de uso. Entretanto como números e palavras são representados nesse tipo de convenção? Para explorarmos esse assunto, é preciso conhecer algumas bases numéricas e como se pode convertê-las.
2.2 Bases numéricas 2.2.1 Base decimal O sistema numérico decimal foi adotado dos árabes pelo europeus e é a base que usamos para contas simples a complexas transações financeiras em nossa economia (NULL & LOBUR, 2010). Como é um sistema muito comum, não nos detemos para pensar como funciona. Veja o exemplo abaixo de decomposição de números em base decimal: 15 = 1x10 + 5x1 146 = 1x100 + 4x10 + 6x1 8303 = 8x1000 + 3x100 + 0x10 + 3x1
capítulo 2
• 39
Outra forma importante de decompor números é com o uso de potências. Os números acima podem ser reescritos como em termos de potências de 10, lembrando que qualquer potência elevada a zero é igual a 1: 15 = 1x101 + 5x100
Nesse caso, temos dois dígitos: o dígito 5, corresponde ao multiplicador da potência elevada a zero. O dígito 1, corresponde ao multiplicador da potência elevada a 1. Por analogia, examine os casos seguintes: 146 = 1x102 + 4x101 + 6x100 8303 = 8x103 + 3x102 + 0x101 + 3x100 Em outras bases numéricas, usamos potências de base correspondente. Mas por que estudamos outras bases? Dependendo da utilização, a base decimal pode não ser a mais eficiente e eficaz. Deve-se saber que há uma notação que explicita em que base o número deve ser entendido: (153)10 refere-se a 153 na base decimal. (1110)2 refere-se a 1110 na base binária, que será vista a seguir. 2.2.2 Base binária Como sabemos, é mais adequado implementar dados em base binária no computador. No quadro 3, temos uma relação da representação dos números de 1 a 15. Porém como esses números são formados? Podemos entendê-los a partir de sua decomposição em potências de dois:
(14)10 = (1 1 1 0)2 = (1x23) + (1x22) + (1x21) + (0x20)
= 8 + 4 + 2 + 0 = 14 Por analogia, verifique estes três exemplos: (1)10 = (1)2 = 1x20 = 1 (2)10 = (10)2 = 1x21 + 0x20 = 2 + 0 = 2 (9)10 = (1001)2 = 1x23 + 0x22 + 0x21 + 1x20 = 8 + 0 + 0 + 1 = 9
40 •
capítulo 2
0
0
1
1
2
10
3
11
4
100
5
101
6
110
7
111
8
1000
9
1001
10
1010
11
1011
12
1100
13
1101
14
1110
15
1111
Quadro 2.3 – Representação Binária de Inteiros Positivos (zero a quinze)
Olhando novamente o quadro 2.3, vemos que o número 1 é representado por um dígito, já o número nove por quatro. Para a estrutura do computador, é interessante termos uma padronização dos processos de leitura e alocação de
capítulo 2
• 41
memória para cada variável. O byte, também referido como octeto (MURDOCA & HEURING; 2000), surgiu com essa preocupação, definindo conjuntos em uma quantidade fixa de 8 bits. No caso do número 1, os seus dígitos vacantes são preenchidos por zero, assim temos na representação de inteiros positivos: (1)10 = (000000001)2 (9)10 = (00001001)2 (255)10 = (11111111)2 Usando as combinações possíveis de zeros e uns em 8 bits, um byte pode representar 256 valores numéricos, ou seja, 28. Se precisássemos usar apenas inteiros positivos, poderíamos representar valores começando por zero até chegar a 255. Contudo, para indicar se o valor é negativo ou positivo em um byte, precisamos usar um dígito para ter essa informação. Assim, usando-se o byte, chega-se a um intervalo que vai de -128 a 127 (STALLINGS, 2002) . Bug do Milênio Quando os sistemas computacionais estavam sendo desenvolvidos no pós-guerra, um dos principais gargalos era a capacidade de memória e processamento. Por essa razão, foi simplificada a representação dos anos, subentendendo que todas as datas se referiam ao século 20. Assim, a representação de “1985” correspondia a 85, subentendendo-se os dígitos “19” à frente. Chegando a “2000”, porém, teríamos “00”, que seria entendido como “1900”. Previu-se que esse problema de representação pudesse causar o colapso de muitos sistemas computacionais, mas as consequências foram muito menores do que as previstas (BBC, 2014). Também pela forma de representação de datas, estão previstos problemas em 2038 com sistemas UNIX de 32 bits e programados na linguagem C (SMAAL, 2011).
Para representar valores maiores ou menores do que esse intervalo, há duas saídas principais. A primeira é lançar mão de words (palavras), como de 16 bits ou 32 bits citados anteriormente. Em uma palavra de 16 bits, os valores de números inteiros podem variar de -32.768 a 32.767 (MONTEIRO, 2007). A quantidade de bits e o formato que são convencionados a cada dado é importante. Antes de mais nada, quanto maior o word, naturalmente maior é o uso de memória e capacidade de processamento. Outro fator importante é que uma vez fixado o tamanho de certo tipo de dado em um sistema, o custo de mudança
42 •
capítulo 2
pode ser considerável. O problema (bug) do milênio e de 2038 são exemplos de problemas advindos da fixação inadequada de bits para variáveis de data. A passagem de bytes para words de 16 bits e de words de 16 para 32 bits requer mais capacidade e mudanças na estrutura de hardware. Buscou-se evitar a necessidade dessas mudanças e ainda de aumentar o escopo para representação de números reais por meio de método de representação por ponto flutuante (STALLINGS, 2002). Esse método se baseia na representação de números por seus algarismos significativos e potências. O padrão mais usado para esse método denomina-se IEEE 754, servindo de base para construtores de hardware e programadores (MONTEIRO, 2007). Os números a seguir possuem grandezas bastante diferentes, mas podem ser representados com basicamente a mesma quantidade de bits: 1,27 x 106 = 1,27 x 1000000 = 1270000 7,31 x 10-2 = 7,31 x 0,01 = 0,0731 Nos dois casos, temos três algarismos significativos e determinada potência na base 10. Assim, podemos representar números inteiros e aproximar valores fracionários e dízimas, ampliando consideravelmente o intervalo de representação numérica. O termo “ponto flutuante” vem do fato da vírgula na representação numérica poder estar na casa centesimal, unitária, de milhar, etc. Assim como é possível somar e subtrair usando o sistema decimal, é possível fazer as opções aritméticas com o sistema binário, incluindo números de ponto flutuante.
CONEXÃO Saiba mais sobre o método ponto flutuante e padrão IEEE 754: <http://www.lia.ufc.br/~valdisio/download/ieee.pdf> Acesso em: 24 jul. 2014.
2.2.3 Base hexadecimal Esse sistema possui o número 16 como base e é indicado por contração “hex”. Como notação, geralmente usa-se a convenção abaixo (STALLINGS, 2002):
capítulo 2
• 43
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F
Diversas representações computacionais, padrões e linguagens usam a base hexadecimal. Um exemplo são as representações de cores em HTML, em que se inicia com # para depois especificar quatro dígitos hexadecimais. A cor azul primária, por exemplo, é representada por “#0000FF”. 2.2.4 Conversão entre bases Ao usar o computador, sem perceber estamos usando a conversão entre sistema decimal e binário a todo o tempo. Há diversas ferramentas na WEB e em planilhas eletrônicas para fazer realizar a conversão entre diversos sistemas. Para ilustrar aqui uma conversão simples, vamos mudar o número 9 da base decimal para binária. Vamos usar o método de divisão e resto (NULL & LOBUR, 2011), que serve apenas a números inteiros sem sinal. Repare que os dígitos da base binária vão corresponder ao resto da divisão: 9 1
2 4 0
2 2 0
2 1 1
2 0
CONEXÃO Conheça um ferramenta na Web para conversão entre bases numéricas: <http://wims.unice.fr/wims/en_tool~number~baseconv.en.html> Acesso em: 24 jul. 2014. Os passos feitos foram esses: • Dividindo-se 9 por 2, temos 4 com resto 1. • Dividindo-se 4 por 2, temos 2 com resto 1.
44 •
capítulo 2
• Dividindo-se 2 por 2, temos 1 com resto 0, para converter precisamos fazer mais uma divisão. • Atenção: dividindo-se 1 por 2, considera-se o resultado 0 com resto 1. Usando os restos, na ordem da esquerda para a direita, temos: (9)10 = (1001)2
ATENÇÃO O Excel tem funções implementadas que permitem a conversão entre bases numéricas. Se você, por exemplo, possuir o número 14 em uma célula A1, você pode implementar uma função em uma célula A2 que use o 14 como argumento. Isso pode ser feito pelo ícone fx ou pelo menu Inserir. Algumas funções disponíveis são: BINADEC: converte da base binária para a decimal. BINAHEX: converte da base binária para a hexadecimal. DECABIN: converte da base decimal para a binária.
2.3 Representação de caracteres Até agora exploramos a representação de números, mas como se tratam as letras do alfabeto e os caracteres em geral? Também no pós--guerra, ainda em um contexto de escassez de memória, os sistemas computacionais adotaram o padrão ASCII (American Standard Code for Information Interchange). BINÁRIO
DECIMAL
CARACTERE
BINÁRIO
DECIMAL
CARACTERE
0100 0000
40
@
0110 0000
96
`
!
0100 0001
41
A
0110 0001
97
a
34
“
0100 0010
42
B
0110 0010
98
b
0010 0011
35
#
0100 0011
43
C
0110 0011
99
c
0010 0100
36
$
0100 0100
44
D
0110 0100
100
d
0010 0101
37
%
0100 0101
45
E
0110 0101
101
e
0010 0110
38
&
0100 0110
46
F
0110 0110
102
f
0010 0111
39
‘
0100 0111
47
G
0110 0111
103
g
BINÁRIO
DECIMAL
0010 0000
32
0010 0001
33
0010 0010
CARACTERE
capítulo 2
• 45
BINÁRIO
DECIMAL
CARACTERE
BINÁRIO
DECIMAL
CARACTERE
BINÁRIO
DECIMAL
CARACTERE
0010 1000
40
(
0100 1000
48
H
0110 1000
104
h
0010 1001
41
)
0100 1001
49
I
0110 1001
105
i
0010 1010
42
*
0100 1010
4A
J
0110 1010
106
j
0010 1011
43
+
0100 1011
4B
K
0110 1011
107
k
0010 1100
44
,
0100 1100
4C
L
0110 1100
108
l
0010 1101
45
-
0100 1101
4D
M
0110 1101
109
m
0010 1110
46
.
0100 1110
4E
N
0110 1110
110
n
0010 1111
47
/
0100 1111
4F
O
0110 1111
111
o
0011 0000
48
0
0101 0000
50
P
0111 0000
112
p
0011 0001
49
1
0101 0001
51
Q
0111 0001
113
q
0011 0010
50
2
0101 0010
52
R
0111 0010
114
r
0011 0011
51
3
0101 0011
53
S
0111 0011
115
s
0011 0100
52
4
0101 0100
54
T
0111 0100
116
t
0011 0101
53
5
0101 0101
55
U
0111 0101
117
u
0011 0110
54
6
0101 0110
56
V
0111 0110
118
v
0011 0111
55
7
0101 0111
57
W
0111 0111
119
w
0011 1000
56
8
0101 1000
58
X
0111 1000
120
x
0011 1001
57
9
0101 1001
59
Y
0111 1001
121
y
0011 1010
58
:
0101 1010
5A
Z
0111 1010
122
z
0011 1011
59
;
0101 1011
5B
[
0111 1011
123
{
0011 1100
60
<
0101 1100
5C
\
0111 1100
124
|
0011 1101
61
=
0101 1101
5D
]
0111 1101
125
}
0011 1110
62
>
0101 1110
5E
^
0111 1110
126
~
0011 1111
63
?
0101 1111
5F
_
Quadro 2.4 – Tabela ASC II – Caracteres imprimíveis. Fonte: (MONTEIRO, 2007).
Esse padrão foi desenvolvido para os sistemas de telex originalmente, o que se reflete na definição de 33 caracteres não imprimíveis que hoje estão na maioria obsoletos e a reserva de um dígito para controle de erro (MURDOCCA & HEURING, 2000).
46 •
capítulo 2
O quadro 4 apresenta os caracteres imprimíveis do ASC II e a sua correspondência binária. Assim, usando esse padrão, um sistema computacional lê “01000000” como “@”, “01111010” como “z”, etc. desde que tenha sido definido que o dado é um caracter não um número. Os limites do ASC, especialmente para lidar com caracteres de alfabetos além do latino e caracteres especiais, fez com que os construtores de hardware e desenvolvedores de software ampliassem os caracteres definidos. Nesse contexto, destaca-se o padrão Unicode ((NULL & LOBUR, 2011).
2.4 Tipos de dados e uso de variáveis em algoritmos O principal objetivo dos algoritmos computacionais é a manipulação de informações, as quais podem ser especificadas pelo usuário, ou geradas ao longo da execução do algoritmo. Para manipulação de informações nos algoritmos é necessário a utilização de um recurso denominado variáveis.
ATENÇÃO Uma variável é um elemento sintático do algoritmo que tem como funcionalidade armazenar um determinado valor. O valor associado a variável depende do tipo de informação que se deseja manipular, assim, diversos tipos de valores podem ser atribuídos as variáveis. De acordo com o tipo de informação que será armazenado, é necessário especificar o tipo que será a variável. Este conceito é conhecido como tipo de dados. Um tipo de dados determina quais tipos de operações e quais tipos de valores podem ser manipulados pelas variáveis. O tipo de dados mais comum existente é utilizado para a manipulação de valores numéricos do tipo inteiro. As variáveis do tipo de dados inteiro armazenam valores do tipo: 25, 32, 0, 45, -92, -853, entre outros. Para demonstrar a utilização deste tipo de dados, bem como, a declaração de variáveis nos algoritmos, vamos codificar nosso segundo exemplo. A figura 5 apresenta o código do algoritmo capaz de realizar a soma de duas variáveis do tipo inteiro. Este algoritmo foi nomeado como unid3_exemplo02.alg.
capítulo 2
• 47
Figura 4 – Codificação do algoritmo capaz de realizar a soma de dois números inteiros.
No algoritmo da figura 5 é importante notar o bloco de declaração de variáveis, o qual é codificado nas linhas 6, 7, 8 e 9. A linha 6 contém a palavra reservada var, que indica o início do bloco de declaração de variáveis. Na linha 7 é apresentada a declaração de uma variável denominada a do tipo inteiro. As linhas 8 e 9 declaram mais duas variáveis do tipo inteiro, definidas como b e soma. Você pode perceber com as declarações das variáveis um padrão sintático, o qual é representado por:
nome_da_variável: tipo_da_variável Os algoritmos computacionais, bem como as linguagens de programação possuem algumas regras para a nomeação das variáveis. Uma variável deve obrigatoriamente iniciar como um caractere literal, assim, não é possível declarar variável que comecem com um número, por exemplo, 1soma. Outro detalhe importante é que nomes de variáveis não podem conter espaços, por exemplo, soma total, então, caso seja necessário, você poderá utilizar o caractere sublinhado (underline), da seguinte maneira: soma_total. Outra regra importante sobre a identificação de variáveis é não utilizar caracteres especiais, tais como @, #, $, %, bem como, não utilizar acentos de qualquer tipo. Observando ainda o algoritmo apresentado na figura 5, é importante notar as linhas 12 e 13 que armazenam valores nas variáveis a e b. O termo computacional que indica o armazenamento de um valor em uma variável é atribuição.
48 •
capítulo 2
Assim, a linha número 12 atribui o valor 10 à variável a, e da mesma maneira, a linha 13 atribui o valor 20 à variável denominada b. Na linha 16 é apresentada uma atribuição como sendo o resultado de uma expressão aritmética de adição, por conseguinte, a variável soma recebe o resultado da operação da variável a somado com a variável b. Finalmente, na linha 19 é apresentado na tela o resultado da soma dos valores. É importante destacar que a instrução escreva é utilizada para exibir uma informação na tela, em que todas as informações textuais devem ser especificadas entre “aspas duplas”. Para a escrita de variáveis na tela, não é necessário utilizar as aspas duplas. O resultado da execução do algoritmo é apresentado na figura 6.
Figura 5 – Resultado da execução do algoritmo.
Outro tipo de dado utilizado para a manipulação de informações numéricas é denominado real. Com o tipo de dados real é possível realizar operações com números que contenham casas decimais, por exemplo, 2.34, 4.48, -5.82, 0.004, entre outros. Um detalhe importante que merece destaque é com relação ao símbolo utilizado para separação das casas decimais. Geralmente, pelo fato das linguagens de programação utilizarem instruções na linguagem inglesa, a separação das casas decimais é realizada com o símbolo de . (ponto), no entanto, é possível criar mecanismos capazes de efetuar a substituição do ponto pelo símbolo de , (vírgula) utilizado para separar a parte fracionária no Brasil. Para demonstrar a utilização de números do tipo real, considere o problema de calcular a média de um conjunto numérico. Podemos utilizar como exemplo, a necessidade de calcular a média de notas de um conjunto de cinco alunos, por isso, a figura 7 apresenta o resultado da codificação deste exemplo. Antes da execução, o arquivo foi salvo com o nome de unid3_exemplo03.alg. Nesse algoritmo é importante notar a declaração das variáveis nota1, nota2, nota3, nota4 e nota5. Na linha 8, as variáveis que receberão os valores referentes as notas são declaradas em uma mesma linha. Esse tipo de declaração é possível, pois todas as variáveis são do mesmo tipo. Dessa forma, é possível simcapítulo 2
• 49
plificar a seção de declaração das variáveis. No entanto, a escolha de como as variáveis serão declaradas, é exclusivamente do programador, e este fato não interfere no desempenho da execução do algoritmo ou do programa. Caso preferir, o programador pode declarar as variáveis individualmente, uma em cada linha, como apresentado na listagem código 2. Código 2 1 var 2 3 4 5 6 7
nota1: nota2: nota3: nota4: nota5: media:
real real real real real real
Figura 6 – Algoritmo que demonstra a utilização de variáveis do tipo real.
O resultado da execução do algoritmo é apresentado na figura 8. Na execução é importante notar que na separação das casas decimais o VisuAlg utiliza o símbolo de ponto.
Figura 7 – Resultado da execução do algoritmo.
50 •
capítulo 2
Para manipulação de informações literais, as linguagens de programação e os algoritmos, possuem um tipo específico denominado caractere. Com este tipo de dados é possível armazenar e manipular qualquer tipo de valor, tais como uma letra do alfabeto, um símbolo, um número, entre outros. Em linguagens de programação de alto nível, tais como Java ou C#, a manipulação de caracteres pode ser realizada individualmente, com um tipo exclusivo chamado char, ou ainda, por meio de um conjunto de caracteres, com um tipo de dados específico conhecido como string. A figura 9 apresenta um algoritmo que realiza a manipulação de informações com o tipo de dados caractere. Este exemplo foi nomeado como unid3_exemplo04.alg.
Figura 8 – Algoritmo que demonstra a manipulação de informações com o tipo de dados caractere.
Neste exemplo é importante notar que os valores do tipo caractere são representados entre aspas duplas, como pode ser visualizado nas linhas 13 e 14. Porém, algumas linguagens de programação realizam a separação entre a representação de um único caractere, e a definição de um conjunto de caracteres. Geralmente, a especificação de um único caractere é definida utilizando aspas simples, por exemplo, ‘M’, e a indicação de um conjunto de caracteres é realizada com aspas duplas, por exemplo, “João da Silva”. Na linguagem VisuAlg, tanto a representação de um único caractere, quanto de vários, é realizada com aspas duplas. O resultado da execução do algoritmo pode ser visualizado na figura 10.
Figura 9 – Resultado da execução do algoritmo.
capítulo 2
• 51
Os algoritmos ainda possuem um tipo de dados específico utilizado para manipulação de valores lógicos, os quais são conhecidos em programação como booleanos. Um tipo de dados booleano permite o armazenamento de valores lógicos, por exemplo, verdadeiro (true) ou falso (false). Em programação, um valor lógico pode ser utilizado para expressar a presença ou ausência de uma determinada informação, tal como, um valor do tipo sim ou não. Na linguagem algorítmica, o tipo de dados booleano é definido como lógico. Para demonstrar a utilização do tipo de dados lógico, vamos codificar mais um algoritmo. Este exemplo, nomeado como unid3_exemplo05.alg, apresenta um algoritmo que manipula informações de todos os tipos de dados existentes, sendo eles inteiro, real, caractere e lógico. No exemplo, é importante destacar a atribuição de um valor lógico, que ocorre na linha 18. Na linguagem algorítmica utilizada pelo ambiente VisuAlg, uma variável do tipo lógico pode assumir dois valores, verdadeiro ou falso, e neste caso a atribuição de valores lógicos também utiliza os possíveis valores (verdadeiro ou falso). A figura 11 apresenta o resultado da codificação do algoritmo.
Figura 10 – Algoritmo que demonstra a utilização dos principais tipos de dados e apresenta a manipulação de valores do tipo lógico.
O resultado da execução do algoritmo, que pode ser visualizada utilizando o menu Algoritmo>Executar, é apresentada na figura 12.
52 •
capítulo 2
Figura 11 – Resultado da execução do algoritmo.
Com isso, você conheceu os principais tipos de dados que podem ser utilizados para manipulação de informações nos algoritmos e programas. O próximo passo é aprender como ler informações fornecidas pelo usuário, e como apresentar resultados na tela.
ATIVIDADE 1. Pesquise sobre a origem da linguagem binária, antes de seu uso pela computação. 2. Por que o sistema binário é mais adequado para o uso em dispositvos eletrônicos? 3. Decomponha 19583 em potências de base 10. 4. Converta 19583 na base binária. 5. Decomponha o resultado do exercício 4 em potências de base 2. 6. Pesquise sobre o padrão UNICODE e identifique os grupos de caracteres que são definidos.
REFLEXÃO Neste capítulo, entendemos melhor como o computador e dispositivos eletrônicos podem representar números e letras. Também vimos que o sistema binário permite manipulações aritméticas, o que seria suficiente para caracterizar uma calculadora. Contudo, como os sistemas computacionais conseguem fazer tarefas variadas como reconhecer voz e ajudar em diagnósticos médicos? Como essas tarefas se traduzem em processamento de dados?
capítulo 2
• 53
LEITURA LEVY, S. Os Heróis da Revolução. São Paulo: Evora, 2012. Comentário: a descrição de como computadores funcionam pode ser um assunto bastante árido se esquecermos as pessoas e as motivações que residem por cada característica da computação. Ao traçar o panorama dos atores que ajudaram a desenvolver os primeiros sistemas computacionais, passando pelos PCs, chegando aos programadores de aplicativos móveis, Levy nos mostra a feição humana, entusiasmada e obsessiva dos responsáveis pela revolução digital.
REFERÊNCIAS BIBLIOGRÁFICAS BBC. Y2K around the word. BBC, website. <http://news.bbc.co.uk/hi/english/static/millennium_bug/countries/default.stm>. Acesso em: 19 jun. 2014. CAPRON, H. L.; JOHNSON, J. A. Introdução à Informática. São Paulo: Pearson Prentice Hall. 2004. LAUDON, K. C. e LAUDON, J. P. Sistemas de Informação Gerenciais. São Paulo: Prentice Hall. 2007. LEUNG, L. How much data x store? Techexpectations, 13 mar. 2014. Disponível em: <http:// techexpectations.org/2014/05/17/how-much-data-does-x-store/>. Acesso em: 19 jun. 2014. MCKENNA, B. What does a petabyte look like? Computer Weelky, março 2013. Disponível em: <http://www.computerweekly.com/feature/What-does-a-petabyte-look-like>. Acesso em: 19 jun. 2014. MONTEIRO, M. A. Introdução à Organização de Computadores. 5a ed. São Paulo: LTC, 2007. MURDOCA, M. J.; HEURING, V. P. Introdução à Arquitetura de Computadores. Rio de Janeiro: Campus, 2000. NULL, L.; LOBUR, J. Princípios Básicos de Arquitetura e Organização de Computadores. 2a ed. Porto Alegre: Bookman, 2010.
54 •
capítulo 2
REBER, P. What is the memory capacity of the human brain? Scientific American, maio/junho, 2010. Disponível em: <http://www.scientificamerican.com/article/what-is-the-memory-capacity/>. Acesso em: 19 jun. 2014. SCHONFELD, E. Google processing 20,000 terabytes a day, and growing. Techcrunch, website, 9 jan. 2008. Disponível em: <http://techcrunch.com/2008/01/09/Google-processing20000-terabytes-a-day-and-growing/>. Acesso em. 19 jun 2014. SMAAL, 2011. 2038: o bug do milênio atacará novamente. Tecmundo, website, 25 fev 2011. Disponível em: <http://www.tecmundo.com.br/historia/8795-2038-o-bug-do-milenio-atacara-novamente.>. Acesso em: 19 jun. 2014. STALLINGS, W. Arquitetura e Organização de Computadores. São Paulo: Prentice Hall, 2002.
NO PRÓXIMO CAPÍTULO No próximo capítulo, conheceremos a álgebra booleana, que permite que os computadores possam manipular os dados logicamente.
capítulo 2
• 55
3 Álgebra Booleana e Operações Lógicas em Algoritimos
3 Álgebra Booleana e Operações Lógicas em Algoritimos No capítulo anterior, vimos a forma como dados podem ser representados no computador em base númérica, ou seja, passível de operações como aritméticas de adição. Mas quando usamos um caixa eletrônico, por exemplo, há diversas outras operações envolvidas. A simples comparação da senha que digitamos com aquela registrada pede uma operação lógica que deve responder “a senha confere” ou “a senha não confere”. Em um videogame, cada uma das ações do jogador tem determinadas consequências tanto para o encadeamento posterior de eventos, quanto para o próprio ambiente do jogo. Esses são apenas exemplos de como o processamento de dados depende de operações lógicas (LAUDON & LAUDON, 2007; CAPRON & JOHNSON, 2004). A implementação dessas operações em computador estão, por sua vez, baseadas na álgebra booleana, tema principal deste capítulo.
OBJETIVOS • Compreender os operadores principais da álgebra booleana. • Construir tabelas verdade para cada operador. • Identificar símbolos de portas lógicas. • Entender como os operadores aritméticos e lógicos são implementados em algoritmos.
REFLEXÃO No primeiro capítulo, foi dado o exemplo da receita de bolo como um algoritmo não computacional. Como outros algoritmos, a receita de bolo é um conjunto de instruções formalizado para resolver um problema e, nesse caso específico, as instruções seguem umas às outras diretamente. Busque pensar em algoritmos condicionais, ou seja, cuja realização de instruções depende de condições e também de resultados de instruções anteriores.
capítulo 3
• 57
3.1 Álgebra booleana Segundo Linda Null e Julia Lobur, a álgebra booleana é “uma álgebra para a manipulação de objetos que podem assumir somente dois valores, normalmente verdadeiro ou falso” (NULL & LOBUR, 2011, p. 141). É fácil entender que essa álgebra seja adequada ao computadores, os quais funcionam usando a linguagem binária. A seguir, vamos falar da origem da álgebra booleana para, a seguir, passar para seus operadores. 3.1.1 Origens A linguagem binária se tornou um componente fundamental da computação, mesmo tendo sido desenvolvida muito antes dos primeiros computadores. O mesmo aconteceu com a álgebra booleana: nascida no séc. XIX fruto da formalização do pensamento lógico realizada por George Boole, um grande matemático inglês (figura 1). A motivação de Boole era encontrar e formalizar leis universais do raciocínio, aproximando este da álgebra matemática. Esse esforço foi estruturado em sua obra “As Leis do Pensamento”, de 1854 (NULL & LOBOUR, 2011).
Figura 1 – George Boole (1814 – 1864) Fonte: <http://en.wikipedia.org/wiki/George_Boole#mediaviewer/File:George_Boole_color.jpg>. Acesso em: 24 jul. de 2014.
58 •
capítulo 3
Uma ilustração simples da álgebra booleana pode ser dada avaliando as três afirmações abaixo: Afirmação 1: Ana foi ao cinema. Afirmação 2: Paulo foi ao show. Afirmação 3: Ana foi ao cinema E Paulo foi ao show. Para a afirmação 3 ser verdadeira, tanto a afirmação 1 quanto a 2 devem ser também. Se Ana não foi ao cinema, ou se Paulo não foi ao show, já fica comprometida a afirmação feita sobre os dois. Perceba que a afirmação 3 equivale considerar a afirmação 1 e a afirmação 2 simultaneamente. Podemos organizar o que foi dito até aqui por uma tabela-verdade, a qual relaciona os valores de proposições e operadores lógicos. Com esse fim, vamos usar a notação: Afirmação 1: p Afirmação 2: q Afirmação 3: Afirmação 1 E Afirmação 2: p.q V: proposição verdadeira F: proposição falsa. Desse modo, a tabela-verdade fica: p
q
p•q
V
V
V
V
F
F
F
V
F
F
F
F
Podemos ainda explicar mais um operador lógico a partir da seguinte assertiva: Afirmação 4: Ana foi ao cinema OU Paulo foi ao show. : Afirmação 1 OU Afirmação 2: p + q A afirmação 4 será verdadeira caso ambas as afirmativas sejam verdadeiras, mas também caso somente uma delas seja. Por exemplo, mesmo Paulo não tendo ido ao show, basta que Ana tenha ido ao cinema para garantir essa veracidade. A afirmativa 4 só será falsa se ambas as afirmativas também o forem. Consequentemente, a tabela-verdade nesse caso terá a seguinte configuração: capítulo 3
• 59
p
q
p+q
V
V
V
V
F
V
F
V
V
F
F
F
Figura 2 – Labirinto Teseu de Claude Shannon (Museu do MIT) Fonte: Labirinto Teseus de Claude Shannon (Museu do MIT) <http://commons.wikimedia.org/wiki/Category:Claude_Shannon#mediaviewer/>File:Theseus_Maze_by_Claude_Shannon,_1952_-_MIT_Museum_-_DSC03702.JPG. Acesso em: 24 jul. de 2014.
A utilidade da álgebra booleana e suas tabelas verdade para circuitos elétricos foi estabelecida pelo americano Charles Shannon em sua dissertação de mestrado de 1937, concluída no MIT. Em lugar dos valores “falso” ou “verdadeiro”, os circuitos poderiam operar por essa álgebra usando os “zeros” e “uns”. Essa adaptação lançou as bases da computação que conhecemos hoje. Shannon ainda ajudou a criar os fundamentos da teoria da informação e da inteligência artificial. Um dos seus experimentos famosos foi um “rato eletromecânico” programado a encontrar a saída de um labirinto (figura 2) e capaz de acumular conhecimento a cada entrada no mesmo labirinto. (GLEICK, 2011).
60 •
capítulo 3
Na sumarização seguinte da álgebra booleana, vamos usar os dígitos binários. Assim, “0” será equivalente a “falso” e, consequentemente, 1 a “verdadeiro”. Além de formalizar nesses termos os operadores E e OU já vistos, vamos ainda definir a Negação, XOR, NOT e NAND, baseando-se em Murdocca e Heuring (2000), Monteiro (2007) e Stallings (2002). 3.1.2 Operador E (Conjunção ou AND) Uma expressão com operador E resulta 1 somente se as suas entradas forem todas iguais a 1. O funcionamento é análogo ao exemplo da seção anterior com a afirmativa 3. Considerando duas entradas, p e q, a notação de “p E q” já foi vista: p.q Chama-se essa expressão também de produto booleano, ou multiplicação lógica. Abaixo está a tabela-verdade para o operador E com duas entradas: p
q
p•q
1
1
1
1
0
0
0
1
0
0
0
0
3.1.3 Operador OU (Disjunção ou OR) Uma expressão com operador OU resulta em 0 somente se as suas entradas forem todas iguais a 0. Aqui temos um comportamento análogo ao exemplo anterior com a afirmativa 4. Considerando duas entradas, p e q, já conhecemos a notação de “p OU q”. p+q
capítulo 3
• 61
Essa expressão também é nomeada de soma booleana, ou adição lógica. A tabela-verdade para o operador OU com duas entradas está a seguir: p
q
p+q
1
1
1
1
0
1
0
1
1
0
0
0
ATENÇÃO Já pensou se gastos com jardinagem forem divulgados como investimentos ambien tais internos? Certamente, gastos com jardinagem não servem para reduzir o impacto negativo dos resíduos das próprias operações da empresa. A não ser que o jardim seja uma estação de tratamento de efluente.
A fórmula da ecoeficiência de Helminen (2000) e Burritt e Saka (2005) e o WBCSD (1996) exposto na figura 7 pondera o valor adicionado e o impacto ambiental causado para produzir a riqueza Valor Adicionado. Com base nisso, Schaltegger, Burrit e Peterson (2003 apud Derwall at. al. 2005) explicam que a ecoeficiência pode refletir o quanto de impacto ambiental foi necessário para gerar o Valor Adicionado da DVA. Nas duas metodologias pondera-se o impacto causado no meio ambiente pelas operações da empresa. Uma o analisa durante o ciclo de vida dos produtos e a outra durante o processamento de serviços e produtos da empresa. Independente do método, o WBCSD (1996) recomenda ponderar a ecoeficiência nos processos decisórios, internamente como parte do dia a dia dos sistemas de gestão e, externamente, como algo a ser divulgado como um dos elementos integradores da sustentabilidade.
62 •
capítulo 3
ATENÇÃO Existem outras notações para operadores vistos aqui e que podem ser comumente encontradas na disciplina de Raciocínio Lógico: Operador E: p • q. Operador OU: p + q.
_
Operador Negação: p
3.1.4 Operador Negação (Inversão ou NOT) Esse operador simplesmente inverte a entrada. Ou seja, se a entrada é 0 o operador o transforma em 1, e vice-versa. Com uma entrada p, a notação de “p negado” é: ~p A tabela-verdade para esse operador é: p
~p
1
0
0
1
3.1.5 Operadores XOR, NOR, NAND Os operadores AND, OR e NOT podem ser combinados e aplicados sucessivamente a entradas. Três dessas combinações encontram uso corrente em sistemas computacionais: Disjunção exclusiva (XOR) O resultado dessa operação é 1 se, e somente se, apenas uma das entradas for 1. A tabela-verdade do operador XOR é:
p
q
(p • ~q) + (~p •
1
1
q) 0
capítulo 3
• 63
1
0
1
0
1
1
0
0
0
• NEM (NOR) O resultado dessa operação é 1 se, e somente se, todas as entradas forem 0. A tabela-verdade do operador NOR é: p
q
~ (p + q)
1
1
0
1
0
0
0
1
0
0
0
1
• NOU (“Não... e...”, NAND) O resultado dessa operação é 1 se pelo menos uma entrada for 0. A tabela verdade do operador NOU é:
64 •
capítulo 3
p
q
~ (p + q)
1
1
0
1
0
1
0
1
1
0
0
1
CONEXÃO Para aprofundar seus conhecimentos sobre álgebra booleana, leia o texto disponível em: <http:// www.inf.ufsc.br/~guntzel/isd/isd2.pdf> Acesso em: 24 jul. de 2014.
3.2 Portas lógicas A adaptação de Claude Shannon da álgebra booleana é também denominada álgebra de chaveamento devido à orientação inicial para circuitos que podiam estar ligados ou desligados por chave. Essa álgebra é usada na construção de circuitos físicos, que podem modificar os sinais digitais conforme estabelecido por seu desenho. Devido a esse uso, há símbolos gráficos para cada operador, chamadas portas lógicas, o que facilita o trabalho em circuitos complexos. Na tabela a seguir, as entradas são representadas pelos traços à esquerda, podendo ser, cada uma, zero ou um. A saída é representada pelo traço à direita, também obedecendo à base binária.
CONEXÃO Conheça um aplicativo gratuito para dispositivos móveis que desenha portas lógicas: <https://play.google.com/store/apps/details?id=com.Logic.gates_Xor.en> Acesso em: 24 jul. de 2014.
Operador
Símbolo
AND OR NOT XOR NOR NAND Fonte: <http://commons.wikimedia.org/wiki/File:NAND_ANSI.svg>. Acesso em: 24 jul. de 2014. capítulo 3
• 65
Para fins didáticos, tratamos de operações, portas lógicas e símbolos com apenas duas entradas. No caso abaixo, temos um operador AND com três entradas de valor 1. Pela própria definição do operador, a saída também será 1: 1 1 1
1
3.3 Operações aritméticas e lógicas em algoritmos Até aqui, entendemos as operações booleanas principais. Contudo, como elas são usadas em programação? A seguir, vamos mostrar operações aritméticas e lógicas implementadas em algoritmos simples, usando o visualg. Não devemos perder de vista, contudo, que são essas operações que fundamentam programas complexos e processamento de dados em grande escala. O poder analítico desse processamento nos é lembrado com frequência, como acontece com as vitórias de sistemas computacionais sobre grandes mestres do xadrez (ver box explicativo).
Em 1997, o supercomputador Deep Blue da IBM venceu o campeão mundial de xadrez Garry Kasparov em um match de seis partidas. O evento chamou a atenção do mundo para os avanços em inteligência artificial, estimulando a reflexão sobre os limites e as potencialidades dos computadores. Kasparov havia derrotado uma versão desse computador em 1996 e acusou a IBM de fraudar a disputa em 1997. A fraude teria sido o uso de grandes mestres de xadrez para apoiar o processo de decisão do computador. De qualquer modo, a superioridade dos computadores nesse jogo foi reafirmada por programas de software mais inteligentes e que, assim, não requerem a capacidade de processamento do Deep Blue. Se este calculava até 200 milhões de posições de jogo por segundo em um estrutura complexa e dedicada, o programa Deep Fritz, rodando em Windows com processadores Pentium, conseguiu derrotar o campeão mundial Vladimir Kramnik em 2006 (NEWBORN, 2011).
66 •
capítulo 3
Figura 3 – Supercomputador Deep Blue (Museu da História do Computador, Califórnia. Fonte:< http://commons.wikimedia.org/wiki/File:Deep_Blue.jpg>. Acesso 24 jul. de 2014
Figura 4 – Garry Kasparov. Fonte: <http://commons.wikimedia.org/ wiki/File:Kasparov-27.jpg>. Acesso em 24 jul. de 2014.
3.3.1 Comandos de entrada e saída Os algoritmos computacionais e os programas têm como principal funcionalidade o processamento de informações. Essas informações geralmente são fornecidas pelo usuário, o qual utiliza o teclado para entrada de dados e, em um segundo momento, os resultados são apresentados em dispositivos de saída como monitor ou impressora. Durante o processo de construção de algoritmos, o programador pode contar com instruções específicas para carregar informações fornecidas pelo usuário e para apresentar resultados na tela, essas instruções são chamadas de comandos de entrada e saída. Para leitura de informações, o comando utilizado para entrada de dados é conhecido como leia. Assim, com este comando é possível transferir uma informação digitada pelo usuário com o teclado para uma determinada variável no escopo do algoritmo. Por outro lado, para a apresentação de uma informação na tela é utilizada um comando de saída específico denominado escreva. Para demonstrar a utilização dos comandos de entrada e saída vamos construir uma calculadora simples de quatro operações. Nesta calculadora, o usuário fornecerá dois valores números (valor1 e valor2) e serão realizados os cálculos de soma, subtração, multiplicação e divisão. Para leitura dos valores será utilizado o comando leia e para a apresentação dos resultados será necessário o comando escreva. Na linguagem algorítmica VisuAlg, existe uma variação do
capítulo 3
• 67
comando escreva denominada escreval. Este comando, além de exibir as informações desejadas na tela, também realizar a quebra de linha, ou seja, o comando é capaz de exibir uma determinada informação na tela e mudar de linha. Com isso, os dados não serão apresentados em uma única linha, o que facilita bastante a exibição de grandes quantidades de informações. O algoritmo que codifica a calculadora simples de quatro operações foi nomeado como unid3_exemplo06 e a figura 5 apresenta a codificação completa do exemplo.
Figura 5 – Algoritmo que codifica um cálculo simples com quatro operações.
O resultado da execução do algoritmo é apresentado na figura 6. Nessa execução, os valores fornecidos como entrada foram 10 e 20.
Figura 6 – Resultado da execução do algoritmo.
68 •
capítulo 3
O próximo exemplo de codificação utilizando comandos de entrada e saída tem como objetivo construir um algoritmo capaz de calcular o consumo médio de combustível de um veículo. Para isso, o usuário deverá informar como entrada os quilômetros percorridos pelo veículo e o total de litros abastecidos. Com isso, o algoritmo é capaz de determinar o consumo médio e o resultado é exibido na tela. Este algoritmo foi nomeado como unid3_exemplo07, e a codificação é demonstrada na figura 7.
Figura 7 – Algoritmo para determinar o consumo médio de combustível de um veículo.
O resultado da execução do algoritmo pode ser visualizado na Figura 8. Os parâmetros informados na entrada foram 460 para quilômetros rodados e 50 para litros abastecidos.
Figura 8 – Resultado da execução do algoritmo.
capítulo 3
• 69
3.3.2 Operações e expressões Os computadores podem ser encarados como grandes máquinas capazes de realizar uma quantidade imensa de operações por segundo. Na evolução histórica da computação, os primeiros algoritmos foram criados com o intuito de solucionar complexas expressões em poucos segundos. As expressões são formadas essencialmente por operadores, operandos e parênteses. De acordo com o tipo de operador utilizado, podemos criar expressões denominadas: 3.3.3 Expressões aritméticas As expressões aritméticas utilizam os operadores aritméticos da matemática tradicional para criar expressões capazes de resolver os mais variados tipos de funções. Neste grupo, os principais operadores utilizados são soma (+), subtração (–), multiplicação (*), divisão (/) e resto da divisão (%). A figura 9 apresenta a codificação de um algoritmo que utiliza expressões aritméticas para resolver um polinômio. Este algoritmo foi nomeado como unid3_exemplo08.alg.
Figura 9 – Algoritmo computacional que utiliza expressões aritméticas.
70 •
capítulo 3
A figura 10 apresenta o resultado da execução do algoritmo.
Figura 10 – Resultado da execução do algoritmo.
3.3.4 Expressões relacionais Quando construímos algoritmos é muito comum a necessidade de comparar, ou estabelecer relações entre determinados operandos. Para isso, podemos utilizar um conjunto específico de operadores capazes de produzir expressões relacionais. Os operadores relacionais conhecidos são: • maior (>) • menor (<) • menor ou igual (<=) • maior ou igual (>=) • igual (=) • diferente (<>). A figura 11 demonstra a construção de um algoritmo computacional que utiliza expressões relacionais. Note no algoritmo que todos os operadores relacionais são expressões por meio de símbolos. Este algoritmo foi nomeado como unid3_exemplo09.alg.
capítulo 3
• 71
Figura 11 – Algoritmo computacional que demonstra a utilização de expressões e operadores relacionais.
A figura 12 apresenta o resultado da execução do algoritmo.
Figura 12 – Resultado da execução do algoritmo.
72 •
capítulo 3
ATENÇÃO Em uma expressão relacional o resultado produzido pela avaliação da expressão é sempre um valor lógico. Assim, uma expressão relacional resulta em um valor do tipo verdadeiro ou falso.
3.3.5 Expressões lógicas Na construção de algoritmos computacionais também é possível criar expressões a partir de operadores lógicos. Estas expressões são conhecidas como expressões lógicas. Para criação de uma expressão lógica é necessário utilizar operadores booleanos, em que os principais são: • negação (NOT) • conjunção1 (E) • disjunção (OU) • disjunção-exclusiva (XOR) Na figura 13 é apresentada a codificação de um algoritmo capaz de calcular a tabela-verdade a partir de expressões lógicas. Neste exemplo é possível determinar um dos principais conceitos da lógica matemática conhecido como tabela-verdade. Este algoritmo foi nomeado como unid3_exemplo10.alg.
CONEXÃO Para um estudo aprofundado a respeito de tabelas verdade, você poderá consultar as seguintes referências: <http://pt.wikipedia.org/wiki/Tabela_verdade> <http://www.calculadoraonline.com.br/tabela-verdade> Os operadores lógicos são muito importantes para a construção de programas, principalmente para a elaboração de expressões relacionais compostas. Para complementar seu estudo você poderá utilizar a seguinte referência: <http://pt.wikipedia.org/wiki/Operadores_l%C3%B3gicos> Acesso em 24 jul. de 2014.
1
Oportunidade; ocasião; conjuntura.
capítulo 3
• 73
Figura 13 – Algoritmo computacional que demonstra a utilização de expressões e operadores lógicos.
A figura 14 apresenta o resultado da execução do algoritmo.
Figura 14 – Resultado da execução do algoritmo.
Com isso, concluímos o estudo a respeito dos operadores e das expressões aritméticas, relacionais e lógicas. Aproveite este momento para construir algoritmos a partir das atividades propostas.
74 •
capítulo 3
ATIVIDADE 1. Monte uma tabela-verdade para o operador AND com quatro entradas. 2. Monte uma tabela-verdade para o operador OR com três entradas. 3. Por que a álgebra booleana se mostrou adequada para circuitos elétricos? 4. Qual é o valor de q no circuito lógico abaixo?
1 1 0
q
REFLEXÃO Não ocorrendo problemas de hardware, um computador basicamente segue as instruções que lhe são fornecidas, incluindo aquelas de operações lógicas. Sendo assim, quando nos deparamos com falhas em nossos programas e equipamentos, seria mais adequado falar em erro humano?
LEITURA BERLINSKI, D. O Advento do Algoritmo: A ideia que governa o mundo. Rio de Janeiro: Globo, 2002. Esta obra oferece o desenvolvimento histórico do algoritmo, um conceito que antecede o desenvolvimento dos computadores, mas que agora, como demonstra o autor, está presente em quase todas as nossas atividades.
capítulo 3
• 75
REFERÊNCIAS BIBLIOGRÁFICAS CAPRON, H. L.; JOHNSON, J. A. Introdução à Informática. São Paulo: Pearson Prentice Hall. 2004. GLEICK, J. The Information: A history, a theory, a flood. Nova York: Random House, 2011. LAUDON, K. C. e LAUDON, J. P. Sistemas de Informação Gerenciais. São Paulo: Prentice Hall. 2007. MONTEIRO, M. A. Introdução à Organização de Computadores. 5a ed. São Paulo: LTC, 2007. MURDOCA, M. J.; HEURING, V. P. Introdução à Arquitetura de Computadores. Rio de Janeiro: Campus, 2001. NEWBORN, M. Beyond Deep Blue. Nova York: Springer, 2011. NULL, L.; LOBUR, J. Princípios Básicos de Arquitetura e Organização de Computadores. 2a ed. Porto Alegre: Bookman, 2010. STALLINGS, W. Arquitetura e Organização de Computadores. São Paulo: Prentice Hall, 2002.
NO PRÓXIMO CAPÍTULO No próximo capítulo, vamos compreender como as instruções são recebidas e executadas pela Unidade Central de Processamento.
76 •
capítulo 3
4 Instruçþes e Processamento
4 Instruções e Processamento A partir do conteúdo anterior, entendemos os sistemas computacionais como executores de instruções, baseados fundamentalmente na liguagem binária e na álgebra booleana (LAUDON & LAUDON, 2007; CAPRON & JOHNSON, 2004). Neste capítulo, vamos entender melhor o que são instruções e quais são os seus tipos. Vamos explorar como o processador se relaciona com o fluxo dessas instruções, inclusive com a sua interrupção. Para esse entendimento, será necessário compreender os componentes básicos da Unidade Central de Processamento (UCP). Por fim, vamos apontar algumas dimensões mais operacionais da implementação dos sistemas de computador, incluindo a placa-mãe, linguagens de programação e os sistemas operacionais.
OBJETIVOS • Identificar as funções dos componentes da UCP. • Reconhecer os diferentes tipos de instruções. • Dominar a estrutura básica das instruções. • Conhecer os tipos de interrupção.
REFLEXÃO Quantas vezes você viu uma campanha sobre o lançamento de uma nova geração de microprocessadores? A velocidade dos computadores que você usa se mantém constante ou tende a cair? A maior parte dos problemas de processamento é devido aos microprocessadores, ou você identifica outras causas mais relevantes?
4.1 Componentes fundamentais para o processamento No capítulo 1, vimos uma esquematização básica de um computador, como também a arquitetura de Von Neumann. Entendemos o computador como uma máquina que recebe instruções e dados, processa estes na UCP com o auxílio do armazenamento de memória e, por fim, realiza a saída aos dados. Segundo Null e Lobur, a UCP “é responsável por carregar instruções de programas, decodificar cada instrução carregada e realizar a sequência indicada de capítulo 4
• 79
operações sobre os dados corretos” (2010, p. 208). Na UCP, há elementos fundamentais que dão base a esse processo. Esses elementos podem ser internamente restritos à UCP ou servirem de interface a componentes externos. Na figura 1, encontra-se uma representação da Arquitetura de Von Neumann com uma especificação mais detalhada dos seus elementos, os quais serão explicados a seguir.
Memória Programa
Barramento Dispositivo de E/S
Área de dados
1 010101 11001 101 01000 1 111 1 10 0 110 10001 1101 0001 1 101
......................... Área de código
Registro
110 0 110 10001 1101 0001 1 101 1 010101 11001 101 01000 1 111 1 10 0 110 10001 1101 0001 1 101
UAL
Un. de Controle
Figura 1 – Arquitetura de Von Neumann
Fonte: <http://pt.wikipedia.org/wiki/Arquitectura_de_von_Neumann#mediaviewer/Ficheiro:Arquitectura_von_Neumann.png>. Acesso em: 24 jul. de 2014. Registradores São componentes de hardware que guardam dados binários relativos a dados, endereços de memórias e informações de controle. Não devem ser confundidos com os dispositivos de armazenamento do computador, pois são internos à UCP (MURDOCA & HEURING; 2000). Os registradores podem ler dados em tamanho fixo, sendo mais comumente hoje palavras de 16 ou 32 bits (MONTEIRO, 2007). A arquitetura do processador designa a quantidade de registradores, tamanho de leitura, assim como pode especificar funções específicas para cada registrador. Unidade de Aritmética e Lógica (UAL) As operações matemáticas e de álgebra booleana que vimos anteriormente são executadas pela UAL.
80 •
capítulo 4
Unidade de Controle Essa unidade é responsável por manipular os registradores adequadamente e ativar a UAL para as operações requeridas na ordem correta. Cabe ainda à Unidade de Controle executar interrupções e monitor o estado das operações (STALLINGS, 2002). Relógio A frequência desse dispositivo sincroniza todo o sistema computacional. Os registradores podem ser carregados com outro dados apenas com a passagem de um ciclo do relógio (NULL & LOBUR, 2010). Interfaces de Entrada e Saída (E/S) A UCP recebe e disponibiliza dados por meio de dispositivos externos como mouses, teclados, microfones, scanners (entrada) ou telas, alto-falantes, impressoras (saída), para citar alguns exemplos comuns. O sinais entre UCP e esses dispositivos precisam ser devidamente formatados para serem entendidos. Barramento Os elementos descritos acima precisam se comunicar, transmitindo dados, instruções de controle e energia. Essa comunicação é feita pelo conjunto de vias de transmissão chamado barramento.
4.2 Instruções de computador 4.2.1 Estrutura e tipos Cada tipo de processador é capaz de executar um determinado conjunto de instruções (MURDOCCA & HEURING, 2000). Esse fato ajuda a explicar os problemas de compatibilidade entre arquiteturas de computadores, pois elas possuem conjuntos diferentes. Essas questões de compatibilidade tiveram e ainda têm consequências importantes para usuários e empresas do setor.
capítulo 4
• 81
O tipo de processador tem diversas implicações para a arquitetura do computador e para o desenvolvimento de software. Por décadas, a Apple preferiu não adotar chips Intel, que foram a base da explosão do mercado de computadores pessoais, seja com os sistemas operacionais DOS ou Windows da Microsoft. Quando o Macintosh foi lançado em 1984, a máquina usava processadores da Motorola. Com esta empresa e a IBM, a Apple fez um consórcio que criou a arquitetura do processador PowerPC em 1991. Porém em 2005, Steve Jobs anunciava a transição para os processadores Intel, citando como motivo a superioridade de desempenho. (LASHINSKY, 2012; LINZMAYER, 2004). É interessante notar que tablets e smartphones são comumente baseados em chips ARM, que possuem uma arquitetura diferente dos chips de PCs. Assim, embora haja bastante semelhanças visuais entre a interface de um computador da Apple e a de um iPhone, os seus sistemas operacionais - MAC OS E iOS respectivamente - são construídos e funcionam de forma muito distinta. A Microsoft buscou essa aproximação das interfaces do desktop e de aparelhos móveis com o Windows 8 e o Windows RT, embora o uso dos dois sistemas tenha ficado abaixo das expectativas da empresa (OVIDE, 2013).
Figura 2 – Steve Jobs anunciando a transição para processadores Intel (2005).
<http://en.wikipedia.org/wiki/File:Steve_Jobs_Presentation_1.jpg>. Acesso em 24 jul. de 2014.
82 •
capítulo 4
CONEXÃO Leia um artigo que resume a história dos microprocessadores e a disputa entre Intel e AMD: <http://www.tecmundo.com.br/historia/2157-a-historia-dos-processadores.htm> Acesso em 24 jul. de 2014.
Segundo Stallings (2000), uma instrução deve possuir os seguintes elementos de modo a fornecer toda a informação requerida para a execução: • Código da operação. A operação de adição, por exemplo, é usualmente simbolizada por ADD. • Referência aos operandos de entrada: dados que serão processados, endereços de memória, entre outros. • Referência aos operandos de saída: resultado da operação. • Endereço da instrução seguinte. O quadro 4.1 sumariza os tipos principais de instruções. Há aquelas que envolvem operações lógicas e aritméticas como vimos no capítulo anterior. Porém há instruções específicas que se referem a armazenamento e movimentação de dados, assim como instruções ligadas ao próprio controle de instruções (MURDOCCA & HEURING, 2000).
TIPO DE INSTRUÇÃO
FUNÇÃO/EXEMPLOS
CODIFICAÇÃO COMUM
Aritmética / Lógica
Adicionar, subtrair, conjunção
ADD, SUB, AND
Movimentação de dados
Faz a transferência de dados
LOAD,
entre os registradores e a
OUT
STORE,
memória principal ou entre o registradores entre si: carregar, gravar, saída.
capítulo 4
• 83
TIPO DE INSTRUÇÃO
FUNÇÃO/EXEMPLOS
Transferência de Con-
Chamar subrotinas, Desviar a
trole
instrução do fluxo sequencial:
CODIFICAÇÃO COMUM HALT, JE
suspensão, “desvia se igual”.
Quadro 4.1 – Tipos Principais de Instruções
Fonte: adaptado de Murdocca & Heuring, 2000
ATENÇÃO O termo operando se refere a dados que serão objeto de operações de processamento. Stallings (2002) classifica os operandos em quatro tipos: Números. Exemplos.: inteiros, de ponto flutuante. Caracteres: Exemplos.: alfabeto latino, chinês, símbolos especiais. Dados lógicos. Exemplos: verdadeiro, falso. Endereços de memória: registros no disco rígido.
4.2.2 Ciclo de instrução e interrupção Monteiro (2007) ilustra um ciclo simplifica de instrução conforme a figura 3. O próprio autor chama atenção que os computadores de hoje não mais realizam uma instrução só por vez. O modelo atualmente empregado usa o método de pipelining, em que as instruções são executadas de forma paralela. Por esse método, as instruções são dividas em etapas, permitindo que a UCP armazene e execute diversas instruções por vez. Outro ponto positivo desse método, é que são armazenadas continuamente etapas de instruções nos registradores, evitando que se espere para buscá-las na memória principal, um procedimento mais lento. Como desvantagem do pipelining, está a maior complexidade do controle da instruções, o que pode implicar conflitos e problemas de fluxos de memória (MURDOCCA & HEURING, 2000).
84 •
capítulo 4
ATENÇÃO Overflow aritmético acontece quando o resultado matemático de uma operação ultrapassa o valor designado de memória e/ou o formato designado de sua variável.
O ciclo esquematizado na figura 3, ou qualquer ou ciclo que envolva instruções, pode ser interrompido por causa diversas (NULL & LOBUR, 2010): • Instruções de entrada e saída, como aquelas requisitadas pelo usuário. (No ambiente Windows, é possível interromper processos por meio do gerenciador de tarefas, acionado pela combinação CTRL+ALT+DEL) • Erros em operações aritméticas: divisão por zero, overflow. • Problemas de hardware. • Instruções inválidas. Início Busca instrução na memória Interpretar a operação a ser realizada Busca operandos (se houver)
Executar a operação
Escrever o resultado Término
Figura 3 – Ciclo de Instrução Básico (MONTEIRO, 2007, p. 157).
capítulo 4
• 85
4.3 Aspectos de arquitetura nos computadores pessoais Até este momento, tratamos de modelos para instruções e para arquitetura de computadores. Nesta seção, vamos explorar aspectos mais visíveis em nossos computadores de uso cotidiano. Inicialmente, vamos apresentar a função da placa-mãe, que ajuda a entender a arquitetura do computador em termos físicos. Depois, vamos falar da linguagem de alto nível e um pouco sobre sistemas operacionais, que correspondem a aspectos práticos das instruções para o usuário. 4.3.1 Placa-mãe A placa-mãe realiza a comunicação e dá suporte físico aos componentes do computador. Essa comunicação pode se referir àquela entre os componentes internos, ou entre esses componentes e interfaces externas. Por meio da placamãe, o processador se comunica com a memória principal; esta se comunica com a memória principal se comunica com dispositivos de armazenamento secundário; os resultados de cálculo são transmitido para a tela; etc. Para tanto, as placas-mãe possuem conjuntos de circuitos integrados (chipsets) que fazem a comunicação entre o processador, a memória e o controle de periféricos. (CORNACCHIONE, 2012). Avanços na tecnologia dessas placas buscam prover uma melhor ventilação e resfriamento, especialmente ao processador (CORNACCHIONE, 2012).
ATENÇÃO Como a placa-mãe é responsável por transmitir sinais elétricos entre componentes eletrônicos, quaisquer fatores físicos que prejudiquem a qualidade desse comunicação dificultará ou mesmo impedirá o desempenho do computador, por exemplo: poeira, umidade e maresia, oscilações de energia (corrente/voltagem), altas temperaturas e falta de ventilação. Algumas placas-mãe são banhadas a ouro para prevenir a oxidação. Em todos os casos, recomenda-se realizar a manutenção preventiva da placa-mãe e não apenas a corretiva, depois que problemas se manifestaram.
86 •
capítulo 4
Figura 4 – Placa-mãe Disponível em: <http://en.wikipedia.org/wiki/Mother_board#mediaviewer/File:MicroATX_Motherboard_with_AMD_Athlon_Processor_2_Digon3.jpg>. Acesso em: 24 jul. de 2014.
Figura 5 – Processador AMD
Figura 6 – Chipset
Disponível em: <http://pt.wikipe-
<http://pt.wikipedia.org/wiki/
dia.org/wiki/Placa-m%C3%A3e#-
Chipset#mediaviewer/>Fi-
mediaviewer/>Ficheiro:AMD-A-
cheiro:Southbridge.jpg Acesso
thlonXP-1700.jpg>. Acesso em 24
em 24 jul. de 2014.
jul. de 2014.
capítulo 4
• 87
4.3.2 Software e instruções Como falamos antes, para usar os recursos de hardware você precisará de software. Sem o software, seu hardware apenas ficará inerte. Por meio do software, o hardware recebe instruções detalhadas que dizem ao computador o que deve ser feito. Basicamente, nós temos dois tipos de software. Antes, na época do ENIAC, todo o software era escrito desde o começo, e o próprio software precisava saber manipular tudo o que fosse necessário: tanto a informação quanto os próprios componentes do computador. Os dois tipos de software hoje existentes são o software de sistema e o software aplicativo. ADAPTADO DE (LAUDON E LAUDON, 2007)
Software aplicativo Software de sistemas
Hardware
Software de Sistemas Sistemas operacionais Tradutores de linguagem Programas utilitários
Software Aplicativo Linguagens de programação Linguagens de quarta geração Pacotes de software e ferramentas de produtividade para PCs
Figura 7 – Principais tipos de software.
O software de sistema inclui os sistemas operacionais, os tradutores de linguagem e os programas utilitários. Os softwares aplicativos incluem as linguagens de programação, as linguagens de quarta geração e os pacotes de software. Os softwares aplicativos com os quais temos mais contatos são os pacotes de software. São ferramentas como suítes de aplicativos para escritório, como o Office, da Microsoft. Incluem editores de texto, planilhas eletrônicas, editores de apresentações, dentre outros.Um navegador para Internet, como o Internet Explorer, o Firefox ou o Opera, é um exemplo de software aplicativo também. Enfim, são softwares para utilização do usuário final. Estes softwares aplicativos foram construídos, de alguma maneira, usando linguagens de programação. No entanto, o desenvolvedor, ao criar um software, precisa cuidar de muitos detalhes de funcionamento. Isto torna custoso o processo de desenvolvimento. Porém, este desenvolvedor não precisa saber
88 •
capítulo 4
como o computador faz para escrever ou desenhar uma interface gráfica na tela do seu monitor. Para isto, basta que ele solicite (escreva) isto no seu código, e quem cuidará da execução deste tipo de tarefa é o sistema operacional. 4.3.2.1 Software de sistema O software de sistema operacional é aquele que “conversa” com o hardware e manipula seus recursos. Ele “sabe” como escrever informações na saída, seja um vídeo ou impressora. Ele também sabe como interpretar as informações vindas da entrada, como o mouse e o teclado. Além disto, sabe como guardar estas informações na memória e levá-las ao processador quando necessário, para que as tarefas descritas por linguagens de programação possam ser executadas e transformem-se em programas úteis aos usuários finais, como uma planilha de cálculo, por exemplo. É por isto que, na figura vista, o sistema operacional fica próximo do núcleo do computador, que é o hardware. Ele traduz as necessidades dos softwares aplicativos e, assim, os desenvolvedores têm mais facilidade para trabalhar. Um sistema operacional de propósito geral (pois existem SOs para atividades específicas) é uma coleção de outros softwares que gerenciam todos os dispositivos do computador. Em geral, ele possui os seguintes componentes: • gerenciador (escalonador) de processos; • gerenciador de memória; • gerenciador de entrada e saída; • gerenciador de sistema de arquivos. Um programa é apenas um conjunto de instruções a serem realizadas, como uma receita. No entanto, o programa está escrito numa linguagem de máquina, que o computador possa compreender. Quando você deseja usar este programa, ele se torna um processo para o sistema operacional. Por isso, o SO possui um escalonador de processos. Por meio dele, o SO consegue controlar os programas em execução, manipular informações para este processo, controlar os arquivos que este processo está usando, dentre outros. O gerenciador de memória atua no sistema operacional para garantir que cada processo tenha seu espaço de trabalho reservado na memória RAM (a memória de trabalho). O gerenciador de entrada e saída controla e manipula informações que, por exemplo, entram pelo teclado, digitadas pelo usuário, e devem ser escritas na tela do monitor. Além disso, também controlam dispositivos de armazenamento, como discos, CDs, pen drives etc. Já o gerenciador do sistema
capítulo 4
• 89
de arquivos garante a manipulação de arquivos em dispositivos de armazenamento, cuida para que os arquivos fiquem organizados e possam ser acessados. Estes componentes do sistema operacional, normalmente, não são visíveis ao usuário final. Digo normalmente porque, em sistemas com código fonte aberto, como o Linux, é possível ao usuário não só ver como alterar os códigos para os componentes do sistema operacional. Para os usuários finais, a manipulação dos recursos oferecidos é feita por meio de uma interface. Esta interface começou em seus primórdios, como a famosa “linha de comando” ou interface modo texto! E hoje evoluímos para interfaces gráficas (tão comuns para as novas gerações que já nasceram com a existência dela), interfaces por comandos de voz etc. 4.3.2.2 Tradutores de linguagem Além dos sistemas operacionais, temos também os softwares que fazem a tradução de linguagem e os softwares utilitários. Os softwares de tradução convertem o código escrito numa linguagem de programação (veja o tópico seguinte) para a linguagem de máquina que será compreendida pelo hardware e usará recursos administrados pelo sistema operacional. Já os programas utilitários são aqueles que auxiliam o usuário na configuração e no gerenciamento do sistema operacional de seu computador. Um exemplo de programa utilitário é o Windows Explorer para Windows. Trata-se de um gerenciador de arquivos que permite ao usuário encontrar seus arquivos no computador, como na figura a seguir.
Figura 8 – Gerenciador de arquivos Windows Explorer
90 •
capítulo 4
Você já deve estar habituada a ela, não é mesmo?
Figura 9 – Desfragmentador de Discos do Windows
Outra ferramenta que podemos citar é o Desfragmentador de Discos, que serve para reorganizar os arquivos que estão no disco rígido de maneira a ocuparem menos espaço. Além desses, existem diversas outras ferramentas para auxiliar na configuração da área de trabalho, no logon (entrada do usuário no sistema), no gerenciamento de recursos etc.
CONEXÃO Recomendações 3.2 Se você quiser saber, detalhadamente, sobre o funcionamento do sistema operacional, acesse: <http://informatica.hsw.uol.com.br/sistemas-operacionais.htm>. Acesso em: 24 jul. de 2014.
4.3.2.3 Linguagens de programação Dentre os softwares aplicativos existentes, temos as linguagens de programação, as chamadas linguagens de quarta geração e os pacotes de software e ferramentas de produtividade. Existem diversas linguagens de programação famosas, como C, C++, Java, COBOL, Visual Basic, C#, PHP, Python e muitas outras. A linguagem de programação serve para representarmos as instruções que um programa deve realizar para alguma tarefa. O computador entende apenas sinais elétricos. Como representamos a existência (1) ou a ausência (0) de sinal, a linguagem que o computador entende é chamada de binária. Logo, se instruirmos o computador por meio de uma linguagem binária, ele poderá realizar a tarefa que desejamos.
capítulo 4
• 91
100100100100100111 001100011111101011
Figura 10 – O computador compreende a linguagem binária
No entanto, é muito difícil escrever na linguagem do computador, assim como é muito difícil escrever em inglês ou em japonês se você não conhece a fundo a linguagem! Mas, se precisamos dar estas instruções e não sabemos a linguagem daquele que será instruído, então podemos usar algum intermediário, por exemplo um tradutor.
??? Mostre um número na sua tela.
Figura 11 – O computador não compreende a linguagem de alto nível
Esse intermediário, o tradutor, precisa saber falar a sua linguagem e a linguagem do computador. Assim, ele precisará converter o que você quiser para a linguagem de computador (o binário!).
Mostre um número na sua tela.
Compilador
100100100100100111 001100011111101011
Figura 12 – O compilador traduz a linguagem de alto nível para a linguagem binária
92 •
capítulo 4
Em computação, esse tradutor é chamado de compilador, e a conversão de uma linguagem em outra é chamada de processo de compilação. O tradutor é uma ferramenta de sistema, enquanto a linguagem é um software voltado ao usuário (para que possa “programar” o sistema). 4.3.2.4 Linguagens de quarto nível As linguagens de quarta geração consistem num conjunto de diversas ferramentas de software para auxiliar os usuários finais no desenvolvimento de softwares aplicativos sem necessitar tanto de conhecimentos mais técnicos. Algumas linguagens de programação, como Java e C++, são consideradas de quarta geração por não serem procedurais, mas sim orientadas a objetos. A tabela a seguir mostra sete tipos de linguagens de quarta geração.
CONEXÃO Recomendações 3.3 Veja mais informações sobre as linguagens e suas gerações em: <http://pt.wikipedia.org/wiki/Linguagem_de_programa%C3%A7%C3%A3o_de_quarta_ gera%C3%A7%C3%A3o>. <http://pt.wikipedia.org/wiki/Linguagem_de_programa%C3%A7%C3%A3o>. Acesso em 24 jul. de 2014.
capítulo 4
• 93
FERRAMENTAS DE LINGUAGEM DE QUARTA GERAÇÃO Ferramentas de software de PC
Linguagens de consulta
Geradores de relatórios
Linguagens gráficas
Geradores de aplicações
Pacotes de softwares aplicativos
Linguagens de programação de altíssimo nível
94 •
capítulo 4
DESCRIÇÃO
EXEMPLO
WordPerfect Pacotes de softwares de uso geral Internet Explores para PCs. Access Linguagens para extrair dados armazenados em arquivos ou bancos de SQL dados. Suportam requisições de informações que não são predefinidas. Extraem dados de arquivos ou bancos de dados para criar relatórios específicos sob uma grande variedade de formatos que não são produzidos por sistemas de informação. Cristal Reports Geralmente proporcionam maior controle sobre a maneira como dos dados são formatados, organizados e apresentados do que as linguagens de consulta. Extraem dados de arquivos ou banco de dados e os apresentam sob o formato de gráficos. alguns softwares SAS Graph geradores de gráficos também pode Systat executar operações aritméticas ou lógicas com os dados. Contém módulos pré-programados que poderm gerar aplicações completas, incluindo sites Web, conferindo FOCUS grande velocidade ao desenvolvimenPowerBuilder to. O usuário pode especificar o que Microsoft Fronprecisa ser feito e o gerador de aplitPage cação criará o código de programa apropriado para entrada, validação, atualização e apresentação. Programas de software vendidos ou arrendados por empresas comerciais PeopleSoft HRMS que eliminam a necessidade de sof- SAP R/3 tware personalizado, da casa. Gerem códigos de programa com um número menor de instruções do que as linguagens convencionais, como APL COBOL ou FORTRAN. Projetadas Normad2 primordialmente como ferramentas de produtividade para programadores profissionais.
Orientada para o usuário final
ATIVIDADE 1. Quais causas podem acarretar o interrompimento de uma instrução? 2. O que são registradores e o que os diferenciam da memória de armazenamento? 3. Pesquise sobre a relação entre a Lei de Moore e os microprocessadores com núcleo múltiplos. 4. Pesquise sobre as linguagens de primeiro ao quinto nível.
REFLEXÃO Por muito tempo, a capacidade dos processadores foi um limite frequente para a microinformática. Avanços em software e hardware frequentemente precisavam esperar uma nova geração de microchips. Reflita sobre o estado atual da microinformática: são os microprocessadores hoje um gargalo relevante para a maioria dos usuários? Caso contrário, que fator se tornou a principal fronteira da microinformática?
LEITURA Relatório de pesquisa: TUSSET, F. Evolução dos processadores. Rio de Janeiro: UFRJ, sem ano. Disponível em: <http://equipe.nce.ufrj.br/gabriel/arqcomp2/Hist%F3rico.pdf>. Acesso em: 15 jun. 2014.
REFERÊNCIAS BIBLIOGRÁFICAS CAPRON, H. L.; JOHNSON, J. A. Introdução à Informática. São Paulo: Pearson Prentice Hall. 2004. CORNACCHIONE JR., E. B. Informática. São Paulo: Atlas, 2012. LAUDON, K. C. e LAUDON, J. P. Sistemas de Informação Gerenciais. São Paulo: Prentice Hall. 2007.
capítulo 4
• 95
LASHINSKY, A. Nos Bastidores da Apple. São Paulo: Saraiva, 2012. LINZMAYER, O. W. Apple Confidential 2.0 – The definitive history of the world’s most colorful company. São Francisco: No Starch, 2004. MONTEIRO, M. A. Introdução à Organização de Computadores. 5a ed. São Paulo: LTC, 2007. MURDOCA, M. J.; HEURING, V. P. Introdução à Arquitetura de Computadores. Rio de Janeiro: Campus, 2001. NULL, L.; LOBUR, J. Princípios Básicos de Arquitetura e Organização de Computadores. 2a ed. Porto Alegre: Bookman, 2010. OVIDE, S. CEO exits sets Microsoft on new path. The Wall Street Journal, edic’ão eletrônica, 25 ago 2013. Disponível em: <http://online.wsj.com/news/articles/SB10001424127887324619 504579031300409638802>. Acesso em: 15 jun. 2014. STALLINGS, W. Arquitetura e Organização de Computadores. São Paulo: Prentice Hall, 2002.
NO PRÓXIMO CAPÍTULO No próximo capítulo, vamos entender como funciona o sistema de memória e as suas operações com a UCP. Ainda, vamos explorar os dispositivos de entrada e saída..
96 •
capítulo 4
5 MemĂłria e Dispositivos de Entrada e SaĂda
5 Memória e Dispositivos de Entrada e Saída No capítulo anterior, vimos como a UCP precisa ter dados e instruções disponíveis para que possa cumprir a sua função. A fonte imediata de dados para a UCP encontra-se nos registradores, que são componentes internos à unidade. Os registradores se caracterizam pela rapidez com que se comunicam com o processador, porém eles possuem uma capacidade limitada de armazenamento e outros componentes de memória também precisam ser utilizados (LAUDON & LAUDON, 2007; CAPRON & JOHNSON, 2004). Neste capítulo, vamos identificar os tipos principais de memória e como se dá a sua inter-relação. Também discutiremos as interfaces de entrada e saída.
OBJETIVOS • Conhecer os diferentes tipos de memória e as suas inter-relações. • Identificar os trade-offs a respeito do desempenho dos dispositivos de memória. • Compreender a importância da memórica cache. • Saber como funcionam diferentes dispositivos de entrada e saída e a sua comunicação com a UCP. • Avaliar os diferentes tipos de computadores em relação a seus dispositvos de entrada e saída.
REFLEXÃO Busque identificar todos os tipos de armazenamento que você possui e classifique-os em termos de velocidade de transferência e capacidade. Quais tipos de armazenamento você já usou com frequência, mas hoje estão obsoletos? Quantas vezes você já foi prejudicado por problemas relacionados a armazenamentos de dados?
capítulo 5
• 99
5.1 Memória 5.1.1 Hierarquia Os diversos tipos de memória são definidos em termos da sua relação com a UCP. Quanto mais direta for essa relação, considera-se maior a sua posição hierárquica. Há diversas formas de ilustrar essa hierarquia, a figura 1 é baseada na versão de Stallings (2002) e Murdoca & Heuring (2000). Deve-se notar que discos rígidos são considerados como armazenamento externo ou secundário. Apesar de possuírem uma interface com a placa-mãe, essa relação não é tão direta e veloz quanto aquela da memória interna à UCP. Durante o funcionamento da UCP, primeiro se verifica se o dado necessário está ou não na memória interna. Em caso contrário, é acionado o armazenamento externo e assim por diante. Mais rápida e cara
Memória Interna Armazenamento Externo (disco)
Armazenamento de Segurança (fitas) Mais lenta e barata Figura 1 – Hierarquia da Memória
Fonte: Adaptado de Stallings (2002, p. 100) e Murdoca & Heuring (2000, p. 225). Deve-se notar que quanto mais alto estiver na hierarquia, mais custoso tende a ser o dispositivo. Assim, um projeto de computador deve balancear os benefícios trazidos pela capacidade da memória interna face a seus custos. Ainda, deve haver um balanceamento adequado na velocidade dos componentes
100 •
capítulo 5
do computador: De nada adianta, por exemplo, haver uma grande capacidade de memória se os dispositivos de saída atrasarem os ciclos de instruções. Da mesma forma, um processador potente pode permanecer subutilizado se não houver a capacidade de memória adequada (MONTEIRO, 2007). 5.1.2 Características dos dispositivos de memória O quadro 5.1 sumariza as características fundamentais dos componentes de memória, as quais serão exploradas ao longo deste capítulo. A característica de localização reflete a hierarquia discutida anteriormente. Quanto à unidade de transferência, sabemos do capítulo 2 que os processadores e certos dispositivos de memória leem e transferem dados em tamanho fixo, daí uma das diferenças entre computadores de 16 ou 32 bits. Quanto aos métodos de acesso que os dispositivos utilizam para localizar e dispor dados, a figura 2 sumariza os tipos principais.
CARACTERÍSTICA
TIPOS PRINCIPAIS
Localização
No processador (registradores), interno, externo.
Capacidade
Tamanho da palavra (16, 32 bits), número de palavras.
Unidade de transferência
Palavra (16, 32 bits), blocos (nas memórias externas, as transferências se dão por blocos consideravelmente maiores do que as palavras).
Acesso
Sequencial, direto, aleatório, associativo.
Desempenho
tempo de acesso, tempo de ciclo e taxa de transferência.
Tecnologia
semicondutores, ótico, magnético.
Característica física
volátil ou não, apagável ou não.
Quadro 5.1 – Características Fundamentais dos Componentes de Memória
Fonte: adaptado de Stallings (2002) capítulo 5
• 101
Sequencial
• registros organizam dados. • o acesso segue um sequenciamento linear. • Exemplo: fitas.
Direto
• registros também organizam dados. • cada registro possui endereço único. • Exemplo: discos.
Aleatório
• endereçamento único e fisicamente dedicado de cada posição. • Exemplo: memória RAM.
Associativo
• a busca é orientada pelo conteúdo, não pelo endereço. • Exemplo: alguns tipos de memória cache.
Figura 2 – Métodos de Acesso à Memória
Fonte: Stallings (2002) Como a qualidade dos sistemas computacionais depende do desempenho dos seus dispositivos de memória, é importante termos métodos para avaliá -los. Stallings identifica três fatores fundamentais: • Tempo de acesso: na memória que não usa o acesso aleatório, esse tempo corresponde àquele gasto para o posicionamento da leitura ou da escrita na localização desejada. Já para as memórias de acesso aleatório, esse fator equivale diretamente ao tempo gasto para o procedimento de leitura ou escrita. • Tempo de ciclo de memória: intervalo requerido para que um acesso possa suceder o outro. Fator que se aplica mais a memórias de acesso aleatório. • Taxa de transferência: taxa em que os bits podem ser deslocados no dispositivo de memória. Para as memórias de acesso aleatório, essa taxa corresponde ao inverso do tempo de ciclo. Para memórias de acesso não aleatório, tem-se a relação:
102 •
capítulo 5
R=
N TΝ − T a
Onde: R = taxa de transferência em bits por segundo (bps) N: número de bits. TN: tempo médio para ler ou escrever uma quantidade N de bits. Ta: tempo médio de acesso. Além dos fatores acima, é importante levar em consideração a taxa de acerto (NULL & LOBUR, 2010). Essa taxa reflete quantas vezes o dado requerido esteve no nível especificado da memória em relação ao total de requisições. 5.1.3 Memória principal
Registradores
Memória Cache
Memória Principal
Figura 3 – Divisão da Memória Interna
Fonte: Adaptado de Stallings (2002, p. 100) e Murdoca & Heuring (2000, p .225) Como mostra a figura 3, a memória interna também é subdivida em termos de comunicação com a UCP. Vamos caracterizar inicialmente a memória principal para depois tratar da memória cache.
capítulo 5
• 103
Memória Principal
UCP
Barramento
Figura 4 – Relação entre UCP e Memória Principal
Adaptado de Murdoca & Heuring (2000, p .235) Retomando o modelo de Von Neumann, a UCP precisa ser alimentada rápida e diretamente com dados e instruções (figura 4). Essa é a função da memória principal. Para que a memória funcione com a UCP, é preciso haver uma integração de registradores, mecanismos de controle e o barramento (MONTEIRO, 2007), tal como resume o quadro 5.2.
ELEMENTO Registrador de endereço (REM)
FUNÇÃO armazena temporariamente o endereço a ser acessado.
Barramento de endereços
transmite dados do REM para a memória principal (unidirecional).
Registrador de dado (RDM)
armazena de forma temporária o dado a ser transferido.
Barramento de dados
faz a ligação entre o RDM e a memória principal (bidirecional)
Controlador da memória
integra a unidade de controle: sinaliza instruções e avalia o estado de execução das operações de memória integrando toda a UCP.
104 •
capítulo 5
ELEMENTO Barramento de controle
FUNÇÃO comunica os sinais relativos ao controle no sistema.
Relógio
sincroniza o sistema.
Quadro 5.2 – Elementos para Operações de Memória
Fonte: adaptado de Monteiro (2007)
ATENÇÃO Em linguagens de programação como C++, um ponteiro armazena o endereço da posição de um dado na memória, servindo para referenciá-lo (PIVA JR. et al, 2012).
A partir dos componentes acima, podemos descrever as duas operações básicas da memória: leitura e escrita. Na operação de leitura temos a sequência descrita na figura 5. Perceba que há três tipos comunicações envolvidas: o endereço do dado, os sinais de controle de instrução e, por fim, o dado em si. Nessa operação, o começo depende da indicação do endereço da memória onde está o dado a ser acessado. Já na operação de escrita, é indicado o endereço onde o dado deve ser gravado. De qualquer forma, as três formas de comunicação pelo barramento também são usadas.
CONEXÃO Conheça como funciona uma data center do Google (há opção de legenda em português). <https://www.youtube.com/watch?v=avP5d16wEp0> Acesso em 24 jul. de 2014.
capítulo 5
• 105
Início A UCP envia ao REM o endereço na memória do dado a ser lido (barramento de endereços) É sinalizada a operação de leitura no barramento de controle.
O dado é transferido e armazenado no RDM (barramento de dados)
Do RDM, o dado é transmitido para outro registrador na UCP. Término
Figura 5 – Esquematização da operação de leitura.
Adaptado de: (DELGADO e RIBEIRO, 2009).
Início A UCP envia ao REM o endereço na memória onde o dado será gravado (barramento de endereços) É sinalizada a operação de escrita no barramento de controle.
O dado é transferido e armazenado no RDM (barramento de dados)
Do RDM, o dado é transmitido para o endereço designado. Término
Figura 6 – Esquematização da operação de leitura.
Adaptado de: (DELGADO e RIBEIRO, 2009)
106 •
capítulo 5
5.1.4 Memória RAM
Figura 7 – Modelos diferentes de memória RAM.
Disponível em: <http://pt.wikipedia.org/wiki/RAM#mediaviewer/Ficheiro:RAM_n.jpg>. Acesso em: 24 jul. de 2014.
ATENÇÃO A Memória RAM é volátil, ou seja, seus dados deixam de ser armazenados na ausência de energia. Para que um computador receba instruções básicas sem depender da RAM, criouse uma memória de apenas leitura (ROM, read-only memory) que não é volátil. Embora existam alguns dispositivos de ROM que podem ser reprogramados, a função principal deles ainda é manter um conjunto essencial de dados para leitura. Em sistemas embutidos, como eletrodomésticos, brinquedos e equipamentos médicos, a memória ROM possui uma importância maior (NULL & LOBUR, 2010).
capítulo 5
• 107
Nos computadores convencionais, o papel da memória principal é desempenhado pela memória RAM e parcialmente pela memória ROM. Como vimos no capítulo 1, a memória RAM (memória de acesso randômico) serve para armazenar dados de trabalho do processador. Nas especificações de computadores comerciais, a capacidade da memória RAM recebe destaque. Quando lançado em 1977, o Apple II tinha uma memória RAM de 4Kb expansível até 48 Kb apenas (LINZMAYER, 2004), já em 2014, um iMac podia chegar ter até 32G (APPLE, 2014). Nas placas-mãe dos computadores pessoais, geralmente há slots livres para que outros circuitos de RAM possam ser adicionados, já em dispositivos móveis isso é mais raro.
CONEXÃO Saiba mais sobre Memória RAM: <http://e.cdn-hardware.com.br/static/media/RevistaGDH_04.pdf> Acesso em 24 jul. de 2014.
Figura 8 – iMac.
Disponível em: <http://commons.wikimedia.org/wiki/IMac#mediaviewer/File:IMac_vector.svg>.
108 •
capítulo 5
O quadro 5.3 relaciona os principais tipos de memória RAM. Deve-se destacar aquelas de tipo síncrono, que trabalham sem atraso (delay) com o processador (CORNACCHIONE, 2012). Outra diferença importante reside nas memórias RAM estáticas, que mantém os seus dados enquanto houver alimentação de energia, e as dinâmicas, que demandam recargas em períodos de poucos milissegundos (NULL & LOBOUR, 2011).
CATEGORIA GERAL
TIPO DRAM (Dynamic RAM) FPM DRAM (Fast Page Mode DRAM)
Principal
EDO DRAM (Extended Data Out DRAM) SDRAM ( Synchronous DRAM) MDRAM (Multibank DRAM)
Cache
SPRAM (Static RAM) VRAM (Vídeo RAM)
Vídeo
SGRAM (Synchronous Graphics RAM) WRAM (Window RAM)
Quadro 5.3 – Tipos principais de memória RAM
Fonte: Cornacchione (2012, p. 45) 5.1.5 Memórica Cache A UCP processa dados em velocidade consideravelmente maior do que os mesmos são transferidos entre a memória principal (STALLINGS, 2002). Por isso, o acesso à memória pode frequentemente se tornar um gargalo do sistema. A
capítulo 5
• 109
ideia de uma memória intermediária entre a UCP e a memória principal veio da constatação de que 90% do processamento depende de apenas de 10% de código (MURDOCHA & HEURING, 2000). Assim, uma memória pequena poderia armazenar os dados que são usados com mais frequência. Colocando essa memória em comunicação direta e rápida com a UCP (figura 9), o desempenho do computador poderia ser melhorado de forma significativa. UCP
Memória Principal
Cache
Barramento
Figura 9 – Relação entre UCP e Memória Principal
Adaptado de Murdoca & Heuring (2000, p. 235) O desafio para que a memória cache seja eficiente é que haja um bom mapeamento de memória e que realmente os dados mais úteis sejam armazenados. A memória cache é geralmente mapeada pelos métodos direto, associativo ou associativo por conjunto (NULL & LOBOUR, 2011). Há algum tempo, o armazenamento secundário era sinônimo de discos magnéticos, como os disquetes e o disco rígido do computador pessoal. Este último consiste na verdade em uma série de discos empilhados em uma estrutura a vácuo. Em comum com os disquetes, está a presença de partes móveis e dependência de um cabeçote para fazer a leitura dos dados. Essas características acarretam alguma fragilidade desses sistemas em relação a choques e esse é um dos motivos, além da relativa lentidão, para que as memórias em estado sólido (semicondutores) tenham passado a encontrar mais uso, inclusive como armazenamento secundário em laptops (NULL & LOBOUR, 2011).
110 •
capítulo 5
5.2 Dispositivos de entrada e saída E/S Um computador não processa dados como um fim de si mesmo. Os usuários precisam indicar que instruções e dados querem processar e os mesmos usuários devem receber o resultado do processamento. Essa comunicação se dá pelos sistemas de entrada e saída (E/S), ou, em inglês, In and Out (I/O) (DELGADO & RIBEIRO, 2009). Não se trata aqui apenas de transmissão de dados, deve-se ressaltar, mas da própria experiência que o usuário terá com o dispostivo. Smartphones e tablets com tela multitoque ultrapassaram os computadores pessoais como objetos de consumo justamente por oferecem uma experiência única quanto à interface. As arquiteturas dos computadores devem fornecer não só portas físicas para os dispositivos de E/S, mas um mapeamento de memória adequado e programação de baixo nível para comunicação, tal como em drivers. Como salienta Monteiro (2007), mouses, teclados, vídeos, microfones possuem formas de sinais e velocidades muito distintas. Além disso, tais dipositivos não são sincronizados pelo relógio da UCP. Na figura 10, temos um exemplo de arranjo entre UCP, memória pricipal (MP) e dispositos periféricos (P1, P2 e P3) por meio de uma interface E/S. Lembrando que cabe ao controle implementar as operações de leitura e escrita, além de monitorar o estado de sua execução.
UCP Memória Principal Endereço
Controle
Dados
Controlador E/S
P1
P2
P3
Figura 10 – Exemplo de arranjo entre UCP, MP, E/S e periféricos
Fonte: Adaptado de Monteiro (2007, p. 343)
capítulo 5
• 111
A transmissão de dados entre a interface do periférico e a memória/UCP pode se dar por formas bem distintas. Na transmissão serial, a comunicação se dá por uma linha única e, assim, um bit é transmitido de cada vez. Via de regra, a interface possui um buffer de forma a regular o fluxo e ritmo da transmissão. Na transmissão paralela, um conjunto de bits é repassado de uma só vez (MONTEIRO, 2007).
5.3 Tipos de Computadores A seguir serão apresentados brevemente os tipos principais de computadores. Busque identificar para cada um deles, a partir do texto e de pesquisa, quais são os dispositivos de entrada e de saída. 5.3.1 Computadores pessoais São os chamados computadores de mesa (desktop) ou microcomputadores. Esta linha de computadores é usada para tarefas rotineiras, domésticas ou em escritórios. Uma variação deste tipo de computador que é usada para serviços mais avançados são as estações de trabalho (workstations). São PCs com configuração muito mais robusta. GOCE / DREAMSTIME.COM
Figura 11 – Uma Workstation PC
112 •
capítulo 5
5.3.2 Notebooks Estes computadores são mais leves, projetados para o uso portátil. Equipados com bateria com boa duração, são usados em viagens ou em qualquer lugar. Atualmente existem notebooks com configurações tão robustas e caras quanto workstations. Recentemente, surgiu uma variação dos notebooks. São modelos com tela menor (de 7 a 11 polegadas), bateria com maior duração, sem leitores de CD ou DVD e muito mais leves, além de serem mais baratos (em geral). São os chamados netbooks. Planejados para portabilidade e navegação na Internet em qualquer lugar. Com a grande difusão das redes que fornecem Internet sem fio, este modelo tem ganhado popularidade e vem sendo adotado até por escolas como ferramenta de auxílio às atividades em sala. KMTHEMAN / DREAMSTIME.COM
Figura 12 – Um notebook versus um netbook
5.3.3 Computadores handheld O handheld, também chamado de PDA (Personal Digital Assistant), foi criado originalmente para controlar agendas de compromissos, informações pessoais, catálogo de endereços e telefones. Geralmente acessados por meio de uma caneta gráfica, possuem tela sensível ao toque, sendo possível escrever sobre ela.
capítulo 5
• 113
Estes computadores evoluíram e passaram a ter suas funcionalidades integradas em celulares, surgindo o chamado smartphone. Um smartphone é basicamente um celular com funções de um PDA. Um dos smartphones mais procurados e mais desejados desde o seu lançamento é o Iphone, da Apple.
Um computador ultraportátil, o popular IPhone e um handheld da Compac. 5.3.4 Supercomputadores São os mais caros e mais poderosos computadores. Usados para grandes simulações, como previsão do tempo, análise do mercado de ações, efeitos especiais em produções cinematográficas. Também são muito usados por órgãos do governo para tarefas que envolvam gigantesca manipulação de dados. LEROY N. SANCHEZ, RECORDS MANAGEMENT / MEDIA SERVICES AND OPERATIONS / WIKIMEDIA
Figura 13 – Supercomputador RoadRunner
114 •
capítulo 5
ATIVIDADE 1. Qual é a diferença das memórias RAM e ROM? 2. Uma operação de leitura de memória envolve no mínimo quantos registradores? 3. O que é a memória cache? 4. Qual a diferença entre o método de acesso direto e por associação? 5. Qual é a relação entre o processador e a memória RAM?
REFLEXÃO Os tablets e smartphones trouxeram uma nova abordagem tanto para hardware quanto para software. A microinformática se tornou ainda mais presente no cotidiano, ganhando uma natureza muito próxima e intíma com o usuário. Quais serão os caminhos de desenvolvimento dos computadores, sabendo-se da tendência de queda de preços de componentes de um lado e, de outro, da motivação das empresas em lançarem produtos inovadores, os quais garantem uma maior margem de lucro? r!
LEITURA Livro: SCHMIDT, E.; COHEN, J. A Nova Era Digital. Rio de Janeiro: Intrínseca, 2013.
REFERÊNCIAS BIBLIOGRÁFICAS APPLE. Compare Mac models. Website. 2014. . Disponível em: <https://www.apple.com/ mac/compare/>. Acesso em: 22 jun. 2014. CAPRON, H. L.; JOHNSON, J. A. Introdução à Informática. São Paulo: Pearson Prentice Hall. 2004. CORNACCHIONE JR., E. B. Informática. São Paulo: Atlas, 2012.
capítulo 5
• 115
DELGADO, J.; RIBEIRO, C., Arquitetura de Computadores, 2ª edição, LTC, , 2009. LAUDON, K. C. e LAUDON, J. P. Sistemas de Informação Gerenciais. São Paulo: Prentice Hall. 2007. LINZMAYER, O. W. Apple Confidential 2.0 – The definitive history of the world’s most colorful company. São Francisco: No Starch, 2004. MONTEIRO, M. A. Introdução à Organização de Computadores. 5a ed. São Paulo: LTC, 2007. MURDOCA, M. J.; HEURING, V. P. Introdução à Arquitetura de Computadores. Rio de Janeiro: Campus, 2001. NULL, L.; LOBUR, J. Princípios Básicos de Arquitetura e Organização de Computadores. 2a ed. Porto Alegre: Bookman, 2010. PIVA JR., D.; NAKAMITI, G. S.; ENGELBRECHT, A. M.; BIANCHI, F. Algoritmos e Programação de Computadores. Rio de Janeiro: Elsevier, 2012. STALLINGS, W. Arquitetura e Organização de Computadores. São Paulo: Prentice Hall, 2002.
116 •
capítulo 5