IOPC 2011_2-1

Embed Size (px)

Citation preview

Introduo Organizao e Programao de Computadoresusando Logisim e Scilab

Osvaldo Carvalho Departamento de Cincia da Computao UFMG [email protected]

1 Semestre de 2011

IOPC 2011_2-1.docx

2

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

i

Contedo1 Introduo ............................................................................................................................1 1.1 1.2 1.3 1.4 1.5 1.6 1.7 Computadores ..............................................................................................................1 Informao Analgica e Informao Digital ..................................................................5 Computadores e Informao ........................................................................................8 Converses anlogo-digital e digital-analgica...........................................................10 Sensores e atuadores .................................................................................................15 Memrias ...................................................................................................................17 Organizao do Texto .................................................................................................20 Organizao de Computadores ..........................................................................20 Linguagem e Ambiente Scilab .............................................................................22 Algoritmos e Programas .....................................................................................24

1.7.1 1.7.2 1.7.3 2

Organizao de Computadores ..........................................................................................27 2.1 2.2 Bits e cdigos ..............................................................................................................27 Circuitos Combinatrios .............................................................................................31 lgebra de Boole ................................................................................................31 Portas Lgicas .....................................................................................................31 Introduo ao Logisim ........................................................................................35 Aritmtica com operaes lgicas ......................................................................40 Sntese de Circuitos Combinatrios ....................................................................46 Comparao de binrios sem sinal .....................................................................53 Multiplexadores e Demultiplexadores ................................................................56 Flip-flops e Registradores ...................................................................................59 Barramentos e Controle de Fluxo de Dados .......................................................63 Memrias ...........................................................................................................64 Acumuladores .....................................................................................................65 Uma Calculadora ................................................................................................67 Osciladores ou Clocks .........................................................................................69 Micro-instrues.................................................................................................70 Desvios ...............................................................................................................78 Desvios condicionais ...........................................................................................81 Instrues e Programao em Assembler...........................................................83

2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.2.7 2.3 2.3.1 2.3.2 2.3.3 2.3.4 2.4 2.4.1 2.4.2 2.4.3 2.4.4 2.4.5 2.4.6

Circuitos Sequenciais ..................................................................................................59

Processadores ............................................................................................................67

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

ii 3 Ambiente e Linguagem Scilab ............................................................................................89 3.1 3.2 Compiladores, Interpretadores e Sistemas Operacionais ...........................................89 Scilab ..........................................................................................................................91 Variveis e Comandos de Atribuio ..................................................................92 Programas Scilab ................................................................................................95 Os comandos if e printf .............................................................................99 O comando for ...............................................................................................102 O comando while ..........................................................................................106 Valores Lgicos .................................................................................................108 Strings ...............................................................................................................109 Comandos Aninhados .......................................................................................112

3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 3.2.8 3.3 3.4

Arquivos ...................................................................................................................116 Matrizes ....................................................................................................................121 Atribuindo valores a uma matriz ......................................................................121 Vetores linha e coluna ......................................................................................122 Referenciando partes de uma matriz ...............................................................123 Aritmtica matricial ..........................................................................................124 Construindo matrizes .......................................................................................128 Matrizes e Grficos ...........................................................................................130 Matrizes de Strings e Arquivos .........................................................................134 Matrizes Numricas e Arquivos ........................................................................135 Matrizes e expresses lgicas ...........................................................................138 Sintaxe ..............................................................................................................140 Funes, arquivos fonte e o Scilab....................................................................141 Funes, Matrizes, Loops e Induo .................................................................143 Recursividade ...................................................................................................148 Funes e Desenvolvimento Top-down ............................................................151 Desenhando Mapas ..........................................................................................153

3.4.1 3.4.2 3.4.3 3.4.4 3.4.5 3.4.6 3.4.7 3.4.8 3.4.9 3.5 3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 3.5.6 4

Funes ....................................................................................................................138

Algoritmos ........................................................................................................................156 4.1 Definio e Caractersticas .......................................................................................156 Especificao ....................................................................................................156 Correo ...........................................................................................................156 Eficincia e Complexidade Computacional .......................................................157 Pesquisa Seqencial .........................................................................................164 Pesquisa Binria................................................................................................165 IOPC 2011_2-1.docx 4.1.1 4.1.2 4.1.3 4.2 4.2.1 4.2.2

Pesquisa ...................................................................................................................163

Introduo Organizao e Programao de Computadores

iii 4.3 Ordenao ................................................................................................................167 Seleo e Troca .................................................................................................167 Intercalao (MergeSort) ..................................................................................172 Partio (QuickSort) ..........................................................................................176 Dividir para Conquistar .....................................................................................180 Integrao por Trapzios ..................................................................................181 Bisseo ............................................................................................................184 Srie de Taylor para exp(x) e Cancelamento Catastrfico ................................189 Complexidade da Ordenao............................................................................192 Problemas NP-completos: O Problema do Caixeiro Viajante ............................195 Problemas indecidveis: O Problema da Correspondncia de Post ...................202

4.3.1 4.3.2 4.3.3 4.3.4 4.4 4.4.1 4.4.2 4.4.3 4.5 4.5.1 4.5.2 4.5.3 5

Algoritmos Numricos ..............................................................................................181

Complexidade de Problemas ....................................................................................192

Notas Finais e Prximos Passos ........................................................................................208

ndice Remissivo .......................................................................................................................212 Referncias...............................................................................................................................215 Apndice A: A CPU Pipoca ........................................................................................................218 A.1 1 2 3 4 5 6 7 8 9 Ciclo de Instruo .....................................................................................................219 Instrues .....................................................................................................................221 Programao em Assembler.........................................................................................223 Montagem do Programa Executvel ............................................................................225 O Circuito Principal da CPU Pipoca ...............................................................................226 O Contador de Programa ..............................................................................................230 A Unidade de Controle .................................................................................................230 O Ciclo de Micro-Instruo ...........................................................................................234 O Micro-Programa ........................................................................................................239 A Planilha Pipoca.xls .....................................................................................................242

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

iv

Aos ProfessoresProgramao de Computadores a disciplina mais tradicionalmente oferecida por departamentos de Cincia da Computao, e geralmente tambm a de maior nmero de matrculas. Na UFMG, Programao de Computadores j era oferecida para Cincias e Engenharias alguns anos antes da criao do departamento. Seu cdigo DCC001, o que d uma idia de sua venerabilidade. Este texto parte integrante de um conjunto de materiais pedaggicos para esta disciplina, produzidos com a inteno de serem usados em um curso de 60 horas-aula, dado em um semestre letivo. Exerccios, imprescindveis para um bom aprendizado, no esto aqui, mas em um site Moodle que contm tambm apresentaes, vdeos e outros materiais. O enfoque adotado apresenta algumas caractersticas que o distinguem da forma tradicional como a a disciplina ministrada: O curso necessita de um professor e de monitores; Em cada semana so previstas uma aula expositiva, dada pelo professor, e uma aula prtica, dada pelos monitores; Aulas expositivas podem ser dadas em auditrio ou sala de aula com grande capacidade; Aulas prticas so oferecidas em laboratrios com computadores; melhores resultados podem ser esperados com turmas pequenas; Os procedimentos de avaliao do aluno incluem questionrios semanais e provas, que podem (e devem) ser realizados online; As aulas prticas tm como objetivo auxiliar os alunos nas avaliaes semanais; Uma base de questes, fechadas e abertas, est disponvel no Moodle para a montagem de avaliaes. Questes fechadas (mltipla escolha, associaes, etc.) so corrigidas automaticamente; ao montar uma avaliao, o professor deve dosar o uso de questes abertas para manter o trabalho de correo em volumes aceitveis. Conjuntos de exerccios podem tambm ser disponibilizados no Moodle, permitindo estudos e auto-avaliaes pelos alunos; A linguagem adotada o Scilab; O primeiro tero do curso dedicado ao ensino de circuitos lgicos e organizao de computadores, utilizando o software Logisim 1 (Burch, 2002); Mesmo com um enfoque eminentemente prtico, o material cobre conceitos tericos fundamentais, como complexidade de algoritmos, problemas np-completos e problemas indecidveis.

Com relao ao contedo, os dois pontos que provavelmente necessitam de maiores justificativas so o estudo de organizao de computadores e a adoo de Scilab. A nosso ver o estudo de organizao de computadores abre oportunidades para a introduo de diversos conceitos fundamentais para a programao de computadores. O aluno tem contato com bits, com operaes lgicas, com cdigos importantes como ASCII e ponto flutuante. Acumuladores so o primeiro contato com loops, e somadores so um excelente exemplo de modularizao. A execuo seqencial de instrues e instrues de desvios so tambm elementos para a formao na mente do aluno de um mecanismo de execuo de programas. E, talvez mais importante, o primeiro contato com a programao se d sem a necessidade de abstraes com relao executabilidade dos programas.1

Carl Burch, Logisim - a graphical tool for designing and simulating logic circuits, n.d., http://ozark.hendrix.edu/~burch/logisim/. Introduo Organizao e Programao de Computadores IOPC 2011_2-1.docx

