Prévia do material em texto
Organização e Arquitetura de Computadores Aula 01 Prof. Harlei Miguel de Arruda Leite Sumário • Organização e Arquitetura • Sistema de Numeração • Números de Base • Conversão Numérica • Números Binários Negativos • Números de Ponto Flutuante • Aritmética Binária • Overflow • Código de Caracteres • Exercícios • Homework • Referências Organização e Arquitetura • Introdução – Ao descrever computadores, normalmente é feita uma distinção entre arquitetura de computador e organização de computador. • Arquitetura de Computador – Refere-se aos atributos de um sistema visível a um programador. – Ex: Conjunto de instruções, mecanismos de E/S, endereçamento, etc. • Organização de Computador – Refere-se às unidades operacionais e sua interconexões – Ex: Detalhes do hardware, tecnologia de memória, interfaces, etc. Organização e Arquitetura • Para pensar... – Saber se um computador terá uma instrução de multiplicação é uma questão de arquitetura ou de organização? – Saber se iremos implementar esta instrução por meio de uma unidade de multiplicação especial ou por um mecanismo que faça uso repetido da unidade de adição do sistema é uma questão de arquitetura ou de organização? Organização e Arquitetura • Para pensar... – Saber se um computador terá uma instrução de multiplicação é uma questão de arquitetura ou de organização? • R: É uma questão de Arquitetura – Saber se iremos implementar esta instrução por meio de uma unidade de multiplicação especial ou por um mecanismo que faça uso repetido da unidade de adição do sistema é uma questão de arquitetura ou de organização? • R: É uma questão de Organização Organização e Arquitetura • Atualidade – Atualmente, muitos fabricantes de computador oferecem uma família de modelos de computador, todos com a mesma arquitetura, mas com diferenças na organização. – Consequentemente, os diferentes modelos na família têm diferentes características de preço e desempenho. – Uma arquitetura em particular pode se espalhar por muitos anos e abranger diversos modelos de computador diferentes, com sua organização variando conforme a mudança da tecnologia Organização e Arquitetura • Atualidade – Um exemplo proeminente desses dois fenômenos é a arquitetura IBM System/370, introduzida inicialmente em 1970 e que incluía diversos modelos. – O cliente com requisitos modernos poderia comprar um modelo mais barato, mais lento, e, se a demanda aumentasse, atualizar mais tarde para um modelo mais caro e mais rápido, sem ter que abandonar o software desenvolvido. Organização e Arquitetura • IBM System/370 Sistema de Numeração • Introdução – A aritmética usada por computadores é um pouco diferente daquela utilizada pelas pessoas. A diferença mais importante é que computadores realizam operações com números cuja precisão é finita e fixa. • Números de precisão finita – Quando estamos efetuando aritmética, em geral, nem pensamos na questão de quantos dígitos decimais são necessários para representar um número. Os físicos podem calcular que existem 1078 elétrons no universo sem se preocupar com o fato de que são necessários 79 dígitos decimais para escrever esse número extenso. Nunca surge o problema do papel não ser grande o bastante para números de sete dígitos. Sistema de Numeração • Números de precisão finita – Com computadores, a quantidade de memória disponível para armazenar um número é fixada no momento em que o equipamento é projetado. A natureza finita do computador nos força a lidar somente com valores que podem ser representados em um número fixo de dígitos. Estes são chamados números de precisão finita. Sistema de Numeração • Números de precisão finita – Para estudar as propriedades dos números de precisão finita, vamos examinar o conjunto de inteiros positivos que podem ser representados por três dígitos decimais, sem qualquer ponto decimal ou sinal. Esse conjunto tem exatamente 1000 membros: 000, 001, ..., 999. Com essa restrição, é impossível expressar certos tipos de números, como 1. Números maiores que 999 2. Números negativos 3. Frações 4. Números irracionais 5. Números complexos Sistema de Numeração • Números de precisão finita – Uma propriedade importante da aritmética no conjunto de todos os inteiros refere-se ao fechamento com respeito as operações de adição, subtração e multiplicação. – Para cada par de inteiros i e j, i + j, i – j e i x j também são inteiros. O conjunto de inteiros não é fechado quanto à divisão, porque existem valores de i e j para os quais i/j não pode ser expresso como inteiro (ex: 7/2). Sistema de Numeração • Números de precisão finita – Números de precisão finita não são fechados em relação a nenhuma dessas quatro operações básicas, como mostramos a seguir, usando números decimais de três dígitos como exemplo. – 600+600 = 1200 (muito grande) – 003-005 = -2 (negativo) – 050x050 = 2500 (muito grande) – 007/002 = 3.5 (não é um inteiro) Sistema de Numeração • Números de precisão finita – As violações podem ser divididas em três classes mutuamente exclusivas: 1. Operações cujo resultado é maior que o maior número no conjunto 2. Operações cujo resultado é menor que o menor número no conjunto 3. Operações cujo resultado não é membro do conjunto Sistema de Numeração • Números de precisão finita – Como computadores têm memórias finitas e, portanto, devem necessariamente realizar aritmética com números de precisão finita, os resultados de certos cálculos serão, do ponto de vista da matemática clássica, errados. Alguns computadores têm hardware especial que detecta erros de excesso. Sistema de Numeração • Números de precisão finita – A álgebra de números de precisão finita é diferente da álgebra normal. Como exemplo, considere a lei associativa: a + (b - c) = (a + b) – c – Considerando a = 700, b = 400 e c = 300: 700 + (400 – 300) = (700 + 400) – 300 700 + 100 = 1100 – 300 – Note que resulta em um excesso na aritmética finita de inteiros de três dígitos, que acarretará em um erro que invalidará a aritmética associativa. Sistema de Numeração • Curiosidade – Como representar números gigantes? • Criando sua própria estrutura • Usando uma biblioteca específica – Referências: • https://www.ime.usp.br/~walterfm/cursos/mac0122/2004/resumo1.pdf • http://www.ttmath.org/ Números de Base • Introdução – Um número decimal comum, com o qual todos estamos acostumados, consiste em uma sequência de dígitos decimais e, possivelmente, um ponto decimal (vírgula aritmética). dn ... d2 d1 d0 . d-1 d-2 d-3 ... d-k Posição de 100 Posição de 10 Posição de 1 Posição de 0.1 Posição de 0.01 Posição de 0.001 𝑁ú𝑚𝑒𝑟𝑜 = 𝑑𝑖 × 10 𝑖 𝑛 𝑖=−𝑘 Números de Base • Exemplo Números de Base • Introdução – Quando se trata de computadores, muitas vezes é conveniente usar outras bases que não sejam 10. As bases mais importantes são 2, 8 e 16, chamados de binários, octais e hexadecimais. – Um sistema numérico de base k requer k símbolos diferentes para representar os dígitos de 0 a k-1. Números decimais são formados partir de 10 dígitos decimais. 0 1 2 3 4 5 6 7 8 9 – Números binários são construídos a partir de 2 dígitos binários 0 1Números de Base • Introdução – Números hexadecimais são construídos com 16 dígitos. Assim, precisamos de seis novos símbolos. Por convenção, usamos as letras maiúsculas de A a F para os seis dígitos depois de 9. 0 1 2 3 4 5 6 7 8 9 A B C D E F Conversão Numérica • Da base 10 para a base N – Basta fazer divisões sucessivas por N – Exemplo: Converter 1024(10) para binário (N=2) 1024(10) = 10000000000(2) Quociente Resto 1024 0 512 0 256 0 128 0 64 0 32 0 16 0 8 0 4 0 2 0 1 1 Conversão Numérica • Da base N para a base 10 – Basta fazer multiplicações sucessivas – Exemplo: Converter 1A2F(16) para decimal 1 x 163 + A x 162 + 2 x 161 + F x 160 1 x 163 + 10 x 162 + 2 x 161 + 15 x 160 1 x 4096 + 10 x 256 + 2 x 16 + 15 x 1 4096 + 2560 + 32 + 15 1A2F(16) = 6703(10) Números Binários Negativos • Introdução – Quatro sistemas diferentes para representar números negativos já foram usados em computadores digitais: 1. Magnitude com sinal 2. Complemento de um 3. Complemento de dois 4. Excesso Números Binários Negativos • Magnitude com sinal – Nesse sistema, o bit da extrema esquerda é o bit de sinal (0 é + e 1 é -). – Desvantagem: Etapa extra para definir o sinal do resultado de uma operação aritmética. – Como representar o número zero? 00000000 ou 10000000 (considerando 1 byte) – Exemplo de representação: -6 = 10000110 (considerando 1 byte) Números Binários Negativos • Complemento de um – Nesse sistema também tem um bit de sinal que é 0 para mais e 1 para menos. Para tornar um número negativo, substitua cada 1 por 0 e cada 0 por 1. Isso vale também para o bit de sinal. O complemento de um é obsoleto. – Como representar o número zero? 00000000 ou 11111111 (considerando 1 byte) – Exemplo de representação: – 7(10) = 0000111(2) – -7(10) = 11111000(2) Números Binários Negativos • Complemento de dois – Nesse sistema, também tem um bit que é 0 para mais e 1 para menos. Negar um número é um processo em duas etapas. Na primeira, cada 1 é substituído por 0 e cada 0 por 1, assim como no complemento de um. Na segunda, 1 é somado ao resultado. – A vantagem é que nesse sistema, só existe uma representação para o número 0 (00000000). A desvantagem é o fato de ser um código assimétrico, por exemplo, com oito bits em complemento de dois podemos representar os números decimais de -128 a +127. Números Binários Negativos • Complemento de dois – Exemplo de representação: – Para converter -7(10), primeiro descobrimos a representação binária de 7(10) 7(10) = 00000111(2) – Assim como o complemento de um, iniciamos com 1 e invertemos os dígitos -7(10) = 11111000(2) Por fim, somamos 00000001(2) -7(10) = 11111001(2) Números Binários Negativos • Excesso – A notação por excesso 2m-1 para números de m bits, representa um número armazenando-o como a soma dele mesmo com 2m-1. – Exemplo: Para números de 8 bits, m = 8, o sistema é denominado excesso 128 e um número é armazenado como seu verdadeiro valor mais 128. O número -3 se torna -3 + 128 = 125 = 01111101(2) – Os números de -128 a +128 mapeiam para 0 a 255, todos os quais podem ser expressos como um inteiro positivo de 8 bits. Números de Ponto Flutuante • Introdução – Até por volta de 1980, cada fabricante de computador tinha seu próprio formato de ponto flutuante. Não é preciso dizer que todos era diferentes e alguns efetuavam aritmética incorretamente. – No final da década de 1970, o IEEE instituiu um comitê para padronizar a aritmética de ponto flutuante. O trabalho levou ao IEEE Standard 754. A maioria das CPUs de hoje possuí instruções de ponto flutuante que obedecem ao padrão IEEE. – O padrão foi desenvolvido pelo professor de matemática de Universidade de Berkeley William Kahan. Números de Ponto Flutuante • Formato de ponto flutuante padrão IEEE 754 (a) Precisão Simples (32 bits) (b) Precisão Dupla (64 bits) Expoente Sinal Mantissa 1 bit 8 bits 23 bits Expoente Sinal Mantissa 1 bit 11 bits 23 bits Números de Ponto Flutuante • Exemplo – Converter 25.5(10) para o padrão IEEE 754. – Primeira etapa: Representar o número na forma 1.### x 2### Isso é alcançado por meio de divisões ou multiplicações. Se utiliza multiplicações quando o número é < 1 e divisões quando o número é > 1. Nesta etapa, o sinal negativo do número, caso exista, deve ser ignorado. Números de Ponto Flutuante • Exemplo 25.5 / 2 = 12.75 12.75 / 2 = 6.375 6.375 / 2 = 3.1875 3.1875 / 2 = 1.59375 Ao final desta etapa, podemos representar 25.5(10) da seguinte maneira 1.59375 x 24 Números de Ponto Flutuante • Exemplo – Segunda etapa: Calcular a mantissa com base na parte fracionária Esse processo se da sempre através de multiplicações sucessivas, até que o resultado seja 0, ou até um máximo de 23 multiplicações. No exemplo, a parte fracionária é 0. 59375, portanto 0.59375 x 2 = 1.1875 0.1875 x 2 = 0.375 0.375 x 2 = 0.75 0.75 x 2 = 1.5 0.5 x 2 = 1.0 0.0 x 2 = 0.0 (encerra o procedimento) Números de Ponto Flutuante • Exemplo Mantissa calculada = 100110 Como a mantissa possuí somente 6 bits, completamos com 0 até completar 23 bits. Mantissa: 10011000000000000000000 Números de Ponto Flutuante • Exemplo – Terceira etapa: Coletaras informações necessárias para montar a representação no padrão IEEE 754. – Sinal: 0 para positivo e 1 para negativo No exemplo, o sinal é 0. – Expoente: 4 (calculado na primeira etapa) Porém, esse expoente deve ser acrescido de 127 (notação por excesso) – 4 + 127 = 131 = 10000011(2) Números de Ponto Flutuante • Exemplo – Mantissa: 10011000000000000000000 – Quarta etapa: Montar a representação no padrão IEEE 754 0 10000011 10011000000000000000000 Expoente Sinal Mantissa 1 bit 8 bits 23 bits Números de Ponto Flutuante • Converter um número no padrão IEEE 754 para decimal 1 10000010 11010000000000000000000 – Primeira etapa: Extrair os campos Sinal: 1 (1 é negativo e 0 positivo) Expoente: 10000010 (130 em decimal) Mantissa: 11010000000000000000000 Números de Ponto Flutuante • Converter um número no padrão IEEE 754 para decimal – Segunda etapa: Calcular o expoente – O expoente foi acrescido de 127 por conta da notação por excesso. Portanto, devemos subtrair 127 do expoente. – Expoente = 130 – 127 = 3 Números de Ponto Flutuante • Converter um número no padrão IEEE 754 para decimal – Terceira etapa: Calcular o valor decimal da mantissa Basta multiplicar cada bit da mantissa pela potência de 2 correspondente àquela posição e somar todos os resultados. Aqui todas as potências são negativas, pois estamos calculando uma fração e não um número inteiro. 1 x 2-1 = 0.5 1 x 2-2 = 0.25 0 x 2-3 = 0.0 1 x 2-4 = 0.0625 0 x 2-5 = 0.0 0.5 + 0.25 + 0.0625 = 0.8125 Números de Ponto Flutuante • Converter um número no padrão IEEE 754 para decimal – Quarta etapa: Montar a representação decimal Basta juntar o sinal, o expoente e a mantissa, para montar o valor decimal na forma 1.### x 2###. 1.8125 x 23 = -14.5 Aritmética Binária • Adição – A tabela deadição para números binários é apresentada abaixo Adendo 0 0 1 1 Augendo +0 +1 +0 +1 Soma 0 1 1 0 Vai-um 0 0 0 1 Aritmética Binária • Adição – Dois números binários podem ser somados, iniciando no bit da extrema direita e somando-se os bits correspondentes nas parcelas. – Se for gerado um vai-um, ele é transportado uma posição à esquerda, assim como na aritmética decimal. Aritmética Binária • Adição – Aritmética do complemento de um Nesta notação, um vai-um gerado pela adição dos bits da extrema esquerda é somado ao bit da extrema direita. 00001010 11111100 ________ 1 00000110 Vai um 1 00000111 Aritmética Binária • Adição – Aritmética do complemento de dois Nesta notação, um vai-um gerado pela adição dos bits da extrema esquerda é simplesmente descartado. 00001010 11111101 _________ 1 00000111 Descartado Aritmética Binária • Curiosidade – Em ambas as aritméticas, pode ocorrer excesso. – A maioria dos computadores preserva o vai-um do bit de sinal. Overflow • Suponha que dois números binários sejam representados utilizando 5 bits com complemento de dois. – Suponha também que a soma destes números também deva ser representada por 5 bits em complemento de dois. Overflow • Discussão – No exemplo, a resposta deveria ser =17, mas a magnitude 17 requer mais que quatro bits para representá-la. – Em uma operação, o resultado pode ser maior do que pode ser mantido na quantidade disponível de bits. • Overflow (transbordo, estouro) – A Unidade Lógica Aritmética precisa sinalizar a ocorrência de um overflow pra que não haja qualquer tentativa de usar o resultado. Código de Caracteres • Introdução – Cada computador tem um conjunto de caracteres que ele usa. O conjunto mínimo contém as 26 letras maiúsculas, as 26 letras minúsculas, os algarismos de 0 a 9 e um conjunto de símbolos especiais, como espaço, sinal de menos, vírgula e retorno ao início da linha. – Para transferir esses caracteres para o computador, um número é designado a cada um, por exemplo, a = 1, b = 2, ... Z = 26, + = 27, - = 28, etc. – O mapeamento de caracteres para números inteiros é denominado código de caracteres. É essencial que computadores que se comunicam usem o mesmo código ou não conseguirão se entender. – Por essa razão, foram desenvolvidos padrões. Código de Caracteres • ASCII – Um código de ampla utilização é denominado ASCII (American Standard for Information Interchange – Código Padrão Americano para Troca de Informações). – Cada caractere ASCII tem 7 bits, o que permite 128 caracteres no total. Porém, como os computadores são orientados a byte, cada caractere ASCII é armazenado em um byte separado. Código de Caracteres • ASCII Código de Caracteres • Unicode – O código ASCII é bom para a língua inglesa, mas não tão bom para outros idiomas. O francês precisa de acentos (por exemplo, système); o alemão precisa de sinais diacríticos (por exemplo, für) e assim por diante. – Um grupo de empresas de computadores resolveu esse problema formando um consórcio para criar um novo sistema, denominado Unicode, e transformando-o em um padrão internacional (IS 10646). – A ideia que fundamenta o Unicode é designar a cada caractere e símbolo um valor único de 16 bits, denominado ponto de código. Com símbolos de 16 bits, o Unicode tem 65.536 pontos de código. Código de Caracteres • UTF-8 – Embora melhor que ASCII, o Unicode por fim esgotou os pontos de código e também requer 16 bits por caractere para representar o texto ASCII puro, o que é um desperdício. – O UTF-8 foi desenvolvido para resolver essas questões. Ele é denominado Formato de Transformação UTF-8 UCS em que UCS significa Universal Character Set (Conjunto de Caracteres Universal), que é Unicode na essência. – Códigos UTF-8 têm tamanho variável, de 1 a 4 bytes, e podem codificar cerca de dois bilhões de caracteres. Ele é o conjunto de caracteres dominante em uso na Web. Exercícios • Converta os seguintes números para binário, octal e hexadecimal. Posteriormente, retornar para decimal: (a) 1984(10) (b) 4000(10) (c) 8192(10) • Converta o seguinte número decimal para o padrão IEEE 754 (a) 0.203125(10) • Converta o seguinte no padrão IEEE 754 para decimal (a) 0 10000100 01101000000000000000000 Referências • Stallings, W. Arquitetura e Organização de Computadores. 8ª Edição, Editora Pearson, 2010. • Tanenbaum, A. S.; Austin, T. Organização Estruturada de Computadores. 6ª Edição, Editora Pearson, 2013.