Baixe o app para aproveitar ainda mais
Prévia do material em texto
ORGANIZAÇÃO E ARQUITETURA DE COMPUTADORES SUMÁRIO Apresentação Autor 4 5 A informação e sua representação 29 Sistemas de Numeração Conversão entre os Sistemas de Numeração Aritmética Binária UNIDADE 2 6 Organização Estruturada de Computadores Breve história do computador Arquitetura de Computadores Evolução histórica do computador UNIDADE 1 SUMÁRIO Execução de programas 70 Geração de programas executáveis Interpretação Linguagem montadora UNIDADE 4 54 Modelo de von Neumann Modelo de barramento de sistema Sistemas de computação Componentes do computador UNIDADE 3 4 A disciplina Organização e Arquitetura de Computadores tem por objetivo permitir a você conhecer os conceitos básicos de arquitetura de computadores digitais com seus devi- dos componentes elementares, entendendo suas aplicabilidades no mercado de traba- lho, bem como a evolução proporcionada ao longo do tempo. A disciplina está dividida logicamente em quatro unidades distribuídas, e você estudará: • Na Unidade 1, a evolução histórica dos computadores a partir de uma abordagem clara e objetiva. • Na Unidade 2, a informação e sua representação; dessa forma, você irá manipular conversão de bases de sistemas de numeração, aritmética binária e o reconheci- mento de símbolos disponíveis na tabela American Standard Code for Information Interchange — ASCII; • Na Unidade 3, os principais componentes do computador. • Na Unidade 4, a execução de programas, buscando entender o funcionamento de programas executáveis, diferenciando a linguagem interpretada e a linguagem montadora. APRESENTAÇÃO 5 ALFREDO NAZARENO PEREIRA BOENTE Pós-doutorado em Neurociência e Sistemas Lógicos aplicados à Gestão Empresarial, Educação e Pesquisa Experimental pelo HCTE/UFRJ (2014); doutorado em Ciências da Engenharia de Produção pelo Instituto Alberto Luiz Coimbra de Pós-Graduação e Pesquisa de Engenharia – COPPE/UFRJ (2013); doutorado em Processamento de Dados pela AWU-IOWA-USA (2006); mestrado em Administração e Desenvolvimento Empresarial pela Universidade Estácio de Sá – Unesa (2009); mestrado em Ciências da Computação pela Universidad de Habana-CU (2003), mestrado em Engenharia de Software pela AWU-IOWA-USA (2002); especialização em Análise de Sistemas pela Unesa (2000); especialização em Docência Superior pela Universidade Cândido Mendes — Ucam (2001); especialização em Tecnologia em Banco de Dados pela Unesa (2001); especialização em Ciências da Computação pela Universidad de La Habana, em Cuba (2002); especialização em Administração Escolar pela Unesa (2003); especialização em Logística Empresarial pela Faculdade Internacional Signorelli (2016); graduação em Processamento de Dados com ênfase em Projeto e Análise de Sistemas pelas Faculdades Reunidas Professor Nuno Lisboa (1996); graduação em Processos Gerenciais – Gestão Empresarial pela Universidade Veiga de Almeida – UVA (2018). AUTOR Evolução histórica do computador UNIDADE 1 7 Esta unidade é importante para que o estudante conheça a organização estruturada de computador com os seus mais diferentes níveis, buscando uma compreensão acerca da diferença entre computadores analógicos e digitais. O estudante também irá conhecer a história dos computadores e o registro de suas gerações, o que lhe dará base para iniciar o estudo das arquiteturas de computadores RISC e CISC. INTRODUÇÃO Nesta unidade, você será capaz de: • Conceituar a organização e arquiteturas de computadores a partir de uma breve história dos computadores. OBJETIVO 8 Organização Estruturada de Computadores No que tange ao estudo da organização estruturada de computadores, é necessário dei- xar bem claro que aquilo que ora é conveniente para o ser humano não é de mesma forma conveniente para o computador. De certo, o computador não entende a linguagem do ser humano, seja ela utilizada no nosso cotidiano, seja ela utilizada por meio de lingua- gens de programação. O entendimento do computador acerca daquilo que desejamos que seja realizado por ele está em uma esfera bem diferente daquela compreendida pelo ser humano. Dessa forma, observe que se pode classificar como linguagem de alto nível e linguagem de baixo nível o seguinte: É aquela que mais se aproxima do entendimento das pessoas do que do computador. É aquela que mais se aproxima do entendimento da máquina do que do homem. Li ng ua ge m d e ba ix o ní ve l Li ng ua ge m d e al to n ív el Existe o conceito de máquinas de multiníveis contemporâneas que está ligado diretamente à quantidade de níveis de uma máquina. A maioria dos computadores modernos apresenta dois ou mais níveis. Nesse viés, pode-se afirmar que existem máquinas com até seis níveis, conforme ilustra a Figura 1, apresentada a seguir. 9 Figura 1: Computador com seis níveis. Nível 5 Nível 4 Nível 3 Nível 2 Nível 1 Nível 0 Nível de linguagem orientada a problema Tradução (compilador) Tradução (assembler) Interpretação parcial (sistema operacional) Interpretação (microprograma) ou execução direta Hardware Nível de linguagem assembly Nível de máquina do sistema operacional Nível de arquitetura do conjunto de instrução Nível de microarquitetura Nível lógico digital Fonte: Tanenbaum (2013). Vamos conhecer melhor cada um desses níveis? O nível 0, descrito de baixo para cima, é conhecido como nível lógico digital e refere-se ao hardware verdadeiro da máquina cujos circuitos executam programas em linguagem de máquina, ou seja, linguagem de baixo nível. Hardware é a parte física do computador, composta pelos dispositivos eletrônicos e eletromecânicos. No estudo da engenharia elétrica, ainda é apresentado um nível mais abaixo do que o nível 0, tecnicamente conhecido como nível de dispositivo (portanto, está fora do escopo desta disciplina). O nível 1, conhecido como nível de microarquitetura, apresenta uma coleção de 8 a 32 registradores que formam uma memória local e um circuito tecnicamente conhecido como Unidade Lógica e Aritmética – ULA, que é capaz de realizar operações aritméticas simples. Já os registradores estão conectados à ULA para formar os chamados caminhos lógicos de dados, que controlados por um programa conhecido como microprograma, em algumas máquinas, e pelo próprio hardware do computador, em outras. 10 O nível 2, conhecido como nível de arquitetura do conjunto de instrução, também conhecido tecnicamente como Instruction Set Architecture – ISA. Em linhas gerais, os fabricantes de computadores disponibilizam um manual de referência da linguagem de máquina, que se refere ao ISA, ou seja, ao conjunto de instruções executadas pelo hardware do computador. O nível 3, conhecido como nível de máquina do sistema operacional, é o nível no qual suas instruções também são executadas, ou por microprogramas, ou pelo próprio hardware do computador. Nele, algumas instruções são interpretadas pelo sistema operacional e outras diretamente pelo microprograma ou controle de hardware, e não pelo sistema operacional propriamente dito. O nível 4, conhecido como nível de linguagem assembly, refere-se à chamada linguagem montadora que, na realidade, é uma forma simbólica para uma das linguagens subjacentes. Nesse nível, é disponibilizado um método para que as pessoas possam escrever programas para os níveis 1, 2 e 3, que serão em seguida interpretados pelo computador. O programa de software que especificamente realiza tal tradução é tecnicamente denominado assembler. Software é, portanto, a parte lógica do computador, composta pelos programas de computador. O nível 5, conhecido como nível de linguagem orientado a problema, consiste em linguagens projetadas para serem usadas por programadores de aplicações que geralmente têm problemas a resolver. Essas são as chamadas linguagens de alto nível, geralmente traduzidas por compiladores específicos para cada uma delas. Os compiladores são, na verdade, programas de computador que geram um código-objeto a partir de umcódigo-fonte escrito em certa linguagem de computador de alto nível, para que esta seja compreensível pelo computador (baixo nível). Pode-se citar como exemplo de linguagem de alto nível C, C++, Java, PHP, Python, dentre outras. Então, a partir de seus diferentes níveis, o computador é uma máquina capaz de executar uma sequência de instruções que são definidas pelo homem para gerar um determinado resultado, a fim de solucionar dado problema. A essa sequência de instruções, dá-se o nome de algoritmo, o qual pode ser definido por um conjunto de regras expressas por uma sequência lógica finita de instruções que serão executadas pelo computador. 11 Saiba mais Nos microcomputadores, a relação entre arquitetura e organização é muito próxima. As mudanças na tecnologia não apenas influenciam na organização, como também resultam na introdução de arquiteturas mais poderosas e flexíveis. Classificação dos computadores Os computadores podem ser tecnicamente classificados como analógicos ou digitais. Vamos ver as características de cada um deles? Os computadores analógicos não trabalham com números nem com símbolos que representam os números, pois procuram fazer analogias entre quantidades. O ábaco é um exemplo clássico desse tipo de computador (ver Figura 2), uma vez que se utilizava de pequenos carretéis embutidos em um pequeno filete de metal para realizar cálculos. É considerado a máquina de calcular primitiva, pois, segundo Tanenbaum (2013), teve origem provavelmente na Mesopotâmia, há mais de 5.500 anos. Figura 2: Computador Analógico - Ábaco. Figura 3: Computador Analógico - Régua de Cálculo. A régua de cálculo (ver Figura 3) utiliza comprimentos de escalas especialmente calibradas para facilitar a multiplicação, a divisão e outras funções. 12 Portanto, os computadores analógicos representam uma categoria de computadores que se utilizam de eventos elétricos, mecânicos ou hidráulicos para resolver problemas. Charles Babbage foi o inventor da máquina diferencial que era capaz de realizar cálculos polinomiais, baseada no conceito de um computador analógico. Curiosidade A máquina analítica criada por Babbage precisava de software, pois era programável em uma linguagem de montagem simples. Para produzir esse software, Babbage contratou a jovem Ada Augusta Lovelace, filha do famoso poeta britânico Lord Byron. Assim, Ada Lovelace foi a primeira programadora de computadores do mundo. A linguagem de programação ADA teve esse nome em sua homenagem. Figura 4: Computador Digital. Conforme será estudado a seguir, todos os computadores que surgiram, independentemente de sua caracterização por geração, foram baseados na chamada Máquina Universal, que se refere a um dispositivo teórico também conhecido como Máquina de Turing. A Máquina de Turing recebeu esse nome devido ao seu inventor, o matemático, lógico, criptoanalista e cientista da computação britânico, Alan Mathison Turing. O artigo de referência acerca da Máquina de Turing foi publicado em 1936. 13 Curiosidade A história do projeto do desenvolvimento do computador Colossus, durante a Segunda Guerra Mundial, é contada no filme O Jogo da Imitação (2014). Vale a pena assistir ao filme para ter ideia do projeto, do contexto histórico e da influência de Alan Turing. MIDIATECA Acesse a midiateca da Unidade 1 e veja o conteúdo complementar indicado pelo professor sobre Alan Turing. 14 Breve história do computador Caracterizado pela evolução tecnológica, o computador passa de analógico para digital. De certo que essa evolução somente ocorreu graças ao desenvolvimento das tecnologias utilizadas na construção dos computadores. O surgimento dos primeiros computadores digitais, tendo como percursor o computador analógico, permitiu que a classificação dos computadores fosse caracterizada por gerações, a partir das tecnologias que eram utilizadas para sua fabricação. Vamos entender melhor cada uma dessas classificações? Geração zero: computadores mecânicos (1642-1945) A geração zero foi caracterizada pelo uso dos computadores essencialmente analógicos, os quais eram construídos a partir de engrenagens mecânicas e eletromecânicas, cuja operação era realizada de forma lenta, em baixa velocidade, limitando-se, portanto, à resolução de problemas bem específicos (STALLINGS, 2017). Dois exemplos clássicos de computadores dessa geração são a Máquina de Pascal (ver Figura 5) e a Máquina das Diferenças de Babbage (ver Figura 6). Figura 5: Máquina de Pascal. 15 Figura 6: Máquina das Diferenças de Babbage. Figura 7: Válvula. Primeira geração: válvulas (1945-1955) De acordo com Stallings (2017), essa geração de computadores utilizou válvulas (ver Figura 7) para elementos lógicos digitais e memória. Uma série de pesquisas e computadores comerciais foram construídos com válvulas. O estímulo para o computador eletrônico foi a Segunda Guerra Mundial, segundo Tanenbaum (2013). O primeiro computador digital eletrônico dessa geração foi o Eletronic Numeric Integrator and Computer – ENIAC, construído por John Mauchley e John Presper Eckert, inicialmente idealizado em 1943. O ENIAC apresentava, em sua estrutura, 18.000 válvulas e 1.500 relés, pesando 30 toneladas, que consumia na época 140 kw de energia, conforme ilustra a Figura 8. Sua construção somente foi concluída em 1946 com a ajuda de colaboradores, dentre eles, John von Neumman. 16 Figura 8: ENIAC. Figura 9: Máquina Original de Von Neumman. Fonte: Tanenbaum (2013). Em 1949 entrou em operação o Eletronic Delay Storage Automatic Calculator – EDSAC, construído por Maurice Wilkes na Universidade de Cambridge. Nesste mesmo período, John Mauchley e John Presper Eckert começaram a trabalhar no Eletronic Discrete Variable Computer — EDVAC, enquanto John von Neumman foi para o Institute for Advanced Studies, em Princeton, para construir sua própria versão do EDVAC, a chamada Máquina IAS. O primeiro projeto básico descrito por John von Neumman, passou a ser conhecido como Máquina de von Neumman (ver Figura 9), que foi utilizada como arquitetura básica do EDSAC. Memória Entrada Acumulador Saída Unidade de controle Unidade de lógica e aritimética 17 A Máquina de Von Neumman apresentava cinco partes básicas consideradas elementos básicos do sistema computacional: (1) Memória. (2) Unidade de lógica e aritmética. (3) Unidade de controle. (4) Equipamento de entrada. (5) Equipamento de saída. Nos computadores modernos, o “cérebro”, a unidade de lógica e aritmética e a unidade de controle são combinados em um único chip, denominado Central Processing Unit – CPU – (Unidade Central de Processamento). O último computador dessa geração foi o Universal Automatic Computer – UNIVAC, considerado um computador de grande escala, cujo primeiro modelo foi apresentado em 1951. O modelo final da série UNIVAC ocorreu em 1955. Segunda geração: transistores (1955-1965) Stallings (2017) afirma que essa geração de computadores utilizou transistores (ver Figura 10). Foi inventada em 1948, nos Bell Labs, por John Bardeen, Walter Brattain e William Shockley, em substituição às válvulas. Figura 10: Transistor. O primeiro computador transistorizado recebeu o nome de Transistorized Experimental Computer 0 – TX-0 (Computador Transistorizado Experimental 0), tendo sua construção iniciada em 1955 e concluída somente em 1956, um ano depois. Em substituição ao TX-0, 18 surge, em 1961, o Programmed Data Processor-1 – PDP-1 (Processador de Dado Programável), desenvolvido pela empresa Digital Equipament Corporation (DEC). Com isso, surge a indústria de minicomputadores (CORRÊA, 2016). Para refletir Antes do lançamento do PDP-1, os computadores eram tão grandes e caros que poucos tinham acesso a esse tipo de tecnologia. No entanto, nos dias de hoje, a tecnologia é disponível para todos. O PDP-1 foi doado ao Massachusetts Institute of Technology – MIT, onde logo atraiu a atenção de estudantes, professores e pesquisadores. Anosmais tarde, surgiu o PDP-8, uma inovação tecnológica que apresentava um barramento único, o omnibus (ver Figura 11). Figura 11: Barramento omnibus do PDP-8. Fonte: Tanenbaum (2013). CPU Memória Terminal de console E/S de fita de papel Outra E/S Omnibus O autor define barramento como um conjunto de fios paralelos utilizados para conectar os componentes de um computador. Surge o multiprocessamento (capacidade do processador de processar dois ou mais processos simultâneos). Decerto, naquela época, enquanto os projetistas buscavam tornar os hardwares mais baratos (DEC) ou mais rápidos (International Business Machine – IBM e Control Data Corporation – CDC), um grupo de pesquisadores adotou uma linha de ação diferente, pois buscavam construir uma máquina com a intenção de programá-la em linguagem Algol 60, uma precursora da linguagem C e da linguagem Java. Nesse viés, nascia o Burroughs B5000 e a ideia de que o software também era importante. A IBM desenvolve o computador IBM 7094 que, na época, vendeu em larga escala. 19 Terceira geração: circuitos integrados (1965-1980) Segundo Stallings (2017), um transistor isolado, autocontido, é chamado de componente discreto. Os componentes discretos (transistores, resistores, capacitores e assim por diante) eram fabricados separadamente. Imaginava-se, na época, como vários desses componentes discretos poderiam ser unificados em um só componente. Surge então, em 1958, o circuito integrado (ver Figura 12) de silício inventado por Jack Kilby e Robert Noyce, permitindo que dezenas de transistores fossem colocados em um único chip. Figura 12: Circuito integrado. Esse tipo de empacotamento possibilitava a construção de computadores menores, mais rápidos e mais baratos do que seus precursores transistorizados. O parâmetro utilizado para visualização da velocidade do processador é tecnicamente denominado velocidade de clock, que se refere à real velocidade do computador. Naquela época, surgiu a multiprogramação (capacidade de executar dois ou mais programas na memória ao mesmo tempo). Nesse período também foi adotada efetivamente a chamada arquitetura Complex Instruction Set Computer – CISC, capaz de executar centenas de instruções complexas diferentes. A DEC continuava sendo líder de mercado sobre outros fabricantes com o lançamento do PDP-11 que tinha registradores orientados a palavras (word) e uma memória orientada para byte, e ambos ocupavam uma faixa que abrangia uma considerada relação preço/ desempenho (TANENBAUM, 2013). Mais uma vez, a IBM inovou com o lançamento do IBM 360. Quarta geração: microprocessadores (1980-atual) Stallings (2017) afirma que, na década de 1980, surge a Very Large Scale Integration – VLSI (Integração em Escala Muito Grande), que tinha possibilitado colocar, primeiro, dezena de milhares, depois, centena de milhares e, por fim, milhões de transistores em um único chip (ver Figura 13). 20 Figura 13: Chip VLSI. Esse desenvolvimento logo levou a computadores menores e bem mais rápidos. Antes do PDP-1, os computadores eram tão grandes e caros que as empresas e as universidades tinham que ter departamentos especiais denominados centrais de computação para usá-los. Com a chegada do minicomputador, cada departamento podia comprar sua própria máquina. Em 1980, os preços dos computadores caíram tanto que era possível que um indivíduo tivesse seu próprio computador, denominado computador pessoal (Personal Computer – PC). Nessa época, a Intel lança CPUs com microprocessadores modernos e potentes a preços bem competitivos com os de seus concorrentes, entrando fortemente na briga do mercado dos computadores pessoais. Depois disso, surgiram os microcomputadores. Toda essa evolução histórica permite que os computadores sejam apresentados em diferentes portes (grande porte, pequeno porte, minicomputador e microcomputador, por exemplo). Vale ressaltar que: O porte do computador não tem relação direta com o seu tamanho e peso, mas sim com sua capacidade de processamento e armazenamento de dados. Nessa época, a Apple destacava-se com os computadores pessoais, denominados Apple, que, mais tarde, se tornariam o Apple II, projetado por Steve Job e Steve Wozniak. Ao mesmo tempo, hardwares bem sofisticados necessitavam de softwares também sofisticados. 21 Saiba mais O nascimento do mercado de computadores pessoais também gerou o computador portátil. O primeiro deles foi o Osborne-1, que pesava 11 quilos e, na verdade, era mais um computador “arrastável” do que portátil. Ainda assim, comprovava a ideia de que um computador portátil era possível. Fica lançada a ideia para os futuros notebooks, laptops, palmtops, dentre outros. Essa emocionante disputa entre Steve Jobs e Bill Gates está bem detalhada no filme Piratas do Vale do Silício. Surge, então, o IBM-PC, com o sistema operacional MS-DOS, desenvolvido pela Microsoft Corporation, representada por Bill Gates e Paul Allen. Não querendo ficar atrás, a Apple lança o Macintosh, com o sistema operacional Mac OS, próprio para computadores Apple. Importante Em meados de 1980, surge um novo desenvolvimento, denominado Reduced Instruction Set Computer – RISC, em substituição do CISC. Ainda nos anos 1980, a Microsoft desenvolveu o sistema operacional Windows, que passou a ser utilizado em grande parte dos computadores pessoais do mundo inteiro. Quinta geração: computador de baixa potência e invisíveis Tanenbaum (2013) afirma que, em 1981, o governo japonês anunciou que estava planejando gastar 500 milhões de dólares para ajudar empresas a desenvolver computadores de quinta geração que seriam baseados em inteligência artificial e representariam um salto quântico em relação aos computadores “burros” da quarta geração. No entanto, o que caracterizou a quinta geração de computadores foi o encolhimento dos computadores. O primeiro tablet foi lançado em 1989 pela Grid Systems, denominado GridPad. Consistia em uma pequena tela em que os usuários podiam escrever com uma caneta especial para controlar o sistema. 22 Hoje em dia, são projetados computadores “invisíveis”, embutidos em eletrodomésticos, relógios, cartões bancários e diversos outros dispositivos. Esses processadores permitem maior funcionalidade e custos mais baixos em uma ampla variedade de aplicações. Um aspecto peculiar desses computadores embutidos é que o hardware e o software costumam ser projetados em conjunto. Dessa forma entende-se a primeira geração como máquinas de válvulas (por exemplo, o ENIAC), a segunda geração como máquinas de transistores (por exemplo, o IBM 7094), a terceira geração como as primeiras máquinas de circuitos integrados (por exemplo, IBM 360), a quarta geração como computadores pessoais (por exemplo, as CPUs Intel) e a quinta geração reflete, na verdade, mais uma mudança de paradigma do que uma nova arquitetura específica. Em um futuro, não tão distante, computadores estarão espalhados por todas as partes do mundo, embutidos em tudo (computadores, de fato, invisíveis). MIDIATECA Acesse a midiateca da Unidade 1 e veja o conteúdo complementar indicado pelo professor sobre o surgimento da microinformática. 23 Arquitetura de Computadores Nesta última parte da unidade, você irá estudar a arquitetura RISC e a arquitetura CISC, assim como conhecer o pipeline, ou seja, paralelismos e seus tipos. Arquitetura RISC A arquitetura Reduced Instruction Set Computer — RISC (Computador com Conjunto de Instruções Reduzidas), foi criada na década de 1980. Os processadores RISC apresentavam diferenças significativas em relação a outros existentes na época. Uma vez que essas CPUs eram incompatíveis com as outras do mesmo período, conforme afirma Corrêa (2016), seus projetistas tinham liberdade para escolher novos conjuntos de instruções que maximizassem o desempenho total do sistema. Embora a fase inicial estivesse dirigida a instruções simples, que podiam ser executadas rapidamente, logo se percebeu que projetar instruções capazesde ser iniciadas com rapidez era a chave para o bom desempenho dos computadores modernos. Na verdade, o tempo que uma instrução demorava para ser iniciada importava menos do que a quantidade de instruções que podiam ser inicias por segundo. Os processadores RISC caracterizam-se, portanto, por contar com um pequeno conjunto de instruções, as quais fazem o mínimo possível de operações simples. Entretanto, um subconjunto de instruções simples simula as instruções mais complexas, o que torna a programação em RISC mais difícil e demorada que aquela realizada por outros projetos, CISC, por exemplo. Arquitetura CISC A arquitetura Complex Instruction Set Computer — CISC (Computador com Conjunto de Instruções Complexas) apresenta um grande conjunto de instruções simples e complexas. Isso faz com que a programação de computadores, com base nessa arquitetura, seja mais fácil que em computadores com base em outros projetos. Por outro lado, segundo Corrêa (2016), a complexidade do conjunto de instruções torna os circuitos da CPU e da unidade de controle bastante complicados. 24 Houve uma tentativa de criar uma arquitetura mista ora denominada CRISC, que apresentaria tanto as características da arquitetura RISCO como as características da arquitetura CISC. Obviamente, esse foi um caso de insucesso, porém serviu como ideia para que os computadores modernos fossem projetados com as duas arquiteturas, RISC e CISC, mantendo suas características primárias. Curiosidade Um ponto importante a ser considerado no estudo da história dos computadores está na busca contínua da melhoria de desempenho dos computadores, buscando torná-los mais rápidos e eficientes. Nesse viés, o modo de alcançar esse objetivo é tornar os chips mais rápidos, aumentando sua velocidade de clock, independentemente de sua arquitetura, RISC ou CISC. Para tanto, o paralelismo, conhecido tecnicamente como pipeline, é um meio viável de conseguir um desempenho ainda melhor para dada velocidade de clock. Na verdade, paralelismo refere-se à execução de duas ou mais coisas ao mesmo tempo. Veja agora as duas modalidades gerais de paralelismo: O paralelismo é explorado dentro de instruções individuais para obter da máquina mais instruções por segundo. 1. Nível de instrução Várias CPUs trabalham juntas para a solução do mesmo problema, no entanto, cada abordagem tem seus próprios méritos. 2. Nível do processador 25 Saiba mais Os primeiros sistemas de processamento paralelo foram construídos no final dos anos 1960 e tinham somente dois processadores. Os anos de 1970 viram a introdução de supercomputadores com até 32 processadores, e os anos de 1980 trouxeram os primeiros sistemas com mais de 1000 processadores. Finalmente, em 1999, a IBM anunciou a construção de um supercomputador, chamado Blue Gene. Esse computador maciçamente paralelo continha mais de um milhão de processadores, cada qual com sua própria memória. A partir dos computadores com processadores 486, a Intel passou a utilizar tanto a arquitetura RISC como a arquitetura CISC. Dessa forma, a máquina contém um núcleo RISC, que executa as instruções mais simples e um único ciclo do caminho de dados, enquanto interpreta as instruções mais complicadas, mais complexas no modo CISC. MIDIATECA Acesse a midiateca da Unidade 1 e veja o conteúdo complementar indicado pelo professor sobre a evolução da informática. 26 NA PRÁTICA Uma empresa da área de Sistema de Informação foi contratada para dar apoio quanto ao planejamento e gerenciamento da infraestrutura de recursos de informação aos sócios que estavam abrindo um novo escritório. Uma das orientações da empresa da área de Sistema de Informação é que os computadores fossem da Intel. Isso porque a Intel apresenta computadores com processadores da sexta geração. Portanto, são mais rápidos, têm recursos de segurança integrada e também mais compatíveis com o Windows 10. A empresa explicou aos sócios do novo escritório que esses computadores fazem parte da Era Skylake. “Skylake é o nome da microarquitetura com manufatura de 14 nanômetros da Intel, a qual, por sua vez, é o ponto de partida da sexta geração de processadores da empresa. Como é de se esperar de qualquer evolução, a sexta geração dos processadores Intel Core oferece desempenho melhorado e novas experiências com menor consumo de energia. Além disso, ela amplia o leque de designs possíveis para os dispositivos em que estará embarcada: tablets, computer stick, dispositivos 2 em 1, all-in-one com 4K e as novas workstations móveis.” Um exemplo de computador de ponta no mercado está ligado à família do processador Intel Xeon E3, que “passa a equipar também uma série de workstations móveis, enquanto a sexta geração de processadores Intel vPro é voltada para negócios e empresas. Mais de 48 processadores com a Intel Iris e Iris Pro Graphics fazem parte dessa nova geração, que possui foco também na Internet das Coisas. As indústrias de varejo, médica, industrial, vigilância e segurança digital se beneficiam das melhorias dos novos processadores e contam com designs de Internet das Coisas da borda para a nuvem.” Fonte: INTEL. Processadores da sexta geração da Intel são mais rápidos, cheios de recursos de segurança integrada e ainda mais compatíveis com o Windows 10. Inovação Tecnológica, 11 janeiro 2017. 27 Resumo da Unidade 1 Nesta unidade, você conheceu a organização estruturada de computador com os seus mais diferentes níveis. Compreendeu a diferença dos computadores analógicos e digitais, destacando a máquina de calcular primitiva. Aprendeu também a história dos computadores, conhecendo as características de suas gerações, além de ter compreendido as diferenças apontadas nas arquiteturas RISC e CISC. Nesta unidade, destacaram-se os conhecimentos: • Da organização estruturada de computador com os seus mais diferentes níveis, que nos leva à compreensão lógica dos computadores analógicos e digitais. • Do que caracterizou as diversas gerações de computadores, o que nos reporta a um importante marco histórico da própria evolução dos computadores. • Das arquiteturas de computadores, RISC e CISC, que nos conduzem às mais modernas arquiteturas de computadores dos dias atuais. CONCEITO 28 Referências CORRÊA, A. G. D. Organização e Arquitetura de Computadores. São Paulo: Pearson Education do Brasil, 2016. [Biblioteca Virtual] STALLINGS, W. Arquitetura e Organização de Computadores. 10. ed. São Paulo: Pearson Education, 2017. [Biblioteca Virtual] TANENBAUM, A. S. Organização Estruturada de Computadores. 6. ed. São Paulo: Pearson Prentice Hall, 2013. [Biblioteca Virtual] A informação e sua representação UNIDADE 2 30 Esta unidade é importante para que você conheça os sistemas de numeração (decimal, binário, octal e hexadecimal) para a realização das conversões entre os diferentes sistemas de bases de numeração. Você também irá efetuar cálculos elementares com números binários. INTRODUÇÃO OBJETIVO Nesta unidade, você será capaz de: • Fomentar a conversão de bases e suas aplicações dentro do sistema numérico utilizado na linguagem de máquina, tomando como base o sistema binário, visando conhecer a tabela ASCII e suas funcionalidades. 31 Sistemas de Numeração Para uma melhor compreensão dos sistemas de numeração é necessário entendermos alguns conceitos elementares acerca deste estudo. O cerne dos sistemas de numeração é o número ou numeral. Um numeral nada mais é que um símbolo ou grupo de símbolos que representa um número em determinado momento da evolução do ser humano, independentemente da era de referência, dos primórdios aos tempos modernos. Tem-se, portanto, que, em determinada escrita ou época, os numerais diferenciaram-se dos números do mesmo modo que as palavras se diferenciaram das coisas às quais elas se referem. Os símbolos “10”, “dez” e “X” (decem em latim) são numerais distintos que representam o mesmo número, embora escrito de formas diferentese épocas diferentes. Um sistema de numeração, também conhecido como sistema numeral, é um sistema em que um conjunto de números são representados por numerais de uma forma consistente. Pode ser visto como o contexto que permite ao numeral “10” ser interpretado como o numeral binário para dois ou o numeral decimal para dez, por exemplo. Vejamos algumas possíveis representações tomando como base a contagem de 0 a 15 em várias bases numéricas (decimal, binária, octal e hexadecimal): Figura 1. Contagem de 0 a 15. Fonte: Elaborada pelo autor (2019). Base Representação Decimal 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Binária 0 1 10 11 100 101 110 111 1000 1001 1010 1011 1100 1101 1110 1111 Octal 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 Hexadecimal 0 1 2 3 4 5 6 7 8 9 A B C D E F Neste viés, é importante ressaltar que iremos estudar os sistemas de numeração decimal, binário, octal e hexadecimal, sistemas estes que compõem a Tabela ASCII - American Standard Code for Information Interchange (Tabela de Código Padrão Norte-Americano para Intercâmbio de Informações). 32 Curiosidade A tabela de código padrão Norte-Americano para intercâmbio de informações não é nenhuma novidade para quem já trabalha com informática, processamento de dados, principalmente com desenvolvimento de produtos de software. Ela contém os quatro sistemas de numeração mais utilizados por profissionais de Engenharia da Computação, Ciência da Computação, Sistemas de Informação, Engenharia Elétrica, dentre outras. Sistema Decimal Conforme afirma Stallings (2017), no dia a dia utilizamos um sistema baseado em dígitos decimais (0, 1, 2, 3, 4, 5, 6, 7, 8, 9) para a representação de números, e nos referimos a este sistema como sistema decimal. Considere o que o número 83 significa. Ele quer dizer 8 dezenas e mais 3 unidades. Logo: 83 = (8 x 10) + 3 O número 4.728 significa 4 milhares, 7 sentenas, duas dezenas e mais 8 unidades. 4.728 = (4 x 1.000) + (7 x 100) + (2 x 10) + 8 Diz-se, portanto, que o sistema decimal tem uma base ou raiz de 10. Isso quer dizer que cada dígito do número é multiplicado por 10, elevado a uma potência que corresponde à posição do dígito. Assim: 83 = (8 x 10¹) + (3 x 100) 4.728 = (4 x 103) + (7 x 102) + 2 x 10¹) + (8 x 100) Cabe informar que o mesmo princípio é mantido para as frações decimais, para tanto as potências negativas de dez são usadas. Dessa forma a fração decimal 0,256 permanece para 2 décimos mais 5 centésimos mais 6 milésimos. Logo: 0,256 = (2 x 10-1) + (5 x 10-2) + (6 x 10-3) 33 Um número composto tanto pela parte inteira quanto pela parte fracionária tem números elevados tanto para as potências de 10 positivas (parte inteira), quanto para as negativas (parte fracionária). Veja: 442,256 = (4 x 102) + (4 x 101) + (2 x 100) + (2 x 10-1) + (5 x 10-2) + (6 x 10-3) Sabe-se que, em qualquer número, o dígito mais à esquerda é conhecido como dígito mais significativo, pois ele contém o valor mais alto. Em contrapartida, o dígito mais à direita é chamado de dígito menos significativo, pois ele contém o valor mais baixo. No número decimal do exemplo anterior, o número 4 à esquerda é o número mais significativo, e o número 6 à direita é o número menos significativo. Em geral, para a representação decimal de X = { … d2d1d0, d-1d-2d-3 … }, o valor de X é X = ∑ (𝒅𝒊𝒙𝟏𝟎𝒊)𝒊 Sistema Binário De acordo com Corrêa (2016), no sistema binário há apenas dois símbolos ou valores possíveis para os dígitos: 0 e 1. Embora apresente apenas dois números, esse sistema de numeração pode representar qualquer quantidade que possa ser representada em decimal ou em qualquer outro sistema de numeração, como é o caso dos sistemas octal e hexadecimal. Para que isso ocorra com apenas dois algarismos, o sistema binário utiliza um número maior de dígitos que o sistema decimal para expressar determinado valor. Da mesma forma que o sistema decimal, os números são representados dígito a dígito, considerando os dígitos mais significativos e os menos significativos, principalmente quando se trata de números binários fracionários. Vejamos o exemplo a seguir: 1011,1012 = (1 x 2³) + (0 x 2²) + (1 x 2¹) + (1 x 20) + (1 x 2-1) + (0 x 2-2) + (1 x 2-3) 34 Curiosidade No sistema binário, o termo em inglês Binary Digit (dígito binário) é quase sempre abreviado, sendo, portanto, utilizado usualmente o termo bit para designá-lo. Um bit pode assumir dois valores possíveis, 0 e 1. Um conjunto de 8 bits forma tecnicamente o que se chama de byte. Um conjunto de 4 bits é denominado Nibble. Uma Word é composta por um conjunto de 16 bits. Quando o número de bits de uma Word é aumentado, por exemplo, 32 ou 64 bits, temos, portanto, uma Dword (Double Word ou palavra dupla) e uma Qword (Quad Word ou palavra quádrupla), respectivamente. Em geral, para a representação binária do valor de Y = { … b2b1b0,b-1b-2b-3 … }, valor de Y é Y = ∑ (𝒅𝒊𝒙𝟐𝒊)𝒊 Sistema Octal Tanenbaum (2013) afirma que, no sistema octal, existem 8 símbolos ou algarismos possíveis que formam os números desse sistema de numeração. Os números do sistema octal são 0, 1, 2, 3, 4, 5, 6 e 7. Em geral, para a representação octal do valor de W = { … o2o1o0,o-1o-2o-3 … }, valor de W é W = ∑ (𝒅𝒊𝒙𝟖𝒊)𝒊 Sistema Hexadecimal No sistema hexadecimal, segundo Tanenbaum (2013), para os números hexadecimais são necessários 16 dígitos. Dessa forma, precisamos de 6 novos símbolos além dos 10 símbolos já conhecidos do sistema decimal. Por convenção, além dos algarismos de 0 a 9, usa-se letras maiúsculas de A a F para representar os 6 dígitos que aparecem depois do algarismo 9. 35 Os números hexadecimais são, portanto, formados pelos algarismos 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E e F. Em geral, para a representação hexadecimal do valor de Z = { … h2h1h0,h-1h-2h-3 … }, valor de Z é Z = ∑ (𝒅𝒊𝒙𝟏𝟔𝒊)𝒊 Decerto, em todas as fórmulas utilizadas, “B” representa a base do sistema de numeração, “n” representa a quantidade de dígitos disponíveis para a representação dos números, e “a” representa qualquer número. Essa fórmula geral representa um número inteiro. ∑ − − = 1 0 ).( n i i i Bxa Notação Posicional As representações numéricas permitem visualizar o mesmo número em diferentes bases de numeração. Isso é possível devido à conversão de notação das bases numéricas. Observe: Números Decimais: normalmente – somente o numeral -5, 30, 44 Números Binários: numeral com a letra b no final -101b, 11110b, 101100b Número Octal: numeral com um zero à esquerda -05, 036, 054 Número Hexadecimal: numeral com h no final ou 0x na frente do número -5h, 1Eh, 2Ch OU -0x5, 0x1E, 0x2C 36 No estudo dos sistemas de numeração existe a notação posicional que permite calcular a quantidade que um número representa. Por exemplo, que quantidade representa o símbolo 1? Na verdade, dependerá da posição em que ele aparece no número completo. Vamos então considerar o número 1968. Em termos de contagem, o número significa: Milhar 1 Centena 9 Dezena 6 Unidade 8 1 x 1000 + 9 x 100 + 6 x 10 + 8 x 1 Observe que o valor de contagem de cada símbolo depende da posição em que o algarismo se encontre no numeral. MIDIATECA Acesse a midiateca da Unidade 2 e veja o conteúdo complementar indicado pelo professor sobre a Tabela ASCII. 37 Conversão entre os Sistemas de Numeração Conversão de base numérica é o nome dado à passagem da representação de um número de uma base numérica para outra, alterando sua simbologia para se adequar à nova base, sem perder o real valor do número. A base que normalmente usamos é a decimal ou base dez, pois contém dez algarismos, conforme já foi estudado. Iremos, portanto, realizar a operação de conversão de bases entre os sistemas de numeração decimal, binário e hexadecimal. Base Decimal para Base Binária A conversão da base decimal para a binária é bem simples de operacionalizar. Basta pegar o número na base dez e dividi-lo sucessivamente por dois, base dois, até queo quociente seja menor que o divisor. Vamos tomar como exemplo o número 25(10). Qual será o seu correspondente na base 2? Em seguida, para formarmos o número na base binária, basta tomar o número quociente concatenado, sem intervalos, com os demais números encontrados como resto das divisões, de baixo para cima. Então, 25(10) = 11001(2) Vejamos outro exemplo: converter o número 65(10) para X(2). 38 Então, 65(10) = 1000001(2) Base Binária para Base Decimal A conversão de um número da base binária para a base decimal é feita pelo método denominado Método Polinomial. Esse método considera que cada algarismo do número é multiplicado pelo número dois, que corresponde ao número da base binária, elevado a sua respectiva potência, iniciada por 0, até a quantidade de algarismos do número, sempre da direita para a esquerda. Vamos tomar como exemplo o número 101011(2). Qual será o seu correspondente na base dez? Em seguida, soma-se todas as parcelas referentes aos resultados das multiplicações decorridas. Então, teremos: 1 + 2 + 0 + 8 + 0 + 32 = 43 Portanto, 101011(2) = 43(10) Vejamos outro exemplo: Converter o número 1001101(2) para X(10). 39 Somando as parcelas teremos: 1 + 0 + 4 + 8 + 0 + 0 + 64 = 77 Portanto, 1001101(2) = 77(10) Observe que para todos os processos de conversão de base binária para decimal tomou- se apenas números inteiros. O mesmo pode ocorrer utilizando-se números binários fracionários. Veja o exemplo a seguir: Converter o número 1011010,1010(2) para X(10). Somando as parcelas, tanto a parte inteira, quanto a parte fracionária, teremos: 0 + 2 + 0 + 8 +16 + 0 + 64 “,” 0 + 0,125 + 0 + 0,5 = 90,625 Portanto, 1011010,1010(2) = 90,625(10) Vejamos outro exemplo: converter o número 11001,110(2) para X(10). 40 Somando as parcelas, tanto a parte inteira, quanto a parte fracionária, teremos: 1 + 0 + 0 + 8 +16 “,” 0,5 + 0,25 + 0 = 25,75 Portanto, 11001,110(2) = 25,75(10) Base Decimal para Base Hexadecimal A conversão de um número da base decimal para a base hexadecimal acontece quando se toma o número da base dez e divide-se sucessivamente por 16 (base hexadecimal) até que o quociente seja menor que o divisor. Para a formação do número na base hexadecimal, basta tomar o número quociente concatenado, sem intervalos, com os demais números encontrados como resto das divisões, de baixo para cima, respeitando o sistema de numeração da base dezesseis, ou seja, a utilização das letras de A a F, para a complementação do próprio sistema de numeração. Então, 1237(10) corresponde a quanto na base 16? Logo, 1237(10) é igual a 4D5(16), pois 13, na base 16, corresponde à letra D. Vejamos outro exemplo: Conversão do número 894(10) para a base 16. 41 Logo, 894(10) é igual a 37E(16), pois 14, na base 16, corresponde à letra E. Base Hexadecimal para Base Decimal A conversão de um número da base hexadecimal para a base decimal é feita pelo método polinomial, conforme já estudado anteriormente. Então considera-se que cada algarismo do número é multiplicado pelo número 16, que corresponde ao número da base 16, elevado a sua respectiva potência, iniciada por 0 até a quantidade de algarismos do número, sempre da direita para a esquerda. Vamos tomar como exemplo o número A3(16). Qual será o seu correspondente na base 10? Em seguida, soma-se todas as parcelas referentes aos resultados das multiplicações decorridas. Então, teremos: 3 + 160 = 163 Portanto, A3(16) = 163(10) Vejamos outro exemplo: converter o número F15(16) para X(10). Então, teremos: 5 + 16 + 3840 = 3861 Portanto, F15(16) = 3861(10) Base Decimal para Base Octal A conversão de um número da base decimal para a base octal ocorre quando toma-se o número da base dez e divide-se sucessivamente por 8 (base octal) até que o quociente seja menor que o divisor. Também, para a formação do número na base octal, basta tomar 42 o número quociente concatenado, sem intervalos, com os demais números encontrados como resto das divisões, de baixo para cima. Então, 35(10) corresponde a quanto na base octal? Logo, 35(10) é igual a 43(8). Vejamos outro exemplo: Conversão do número 115(10) para a base octal. Logo, 115(10) é igual a 163(8). Base Octal para Base Decimal A conversão de um número da base octal para a base decimal é feita pelo método polinomial, ou seja, considera-se que cada algarismo do número é multiplicado pelo número oito que corresponde ao número da base octal, elevado a sua respectiva potência, iniciada por 0 até a quantidade de algarismos do número, sempre da direita para a esquerda. Vamos tomar como exemplo o número 71263(8). Qual será o seu correspondente na base dez? 43 Em seguida, soma-se todas as parcelas referentes aos resultados das multiplicações decorridas. Então, teremos: 3 + 48 + 128 + 512 + 28672 = 29363(10). Portanto, 71263(8) = 29363(10) Vamos tomar como exemplo o número 171(8). Qual será o seu correspondente na base 10? Então, teremos: 1 + 56 + 64 = 121 Portanto, 171(8) = 121(10) Base Binária para Base Hexadecimal Para a conversão de base binária para a base hexadecimal, basta tomar-se o número da base binária, sempre da direita para a esquerda, separando todos os números em grupo de quatro dígitos (16 <> 24), completando com zeros o grupo da esquerda, quando for necessário. Por exemplo: vamos admitir o número 10010110110(2). Qual o seu equivalente na base 16? Em seguida, concatena-se todos os algarismos correspondentes na base 16, não esquecendo da representação das letras de A até F nesse sistema de numeração. Então, teremos: 4B6, considerando que o grupo de bits que apresentou o resultado 11 será representado pela letra B. Portanto, 10010110110(2) = 4B6(16) Vejamos outro exemplo: converta o número 110010100011(2) para X(16). 44 Logo, 110010100011(2) é igual a CA2(16). Base Binária para Base Octal Para a conversão de base binária para a base octal, basta tomar-se o número da base binária, sempre da direita para a esquerda, separando todos os números em grupo de três dígitos (8 <> 2³), completando com zeros o grupo da esquerda, quando for necessário. Por exemplo: vamos admitir o número 10010110110(2). Qual o seu equivalente na base octal? Em seguida, concatena-se todos os algarismos correspondentes na base octal. Então, teremos: 2266. Portanto, 10010110110(2) = 2266(8) Vejamos outro exemplo: converta o número 101111100(2) para X(16). Logo, 101111100(2) é igual a 574(8). Curiosidade A tabela ASCII - American Standard Code for Information Interchange é um código binário (cadeias de bits [0 e 1]) que codifica um conjunto de 128 sinais: 95 sinais gráficos (letras do alfabeto latino, sinais de pontuação e sinais matemáticos) e 33 sinais de controle, utilizando portanto apenas 7 bits para representar todos os seus símbolos. 45 MIDIATECA Acesse a midiateca da Unidade 2 e veja o conteúdo complementar indicado pelo professor sobre a conversão de base numérica com calculadora. 46 Aritmética Binária Os computadores e as calculadoras digitais realizam várias operações aritméticas com números representados no formato binário (CORRÊA, 2016). Nosso objetivo é realizar as operações aritméticas elementares com números binários: adição, subtração, multiplicação e divisão. Adição A soma de dois números binários é realizada da mesma forma que a adição de números decimais. Em geral, os mesmos passos são seguidos em uma adição binária. Entretanto, apenas quatro casos podem ocorrer na soma de dois dígitos binários em qualquer posição. Estes são os casos: 0 + 0 = 0 1 + 0 = 1 1 + 1 = 10 > 0 + carry de 1 para a próxima posição 1 + 1 + 1 = 11 > 1 + carry de 1 para a próxima posição Esse último caso ocorre quando dois bits de determinada posição estão em nível 1 e há um carry de posição anterior. Vejamos alguns exemplos de adição com binários: a) 011 + 110 = 1001 b) 1001 + 1111 = 11000 47 c) 11,011 + 10,110 = 110,001 Curiosidade Na adição de binários, utiliza-se o que chamamos de tabela-verdade de um meio-somador.Subtração A subtração de dois números binários é realizada da mesma forma que a subtração de números decimais. Em geral, os mesmos passos são seguidos em uma subtração binária. Quando ocorre a subtração de um número com outro de menor parcela, este deverá ter seu valor complementado a partir do número imediatamente à esquerda daquele que estiver sendo operado. Vamos analisar os possíveis casos com binários: 1 – 1 = 0 1 – 0 = 1 0 – 0 = 0 0 – 1 = ? > necessita de um valor de complemento da parcela anterior. 48 Curiosidade Na subtração de binários utiliza-se o que chamamos de tabela-verdade de um meio-diminuidor. Vejamos alguns exemplos: a) 1 – 1 = 0 b) 11 – 10 = 01 c) 110 – 100 = 010 d) 1100 – 1001 = 0011 49 Multiplicação Em comparação à adição e à subtração, a multiplicação é considerada uma operação complexa, seja ela realizada no hardware ou no software. No entanto, sua operação é bem simples, pois todo número multiplicado por 0 é 0 e, todo o número multiplicado por 1 é ele mesmo. Em seguida, somam-se as parcelas intermediárias, também conhecidas como produtos parciais, conforme podemos observar nos exemplos a seguir: a) 1 x 1 = 1 b) 11 x 10 = 110 c) 110 x 100 = 11000 d) 1100 x 1001 = 1101100 50 Divisão A divisão de binário é um pouco mais complexa que a multiplicação, mas é baseada nos mesmos princípios gerais. Então, realiza-se a divisão de forma aritmética crisp, efetuando as adições conforme necessidades da operação, até que se complete toda a operação. Vejamos alguns exemplos: a) 1 ÷ 1 = 1 b) 110 ÷ 10 = 11 c) 11110 ÷ 100 = 111,1 d) 110110 ÷ 110 = 1001 MIDIATECA Acesse a midiateca da Unidade 2 e veja o conteúdo complementar indicado pelo professor sobre binários com vírgula. 51 NA PRÁTICA No dia a dia, cientistas da computação precisam realizar operações elementares por meio da aritmética binária em busca de solução ou confirmação de certo status acerca da arquitetura de computadores, principalmente no que tange ao uso da memória do computador. Neste viés, são apresentadas as seguintes situações de cálculos: a) 101010 + 101101 b) 11001 – 1011 c) 1101 x 1011 d) 110110 ÷ 110 Veja os resultados obtidos nas operações realizadas: 101010 + 101101 = 1010111 11001 – 1011 = 1110 1101 x 1011 = 10001111 110110 ÷ 110 = 1001 52 Resumo da Unidade 2 Nesta unidade, você conheceu os sistemas de numeração decimal, binário, octal e hexadecimal. Transformações ou conversões de números foram realizadas por meio das mudanças de bases a partir dos quatro sistemas de numeração estudados. Além disso, você realizou as operações aritméticas elementares, soma, subtração, multiplicação e divisão, com números binários (aritmética binária). CONCEITO Nesta unidade, destacaram-se as operações elementares: soma, subtração, multiplicação e divisão com números binários (aritmética binária). 53 Referências CORRÊA, A. G. D. Organização e Arquitetura de Computadores. São Paulo: Pearson Education do Brasil, 2016. Disponível na Biblioteca Virtual. STALLINGS, W. Arquitetura e Organização de Computadores. 10. ed. São Paulo: Pearson Education, 2017. Disponível na Biblioteca Virtual. TANENBAUM, A. S. Organização Estruturada de Computadores. 6. ed. São Paulo: Pearson Prentice Hall, 2013. Disponível na Biblioteca Virtual. Componentes do computador UNIDADE 3 55 Nesta unidade, você conhecerá os conceitos de arquitetura de computador, seus periféricos e a relação de entrada e saída por meio da apresentação dos modelos de von Neumann e de barramento de sistema. Além disso, você será capaz de identificar as partes integrantes do sistema de computação. INTRODUÇÃO OBJETIVO Nesta unidade, você será capaz de: • Conhecer os conceitos de arquitetura de computador, seus periféricos e a relação de entrada e saída. 56 Modelo de von Neumann O modelo de von Neumann recebeu esse nome em homenagem ao matemático John von Neumann, que você pode observar na Figura 1, considerado o criador dos computadores da forma como são projetados até os dias atuais. Fonte: wikipedia.org John von Neumann. Figura 1 - Modelo de von Neumann. Fonte: Tanenbaum (2013). Como surgiu esse modelo? A ideia do modelo surgiu da necessidade de armazenar programas em um computador, pois, até então, ainda não havia formas de realizar isso. Von Neumann e outros pesquisadores descobriram que, utilizando dispositivos de memória em formas de linha de retardo de mercúrio, poderiam armazenar instruções de programas. Memória Entrada Saída Unidade de controle Acumulador Unidade de lógica e aritimética A proposta inicial de um computador de programa armazenado, denominado IAS (Princeton Institute for Advanced Studies), foi relatada pelo próprio von Neumann. Ele era composto da seguinte forma: https://pt.wikipedia.org/wiki/John_von_Neumann. 57 • Central Arithmetic (CA): o dispositivo deve realizar as operações elementares da aritmética mais frequentemente e, por esse motivo, precisa ter unidades especializadas apenas para essas operações. • Control Center (CC): a sequenciação apropriada das operações pode ser executada, de forma mais eficiente, por um controle central. • Memória (M): qualquer dispositivo que tiver de executar longas e complicadas sequências de operações precisa ter uma memória considerável. • Recording (R): deve ser capaz de manter contato de entrada e saída, que são os neurônios correspondentes sensoriais e motores do cérebro humano. • Input (I): é necessário ter unidades para transferência de informações de R para M. • Output (O): é necessário ter unidades para transferência de informações de M para R. O modelo de von Neumann, de acordo com Stallings (2017), é uma arquitetura de computador que se caracteriza pela possibilidade de uma máquina digital armazenar seus programas no mesmo espaço de memória em que os dados, podendo assim manipular tais programas. Essa arquitetura é um projeto-modelo de um computador digital de programa armazenado que utiliza uma unidade de processamento (CPU) e uma de armazenamento (“memória”) para comportar, respectivamente, instruções e dados. Veja, a seguir, os componentes reunidos na máquina proposta por von Neumann: • Memória. • Unidade aritmética e lógica. • Unidade central de processamento. • Unidade de controle. Qual é a função dessa máquina? A função é a mesma da tabela de controle da máquina de Turing universal, ou seja, buscar um programa na memória, instrução por instrução, e executá-lo sobre os dados de entrada. Todos os elementos dessa arquitetura são alinhados da estrutura hardware do CPU, assim o sistema pode realizar todas as suas atividades sem apresentar erros no desempenho. 58 MIDIATECA Acesse a midiateca da Unidade 3 e veja o conteúdo complementar indicado pelo professor sobre arquitetura de von Neumann. 59 Modelo de barramento de sistema O modelo de barramento de sistema representa um caminho de comunicação que conecta dois ou mais equipamentos tecnicamente denominado barramento de sistema (bus), conforme ilustra a Figura 2, apresentando também um barramento de dados, um de endereços e um de controle. Algumas arquiteturas em particular apresentam um barramento de entrada e saída separado dos demais barramentos. Figura 2 - Modelo de barramento de sistema. Fonte: Corrêa (2013). CPU (ALU, registradores e controle) Memória principal Entrada e saída E/S Nesse modelo, cada barramento é composto por um conjunto de fios interligando os componentes do sistema. Por exemplo, ao nos referirmos a um sistema de 32 bits no barramento de dados, isso quer dizer que existem 32 fios para transmitir dados, e eles estão interligando todas as unidades do computador. Conforme afirma Tanenbaum (2013), um computador moderno tem, normalmente, três barramentos: 60 1. Barramento de dados: para transmitir dados. 2. Barramento de endereços: para identificar onde o dado deve ser lido/escrito (endereço de memória). 3. Barramento de controle: para coordenar o acessoaos barramentos de dados e endereços para que não ocorram conflitos. No modelo de barramento, o acesso a dispositivos pode ser realizado de duas maneiras (TANENBAUM, 2013): • Existem arquiteturas que exigem que os dispositivos sejam mapeados em memória. Dessa forma, ocorre que: • Para enviar uma informação a um dispositivo desse tipo, a CPU deve escrever em um (ou mais) endereço de memória específico. • Para receber informações do dispositivo, a CPU deve ler um (ou mais) endereço de memória específico. • Há também arquiteturas que são mais flexíveis e possuem dois tipos de endereçamento: • Endereçamento de memória. • Endereçamento de entrada e saída (E/S). • Nesse caso, os dispositivos podem tanto ser mapeados em memória como em portas de E/S. O uso de mapeamento de dispositivos em portas de E/S permite que todo o endereçamento de memória esteja disponível, efetivamente, para o acesso a ela. 1 2 MIDIATECA Acesse a midiateca da Unidade 3 e veja o conteúdo complementar indicado pelo professor sobre periféricos — dispositivos de entrada e saída. 61 Sistemas de computação Um computador digital consiste em um sistema interconectado de processadores, memória e dispositivos de entrada/saída (TANENBAUM, 2013). Nesta última parte desta unidade, você verá uma introdução sobre esses três componentes e sua interconexão, e sua importância para sistemas de computação. Processadores A organização de um computador simples com barramento é ilustrada na Figura 3. A CPU (Central Processing Unit – Unidade de Processamento Central) é o “cérebro” do computador. E qual é sua função? Sua função é executar programas armazenados na memória principal, buscando suas instruções, examinando-as e, então, executando-as uma após a outra. Os componentes do computador são conectados por um barramento, conjunto de fios paralelos que transmitem endereços, dados e sinais de controle. Barramentos podem ser externos à CPU, conectando-a à memória e aos dispositivos de entrada/saída, mas também podem ser internos. Os computadores modernos possuem diversos barramentos. Figura 3 - Organização de um computador simples. Fonte: Tanenbaum (2013). Unidade de controle Barramento Dispositivos de E/S Unidade central de processamento (CPU) Unidade de lógica e aritimética (ULA) Registradores Memória Principal Disco Impressora 62 Vamos entender melhor a CPU? A CPU é composta de diversas partes distintas. A unidade de controle é responsável por buscar instruções na memória principal e determinar seu tipo. Já a unidade de aritmética e lógica efetua operações de cálculos e processamentos lógicos. A CPU também contém uma pequena memória de alta velocidade usada para armazenar resultados temporários e realizar alguns controles de informações. Essa memória é composta de uma quantidade de registradores, cada um deles com determinados tamanho e função — em geral, eles apresentam o mesmo tamanho. Registradores podem ser lidos e escritos em alta velocidade porque são internos à CPU. O registrador mais importante é o contador de programas (PC – Program Counter), que indica a próxima instrução a ser executada. Com tamanha importância, também é o registrador de instrução (IR – Instruction Register) que retém a instrução que está sendo executada naquele exato momento. A maioria dos computadores também possui diversos outros registradores, alguns de uso geral e outros de uso específico. A organização interna de parte de uma típica CPU baseada no modelo de von Neumann está ilustrada na Figura 4. Figura 4 - Caminho de dados de uma típica máquina de von Neumann. Fonte: Tanenbaum (2013). A+B A B Registradores Registradores de entrada do ULA Registrador de saída do ULA Barramento de entrada do ULA ULA A+B A B 63 Essa parte é tecnicamente denominada “caminho de dados” e é composta por registradores, unidade de aritmética e lógica e por diversos barramentos que conectam as partes. Os registradores alimentam dois registradores de entrada da ULA, representados por A e B na Figura 4. O caminho de dados é extremamente importante para todas as máquinas. A ULA efetua adição, subtração e outras operações simples sobre suas entradas, produzindo dessa forma um resultado no registrado de saída, o qual pode ser armazenado em um registrador. Conforme afirma Tanenbaum (2013, p. 44-45), a CPU registra cada instrução em uma série de pequenas etapas: 1. Trazer a próxima instrução da memória até o registrador de instrução. 2. Alterar o contador de programa para que aponte para a próxima instrução. 3. Determinar o tipo de instrução trazida. 4. Se a instrução usar uma palavra de memória (Word), determinar onde esta palavra está. 5. Trazer a palavra para dentro de um registrador da CPU se necessário for. 6. Executar a instrução. 7. Voltar à etapa 1 para iniciar a execução da instrução seguinte. Tal sequência de etapas costuma ser determinada pelo ciclo buscar–decodificar– executar, que é fundamental para a operação de todos os computadores. Memória principal A memória é a parte do computador na qual são armazenados os programas e os dados. De acordo com Tanenbaum (2013), alguns cientistas da computação usam o termo “armazém”, ou “armazenagem”, em vez de “memória”, se bem que “armazenagem” está sendo cada vez mais usado para armazenagem em disco. Sem uma memória a partir da qual os processadores possam ler e na qual possam gravar ou escrever informações, não haveria computadores digitais com programas armazenados. A memória principal também pode ser chamada de memória real ou primária. Vamos, agora, compreender como funcionam as memórias? Historicamente, as CPUs sempre foram mais rápidas que as memórias (TANENBAUM, 2013). À medida que fica possível colocar cada vez mais circuitos em um chip, os projetistas estão usando essas novas facilidades no paralelismo (pipelining) e em operações 64 superescalares, fazendo com que as CPUs fiquem mais velozes. Nesse contexto, segundo Stallings (2017), surgiu uma memória pequena e rápida denominada tecnicamente como “cache”. A ideia básica de um cache é bem simples: as palavras (word) de memória usadas com mais frequência são mantidas no cache; quando a CPU precisa de uma palavra, ela examina em primeiro lugar a cache; então, somente se a palavra não estiver ali é que ela recorrerá à memória principal. Memória secundária Seja qual for o tamanho da memória principal, ela sempre será considerada muito pequena. As pessoas sempre querem armazenar mais informações do que a memória pode conter, ainda mais porque, à medida que a tecnologia melhora, elas começam a pensar em armazenar coisas que antes estavam inteiramente no reino da ficção científica (CORRÊA, 2016). Para tanto surgem as memórias secundárias, também conhecidas como memória de massa ou auxiliar, cujo objetivo é auxiliar no armazenamento de dados. Veja, a seguir, alguns exemplos de memórias secundárias: • Disco magnético. • Unidades de fita magnética. • Hard disk (HD). • Compact-disc (CD). • Digital versatile disc (DVD). • Pen drive. Entrada/Saída De acordo com Tanenbaum (2013), um sistema de computador é formado por três componentes principais. Vamos conhecê-los? 65 CPU Memórias (primária e secundária) Equipamentos de entrada/saída (E/S), ou input/output (I/O), como impressoras, escâneres e modens. 1 2 3 Vale ressaltar que a maioria dos computadores pessoais e estações de trabalho apresenta placa-mãe que contém um chip da CPU e diversos outros chips de suporte. Ela contém, também, um barramento ao longo do comprimento e soquetes nos quais os conectores de borda das placas de E/S podem ser inseridos. A estrutura lógica de um computador pessoal simples é ilustrada na Figura 5. Esse computador tem um único barramento para conectar a CPU, a memória e os equipamentos de entrada/saída, enquanto a maioria dos sistemas tem dois ou mais barramentos. Cada dispositivo de entrada/saída consiste em duas seções: uma que contém grande parte da eletrônica,denominada “controlador”, e outra que contém o dispositivo de entrada/saída em si, tal como um drive de disco. Figura 5 - Estrutura lógica de um computador pessoal simples. Fonte: Tanenbaum (2013). CPU Barramento Memória Controlador de vídeo Controlador de teclado Controlador de cd-rom Controlador de disco rígido 66 O controlador está, em geral, contido em uma placa que é ligada em um encaixe livre. Mesmo o monitor não sendo um dispositivo opcional, o controlador de vídeo às vezes está localizado em uma placa de encaixe do tipo plug-in para permitir que o usuário escolha entre placas, como uma sem acelerador gráfico, por exemplo. Exemplo Vamos conferir alguns exemplos? São dispositivos de: • Entrada: teclado, mouse, escâner, webcam etc. • Saída: monitor de vídeo, impressora, plotador, caixa de som etc. • Entrada/saída: leitor/gravador de CD/DVD, pen drive etc. MIDIATECA Acesse a midiateca da Unidade 3 e veja o conteúdo complementar indicado pelo professor sobre os principais componentes de um computador pessoal (PC – Personal Computer). 67 NA PRÁTICA Os processadores Intel® Core™ da 9ª Geração levam o desempenho dos PCs tradicionais a um patamar inteiramente novo, e, no topo, a gigante Intel apresenta seu principal produto tradicional, o novo i9-9900K. Qual foi o primeiro processador Intel caracterizado de 9ª geração? Como resposta, a Intel apresenta o processador Intel® Core™ i9 desktop para usuários tradicionais. O melhor de sua categoria, o i9-9900K, com 16 MB de cache e tecnologia Intel® Turbo Boost 2.0, aciona o máximo em frequência turbo de até incríveis 5,0 GHz. Acrescente a isso suporte à multitarefa em 16 vias de alto desempenho acionado por 8 núcleos com Tecnologia Intel® Hyper-Threading (Tecnologia Intel® HT) para vencer as cargas de trabalho mais exigentes. 68 Resumo da Unidade 3 Nesta unidade, você conheceu compreendeu os modelos de von Neumann e de barramento de sistema, necessários para as arquiteturas de computadores digitais. Você estudou, também, o sistema de computação, enfatizando suas partes principais, como processadores, memórias e dispositivos de entrada/saída. CONCEITO Os computadores digitais apresentam uma arquitetura baseada no modelo de von Neumann, que nada mais é que uma arquitetura de computador que se caracteriza pela possibilidade de uma máquina digital armazenar seus programas no mesmo espaço de memória em que os dados, podendo dessa forma manipular tais programas. Os computadores de hoje em dia apresentam processadores superpotentes. 69 Referências CORRÊA, A. G. D. Organização e arquitetura de computadores. São Paulo: Pearson Education do Brasil, 2016. Disponível na Biblioteca Virtual. STALLINGS, W. Arquitetura e organização de computadores. 10. ed. São Paulo: Pearson Education, 2017. Disponível na Biblioteca Virtual. TANENBAUM, A. S. Organização estruturada de computadores. 6. ed. São Paulo: Pearson Prentice Hall, 2013. Disponível na Biblioteca Virtual. Execução de programas UNIDADE 4 71 Nesta unidade, você irá conhecer como a arquitetura de computadores reconhece os programas que são executados na memória do computador. Também irá aprender a diferença inerente aos processos de compilação e interpretação de programas, além de compreender a linguagem montadora e seus princípios. INTRODUÇÃO OBJETIVO Nesta unidade, você será capaz de: • Entender o funcionamento de programas executáveis a partir da visão da arquitetura de computadores, assim como a diferença entre linguagem interpretada e linguagem montadora. 72 Geração de programas executáveis Antes mesmo de falarmos na geração de programas executáveis, precisamos saber que a unidade de processamento central – CPU executa cada instrução em uma série de pe- quenas etapas. Tal sequência de etapas costuma ser denominada ciclo buscar-decodi- ficar-executar, independentemente da arquitetura do computador (TANENBAUM, 2013). Os computadores e suas arquiteturas utilizam programas para realizar o processamento de dados. Um programa nada mais é que um conjunto de instruções cuja função é gerar dados de saída a partir de dados de entrada (CORRÊA, 2016). Como já sabemos, para executar as instruções do programa, a CPU utiliza ciclos de máquina, ora denominado ciclo buscar-decodificar-executar. Veja, abaixo, as fases que compõem esse ciclo de máquina: 1. Busca 2. Decodificação 3. Execução O sistema copia a próxima instrução no registrador de instrução da CPU. O endereço da instrução a ser copiada permanece no registrador denominado contador de programa (program counter). A unidade de controle decodifica a instrução quando ela está no registrador de instrução (instruction register). Dessa etapa, resulta o código binário para uma operação que o sistema vai realizar. A ordem da tarefa é enviada pela unidade de controle para um componente da CPU. Esse componente recebe e executa a instrução ou tarefa 73 Figura 1 – Etapas de um ciclo de máquina. Fonte: Corrêa (2016). O ciclo de execução de programas executáveis apresenta uma equivalência entre processadores. Tal equivalência, que envolve hardware e interpretadores, tem importante implicações para a organização de computadores e para o projeto de sistemas de computadores. Um programa executável é aquele cujo código-fonte produzido por uma linguagem de programação já tenha sido convertido em código executável. Segundo Stallings (2017), o compilador é um programa que converte outro programa de uma linguagem-fonte, tecnicamente conhecida como linguagem de programação, para linguagem de máquina, ora classificada como código-objeto. Alguns compiladores geram saídas em linguagem de montagem, que é convertida para linguagem de máquina, por um montador diferente. Um compilador se distingue de um montador pelo fato de que cada instrução de entrada, não obrigatoriamente, corresponde a apenas uma instrução de máquina. Um compilador pode suportar recursos diversos, como alocação automática de variáveis, expressões aritméticas arbitrárias, estruturas de controle em geral, escopo de variável, operações de entrada/saída, funções de alto nível e portabilidade de código-fonte. Portanto, o programa conversor que recebe o código-fonte de certa linguagem de programação e realiza a conferência da escrita gramatical e sintática correta, convertendo-o para a linguagem de máquina, gerando um programa executável, é tecnicamente denominado compilador. Observe a ilustração a seguir: Execução (sem mais instruções) Ciclo da máquina Início Fim BuscaDecodificação Decodificar Bu sc ar Executar 74 Figura 2 – Processo completo de compilação. Fonte: Tanenbaum (2013). Código-fonte Código-objeto Código executável Escrita do programa na linguagem fonte (p.e.C) Criação de código executável e alocação de memóriaCompilação Execução Editor de texto Compilador Carregador Ligador A figura anterior ilustra o processo completo de conversão de um código-fonte em código executável. Inicialmente, o código-fonte é gerado a partir de um editor de texto, na maioria das vezes, próprio de certa linguagem de programação, que em seguida é convertido em código-objeto por meio do processo de compilação. Esse código-objeto é carregado e ligado a eventuais funções de bibliotecas próprias da linguagem de programação utilizada, a fim de gerar o código executável. Esse código executável é alocado na memória real do computador para poder ser efetivamente executado. MIDIATECA Acesse a midiateca da Unidade 4 e veja o conteúdo complementar indicado pelo professor sobre Albor. 75 Interpretação Interpretadores são programas de computador que leem o código-fonte de uma linguagem de programação interpretada e o convertem em código executável. Como podemos caracterizá-los? O interpretador caracteriza-se por realizar a leitura do código-fonte, linha a linha, convertendo cada leitura em código-objeto, tecnicamente denominado bytecode. Dependendodo interpretador, a leitura pode ser feita de forma global para somente depois converter o código-fonte inteiro, deixando-o pronto para ser executado (lembra os compiladores). Então, a interpretação é realizada da seguinte forma: 1. A primeira instrução do programa-fonte é recebida pelo conversor, que verifica se a escrita está correta, convertendo a instrução, portanto, em linguagem de máquina. 2. Após a checagem, o interpretador ordena ao computador que execute a instrução em código de máquina. 3. Esse processo é repetido até que a última linha de código seja efetivamente convertida e executada. Na verdade, o processo de interpretação apresenta um único passo: a execução do programa a partir do código-fonte em certa linguagem de programação. 76 Figura 3 – Processo completo de interpretação. Fonte: Adaptada de Tanenbaum (2013). Procedimento- fonte 1 Módulo- objeto 1 Módulo- objeto 2 Módulo- objeto 3 0 0 0 010 01110101 01010 0 0 010 010 0 10 010 0 010 010 01 0 010 010 01010 01 0 10 0 10 10 0 10 111 0 0 0 0 1 0 0 1 0 0 1 0 0 Programa executável (código binário) Procedimento- fonte 2 Interpretador Carregador Memória principal Ligador Procedimento- fonte 3 Um método semelhante denominado tradução também pode ser utilizado para realizar tal conversão. Nesse método, em vez de armazenar instruções do programa-fonte na sequência que são fornecidas, o tradutor gera códigos intermediários visando não sobrecarregar a memória do computador. Nesse processo, se um erro for detectado, o processo é retornado para a primeira instrução do código-fonte, para que seja providenciada a correção necessária do código. Existem três processos de conversão de código-fonte em código executável: 1. Compilador. 2. Interpretador. 3. Tradutor. Existe semelhança nos processos de interpretação e tradução. No entanto, este é bem diferente do processo de compilação. Importante 77 MIDIATECA Acesse a midiateca da Unidade 4 e veja o conteúdo complementar indicado pelo professor sobre compilador. 78 Linguagem montadora Uma linguagem de montagem pura, segundo Tanenbaum (2013), é uma linguagem na qual cada declaração produz exatamente uma instrução de máquina. Na verdade, existe uma correspondência um para um entre instruções de máquina e declarações no programa de montagem. Se cada linha em linguagem de montagem conter exatamente uma declaração e cada palavra de máquina conter exatamente uma instrução de máquina, então um programa de montagem de n linhas produzirá um programa em linguagem de máquina de n instruções. O motivo pelo qual as pessoas usam linguagem de montagem em vez de programação em linguagem de máquina é porque é muito mais fácil de programar, pois se aproxima mais do entendimento do homem que da máquina, diferentemente da linguagem de máquina, que fica mais próxima do entendimento da máquina. Nesse contexto, podemos afirmar que o uso de nomes simbólicos e endereços simbólicos, em vez de binários e hexadecimais, faz uma enorme diferença. Por essa razão, a linguagem de montagem utiliza mnemônicos para representar suas instruções. Corrêa (2016) afirma que existem dois tipos de montadores: montador de dois passos e montador de um passo. O montador de dois passos tem esse nome por fazer duas passagens pelo código-fonte, da seguinte maneira: O montador lê o código-fonte e determina os endereços para as referências simbólicas, construindo uma tabela de símbolos. O código-fonte é lido novamente, e os mnemônicos das instruções (abreviação de comandos da instrução) e as referências simbólicas são substituídos por códigos de máquina. 1 2 79 O montador de um passo faz apenas uma passagem pelo código-fonte, porém esse fato implica restrições no programa-fonte. A principal dificuldade disso envolve referências futuras a rótulos. Os operandos das instruções podem ser símbolos que ainda não foram definidos pelo programa-fonte. Portanto, o montador não sabe qual endereço relativo inserir na instrução traduzida. No entanto, essa dificuldade pode ser sanada pelo montador. Ao encontrar um operando da instrução que seja um símbolo ainda não definido, o montador: • Deixa o campo do operando da instrução vazio, na instrução binária montada. • Insere o símbolo usado como um operando na tabela de símbolos. A entrada da tabela é marcada para indicar que o símbolo não está definido. • Adiciona o endereço do campo do operando da instrução, que se refere ao símbolo indefinido, a uma lista de referências futuras associadas à entrada na tabela de símbolos. Quando a definição de símbolo é encontrada, ela é associada à tabela de símbolos (CORRÊA, 2016). A linguagem de montagem (assembly), de acordo com Stallings (2017), é uma linguagem de programação que está bem próxima à linguagem de máquina. Em geral, cada instrução da linguagem de montagem é traduzida em uma instrução de máquina pelo montador. A linguagem de montagem é dependente do hardware, com uma linguagem de montagem diferente para cada tipo de processador. As instruções da linguagem de montagem devem fazer referência aos registra- dores específicos do processador, incluir todos os opcodes destes e refletir o tamanho em bits de vários registradores do processador e dos operandos da linguagem de máquina. Dessa forma, um programador de linguagem de mon- tagem deve compreender bem a arquitetura do computador. Importante Salvo informar que programadores raramente usam linguagem de montagem para aplicações ou até programas de sistemas. Isso é feito por meio das inúmeras linguagens de programação de alto nível existentes no mercado. 80 O uso da linguagem de montagem reporta desvantagens significativas; de acordo com Stallings (2017), são elas: 1. Tempo de desenvolvimento: escrever códigos em linguagem de montagem leva muito mais tempo do que escrever em linguagem de alto nível. 2. Confiabilidade e segurança: é muito fácil cometer erros no código em linguagem de montagem, pois o montador não verifica se as convenções de chamada e convenções para salvar registradores são obedecidas. 3. Depuração e verificação: o código em linguagem de montagem é mais difícil de depurar e verificar, porque há mais possibilidade de erros do que um código de alto nível. 4. Manutenção: o código em linguagem de montagem é mais difícil de modificar e manter, porque a linguagem permite o chamado código “espaguete” não estruturado e o tipo de truques que são difíceis de serem entendidos por outras pessoas. Nesse caso, uma documentação minuciosa e um estilo de programação consistente são necessários. 5. Portabilidade: o código em linguagem de montagem é específico para uma plataforma. Assim, ir para uma plataforma diferente é muito difícil. 6. Códigos de sistemas podem usar funções intrínsecas em vez de uma linguagem de montagem: os melhores compiladores modernos para C++, por exemplo, possuem funções intrínsecas para acessar registradores de controle do sistema e outras instruções do sistema. 7. Código para aplicação pode usar funções intrínsecas ou classes vetoriais em vez de linguagem de montagem: os melhores compiladores modernos para C++, por exemplo, possuem funções intrínsecas para operações vetoriais e outras instruções especiais que antes requeriam programação em linguagem de montagem. 8. Compiladores melhoraram muito nos últimos anos: com a melhora significativa dos compiladores modernos, a linguagem de montagem foi aos poucos deixando de ser muito utilizada, sendo necessária, portanto, apenas para as operações de montagens em registradores dos processadores. Vamos ver agora algumas vantagens do uso da linguagem de montagem: 1. Depuração e verificação: trata-se de analisar um código em linguagem de montagem gerado pelo compilador, ou ver a janela de montagem em um depurador. São úteis para localizar erros e verificar a qualidade da otimização feita pelo compilador para determinada parte do código. 81 2. Desenvolvimento de compiladores:
Compartilhar