v Para justificar a adoo do Scilab preciso falar um pouco sobre o fenmeno MatLab. MatLab, de Matrix Laboratory, uma linguagem chamada M e um ambiente de desenvolvimento e execuo voltado para aplicaes tcnicas. Segundo Bill McKeeman (um dos pioneiros do Computer Science Department de Stanford, hoje professor de Dartmouth e desenvolvedor da MathWorks 2, empresa que vende e mantm o MatLab), a linguagem teve origem na idia de colocar clculos matriciais na sintaxe, ao invs de utilizar chamadas de subrotinas em Fortran 3. Com poucas mas muito bem sucedidas excees, MatLab no conhecido em departamentos de Cincia da Computao. No s aqui no Brasil que isto acontece. MatLab no foi projetado por especialistas em linguagens ou compiladores, no tendo aos olhos de cientistas da computao (incluindo este autor) qualquer importncia conceitual como linguagem de programao. Mas seu sucesso prtico sem qualquer dvida enorme. Ao apresentar a linguagem M para o MIT em 2005, McKeeman inicia dizendo as it turns out, the computer science department is about the only part of MIT that does not use MatLab. Ele continua 4: MATLAB has grown over 20 years from academic research into a generalized tool for a wide variety of applications, including vehicle crash simulation, financial prediction, genome analysis, imbedded computer control, aircraft design and so on. More than 200 MathWorks developers are working on the next release. Another 1000 people run the rest of the business, in Natick and worldwide. There are about a million users. Some MATLAB users do not think of what they are doing as "programming." Some users are interested in quick and easy results. Some users want to build applications that are bullet proof and reusable over decades. I know of 100000 line MATLAB programs and MATLAB programs mining petabytes of data and others running 100x parallel for days at a time. Some universities teach MATLAB for beginning programming. On every customer contact I find new surprises. MATLAB satisfies all these communities. O Scilab um sistema livre, produzido pelo INRIA, que segue a mesma filosofia do MatLab, mas sem tentar ser um clone. A compatibilidade das linguagens de programao grande mas no total. Segundo o verbete na Wikipedia, SciLab vem conquistando cada vez mais adeptos tanto na academia como na indstria. Existem livros sobre SciLab em ingls, francs e espanhol, e est disponvel na Internet um texto introdutrio em portugus produzido pelo Prof. Paulo Srgio da Mota Pires, da UFRN 5. Links para esses materiais podem ser encontrados no site 6 (Scilab Consortium). Quanto s avaliaes freqentes, a sua contribuio para a experincia de aprendizado consensual. Dentre as principais caractersticas de cursos altamente respeitados, levantadas pelo projeto Harvard Asssesssment Seminars 7, esto: 1. Immediate and detailed feedback on both written and oral work.

2

MathWorks - MATLAB and Simulink for Technical Computing, n.d., http://www.mathworks.com/. 3 Bill McKeeman, MATLAB 101 -- A talk for the MIT Computer Science Department, November 2005, http://www.cs.dartmouth.edu/~mckeeman/references/matlab101/matlab101.html. 4 Ibid. 5 sciport-3.0.pdf, n.d., http://www.dca.ufrn.br/~pmotta/sciport-3.0.pdf. 6 Scilab Consortium, Home - Scilab WebSite, n.d., http://www.scilab.org/. 7 Jack Chizmar, The Effective Teaching and Learning Network - training course and information for teachers - TQM and Classroom Research, n.d., http://www.etln.org.uk/resources/page16.html. Introduo Organizao e Programao de Computadores IOPC 2011_2-1.docx

vi 2. High demands and standards placed upon [students], but with plentiful opportunities to revise and improve their work before it receives a grade, thereby learning from their mistakes in the process. 3. Frequent checkpoints such as quizzes, tests, brief papers, or oral exams. The key idea is that most students feel they learn best when they receive frequent evaluations, combined with the opportunity to revise their work and improve it over time. Entretanto, avaliaes exigem correes e, com a atual presso por produtividade medida pela relao alunos/professor, o trabalho de correo pode se tornar inaceitvel. preciso equilibrar o uso de questes fechadas, corrigidas automaticamente, com o de questes abertas, imprescindveis em um curso de programao de computadores mas que exigem correo manual. Mesmo controlando o uso de questes fechadas, o auxlio dado por uma equipe de monitores pode ser essencial para se manter avaliaes semanais.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

vii

Agradecimentos

A metodologia adotada para Programao de Computadores (uma aula expositiva e uma aula prtica por semana) e a nova linguagem (Scilab) nos foram sugeridas pelos Professores Regina Helena Bastos Cabral e Ivan Moura Campos. Os dois me fizeram conhecer o Matlab, me convenceram da necessidade de prticas mais intensivas, e tambm da viabilidade de provas online. A Professora Regina j aplicava estas tcnicas com enorme sucesso em Clculo Numrico. Os monitores que trabalharam na disciplina em sua primeira oferta em 2007 foram Maxstaley Neves e Henrique Chevreux. Sem eles eu no teria conseguido enfrentar a mirade de detalhes tcnicos do Logisim, Moodle e Scilab, todos ento sistemas novos para mim. Mas, muito mais do que isso, eles forjaram para a monitoria uma postura ntegra, competente e criativa, postura que souberam transmitir aos outros monitores: Harlley Augusto de Lima, Phillippe Samer Lallo Dias, Rafael Bonutti, Douglas Max Duarte Batista, Luis Cludio Dutra Martins, Rafael Vieira Carvalho e Thiago Moreira Torres. A aplicao da metodologia faz uso intenso da infra-estrutura de tecnologia da informao da UFMG, competentemente administrada pelo Centro de Computao, pelo Laboratrio de Computao Cientfica, pelo Laboratrio de Recursos Computacionais do Instituto de Cincias Exatas e pelo Centro de Recursos Computacionais do Departamento de Cincia da Computao.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Introduo

1

1 Introduo1.1 ComputadoresEste um texto sobre organizao e programao de computadores. Computadores eletrnicos programveis surgiram na dcada de 1940; pouco mais de meio sculo aps a construo dos primeiros computadores, o impacto desta tecnologia sobre nossas vidas enorme. Computadores mudaram e muito a forma como se faz msica, cinema ou artes plsticas, como se escrevem textos, como se faz comrcio, medicina, engenharia, cincia, economia. Computadores mudaram como governar e como exercer a cidadania. Mas o que um computador? Vamos comear com alguns exemplos. certo que voc j viu diversos computadores, e provvel que a imagem que lhe venha mente seja similar mostrada na Figura 1.

Figura 1: Um IBM PC, lanado em 1981

8

Este o primeiro computador pessoal lanado pela IBM. Apesar de ter sido precedido por diversos outros micro-computadores, o lanamento em 1981 do IBM PC foi um marco a IBM era ento a empresa dominante na indstria da computao, capaz de lanar padres. Existem computadores que no se assemelham a PCs. Alis, os computadores existentes em maior nmero so simples e pequenos, escondidos em telefones celulares, iPods, eletrodomsticos e automveis. Outos so enormes, ocupando vastos sales, como o Blue Gene mostrado na Figura 2. Em 2006 o Blue Gene era o computador mais poderoso do mundo, sendo capaz de executar 478 trilhes de operaes aritmticas por segundo. Em 2008 j no era: o RoadRunner, que como o Blue Gene foi produzido pela IBM, atingiu 1 petaflops, isto , mil trilhes de operaes aritmticas por segundo. Como curiosidade, o RoadRunner utiliza chips (circuitos integrados) usados na PlayStation 3 da Sony. A cada seis meses uma lista com os maiores computadores do mundo publicada no site da organizao Top500 9. Na lista de novembro de 2010, pela primeira vez o topo da lista foi ocupado por um computador chins, o Tianhe-1A, com um desempenho de 2,6 petaflops. Vale a pena visitar este site, que contm dados e anlises interessantes sobre a evoluo dos supercomputadores, denominao que a indstria d a computadores como o Blue Gene, RoadRunner ou Tianhe-1A.8 9

IBM Archives: IBM Personal Computer, n.d., http://www-03.ibm.com/ibm/history/exhibits/pc/pc_1.html.

Home | TOP500 Supercomputing Sites, n.d., http://www.top500.org/. IOPC 2011_2-1.docx

Introduo Organizao e Programao de Computadores

Introduo

2

Figura 2: O supercomputador Blue Gene

10

Com a rpida evoluo da eletrnica, poderoso hoje, normal amanh, fraco depois de amanh. Para ter alguma utilidade o termo forosamente relativo poca: um supercomputador um computador que figura dentre os mais poderosos do mundo ... em sua gerao.

Figura 3: O supercomputador Mark I

11

Neste sentido o Mark I (Figura 3), de 1944, executando apenas 3 operaes aritmticas por segundo, era mais super que o Blue Gene ou que o Tianhe-1A, pois era um dos nicos computadores existentes no mundo. Seus concorrentes eram mquinas de calcular mecnicas.

10

Lawrence Livermore National Laboratory, BlueGene/L Photo Gallery, n.d., https://asc.llnl.gov/computing_resources/bluegenel/photogallery.html. 11 Harvard Mark I - Wikipedia, the free encyclopedia, n.d., http://en.wikipedia.org/wiki/Harvard_Mark_I.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Introduo

3

Figura 4: Alan Turing

12

Computadores transformam informao. Um fato muito importante sobre computadores que, desde que meios de armazenamento externo de informao (discos e fitas magnticas, por exemplo) estejam disponveis em quantidade suficiente, todos, pequenos e grandes, so capazes de realizar as mesmas transformaes de informao. As computaes nome tcnico para transformaes de informao realizveis por micro e supercomputadores so as mesmas que um dispositivo terico, a mquina de Turing, capaz de fazer. Este dispositivo foi construdo com a ambio de capturar a noo de computabilidade, isto , da possibilidade de se resolver um problema de transformao de informao de forma efetiva, como uma composio de passos garantidamente realizveis. Isso foi proposto pelo matemtico ingls Alan Turing em 1937 13, alguns anos antes do funcionamento do primeiro computador eletrnico. O conjunto das transformaes de informao possveis o mesmo para computadores velozes e lentos, mas a velocidade com que a informao transformada pode diferir de ordens de grandeza, e a velocidade determina em grande parte o valor da informao obtida. Qualquer computador pessoal capaz de rodar um programa de previso meteorolgica para o dia seguinte, mas possvel que ele gaste mais do que um dia nessa tarefa, o que anula o valor da informao produzida. Da mesma forma, se um computador tem a seu encargo produzir informao para ser exibida como um filme, uma velocidade abaixo da necessria torna inaceitvel o seu emprego.

12 13

Alan Turing - Wikipedia, the free encyclopedia, n.d., http://en.wikipedia.org/wiki/Alan_Turing.

Alan M. Turing, On Computable Numbers, with an Application to the Entscheidungsproblem, Proceedings of the London Mathematical Society s2-42, no. 1 (1937): 230-265. Introduo Organizao e Programao de Computadores IOPC 2011_2-1.docx

Introduo

4

Figura 5: O Blue Gene e seus mdulos , sub-mdulos, sub-sub-mdulos, ...

14

