181
AULA 0 B OAS V INDAS ! Esta aula é reservada para ambientar o(a) estudante no laboratório, fazendo-o logar em um computador, experimentar o ambiente de trabalho e a ferramenta de suporte a disciplinas do departamento (SSD-DCT), onde deverá cadastrar seu perfil de usuário e se cadastrar nas disciplinas de sua série. Essa será a ferramenta de interface entre o professor e os estudantes durante todo o curso. Além disso, as informações gerais sobre a disciplina, tais como a forma de avaliação, datas de provas e trabalhos, critério de avaliação e média final, além da conduta ética esperada dos estudantes, são repassadas a eles. 1

Programação Em C

Embed Size (px)

DESCRIPTION

hsdglahsdglajsdhgajsdhgaljdghsa

Citation preview

  • AULA 0

    BOAS VINDAS!

    Esta aula reservada para ambientar o(a) estudante no laboratrio, fazendo-o logar emum computador, experimentar o ambiente de trabalho e a ferramenta de suporte a disciplinasdo departamento (SSD-DCT), onde dever cadastrar seu perfil de usurio e se cadastrar nasdisciplinas de sua srie. Essa ser a ferramenta de interface entre o professor e os estudantesdurante todo o curso.

    Alm disso, as informaes gerais sobre a disciplina, tais como a forma de avaliao, datasde provas e trabalhos, critrio de avaliao e mdia final, alm da conduta tica esperada dosestudantes, so repassadas a eles.

    1

    http://moodle.dct.ufms.br/

  • AULA 1

    BREVE HISTRIA DO COMPUTADOR

    Nesta aula abordaremos uma pequena histria do computador, desde seu surgimento atos nossos dias. Sabemos, no entanto, que esta na verdade uma tentativa e que fatos histricosrelevantes podem ter sido excludos involuntariamente. Continuaremos a trabalhar no sentidode produzir um texto cada vez mais amplo e completo, buscando informaes em outras fontesainda desconhecidas.

    Este texto baseado principalmente nas pginas1 da Rede Mundial de Computadores [2, 3,6, 10, 14] e nos livros de Philippe Breton [1] e Russel Shackelford [11].

    1.1 Pr-histria

    Quando comeou a realizar tarefas mecnicas para sua comodidade e bem estar, o ser hu-mano predominantemente as mulheres tinha de realizar, hora aps hora, dia aps dia, todosos clculos repetitivos em tarefas das cincias, do comrcio e da indstria. Tabelas e mais tabe-las eram preenchidas com os resultados desses clculos, para que no fossem sempre refeitos.No entanto, erros nesses clculos eram freqentes devido, em especial, ao tdio e descon-centrao. Alm disso, esses clculos no eram realizados de forma rpida. Assim, muitosinventores tentaram por centenas de anos construir mquinas que nos ajudassem a realizaressas tarefas.

    O baco2 provavelmente o mais antigo instru-

    Figura 1.1: baco.

    mento conhecido de auxlio ao ser humano em clcu-los matemticos. O baco mais antigo foi descobertona Babilnia, hoje conhecida como Iraque, e data doano de 300 A.C. Seu valor est especialmente no fatode auxiliar a memria humana durante uma operaoaritmtica. Algum bem treinado no uso de um bacopode executar adies e subtraes com a mesma ve-locidade de quem usa uma calculadora eletrnica,mas outras operaes bsicas so mais lentas. Esseinstrumento ainda consideravelmente utilizado empases do Oriente.

    1 Essas pginas so muito legais! Vale a pena visit-las!2 Abacus uma palavra em latim que tem sua origemnas palavras gregas abax ou abakon, que quer dizer tabela e

    que, por sua vez, tem sua origempossivelmente na palavra semtica abq, que significa areia (do livro The UniversalHistory of Numbers de Georges Ifrah, Wiley Press 2000).

    2

  • 1.1 PR-HISTRIA 3

    John Napier3, em seu trabalho Mirifici Logarithmorum Canonis Descriptio de 1614, inven-tou o logaritmo, uma ferramenta que permitia quemultiplicaes fossem realizadas via adiese divises via subtraes. A mgica consistia na consulta do logaritmo de cada operando,obtido de uma tabela impressa. A inveno de John Napier deu origem rgua de clculo,instrumento de preciso construdo inicialmente na Inglaterra em 1622 por William Oughtred4

    e utilizado nos projetos Mercury, Gemini e Apollo da NASA, que levaram o homem lua.

    Figura 1.2: Rgua de clculo.

    Leonardo da Vinci5 e Wilhelm Schickard6, nos sculos XVI e XVII, respectivamente, foramos primeiros a projetar mquinas de clculo baseadas em engrenagens. A mquina propostapor da Vinci nunca saiu do papel, mas a mquina de Schickard conhecida como a primeiracalculadora mecnica automtica ou o primeiro computador no programvel. O sucesso deuma mquina como essa s foi obtido por Blaise Pascal7 em 1642, que aos 19 anos construiu aPascaline para ajudar seu pai, um recolhedor de taxas, a somar quantias. A Pascaline realizavaapenas adies e no era muito precisa. Pouco tempo aps Pascal ter proposto sua mquina decalcular, o alemo Gottfried Leibniz8, co-inventor do Clculo juntamente com Isaac Newton9,planejou construir uma calculadora10 com as quatro operaes bsicas e que, ao invs de engre-nagens, empregava cilindros dentados com 10 dentes, possibilitando seu trabalho no sistemanumrico decimal. O sculo seguinte tem poucas inovaes diretamente relacionadas aos com-putadores, como a escala de temperaturas Fahrenheit11, o telgrafo e a eletricidade, descobertapor Benjamin Franklin12.

    Joseph Jacquard13 criou, em 1801, um tear que podia tecer a partir de um padro lido auto-maticamente de cartes de madeira perfurados e conectados por cordes. Descendentes dessescartes perfurados so utilizados at hoje em algumas aplicaes. A inveno de Jacquardincrementou a produtividade de tecidos da poca, mas, em contrapartida, gerou grande de-semprego de operrios da indstria txtil.

    3 John Napier ( ), nascido na Esccia, matemtico, fsico, astrnomo e 8o Lorde de Merchistoun.4 William Oughtred ( ), nascido na Inglaterra, matemtico.5 Leonardo di ser Piero da Vinci ( ), nascido na Itlia, erudito, arquiteto, anatomista, escultor, enge-

    nheiro, inventor, matemtico, msico, cientista e pintor.6 Wilhelm Schickard ( ), nascido na Alemanha, erudito.7 Blaise Pascal ( ), nascido na Frana, matemtico, fsico e filsofo.8 Gottfried Wilhelm Leibniz ( ), nascido na Alemanha, erudito.9 Sir Isaac Newton ( ), nascido na Inglaterra, fsico, matemtico, astrnomo e filsofo.

    10 Ele chamou sua mquina de stepped reckoner.11 Daniel Gabriel Fahrenheit ( ), nascido na Alemanha, fsico e engenheiro.12 Benjamin Franklin (), nascido nos Estados Unidos, jornalista, editor, autor, filantropo, abolicionista,

    funcionrio pblico, cientista, diplomata e inventor. Foi tambm um dos lderes da Revoluo Norte-americana.13 Joseph Marie Jacquard ( ), nascido na Frana, alfaiate e inventor.

    DCT UFMS

    http://en.wikipedia.org/wiki/John_Napierhttp://en.wikipedia.org/wiki/William_Oughtredhttp://en.wikipedia.org/wiki/Leonardo_da_vincihttp://en.wikipedia.org/wiki/Wilhelm_Schickardhttp://en.wikipedia.org/wiki/Blaise_Pascalhttp://en.wikipedia.org/wiki/Leibnizhttp://en.wikipedia.org/wiki/Isaac_Newtonhttp://en.wikipedia.org/wiki/Gabriel_Fahrenheithttp://en.wikipedia.org/wiki/Benjamin_Franklinhttp://en.wikipedia.org/wiki/Joseph_Marie_Jacquard

  • 1.1 PR-HISTRIA 4

    Figura 1.3: Cartes perfurados da mquina de Jacquard.

    AMquina de Diferenas14, projetada por Charles Babbage15, era uma mquina de calculara vapor e foi criada com o objetivo de atender estratgia expansionista do governo ingls, quetinha a ambio de se tornar omaior imprio do planeta. Esse foi o projeto mais caro financiadopelo governo da Inglaterra at ento, mas aps dez anos de tentativas infrutferas, o projetoruiu e a mquina no foi terminada. Todavia, Babbage no desistiu e projetou uma segundamquina chamada Mquina Analtica16 que seria alimentada por seis mquinas a vapor, teriao tamanho de uma casa e era uma mquina de propsito mais geral, j que seria programvelpor meio de cartes perfurados. Alm disso, sua inveno tambm permitiria que os cartesperfurados, agora de papel, fossem empregados como umdispositivo de armazenamento. Essamquina teria ainda um dispositivo que a distinguia das calculadoras e a aproximava do queconhecemos hoje como computadores: uma sentena condicional.

    Ada Byron17 tornou-se amiga de Charles Babbage e ficou fascinada com o as idias da M-quina Analtica. Apesar de nunca ter sido construda, Ada escreveu diversos programas paraessa mquina e entrou para a histria como a primeira programadora de um computador. Adainventou a sub-rotina e reconheceu a importncia do lao como uma estrutura de programao.

    Em 1890 o governo norte-americano tinha de realizar o censo da populao dos EstadosUnidos e a previso era de que, da forma como tinha sido realizado o ltimo, o censo de 1890levaria cerca de 7 anos e meio at ser finalizado. Um prmio foi ento anunciado para o inven-tor que ajudasse a automatizar o censo de 1890. O prmio foi vencido por Herman Hollerith18,que props a Mesa de Hollerith19, uma mquina que consistia de um leitor de cartes perfura-dos que era sensvel aos buracos nos cartes, ummecanismo de engrenagens que podia contar eum grande expositor de indicadores para mostrar os resultados da computao. Essa mquinafoi projetada com sucesso e o censo de 1890 terminou em somente 3 anos. A partir da Hollerithfundou uma empresa chamada TABULATING MACHINE COMPANY. Em 1911 sua empresa seune a outras duas e se torna a COMPUTING TABULATING RECORDING CORPORATION CTR.Sob a presidncia de Thomas Watson20, a empresa foi renomeada INTERNATIONAL BUSINESSMACHINES IBM em 1924.

    14 Do inglsDifference Engine.15 Charles Babbage ( ), nascido na Inglaterra, matemtico, filsofo, engenheiro mecnico e precursor

    da Cincia da Computao.16 Do ingls Analytic Engine.17 Augusta Ada Byron (), nascida na Inglaterra, conhecida como a primeira programadora da histria.

    Depois de seu casamento passou a se chamar Augusta Ada King, Condessa de Lovelace.18 Herman Hollerith ( ), nascido nos Estados Unidos, estatstico e empresrio.19 Do inglsHollerith desk.20 Thomas John Watson ( ), nascido nos Estados Unidos, empresrio.

    DCT UFMS

    http://en.wikipedia.org/wiki/Charles_babbagehttp://en.wikipedia.org/wiki/Ada_Lovelacehttp://en.wikipedia.org/wiki/Herman_Hollerithhttp://en.wikipedia.org/wiki/Thomas_Watson

  • 1.2 SCULO XX 5

    Figura 1.4: Mesa de Hollerith.

    1.2 Sculo XX

    A exploso dos computadores ocorreu no sculo XX. At a metade desse sculo, compu-tadores eletromecnicos e os primeiros computadores totalmente eletrnicos foram projetadoscom fins militares, para realizar clculos balsticos e decifrar cdigos dos inimigos. Eminen-tes cientistas, que deram origem a quase tudo do que chamamos de Cincia da Computao,estiveram envolvidos nesses projetos. A partir da segunda metade do sculo, a exploso doscomputadores eletrnicos se deu, quando o computador pessoal passou a fazer parte de nossodia a dia.

    1.2.1 Computadores Eletromecnicos

    No incio do sculo XX a IBM continuava produzindo calculadoras mecnicas que erammuito utilizadas em escritrios especialmente para realizar somas. No entanto, a demanda porcalculadoras mecnicas que realizassem clculos cientficos comeou a crescer, impulsionadaespecialmente pelas foras armadas norte-americanas e pelo seu envolvimento nas Primeira eSegunda Guerras Mundiais.

    Konrad Zuse21 props a srie Z de computadores e, destacadamente, em 1941, o primeirocomputador digital binrio programvel por fita, o Z3, de 22 bits de barramento, relgio internocom velocidade de 5 Hz e 2.000 rels. O Z4, construdo em 1950, o primeiro computadorcomercial, alugado pelo Instituto Federal de Tecnologia da Sua (Eidgenssische TechnischeHochschule Zrich ETH Zrich ). Zuse tambm projetou uma linguagem de programao dealto nvel, a Plankalkl, publicada em 1948. Devido s circunstncias da Segunda Guerra Mun-dial, seu trabalho ficou conhecido muito posteriormente nos Estados Unidos e na Inglaterra,em meados dos anos 60.

    O primeiro computador programvel construdo nos Estados Unidos foi o Mark I, proje-tado pela universidade de Harvard e a IBM em 1944. O Mark I era um computador eletrome-cnico composto por interruptores, rels, engates e embreagens. Pesava cerca de 5 toneladas,incorporava mais de 800 quilmetros de fios, media 2,5 metros de altura por 15,5 metros de

    21 Konrad Zuse ( ), nascido na Alemanha, engenheiro e pioneiro da computao.

    DCT UFMS

    http://en.wikipedia.org/wiki/Z3http://en.wikipedia.org/wiki/Z4http://en.wikipedia.org/wiki/Plankalkulhttp://en.wikipedia.org/wiki/Harvard_Mark_Ihttp://en.wikipedia.org/wiki/Konrad_Zuse

  • 1.2 SCULO XX 6

    comprimento e funcionava atravs de um motor de 5 cavalos-vapor. O Mark I podia operarnmeros de at 23 dgitos. Podia adicionar ou subtrair esses nmeros em 3/10 de segundo,multiplic-los em 4 segundos e dividi-los em 10 segundos22. Apesar de ser um computadorenorme, com aproximadamente 750 mil componentes, o Mark I podia armazenar apenas 72nmeros e sua velocidade de armazenamento e recuperao era muito lenta, uma motivao eum fator preponderante para substituio posterior do computador eletromecnico pelo com-putador eletrnico. Apesar disso, o Mark I funcionou sem parar por quinze anos.

    Figura 1.5: O computador eletromecnico Harvard Mark I.

    Uma das primeiras pessoas a programar o Mark I foi uma mulher, Grace Hopper23, que em1953 inventou a primeira linguagem de programao de alto nvel chamada Flow-matic, vindoa se tornar posteriormente a linguagem COBOL. Uma linguagem de programao de alto n-vel projetada com o objetivo de ser mais compreensvel ao ser humano, diferentemente dalinguagem binria, de baixo nvel, compreendida pelo computador. No entanto, uma lingua-gem de alto nvel necessita de um programa chamado compilador que traduz um programaem linguagem de alto nvel para um programa em linguagem de baixo nvel, de modo que oMark I pudesse execut-lo. Portanto, Grace Hopper tambm construiu o primeiro compiladorconhecido.

    22 espantoso observar que aps 45 anos da fabricao do Mark I, um computador podia realizar uma operaode adio em 1/109 de segundo.

    23 Grace Murray Hopper (), nascida nos Estados Unidos, cientista da computao e oficial daMarinhados Estados Unidos.

    DCT UFMS

    http://en.wikipedia.org/wiki/FLOW-MATIChttp://en.wikipedia.org/wiki/COBOLhttp://en.wikipedia.org/wiki/Grace_Hopper

  • 1.2 SCULO XX 7

    1.2.2 Computadores Eletrnicos

    No princpio da era eletrnica, logo no comeo do sculo XX, os computadores substituramos interruptores e as engrenagens eletromecnicas pelas vlvulas. Em seguida, a revoluo damicroeletrnica permitiu que uma quantidade enorme de fiao produzida de forma artesanalpudesse ser produzida industrialmente como um circuito integrado. A principal vantagem deum circuito integrado que milhes de transistores podem ser produzidos e interconectadosem um processo industrial de larga escala. Alm disso, os transistores so minsculos compa-rados s vlvulas, alm de muito mais confiveis.

    As contribuies tambm vieram da teoria. A Cincia da Computao no seria a mesmano fossem as contribuies de um matemtico ingls nascido em 1912, conhecido como Paida Cincia da Computao. No incio do sculo XX, Alan Turing24 formalizou o conceito de al-goritmo e computao atravs de ummodelo terico e formal chamado demquina de Turing eformulou a tese que qualquer modelo de computao prtico ou tem capacidades equivalentess de umamquina de Turing ou tem um subconjunto delas25. Turing, assim como osmelhorescrebros da poca, tambm se envolveu com a guerra. Na Segunda Guerra Mundial, no centrode criptoanlise de Bletchley Park, Inglaterra, trabalhou como criptoanalista na decifragem docdigo produzido pela mquina Enigma da Alemanha nazista. Em 1947 participou do desen-volvimento de um computador eletrnico chamado Manchester Mark I na Universidade deManchester, Inglaterra. Em 1952 foi acusado de atos de indecncia nojenta por assumir suarelao com um homem em Manchester. Turing morreu em 1956 antes de completar 44 anosaps comer uma ma envenenada. Sua morte foi registrada como suicdio.

    Figura 1.6: Vlvula.

    Alguns dispositivos da primeira metade do sculo XX reclamam ottulo de primeiro computador digital eletrnico. O Z3 de Konrad Zuse,como j mencionado, era o primeiro computador eletromecnico de pro-psito geral. Foi o primeiro computador a usar aritmtica binria, eraTuring-completo e era totalmente programvel por fita perfurada. Noentanto, usava rels em seu funcionamento e, portanto, no era eletr-nico. Entre 1937 e 1942 foi concebido o Computador Atanasoff-Berry(ABC), projetado por John Atanasoff26 e Clifford Berry27, que continhaelementos importantes da computao moderna como aritmtica bin-ria e vlvulas, mas sua especificidade e impossibilidade de armazena-mento de seus programas o distinguem dos computadores modernos.O Colossus tambm foi um computador construdo para fins militaresentre os anos de 1943 e 1944. Tommy Flowers28 o projetou para auxiliarcriptoanalistas ingleses a decifrar mensagens criptografadas produzidaspelas mquinas Lorenz SZ 40 e 42 da Alemanha nazista na SegundaGuerra Mundial. O Colossus, apesar de utilizar a mais recente tecnolo-gia eletrnica de sua poca, no era um computador de propsito geral,era programvel de forma limitada e no era Turing-completo.

    24 Alan Mathison Turing ( ), nascido na Inglaterra, matemtico, lgico e criptoanalista.25 Esta afirmao chamada Tese de Church-Turing. Uma linguagem de programao ou um computador abs-

    trato Turing-completo se satisfaz essa tese.26 John Vincent Atanasoff ( ), nascido nos Estados Unidos, fsico.27 Clifford Edward Berry ( ), nascido nos Estados Unidos, engenheiro eltrico.28 Thomas Harold Flowers ( ), nascido na Inglaterra, engenheiro.

    DCT UFMS

    http://en.wikipedia.org/wiki/Manchester_Mark_Ihttp://en.wikipedia.org/wiki/Z3http://en.wikipedia.org/wiki/Atanasoff_Berry_computerhttp://en.wikipedia.org/wiki/Colossus_computerhttp://en.wikipedia.org/wiki/Alan_Turinghttp://en.wikipedia.org/wiki/John_Vincent_Atanasoffhttp://en.wikipedia.org/wiki/Clifford_Berryhttp://en.wikipedia.org/wiki/Tommy_Flowers

  • 1.2 SCULO XX 8

    De 1940 a 1960

    O ttulo de primeiro computador digital de propsito geral e totalmente eletrnico emgeral dado ao ENIAC (Electronic Numerical Integrator and Calculator). Esse computador foi cons-trudo na Universidade da Pensilvnia entre 1943 e 1945 pelos professores John Mauchly29 eJohn Eckert30 obtendo financiamento do departamento de guerra com a promessa de construiruma mquina que substituiria todos os computadores existentes, em particular as mulheresque calculavam as tabelas balsticas para as armas da artilharia pesada do exrcito. O ENIACocupava uma sala de 6 por 12 metros, pesava 30 toneladas e usava mais de 18 mil tubos avcuo, que eram muito pouco confiveis e aqueciam demasiadamente.

    Figura 1.7: O primeiro computador eletrnico ENIAC.

    Apesar de suas 18 mil vlvulas, o ENIAC podia armazenar apenas 20 nmeros por vez.No entanto, graas eliminao de engrenagens, era muito mais rpido que o Mark I. Porexemplo, enquanto uma multiplicao no Mark I levava 6 segundos, no ENIAC levava 2,8milsimos de segundo. A velocidade do relgio interno do ENIAC era de 100 mil ciclos porsegundo31. Financiado pelo exrcito dos Estados Unidos, o ENIAC tinha como principal tarefaverificar a possibilidade da construo da bomba de hidrognio. Aps processar um programaarmazenado em meio milho de cartes perfurados por seis semanas, o ENIAC infelizmenterespondeu que a bomba de hidrognio era vivel.

    29 John WilliamMauchly ( ), nascido nos Estados Unidos, fsico e pioneiro da computao.30 John Adam Presper Eckert Jr. ( ), nascido nos Estados Unidos, fsico e pioneiro da computao.31 Diramos que o ENIAC era um computador com velocidade de 100 KHz.

    DCT UFMS

    http://en.wikipedia.org/wiki/ENIAChttp://en.wikipedia.org/wiki/John_Mauchlyhttp://en.wikipedia.org/wiki/J._Presper_Eckert

  • 1.2 SCULO XX 9

    O ENIAC mostrou-se muito til e vivel economicamente, mas tinha como um de seusprincipais defeitos a dificuldade de reprogramao. Isto , um programa para o ENIAC estavaintrinsecamente relacionado a sua parte fsica, em especial a fios e interruptores. O EDVAC(Electronic Discrete Variable Automatic Computer) foi projetado em 1946 pela equipe de JohnMau-chly e John Eckert, que agregou o matemtico John von Neumann32 e tinha como principaiscaractersticas a possibilidade de armazenar um programa em sua memria e de ser um com-putador baseado no sistema binrio. John von Neumann publicou um trabalho33 descrevendouma arquitetura de computadores em que os dados e o programa so mapeados no mesmoespao de endereos. Essa arquitetura, conhecida como arquitetura de von Neumann aindautilizada nos processadores atuais, como por exemplo no Pentium IV.

    Figura 1.8: O EDVAC.

    Nos anos 50, os computadores eram nada populares e pertenciam a algumas poucas uni-versidades e ao governo norte-americano. No incio da dcada, John Eckert e John Mauchlydeixam a Universidade de Pensilvnia por problemas de patenteamento de suas invenes e

    32 Margittai Neumann Jnos Lajos ( ), nascido na ustria-Hungria, matemtico e erudito. John vonNeumann tem muitas contribuies em diversas reas. Na Cincia da Computao, alm da arquitetura de vonNeumann, props os autmatos celulares. Mas, infelizmente, tambm foi um dos cientistas a trabalhar no ProjetoManhatan, responsvel pelo desenvolvimento de armas nucleares, tendo sido responsvel pela escolha dos alvosde Hiroshima e Nagazaki no Japo na Segunda Guerra Mundial, onde explodiriam as primeiras bombas nuclearesda histria e pelo clculo da melhor altura de exploso para que uma maior destruio fosse obtida.

    33 First Draft of a Report on the EDVAC.

    DCT UFMS

    http://en.wikipedia.org/wiki/Edvachttp://en.wikipedia.org/wiki/John_Von_Neumannhttp://en.wikipedia.org/wiki/Manhattan_Projecthttp://en.wikipedia.org/wiki/First_Draft_of_a_Report_on_the_EDVAC

  • 1.2 SCULO XX 10

    fundam sua prpria empresa de computadores, a ECKERT-MAUCHLY COMPUTER CORPORA-TION. Em 1951 projetam o UNIVAC, deUNIVersal Automatic Computer, o primeiro computadoreletrnico comercial produzido em larga escala e que utilizava fita magntica. O primeiro UNI-VAC foi vendido para o escritrio do censo populacional dos Estados Unidos. Mas devido aodomnio da IBM, que em 1955 vendia mais computadores que o UNIVAC, a empresa de JohnEckert e John Mauchly passa por muitas dificuldades at ser fechada e vendida.

    Figura 1.9: Um circuito integrado.

    Em 1955 a BELL LABORATORIES, uma empresa detecnologia fundada em 1925, produz o primeiro compu-tador base de transistores. Os transistores eram me-nores, mais rpidos e aqueciam muito menos que asvlvulas, o que tornava computadores base de tran-sistores muito mais eficientes e confiveis. Em 1957 aIBM anuncia que no usaria mais vlvulas e produz seuprimeiro computador contendo 2.000 transistores. Em1958, descobertas experimentais que mostravam quedispositivos semicondutores podiam substituir as vl-vulas e a possibilidade de produzir tais dispositivo emlarga escala, possibilitaram o surgimento do primeirocircuito integrado, ou microchip, desenvolvido simul-taneamente por Jack Kilby34 da TEXAS INSTRUMENTS e por Robert Noyce35 da FAIRCHILDSEMICONDUCTOR. Um circuito integrado um circuito eletrnico miniaturizado, consistindobasicamente de dispositivos semicondutores, produzido na superfcie de um fino substrato dematerial semicondutor.

    De 1960 a 1980

    Figura 1.10: O primeiro mouse.

    Nos anos 60, as empresas produziam computado-res de grande porte ou mainframes. Esses computado-res eram usados por grandes organizaes para apli-caes massivas, tipicamente para processamento deenormes quantidades de dados tais como censo po-pulacional, estatsticas industriais ou comerciais e pro-cessamento de transaes financeiras. Faz parte desseconjunto a srie IBM 1400 da IBM e a srie UNIVAC1100 da SPERRY-RAND. Naqueles anos, juntamentecom a produo de computadores, dispositivos, perif-ricos e linguagens de programao foram tambm de-senvolvidos, alm de propostas de padronizao des-ses novos recursos. Em 1963, Douglas Engelbart36 in-

    ventou e patenteou o primeiro mouse de computador. No mesmo ano desenvolvido o cdigopadro norte-americano para troca de informaes37 para padronizar a troca de dados entrecomputadores. Em 1967, a IBM cria o primeiro disco flexvel38 para armazenamento de da-

    34 Jack St. Clair Kilby (), nascido nos Estados Unidos, engenheiro eltrico. Ganhador do Prmio Nobelde Fsica em 2000 por sua contribuio na inveno do circuito integrado.

    35 Robert Noyce ( ), nascido nos Estados Unidos, fsico. Tambm conhecido como o Mestre do Valedo Silcio.

    36 Douglas C. Engelbart (), nascido nos Estados Unidos, engenheiro eltrico e inventor.37 Do ingls American Standard Code for Information Interchange ASCII.38 Disquete ou disco flexvel, do ingls floppy disk.

    DCT UFMS

    http://en.wikipedia.org/wiki/UNIVAC_1http://en.wikipedia.org/wiki/IBM_1400_serieshttp://en.wikipedia.org/wiki/UNIVAC_1100/2200_serieshttp://en.wikipedia.org/wiki/Jack_Kilbyhttp://en.wikipedia.org/wiki/Robert_Noycehttp://en.wikipedia.org/wiki/Doug_Engelbart

  • 1.2 SCULO XX 11

    dos. Alm disso, as linguagens de programao BASIC, FORTRAN e COBOL foram propostasnessa dcada. Com o desenvolvimento da indstria de computadores fervilhando, GordonMoore39, atravs de observaes empricas, afirma em 1965 que o nmero de transistores emum circuito integrado duplicaria a cada 24 meses. Essa afirmao fica conhecida depois comoLei de Moore. Em 1968, Gordon Moore e Robert Noyce fundam a INTEL CORPORATION,uma empresa fabricante de processadores. Em 1969, um grupo de ex-executivos da FAIRCHILDSEMICONDUCTOR funda uma empresa de circuitos integrados chamada ADVANCED MICRODEVICES, INC., AMD. Em 1969, a AT&T BELL LABORATORIES desenvolve o Unix, um exce-lente sistema operacional utilizado ainda hoje especialmente em servidores. Entre 1969 e 1970,a primeira impressora matricial e a primeira impressora laser so produzidas.

    Figura 1.11: Mquinas perfuradoras de cartes IBM 26.

    Como j comentamos, os computadores dos anos 60 e 70 eram computadores de grandeporte estabelecidos em rgos governamentais, universidades e algumas grandes empresas.Esses computadores podiam ser programados de duas maneiras distintas. A primeira ma-neira conhecida como compartilhamento de tempo40 onde o computador d a cada usuriouma fatia de tempo de processamento, comportando, naquela poca, 100 usurios ativos si-multaneamente. A segunda maneira chamada de modo de processamento em lote41 ondeo computador d ateno total a um programa, mas no h usurios ativos. O programa, nomomento em que o computador se dispe a process-lo, lido a partir de cartes perfuradosque foram previamente preparados em uma mquina perfuradora de cartes.

    A dcada de 70 tambm foi muito prolfica no desenvolvimento da computao. Lingua-39 Gordon Earle Moore (), nascido nos Estados Unidos, qumico e fsico.40 Do ingls time sharing processing.41 Do ingls batch processing.

    DCT UFMS

    http://en.wikipedia.org/wiki/BASIC#_note-0http://en.wikipedia.org/wiki/Fortranhttp://en.wikipedia.org/wiki/Cobolhttp://en.wikipedia.org/wiki/UNIXhttp://en.wikipedia.org/wiki/Gordon_Moore

  • 1.2 SCULO XX 12

    gens de programao usadas at hoje foram projetadas nessa poca como Pascal, concebida em1971 por Niklaus Wirth42, e C, proposta em 1972 por Dennis Ritchie43. Avanos no projeto dedispositivos tambm foram obtidos. Datam dessa poca o CD44, criado em 1972, o primeiroleitor de discos flexveis, introduzido pela TOSHIBA em 1974, e o primeiro disco flexvel de 51/4 produzido em 1978. Ainda, o ano de 1975 marca o nascimento de uma das maiores emais bem sucedidas empresas do mundo, a MICROSOFT, criada por Bill Gates45 e Paul Allen46.No mesmo ano, Steve Wozniak47 e Steve Jobs48 fundam a APPLE COMPUTERS, tambm umadas maiores empresas fabricantes de computadores do mundo.

    Figura 1.12: Altair 8800.

    Mas nenhum dos avanos dessa poca foi tosignificativo como aquele obtido pela fabricante demicroprocessadores INTEL, que conseguiu colocarum computador inteiro em uma nica pastilhade silcio logo no incio da dcada. Em 1970 a IN-TEL colocou em produo o microprocessador IN-TEL 4004, com barramento de 4 bits, velocidade de108 KHz e 2.300 transistores. A encomenda inicialpartiu da empresa japonesa BUSICOM, que tinha ainteno de utilizar o INTEL 4004 em uma linhade calculadoras cientficas. Porm, o processadormais notvel que foi disponibilizado em seguidapela INTEL foi o INTEL 8080 em 1974, com bar-ramento de 8 bits e velocidade de processamentode 2 MHz. A INTEL vendia esse processador por360 dlares como uma brincadeira com a IBM, jque seu computador de grande porte IBM S/360custava milhes de dlares. Em 1975, o INTEL8080 foi empregado no Altair 8800 da MICRO INS-TRUMENTATION AND TELEMETRY SYSTEMS, con-siderado o primeiro computador pessoal49, tinha1 Kbyte de memria principal e tinha de ser cons-trudo a partir de um kit de peas que chegavampelo correio. Bill Gates, que acabara de ingressarna Universidade de Harvard, largou seus estudospara concentrar esforos na escrita de programaspara esse computador.

    Em 1976, trs computadores pessoais concorrentes so colocados venda. O primeiro com-putador pessoal que j vinha montado pela fbrica, o Apple I, lanado pela APPLE COMPU-TERS. Logo em seguida, em 1977, a APPLE inicia a produo do Apple II, o primeiro computa-dor pessoal com monitor colorido, projetado com o processador 6502 da MOS TECHNOLOGY,de 8 bits de barramento, 1 MHz de velocidade, 4 Mbytes de memria principal e interface de

    42 Niklaus E. Wirth (), nascido na Sua, engenheiro eletrnico e cientista da computao.43 Dennis MacAlistair Ritchie (), nascido nos Estados Unidos, fsico e matemtico.44 Do ingls compact disk.45 William Henry Gates III (), nascido nos Estados Unidos, empresrio.46 Paul Gardner Allen (), nascido nos Estados Unidos, empresrio.47 Stephan Gary Wozniak (), nascido nos Estados Unidos, engenheiro da computao e filantropo.48 Steven Paul Jobs (), nascido nos Estados Unidos, empresrio.49 Do ingls personal computer PC.

    DCT UFMS

    http://en.wikipedia.org/wiki/Pascal_languagehttp://en.wikipedia.org/wiki/C_languagehttp://en.wikipedia.org/wiki/Intel_4004http://en.wikipedia.org/wiki/Intel_8080http://en.wikipedia.org/wiki/IBM_360http://en.wikipedia.org/wiki/Altair_8800http://en.wikipedia.org/wiki/Apple_Ihttp://en.wikipedia.org/wiki/Apple_IIhttp://en.wikipedia.org/wiki/MOS_Technology_6502http://en.wikipedia.org/wiki/Niklaus_Wirthhttp://en.wikipedia.org/wiki/Dennis_Ritchiehttp://en.wikipedia.org/wiki/Bill_Gateshttp://en.wikipedia.org/wiki/Paul_Allenhttp://en.wikipedia.org/wiki/Steve_Wozniakhttp://en.wikipedia.org/wiki/Steve_Jobs

  • 1.2 SCULO XX 13

    udio-cassete para armazenamento e recuperao de dados em fita cassete. Era o computadorpadro empregado na rede de ensino dos Estados Unidos nos anos 80 e 90.

    Figura 1.13: O computador pessoal Apple I.

    Alm do Apple I, um outro computador pessoal que entrou no mercado de computadorespessoais a partir de 1976 foi o TRS-80Model I da TANDY CORPORATION. Esse computador con-tinha ummicroprocessador de 8 bits, o Zilog Z80, de 1,77 MHz de velocidade e tinha memriade 4 Kbytes.

    Tambm em 1976, a INTEL lana o processador INTEL 8086, ainda conhecido como P1, combarramento de 16 bits, velocidade de 5 MHz e 29.000 transistores, que d origem arquiteturade processadores x86. O INTEL 8088 lanado em 1979 baseado no INTEL 8086, mas tembarramento de dados de 8 bits, permitindo compatibilidade com os processadores anteriores.Esse processador foi utilizado como o processador padro da linha de computadores pessoaisda IBM, os IBM PCs, a partir de 1981. J em 1980, a IBM contrata Bill Gates e Paul Allen paradesenvolver um sistema operacional para o IBM PC, que eles denominaram Disk OperatingSystem DOS. O DOS, ou MS-DOS, era um sistema operacional com interface de linha decomandos.

    De 1980 a 2000

    Com o mercado de computadores em contnuo crescimento, os anos 80 tambm foram demuitas inovaes tecnolgicas na rea. O crescimento do nmero de computadores pessoaisnos Estados Unidos nessa poca revela o significado da palavra exploso dos computadores.Para se ter uma idia, em 1983 o nmero de computadores pessoais em uso nos Estados Unidosera de 10 milhes, subindo para 30 milhes em 1986 e chegando a mais de 45 milhes em 1988.Logo em 1982, a APPLE COMPUTERS a primeira empresa fabricante de computadores pessoaisa atingir a marca de 1 bilho de dlares em vendas anuais.

    DCT UFMS

    http://en.wikipedia.org/wiki/TRS-80http://en.wikipedia.org/wiki/Zilog_Z80http://en.wikipedia.org/wiki/Intel_8086http://en.wikipedia.org/wiki/Intel_8088http://en.wikipedia.org/wiki/IBM_PChttp://en.wikipedia.org/wiki/MS_DOS

  • 1.2 SCULO XX 14

    Figura 1.14: O computador pessoal IBM PC.

    Processadores, e conseqentemente os computadores pessoais, foram atualizados a passoslargos. A EPSON CORPORATE HEADQUARTERS, em 1982, introduz no mercado o primeirocomputador pessoal porttil50. Os processadores da famlia x86 286, 386 e 486 foram lanadosgradativamente pela INTEL na dcada de 80 e foram incorporados em computadores pessoaisde diversas marcas. O INTEL 80486, por exemplo, era um processador de 32 bits, 50 MHze 1,2 milhes de transistores. Processadores compatveis com a famlia x86 da INTEL foramproduzidos por outras empresas como IBM, TEXAS INSTRUMENTS, AMD, CYRIX e CHIPS ANDTECHNOLOGIES. Em 1984, a APPLE lana com sucesso estrondoso o primeiro MacIntosh, oprimeiro computador pessoal a usar uma interface grfica para interao entre o usurio e amquina, conhecido como MacOS. O MacIntosh era equipado com o processador 68000 daMOTOROLA de 8 MHz e 128 Kbytes de memria. Uma atualizao com expanso de memriade 1 Mbytes foi feita em 1986 no MacIntosh Plus.

    Os programas tambm evoluram na dcada de 80. O sistema operacional MS-DOS partiugradativamente da verso 1.0 em 1981 e atingiu a verso 4.01 em 1988. Em 1985, o sistemaoperacional Windows 1.0 vendido por 100 dlares pela MICROSOFT em resposta tendnciacrescente de uso das interfaces grficas de usurios popularizadas pelo MacIntosh. Em 1987 oWindows 2.0 disponibilizado. Nessa poca a APPLE trava uma batalha judicial por cpia dedireitos autorais do sistema operacional do MacIntosh contra a MICROSOFT, pelo sistema ope-racional Windows 2.03 de 1988, e a HEWLETT-PACKARD, pelo sistema operacional NewWavede 1989.

    Em 1990 Tim Berners-Lee51 prope um sistema de hipertexto que o primeiro impulso daRedeMundial de Computadores52. O primeiro provedor comercial de linha discada da Internettorna-se ativo em 1991, quando a WWW disponibilizada para o pblico em geral como umaferramenta de busca.

    50 Tambm conhecido como notebook.51 Sir Timothy John Berners-Lee (), nascido na Inglaterra, fsico.52 Do inglsWorld Wide Web WWW.

    DCT UFMS

    http://en.wikipedia.org/wiki/Intel_80286http://en.wikipedia.org/wiki/Intel_80386http://en.wikipedia.org/wiki/Intel_80486DXhttp://en.wikipedia.org/wiki/MacIntoshhttp://en.wikipedia.org/wiki/Mac_OShttp://en.wikipedia.org/wiki/Motorola_68000http://en.wikipedia.org/wiki/Macintosh_Plushttp://en.wikipedia.org/wiki/Windowshttp://en.wikipedia.org/wiki/Tim_Berners-Leehttp://en.wikipedia.org/wiki/World_Wide_Web

  • 1.2 SCULO XX 15

    Figura 1.15: O smbolo do Linux.

    Richard Stallman53, em 1985, escreve o Manifesto GNUque apresenta sua motivao para desenvolver o sistemaoperacional GNU, o primeiro projeto de software livre pro-posto. Desde meados dos anos 90, Stallman tem gastadomuito de seu tempo como um ativista poltico defendendoo software livre, bem como fazendo campanha contra pa-tentes de software e a expanso das leis de direitos au-torais. Os mais destacados programas desenvolvidos porStallman so o GNU Emacs, o GNU Compiler Collection(gcc ) e o GNU Debugger (gdb ). Inspirado pelo Minix, umsistema operacional baseado no Unix voltado para o ensino,Linus Torvalds54 projetou em 1991 um sistema operacionalpara computadores pessoais chamado Linux. O Linux umexemplo de destaque do que chamamos de software livre ede desenvolvimento de cdigo aberto. Seu cdigo fonte, es-crito na linguagem C, disponibilizado para qualquer pessoa usar, modificar e redistribuirlivremente.

    O sistema operacional MS-DOS teve seu fim na dcada de 90, em sua ltima verso co-mercial 6.22, tendo sido completamente substitudo pelo bem sucedido Windows. A verso3.0 do Windows vendeu 3 milhes de cpias em 1990. Em 1992, a verso 3.1 vendeu 1 milhode cpias em apenas 2 meses depois de seu lanamento. J em 1997, aps o lanamento doWindows 95 em 1995, Bill Gates reconhecido como o homem mais rico do mundo. Nessapoca de exploso do uso dos sistemas operacionais da MICROSOFT, os vrus de computadorpassaram a infestar cada vez mais computadores e a impor perdas cada vez maiores de tempo,de recursos e de dinheiro s pessoas e empresas que utilizavam tais sistemas operacionais. Umdos primeiros e mais famosos vrus de computador o Monkey Virus, um vrus de setor deboot descoberto no Canad em 1991, que se espalhou muito rapidamente pelos Estados Uni-dos, Inglaterra e Austrlia. Seguiu-se ao Windows 95 o Windows 98 em 1998 e o Windows MEem 2000.

    A Rede Mundial de Computadores e a Internet tambm mostram um desenvolvimentodestacado nessa poca. O ano de 1993 registra um crescimento espantoso da Internet e 50servidores WWW j so conhecidos at aquele momento. Em 1994, os estudantes de douto-rado em engenharia eltrica da Universidade de Stanford Jerry Yang55 e David Filo56 fundama Yahoo!, uma empresa de servios de Internet que engloba um portal de Internet, uma ferra-menta de busca na Internet, servio de e-mail, entre outros. A Yahoo! obtm grande sucessoentre usurios e em outubro de 2005 sua rede de servios espalhada pelo mundo recebe emmdia 3,4 bilhes de visitas por dia. Em 1994, o World Wide Web Consortium W3C fundadopor Tim Berners-Lee para auxlio no desenvolvimento de protocolos comuns para avaliao daRede Mundial de Computadores. O Wiki foi criado em 1995 pelo Repositrio Padro de Por-tland, nos Estados Unidos, e um banco de dados aberto edio, permitindo que qualquerusurio possa atualizar e adicionar informao, criar novas pginas, etc., na Internet. Nessemesmo ano, a SUN MICROSYSTEMS lana a linguagem de programao orientada a objetosJava, amplamente utilizada hoje em dia para criar aplicaes para a Internet. Os rudimentos

    53 Richard Matthew Stallman (), nascido nos Estados Unidos, fsico, ativista poltico e ativista de software.54 Linus Benedict Torvalds (), nascido na Finlndia, cientista da computao.55 Jerry Chih-Yuan Yang (), nascido em Taiwan, engenheiro eltrico e empresrio.56 David Filo (?), nascido nos Estados Unidos, engenheiro da computao e empresrio.

    DCT UFMS

    http://en.wikipedia.org/wiki/GNU_Manifestohttp://en.wikipedia.org/wiki/GNU_Projecthttp://en.wikipedia.org/wiki/Free_softwarehttp://en.wikipedia.org/wiki/Minixhttp://en.wikipedia.org/wiki/Linuxhttp://en.wikipedia.org/wiki/MS_DOShttp://en.wikipedia.org/wiki/Microsoft_Windowshttp://en.wikipedia.org/wiki/Microsoft_Windowshttp://en.wikipedia.org/wiki/Windows_95http://en.wikipedia.org/wiki/Stoned_virushttp://en.wikipedia.org/wiki/Windows_98http://en.wikipedia.org/wiki/Windows_Mehttp://en.wikipedia.org/wiki/Yahoohttp://www.w3.org/http://en.wikipedia.org/wiki/Wikihttp://java.sun.com/http://en.wikipedia.org/wiki/Richard_Stallmanhttp://en.wikipedia.org/wiki/Linus_Torvaldhttp://en.wikipedia.org/wiki/Jerry_Yanghttp://en.wikipedia.org/wiki/David_Filo

  • 1.2 SCULO XX 16

    da ferramenta de busca Google so desenvolvidos em 1996 como um projeto de pesquisa dosalunos de doutorado Larry Page57 e Sergey Brin58 da Universidade de Stanford. Em 1998 apgina do Google disponibilizada na Internet e, atualmente, a ferramenta de busca maisutilizada na rede. A WebTV tambm disponibilizada em 1996 possibilitando aos usuriosnavegar pela Internet a partir de sua TV.

    Com relao aos dispositivos eletrnicos, o Barramento Serial Universal USB59 padroni-zado em 1995 pela INTEL, COMPAQ, MICROSOFT, entre outras. OUSB um barramento externopadronizado que permite transferncia de dados e capaz de suportar at 127 dispositivos pe-rifricos. Em 1997 o mercado comea a vender uma nova mdia de armazenamento tico dedados, o Disco Verstil Digital DVD60, com as mesmas dimenses do CD, mas codificadoem um formato diferente com densidade muito mais alta, o que permite maior capacidade dearmazenamento. Os DVDs so muito utilizados para armazenar filmes com alta qualidade desom e vdeo. Em 1998 o primeiro tocador de MP3, chamado de MPMan, vendido no Japopela empresa SAEHAN.

    Figura 1.16: Processador Pentium.

    Os processadores tambm foram vendidos co-mo nunca nos anos 90. A INTEL lana em 1993 osucessor do INTEL 486, conhecido como Pentium,ou Pentium I, de 32 bits, 60 MHz e 3,1 milhes detransistores em sua verso bsica. A partir de 1997,a INTEL lana seus processadores seguidamente,ano aps ano. Em 1997 anuncia a venda dos pro-cessadores PentiumMMX e Pentium II. O Celeron produzido a partir de 1998 e em 1999, a INTELanuncia o incio da produo do Pentium III. OPentium IV produzido a partir de 2000 e umprocessador de 32 bits, 1,4 GHz e 42 milhes detransistores. A AMD j produzia microprocessa-dores desde a dcada de 70, mas entrou em forteconcorrncia com a INTEL a partir dessa poca,com o lanamento do K5 em 1995, concorrente doPentium I, de 32 bits, 75MHz e 4,3milhes de tran-sistores em sua primeira verso. Seguiu-se ao K5o K6 em 1997, de 32 bits, 66 MHZ e 8,8 milhes de transistores, e a srie K7 de 1999, que en-globa os processadores Athlon e Duron. A partir da dcada de 90, uma fatia considervel dasfbricas produz computadores pessoais com processadores da INTEL ou da AMD. No incio dadcada de 90, APPLE, IBM e MOTOROLA se unem para projetar o processador PowerPC de 32bits que equipou o PowerMac da APPLE a partir de 1994. A aceitao desse novo computadorno foi como o esperado e, aps um perodo de baixas, a APPLE ressurge em 1998 com o iMac,um computador pessoal com projeto visual arrojado e com a filosofia do tudo-em-um-s. Adcada de 90 marcada pela facilidade de acesso aos computadores pessoais, j que muitosdeles passam a ser vendidos por menos que 1.000 dlares.

    57 Lawrence Edward Page (), nascido nos Estados Unidos, engenheiro da computao e empresrio.58 Sergey Brin (), nascido na Rssia, matemtico, cientista da computao e empresrio.59 Do inglsUniversal Serial Bus.60 Do inglsDigital Versatile Disc.

    DCT UFMS

    http://www.google.comhttp://en.wikipedia.org/wiki/Pentiumhttp://en.wikipedia.org/wiki/Pentium_MMXhttp://en.wikipedia.org/wiki/Pentium_IIhttp://en.wikipedia.org/wiki/Celeronhttp://en.wikipedia.org/wiki/Pentium_IIIhttp://en.wikipedia.org/wiki/Pentium_4http://en.wikipedia.org/wiki/AMD_K5http://en.wikipedia.org/wiki/AMD_K6http://en.wikipedia.org/wiki/AMD_K7http://en.wikipedia.org/wiki/Powerpchttp://en.wikipedia.org/wiki/PowerMachttp://en.wikipedia.org/wiki/Imachttp://en.wikipedia.org/wiki/Lawrence_E._Pagehttp://en.wikipedia.org/wiki/Sergey_Brin

  • 1.2 SCULO XX 17

    De 2000 at hoje

    O ano de 2000 inicia receoso para governos e grandes empresas pelo medo das conseqn-cias potencialmente desastrosas da virada do sculo nos sistemas computacionais, o que sechamou na poca de Bug do Milnio. Alm disso, o juiz Thomas Penfield anuncia a divisodo imprio MICROSOFT em duas companhias e Bill Gates deixa o cargo de Chefe-Executivo daempresa.

    AMICROSOFT lana oWindows XP em 2001 e recentemente oWindows Vista, em janeiro de2007. A APPLE disponibiliza o MacOS X 10.0 em 2001 e seguidas novas atualizaes at 2006,com o MAC OS X 10.5. O Linux tem maior penetrao e aceitao dos usurios de computa-dores pessoais e diversas distribuies so disponibilizadas como Ubuntu, Mandriva Linux,Fedora Core e SUSE Linux. Estas distribuies e os projetos comunitrios Debian e Gentoo,montam e testam os programas antes de disponibilizar sua distribuio. Atualmente, existemcentenas de projetos de distribuio Linux em ativo desenvolvimento, constantemente revi-sando e melhorando suas respectivas distribuies.

    Em 2001 a DELL passa a ser a maior fabricante de computadores pessoais do mundo. Em2002, uma empresa de consultoria norte-americana faz uma estimativa que at aquele anoaproximadamente 1 bilho de computadores pessoais tinham sido vendidos no mundo inteirodesde sua consolidao.

    A INTEL tem investido mais recentemente sua produo em processadores de 64 bits comncleosmltiplos, como por exemplo o Xeon de 2004, o PentiumDde 2005 e o INTELCore Duode 2006. A AMD produz os processadores de 64 bits Duron em 2000 e o Sempron em 2004, am-bos da srie K7, e o Opteron em 2003 da srie K8, este ltimo um processador de dois ncleos,para competir com os processadores de mltiplos ncleos, como o Xeon da INTEL. A APPLE,que vinha utilizando o processador PowerPC em sua linha de iMacs, anuncia que a partir de2006 comear a usar os processadores da INTEL. A verso de 2006 do iMac usa o processadorINTELCore 2 Duo. Na lista dos 500 supercomputadoresmais rpidos domundo, a TOP500, denovembro de 2006, 22,6% dos supercomputadores eram baseados em processadores Opteronda AMD e 21,6% em processadores Xeon da INTEL.

    Figura 1.17: O processador Opteron da AMD.

    DCT UFMS

    http://en.wikipedia.org/wiki/Windows_XPhttp://en.wikipedia.org/wiki/Windows_Vistahttp://en.wikipedia.org/wiki/Mac_OS_Xhttp://en.wikipedia.org/wiki/Mac_OS_Xhttp://www.ubuntu-br.org/http://www.mandriva.com.br/http://fedora.redhat.com/http://www.novell.com/linux/http://www.debian.org/http://www.gentoobr.org/http://en.wikipedia.org/wiki/Xeonhttp://en.wikipedia.org/wiki/Pentium_Dhttp://en.wikipedia.org/wiki/Intel_Core_2http://en.wikipedia.org/wiki/Duronhttp://en.wikipedia.org/wiki/Sempronhttp://en.wikipedia.org/wiki/AMD_K7http://en.wikipedia.org/wiki/Opteronhttp://en.wikipedia.org/wiki/AMD_K8http://en.wikipedia.org/wiki/PowerPChttp://en.wikipedia.org/wiki/Core_2_Duohttp://www.top500.org/

  • 1.2 SCULO XX 18

    Alguns modelos de computadores experimentais e inovadores tm sido propostos, comimplementaes. O computador de DNA, o computador molecular, o computador qumico eo computador quntico so exemplos de propostas recentes e promissoras.

    Exerccios

    1.1 Visite a pgina do Computer History Museum, que contm uma enorme quantidade deinformaes.

    1.2 Escolha um ou dois personagens da pr-histria da computao e leia os verbetes sobreesses personagens na Wikipedia.

    1.3 Leia os verbetes associados s duas mulheres Augusta Ada Byron e Grace Murray Hop-per, que deram origem a muito do que conhecemos como computao.

    1.4 Leia o verbete sobre Alan Mathison Turing, o Pai da Cincia da Computao, na Wiki-pedia.

    1.5 Visite a pgina GNU Operating System e leia o verbete GNU na Wikipedia.

    1.6 Visite as pgina Free Software Foundation e Fundao Software Livre Amrica Latina.

    1.7 Leia o verbete Linux na Wikipedia.

    DCT UFMS

    http://en.wikipedia.org/wiki/DNA_computerhttp://en.wikipedia.org/wiki/Molecular_computerhttp://en.wikipedia.org/wiki/Chemical_computerhttp://en.wikipedia.org/wiki/Quantum_computerhttp://www.computerhistory.org/http://en.wikipedia.org/wiki/Ada_Lovelacehttp://en.wikipedia.org/wiki/Grace_Hopperhttp://en.wikipedia.org/wiki/Alan_Turinghttp://www.gnu.org/http://en.wikipedia.org/wiki/GNUhttp://www.fsf.org/http://www.fsfla.org/svnwiki/http://en.wikipedia.org/wiki/Linux

  • AULA 2

    COMO FUNCIONA UM COMPUTADOR

    Na aula 1 vimos um pequeno histrico sobre os computadores. Nesta aula de hoje, vamosmencionar brevemente como essas mquinas so organizadas internamente. Como veremos,John von Neumann foi o responsvel, em 1945, pelo desenvolvimento de ummodelo1 de com-putador que sobrevive at hoje.

    Este texto baseado principalmente nas referncias [7, 9].

    2.1 Contextualizao

    As primeiras mquinas computacionais projetadas tinham programas fixos. Assim, reali-zavam apenas aquelas tarefas para as quais foram concebidas. Modificar o programa de umadessas mquinas significava reestruturar toda a mquina internamente. Mesmo para compu-tadores como o ENIAC, programar e reprogramar era um processo geralmente laborioso, comuma quantidade enorme de rearranjo de fiao e de cabos de conexo. Dessa forma, podemosdestacar que a programao dos computadores que foram projetados antes do EDVAC tinhauma caracterstica curiosa e comum: a programao por meios externos. Ou seja, os programa-dores, para que essas mquinas executassem seus programas, deviam usar cartes perfurados,fitas perfuradas, cabos de conexo, entre outros. A pequena disponibilidade de memria paraarmazenamento de dados e resultados intermedirios de processamento tambm representavauma outra dificuldade complicadora importante.

    Em 1936, Alan Turing publicou um trabalho [12]2 que descrevia um computador universalterico, conhecido hoje comomquina universal de Turing. Esse computador tinha capacidadeinfinita de armazenamento, onde se poderia armazenar dados e instrues. O termo usado foi ode computador com armazenamento de programas3. Sobre esse mesmo conceito, o engenheiroalemo Konrad Zuse, que projetou a famlia Z de computadores, escreveu um trabalho [15]4

    independentemente em 1936. Tambm de forma independente, John Presper Eckert e JohnMauchly, que projetaram o ENIAC na Universidade da Pensilvnia, propuseram um trabalhoem 1943, conforme meno em [8], sobre o conceito de computadores com armazenamento deprogramas. Em 1944, no projeto do novo computador EDVAC, John Eckert deixou registradoque sua equipe estava propondo uma forma inovadora de armazenamento de dados e progra-mas em um dispositivo de memria enderevel, feito de mercrio, conhecido como linhas deatraso. John von Neumann, tendo trabalhado com a equipe que construiu o ENIAC, juntou-

    1 Veja o verbete von Neumann architecture na Wikipedia.2 Artigo disponvel na seo Bibliografia complementar na pgina da disciplina no Moodle.3 Do ingls stored-program computer.4 Veja mais em The Life and Work of Konrad Zuse, especialmente a parte 10.

    19

    http://en.wikipedia.org/wiki/Von_Neumann_architecturehttp://www.epemag.com/zuse/

  • 2.2 ARQUITETURA DE VON NEUMANN 20

    se tambm s discusses do projeto desse novo computador e ficou responsvel por redigir odocumento com a descrio dessas idias. Com a publicao desse trabalho [13]5, divulgadocontendo apenas seu nome, essa organizao interna de um computador passou a ser conhe-cida como arquitetura de von Neumann, apesar de Turing, Zuse, Eckert e Mauchly teremcontribudo ou j apresentado idias semelhantes. Esse trabalho obteve grande circulao nomeio acadmico e seu sucesso como proposta de implementao de um novo computador foiimediato. At nossos dias, essa organizao ainda usada nos projetos de computadores maisconhecidos.

    2.2 Arquitetura de von Neumann

    As idias publicadas por John von Neumann foram revolucionrias a ponto de estabelecerum novo paradigma de concepo de computadores para a poca e que permanece vlido atos nossos dias. Informalmente, a maneira de organizar os componentes que constituem umcomputador chamada arquitetura do computador. Assim, como a maioria dos computadoresatuais segue o modelo proposto por von Neumann, veremos aqui uma breve descrio daassim chamada arquitetura de von Neumann.

    Nessemodelo, um computador constitudo por trs componentes principais: (i) a unidadecentral de processamento ou UCP6, (ii) a memria e (iii) os dispositivos de entrada e sada.A UCP, por sua vez, composta pela unidade lgico-aritmtica ou ULA e pela unidade decontrole ou UC. Esses trs componentes principais esto conectados e se comunicam atravsde linhas de comunicao conhecidas como barramento do computador.

    Podemos ilustrar a arquitetura de von Neumann como na figura 2.1.

    memria

    UCP

    UC ULA

    entrada sada

    Figura 2.1: Arquitetura de von Neumann.

    A unidade central de processamento responsvel pela execuo das instrues armaze-nadas, tambm chamadas de programa. Atualmente, o termo UCP quase um sinnimo demicroprocessador. Ummicroprocessador a implementao de umaUCP atravs de um nico,

    5 Artigo disponvel na seo Bibliografia complementar na pgina da disciplina no Moodle.6 Do ingls central processing unit CPU.

    DCT UFMS

  • 2.2 ARQUITETURA DE VON NEUMANN 21

    ou de muito poucos, circuitos integrados. Diversos fabricantes disponibilizam microprocessa-dores no mercado, como os Core 2 Duo e Core 2 Quad da Intel e os Phenom X3 triple-core ePhenom X4 quad-core da AMD.

    A unidade central de processamento composta tambm pela unidade lgico-aritmtica epela unidade de controle. A ULA executa dois tipos de operaes: (i) operaes aritmticas,como adies e subtraes, e (ii) operaes lgicas ou de comparao, como por exemplo averificao se um nmero maior ou igual a outro nmero.

    A memria de um computador pode ser vista como uma lista linear de compartimentos ouclulas. Cada compartimento tem um identificador ou endereo numrico e pode armazenaruma certa quantidade pequena de informao. A informao armazenada em um comparti-mento de memria pode ser uma instruo de um programa ou um dado, uma informaoque deve ser processada atravs das instrues. H dois tipos distintos de memria: (i) me-mrias volteis e (ii) memrias no volteis. As memrias do primeiro tipo necessitam deuma fonte de energia para que seu contedo seja mantido. As memrias que permitem acessoaleatrio7 aos seus compartimentos so, em geral, memrias volteis. Esses dispositivos per-mitem acesso rpido informao armazenada, mas so muito mais caros que os dispositivosno volteis de memria. O que em geral chamamos de memria principal de um compu-tador um dispositivo de memria voltil, pois quando desligamos o computador, todas asinformaes armazenadas em seus compartimentos so perdidas. Os dispositivos de armaze-namento de informaes no volteis so aqueles que, ao contrrio dos primeiros, podem retera informao armazenada mesmo sem uma fonte de energia conectada. Como exemplo dessesdispositivos, podemos listar os discos rgidos, discos ticos, fitas magnticas, memrias do tipoflash, memrias hologrficas, entre outros. Pela forma como em geral so implementados, essesdispositivos no permitem que as informaes sejam acessadas rapidamente em um compar-timento qualquer, o que acarreta um tempo maior para busca e recuperao das informaes.No entanto, o custo de produo de tais dispositivos inferior ao custo dos dispositivos dememrias volteis.

    Se enxergarmos um computador como uma caixa-preta que alimentamos com informaese colhemos resultados dessas informaes processadas, podemos associar os seus dispositi-vos de entrada e sada como aqueles que fazem a comunicao do computador com o mundoexterno. Omundo externo pode ser composto por pessoas oumesmo outros computadores. Te-clados, mouses, microfones, cmeras, entre outros, so dispositivos comuns de entrada. Moni-tores e impressoras so dispositivos de sada. Placas de redes so dispositivos tanto de entradacomo de sada de informaes.

    Um computador funciona ento como uma mquina que, a cada passo, carrega uma ins-truo e dados da memria, executa essa instruo sobre esses dados e armazena os resultadosdesse processamento em sua memria. Ento o processo se repete, isto , o computador nova-mente carrega uma prxima instruo e novos dados da memria, executa essa instruo sobreos dados e grava os resultados desse processamento em sua memria. Enquanto existirem ins-trues a serem executadas em um programa, esse processo se repete. Todo computador temum sinal de relgio8 que marca esse passo mencionado, que mais conhecido como ciclo do re-lgio. Dessa forma, o sinal de relgio de um computador usado para coordenar e sincronizaras suas aes.

    7 Do ingls random acess memory RAM.8 Do ingls clock signal.

    DCT UFMS

  • 2.3 ALGORITMOS E PROGRAMAS 22

    Uma outra representao a arquitetura de vonNeumann, mais prxima ao que conhecemoscomo um computador pessoal, pode ser vista na figura 2.2.

    impressora

    mouse

    teclado

    portas

    UCP

    memria

    disco

    placa

    placa

    placa

    placa

    grfica

    de disco

    de som de som

    de rede

    rgido

    DVD-RW

    monitor

    caixas

    internet

    barramento

    Figura 2.2: Uma outra ilustrao da arquitetura de von Neumann.

    2.3 Algoritmos e programas

    H uma certa controvrsia sobre como definir de

    Figura 2.3: Al-Khwarizm.

    maneira formal um algoritmo. Informalmente, pode-mos dizer que um algoritmo uma seqncia precisa,sistemtica e finita de passos ou instrues para so-luo de algum problema. Uma tentativa de forma-lizao do termo teve incio com a tentativa de solu-o do problema Entscheidungsproblem, ou o problemada deciso, proposto por David Hilbert em 1928. Otermo algoritmo tem sua origem no cientista persaAl-Khwarizm9. A latinizao de seu nome para Al-goritmi deu origem ao termo algoritmo em portu-gus e em outras lnguas. O termo algarismo, quesignifica dgito numrico, tambm tem origem em seunome. Suas principais contribuies incluem inova-es importantes na matemtica, em especial em l-gebra e trigonometria. Um de seus mais importanteslivros, Sobre o Clculo com Nmeros Hindus, do anode 825, foi responsvel pela disseminao do sistemahindu de numerao no Oriente Mdio e na Europa.

    9 Mohammad ebne Musa Khwarazm, ( ), nascido na Prsia, matemtico, astrnomo e gegrafo.

    DCT UFMS

    http://en.wikipedia.org/wiki/Algorithm

  • 2.3 ALGORITMOS E PROGRAMAS 23

    Um algoritmo ento um conjunto de idias abstratas para soluo de um problema. Li-damos com algoritmos desde nossa infncia em diversas situaes. Por exemplo, aprendemosno ensino primrio o algoritmo de Euclides para obteno do mximo divisor comum entredois nmeros inteiros. Nesse algoritmo, tomamos dois nmeros inteiros a e b e se b = 0 entoo mximo divisor comum entre a e b o nmero a. Caso contrrio, o mximo divisor comumentre a e b dado pelo mximo divisor comum de b e do resto da diviso de a por b. O processoento se repete at que b seja igual a 0 (zero). importante destacar que esse algoritmo sempreobtm um b = 0 em algum dos passos e, portanto, o algoritmo sempre termina. Alm disso,o algoritmo correto, j que sempre produz uma resposta correta para um par de nmerosinteiros fornecidos como entrada.

    Aps o desenvolvimento de um algoritmo para soluo de algum problema, o prximopasso inform-lo a um computador. No entanto, os computadores no compreendem, e por-tanto so incapazes de obedecerem e executarem, instrues em uma linguagem natural comoo portugus. Dessa forma, precisamos traduzir nosso algoritmo para um programa em umalinguagem de programao escolhida. Uma linguagem de programao uma linguagem ar-tificial projetada para expressar computaes que podem ser executadas por um computador.Dessa forma, um programa projetado em uma linguagem de programao possui uma sintaxee semntica precisas. Alm disso, um programa escrito em uma linguagem de programaopode ser facilmente traduzido para um programa em linguagem de mquina, que nada mais que uma seqncia de dgitos binrios (bits) que representam dados e instrues e que produ-zem o comportamento desejado do computador, em sua arquitetura especfica.

    Em geral, trabalhamos com linguagens de programao chamadas de alto nvel, o quesignifica que so linguagens de programao mais facilmente compreensveis para os seres hu-manos. As linguagens C, C++, Java, PHP, entre outras, so linguagens de programao dealto nvel. Em contraposio, existem linguagens de programao de baixo nvel, que somuito prximas da arquitetura do computador que usamos. A linguagem assembly uma lin-guagem de programao de baixo nvel. Infelizmente, programas escritos em uma linguagemprogramao qualquer no esto prontos para serem executados por um computador. Aindah processos de traduo intermedirios que levam o programa de um ponto compreensvelpor um ser humano e incompreensvel para o computador para o outro extremo, isto , basica-mente incompreensvel pelo ser humano e completamente compreensvel pelo computador esua arquitetura.

    Assim, dado um programa em uma linguagem de programao de alto nvel, usamos umprograma especial, chamado compilador, para efetuar a traduo deste programa para umprograma em linguagem assembly, de baixo nvel e associada ao processador do computadorque ir executar as instrues. Um segundo e ltimo processo de traduo ainda realizado,chamado de montagem, onde h a codificao do programa na linguagem assembly para umprograma em formato binrio, composto por 0s e 1s, e que pode enfim ser executado pelamquina. Um esquema dos passos desde a concepo de um algoritmo at a obteno de umprograma executvel equivalente em um computador mostrado na figura 2.4.

    Modelos conceituais inovadores e alternativos arquitetura de von Neumann tm sidopropostos e alguns deles implementados. O computador de DNA, o computador molecular, ocomputador qumico e o computador quntico so exemplos de propostas recentes e promis-soras.

    DCT UFMS

    http://en.wikipedia.org/wiki/DNA_computerhttp://en.wikipedia.org/wiki/Molecular_computerhttp://en.wikipedia.org/wiki/Chemical_computerhttp://en.wikipedia.org/wiki/Quantum_computer

  • 2.3 ALGORITMOS E PROGRAMAS 24

    programa

    algoritmo

    programao

    programa na

    programa emlinguagem

    linguagemX

    compilao

    assembly

    montagem

    de mquina

    Figura 2.4: Passos desde a concepo de um algoritmo at o programa executvel por umcomputador.

    Exerccios

    2.1 Leia o verbete Computer na Wikipedia.

    2.2 Leia o verbete von Neumann architecture na Wikipedia.

    2.3 D uma olhada no trabalho de John von Neumann na referncia [13]10, sobre a arquite-tura de von Neumann.

    2.4 D uma olhada no trabalho de Alan Turing na referncia [12]11 com a descrio da m-quina de Turing.

    2.5 Visite a pgina sobre a vida e o trabalho de Konrad Zuse.

    2.6 Visite as pginas C History e C Programming Language e leia o verbete C (programminglanguage) na Wikipedia.

    10 Artigo disponvel na seo Bibliografia complementar na pgina da disciplina no Moodle.11 Artigo disponvel na seo Bibliografia complementar na pgina da disciplina no Moodle.

    DCT UFMS

    http://en.wikipedia.org/wiki/Computerhttp://en.wikipedia.org/wiki/Von_Neumann_architecturehttp://www.epemag.com/zuse/http://cm.bell-labs.com/who/dmr/chist.htmlhttp://cprogramminglanguage.net/http://en.wikipedia.org/wiki/C_(programming_language)

  • AULA 3

    DICAS INICIAIS

    Nesta aula aprenderemos dicas importantes sobre as ferramentas que mais usaremos du-rante o desenvolvimento da disciplina. Em particular, veremos a definio de uma interface dosistema operacional (shell ou Unix shell) e aprenderemos a usar alguns dentre os tantos coman-dos disponveis para essa interface, aprenderemos alguns comandos e funes do ambientede trabalho GNU/Emacs e aprenderemos a usar o compilador da linguagem C da coleo decompiladores GNU, o gcc .

    3.1 Interface do sistema operacional

    Podemos definir uma interface de um sistema como um programa que permite a intera-o entre o sistema e seus usurios. Dessa forma, diversos sistemas contm interfaces dessetipo. No entanto, esse termo quase que automaticamente associado aos sistemas operacio-nais, onde uma interface fornecida aos usurios para acesso aos servios do ncleo do sis-tema operacional. As interfaces dos sistemas operacionais so freqentemente usadas com opropsito principal de invocar outros programas, mas tambm possuem outras habilidadesadicionais.

    H em geral dois tipos de interfaces de sistemas operacionais: as interfaces de linhas decomando e as interfaces grficas. Neste curso, usaremos as interfaces de linhas de comandopara solicitar servios e executar certos programas nativos do sistema operacional Linux. Aseguir listamos alguns desses comandos.

    Antes de mais nada, necessrio saber duas coisas sobre o sistema que temos instaladoem nossos laboratrios. Primeiro, devemos saber que o sistema operacional instalado nessescomputadores o Linux. A distribuio escolhida a Debian, verso Lenny. Essa e uma dis-tribuio no comercial e livre do GNU/Linux, isto , uma verso gratuita e de cdigo fonteaberto. O nome Debian vem dos nomes dos seus fundadores, Ian Murdock e de sua esposa,Debra. Diversas distribuies comerciais baseiam-se, ou basearam-se, na distribuio Debian,como Linspire, Xandros, Kurumin, Debian-BR-CDD, Ubuntu e Libranet. A segunda informa-o importante sobre a interface grfica do Linux usada nos laboratrios. A interface grficacompleta do ambiente de trabalho a plataforma GNOME. Essa plataforma um projeto co-laborativo internacional inteiramente baseado em software livre que inclui o desenvolvimentode arcabouos, de seleo de aplicaes para o ambiente de trabalho e o desenvolvimento deprogramas que gerenciam o disparo de aplicaes, manipulao de arquivos, o gerenciamentode janelas e de tarefas. O GNOME faz parte do Projeto GNU e pode ser usado com diversossistemas operacionais do tipo Unix, especialmente aqueles que possuem um ncleo Linux.

    25

    http://en.wikipedia.org/wiki/Shell_(computing)http://en.wikipedia.org/wiki/Unix_shellhttp://www.gnu.org/software/emacs/http://gcc.gnu.org/http://www.debian.orghttp://www.gnome.org/

  • 3.1 INTERFACE DO SISTEMA OPERACIONAL 26

    Isso posto, um dos programas mais comuns disponveis para os usurios do sistema ope-racional GNU/Linux chamado de terminal, como uma abreviao de terminal de linhas decomando, que nada mais que uma interface entre o usurio e o sistema operacional. Paradisparar esse programa no gerenciador de janelas GNOME, selecione a opo Aplicaes domenu principal, depois a opo Acessrios no sub-menu e, em seguida, a opo Terminal.Um exemplo de uma janela de terminal de linhas de comando do GNOME apresentado nafigura 3.1.

    Figura 3.1: Uma interface, ou janela, de linhas de comandos do sistema de janelas GNOME,chamada no computador Homer pelo usurio fhvm .

    Uma janela de linha de comandos possibilita a interao entre o usurio e o computador,intermediada pelo sistema operacional, onde o primeiro solicita tarefas diretamente ao outroe, depois de executadas, recebe seus resultados. Daqui por diante, veremos alguns dos co-mandos e utilitrios que sero mais usados durante o decorrer da disciplina. Alguns deles soapresentam, at certo ponto, algum grau de dificuldade de compreenso neste momento. To-davia, importante ressaltar que todos esses comandos e utilitrios sero muito teis a partirde momentos oportunos, como veremos.

    A seguir, apresentamos a tabela 3.1 contendo os principais comandos e utilitrios do sis-tema operacional, com suas descries breves, os quais mais usaremos no desenvolvimento dadisciplina de Programao de Computadores I. Esta tabela apenas um guia de referncia r-pida e, apesar da maioria dos comandos e utilitrios serem intuitivos e muito fceis de usar, adescrio breve contida na tabela infelizmente no nos ensina de fato como fazer uso correto decada um deles. Tambm no mostra todas as opes de execuo que em geral todo comandoou utilitrio possui.

    DCT UFMS

  • 3.1 INTERFACE DO SISTEMA OPERACIONAL 27

    Dessa forma, para aprender gradativa e corretamente a usar os comandos e utilitrios apre-sentados na tabela 3.1 necessrio: (i) fazer os exerccios ao final desta aula; (ii) usar comfreqncia o utilitrio man ou info , que so interfaces para o manual de referncia dos co-mandos e ferramentas do sistema1. Por exemplo, podemos digitar:

    prompt$ man comando

    ouprompt$ info comando

    onde prompt$ o sinal de pronto do sistema, man e info so utilitrios do sistema ecomando o nome do comando/ferramenta do sistema para o qual informaes do manualsero exibidas; e (iii) usar a opo --help na chamada de um comando/utilitrio. Essa opomostra como us-lo corretamente, listando as opes disponveis. Por exemplo,

    prompt$ man --help

    Comando Descriocat arq mostra o contedo de arq ou da entrada padrocd dir troca o diretrio atual para o diretrio dircmp arq1 arq2 compara arq1 e arq2 byte a bytecp arq1 arq2 copia o arq1 para o arq2cp arq(s) dir copia arq(s) para o diretrio dirdate mostra a data e a hora do sistemadiff arq1 arq2 compara arq1 e arq2 linha a linhaecho args imprime argsenscript arq converte arquivos-texto para PostScript, HTML, RTF, ANSI e outrosfmt arq formata arqgprof arq fornece um perfil de execuo do programa arqindent arq faz a indentao correta de um programa na linguagem C em arqinfo cmd mostra a pgina (mais completa) de manual de cmdls arq(s) lista arq(s)ls dir lista os arquivos no diretrio dir ou no diretrio atualmancmd mostra a pgina de manual de cmdmkdir dir(s) cria diretrio(s) dir(s)mvarq1 arq2 move/renomeia o arq1 para o arq2mvarq(s) dir move arq(s) para o diretrio dirpwd mostra o nome do diretrio atualpr arq converte arq, do tipo texto, para impressorm arq(s) remove arq(s)rmdir dir(s) remove diretrios vazios dir(s)sort arq(s) ordena as linhas de arq(s) ou da entrada padrowc arq(s) conta o nmero de linhas, palavras e caracteres em arq(s) ou na entrada padrowho imprime a identificao do usurio do computador

    Tabela 3.1: Tabela de comandos e utilitrios mais usados.1 Esses manuais tambm podem ser encontrados em pginas da internet, como Manpages e SS64.com.

    DCT UFMS

    http://man.cx/http://www.ss64.com/bash/

  • 3.1 INTERFACE DO SISTEMA OPERACIONAL 28

    Para aumentar a flexibilidade e facilidade na especificao de argumentos de comandos dosistema operacional, podemos usar caracteres especiais de substituio, chamados de coringas.Como veremos, os coringas so muito usados quando os argumentos dos comandos so nomesde arquivos.

    O caractere * (asterisco) um coringa que substitui zero ou mais caracteres. No comandoapresentado a seguir:

    prompt$ ls * .c

    prompt$ o sinal de pronto do sistema, ls um comando que permite listar os arquivosde um diretrio e * .c um argumento desse comando que representa todos os arquivos dodiretrio cujos nomes terminam com os caracteres .c .

    O caractere ? (ponto de interrogao) um outro coringa muito usado como parte deargumentos de comandos, representando exatamente um caractere e que pode ser um caracterequalquer. Por exemplo, no comando abaixo:

    prompt$ ls ???.c

    prompt$ o sinal de pronto do sistema, ls um comando que permite listar os arquivosde um diretrio e ???.c um argumento desse comando que representa todos os arquivosdo diretrio cujos nomes contm exatamente 3 caracteres iniciais quaisquer seguidos peloscaracteres .c .

    Os colchetes [ ] tambm so caracteres coringas muito usados nos argumentos de coman-dos e indicam a substituio de um nico caractere especificado no interior dos colchetes. Noexemplo abaixo:

    prompt$ ls * [abc]

    o argumento * [abc] representa todos os arquivos do diretrio cujos nomes terminam com ocaractere a , b ou c .

    Um intervalo de caracteres pode ser obtido no interior dos colchetes se o caractere - usado. Por exemplo:

    prompt$ ls * [a-z]

    onde o argumento representa os nomes dos arquivos que terminam com uma das 26 letras doalfabeto.

    Por fim, importante destacar que muitos comandos do sistema operacional recebem infor-maes de entrada a partir do terminal e tambm enviam as informaes resultantes de sadapara o terminal de comandos. Um comando em geral l as informaes de entrada de um lo-cal chamado de entrada padro, que pr-definido como o terminal de linha de comandos, eescreve sua sada em um local chamado de sada padro, que tambm pr-definido como oterminal de linhas de comando.

    Por exemplo, o comando sort pode ordenar nomes fornecidos linha a linha por um usu-rio no terminal de comandos, ordenar esses nomes lexicograficamente e apresentar o resultadono terminal de linha de comandos:

    DCT UFMS

  • 3.1 INTERFACE DO SISTEMA OPERACIONAL 29

    prompt$ sort

    ZenaideCarlosGiovanaAmandaCtrl-d

    AmandaCarlosGiovanaZenaideprompt$

    Se dispomos os caracteres > arq ao final de qualquer comando ou utilitrio que normal-mente envia sua sada para a sada padro, ou seja, para o terminal de linha de comandos,o sada desse comando ser escrita para o arquivo com nome arq ao invs do terminal. Porexemplo, a seqncia a seguir:

    prompt$ sort > nomes.txt

    ZenaideCarlosGiovanaAmandaCtrl-d

    prompt$

    faz com que quatro nomes digitados pelo usurio sejam ordenados e, em seguida, armazenadosno arquivo nomes.txt .

    Assim como a sada dos comandos e utilitrios pode ser redirecionada para um arquivo, aentrada tambm pode ser redirecionada a partir de um arquivo. Se, por exemplo, existe umarquivo temp.txt contendo diversos nomes apresentados linha a linha, ento o comando aseguir:

    prompt$ sort < temp.txt

    faz com que todos os nomes contidos no arquivo temp.txt sejam ordenados lexicografica-mente e posteriormente apresentados seguida na sada padro, isto , na janela do terminal delinha de comandos.

    Podemos ainda redirecionar a entrada e a sada de um comando concomitantemente. Porexemplo, o comando:

    prompt$ sort < temp.txt > nomes.txt

    recebe, pelo redirecionamento da entrada, os nomes contidos no arquivo temp.txt , ordena-os lexicograficamente e os armazena em um novo arquivo chamado nomes.txt , devido aoredirecionamento da sada.

    Dessa forma, temos que os smbolos < e > so os smbolos de redirecionamento de en-trada e sada, respectivamente.

    DCT UFMS

  • 3.2 COMPILADOR 30

    3.2 Compilador

    A coleo de compiladores GNU (GCC) , na verdade, um arcabouo de compiladores paradiversas linguagens de programao. Esse sistema foi desenvolvido pelo Projeto GNU e, porter sido adotado como o compilador oficial do sistema operacional GNU, tambm foi adotadocomo compilador padro por muitos dos sistemas operacionais derivados do Unix, tais comoo GNU/Linux, a famlia BSD e o Mac OS X. Alm disso, o GCC tem sido traduzido para umagrande variedade de arquiteturas.

    Richard Stallman desenvolveu a primeira verso do GCC em 1987, como uma extenso deum compilador j existente da linguagem C. Por isso, naquela poca o compilador era conhe-cido como GNUC Compiler. Nomesmo ano, o compilador foi estendido para tambm compilarprogramas na linguagem C++. Depois disso, outras extenses foram incorporadas, como For-tran, Pascal, Objective C, Java e Ada, entre outras. A Fundao para o Software Livre distribuio GCC sob a Licena Geral Pblica (GNU GPL GNU General Public License). O GCC umsoftware livre.

    Um compilador faz o trabalho de traduzir um programa na linguagem C, ou de outra lin-guagemde alto nvel qualquer, para umprograma emuma linguagem intermediria, que aindaser traduzido, ou ligado, para um programa em uma linguagem de mquina. Dessa forma,um argumento bvio que devemos fornecer ao GCC o nome do arquivo que contm umprograma na linguagem C. Alm disso, podemos informar ao compilador um nome que seratribudo ao programa executvel resultante da compilao e ligao. H tambm diversas op-es disponveis para realizar uma compilao personalizada de um programa e que podemser informadas no processo de compilao.

    Ento, o formato geral de compilao de um programa dado a seguir:

    prompt$ gcc programa.c -o executvel -Wall -ansi -pedantic

    onde gcc o programa compilador, programa.c um arquivo com extenso .c que contmum programa fonte na linguagem C, -o uma opo do compilador que permite fornecer umnome ao programa executvel resultante do processo ( executvel ), -Wall uma opo quesolicita que o compilador mostre qualquer mensagemde erro que ocorra durante a compilao,-ansi uma opo que fora o programa fonte a estar escrito de acordo com o padro ANSIda linguagem C e -pedantic uma opo que deixa o compilador muito sensvel a qualquerpossvel erro no programa fonte.

    No momento, ainda no escrevemos um programa na linguagem C e, por isso, no con-seguimos testar o compilador de forma satisfatria. Esta seo ento apenas um guia dereferncia rpida que ser muito usada daqui por diante.

    3.3 Emacs

    Em geral, usamos a palavra Emacs para mencionar um editor/processador de textos, masEmacs , na verdade, o nome de uma classe de editores/processadores que se caracteriza espe-cialmente pela sua extensibilidade. O Emacs tem mais de 1.000 comandos de edio, mais doque qualquer outro editor existente, e ainda permite que um usurio combine esses comandosem macros para automatizao de tarefas. A primeira verso do Emacs foi escrita em 1976

    DCT UFMS

    http://gcc.gnu.org/http://www.stallman.org

  • 3.3 EMACS 31

    por Richard Stallman. A verso mais popular do Emacs o GNU/Emacs, uma parte do Pro-jeto GNU. O GNU/Emacs um editor extensvel, configurvel, auto-documentado e de temporeal. A maior parte do editor escrita na linguagem Emacs Lisp, um dialeto da linguagem deprogramao funcional Lisp.

    O Emacs considerado por muitos especialistas da rea como o editor/processador detextos mais poderoso existente nos dias de hoje. Sua base em Lisp permite que se torne con-figurvel a ponto de se transformar em uma ferramenta de trabalho completa para escritores,analistas e programadores.

    Em modo de edio, o Emacs comporta-se como um editor de texto normal, onde o pressi-onamento de um caractere alfanumrico no teclado provoca a insero do caractere correspon-dente no texto, as setas movimentam o ponto ou cursor de edio, a tecla Backspace removeum caractere, a tecla Insert troca omodo de insero para substituio ou vice-versa, etc. Co-mandos podem ser acionados atravs do pressionamento de uma combinao de teclas, pres-sionando a tecla Ctrl e/ou o Meta/Alt juntamente com uma tecla normal. Todo comandode edio de fato uma chamada de uma funo no ambiente Emacs Lisp. Alguns comandosbsicos so mostrados na tabela 3.2. Observe que a tecla Ctrl representada por C e a teclaAlt por M. Ummanual de referncia rpida est disponvel na bibliografia complementar napgina da disciplina.

    Para carregar o Emacs, podemos usar o menu principal do GNOME e escolher a opo Apli-caes, escolhendo em seguida a opo Acessrios e ento a opo Emacs. Ou ento, de umalinha de comandos, podemos usar:

    prompt$ emacs &

    Vejamos a tabela 3.2, que contm um certo nmero de comandos2 importantes.

    Teclas DescrioC-z minimiza a janela do EmacsC-x C-c finaliza a execuo do EmacsC-x C-f carrega um arquivo no EmacsC-x C-s salva o arquivo atual no discoC-x i insere o contedo de um outro arquivo no arquivo atualC-x C-w salva o contedo do arquivo em um outro arquivo especificadoC-h r carrega o manual do EmacsC-h t mostra um tutorial do EmacsC-g aborta o comando parcialmente informadoC-s busca uma cadeia de caracteres a partir do cursorC-r busca uma cadeia de caracteres antes do cursorM-% interativamente, substitui uma cadeia de caracteres

    Tabela 3.2: Uma pequena tabela de comandos do Emacs.

    importante observar que o Emacs, quando executado em sua interface grfica, tem apossibilidade de executar muitos de seus comandos atravs de botes do menu ou atravs dabarra de menus. No entanto, usurios avanados preferem usar os atalhos de teclado para essetipo de execuo, por terem um acesso mais rpido e mais conveniente depois da memorizaodessas seqncias de teclas.

    2 Veja tambm o carto de referncia do Emacs na seo de bibliografia complementar da disciplina no Moodle.

    DCT UFMS

    http://www.stallman.orghttp://www.gnu.org/software/emacs/

  • 3.3 EMACS 32

    Exerccios

    3.1 Abra um terminal. A partir de seu diretrio inicial, chamado de homepelo sistema ope-racional, faa as seguintes tarefas:

    crie trs diretrios com os seguintes nomes: progi , algodadi e temp ; entre no diretrio progi ; crie trs subdiretrios dentro do diretrio progi com os seguintes nomes: aulas ,

    trabalhos e provas ;

    entre no diretrio aulas ; usando o comando cat e o smbolo de redirecionamento de sada > , crie um ar-

    quivo com nome agenda.txt , que contm linha a linha, nome e telefone de pes-soas. Adicione pelo menos 10 nomes nesse arquivo;

    copie o arquivo agenda.txt para os diretrios algodadi e temp ; verifique o contedo dos diretrios progi/aulas , algodadi e temp ; use o comando sort para ordenar o contedo do arquivo agenda.txt . Execute

    o comando duas vezes: na primeira, use-o visualizando o resultado na tela do com-putador. Na segunda, redirecione a sada desse mesmo comando, criando um novoarquivo com nome agenda-ordenada.txt ;

    verifique o contedo do diretrio; compare os arquivos agenda.txt e agenda-ordenada.txt com os comandos

    cmp e diff ;

    crie um arquivo com nome frase contendo uma frase qualquer, com pelo menos20 caracteres. Da mesma forma como antes, use o comandos cat e o smbolo > deredirecionamento de sada;

    conte o nmero de palavras no arquivo frase usando o comando wc ; neste diretrio, liste todos os arquivos que comeam com a letra a; neste diretrio, liste todos os arquivos que comeam com a letra f ; neste diretrio, liste todos os arquivos que terminam com a seqncia de caracteres

    txt ;

    repita os trs ltimos comandos, usando no entanto o comando echo ; liste todos os arquivos contidos neste diretrio, mas redirecione a sada do comando

    para um arquivo de nome lista ;

    execute o comando ls [afl] * e verifique a sada; execute o comando ls [a-l] * e verifique a sada; execute o comando ls ?g * e verifique a sada; execute o comando ls ?[gr] * e verifique a sada; execute o comando ls ????? e verifique a sada; execute o comando ls .. e verifique a sada; execute o comando ls /progi e verifique a sada; execute o comando ls e verifique a sada;

    DCT UFMS

  • 3.3 EMACS 33

    mova os arquivos cujos nomes tm exatamente 5 caracteres neste diretrio para odiretrio temp ;

    remova o diretrio temp do seu sistema de arquivos; remova todos os arquivos criados at aqui, mantendo apenas os diretrios.

    3.2 Abra o Emacs. Ento, realize as seguintes tarefas:

    digite um texto que resume o que voc aprendeu nas aulas de Programao de Com-putadores I at aqui;

    salve o arquivo no diretrio progi/aulas ; busque as palavras computador , Turing , von Neumann, ENIAC, ls , cp e Emacs

    no seu texto;

    troque a palavra Emacsno seu texto pela palavra GNU/Emacs.

    DCT UFMS

  • AULA 4

    PRIMEIROS PROGRAMAS

    Nesta aula aprenderemos a codificar nossos primeiros programas na linguagem C.

    4.1 Digitando

    Abra o seu Emacs, pressione C-x C-f , digite em seguida um nome para seu primeiroprograma, como por exemplo primeiro.c , e ento digite o seguinte cdigo.

    Programa 4.1: Primeiro programa.

    1 #include

    2 int main(void)

    3 {

    4 printf("Programar bacana!\n");

    5 return 0;

    6 }

    Depois de ter digitado o programa, pressione as teclas C-x C-s para salv-lo em um dire-trio adequado da sua rea de trabalho.

    Na linguagem C, letras minsculas e maisculas so diferentes. Alm disso, em progra-mas na linguagem C no h distino de onde voc inicia a digitao das suas linhas e, assim,usamos essa caracterstica a nosso favor, adicionando espaos em algumas linhas do programapara facilitar sua leitura. Essa adio de espaos em uma linha chamada indentao ou tabu-lao. No Emacs, voc pode usar a tecla Tab para adicionar indentaes de forma adequada.Veremos que a indentao uma prtica de programao muito importante.

    4.2 Compilando e executando

    Abra um terminal onde possa digitar comandos, solicitando ao sistema operacional que osexecute. Ento, compile o programa 4.1 com o compilador gcc:

    prompt$ gcc primeiro.c

    prompt$

    34

    http://www.gnu.org/software/emacs/http://gcc.gnu.org/

  • 4.3 OLHANDO O PRIMEIRO PROGRAMA MAIS DE PERTO 35

    Depois disso, o programa executvel a.out estar disponvel para execuo no mesmodiretrio. Ento s digitar a.out (ou ./a.out ) na linha de comando do terminal para ver oresultado da execuo:

    prompt$ a.out

    Programar bacana!prompt$

    Onome a.out um nome padro que o compilador gcc d aos arquivos executveis resul-tantes de uma compilao. Em geral, atribumos um nome mais significativo a um programaexecutvel, como por exemplo o mesmo nome do programa na linguagem C, mas sem a suaextenso. No exemplo acima, o programa executvel associado tem o nome primeiro . Ocompilador gcc pode gerar um executvel dessa forma como segue:

    prompt$ gcc primeiro.c -o primeiro

    prompt$

    4.3 Olhando o primeiro programa mais de perto

    A primeira linha do nosso primeiro programa

    #include

    ser muito provavelmente includa em todo programa que voc far na linguagem C. Essalinha fornece informaes ao compilador sobre a funo de sada de dados de nome printf ,que usada depois no programa.

    A segunda linha do programa

    int main(void)

    informa ao compilador onde o programa inicia de fato. Em particular, essa linha indica quemain , do ingls principal, o incio do programa principal e, mais que isso, que esse trecho doprograma na verdade uma funo da linguagem C que no recebe valores de entrada ( void )e devolve um valor inteiro ( int ). Esses conceitos de funo, parmetros de entrada de umafuno e valor de sada sero elucidados oportunamente. Por enquanto, devemos memorizarque essa linha indica o incio de nosso programa.

    A prxima linha contm o smbolo abre-chave { que estabelece o incio do bloco de co-mandos do programa. Em seguida, a prxima linha contm uma chamada funo printf :

    printf("Programar bacana!\n");

    Essa funo tem um nico argumento ou parmetro, que a seqncia de smbolos da tabelaASCII printf("Programar bacana!\n"); . Note que todos os smbolos dessa seqnciaso mostrados na sada, a menos de \n , que tem um significado especial quando sua impres-so solicitada por printf : saltar para a prxima linha. A funo printf uma rotina

    DCT UFMS

  • 4.4 PRXIMO PROGRAMA 36

    da biblioteca stdio.h da linguagem C que mostra o seu argumento na sada padro, quegeralmente o monitor.

    Depois disso, adicionamos a linha

    return 0;

    que termina a execuo do programa. Finalmente o smbolo fecha-chave } indica o final dobloco de comandos do programa.

    4.4 Prximo programa

    Vamos digitar um prximo programa.

    Programa 4.2: Segundo programa.

    1 #include

    2 int main(void)

    3 {

    4 int num1, num2, soma;

    5 num1 = 25;

    6 num2 = 30;

    7 soma = num1 + num2;

    8 printf("A soma de %d e %d %d\n", num1, num2, soma);

    9 return 0;

    10 }

    Este exemplo ligeiramente diferente do primeiro e introduz algumas novidades. Agora, aprimeira linha aps a linha que contm o nome da funo main apresenta uma declarao devariveis. Trs variveis do tipo inteiro so declaradas: num1 , num2 e soma . Isso significaque, durante a execuo desse programa, trs compartimentos dememria so reservados pelocomputador para armazenamento de informaes que, neste caso, so nmeros inteiros. Almdisso, a cada compartimento associado um nome: num1 , num2 e soma . Esses comparti-mentos de memria so tambm conhecidos como variveis, j que seu contedo pode variardurante a execuo de um programa.

    Depois disso, na prxima linha do nosso programa temos uma atribuio do valor do tipointeiro 25 para a varivel num1 . Observe ento que o smbolo de atribuio da linguagem C = . Na linha seguinte, uma outra atribuio realizada, do nmero 30 para a varivel num2 .Na prxima linha temos uma atribuio para a varivel soma . No entanto, note que no temosmais um nmero no lado direito da expresso de atribuio, mas sim a expresso aritmticanum1 + num2 . Neste caso, durante a execuo dessa linha do programa, o computador con-sulta o contedo das variveis num1 e num2 , realiza a operao de adio com os dois valoresobtidos dessas variveis e, aps isso, atribui o resultado varivel soma . No nosso exemplo,o resultado da expresso aritmtica 25+ 30, ou seja, o valor 55, ser atribudo varivel soma .A linha seguinte de nosso programa contm uma chamada funo printf , mas agora com

    DCT UFMS

  • 4.5 DOCUMENTAO 37

    quatro argumentos: o primeiro agora uma cadeia de caracteres de formatao, contendo noapenas caracteres a serem impressos na sada, mas smbolos especiais, iniciados com %, co-nhecidos como conversores de tipo da linguagem C. Neste caso, os smbolos %d permitemque um nmero inteiro seja mostrado na sada. Note que trs conversores %d esto contidosna seqncia de smbolos de sada e, a cada um deles e na ordem como so apresentados estassociado uma das variveis num1 , num2 e soma , que so os argumentos restantes da funoprintf .

    4.5 Documentao

    Uma boa documentao de um programa, conforme [4], significa inserir comentrios apro-priados no cdigo de modo a explicar o que cada uma das funes que compem o programafaz. A documentao de uma funo um pequeno manual que d instrues precisas e com-pletas sobre o uso da funo.

    Comentrios so ento introduzidos em programas com o objetivo de document-los e deincrementar a sua legibilidade. O(a) programador(a) responsvel por manter seus cdigoslegveis e bem documentados para que, no futuro, possa retom-los e compreend-los semmuito esforo e sem desperdcio de tempo. Na linguagem C padro, os comentrios so envol-vidos pelos smbolos / * e * / . Um comentrio completamente ignorado quando encontradopelo compilador e, portanto, no faz diferena alguma no programa executvel produzido pelocompilador da linguagem.

    A seguir, mostramos nosso ltimo programa desta aula com comentrios explicativos adi-cionados nos pontos onde so realmente necessrios.

    Programa 4.3: Segundo programa com comentrios explicativos.

    1 #include

    2 / * Esta funo faz a adio de dois nmeros inteiros fixos

    3 e mostra o resultado da operao na sada. * /

    4 int main(void)

    5 {

    6 int num1, num2, soma;

    7 num1 = 25;

    8 num2 = 30;

    9 soma = num1 + num2;

    10 printf("A soma de %d e %d %d\n", num1, num2, soma);

    11 return 0;

    12 }

    Ainda conforme [4], uma boa documentao no se preocupa em explicar como uma funofaz o que faz, mas sim o que ela faz de fato, informando quais so os valores de entrada dafuno, quais so os valores de sada e quais as relaes que esses valores que entram e saemda funo e as transformaes pela funo realiza