Baixe o app para aproveitar ainda mais
Prévia do material em texto
Arquitetura de Computadores SIMONE MARKENSON 1ª Edição Brasília/DF - 2020 Ficha catalográfica elaborada pela Bibliotecária Marjorie Gonçalves Andersen Trindade, CRB-1/2704 M345a Markenson, Simone Arquitetura de computadores / Simone Markenson. – Brasília: Alumnus, 2020. 107 p. Recurso online: e-book Modo de acesso: world wide web ISBN 978-65-89227-08-3 1. Arquitetura de computador. 2. Computadores. I. e-book. II. Título. CDU 004.2 Autores Simone Markenson Produção Equipe Técnica de Avaliação, Revisão Linguística e Editoração Sumário Organização do Livro Didático........................................................................................................................................4 Introdução ..............................................................................................................................................................................6 Capítulo 1 Era uma vez um computador .....................................................................................................................................7 CAPÍTULO 2 Os números e os computadores ............................................................................................................................ 25 CAPÍTULO 3 Vossa Majestade, o processador ............................................................................................................................ 44 CAPÍTULO 4 Memória, para que te quero .................................................................................................................................... 65 CAPÍTULO 5 Dispositivos periféricos, porque interagir é preciso ....................................................................................... 84 CAPÍTULO 6 Novas tecnologias ...................................................................................................................................................... 95 Referências ........................................................................................................................................................................106 Anexo A – Tabela ASCII .................................................................................................................................................107 4 Organização do Livro Didático Para facilitar seu estudo, os conteúdos são organizados em capítulos, de forma didática, objetiva e coerente. Eles serão abordados por meio de textos básicos, com questões para reflexão, entre outros recursos editoriais que visam tornar sua leitura mais agradável. Ao final, serão indicadas, também, fontes de consulta para aprofundar seus estudos com leituras e pesquisas complementares. A seguir, apresentamos uma breve descrição dos ícones utilizados na organização do Livro Didático. Atenção Chamadas para alertar detalhes/tópicos importantes que contribuam para a síntese/conclusão do assunto abordado. Cuidado Importante para diferenciar ideias e/ou conceitos, assim como ressaltar para o aluno noções que usualmente são objeto de dúvida ou entendimento equivocado. Importante Indicado para ressaltar trechos importantes do texto. Observe a Lei Conjunto de normas que dispõem sobre determinada matéria, ou seja, ela é origem, a fonte primária sobre um determinado assunto. Para refletir Questões inseridas no decorrer do estudo a fim de que o aluno faça uma pausa e reflita sobre o conteúdo estudado ou temas que o ajudem em seu raciocínio. É importante que ele verifique seus conhecimentos, suas experiências e seus sentimentos. As reflexões são o ponto de partida para a construção de suas conclusões. 5 ORgANIzAçãO DO LIVRO DIDáTICO Provocação Textos que buscam instigar o aluno a refletir sobre determinado assunto antes mesmo de iniciar sua leitura ou após algum trecho pertinente para o autor conteudista. Saiba mais Informações complementares para elucidar a construção das sínteses/conclusões sobre o assunto abordado. Gotas de Conhecimento Partes pequenas de informações, concisas e claras. Na literatura há outras terminologias para esse termo, como: microlearning, pílulas de conhecimento, cápsulas de conhecimento etc. Sintetizando Trecho que busca resumir informações relevantes do conteúdo, facilitando o entendimento pelo aluno sobre trechos mais complexos. Sugestão de estudo complementar Sugestões de leituras adicionais, filmes e sites para aprofundamento do estudo, discussões em fóruns ou encontros presenciais quando for o caso. Posicionamento do autor Importante para diferenciar ideias e/ou conceitos, assim como ressaltar para o aluno noções que usualmente são objeto de dúvida ou entendimento equivocado. 6 Introdução Os computadores estão em todos os lugares. Fazem parte das nossas vidas e às vezes nem percebemos. São tão comuns que muitos profissionais da área são confundidos com bons usuários. Podemos fazer uma analogia: existe aquele que projeta um avião; existe aquele que conserta o avião; existe aquele que pilota o avião e... existe o passageiro do avião. As profissões ligadas à computação passam por um processo semelhante, ao confundirmos o passageiro com o projetista, ou mesmo com os demais profissinais. O que nos diferencia (sim, você agora não é mais passageiro) é o conhecimento para além daquilo que é visível a todos. Existem muitos mitos sobre o funcionamento do computador. Coisas quem “ele” faz sem o nosso consentimento, erros que “ele” comete sozinho e funções atribuídas a “ele” são alguns dos exemplos mais comuns. Conhecer como funciona um computador é fundamental para todos que desejam seguir uma carreira na área da computação e, para isso, se faz necessário entender cada componente em detalhes: o que faz, como se relaciona e como se alimenta. Nesse caderno, estudaremos os principais componentes de um computador e ainda como as informações são armazenadas e recuperadas. Com essa base, será possível entendermos o que está acontecendo em relação às novas tecnologias e identif icarmos oportunidades de aplicação. Nerds, uni-vos! Vamos deixar de lado o mi-mi-mi e entender de verdade o que é um computador. Que a força esteja com vocês! Objetivos » Identificar os componentes de um computador e suas funções. » Utilizar as formas de representação de informações. » Identificar oportunidades para aplicação de novas tecnologias. 7 Introdução Há mais de 5000 anos, provavelmente na Mesopotâmia, foi desenvolvido um instrumento para auxiliar a elaboração de contas, como se fosse uma extensão dos dedos da mão. A origem do ábaco, nome atribuído ao “equipamento”, não é uma unanimidade, mas há consenso de que este artefato se tornou uma inspiração para a computação: a necessidade de fazer coisas humanas de forma mais precisa e mais rápida. Os antigos já percebiam como o apoio de certos instrumentos poderiam auxiliá-los. Nesta aula, iremos conhecer um pouco mais sobre a evolução dos computadores e os principais componentes de um sistema computacional. Objetivos » Reconhecer as etapas de evolução da computação. » Identificar as características de um computador. » Descrever os principais componentes de um sistema computacional. Um pouco de história O ábaco está longe de ser um computador, mas é um artefato a que se atribui a origem da computação. Somente nos anos de 1600, Blaise Pascal projetou a primeira calculadora mecânica, que recebeu o nome de Pascalina. Foi um grande salto, pois era capaz de somar e subtrair, além de multiplicar e dividir pela repetição das duas primeiras operações. A calculadora de Leibniz, criada em 1673, foi, de fato, a primeira a realizar as quatro operações básicas. A ideia de computadores ainda estava ligada à automação de operações matemáticas. Em 1822, o inglês Charles Babbage descreveu a máquina diferencial, conhecida como o primeiro computador de uso geral (figura 1). Essa máquina era capaz de resolver cálculos 1CAPÍTULOERA UMA VEz UM COMPUTADOR 8 CAPÍTULO 1 • ERA UMA VEzUM COMPUTADOR mais complexos, recebendo dados e transformando-os em informação. Babbage investiu em uma computação mais geral com o projeto da máquina analítica que, apesar de nunca ter saído do papel, deu origem aos computadores 100 anos depois. Figura 1. Máquina diferencial. Fonte: CC-BY-SA-2.0. Disponível em: https://commons.wikimedia.org/wiki/File:BabbageDifferenceEngine.jpg. O período da II Guerra Mundial foi marcado por avanços significativos no mundo da computação. Em 1941, o matemático Alan Turing e sua equipe desenvolveram um decodificador eletromecânico denominando BOMBE, para interceptar e decifrar as mensagens do código alemão Enigma. Em 1944, o computador Colossus, projetado pelo britânico Tommy Flowers, reduziu o tempo de decodificação de semanas para horas. Esse projeto só se tornou público nos anos 70. Na mesma época, a IBM apresentou o Harvard Mark I, computador eletromecânico projetado por Howard Aiken, professor da Universidade de Harvard, com capacidade para executar as quatro operações aritméticas, funções logarítmicas e trigonométricas. Em 1946, John Eckert e John Mauchly, da Electronic Control Company, criaram o primeiro computador eletrônico, o Electronic Numerical Integrator And Computer (ENIAC). Utilizava válvulas e era “programado” fisicamente utilizando- se milhares de interruptores, que poderiam ser colocados no estado de “ligado” ou “desligado”. O valor 1 era associado ao estado “ligado”; e o valor 0, ao estado “desligado”. A programação era feita por uma equipe com cerca de 80 pessoas (Figura 2), reorganizando-se os cabos em diferentes tomadas. Era uma máquina muito grande, com mais de 17.000 válvulas e pesando cerca de 30 toneladas. A introdução da válvula marcou a primeira geração de computadores. Sugestão de estudo Dois filmes são particularmente interessantes para entender o que viria a seguir: “O jogo da imitação”, que conta a trajetória de Alan Turing, e “Estrelas além do tempo”, que mostra a inserção dos computadores na Nasa durante a Guerra Fria. 9 ERA UMA VEz UM COMPUTADOR • CAPÍTULO 1 Figura 2. Os programadores glen Beck (fundo) e Betty Snyder (frente) programando o ENIAC no Ballistic Research Laboratory, Maryland – USA. Fonte: ENIAC. Disponível em: https://commons.wikimedia.org/wiki/ENIAC#/media/File:Eniac.jpg. Somente a partir do electronic discrete variable computer (EDVAC), sucessor do ENIAC, em 1951, com a participação do matemático John Von Neumann, a programação deixou de utilizar cabos e tomadas, e os programas passaram a ser armazenados na memória do computador. Von Neumann e outros cientistas de Princeton construíram o IAS, seguindo os princípios do EDVAC, mas ainda utilizando válvulas. A segunda geração foi marcada pelo fim das válvulas, substituídas por transistores, permitindo operações de liga/desliga da corrente elétrica. O dispositivo poderia, dessa forma, operar em dois estados. Nasce a lógica binária, que iremos estudar no próximo capítulo. Somente em 1961, a Digital Equipment Corporation produziu o PDP -1. A razão para demora pode estar relacionada com a profética afirmação do presidente da IBM, Thomas Watson: “Eu acredito que há mercado para talvez cinco computadores”. Finalmente, a terceira geração introduziu os circuitos integrados nos anos 60. A construção dos chips, pastilhas de silício, reduziu muito o tamanho dos computadores agregando dezenas de transistores. Foi uma grande revolução, contrariando outra famosa profecia, dessa vez do presidente da Digital, Ken Olson: “Não há nenhuma razão para alguém querer um computador em casa”. Atenção O termo bug passou a ser utilizado no mundo da computação quando a cientista Grace Hopper identificou o problema que havia parado o computado Harvard Mark II: um inseto. O calor das válvulas atraía mariposas e outros insetos, que acabavam interrompendo o funcionamento do computador. Passou a ser comum chamar erros de bugs, mas isso não é correto. Um bug é algo externo à atividade do computador. Então, é sempre bom lembrar: erro é erro e bug é bug. Combinado? 10 CAPÍTULO 1 • ERA UMA VEz UM COMPUTADOR Vivemos na era da quarta geração (e caminhando...), com circuitos “muito integrados”, conhecidos como very large scale integration (VLSI), embasando os computadores atuais. Grandes empresas, como a IBM, dominavam o mercado dos mainframes, desenvolvendo o conceito de “família” de computadores. Por volta dos anos 1970, a possibilidade de uma integração maior e a redução do custo dos componentes suscitaram a ideia dos computadores pessoais. A primeira unidade de um microprocessador foi produzida pela INTEL e denominada INTEL-4004. Como você pode ver, muita coisa aconteceu até que o computador sobre a mesa fosse algo comum. Os microcomputadores dos anos 1990 eram bem limitados, quando comparados aos atuais, mas deu início a uma mudança cultural. O computador deixava de ser algo distante, somente para poucos, para entrar nas casas e escritórios. Mudanças no mundo do trabalho e do entretenimento começavam a acontecer. Vamos falar mais sobre a evolução dos componentes um pouquinho mais para frente, mas certamente você já conhece os reflexos das tecnologias no seu dia a dia: smartphone, notebook, caixas eletrônicos são alguns dos artefatos que permeiam a nossa vida. Apesar da importância dos processadores, estes não são os únicos responsáveis para que um sistema computacional funcione. Vamos conhecer o que mais é necessário? Para isso, precisaremos voltar um pouco à proposta de Von Neumann. O computador de Von Neumann Figura 3. John Von Neumann. Fonte: https://pt.wikipedia.org/wiki/John_von_Neumann. Saiba mais A relação completa dos marcos históricos sobre a evolução dos computadores pode ser obtida no livro Organização Estruturada de Computadores, de Andrew S. Tanembaum. 11 ERA UMA VEz UM COMPUTADOR • CAPÍTULO 1 A denominada Arquitetura de Von Neumann, referência ao criador, o matemático húngaro John Von Neumann (Figura 3), estabeleceu as diretrizes para os computadores modernos, tornando-os de uso geral. Um computador é algo que recebe dados e os transforma em informação. É preciso que os dados sejam informados ao computador para que sejam processados e a informação seja devolvida. Durante o processamento, os dados e as ações a serem executados precisam ficar armazenados para que o processador possa ter acesso. O computador de Von Neumann é, então, composto por uma unidade de processamento, memória e dispositivos de entrada e saída. A área de memória para armazenamento temporário de programas e dados poderia ser acessada por um endereço específico. A troca de dados entre memória e processador ocorre por meio dos barramentos de dados, endereço e controle. Essa é a estrutura básica que fundamenta o projeto de computadores até hoje. Cada um desses componentes será estudado nos capítulos mais à frente. Cada barramento transporta um conteúdo específico: o barramento de dados transporta os dados que serão lidos ou escritos na memória; o barramento de endereços transporta o endereço de memória no qual o dado será lido ou escrito; o barramento de controle indica se a operação em curso é de leitura ou escrita na memória. O dado que será lido ou escrito na memória é armazenado temporariamente em um registrador dentro do processador, denominado registrador de dados da memória (RDM ou MBR), e o local onde o endereço será lido ou escrito fica armazenado no registro de endereço de memória (REM ou MAR). Ainda dentro do processador, a unidade de controle é a responsável, entre outras atividades, por indicar se a operação será de leitura ou escrita, e a unidade lógico-aritmética pelas operações matemáticas, como mostra a Figura 4. Atenção DADO: elemento fornecido ao computador sem um significado específico. INFORMAÇÃO: o resultado dos dados após processamento. Exemplo: os números 25, -100, 248 são dados que após processamento, por exemplo, de operações bancária (saques e depósitos) fornecem o saldo daconta corrente (a informação). 12 CAPÍTULO 1 • ERA UMA VEz UM COMPUTADOR Figura 4. O computador de Von Neumann. MEMÓRIA ENTRADA e SAÍDA RDM REM Unidade de controle Unidade aritmé�ca e lógica Dados Endereço Controle Barramentos PROCESSADOR Fonte: Elaborado pela autora. Agora que já conhecemos a estrutura elementar de um computador, vamos conhecer o que faz um computador funcionar (além da energia elétrica, claro!). Componentes de um sistema computacional Um sistema computacional é o resultado da composição de dois elementos: hardware e software. Uma maneira simples para diferenciá-los é: Hardware: é o que você chuta; aquilo que é físico e podemos quebrar em pedacinhos. A Figura 5 mostra alguns exemplos: monitor, teclado, mouse, caixa de som e um gabinete (torre) que contêm processador, memória, disco, placas etc. Tuuuuudo é hardware. Atenção 13 ERA UMA VEz UM COMPUTADOR • CAPÍTULO 1 Figura 5. Hardware em diversos sabores. Fonte: https://www.shutterstock.com/pt/image-vector/electronics-devices-related-line-icon-set-1370027315. Em alguns casos, os componentes estão integrados, como, por exemplo, em um monitor tipo touch screen (sensível ao toque). Se pensarmos em telefones celulares, fica até difícil imaginarmos que ali temos um computador com todos os seus componentes. Nos computadores de mesa ainda é comum identificarmos a “torre” como sendo “o” computador, mas lá dentro estão os componentes descritos por Von Neumann. Veja na Figura 6 alguns desses componentes e como se conectam. Figura 6. Por dentro do computador. Fonte: Elaborado pela autora. Software: é o que você xinga; são os programas que fazem (ou deveriam fazer) o computador interagir conosco. O editor de texto, o sistema operacional, o seu navegador preferido, o editor de fotos... todos são programas. 14 CAPÍTULO 1 • ERA UMA VEz UM COMPUTADOR Podemos imaginar que o hardware é projetado por engenheiros e produzido pela indústria para comercialização. Mas quem faz o software? Os programadores (ou desenvolvedores). Vamos contar um pouco dessa história. As linguagens de programação Vimos que os primeiros computadores eram “programados” por cabos e chaves. Assim como os computadores evoluíram, a forma de programá-los também evoluiu, acompanhando os novos recursos. A ideia da construção de algoritmos para computadores remonta aos anos de 1840, quando a matemática Ada Lovelace, considerada a primeira programadora, organizou e comentou as publicações de Charles Babbage sobre a máquina analítica, incluindo notas sobre variáveis, sequência de ações e atribuição de valores. Os primeiros computadores elétricos eram programados utilizando-se linguagem de máquina composta por combinações de “zeros” e “uns”. Os programas eram muito extensos e fortemente vinculados aos componentes do computador. Posteriormente, a linguagem de montagem, conhecida como assembly, passou a ser utilizada, facilitando a identificação das instruções com mnemônicos, mas mantendo o vínculo com uma arquitetura específica. A Figura 7 mostra um trecho de código em assembly de um microcomputador atual que escreve “Olá!” no meio da tela. Trabalhoso e pouco amigável, não acha? Observe a lei Fonte: https://www.shutterstock.com/pt/image-vector/online-piracy-vector-illustration-flat-tiny-1490808770. Software é um produto que deve ser adquirido legalmente. Copiar software é ilegal, exceto quando explicitamente autorizado pelo autor. 15 ERA UMA VEz UM COMPUTADOR • CAPÍTULO 1 Figura 7. Código em assembly para escrever “Olá” no meio da tela. mov ax,#0x7cc mov DI,ax seg es mov [DI],#0x9f4F seg es mov [DI+2],#0x9f4C seg es mov [DI+4],#0x9f41 seg es mov [DI+6],#0x9f21 Fonte: Elaborado pela autora. Linguagens de programação mais amigáveis, como Formula Translation (FORTRAN) e Common Business Oriented Language (COBOL), respectivamente utilizadas para fins matemáticos e comerciais, somente se tornaram “populares” no início dos anos 60. Tanto o FORTRAN quanto o COBOL utilizavam o paradigma de linguagem imperativa, como conhecido atualmente, e os programas eram escritos em forma de ações a serem executadas. O programa em FORTRAN, exemplificado na Figura 8, mostra o código- fonte para o método de Bhaskara. A estrutura, neste caso, é semelhante ao exemplo apresentado em C++, mas não possui elementos considerados, hoje, fundamentais para organização e manutenção de um programa um pouco mais complexo. Figura 8. Método de Bhaskara em FORTRAN IV. PROGRAM METODOBASKHARA REAL :: A,B,C,D, R1,R2 PRINT 10, "Entre com os valores de a, b, c: " 10 FORMAT( A, 1X, $) 20 READ(*, *, ERR=20)A, B, C IF( A.EQ.0 )GOTO 40 DELTA= B**2-4.0*A*C IF( D.LE.0 )GOTO 30 X1= (-B-SQRT(D))/(2.0*A) X2= (-B+SQRT(D))/(2.0*A) PRINT *, "RAIZES: R1= ", R1 PRINT *, "R2= ", R2 30 PRINT *, "NÃO POSSUI RAIZES REAIS" GOTO 50 40 PRINT *, "NÃO É EQUAÇÃO DE 2º. GRAU" 50 CONTINUE END PROGRAM BASKHARA Fonte: Elaborado pela autora. Os programas eram desenvolvidos para aproveitar ao máximo a capacidade e reduzir o tempo de utilização do computador. Eram repletos de artimanhas de otimização, refletindo o grau de habilidade do programador. Não demorou muito até que se percebesse quão difícil era manter ou atualizar esses programas. Na medida em que 16 CAPÍTULO 1 • ERA UMA VEz UM COMPUTADOR os recursos se ampliavam, as linguagens e os métodos de programação evoluíram para que os códigos pudessem ficar mais claros quando lidos por outros que não o autor. Diferentes paradigmas de programação buscavam a clareza dos programas desenvolvidos para facilitar manutenções futuras. A programação estruturada, utilizada por linguagens como C, Pascal e COBOL, e a programação orientada a objetos, representada pela linguagem JAVA, são dois paradigmas importantes no cenário atual de desenvolvimento de software. Algumas linguagens podem, ainda, trabalhar com múltiplos paradigmas, tais como Python e C++. O paradigma da programação estruturada é caracterizado pela capacidade de modularização do código, permitindo a divisão de um programa em partes menores e mais simples, e por utilizar apenas estruturas sequencial, condicional e de repetição, representadas na Figura 9. Figura 9. Estruturas: (a) sequencial; (b) condicional; (c) repetição. Fonte: Elaborado pela autora. Com outro olhar para a programação, a abordagem orientada a objetos se desvincula das ações e enfatiza objetos, suas funcionalidades e relações. A expressão “orientação a objetos” (OO) foi cunhado por Alan Kay, na década de 1960, inspirado no software Sketchpad, que permitia tanto a manipulação de objetos de forma independente quanto a criação de desenhos a partir de um desenho “mestre”. Um pouco depois, 1968, em um encontro com Seymour Papert, Kay teve contato com a linguagem Visual Logo para promover o ensino de programação para crianças amparado em uma abordagem construtivista. A linguagem Logo oferece comandos que fazem uma tartaruga se movimentar na tela do computador pela indicação de quantos “passos” devem ser dados em uma determinada direção. E depois? O que acontece com o programa que desenvolvemos? 17 ERA UMA VEz UM COMPUTADOR • CAPÍTULO 1 O ciclo de um programa O programa que escrevemos em uma linguagem de programação é denominado código- fonte ou programa-fonte. Para que ele seja compreendido pelo computador, é preciso que seja transformado em instruções que o processador entenda. A primeira etapa do processo é a compilação do código. Nessa fase, o compilador da linguagem escolhida (que também é um software) lê o programa-fonte e verifica se a forma com que foi escrito está correta. O compilador verifica a sintaxe do programa e o transforma em “código-objeto”. Erros de digitação ou falta de um ponto-e-vírgula são detectados nessa etapa. Ao término da fase de compilação, teremos um arquivo com o “código-objeto”. O exemplo ilustrado na Figura 10 mostra o trecho de um programa escrito em C++ queexibe a frase “ALO MUNDO!”. Após ser compilado, será gerado um arquivo alomundo.o, que é o código objeto do programa alomundo.cpp. Em seguida, o linkeditor (ou ligador) verificará a necessidade de incorporar código externo ao programa. A função procurada pode estar em uma biblioteca de funções ou em outro código-objeto. Sistemas muito grandes são, em geral, divididos em diversos programas que podem ser unidos em um único executável no momento da linkedição (ou ligação). Figura 10. Compilação de um programa em C++. Fonte: Elaborado pela autora. Suponha que, no exemplo, estivesse faltando o ponto-e-vírgula (;) no final da linha. O compilador alertaria para um erro de compilação, pois a sintaxe estaria errada. Se, no entanto, o erro fosse na digitação do nome da “função” que exibe a frase “ALO MUNDO!”, cut em vez de cout, por exemplo, o erro seria apontado no momento da linkedição, pois a “função” cut não seria localizada. Observe que, ao escrevermos um programa, a escolha da linguagem pode facilitar ou dificultar a tarefa. A linguagem C, por exemplo, é mais adequada para desenvolvimento de rotinas do sistema operacional, sistemas embarcados e compiladores. Lembre-se, ainda, de que o código executável é gerado para um 18 CAPÍTULO 1 • ERA UMA VEz UM COMPUTADOR conjunto processador/sistema operacional específico. Um executável feito para Windows, por exemplo, não funcionará no Linux. O forte vínculo entre a arquitetura computacional e o programa executável era um desafio a ser transposto, pois um programa desenvolvido para uma determinada arquitetura não poderia ser levado para outra sem que no mínimo um novo executável precisasse ser gerado. A linguagem C ANSI foi particularmente desenvolvida para gerar essa portabilidade de código, mesmo assim a geração de novo executável ainda se faz necessária. Uma nova proposta surgiu com as máquinas virtuais, em particular, com a máquina virtual JAVA, como veremos a seguir. A máquiva virtual JAVA A linguagem JAVA tornou-se popular por ser orientada a objetos e permitir que um código produzido em um determinado computador possa ser executado em qualquer outro que suporte a linguagem. Siiiiim!!!! Você leu corretamente. Um programa escrito em JAVA pode rodar em qualquer computador que possua máquina virtual JAVA ( JVM), que é a responsável para que a mágica ocorra. A JVM é um interpretador de código instalado no computador com o propósito de fornecer uma camada intermediária entre a aplicação compilada, denominada byte code, e o sistema operacional. A proposta é que o compilador gere código-objeto para a máquina virtual, e não para o sistema que o hospeda. A tradução desse código ocorrerá durante a execução e será feita pela JVM específica do sistema no qual está instalada, como ilustra a Figura 11. Figura 11. Máquina virtual JAVA. Fonte: Elaborado pela autora. 19 ERA UMA VEz UM COMPUTADOR • CAPÍTULO 1 A JVM específica para o seu sistema operacional pode ser obtida diretamente no site do fabricante. São oferecidos dois “pacotes”: Java Runtime Environment ( JRE) e Java Development Kit ( JDK). O primeiro contém apenas o necessário para utilização de aplicações escritas em Java, e o segundo oferece, além da JVM, o ambiente de desenvolvimento para Java. No passado, havia uma forte restrição ao uso do Java, quando considerávamos o tempo de execução das aplicações, em geral, bem mais lento. As ações de tradução da JVM para o sistema nativo, necessárias durante a execução do código, eram o motivo (e continua sendo). Com os computadores atuais, podemos dizer que isso passa a ser um “problema menor” em grande parte das aplicações, frente ao ganho de produtividade na etapa de desenvolvimento. É um ótimo estímulo para aprender JAVA: poder programar em uma única linguagem para qualquer plataforma, não acha? Como tudo começa? Juntando as partes. Vimos até agora as estruturas elementares do hardware de um computador e as etapas necessárias para programá-lo. Precisaremos, agora, entender o que acontece a partir do momento que apertamos o botão até a execução dos nossos programas. O procedimento que “liga” o computador é chamado bootstrap. O nome tem origem naquelas parábolas de autoajuda, com a ideia de nos erguermos sem ajuda externa, puxando as próprias botas para cima É exatamente isso que acontece com os computadores pessoais, porém podemos garantir que eles fazem isso porque são projetados para fazê-lo. Ao ligarmos o computador, o processador recebe energia e inicializa seus registrados com valores predeterminados. Em particular, os registrados que indicam o endereço da próxima instrução a ser executada recebem um valor que aponta para o código gravado em um chip denominado Basic Input/Output System (BIOS). Hummm ... o fabricante da BIOS deve ser o mesmo fabricante do processador? A resposta é não. Existe um acordo entre fabricantes de processadores, BIOS e sistemas Saiba mais Tudo sobre JAVA em: https://www.java.com/pt_BR/. Importante É sempre bom lembrar que não existe um duende verde habitando as profundezas do computador. Então, nada é simplesmente “automático”. As coisas acontecem porque estão programadas (por nós, humanos) para acontecerem, ok? 20 CAPÍTULO 1 • ERA UMA VEz UM COMPUTADOR operacionais para que seus produtos conversem independentemente de quem os fabricou. Assim, quem fabrica BIOS sabe o que fazer para que o processador localize e identifique o início do programa. Quando o código da BIOS começa a ser executado, é feito um teste rápido sobre as condições da máquina. Por exemplo, se possui memória instalada. A resposta desse teste é dada sob a forma de sinais sonoros. Cada tipo de sinal representa um retorno do teste, documentado pelo fabricante. Se tudo estiver ok, a BIOS disponibiliza um programa para ajustes na máquina (setup), que pode ou não ser executado. No passado, era fundamental executar esse programa para configuração do disco rígido, entre outras coisas. Após essa etapa, um novo acordo entra em ação. A BIOS vai buscar uma “assinatura”, no disco rígido, que indica a presença de um sistema operacional instalado, e a localização do módulo de carga do sistema operacional. Somente nesse ponto o sistema é carregado para memória e já pode ser devidamente xingado, se necessário. O sistema operacional O sistema operacional assume o comando para gerenciar os recursos de hardware disponíveis, como mostra a Figura 12. Não podemos esquecer que sistema operacional é software!!! Parece óbvio, mas vou repetir isso algumas vezes. Depois me digam se tenho ou não razão. Figura 12. Funções do sistema operacional. Fonte: Elaborado pela autora. Importante Muitos problemas podem ocorrer antes da carga do sistema operacional. O código sonoro (pode ser visual, se houver uma placa para esse fim) emitido pela BIOS poderá auxiliar na identificação do problema. 21 ERA UMA VEz UM COMPUTADOR • CAPÍTULO 1 Os sistemas operacionais são categorizados. Uma categoria fundamental está relacionada à capacidade de gerenciar processos, que é o nome dado a um programa quando acionado para execução. Um processo é uma estrutura que agrega ao programa informações sobre o estado da execução (quanto tempo gastou, quanto de memória ocupa, permissões de acesso etc.). Um sistema é dito monotarefa (Figura 13a) quando somente uma tarefa posse ser carregada na memória, ou seja, para que uma tarefa inicie, é necessário que a tarefa em execução termine. Essa estratégia já não é muito utilizada, pois o processador fica subutilizado aguardando periféricos mais lentos, como os discos. Os sistemas multitarefa (Figura 13b) são aqueles que permitem que mais de um processo seja iniciado, revezando o uso do processador. Enquanto um processo faz um acesso a disco, por exemplo, outro processo poderá executar. Figura 13. Sistemas monotarefa x Sistemas multitarefa. Fonte: Elaborado pela autora. É importante notar que o processador só executa UMA única tarefa de cada vez, considerandoapenas um núcleo. O que ocorre em sistemas multitarefas é a chamada execução concorrente de processos. A substituição de um processo em execução pode ocorrer por três motivos: 1. O processo termina e cede a vez para o próximo, que aguarda em uma fila, como em uma fila de supermercado; 2. O processo precisa aguardar algum recurso e fica bloqueado, permitindo que o próximo processo da fila execute; 3. É atribuída uma fatia de tempo fixo para cada processo. Se a fatia expirar, o processo retorna ao final da fila cedendo a vez para o próximo. 22 CAPÍTULO 1 • ERA UMA VEz UM COMPUTADOR Nos dois primeiros casos, a ação de ceder a vez é tomada pelo processo que está executando. No terceiro caso, algo diferente ocorre. O processo é interrompido para que ceda a vez. Quem provoca essa interrupção? Se você respondeu “o sistema operacional”... Errou!!! Você se lembra que no início desta seção foi dito que sistema operacional é software? Então... Temos um processo em execução, logo nenhum outro está executando, e isso inclui o sistema operacional. Como o sistema operacional pode “fazer” alguma coisa se não está executando? Ahááááá! Agora você viu como é fácil cair nessa armadilha. Quem provoca a interrupção do processo em execução é um componente de hardware denominado temporizador. O temporizador envia um sinal ao processador que, ao identificá-lo, desvia a execução do processo atual para a rotina de tratamento do sistema operacional. A interrupção é provocada por hardware, mas é tratada em parte pelo processador e em parte pelo sistema operacional. Interrupções são fundamentais para sistemas multitarefas. Os sistemas multitarefas podem ser subdivididos em monousuário e multiusuário. Usuários são as pessoas que podem utilizar o sistema. Um sistema multiusuário é aquele que permite diversos usuários diferentes, utilizando o sistema ao mesmo tempo. Esse conceito não é muito trivial, pois os sistemas mais comuns para computadores pessoais são monousuários. O sistema Linux, por exemplo, é um sistema multiusuário, pois permite que múltiplos terminais compartilhem o mesmo computador (processador, memória, sistema operacional etc.). Não estamos falando de computadores em rede, mas de um único computador central com vários terminais (visualmente são monitores e teclados), um para cada usuário (Figura 15). Vale reforçar que sistemas multiusuários são obrigatoriamente multitarefas. Importante Vamos reforçar: CONCORRENTE ≠ SIMULTÂNEO. O processador executa apenas UM processo por vez. A troca entre os processos ocorre muito rapidamente, o que dá a impressão de que as coisas acontecem ao mesmo tempo. Isso é uma falácia!!!! O gerenciador de tarefas de sistemas com o Windows, por exemplo, induz ao erro ao mostrar “% de CPU”. O processador não é particionado por processos. O percentual representa quanto tempo foi utilizado por aquele processo no último minuto. 23 ERA UMA VEz UM COMPUTADOR • CAPÍTULO 1 Figura 14. Um sistema multiusuário. Fonte: Disponível em: http://www.thinnetworks.com.br/multiterminal/. Vamos lembra aqui a questão colocada no início do capítulo sobre o termo mainframe. A tradução seria “computador central”, referindo-se ao fato de existir um único computador compartilhado por vários usuários. No passado, eles eram realmente grandes, mas a ideia é a de centralização, de um único computador. Além de administrar a distribuição dos recursos de hardware, é função do sistema operacional fornecer uma interface para o usuário e garantir a segurança de acesso ao sistema. Nos sistemas modernos, também é oferecida grande variedade de aplicativos e programas específicos para dispositivos como impressoras, câmeras etc. Essas funções estão relacionadas ao “empacotamento” comercial e não ao sistema, propriamente dito. Fonte: Elaborado pela autora. 24 CAPÍTULO 1 • ERA UMA VEz UM COMPUTADOR Bom... já sabemos como funciona um computador sob o ponto de vista de quem usa. E lá dentro? Como palavras e números são tratados e armazenados? Você está convidado a responder essas e outras questões no próximo capítulo. Para refletir Os computadores que dominaram o período dos anos 1960-1980 eram conhecidos como mainframes e geralmente associados a computadores de “grande porte”. Analise o termo original. Há alguma relação entre o termo mainframe e o tamanho do computador? Sintetizando Vimos até agora: » Os computadores modernos se baseiam na máquina de Von Neumann e possuem processador, memória e dispositivos de entrada e saída. » Que um sistema computacional é conjunto formado por hardware e software. » Para desenvolvimento de um programa, utilizamos uma linguagem de programação. O programa escrito nessa linguagem é transformado em código de máquina por meio dos processos de compilação e ligação. 25 Introdução Pelo lado de fora, já vimos como funciona um computador e agora vamos aprender como as informações são armazenadas e tratadas pelo processador. Desde os primeiros computadores digitais, o processamento é baseado em dois estados possíveis: ligado e desligado. Assim, todos os nossos dados e ações precisam ser representados em um conjunto de estados ligado/desligado. Numericamente, utilizaremos a base binária com os seus dois algarismos: 0 e 1. As operações aritméticas não são diferentes daquelas que estamos acostumados com a nossa base decimal, porém os números tendem a ser muito grandes. A base hexadecimal nos salva, compactando as representações. E a lógica? Como as operações acontecem? Não percam os próximos tópicos de “como vivem os computadores”. Objetivos » Conhecer as unidades de representação de dados. » Efetuar operações aritméticas em diferentes bases. » Representar circuitos digitais com portas lógicas. Como representar dados Dentro de um computador, a única coisa que circula é corrente elétrica. Todo o resto é abstração para nós, pobres mortais, entendermos o que está acontecendo. O termo bit (Binary digiT) é utilizado para representar os dois níveis de tensão que possuem significado: 0 e 1. A partir desse momento, utilizaremos o bit como a nossa unidade de trabalho. Um bit, no entanto, não possui significado se considerado isoladamente. Para que represente um dado, utilizaremos um conjunto de 8 bits, denominado byte. Byte é, então, a unidade de informação (Figura 15). 2CAPÍTULOOS NÚMEROS E OS COMPUTADORES 26 CAPÍTULO 2 • OS NÚMEROS E OS COMPUTADORES Figura 15. Bits e bytes. Fonte: Elaborado pela autora. Podemos fazer uma comparação: bits são como átomos e bytes são como moléculas. A menor unidade de água, por exemplo, é composta por 3 átomos (H2O). Como nosso mundo passou a ser binário, nada mais justo que nos familiarizarmos com a forma de representação desses números. Sempre que possível, faremos comparações com a nossa conhecida base decimal. Bits, bytes e seus múltiplos Como já vimos, o byte é a unidade de representação da informação e é composto por 8 bits. Uma letra, por exemplo, pode ser representada em um byte. É um valor pequeno se pensarmos na capacidade armazenamento dos computadores atuais. Imagine medir o tamanho da estrada Rio-São Paulo em milímetros? Da mesma forma, trabalhar apenas com bytes não é adequado para um grande volume de dados. Da mesma forma que utilizamos diferentes grandezas para nosso sistema decimal, teremos grandezas também no sistema binário. No sistema decimal, as grandezas são representadas pelas portências de 10. Considerando o exemplo da estrada, podemos dizer que a Rio-São Paulo possui cerca de 400Km ou 400.000 m. Um quilômetro equivale a 103 m. No sistema binário, utilizaremos as grandezas representadas em potências de 2, como estão apresentados os múltiplos de byte no Quadro 1. Atenção Um byte é composto por 8 bits. Isso é uma definição. Cada bit pode ter o valor 0 ou 1. 27 OS NÚMEROS E OS COMPUTADORES • CAPÍTULO 2 Quadro 1. Múltiplos de bytes. Fonte: https://slideplayer.com.br/slide/14135634/. Repare que 210 = 1024. Para termosapenas uma noção de ordem de grandeza, podemos mentalmente fazer uma estimativa utilizando 1000 em vez de 1024, mas não podemos esquecer de que não é o valor exato. Sistemas de numeração Nosso mundo é decimal. Estamos acostumados a representar os números utilizando dez algarimos: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Todos os números são composições desses algarismos. O valor de cada um depende da posição que ocupa no número e por isso dizemos que a representação é posicional. Por exemplo: 258 = 2 * 10² + 5 * 10¹ + 8 * 100 (2 centenas + 5 dezenas + 8 unidades). O algarimos 2, na posição em que está no número 258, representa 200 unidades (ou duas centenas). Importante Vocês já perceberam que iremos trabalhar muuuuito com potências de 2. Minha sugestão: treinem fazer a conta de potências de 2 cabeça, pelo menos até 10: 2-4-8-16-32-64-128-256-512-1024. Acreditem! Vai facilitar a sua vida. 28 CAPÍTULO 2 • OS NÚMEROS E OS COMPUTADORES O mesmo acontece para as bases binárias e hexadecimais. Na base binária, os números são formados a partir de dois algarismos: 0 e 1. Para a base hexadecimal, precisamos de 16 algarismos e, para representá-los, utilizaremos letras a partir do nono: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F. Em decimal, os algarimos de A até F representam os valores de 10 a 15. Também nessas duas bases, a representação é posicional. Por exemplo: 10011 (base binária) = 1 x 24 + 0 x 23 + 0 x 22 + 1 x 21 + 1 x 20 12A (base hexadecimal) = 1 x 162 + 2 x 161 + A x 160 (lembre-se de que A equivale a 10) Assim, podemos facilmente converter um número representado em qualquer base para a nossa velha conhecida base decimal. Para facilitar a identificação da base que estamos utilizando, representaremos um valor em hexadecimal com a letra “h” após o número, como em 12Ah, ou com índices subscritos, como em 12A16 e 100112. Nos exemplos apresentados, teremos: » 100112 = 16 + 0 + 0 + 2 + 1 = 1910 » 12Ah = 256 + 32 + 10 = 29810 Com uma quantidade n de algarismos, podemos escrever bn valores diferentes, onde b é a base utilizada, começando em zero até bn -1. Vamos ver? » Com 3 algarismos decimais, podemos escrever 103 (1000) números diferentes: de 0 a 99910. » Com 3 algarismos binários, podemos escrever 23 (8) números diferentes: de 0 a 1112 » Com 3 algarimos em hexadecimal, podemos escrever 163 (4096) números diferentes: de 0 a FFFh. As operações algébricas também são as mesmas, independentemente da base utilizada.Vamos ver passo a passo de uma soma na base decimal. Para efetuarmos a operação 19+1, somamos 9 com 1. O resultado é 10, então, representamos com um zero na casa da unidade e “vai um” para a dezena, que será somando ao “1” fornecendo o resultado 20.Faremos o mesmo com a base binária e hexadecimal, lembrando que no primeiro caso, o maior algar ismo é 1 e no segundo, F. As operações estão desenhadas na Figura 16.. Para refletir Por que utilizaremos a base 16? Vou dar uma dica: 16 = 24. 29 OS NÚMEROS E OS COMPUTADORES • CAPÍTULO 2 Figura 16. Adição, Fonte: Elaborado pela autora. Faremos o mesmo processo para uma subtração, efetuando a operação 20-1 em decimal. Como não podemos diminuir 1 de zero, “pedimos emprestado” à casa das dezenas. Uma dezena equivale a 10 unidades, então teremos 10 unidades menos 1, resultando 9 na casa das unidades. Ficaremos com 1 na casa das dezenas. Para as bases hexadecimal e binária, o processo se repete, lembrando apenas que ao “pedir emprestado”, o valor emprestado será a base, como ilustrado na Figura 17. Figura 17. Subtração. Fonte: Elaborado pela autora. Representação de números negativos na base binária Até o momento, tratamos apenas os números positivos, mas não podemos nos esquecer dos números negativos. Existem formas diferentes de tratarmos números negativos: sinal e magnitude, complemento a 1 e complemento a 2. Vamos ver cada uma delas. Atenção Veja que o número 20, resultado das somas em decimal e hexadecimal, representa quantidades diferentes em cada operação. 30 CAPÍTULO 2 • OS NÚMEROS E OS COMPUTADORES Sinal e magnitude: o dígito mais significativo é reservado para o sinal. Se for 0, o número é positivo e, se for 1, é negativo. Para podermos identificar o bit de sinal, é fundamental que se saiba quantos bits são utilizados para representar o número. Se utilizarmos 8 bits, por exemplo, o número 000010102 representa o número 2, enquanto 100000102 representa -2 (Figura 18). É uma forma simples de representação, porém exige que o processador possua um circuito específico para operações de subtração e ainda possui duas representações para o número 0. Figura 18. Sinal e magnitude. Fonte: Elaborado pela autora. Nas operações aritméticas, o bit de sinal não é considerado. O sinal da resposta será o mesmo da maior parcela da operação, semelhante à nossa operação mental na base 10. Subtraímos o menor do maior número e mantemos o sinal do maior. Complemento a 1: genericamente, é conhecido como complemento a base-1. Como estamos trabalhando com a base binária, podemos simplificar e chamar de complemento a 1. O complemento é a diferença entre cada algarismo do número e o maior algarismo possível na base. Para a base 2, o maior algarismo é o 1 e, para este caso, equivale a inverter todos os dígitos. Ainda teremos duas representações possíveis para o 0. Considerando o mesmo exemplo, a representação do número -2, teremos que escrever o número positivo, 2, e inverter cada bit, como mostra a Figura 19. Figura 19. Complemento a 1. Fonte: Elaborado pela autora. 31 OS NÚMEROS E OS COMPUTADORES • CAPÍTULO 2 As operações aritméticas em complemento a 1 incorporam o bit do sinal ao número. Os números são somados bit a bit, incluindo o bit de sinal. Se houver um “vai 1” para fora do número, deverá ser somando ao resultado obtido. A regra pode ser resumida como: Efetua a soma bit a bit (inclusive sinal); “vai um” para fora do número, é somado ao resultado; Se não houver “vai um” para fora do número, o resultado é negativo e deve ser complementado (mantendo o sinal). Exemplo: Efetuar a operação 10 – 7 e 7 – 10, utilizando 6 bits. Figura 20. Operação. Fonte: Elaborado pela autora. Complemento a 2: genericamente, é conhecido como complemento a base, que, no nosso caso, é a base binária (2). O número negativo é obtido a partir do complemento a 1 de um número binário, somando-se 1 ao resultado. Em complemento a 2, há uma única representação para o 0 e utiliza-se apenas um circuito para as operações de soma e subtração, além de ser a forma mais usual para representar números negativos. Ainda tomando o -2 como exemplo, podemos ver na Figura 21 as etapas utilizadas para conversão. Figura 21. Complemento a 2. Fonte: Elaborado pela autora. 32 CAPÍTULO 2 • OS NÚMEROS E OS COMPUTADORES A aritmética de complemento a 2 também considera o bit de sinal como parte do número, porém deve ser observada a seguinte regra: Efetua a soma bit a bit (inclusive sinal); “vai um” para fora do número indica resultado positivo; Se não houver “vai um” para fora do número, o resultado é negativo e deve ser complementado (mantendo o sinal). Exemplo: Efetuar a operação 10 – 7 e 7 – 10, utilizando 6 bits. Figura 22. Operação com bits Fonte: Elaborado pela autora. Representação binária de números em ponto flutuante Representação de caracteres Entendemos como representar números em diferentes bases, mas o que fazer com letras e símbolos? A resposta é simples. Utilizamos uma tabela que converte Sugestão de estudo Aqui vai mais uma dica: a calculadora do Windows possui um modo “programador” que faz a conversão de base e representa números negativos em complemento a 2. Muito útil para checar seus resultados. Atenção Se ocorrer “vai 1” para o bit de sinal E para fora ou se não ocorrer “vai 1” em nenhum das duas situações, a operação está correta. A ocorrência de apenas um “vai 1” indica que houve overflow, ou seja, o resultado não coube na quantidade de bits.33 OS NÚMEROS E OS COMPUTADORES • CAPÍTULO 2 todos os caracteres que o processador reconhece, denominada tabela American Standard Code for Information Interchange (ASCII). A tabela é composta por 256 caracteres, que podem ser representados com apenas 1 byte (lembre-se de que 28 = 256). A tabela ASCII completa pode ser consultada no ANEXO A. Conversão de base Aprendemos como representar números em diferentes bases e ainda como converter qualquer base para decimal, utilizando apenas a representação do número em potências da base. Vamos agora fazer o caminho inverso, convertendo números decimais em binário e hexadecimal. O algoritmo é o mesmo para ambos os casos. REPITA: Dividir o número decimal pela base; Extrair o resto como algarismo e colocá-lo à esquerda do anterior (ou, ao final, juntar os restos de “trás pra frente” para formar o número na nova base). ATÉ quociente da divisão igual a 0. Nada melhor que um exemplo, não acham? Vamos converter o número 451 de decimal para binário com divisões sucessivas por 2, até que o quociente seja zero. Figura 23. Quociente igual a zero QUOCIENTE IGUAL A ZERO! Fonte: Elaborado pela autora. Portanto: 45110 = 1110000112. Quer conferir? Basta fazer a conta inversa. Utilizando o mesmo número decimal, convertendo, agora, para hexadecimal com divisões sucessivas por 16, até que o quociente seja zero. 34 CAPÍTULO 2 • OS NÚMEROS E OS COMPUTADORES Figura 24. Hexadecimal com divisões QUOCIENTE IGUAL A ZERO! Fonte: Elaborado pela autora. Portanto: 45110 = 1C3h (lembre-se de que C=12). Para finalizar, precisamos converter de binário para hexadecimal e vice-versa. Agora podemos responder por que utilizamos base 16. Porque podemos escrever um algarismo hexa com 4 bits, facilitando muito a utilização de números binários. Vamos usar essa propriedade. De binário para hexadecimal: cada conjunto de 4 bits representa um dígito em hexadecimal, pois com 4 bits podemos escrever 16 números diferentes (24 = 16). Exemplo: 0001 1100 00112 separando o número em grupos de 4 (começando pela direita), temos: 00012 = 1h; 11002 =Ch; 00112=3h. Então 0001110000112 = 1C3h. De hexadecimal para binário: analogamente ao item anterior, cada dígito em hexadecimal é convertido em 4 dígitos binários. Exemplo: 1C3h convertendo cada dígito em hexa em binários, temos: 1h = 00012 ; Ch = 11002; 3h=00112. Então 1C3h = 0001110000112. (Figura 25 ). Figura 25. Conversão hexa binário. Fonte: Elaborado pela autora. 35 OS NÚMEROS E OS COMPUTADORES • CAPÍTULO 2 Lógica digital As portas lógicas são circuitos eletrônicos (hardware) elementares de um sistema de computação. Uma operação lógica realizada sobre um ou mais valores lógicos produz um resultado lógico, conforme a regra definida para essa operação. Os valores resultantes de uma operação lógica podem ser verdadeiro (representado pelo valor 1) ou falso (representado pelo valor 0). Nesta seção, conheceremos as portas lógicas, como representá-las e como desenvolver expressões lógicas. Analise comigo a seguinte sentença: Vou à praia se for domingo E estiver fazendo sol. Veja que para que eu vá a praia, é necessário que ocorram duas condições verdadeiras. Considere, agora, algumas possibilidades. » Hoje é domingo e está chovendo não irei a praia, pois não está fazendo sol. » Hoje é segunda e faz sol não irei a praia, pois não é domingo. » Hoje é segunda e está chovendo não irei a praia, pois não e domingo nem está fazendo sol. » Hoje é domingo e faz sol. Eba!!! Praia, aqui vou eu!!! Se tomarmos o resultado “vou à praia” como verdadeiro, podemos ver que, nesse caso, só ocorrerá quando ambas as condições forem satisfeitas. Não falei nada antes, mas você já conheceu uma porta lógica: a porta AND. As combinações possíveis que fizemos é o que chamamos de tabela-verdade. Com ela, avaliamos todas as possibilidades e em que situações teremos resultados verdadeiros. As portas estão sintetizadas no quadro 2 e serão apresentadas em detalhes logo após. Quadro 2. Portas lógicas. AND Resultado verdadeiro se ambas as condições forem verdadeiras OR Resultado verdadeiro se pelo menos uma condição for verdadeira NOT Inverte o valor de entrada NOR Inverte o resultado da operação OR NAND Inverte o resultado da operação AND XOR Resultado verdadeiro se as entradas forem diferentes (apenas uma verdadeira) Fonte: Elaborado pela autora. Para cada uma das portas lógicas, vamos mostrar a expressão lógica, a representação gráfica e a respectiva tabela-verdade. 36 CAPÍTULO 2 • OS NÚMEROS E OS COMPUTADORES Porta lógica AND Resultado verdadeiro se, e somente se, ambas as condições forem verdadeiras. A operação é representada pelo símbolo de multiplicação ( “*”, “x” ou “.”) : X = A * B Representação gráfica: Fonte: Elaborado pela autora. Tabela-verdade: Fonte: Elaborado pela autora. Porta lógica OR Resultado verdadeiro se pelo menos uma condição for verdadeira A operação é representada pelo símbolo de adição (+): X = A + B Representação gráfica: Fonte: Elaborado pela autora. 37 OS NÚMEROS E OS COMPUTADORES • CAPÍTULO 2 Tabela-verdade: Fonte: Elaborado pela autora. Porta lógica NOT Inverte o valor de entrada. A operação é representada por uma barra sobre a entrada: X = A Representação gráfica: Fonte: Elaborado pela autora. Tabela-verdade: Fonte: Elaborado pela autora. Porta lógica NOR Inverte o resultado da operação OR. A operação é representada por uma barra sobre a expressão: X = A + B 38 CAPÍTULO 2 • OS NÚMEROS E OS COMPUTADORES Representação gráfica: Fonte: Elaborado pela autora. Tabela-verdade: Fonte: Elaborado pela autora. Porta lógica NAND Inverte o resultado da operação AND. A operação é representada por uma barra sobre a expressão: X = A * B Representação gráfica: Fonte: Elaborado pela autora. Tabela-verdade: Fonte: Elaborado pela autora. 39 OS NÚMEROS E OS COMPUTADORES • CAPÍTULO 2 Porta lógica XOR Resultado verdadeiro se as entradas forem diferentes (apenas uma verdadeira). A operação é representada pelo símbolo ⊕: X = A ⊕ B Representação gráfica: Fonte: Elaborado pela autora. Tabela-verdade: Fonte: Elaborado pela autora. Agora, nada melhor que um exemplo daqueles. Considere a expressão lógica a seguir: Vamos construir a tabela-verdade e, em seguida, a representação gráfica dessa expressão. Pela ordem de precedência das operações, primeiro executamos a operação NOT B, para, em seguida, executar a operação AND e por fim a operação OR. Como temos três entradas, teremos oito combinações possíveis na tabela-verdade (não se lembra? 23 = 8). A solução está ilustrada na Figura 26. As três primeiras colunas mostram as possíveis entradas; e as seguintes, o resultado das operações realizadas. Figura 26. Construção de uma tabela-verdade. Fonte: Elaborado pela autora. 40 CAPÍTULO 2 • OS NÚMEROS E OS COMPUTADORES Podemos, então, construir a representação gráfica. Novamente seguiremos a mesma ordem utilizada na construção da tabela. O resultado está ilustrado na Figura 27 Figura 27. Construção da representação gráfica. Fonte: Elaborado pela autora. álgebra booleana A álgebra booleana é a parte da matemática que trata de regras e elementos de lógica. O nome é uma homenagem ao matemático George Boole (1815-1864), por ter desenvolvido o primeiro sistema formal para raciocínio lógico (lógica booleana), semelhante ao sistema algébrico, que trata as variáveis e as operações com essas variáveis, utilizando valores binários 0 e 1. O valor 1 equivale à condição verdadeira, e o valor 0 à condição falsa. Uma expressão lógica pode ser simplificada garantindo, assim, circuitos mais simples e mais baratos de serem produzidos. Essa simplificação é realizada, utilizando os postulados e propriedades da álgebra de Boole. Postulados Figura 28. Postulados. Fonte: Elaborado pela autora. 41 OS NÚMEROS E OS COMPUTADORES • CAPÍTULO 2 Propriedades Figura 29. Propriedades. Fonte: Elaborado pela autora. As dez primeiraspropriedades podem ser facilmente comprovadas, se fizermos a leitura como uma operação lógica. Tomando como exemplo a propriedade 1, sabemos que a operação OR é verdade se pelo menos uma entrada for verdade. Se a operação efetua um OR com o valor falso, representado pelo 0, o resultado dependerá apenas da outra entrada. Se for verdade, o resultado será verdade (1+0) e se for falso, o resultado será falso (0+0). Conclusão: o resultado é o valor da entrada variável (X). O mesmo raciocínio vale para as demais operações. Fonte: Elaborado pela autora. As demais propriedades se assemelham com as que conhecemos da álgebra, com exceção das propriedades a partir da 16ª. Para evidenciarmos a importância das propriedades na simplificação de circuitos, vamos tomar como exemplo a expressão lógica dada por: 42 CAPÍTULO 2 • OS NÚMEROS E OS COMPUTADORES Construindo a representação gráfica, como já aprendemos, teremos: Figura 30. Representação gráfica. Fonte: Elaborado pela autora. Agora, considerando as propriedades da álgebra booleana, vamos simplificar este circuito. Indicamos em vermelho em que parte a regra está sendo aplicada. Figura 31. Simplificação do circuito. Fonte: Elaborado pela autora. Na primeira linha, aplicamos a lei de Morgan, considerando a operação NAND. Em seguida, utilizamos novamente a lei de Morgan, mas dessa vez para a operação NOR. Na etapa seguinte, a propriedade 9 nos diz que o “inverso do inverso” é o próprio valor e, para terminarmos, a propriedade de consenso faz a última simplificação. Por fim, vamos redesenhar o circuito. Fonte: Elaborado pela autora. 43 OS NÚMEROS E OS COMPUTADORES • CAPÍTULO 2 Podemos observar nesse exemplo que a expressão inicial pode ser reduzida a uma simples operação OR. Imagine o quanto podemos economizar em circuitos? Importante Estamos utilizando uma notação semelhante à álgebra, mas o significado das operações é diferente. É importante lembrar que estamos falando de operações lógicas e os sinais + e * devem ser lidos como operadores lógicos. Dica: em vez de ler “um mais um igual a um”, leia “verdadeiro OR verdadeiro igual a verdadeiro”. Não faz mais sentido. Sintetizando Vimos até agora: » Como fazer operações com as bases binária e hexadecimal. » Como representar números negativos e caracteres. » Como realizar e representar operações lógicas. 44 Introdução A partir desta aula, estudaremos os componente que definem a arquitetura de um computador. Nada mais importantes para a existência de um computador do que o processador, então, é por ele que começaremos. Popularmente, diz-se que o processador é o “cérebro” do computador, título que, no meu entendimento, não é merecido. Ele executa o que é comandado e o faz corretamente, mas é isso. Cabe ao projetista cuidar para que a execução ocorra e cabe ao desenvolvedor pensar no que será executado. Essa ideia é fundamental para que possamos compreender o papel de cada componente. Mesmo um computador com grande poder computacional depende dos comandos que recebe para atuar como esperado. Atenção! Nada de sair por aí dizendo que “foi ele que fez”. A parte legal é entendermos como a mágica acontece e, para isso, convido vocês a explorar o interior da alma do processador. Objetivos » Descrever os componentes do processador. » Analisar o ciclo de instruções. » Identificar características relevantes para o desempenho do computador. Como funciona o processador Já vimos na aula 1, quando apresentamos a máquina de Von Neumman, que o processador é composto de subunidades, cada qual com a sua função. Para entendermos a organização do processador, vamos estudar a contribuição de cada subunidade para a execução das funções que devem ser realizadas. Segundo Stallings (2017), é esperado que o processador seja capaz de: 3CAPÍTULOVOSSA MAJESTADE, O PROCESSADOR 45 VOSSA MAJESTADE, O PROCESSADOR • CAPÍTULO 3 » Realizar busca de instruções na memória; » Interpretar as instruções para determinar a ação que deverá tomar; » Realizar busca dos dados necessários para execução da instrução; » Executar a instrução; » Armazenar, se for o caso, o resultado da execução. Com essas funções em mente, podemos associar cada tarefa à subunidade responsável por executá-la: Considerando as funções descritas, percebemos a necessidade de armazenar dados temporariamente para que sejam lidos e/ou escritos na memória. Esses dados são armazenados em registradores. Semelhante ao que estudamos na composição de um sistema computacional, o caminho utilizado para conexão entre os registradores e a unidade lógica aritmética (ULA) é denominado barramento interno do processador. Falamos apenas de dois registradores (RDM e REM), mas existem outros, como veremos a seguir. Os registradores Registradores são pequenas memórias internas do processador. A quantidade e o tamanho dos registradores são características de um dado processador. O conteúdo armazenado é temporário, perdido quando o computador é desligado. Importante Não podemos falar em upgrade de registradores, pois são componentes internos do processador. 46 CAPÍTULO 3 • VOSSA MAJESTADE, O PROCESSADOR O tempo de acesso aos registradores equivale ao tempo gasto em um ciclo de memória, considerando que o tempo de acesso é o tempo necessário para que a memória coloque a informação desejada no barramento de dados depois da identificação do endereço. Possuem capacidade para armazenar um único dado ou endereço com alguns pouco bits. Tipicamente, possuem capacidade que varia de 8 a 128 bits. O tamanho do registrador define, por exemplo, capacidade de endereçamento de memória, quantidade de instruções disponíveis e tamanho da palavra utilizada pelo processador. Vamos exemplificar: Considere um processador com REM de 32 bits. Como REM é o registrador de endereços, podemos afirmar que a quantidade máxima de endereços que pode ser acessada equivale a 232 ou 4G endereços. Alguns registradores podem ser acessados e são visíveis ao programador e outros somente pelo próprio processador. Na família Intel, os processadores de uso geral são identificados por AX, BX etc. Os registradores de controle com finalidade específica, além do RDM e do REM, já vistos na aula anterior, são: » RI (registrador de instruções): armazena a instrução que está em execução. » PC (contador de programa): armazena o endereço da próxima instrução que será executada. » PSW (palavra de estado do processo): armazena informações sobre o estado da execução em um dado momento. Diferente dos demais, cada bit ou conjunto de bits possuem um significado. » Esses registradores são fundamentais para que a execução concorrente de programas seja possível, como veremos mais à frente ao tratarmos das interrupões. Como exemplo, a figura 28 mostra os registradores do Intel® Core i7. Os registradores EAX, EBX, ECX e EDX são de uso geral e podem ser utilizados em partes de 8 (AH e AL, por exemplo) ou 16 bits (AX, por exemplo) para manter a compatibilidade com modelos anteriores. Atenção O nome atribuído aos registradores pode variar em função do fabricante do processador. O importante é compreender que há um (ou mais de um) registrador que possui a função indicada. 47 VOSSA MAJESTADE, O PROCESSADOR • CAPÍTULO 3 Figura 32. Registradores Intel Core i7. Fonte: (TANEMBAUM; AUSTIN, 2013, p.277). Conjunto de instruções de um processador O conjunto de instruções do processador é, de fato, o que o processador “sabe” fazer. São os comandos que o processador reconhece e executa. Cada instrução é identificada por um código de operação (ou OpCode) que será executada em operandos. A quantidade de operandos depende da instrução. Existem instruções que não possuem nenhum operando e outras que podem ter até três. Atenção Lembre-se de que 232 = 22 x 230 = 4 G. Não tem o “B” de bytes, pois estamos falando de endereços e não de bytes. São 4 Giga-endereços. 48 CAPÍTULO 3 • VOSSA MAJESTADE, O PROCESSADOR Figura 33. Código deoperação e operandos. Fonte: Elaborado pela autora. A programação em Assembly utiliza mnemônicos para idenficar as instruções. Tomando a família Intel © como exemplo, algumas instruções são apresentadas no Quadro 3. Quadro 3. Mnemônicos Intel ®. OpCode Significado MOV Move dados entre memória e registrador ADD Executa operação de soma JMP Executa desvio incondicional CMP Compara AND Executa operação AND bit-a-bit Fonte: Intel ®. As instruções são categorizadas em: Figura 34. Categorias das instruções. Fonte: Elaborado pela autora. As instruções possuem formatos diferentes em função da quantidade de operandos necessários. Novamente vamos reforçar que o OpCode e a forma como as instruções tratam os operandos dependem exclusivamente do fabricante do processador. Os formatos ilustrados na figura 35 são usualmente encontrados. 49 VOSSA MAJESTADE, O PROCESSADOR • CAPÍTULO 3 Figura 35. Instruções: formatos. Fonte: (TANENBAUM; AUSTIN, 2013, p. 285). Na Figura 36, podemos ver alguns exemplos de instruções com um, dois e três operandos. Tomando como exemplo a operação ADD, que executa uma adição com três operandos, os valores de OP2 e OP3 são somandos, e o resultado é atribuídos à OP1. Em operações desse tipo com apenas dois operandos, o resultado da operação é, em geral, atribuído ao primeiro. Figura 36. Exemplos de instruções. Fonte: Elaborado pela autora. Lembrando o que foi mostrado quando falamos de registradores, podemos concluir que a quantidade de instruções que um processador depende do tamanho do RI. Imagine, por Saiba mais Quer conhecer mais sobre assembler de processadores Intel de 64 bits? Veja em: https://software.intel.com/en-us/ articles/introduction-to-x64-assembly. 50 CAPÍTULO 3 • VOSSA MAJESTADE, O PROCESSADOR exemplo, um processador cujo RI possui 8 bits. Como esse é o registrador que armazena a instrução que está sendo executada, podemos afirmar que o conjunto de instruções pode ter até 28 instruções distintas, ou seja, 256 instruções. Repare que as instruções podem fazer referência a endereços de memória, registradores ou até mesmo valores. Então, além da quantidade de operandos, a forma como ele é endereçado também é importante. Os modos de endereçamento podem ser (Figura 37): Figura 37. Modos de endereçamento. Fonte: Elaborado pela autora. No modo imediato, um valor é atribuído diretamente ao endereço apontado. Bastante simples e rápido, porém pouco flexível. No modo direto, o valor está em um determinado endereço de memória ou registrados. É mais flexível que o modo imediato, mas também é limitado. O modo indireto é o mais flexível e com maior abrangência, mas, como esperado, com operação mais complexa e com mais acessos à memória. Para ilustrarmos cada forma de endereçamento, vamos ver o exemplo a seguir. Considere um processador com um conjunto de instruções que emprega vários modos de endereçamento. A memória principal possui endereços de 16 bits, e o mapa de memória está representado no Quadro 4. Quadro 4. Exemplo: mapa de memória. ENDEREÇO CONTEÚDO 12B9 7C 12BA 82 12BB 12 12BC BE 12BD 9ª 12BE 75 Fonte: Elaborado pela autora. a. A instrução possui o modo direto, e o operando possui o valor 12B9. b. A instrução retornará 7C, pois será atribuído o conteúdo do endereço 12B9. 51 VOSSA MAJESTADE, O PROCESSADOR • CAPÍTULO 3 c. A instrução usa o modo imediato, e o operando possui o valor 12BA. d. A instrução retornará 12BA, pois será atribuído valor 12BA e não o conteúdo do endereço. e. A instrução usa o modo indireto, e o operando possui o valor 12BB. A instrução retornará 75, pois 12BB aponta para o valor 12, e o endereço tem 16 bits. Dessa forma, a resposta será o conteúdo de 12BE (O valor “12” ocupa 8 bits. Os outros 8 bits então no endereço 12BC). Ciclo de execução de instruções A execução de uma instrução utiliza diferentes partes do processador. O que acontece do momento em que a instrução é iniciada até o seu término é chamado de ciclo de instrução. Como vimos na máquina de Von Neumann, o processador possui basicamente duas unidades responsáveis pela execução de uma instrução: a unidade de controle e a unidade lógico-aritmética. Os elementos que atuam em cada função estão apresentados na Figura 38. Figura 38. Componentes do processador. Fonte: Elaborado pela autora. O ciclo de execução de uma instrução começa com a decodificação da instrução, passando pela busca de operandos, execução propriamente dita e, finamente, pelo armazenamento do resultado, se for o caso (Figura 39). A instrução não é interrompida durante o ciclo. As instruções demoram tempos diferentes para serem executadas. Em uma situação ideal, cada instrução deveria ser executada em um ciclo de clock. 52 CAPÍTULO 3 • VOSSA MAJESTADE, O PROCESSADOR Figura 39. Ciclo de instrução. Fonte: Elaborado pela autora. O ciclo de busca também pode ser detalhado, como mostra a Figura 39. A unidade de controle alimenta o registrador PC e MAR (REM). O endereço é colocado no barramento de endereço. A memória responde ao colocar o dado no barramento de dados, alimentando o registrador MBR (RDM). A instrução será colocada no registrador IR, ficando pronta para execução. Figura 40. Execução de uma instrução. Fonte: (STALLINgS, 2017, p. 425). O ciclo apresentado mostra que nem todos os componentes estão em uso simultaneamente. Isso parece um desperdício? Sim!! ! ! A instrução é executada em partes por unidades distintas dentro do processador. Para exemplificar uma situação análoga, imagine uma linha de montagem de um carro, como ilustrado Importante Clock do processador: é um contador de tempo, em que o tempo de cada pulso é denominado ciclo. O clock alterna estados 0 e 1. Um pulso é o tempo gasto entre dois estados iguais. É o responsável por definir a frequência do processador, em geral, medido em megahertz ou gigahertz. Não falamos em “velocidade” e sim em “frequência” para identificar o desempenho de um processador, mesmo não sendo o único indicador. O clock representa a quantidade de eventos realizados por segundo. Se um processador consegue realizar cem ciclos em um segundo, o clock é de 100 Hz. Megahertz e gigahertz representam milhões de ciclos e bilhões de ciclos, respectivamente. 53 VOSSA MAJESTADE, O PROCESSADOR • CAPÍTULO 3 na Figura 41. A cada etapa, uma nova peça é adicionada até que o carro esteja completo. Quando o chassi, montado na etapa 1, é finalizado, passa-se para a segunda fase e novo chassi poderá começar a ser montando enquanto o motor é inserido na etapa seguinte. Imagine se um novo carro só começasse a ser produzido quando outro fosse terminado???? Figura 41. Linha de montagem de um carro. Fonte: Elaborado a partir de imagens disponíveis em: https://www.kisspng.com/png-car-assembly-line-factory-clip-art- assembly-clipar-177909/. Vamos fazer uma conta rápida? Para simplificar, considere que cada etapa dure 1h. Como são 5 etapas, cada carro seria produzido em 5 horas. Se cada carro tiver que ser produzido integralmente para que a produção de outro comece, a produção de 10 carros levaria 50 horas. Pensando agora na linha de montagem, teremos o seguinte esquema (Figura 42): Figura 42. Linha de produção com 5 estágios. Fonte: Elaborado pela autora. 54 CAPÍTULO 3 • VOSSA MAJESTADE, O PROCESSADOR Veja que os dez carros foram produzidos em 14h, em vez das 50h gastas inicialmente. Muito melhor, não acha? De uma forma geral, podemos dizer que a produção de n carros em x estágios, cada um com um tempo t, será em: P = [ x + (n - 1) ] * t No exemplo: x = 5; n =10; t = 1h. Então: P = 5 + 9 = 14h Na computação, essa técnica é conhecida como pipeline. Os estágios de “produção” são os estágios de execução de uma instrução, e os “carros” são as instruções de um mesmo programa. O caso apresentado representa um pipeline ideal, mas sabemos que nem todas as etapas duram o mesmo tempo. Além disso, etapas mais rápidas podem depender de retorno de etapas mais lentas, reduzindo a eficiênciado processo. Para compensar, algumas estratégias são adotadas para aumentar o desempenho, como, por exemplo, a predição de desvio que “tenta adivinhar” qual será o resultado de uma operação condicional. Já aprendemos que um programa é composto por várias instruções, que são executadas em uma determinada sequência. Até aí, nada de novo. Sabemos também que o processador somente executa um programa por vez (considerando um núcleo). Nada de novo, também. Ora! Então por que temos a sensação de vários programas sendo executados ao mesmo tempo? Isso acontece porque existe o mecanismo de interrupção, que veremos a seguir. Interrupções Interrupção é o nome dado à mudança no fluxo de execução de um processo provocada por uma ação de algum dispositivo de hardware. Lembre-se do que falamos na aula 1. Nenhum software poderá interromper um programa em execução, pois, para que possa fazer isso, o programa deveria estar executando e, como vimos, isso não é possível em um mesmo processador. As interrupções são basicamente de dois tipos: » Interrupções mascaráveis (IRQ): são aquelas que podem ser ignoradas a partir de uma configuração do sistema. Existe uma instrução específica para “desligar” as interrupções. Saiba mais Quer conhecer mais sobre pipeline? Veja Arqutietura e organização de computadores, de Stallings, na biblioteca virtual. 55 VOSSA MAJESTADE, O PROCESSADOR • CAPÍTULO 3 Interrupções não mascaráveis (NMI): são interrupções que não podem ser desabilitadas, pois podem comprometer a integridade do sistema. As interrupções são sinais que os dispositivos de hardware (mouse, teclado e o temporizador) enviam ao processador. Cada pedido de interrupção é identificado por um número chamado de interrupt request (IRQ). É um sinal enviando pelo barramento para o processador de forma assíncrona, ou seja, sem que o programa em execução esteja esperando que aconteça. Não podemos garantir e nem mesmo prever quando irão acontecer. Vamos por partes. O que ocorre quando mexemos o mouse, por exemplo? O dispositivo envia um sinal (IRQ) ao processador. Se as interrupções não estiverem desabilitadas (pense nisso!!!), o processador recebe o sinal e, ao terminar a instrução que está em execução, iniciará o processo de tratamento, identificando qual foi o dispositivo que solicitou atenção. Para que seja possível retornar ao ponto em que o processo estava executando, o processador deverá armazenar algumas informações antes de passar o controle para a rotina de software que irá tratar o pedido. Isso é muito importante, pois se algum outro programa executar antes, as informações relativas ao PC e PSW do programa corrente serão perdidas. Somente depois dessa etapa, o processador carrega no PC o endereço da rotina de tratamento da interrupção. Lembre-se de que o PC contém o endereço da próxima instrução que será executada. Dessa forma, o controle passa para a rotina de tratamento da interrupção. Agora, sim, estamos falando de software. A rotina de tratamento guarda o conteúdo dos demais registradores e executa o que foi Posicionamento do autor Alguns autores associam o termo exceção à “interrupção de software”. A exceção é alguma coisa que acontece de forma síncrona pelo programa, ou seja, sempre acontecerá naquele momento quando for executado. A associação tende a ser confusa por não se tratar de fato de uma interrupção. Para refletir Você certamente já passou por aquela sensação de que está tudo “congelado”. Mexe o mouse e... nada. Aperta a tecla “caps lock” e... nada. Se você considerar que tanto o mouse quanto o teclado geram interrupções para serem atendidos, o que pode ter ocorrido? Vale lembrar que processador nunca “congela”. Aliás, ele só esquenta. Não existe o estado de “processador parado”. Ele está ativo e funcionando durante todo o tempo em que o computador está ligado. 56 CAPÍTULO 3 • VOSSA MAJESTADE, O PROCESSADOR solicitado. Ao terminar, recupera o estado anterior e a execução retorna ao processo que foi interrompido. Veja a síntese do processo na Figura 43. Figura 43. Processo de tratamento de interrupção. Fonte: Elaborado pela autora. A sequência que será apresentada demostra com detalhes cada passo para execução de uma rotina de interrupção. a. Situação inicial: a aplicação está em execução no endereço 101. O PC está apontando para o próximo endereço, que seria o 102. O processo está em um estado representado por “estado AP”. Nesse momento, ocorre uma interrupção. Figura 44. Situação inicial Fonte: Elaborado pela autora. b. O processador termina a execução da instrução que está no endereço 101, salva na pilha do sistema o endereço que estava no PC (102). 57 VOSSA MAJESTADE, O PROCESSADOR • CAPÍTULO 3 Figura 45. Execução da instrução Fonte: Elaborado pela autora. c. Em seguida, salva o conteúdo do registrador PSW. Figura 46. Registrador PSW Fonte: Elaborado pela autora. d. Para passar o controle para a rotina de tratamento, o processador coloca no PC o endereço inicial da rotina, e o PSW passa a representar o estado da rotina de interrupção A. Veja que, no exemplo, o endereço inicial da rotina de tratamento da interrupção A é 500. Figura 47. Rotina de interrupção A Fonte: Elaborado pela autora. 58 CAPÍTULO 3 • VOSSA MAJESTADE, O PROCESSADOR e. A rotina guarda na pilha o conteúdo dos demais registradores antes que sejam alterados. Figura 48. Rotina salva os registradores Fonte: Elaborado pela autora. f. Quando a rotina termina, é preciso restaurar a situação anterior. A própria rotina recupera os registradores de trabalho e, na ordem, o PSW e o PC. Figura 49. PSW Rotina A Fonte: Elaborado pela autora. Figura 50. PSW estado AP Fonte: Elaborado pela autora. 59 VOSSA MAJESTADE, O PROCESSADOR • CAPÍTULO 3 g. O PC deve ser o último, pois é ele que indica onde está a próxima instrução a ser executada. Nesse exemplo, o valor 102 é recuperado, retornando ao ponto onde a aplicação estava. Vale lembrar que o armazenamento tem a estrutura de uma pilha, ou seja, o último valor armazenado será o primeiro a ser restaurado, como em uma pilha de pratos. Figura 51. Recupera PC. Fonte: Elaborado pela autora. h. Finalmente a execução retorna à aplicação. Figura 52. Retorno à aplicação Fonte: Elaborado pela autora. Agora que você já sabe de tudo isso, pense bem antes de ficar balançando o mouse quando estiver com pressa. Além de não “dar corda” no processador, atrasa muito o que está em processamento. #ficadica. Saiba mais Para conhecer a tabela de interrupções da arquietura x86, veja a página 446 do livro Arqutietura e organização de computadores, de Stallings, na biblioteca virtual. 60 CAPÍTULO 3 • VOSSA MAJESTADE, O PROCESSADOR Outras arquiteturas Até o momento, estudamos os processadores mais comuns, mas é sempre bom lembrar que existem outras arquiteturas no mercado. Alguns modelos foram projetados para redução de custos de produção; e outros, para alto desempenho. Vamos conhecer agora essas arquiteturas e para que são utilizadas. Arquiteturas CISC e RISC Até agora, estudamos processadores conhecidos como sendo de arquitetura complex instruction set computers (CISC). São arquiteturas que possuem em torno de 300 instruções, responsáveis pelo termo “complexo” na designação, além de diferentes formas de endereçamento. São utilizadas desde os computadores dos anos 1980 até os microcomputadores atuais. A indústria de computadores precisava de alguma alternativa de menor custo, mas que mantivesse o poder computacional dos computadores “de grande porte”. Produzir processadores mais rápidos e baratos foi uma das alternativas. Os processadores posteriormente apelidados de reduced instruction set computers (RISC) foram produzidos para suprir uma parte desse mercado. A proposta era a de reduzir o número de instruções disponíveis com base na frequência de uso dessas instruções e, assim, simplificar a produção dos processadores. Em contrapartida, para um mesmo programa, mais instruções eram
Compartilhar