A Figura 5 nos permite entender melhor a estrutura do Blue Gene: O sistema completo tem 64 racks, pequenas torres que ficam abrigadas nos grandes blocos do computador. Cada rack tem 32 ns computacionais. Um n computacional abriga 16 placas computacionais e, em alguns casos, at 2 placas de entrada e sada de dados. Cada placa computacional tem duas pastilhas (chips) de circuitos integrados. Cada chip abriga dois processadores, que so os circuitos que efetivamente realizam clculos computacionais.

Na Figura 5 as sucessivas decomposies param por aqui mas, na verdade, um processador ainda uma estrutura bastante complexa.

Figura 6: Chip do processador Intel Core i7-980X

15

Olhando para a imagem (Figura 6) de um chip do processador Intel Core i7-980X, lanado em 2010, ns podemos visualmente perceber diversos sub-mdulos. Se pudssemos olhar ainda14

SciDAC Review - SIMULATION SCALE: In HPC Simulations, How Much is ENOUGH?, *s.d.+, http://www.scidacreview.org/0801/html/scale.html.15

Legit Reviews, Intel Core i7-980X Six-Core Processor Extreme Edition Review, n.d., http://www.legitreviews.com/article/1245/1/.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Introduo mais de perto, veramos que este chip contm nada menos que 1,17 bilhes de transistores, espremidos em uma rea de apenas 248 milmetros quadrados. Fazendo agora um zoom na direo contrria, temos a Internet, a rede mundial que conecta quase todos os computadores do mundo. A imagem da Figura 7 propositalmente lembra uma galxia. So centenas de milhes de computadores na Internet, todos interligados.

5

Figura 7: Uma visualizao da Internet pelo produzida pelo Projeto Opte . Em azul esto os ns da Amrica do Norte, em verde os da Europa, Oriente Mdio, sia Central e frica, e em amarelo os da Amrica Latina.

16

Todo esse arranjo envolvendo satlites de telecomunicaes, cabos submarinos, redes com e sem fios, fibras ticas, computadores, telefones celulares, circuitos integrados, incrivelmente, tudo isso funciona, com algumas falhas, verdade, mas que no impediram a computao de mudar a forma de vida da humanidade. Funciona como? Essa proeza de organizao se deve exatamente ao uso intenso de uma idia central para a computao, a modularizao. So muitas e muitas peas que compem os computadores do mundo e suas redes, mas que so desenvolvidas de forma a permitir que, para utilizar um mdulo, seja preciso saber apenas o que esse mdulo faz, e no como ele realiza a sua funo. Mdulos permitem a diviso de competncias. Um programador profissional normalmente no tem a menor idia sobre a fsica de semicondutores dos chips, e nem mesmo sobre como funcionam os protocolos da Internet. Toda a computao um imenso lego, onde cada pea tem encaixes bem definidos que permitem seu acoplamento para a montagem de estruturas maiores. Como veremos ao longo desse curso, mdulos so onipresentes na cincia da computao, pois so fundamentais para o domnio de sistemas complexos.

1.2 Informao Analgica e Informao DigitalComputadores trabalham com informao, e por isso que a palavra informtica sinnimo de cincia da computao. Mas informao um conceito de difcil definio. algo em um objeto o objeto suporte que diz alguma coisa sobre outro objeto o objeto alvo sobre uma grandeza fsica, sobre um evento localizado no tempo, ou sobre qualquer aspecto de interesse no objeto alvo. Quando a maneira de registro da informao no meio suporte tem uma relao fsica direta com o objeto alvo da informao, como a deformao produzida em uma mola por um peso, ns dizemos que a informao ali armazenada informao analgica. Quando o objeto suporte armazena smbolos como nmeros ou palavras com16

Barret Lyon, The Opte Project, n.d., http://opte.org/.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Introduo informao sobre o objeto alvo, ns dizemos que a informao simblica ou, mais comumente, informao digital.

6

Figura 8: Filmes fotogrficos

17

Um filme fotogrfico revelado objeto em extino nos dias de hoje registra informao sobre a cena fotografada. Uma cena, fotografada com uma mquina tradicional, gera informao analgica sobre o material foto-sensvel que cobre o filme. A mesma cena, fotografada com uma mquina digital, gera nmeros que registram a intensidade de luz para cada um de muitos pontos pequeninos que compem a imagem, nmeros que so smbolos, ou seja, informao digital.

Figura 9: Informao analgica e digital

Um termmetro caseiro um objeto que fornece informao sobre a temperatura do ar, ou do corpo de uma criana, pois fenmenos de dilatao fazem com que a altura da coluna de mercrio seja proporcional temperatura medida. Ns dizemos que a informao obtida por um exame direto do termmetro uma informao analgica.

17

Photographic film image, *s.d.+, http://farm4.static.flickr.com/3444/3348244651_fef16ef641.jpg.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Introduo

7

Ponto de ebulio da gua

Corpo humano Ponto de fuso do gelo

Figura 10: Um termmetro

Com o uso de uma escala, um mdico pode anotar em um papel a temperatura de seu paciente. Ao faz-lo, a informao sobre a temperatura passa de analgica (a altura da coluna de mercrio) para informao digital ou simblica (o nmero anotado pelo mdico).

Ponto de ebulio da gua

Corpo humano

Ponto de fuso do gelo

Figura 11: Um termmetro com escala

Existem perdas nessa transformao. O mdico ir anotar o nmero correspondente ao tracinho mais prximo extremidade da coluna, talvez com uma aproximao entre dois tracinhos, mas no a sua altura exata. Para o mdico essa perda pode ser tolervel; temperaturas do corpo humano medidas com uma casa decimal provavelmente atendem a todas as necessidades clnicas. E existe tambm um grande ganho: a temperatura anotada informao simblica, que pode ser comunicada por telefone, ou copiada em outro papel, ou digitada em um computador.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Introduo

8

Ponto de ebulio da gua

50

Corpo humano50

Ponto de fuso do gelo

Figura 12: Termmetro com escalas Celsius e Farenheit

O uso de informao simblica requer convenes de interpretao. A qual temperatura altura da coluna de mercrio corresponde o smbolo 50? A Figura 12 mostra as escalas mais comumente utilizadas para temperaturas. Ou seja, ao dizer 50 graus, devemos esclarecer se estamos falando de graus centgrados, ou Farenheit, ou de alguma outra escala de temperaturas.Tabela 1: Diferentes smbolos para os nmeros inteiros de 1 a 7

Arbico 1 2 3 4 5 6 7

Romano I II III IV V VI VII

Binrio 1 10 11 100 101 110 111

Smbolos podem tambm ser usados para representar outros smbolos. Assim como explicitar uma escala um requisito para se interpretar um nmero associado a uma temperatura, a correspondncia entre smbolos deve ser estabelecida por convenes, como mostra o exemplo na Tabela 1.

1.3 Computadores e InformaoComputadores so essencialmente formados por processadores, memrias, sensores e atuadores: O componente mais importante o processador. Um processador transforma informao exclusivamente simblica, em informao tambm simblica; as transformaes que um processador realiza so ditadas por um programa que o processador executa. Memrias servem para registrar informaes para recuperao posterior, e tambm s trabalham com informaes simblicas. Sensores como o teclado do computador, o mouse, cmeras e microfones digitais, entradas de rede, telas sensveis ao toque, so tambm chamados de dispositivos de entrada, e trazem informao para o processador. IOPC 2011_2-1.docx

Introduo Organizao e Programao de Computadores

Introduo Atuadores so impressoras, monitores de vdeo, alto-falantes, projetores, sadas de rede, e so tambm chamados de dispositivos de sada. Atuadores exportam informao que sai do processador. Sensores e atuadores frequentemente trabalham tanto com informao digital como com informao analgica, e fazem uso de converses A/D e D/A.

9

A informao digital nos processadores e memrias atuais utiliza somente dois smbolos. A palavra bit designa a unidade de informao simblica; os dois valores possveis para um bit so normalmente denotados por 0 e 1. Dois smbolos s? Computadores fazem maravilhas: exibem filmes, ajudam a projetar automveis, controlam metrs e avies, oferecem jogos, editores de texto, correio eletrnico, enfim, fazem de tudo. Como, somente com 0 e 1? que, mesmo se cada bit s contm um de dois smbolos, computadores usam muitos bits. Com 1 bit podemos representar dois estados, que podem por conveno representar 0 ou 1, sim ou no, verdadeiro ou falso, preto ou branco, verde ou amarelo, o que quer que se convencione, mas apenas dois estados. Com dois bits j so 4 combinaes: 00, 01, 10 e 11. Com 3 bits, 8 combinaes: 000, 001, 010, 011, 100, 101, 110 e 111. J fica possvel armazenar 8 diferentes informaes, que poderiam ser os inteiros de 0 a 7, ou os inteiros entre -3 e 4, as letras entre A e H, ou talvez 8 diferentes nveis de cinza: o preto, o branco, e 6 nuanas intermedirias. No difcil ver que, ao acrescentar um bit a um conjunto de bits, multiplicamos por 2 o nmero de combinaes j existentes. Ou seja, com bits, temos combinaes, e cresce muito rapidamente quando o valor de aumenta: Com 8 bits podemos representar coisas diferentes. Isso suficiente para atribuir um cdigo distinto para cada letra do alfabeto, distinguindo entre maisculas e minsculas, e tambm para caracteres especiais como (, +, etc. Um conjunto de 8 bits chamado de byte. Com 24 bits, temos possibilidades, o suficiente para representar todas as cores com qualidade excelente para a acuidade visual humana. Com 80 bits, nada menos que coisas podem ser representadas!

A Tabela 2 mostra os prefixos usados para designar potncias decimais e binrias de uso corrente na computao.Tabela 2: Prefixos binrios e decimais.Prefixo kilo mega giga tera peta exa zetta yotta Smbolo k/K M G T P E Z Y Prefixos Binrios e Decimais Valor Base 10 > 103 = 1,000 > 106 = 1 000 000 > 109 = 1 000 000 000 776 > 1012 = 1 000 000 000 000 842 624 > 1015 = 1 000 000 000 000 000 606 846 976 > 1018 = 1 000 000 000 000 000 000 717 411 303 424 > 1021 = 1 000 000 000 000 000 000 000 614 629 174 706 176 > 1024 = 1 000 000 000 000 000 000 000 000

2 220 230 240 250 260 270 280

10

= = = = = = = =

1 1 1 1 1 1 1 1

024 048 073 099 125 152 180 208

576 741 511 899 921 591 925

824 627 906 504 620 819

Podemos ver que o uso de apenas 2 smbolos no traz limitao alguma de representatividade. Tudo bem, mas porque s 2 smbolos? Se os computadores fossem menos mesquinhos e usassem, por exemplo, os algarismos decimais como unidade bsica de informao, no teramos um sistema que, antes de qualquer coisa, seria familiar, e que com algarismos poderamos representar coisas diferentes? A deciso de adoo de um sistema binrio foi tomada pelos projetistas dos primeiros computadores, e se justifica principalmente pela confiabilidade. Computadores so equipamentos eletrnicos, onde smbolos devem ser representados por voltagens ou

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Introduo correntes eltricas. Se tivermos apenas dois nveis de voltagens ou de correntes, a distino dos smbolos fica muito mais confivel.

10

Bits so baratos, e ocupam muito pouco espao quando anotados em suportes eletrnicos. O notebook utilizado para escrever este texto tem 4GB ( Giga Bytes) de memria principal, e 300GB de capacidade de armazenamento em sua memria secundria, um disco magntico.

1.4 Converses anlogo-digital e digital-analgica

Figura 13: Converses anlogo-digital (A/D) e digital-analgica (D/A)

Existem dispositivos que transformam informao analgica em informao digital (converses A/D), e outros que fazem o contrrio (converses D/A). Muito frequentemente um fenmeno natural usado para converter o fenmeno fsico medido em impulsos eltricos, e estes impulsos so sinais de entrada usados na converso digital-analgica.

Figura 14: Um microfone converte ondas de presso do ar em impulsos eltricos

18

Um exemplo destes dispositivos um microfone, que transforma sons em impulsos eltricos. Como mostra o esquema na Figura 14, as ondas de presso que constituem o som fazem o diafragma vibrar, arrastando consigo um cabo enrolado em solenide. Este cabo se move em um campo magntico, gerando correntes eltricas proporcionais deformao do diafragma. O sinal eltrico produzido pelo microfone pode ento ser acoplado a um dispositivo de converso anlogo-digital.

18

Sound Transducer, *s.d.+, http://www.electronics-tutorials.ws/io/io_8.html.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Introduo

11

Figura 15: Um sinal analgico senoidal

Para digitalizar um sinal de entrada como o da Figura 15 preciso obter amostras de sua amplitude em instantes discretos no tempo, e digitalizar obter um valor numrico cada amostra.

Figura 16: Sinal original e sinal amostrado nos instantes correspondentes aos traos verticais em vermelho, usando 8 bits e frequncia de amostragem de 41,67 MHz

A Figura 16 ilustra esse processo de digitalizao. Se reconstituirmos este sinal a partir dos valores das amostras, mantendo constante o valor do sinal nos intervalos de tempo entre duas amostras, iremos obter o sinal direita na figura. Sem dvida, o sinal reconstitudo se assemelha ao sinal original, mas as perdas decorrentes da digitalizao so evidentes.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Introduo

12

Figura 17: Digitalizao com frequncia de amostragem insuficiente, produzindo um sinal completamente distorcido. Sinal amostrado com 8 bits e frequncia da amostragem 6,17 MHz

A qualidade da digitalizao depende: da freqncia da amostragem e da preciso com que feita cada amostragem.

Se diminuirmos a freqncia de amostragem o resultado pode ser desastroso, como mostrado na Figura 17; se aumentarmos, a qualidade melhora.

Figura 18: A qualidade da digitalizao melhora com a frequncia de amostragem. Sinal amostrado com 8 bits e frequncia de amostragem de 200 MHz

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Introduo

13

Na Figura 18 vemos o mesmo sinal sendo digitalizado com uma freqncia de amostragem bem maior. O sinal amostrado j est bem prximo do sinal original. Podemos sempre tentar aumentar a freqncia de amostragem, mas isso tem custos. Se considerarmos que o sinal est sendo amostrado para apreciao visual por humanos, a partir de um certo ponto a qualidade da digitalizao atingir os nossos limites de acuidade visual.

Figura 19: Sinal amostrado com f = 200 MHz, mas com apenas 2 bits de resoluo

Como dissemos, a preciso com que a amplitude do sinal em cada amostra digitalizada tambm influi na qualidade da converso. Na Figura 19 ns vemos o efeito do uso de apenas dois bits para a digitalizao da amplitude em cada amostra, e na Figura 20 a digitalizao com um nico bit.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Introduo

14

Figura 20: Sinal amostrado com f = 200 MHz, com um nico bit de preciso

As ilustraes da Figura 15 Figura 20 foram obtidas com o software ADconversion, que voc pode obter no site19. Faa o download, brinque com os parmetros da digitalizao (freqncia de amostragem e bits de preciso), e veja os resultados. importante observar que a converso em qualquer dos dois sentidos nunca perfeita, mas em muitos casos pode ser to boa quanto se necessita. Em converses D/A (Digital/Analgica) destinadas absoro por humanos, a explorao de limites fisiolgicos como a acuidade visual ou auditiva muito utilizada.

19

Hans Lohninger, Learning by Simulations: A/D Conversion, n.d., http://www.vias.org/simulations/simusoft_adconversion.html. Introduo Organizao e Programao de Computadores IOPC 2011_2-1.docx

Introduo

15

1.5 Sensores e atuadores

Figura 21: Computadores, programas e informao digital

Programas so escritos por pessoas e executados por computadores. Programas so compostos por instrues e comandos que lm, transformam e registram informao digital.

Figura 22: Sensores e atuadores

A informao digital recebida pelo computador por sensores (ou equipamentos de entrada) e, normalmente aps alguma transformao, enviada para atuadores (ou equipamentos de sada).

Figura 23: Interao homem-mquina

A interao entre humanos e computadores tambm se d atravs de sensores e atuadores. Presente em quase todos os computadores, o sensor mais comum o teclado. Sua Introduo Organizao e Programao de Computadores IOPC 2011_2-1.docx

Introduo

16

importncia imensa. atravs de teclados que entra, por exemplo, a informao que movimenta a economia mundial. (O teclado pode ser tambm uma barreira pessoal para a entrada no mundo da informtica. Pessoas com dificuldades na digitao tendem a abandonar os computadores, em uma atitude que provavelmente lhe traro conseqncias negativas.)

Figura 24: Barbara Blackburn, recordista mundial de velocidade de digitao(BarbaraBlackburn), e um teclado Dvorak, projetado para maximizar a velocidade de digitao em ingls

Outras pessoas, pelo contrrio, tm grande facilidade para a digitao. O recorde mundial de digitao pertence a Barbara Blackburn, que atingia uma velocidade sustentada de 15 toques por segundo, com picos de 20 toques por segundo, usando um teclado Dvorak. Estamos nos permitindo essa digresso para calcular a velocidade de produo de informao por um teclado. Considerando que cada toque produz um byte ou 8 bits, a Barbara Blackburn produzia informao a uma taxa de 160 bps (bps = bits por segundo).

Figura 25: Sensores especiais: um rdio-telescpio e um acelerador de partculas

A cincia faz uso de sensores que produzem informao muito mais rapidamente. Rdiotelescpios ou aceleradores de partculas podem produzir informao taxas de 1Gbps, ou seja, um bilho de bits por segundo, quase 7 milhes de vezes mais rpido do que o recorde mundial de digitao.

Figura 26: Um atuador especial: um brao mecnico

Atuadores comuns so monitores, impressoras, alto-falantes. Existem tambm atuadores especiais como braos mecnicos usados por robs, como mostrado na Figura 26.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Introduo

17

Figura 27: Redes de computadores

Entradas e sadas de rede so particularmente importantes pois permitem a conexo entre computadores. Um atuador de um computador emite sinais eltricos, ou de rdio, ou ticos, que so percebidos lidos por um sensor de outro computador.

1.6 MemriasMemrias so usadas por computadores para registrar informaes para recuperao posterior. Um computador geralmente trabalha com diversos tipos de memria, que seguem uma distribuio hierrquica: Registradores so memrias muito pequenas e muito rpidas, que se encontram dentro do mesmo chip do processador, e que tm suas entradas e sadas ligadas diretamente a circuitos que realizam transformaes de informao, como a unidade aritmtica que, como o nome indica, realiza operaes aritmticas. Memria principal ou RAM (Random Access Memory) um circuito externo ao processador, mas de acesso ainda bastante rpido. Instrues executadas pelo processador utilizam diretamente operandos armazenados na memria principal. Transformaes como operaes aritmticas geralmente exigem que informao seja previamente transferida da memria principal para registradores, onde as operaes so realizadas, e os resultados posteriormente armazenados na memria principal. De uma forma geral a memria principal voltil, no sentido em que necessrio manter o computador ligado para que a informao ali armazenada no se perca. A volatilidade no uma necessidade, mas uma caracterstica da tecnologia empregada nas memrias principais atuais. H alguns anos atrs memrias principais utilizavam ncleos de ferrite, com o registro da informao feito por polarizaes magnticas no volteis.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Introduo

18

Figura 28: 4GB de RAM montados em um computador pessoal

Figura 29: Memria de ncleos de ferrite, usada em 1964 pelo supercomputador CDC 6600, com 64 palavras de 20 64 bits em 11x11 cm

Memrias secundrias so tipicamente discos rgidos, onde informaes tambm podem ser lidas e escritas, mas o processador deve executar instrues especiais de entrada e sada para isso. Memrias flash (memrias usadas em pen drives, no iPod) vm sendo tambm cada vez mais utilizadas como memrias secundrias. Memrias secundrias so no-volteis, com a informao armazenada permanecendo registrada mesmo sem qualquer alimentao de energia. A informao em uma

20

Magnetic-core memory - Wikipedia, the free encyclopedia, n.d., http://en.wikipedia.org/wiki/Magnetic_core_memory.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Introduo

19

memria secundria quase sempre formatada em arquivos e diretrios, que provm uma abstrao essencial para o seu uso.

Figura 30: Um disco rgido sem a cobertura protetora, mostrando o movimento da cabea de leitura e gravao

Memrias tercirias so necessrias em ambientes maiores, que armazenam grandes volumes de dados. Fitas magnticas so utilizadas, com um rob que capaz de localizar a fita correta em um repositrio e mont-la em uma unidade de fita ligada ao computador.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Introduo

20

Figura 31: Armazenamento tercirio com uma grande coleo de fitas magnticas manipuladas por um brao mecnico de um rob

1.7 Organizao do TextoEste material destina-se a disciplinas introdutrias de organizao e programao de computadores para alunos de cincias e de engenharia, e tem como objetivos: introduzir noes bsicas de circuitos digitais, organizao de computadores, representao de dados e programao, apresentar ao aluno alguns princpios bsicos da construo de algoritmos mtodos computacionais para transformao de informao e de sua implementao em um ambiente de programao, e tornar o aluno fluente no uso de uma ferramenta computacional, o Scilab, de vasta aplicao nas cincias e engenharias.

O material est dividido em trs partes: 1.7.1 Parte I: Organizao de Computadores Parte II: Ambiente e Linguagem Scilab Parte III: Algoritmos e Programas Organizao de Computadores

A Parte I, Organizao de Computadores, tem dois objetivos principais: Introduo Organizao e Programao de Computadores IOPC 2011_2-1.docx

Introduo

21

dar ao aluno uma compreenso dos elementos essenciais do funcionamento interno de um computador, e permitir ao aluno perceber a dificuldade da programao em baixo nvel, e apreciar os ganhos obtidos com o uso de compiladores e interpretadores

A interpretao de conjuntos de bits estabelecida por convenes de cdigos que associam a uma determinada configurao de bits um valor numrico, ou um nvel de vermelho em uma imagem. So apresentados alguns dos cdigos mais comumente utilizados na computao. Circuitos combinatrios, isto , circuitos digitais que realizam transformaes sobre um conjunto de bits de entrada produzindo outro conjunto de bits como sada, no tm memria, e sua sada em um dado instante funo apenas dos valores de entrada nesse instante. Circuitos combinatrios utilizam portas lgicas, que so componentes que realizam as operaes AND, OR e NOT que constituem a lgebra de Boole. So vistos circuitos combinatrios para somas, comparaes e para direcionamento de fluxo de dados.

Figura 32: Circuito combinatrio, simulado no Logisim, que realiza a soma de duas parcelas binrias de 4 bits

Circuitos seqenciais tm a sua sada influenciada tambm pelo valor corrente de suas memrias. O elemento bsico de memria o flip-flop, capaz de armazenar um bit. Conjuntos de flip-flops formam registradores, que so ligados a outros registradores e a circuitos combinatrios por meio de barramentos. So tambm introduzidos circuitos de memrias onde ficam armazenados dados e programas. Osciladores e registradores circulares so introduzidos como elementos para controle da evoluo temporal de um circuito.

Figura 33: Circuito sequencial, simulado no Logisim, que acumula a soma das entradas.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Introduo

22

A primeira parte culmina com a apresentao de processadores simples, que so circuitos que transformam informao de forma flexvel, determinada por um programa que carregado em uma memria, e que pode ser substitudo com facilidade. 1.7.2 Linguagem e Ambiente Scilab

O estudo da organizao de computadores ter permitido ao aluno tanto conhecer melhor o funcionamento bsico de um computador, como ter um contato com a desumanidade da programao a nvel de instrues de mquina de um computador. A Parte II, Linguagem e Ambiente Scilab, tem como objetivos principais: a introduo de uma linguagem de alto nvel, Scilab (Scilab Consortium), que facilita imensamente a tarefa de programao de computadores atravs da oferta de comandos com formato muito mais prximo da forma como seres humanos raciocinam, e a familiarizao do aluno com o ambiente de desenvolvimento e de execuo de programas fornecido pelo Scilab.

Inicialmente apresentado o Scilab como uma linguagem de alto nvel, com variveis, expresses aritmticas e comandos de atribuio. So vistas variveis que contm valores numricos, lgicos ou cadeias de caracteres. Em seguida so apresentadas construes de linguagem para expressar comportamentos condicionais e repetitivos. Matrizes constituem o ponto forte do Scilab. Ns veremos como criar e modificar matrizes, realizar operaes de aritmtica matricial, como construir matrizes a partir de matrizes j existentes, e uma srie de outras operaes. Um uso freqente de matrizes no Scilab para a construo de grficos, feita por comandos muito flexveis. Em seguida so vistos comandos para a manipulao de arquivos, que so conjuntos de dados que tipicamente so produzidos por um programa e armazenados em um disco rgido ou um pen drive, e lidos posteriormente por outro programa. Arquivos so absolutamente essenciais para o tratamento de grandes volumes de dados. A Parte II se encerra com o estudo de funes Scilab, que constituem uma ferramenta essencial para o uso de mdulos na construo de programas. Para exemplificar o uso do Scilab para a construo de programas, consideremos o seguinte problema. Temos um arquivo ondas.txt (fonte: (StatLib, 1989) )que contm dados obtidos em um laboratrio de observao de ondas marinhas (Figura 34).

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Introduo

23

Figura 34: O arquivo ondas1.txt visto com o Bloco de Notas

Cada linha do arquivo contm uma medida do nvel do mar; a aparelhagem do laboratrio permite fazer 30 medidas por segundo. O arquivo completo tem 4096 linhas. Ns queremos um programa para obter um grfico com os pontos do arquivo, e tambm saber os valores mximo e mnimo presentes na amostra.

// Programa da Onda getf("Minimo.sci"); Leitura do arquivo getf("Maximo.sci"); arq = xgetfile(); Gerao do grfico Onda = fscanfMat(arq); Sada plot2d(Onda); printf("Min = %5.2f, Max = %5.2f",... Minimo(Onda), Maximo(Onda));Figura 35: O programa Scilab Onda.sci. Cada linha um comando, a no ser que termine em .... Linhas que se iniciam com // so comentrios que se destinam a leitores humanos.

Funes utilizadas

A Figura 35 mostra um programa Scilab que faz isso, utilizando dois mdulos, as funes Maximo e Minimo, mostradas na Figura 36. Introduo Organizao e Programao de Computadores IOPC 2011_2-1.docx

Introduo

24

Figura 36: As funes Maximo e Minimo vistas no editor SciNotes

Para entender melhor essas funes, veja o algoritmo descrito na Seo 1.7.3. O programa produz o grfico da Figura 37, e a sada Min = -0.86, Max = 0.36 mostrada na console do Scilab.

Figura 37: Grfico com os pontos no arquivo ondas1.txt

1.7.3

Algoritmos e Programas

Na parte III, Algoritmos e Programas, nosso foco se afasta um pouco de especificidades da linguagem Scilab para abordar aspectos da programao de computadores que so independentes da linguagem utilizada. Ns continuamos a usar o Scilab, mas o contedo dessa parte seria essencialmente o mesmo se estivssemos utilizando C, Java, Fortran ou qualquer outra linguagem. Ns veremos que um algoritmo um mtodo para transformao de informao de entrada em informao de sada, e que em boa parte independente da linguagem particular em que est descrito. A transformao desejada definida por uma especificao que resulta de uma anlise de um problema.

A = [39. 24. 50. 42. 28. 8. 62. 34. 70.

52.];

Figura 38: Como encontrar o menor valor em uma coleo de nmeros?

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Introduo

25

Como um exemplo, queremos encontrar o menor valor presente em uma coleo de nmeros. Com 10 nmeros, como mostrados na Figura 38, fcil; podemos faz-lo por inspeo visual. Mas como encontrar o menor valor entre, digamos, 50.000 nmeros? Para isso precisamos de um algoritmo, isto , de um mtodo que tenha como informao de entrada a coleo de nmeros, e como sada o menor valor ali presente. Em programao uma coleo de nmeros chamada vetor. O primeiro elemento de um vetor notado ; o quinto, ; o -simo, . Queremos portanto construir um algoritmo que encontre o menor valor em um vetor de tamanho arbitrrio. Para isso, vamos comear com o caso mais simples possvel: um vetor com um nico elemento, que obviamente o menor elemento presente no vetor. Tudo bem, mas queremos trabalhar com vetores grandes de verdade. Para avanar, usamos induo. Suponhamos que, de alguma forma, descobrimos que o menor valor entre os primeiros elementos de um vetor de tamanho . Podemos ento inferir que o menor valor entre os primeiros elementos de o menor entre e . Como j sabemos encontrar o mnimo em um vetor de 1 elemento ( ), sabemos encontrar o mnimo em um vetor com 2 elementos; como sabemos encontrar o mnimo em um vetor de 2 elementos, sabemos encontrar o mnimo em um vetor com 3 elementos. Prosseguindo com o raciocnio, j temos um algoritmo para encontrar o menor valor em um vetor de tamanho arbitrrio. Tendo um algoritmo, no temos mais medo do problema com 50.000 nmeros. Nosso trabalho ser programar o algoritmo; caber ao computador a sua execuo. A = [39.

24. 24.

50. 50.

42. 42.

28. 28.

8. 8.

62. 62.

34. 34.

70. 70.

52.]; 52.];

A = [39.

A = [39.

24. 24.24.

50. 50.50.

42. 42.42.

28. 28.28.

8. 8.8.

62. 62.62.

34. 34.34.

70. 70.70.

52.]; 52.];52.];

A = [39. A = [39.

A = [39.

24.

50.

42.

28.

8.

62.

34.

70.

52.];

Figura 39: Seis primeiros passos do algoritmo que encontra o menor valor presente em um vetor

Um algoritmo dito correto quando atende sua especificao. Dois algoritmos corretos podem satisfazer uma mesma especificao, mas diferir substancialmente na eficincia (gasto de tempo e de recursos computacionais como memria) com que realizam a transformao de informao desejada. O termo complexidade empregado para designar a eficincia (ou melhor, o inverso da eficincia) de um algoritmo para a soluo de um problema. A complexidade de algoritmos estudada inicialmente com dois problemas clssicos da cincia da computao: a ordenao dos elementos de um vetor e a busca por um elemento de um vetor com valor igual a uma chave dada. Para cada um desses problemas so vistos algoritmos que diferem em sua complexidade. Encontrar uma raiz de uma funo ou resolver um sistema de equaes lineares so exemplos de problemas numricos que um cientista ou engenheiro frequentemente tem que resolver. Ns veremos alguns exemplos de algoritmos que resolvem problemas desse tipo, e tambm alguns cuidados que devem ser tomados ao se desenvolver programas para estas aplicaes.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Introduo

26

Algoritmos com melhor complexidade so fruto de engenho e arte de seus projetistas. Existem entretanto problemas cuja soluo algortmica intrinsecamente difcil, no sentido em que no existem boas solues para eles. A Parte III e o curso se encerram com exemplos de problemas computacionalmente difceis, e de problemas para os quais simplesmente no existe nenhum algoritmo que os resolvam para todos os casos.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Organizao de Computadores

27

2 Organizao de Computadores2.1 Bits e cdigosComo j dissemos, informao simblica exige convenes de interpretao. Qualquer pessoa pode dar a um conjunto de bits a interpretao que bem entender, mas a escolha de um cdigo tem conseqncias importantes. ASCII e UNICODE. Para a comunicao de dados entre computadores a adoo de cdigos com aceitao mais ampla traz diversas vantagens. O cdigo ASCII American Standard Code for Information Interchange uma dessas convenes de ampla aceitao em toda a indstria da computao. A Tabela 3 mostra partes do cdigo ASCII, adotado desde os anos 60 para a representao de caracteres como A, a, (, +, etc., para o espao em branco (sim, o espao tambm exige uma representao), e para os chamados caracteres de controle, como line feed, para indicar uma troca de linhas. O cdigo ASCII oficial usa 7 bits, o que permite combinaes. Tendo sido proposto por norte-americanos no incio da era dos computadores, no de se estranhar que ali no haja proviso de cdigo para caracteres acentuados ou cedilhas. Estes so contemplados no cdigo ASCII estendido, que usa 8 bits para representar 256 caracteres.Tabela 3: Exemplos do cdigo ASCIICaractere End of Transmission Line Feed Space ( + 0 1 2 3 A B C a b c Cdigo 0000100 0001010 0100000 0101000 0101011 0110000 0110001 0110010 0110011 1000001 1000010 1000011 1100001 1100010 1100011 Decimal 4 10 32 40 43 48 49 50 51 65 66 67 97 98 99

O sucessor moderno do cdigo ASCII o Unicode, um padro de codificao capaz de representar caracteres chineses, rabes, tailandeses, enfim, de praticamente qualquer conjunto de caracteres das lnguas vivas e mortas do mundo. Binrios sem Sinal. Um outro critrio para a escolha de um cdigo a sua adequao para operaes aritmticas. No cdigo ASCII estendido o nmero decimal 123 pode ser representado pela seqncia de 24 bits 00110001 00110010 00110011, onde colocamos espaos para facilitar a leitura. Para nmeros, a interpretao de um conjunto de bits como um nmero binrio leva a cdigos mais compactos e que, como veremos, permitem a realizao de operaes de soma por circuitos mais simples, mais rpidos e mais baratos.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Organizao de ComputadoresTabela 4: 10 primeiras potncias de 2

28

n 2n

0 1

1 2

2 4

3 8

4 16

5 32

6 64

7 128

8 256

9 512

10 1024

O decimal 123 pode ser representado em binrio por 1111011, utilizando apenas 7 bits. Esta representao vem do fato que .Tabela 5: Representao dos nmeros de 0 a 15 como binrios sem sinal de 4 bits

Decimal Binrio

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111

A converso de binrio-decimal:

para

pode ser feita com o seguinte mtodo para converso

Ns precisamos expressar 123 como uma soma de potncias de 2. Para isso, procuramos em uma tabela de potncias de 2 (como a Tabela 4; a tabela deve chegar at uma potncia de 2 maior que o nmero a ser convertido) o maior valor que no exceda 123 o que, no caso, 64. Temos . Temos agora que expressar 59 como uma soma de potncias de 2. Na Tabela 4, a maior potncia de 2 que no excede 59 32. Repetindo o raciocnio, temos .

Desta forma progredimos at que a parcela a ser expressa como soma de potncias de 2 seja igual a zero.Tabela 6: Converso do decimal 123 para binrioA converter Potncia de 2 123 64 59 32 27 16 11 8 3 2 1 1 0

Um uso comum de nmeros representados como binrios sem sinal o sistema RGB (Red, Green, Blue) para a codificao da cor associada a um pixel um ponto em um monitor com os valores dos nveis de intensidade das cores primrias componentes vermelho, verde e azul. Para cada uma dessas cores utiliza-se um byte (8 bits), o que permite representar nveis de intensidade entre 0 e 255. Essa preciso considerada satisfatria para a nossa acuidade visual.

Figura 40: Uso de binrios sem sinal para a representao dos nveis de intensidade das cores primrias vermelho (Red), verde (Green) e azul (Blue), conhecido como RGB

Sinal e Amplitude. Como computadores s usam bits, ns no podemos usar um sinal - para indicar que um valor negativo. Temos que usar bits para codificar essa informao. A Introduo Organizao e Programao de Computadores IOPC 2011_2-1.docx

Organizao de Computadores

29

codificao para nmeros negativos conhecida como sinal e amplitude bastante natural. Basta tomar o bit mais esquerda e interpret-lo como o sinal do nmero: se for 0, o nmero cuja amplitude representada pelos bits restantes positivo, e se for 1, negativo. Portanto, se tivermos 8 bits, o bit mais esquerda ser usado para codificar o sinal. Os 7 bits restantes nos permitem representar amplitudes entre 0 e 127, ou seja, podemos, com os 8 bits, representar os inteiros entre -127 e +127. Repare que zero tem duas representaes: 10000000 e 00000000. Codificao com Deslocamento. Uma outra possibilidade para representar nmeros negativos est ilustrada na Tabela 7. A conveno adotada de interpretar um conjunto de bits como a representao de um valor igual ao valor de sua interpretao como binrio sem sinal, deslocado por um fator a ser subtrado.Tabela 7: Representao de nmeros negativos por deslocamento

Decimal 0 1 2 3 4 5 6 7

Binrio 000 001 010 011 100 101 110 111

Nmero -3 -2 -1 0 1 2 3 4

Complemento de 2. A absoluta maioria dos computadores utiliza entretanto uma codificao conhecida como complemento de 2 para a representao de nmeros inteiros negativos. A Tabela 8 mostra a codificao em 3 bits dos inteiros entre -4 e 3 usando complemento de 2.Tabela 8: Codificao em complemento de 2 com 3 bitsComplemento de 2 Bits b1 b0 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1

b2 0 0 0 0 1 1 1 1

Valor 0 1 2 3 -4 -3 -2 -1

O valor representado pela sequncia de bits

dado pela frmula .

(Ns adotaremos neste texto a conveno de designar sempre por o bit menos significativo e por o bit mais significativo de uma sequncia de bits.) O valor representado por 101 , portanto, dado por . Voc pode estar se perguntando como que algum pode preferir usar complemento de 2, sendo que as propostas anteriores so mais simples e intuitivas. A resposta simples, e decisiva para todos os fabricantes de computadores: a representao em complemento de 2 tem propriedades que permitem uma grande economia na construo de circuitos. Para se obter o negativo de um nmero, basta complement-lo bit a bit, e somar 1. Por exemplo, 2 representado por 010; complementando bit a bit, obtemos 101; somando 1, chegamos a 110,

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Organizao de Computadores que a representao de -2. Isso permite aos fabricantes aproveitar para fazer subtraes o mesmo circuito utilizado para fazer somas, com acrscimos mnimos de hardware.

30

Ponto Flutuante. A representao em um nmero limitado de bits de valores muito grandes ou muito pequenos utiliza mecanismos para sua codificao similares aos que usamos na notao cientfica com potncias de 10. O nmero de Avogadro, por exemplo, notado por , e o dimetro de um tomo de hidrognio de metros. Para o nmero de Avogadro ns dizemos que a mantissa ou significando 6,02 e o expoente, 23. Este mesmo nmero poderia ser escrito como , ou como , mas costume adotar a forma normalizada, isto , com um nico algarismo no nulo antes da vrgula. A codificao de nmeros em ponto flutuante atribui a alguns dos bits do nmero o significado de um expoente no de 10 mas de 2, como no poderia deixar de ser. Existe um padro para ponto flutuante de aceitao total pela indstria que o IEEE 754. Para nmeros de preciso simples, o IEEE 754 utiliza 32 bits, sendo 1 bit para o sinal (0 = positivo, 1 = negativo), 8 para o expoente e 23 para a mantissa. Para preciso dupla so 64 bits: 1 para o sinal, 11 para o expoente e 52 para a mantissa. A codificao por deslocamento que acabamos de ver utilizada para permitir a representao de expoentes negativos. Para nmero de 32 bits, o deslocamento do expoente de 127; para nmeros de 64 bits, de 1023. A mantissa normalizada, isto , tem um nico algarismo no nulo antes da vrgula que, como sempre igual a 1 no sistema binrio, no necessita ser representado.Significando31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0 1 0 0 1 1 1 1 1 1 0 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

A Figura 41 mostra um nmero em ponto flutuante de 32 bits. Voc deve reparar que os bits do expoente codificam 159, se interpretados como um binrio sem sinal; com o deslocamento, o expoente de 2 igual a . O nmero ali codificado portanto igual a

O padro IEEE 754 define interpretaes especiais para expoentes s com 1s e s com 0s, incluindo o prprio zero (com expoente e mantissa iguais a zero), valores especiais como ou NAN (Not a Number), que so necessrios para a comunicao de resultados de certas operaes ou do clculo de algumas funes. A referncia 21 tem um bom resumo do padro.

21

Steve Hollasch, IEEE Standard 754 Floating-Point, n.d., http://steve.hollasch.net/cgindex/coding/ieeefloat.html. Introduo Organizao e Programao de Computadores IOPC 2011_2-1.docx

128 0 0 16 8 4 2 1 0,5 0 0,125 0 0,03125 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0159 32 7113539584 1,65625

Expoente

Valor

Figura 41: Um nmero em ponto flutuante com 32 bits

Organizao de Computadores

31

2.2 Circuitos CombinatriosVimos at agora como representar nmeros, caracteres , cores e qualquer outra coisa utilizando bits. Nesta seo ns iremos ver como que os circuitos em um computador transformam informao, como em um circuito de soma que recebe como entrada dois conjuntos de bits, e produz como sada um outro conjunto de bits com a representao do valor da soma das entradas. 2.2.1 lgebra de Boole

Figura 42: George Boole, 1820-1898

Em 1854 o matemtico ingls George Boole props uma lgebra para o clculo da validade de expresses formadas por proposies lgicas. Essa lgebra chamada hoje de lgebra Booleana, e constitui a base para o projeto de circuitos digitais. Ela trabalha com variveis lgicas, isto , com variveis que podem ter somente os valores verdadeiro ou falso, ou 1 ou 0. As operaes fundamentais da lgebra de Boole so NO, E e OU, mais conhecidas pelas palavras em ingls NOT, AND e OR. Essas operaes fundamentais, ou melhor, composies dessas operaes fundamentais constituem as nicas transformaes feitas por qualquer computador sobre bits.

2.2.2

Portas LgicasTabela 9: Definio das operaes NOT, OR e AND

a 0 1

NOT a 1 0

a 0 0 1 1

b 0 1 0 1

a OR b 0 1 1 1

a 0 0 1 1

b 0 1 0 1

a AND b 0 0 0 1

A Tabela 9 mostra as definies dessas operaes. O que se v nas tabelas bastante intuitivo: A operao de negao (NOT) simplesmente inverte o valor de entrada; A operao OR tem como resultado 1 se pelo menos uma das entradas for igual a 1, e s igual a 0 quando todas as entradas forem iguais a 0;

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Organizao de Computadores

32

Inversamente, a operao AND tem 0 como resultado se qualquer uma das entradas for igual a 0, e s igual a 1 quando todas as entradas forem iguais a 1.

Circuitos digitais que implementam operaes booleanas so conhecidos como portas lgicas. A Figura 43 mostra um diagrama de circuito simulado no Logisim contendo desenhos adotados por conveno para entradas, sadas e portas NOT, AND e OR e suas conexes.

Porta NOT Porta AND

Porta OR Entrada Sada

Figura 43: Portas lgicas, entradas e sadas em um diagrama de circuito simulado no Logisim

Expresses booleanas so composies dessas operaes bsicas, geralmente escritas utilizando uma notao mais compacta: denota NOT denota OR ou denota AND

Parnteses so usados em expresses booleanas da mesma forma que usamos em expresses aritmticas. Exemplos de expresses booleanas (ou expresses lgicas) so e . Duas operaes booleanas que podem ser derivadas dessas operaes bsicas so NAND e NOR, definidas por: NAND NOR

Ou seja, um NAND um AND seguido de uma negao, assim como um NOR um OR seguido de uma negao. A importncia das operaes NAND e NOR vem do fato de que sua construo com transistores mais simples, como veremos a seguir. A Figura 44 mostra os smbolos utilizados no desenho de circuitos lgicos para as portas NAND e NOR. Repare que o smbolo para NAND quase igual ao smbolo usado para AND, diferenciando-se somente por um pequeno crculo em sua sada; o mesmo vale para o smbolo usado para NOR.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Organizao de Computadores

33

Figura 44: Portas NAND e NOR

Transistores so a base para a construo de circuitos compactos e rpidos. Por um lado, a tecnologia de 2010 permite colocar 1,2 bilhes de transistores em um chip de 1,6 mm de lado, e por outro, o tempo de reao de um desses transistores a mudanas em suas entradas muito pequeno, da ordem de nanosegundos (um nanosegundo igual a segundos). Transistores podem ser e so utilizados para amplificar sinais mas, em circuitos digitais, funcionam essencialmente como interruptores, trabalhando ora como condutores perfeitos, ora como isolantes perfeitos.

Voltagem de Controle

Voltagem naEntrada

Voltagem na SadaFigura 45: Um transistor

Um transistor tem 3 pinos: um controle, uma entrada e uma sada. Em circuitos digitais o seu funcionamento se d somente nas seguintes situaes: quando a voltagem aplicada ao controle alta (para algumas tecnologias, 5 volts), o transistor um condutor perfeito, e as voltagens na entrada e na sada so necessariamente iguais; quando a voltagem aplicada ao controle baixa (0 volts, digamos), o transistor um isolante perfeito, e as voltagens na entrada e na sada podem diferir.

Vejamos inicialmente como uma porta NOT implementada com a utilizao de um transistor. Suponhamos que estamos representando o smbolo 0 por uma voltagem baixa e o smbolo 1 por uma voltagem alta. Como mostrado na Figura 46, uma fonte de voltagem alta ligada entrada do transistor, atravs de uma resistncia, enquanto a sada do transistor ligada um ponto de terra. A varivel que desejamos negar, , ligada ao controle do transistor. O resultado do circuito, , obtido no ponto entre a resistncia e a entrada do transistor.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Organizao de Computadores

34

Fonte V= 5 (voltagem alta)

a 1

a 0

Terra V= 0 (voltagem baixa) Figura 46: Uma porta NOT invertendo a = 0. Como a = 0, o transistor funciona como isolante perfeito

Quando , a voltagem aplicada ao controle do transistor baixa e ele funciona como isolante perfeito, e obtemos .

Fonte V= 5 (voltagem alta)

a 0

a 1

Terra V= 0 (voltagem baixa) Figura 47: Porta NOT invertendo a = 1. O transistor funciona como condutor perfeito

Quando , o transistor funciona como condutor perfeito, e obtemos contato com o ponto de terra estabelecido.Fonte

, pois o

0 (a + b) a 1

b 0 TerraFigura 48: Uma porta NOR com transistores

Uma porta NOR construda com o arranjo de transistores mostrado na Figura 48; no difcil ver que o ponto s ter o valor 1 (voltagem alta) quando os dois transistores do arranjo estiverem funcionando como isolantes, o que s ocorre quando e .

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Organizao de Computadores

35

Fonte

1 (a.b) a 1

b 0 TerraFigura 49: Uma porta NAND implantada com transistores

Uma porta NAND construda de forma similar, mas com os transistores ligados em srie, como mostra a Figura 49. Aqui a sada s ser igual a zero quando tivermos e , valores que fazem com que a sada esteja conectada ao ponto de terra.FonteFonte

a.b 0a 1

b 0

Terra

NAND

NOT

Figura 50: Porta AND com 3 transistores

Para obter uma porta AND usando transistores basta inverter a sada de uma porta NAND, como mostrado na Figura 50. Uma porta OR pode tambm ser obtida conectando a sada de uma porta NOR com a entrada de uma porta NOT. 2.2.3 Introduo ao Logisim

O Logisim um simulador de circuitos lgicos que voc deve baixar pela Internet , no endereo http://ozark.hendrix.edu/~burch/logisim/ , e instalar em seu computador. um simulador com objetivos didticos, que atende muito bem s nossas necessidades. Este texto segue o tutorial presente no help do sistema. Ao iniciar o Logisim voc ver uma tela como a mostrada na Figura 51, talvez diferindo em alguns detalhes. Ali podemos ver uma barra de menu, uma barra de ferramentas, um painel de explorao e um painel para o desenho efetivo de circuitos.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Organizao de Computadores

36

Figura 51: Tela inicial do Logisim

Para o nosso primeiro circuito, vamos comear colocando duas portas AND, clicando sobre o smbolo correspondente na barra de ferramentas, e posicionando as portas na rea de desenho, como mostrado na Figura 52. Repare na tabela de atributos, que exibe e permite a edio de dados relativos ao elemento selecionado no caso, a porta AND inferior.

Figura 52: Duas portas AND

Depois, usando ainda a barra de ferramentas, vamos colocar uma porta OR e duas NOT, posicionando-as conforme a Figura 53.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Organizao de Computadores

37

Figura 53: Acrescentando portas NOT e OR

O prximo passo a colocao de entradas e sadas, que so colocadas usando os cones em destaque na Figura 54.

Figura 54: Acrescentando entradas e sadas

Para colocar fios ligando entradas, portas e sadas, utilize a ferramenta de seleo em destaque na Figura 55. Fios sempre seguem caminhos horizontais ou verticais (chamado caminho Manhattan), e nunca em diagonal.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Organizao de Computadores

38

Figura 55: Acrescentando o cabeamento

Uma operao lgica importante o Ou Exclusivo, escrito frequentemente como XOR (exclusive or). Se a e b so variveis booleanas (isto , variveis cujos nicos valores possveis so Verdadeiro e Falso, ou 0 e 1), a XOR b s tem o valor 1 (Verdadeiro) quando uma e somente uma das variveis a e b tem o valor 1. O Ou Exclusivo no uma operao primitiva da lgebra booleana, pois pode ser obtido atravs da expresso a XOR b = ab + ab. Termine agora o cabeamento para obter o circuito da Figura 56 que implementa o Ou Exclusivo.

Figura 56: Circuito OU Exclusivo

Seu circuito ficar mais fcil de ser compreendido se voc acrescentar textos, usando a ferramenta A em destaque na Figura 57. Voc pode alterar as caractersticas da fonte (tamanho, negrito ou itlico, etc.) editando os atributos do texto selecionado.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Organizao de Computadores

39

Figura 57: Acrescentando textos a um circuito

Textos podem ser colocados em qualque posio na rea de desenho, mas muitas vezes melhor coloc-los como "labels" de elementos de circuito, como entradas, portas lgicas e sadas. O label acompanha o elemento quando este movido para outra posio. Para isto, selecione o elemento, e preencha o campo Label na tabela de atributos, como mostrado na Figura 57.

Figura 58: Ferramenta de toque para simulao de um circuito

Para testar o seu circuito, use a ferramenta de simulao a mozinha em destaque na Figura 58. Utilize-a sobre as entradas do circuito para alterar o seu valor. Explore todas as combinaes possveis de valores para a e b, verificando a sada para completar a Tabela 10.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Organizao de ComputadoresTabela 10: Complete com os valores produzidos pelo seu circuito XOR

40

a 0 0 1 1

B 0 1 0 1

a XOR b

Circuitos podem ser salvos em arquivos para uso posterior. Para salvar o seu circuito, use a opo File/Save do menu do Logisim, escolha um nome para o arquivo e um diretrio, e salveo. Para voltar a trabalhar com o arquivo, use File/Open. Para introduzir elementos de circuito com outras orientaes, clique sobre a porta desejada, e depois altere o campo Facing na tabela de atributos, conforme mostrado na Figura 59.

Figura 59: Mudando a orientao de uma porta lgica

Com isso ns esperamos que voc tenha adquirido os elementos bsicos para o uso do Logisim. Voc pode descobrir muito mais lendo a ajuda ou explorando diretamente a ferramenta. 2.2.4 Aritmtica com operaes lgicas

Figura 60: Circuito correspondente expresso a'(ca)'(b'+c)

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Organizao de Computadores

41

Ns vimos como circuitos lgicos implementam expresses lgicas, com um mapeamento direto. Por exemplo, a Figura 60 mostra um circuito que corresponde expresso . No difcil acreditar que conseguimos obter circuitos para qualquer expresso lgica. Mas podemos fazer circuitos lgicos que fazem contas? Ora, todos sabemos que computadores fazem contas, e sabemos portanto que a resposta afirmativa. Mas como? isso o que veremos nesta seo. 2.2.4.1 Soma de 2 inteiros de 1 bit Vamos comear por um problema bem simples: encontrar um circuito lgico que faa a soma de dois inteiros representados como binrios sem sinal de 1 bit cada um. Na base 10, o resultado pode ser 0, 1 ou 2. Portanto o resultado, tambm codificado como binrio sem sinal, pode ser 00, 01 ou 10. Ou seja, so necessrios 2 bits para representar o resultado da soma de duas variveis de 1 bit. importante entender que somar significa obter a representao como um binrio sem sinal da soma das entradas , entendidas tambm como binrios sem sinal. (Na verdade, calcular ou computar uma funo qualquer significa transformar a representao de seus argumentos na representao do valor da funo). A Figura 61 mostra as entradas e sadas do circuito que pretendemos construir.Entradas 1 bit cada

a

b

Circuito Somador 1 bitSadas

s1 s0

Notao comum para conjuntos de bits: 0 o ndice do bit menos significativo

Figura 61: Entradas e sadas de um somador de 1 bit

Para especificar exatamente o que desejamos deste circuito, vamos utilizar uma tabela da verdade. Uma tabela da verdade apresenta o valor de uma ou mais funes lgicas as sadas do circuito correspondendo a cada combinao possvel de valores das variveis de entrada. A Figura 62 mostra a tabela da verdade para a soma de duas variveis de 1 bit.Sadas: 2 funes lgicas das mesmas variveis

Entradas

Todos os valores possveis para as entradas

Resultados da soma em binrio sem sinal

Figura 62: Tabela da Verdade para soma de duas variveis de 1 bit

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Organizao de Computadores Nessa tabela ns temos:

42

duas variveis de entrada, e ; duas funes de sada, e ; cada funo corresponde a um dgito binrio do resultado; a cada linha da tabela corresponde uma combinao das variveis de entrada e o valor correspondente das funes de sada. Como so duas variveis, temos linhas na tabela.

Tabelas da verdade constituem um mecanismo geral para a especificao de funes lgicas. Elas especificam as sadas para cada combinao possvel das variveis de entrada. Ns j vimos tabelas da verdade quando introduzimos as funes NOT, AND e OR (Tabela 9). Dada uma expresso lgica, ns podemos construir sua tabela da verdade efetuando as operaes da expresso. A Figura 63 mostra a tabela da verdade para a expresso contendo valores intermedirios usados no clculo do valor da expresso. 0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1 1 1 1 1 0 0 0 0 0 1 1 1 0 1 1 1 0 1 1 1 0 0 0 0 ,

Figura 63: Tabela da verdade para a expresso

Mas o nosso problema no bem esse. Ns temos uma tabela da verdade e, para obter um circuito lgico para uma das funes de sada a partir de uma tabela da verdade preciso: conseguir uma expresso lgica equivalente tabela da verdade, e construir o circuito equivalente expresso lgica.

Uma expresso lgica e uma funo definida por uma tabela da verdade so equivalentes quando para qualquer combinao de valores das variveis de entrada, os valores da funo e os valores da expresso so iguais. Por exemplo, a funo definida pela Tabela 11 equivalente expresso .

Tabela 11: Tabela da verdade para a funo f(x,y)x y f(x,y)

0 0 1 1

0 1 0 1

1 0 0 1

Um mtodo genrico para se obter uma expresso lgica para uma funo definida por uma tabela da verdade consiste em fazer um OR de termos que s tm o valor 1 para cada combinao das variveis de entrada para a qual o valor da funo igual a 1.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Organizao de Computadoresx 00

43y 01

f(x,y) 10

xy + xy

11

01

01

Figura 64: Cobertura dos 1s de uma funo booleana

Na Figura 64, quando e de de

somente na primeira linha, quando . Ns temos: e e

e

, e na ltima linha,

se e somente se e , se e somente se e , .

; para qualquer outra combinao de valores .; para qualquer outra combinao de valores

Portanto, o OR destes dois termos, , cobre exatamente os 1s da tabela, e uma expresso lgica equivalente funo desejada.s0 = ab + ab

s1 = ab

Figura 65: Expresses lgicas para um somador de duas variveis de 1 bit

Retornando ao problema do somador de 1 bit, temos duas funes para as quais queremos encontrar expresses lgicas equivalentes. Na Figura 65 vemos que, para a funo , temos apenas o 1 da ltima linha a cobrir, o que feito pelo termo , e para a funo , temos um 1 na segunda linha, coberto pelo termo , e outro 1 na terceira linha, coberto pelo termo . Ou seja, as expresses lgicas que desejamos so e . A Figura 66 mostra um circuito que implementa essas expresses lgicas. Este circuito conhecido como circuito meia-soma, por contraste com o circuito soma-completa que veremos a seguir.

ab ab

abFigura 66: Circuito lgico para soma binria de 1 bit, ou circuito meia-soma

Temos aqui um resultado importantssimo: ns fomos capazes de construir um circuito lgico com duas entradas de 1 bit representando binrios sem sinal, e que produz em sua sada dois bits representando a soma das entradas, tambm codificado como um binrio sem sinal. Ou seja, conseguimos fazer contas com as funes lgicas NOT, AND e OR.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Organizao de Computadores 2.2.4.2 Soma de binrios com vrios bits Tudo bem, conseguimos fazer um circuito que realiza a soma de duas variveis de 1 bit. Mas isso muito pouco. Para fazer qualquer coisa mais sria, precisamos ser capazes de somar variveis de, digamos, 32 bits, como so representados inteiros em boa parte dos computadores atuais.

44

Em princpio ns poderamos construir uma tabela da verdade com as entradas e sadas, e depois inferir expresses lgicas para as sadas usando o mtodo de cobertura dos 1s. Essa tabela teria 64 bits de entrada, correspondendo s duas variveis a serem somadas, e 33 bits de sada, pois a soma de duas variveis de 32 bits pode ter 33 bits. O problema que essa tabela teria = 18.446.744.073.709.551.616 linhas! Ou seja, mesmo se teoricamente conseguiramos construir o somador de 32 bits pelo mtodo de cobertura dos 1s, na prtica isso absolutamente invivel. Temos portanto que adotar outro enfoque. Primeiramente vamos examinar como ns, humanos, fazemos uma soma em binrio. Depois, vamos construir um somador de forma modular, explorando regularidades no processo de soma. Uma soma de nmeros binrios similar soma decimal que aprendemos na escola primria. Para fazer uma soma na base 10 ns somamos algarismo por algarismo, da direita (menos significativos) para a esquerda (mais significativos). Quando a soma de dois algarismos excede 9, colocamos como resultado daquela coluna somente o seu dgito mais significativo, e acrescentamos 1 (o vai-um) na soma da coluna seguinte (Figura 67).

Vai-um a b a+b

1 2 4 7

1 7 7 6 7 9 1 5 6 7

Figura 67: Soma em decimal

Para somar dois nmeros binrios o procedimento anlogo. Somamos bit a bit, da direita para a esquerda e, quando a soma de uma coluna excede 1, colocamos como resultado da coluna somente o bit mais significativo de sua soma, e temos um vai-um para a coluna seguinte. A Figura 68 mostra o processo do clculo de 1011101+1001110.Vai-Um 1 0 1 1 1 0 1 0 0 1 1 1 0 0 1 1 1 1 0 1 1 0 0 0 1 1 1 0 1

Parcelas

Soma

Figura 68: Exemplo de soma de binrios

Ns vamos usar essa aritmtica para construir um circuito somador de vrios bits. A idia construir um mdulo que faa a operao de uma das colunas da soma. O somador ter tantos deste mdulo quantas forem as colunas, ou seja, quantos forem os bits das parcelas.

Introduo Organizao e Programao de Computadores

IOPC 2011_2-1.docx

Organizao de Computadores

45

vai-um soma

SC

vem-um

ab

Figura 69: Entradas e sadas de um circuito de soma completa

Este mdulo, esquematizado na Figura 69, ter trs entradas: os dois bits de uma coluna das parcelas, e uma entrada que vamos chamar de vem-um, que vamos ligar sada vai-um da coluna direita,

As sadas do mdulo so duas: um bit de resultado um bit de vai-um, que ser ligado entrada vem-um da coluna esquerda.

Um circuito que implemente esse mdulo conhecido como circuito soma-completa.

Circuito Soma-Completa

Igual a 1 quando a soma tiver 5 bits