Baixe o app para aproveitar ainda mais
Prévia do material em texto
Capítulo 1 — Introdução ao Hardware do PC Fundamentos Como não poderia deixar de ser, o primeiro capítulo de nosso livro apresenta uma introdução sobre o funcionamento dos computadores. Independentemente se você já tem ou não alguma noção sobre o hardware de microcomputadores do tipo PC, a leitura deste capítulo é essencial. Neste capítulo apresentaremos noções teóricas importantes sobre o funcionamento desses micros, e você verá que inúmeros conceitos são apresentados de forma errônea em diversas outras publicações, o que faz com que você fique com uma idéia equivocada sobre o funcionamento dos PCs, daí a importância da leitura deste capítulo. Neste capítulo, estaremos vendo como os componentes do PC se comunicam; nos próximos capítulos da Parte 1 do livro, estaremos estudando aprofundadamente o funcionamento de cada um dos principais componentes de um PC típico. Um dos principais problemas que encontramos hoje no mercado é a classificação do micro de acordo com o processador que ele usa. Em nosso dia a dia ouvimos as pessoas dizendo “tenho um Pentium III” ou “vou comprar um Celeron” enquanto que Pentium III e Celeron são apenas os processadores da máquina e não a máquina inteira. Saber o restante dos componentes do micro, como placa-mãe, memória, disco rígido e placa de vídeo, é tão importante quanto saber o tipo de processador que a máquina usa, já que o desempenho e a qualidade geral da máquina serão dados não pelo processador, mas sim pelo conjunto de componentes da máquina. Outro conceito equivocado é o de que clock é sinônimo de velocidade, enquanto isso não é verdade. Um micro usando um processador de 1 GHz não necessariamente é mais rápido do que um micro usando um processador de 800 MHz, porque a comparação de velocidade depende não só do processador que a máquina tem, mas também dos demais componentes utilizados. Neste capítulo, exploraremos não só idéias como essas que acabamos de comentar, mas também veremos quais são as principais partes de um micro e como se relacionam entre si, além de apresentarmos diversos conceitos importantes sobre hardware que estaremos usando daqui para frente. Nos demais capítulos desse livro, nós estaremos fazendo um estudo mais aprofundado sobre cada um dos componentes do micro. Para entendermos realmente como um computador funciona, devemos, antes de mais nada, estudar como os circuitos eletrônicos usados no computador funcionam, ou melhor, como comunicam-se. O computador e seus componentes são sistemas eletrônicos digitais, funcionando e comunicando-se através de números binários, como estudaremos a seguir. Números Binários Na natureza, todo tipo de informação pode assumir qualquer valor compreendido em um intervalo de — a + . Você consegue distinguir, por exemplo, uma cor vermelha que esteja um pouco mais clara de outro tom de vermelho. Consegue distinguir um som mais alto do que outro. Consegue perceber quanto um ambiente está mais claro do que outro. Todo esse tipo de informação é conhecido como informação analógica. A construção de circuitos eletrônicos teoricamente deveria seguir os mesmos moldes da natureza a fim de se tornar o mais real possível. No entanto, na hora da construção de circuitos eletrônicos para o processamento de informações, a utilização de informações analógicas tornou-se um grande problema. Para você ter uma idéia, imagine um determinado circuito eletrônico comunicando-se com outro a uma certa distância. Vamos dizer que os dois dispositivos permitam informações analógicas. Se um dispositivo enviar um determinado valor e, durante o percurso, houver um problema qualquer (em especial, interferências eletromagnéticas), tal informação chegará alterada. O grande problema, no entanto, estará no fato de que o dispositivo receptor não terá meios de verificar se a informação era verdadeira ou não. Como aceita qualquer valor, se, em vez de “70”, chegar o valor “71”, o dispositivo terá de aceitá-lo como verdadeiro. Dessa forma, nenhum dispositivo eletrônico conseguiria funcionar corretamente. Vamos usar o exemplo de uma música gravada em uma fita cassete comum. Após, digamos, cinco anos, a mesma música ficou com um som mais “abafado”, além de “chiados” e “estalos”; enfim, ruídos. Por quê? Como o gravador registrou a informação da música na fita cassete de maneira analógica, todo e qualquer ruído do meio irá interferir no resultado final, pois, na hora de reproduzir a música, o gravador simplesmente achou que os ruídos fizessem parte dela! Isso porque, como a informação foi gravada analogicamente, poderia assumir qualquer valor, inclusive o valor “ruído”. Dispositivos eletrônicos para o processamento de informações trabalham com um outro sistema numérico: o sistema binário. No sistema binário, ao contrário do sistema decimal, só há dois algarismos: “0” e “1”. No entanto, há uma grande vantagem: qualquer valor diferente desses será completamente desprezado pelo circuito eletrônico, gerando confiabilidade e funcionalidade. Como o sistema binário representa o estado de um dedo recolhido na mão (0) ou esticado (1), por vezes o chamamos de sistema digital. Cada algarismo binário (um “0” ou um “1”) é chamado de bit (contração de binary digit). Vamos usar agora o exemplo da mesma música gravada em uma fita DAT (Digital Audio Tape, que é uma fita cassete que grava informações de maneira digital e não analógica como as fitas cassetes convencionais) no mesmo dia em que a outra e vamos supor que aquela tivesse sofrido o mesmo tipo de influência do meio. Logo estaria, como a outra analógica, cheia de interferências em sua camada magnética, representada para nós sob forma de ruído. No entanto, há uma diferença: por ter sido gravada sob a forma de informações digitais, a música está codificada sob a forma de vários “0”s e “1”s. Logo, qualquer outro valor diferente de “0” ou “1” será simplesmente ignorado pelo gravador reprodutor! Principalmente o valor “ruído”! Por isso dizemos que sistemas digitais são mais confiáveis e mais puros. Outra vantagem do sistema digital sobre o analógico é que as informações são gravadas em forma de números. Por exemplo, em uma fita DAT ou em um CD, o que há gravado não são músicas ou sons, mas sim números (veremos isso melhor no Capítulo 22). Com isso, há como usarmos mecanismos de correção de erros a fim de verificar a integridade dos dados, como explicaremos melhor no tópico Transmissão de Dados, mais adiante. Matematicamente, escrevemos um número em função da potência de sua base, mesmo que isso pareça transparente para nós, que estamos acostumados a trabalhar, no dia a dia, com a base decimal. Para um número decimal de quatro algarismos, por exemplo, cada algarismo tem os seguintes “pesos”: 103 102 101 100 Por exemplo: � 10: 1x101 + 0x100 � 100: 1x102 + 0x101 + 0x100 � 1.000: 1x103 + 0X102 + 0x101 + 0x100 � 123: 1x102 + 2x101 + 3x100 � 4.345: 4x103 + 3x 102 + 4x101 + 5x100 Compreendendo esse “desmembramento” dos números em base decimal, é facílimo entender os números binários. Cada casa binária terá um “peso” individual, sempre relativo à potência de 2 — já que estamos trabalhando com a base 2. Para um número binário de oito algarismos (8 bits), cada algarismo tem os seguintes “pesos”: 27 26 25 24 23 22 21 20 Por exemplo: � 0: 0x20 � 1: 1x20 � 110: 1x22 + 1x21 + 0x20 (eqüivalendo a 6 em decimal) � 10111: 1x24 + 0x23 + 1x22 + 1x21 + 1x20 (eqüivalendo a 23 em decimal) Conjuntos de algarismos binários (bits) formam palavras binárias que representarão números máximos bastante definidos — e relativamente pequenos. Obviamente, cada casa binária só poderá ser preenchida com dois algarismos (0 ou 1), enquanto cadacasa decimal pode ser preenchida com dez algarismos (de 0 a 9). Vamos ao exemplo de um número hipotético de quatro casas decimais. Esse número poderá ter qualquer valor de 0000 a 9999, logo poderá assumir 10.000 valores diferentes — ou seja, poderá ter 10.000 variações (ou 104 variações) — isto é, o valor da base numérica (10) elevado ao número de casas numéricas (4). Comparativamente, um número hipotético também de quatro casas — porém, agora, binárias — poderá ter qualquer valor entre 0000 e 1111, ou seja, 24 variações, ou 16 valores diferentes. É fácil, portanto, observar que estaremos muito mais limitados utilizando a base binária do que a decimal, a que estamos tão acostumados. Palavras binárias recebem nomes especiais conforme a quantidade de bits utilizada pelas mesmas, representando uma variação de números bastante definida: � Nibble: 4 bits (24 = 16 variações) � Byte: 8 bits (28 = 256 variações) � Word: 16 bits (216 = 65.536 variações) � Double Word = 32 bits (232 = 4.294.967.296 variações) � Quad Word = 64 bits (264 = 18.446.744.073.709.551.616 variações) Como você deve ter observado, cada palavra destas está presa a um número predeterminado de bits, logo o número máximo que podemos expressar utilizando cada uma delas é limitado: com um nibble só podemos representar 16 números (24); com um byte, somente 256 (28); com uma word, somente 65.536 (216) ; e assim sucessivamente. Dessa forma, também temos números “inteiros” em binário, só que, como estamos trabalhando em base 2, e não em base 10, esses números, parecem ser “quebrados” quando representados em decimal. Por exemplo, 8.192 é um número inteiro em binário, pois representa 213. Da mesma forma, 131.072 é considerado um número inteiro, pois representa 217. O sufixo K (kilo-), que, em decimal, representa 1.000 vezes (como em Km e Kg), em binário representa 210 vezes (1.024). Logo, 1 Kbyte representa 1.024 bytes, 2 Kbytes representam 2.048 bytes e assim sucessivamente. Do mesmo modo, o sufixo M (mega-) representa 220 vezes (1.048.576) e o sufixo G (giga-) representa 230 vezes (1.073.741.824), diferenciando-se completamente da representação decimal. Sufixo Quantidade Kilo (K) 210 = 1.024 Mega (M) 220 = 1.048.576 Giga (G) 230 = 1.073.741.824 Tera (T) 240 = 1.099.511.627.776 Peta (P) 250 = 1.125.899.906.843.624 Exa (E) 260 = 1.152.921.504.607.870.976 Zeta (Z) 270 = 1.180.591.620.718.458.879.424 Yotta (Y) 280 = 1.208.925.819.615.701.892.530.176 Atenção: Devemos ter muito cuidado para não cometermos falsos arredondamentos. 65.536, por exemplo, representa, em binário, 64 K (e não 65 K, como parece), assim como 157.286.400 representa 150 M (e não 157 M). Tome muito cuidado! Base Hexadecimal Desde o surgimento dos primeiros microprocessadores, as palavras binárias de dados manipuladas eram múltiplas do nibble. Sendo assim, uma outra base numérica passou a ser amplamente utilizada — a base 16 (hexadecimal) — , uma vez que o maior valor numérico que poderia ser atribuído a um nibble era 16. Dessa forma, temos: Valor decimal Valor Binário Valor Hexadecimal 0 000 0 1 0001 1 2 0010 2 3 0011 3 4 0100 4 5 0101 5 6 0110 6 7 0111 7 8 1000 8 9 1001 9 10 1010 A 11 1011 B 12 1100 C 13 1101 D 14 1110 E 15 1111 F Como você pôde observar, cada algarismo hexadecimal estará sempre representando 4 bits. Assim, F12AC é um número de 20 bits, como 129D3E12 é um número de 32 bits. A adoção da base hexadecimal para representação de números que, na verdade, estavam sendo manipulados em binários, foi quase imediata, uma vez que é muito mais fácil para o programador trabalhar com números em hexadecimal do que em binário. Imagine escrever uma soma de dois números de 32 bits! Haja tanto 0 e tanto 1! Ora, é muito mais fácil e cômodo escrever 123A do que 0001001000111010! Assim, a possibilidade de erros por parte do operador diminui bastante. Em hexadecimal, cada número de 32 bits tem somente oito algarismos, tornando o trabalho de representação muito mais fácil e, sem dúvida alguma, seguro. Trabalhando com números binários, pessoas facilmente acabam por trocar um “0” por um “1” em algum momento. Começamos a ter um grande problema. Se você visse “10” estampado em algum lugar, que valor você atribuiria a ele? Dependeria da base em que o mesmo está representado. No nosso caso, teríamos de saber se esse número está em decimal, binário ou hexadecimal, pois os valores absolutos em decimal seriam 10, 2 e 16, respectivamente. Dessa forma, precisaremos ter algum indicador de base numérica. Em informática, o mais comum é usar o símbolo “$” (dólar) ou a letra “b” para números em binário, por exemplo, $1011 ou 101”b, e a letra “h” para números em hexadecimal, por exemplo, 12h. Assim, 10 vale $1010 ou Ah. O byte é a palavra binária mais utilizada, por diversos motivos. O principal deles é o fato de que os microprocessadores se tornaram populares e passaram a ser usados em larga escala quando surgiram os modelos de oito bits, nos anos 70, sendo que esses modelos de processadores foram largamente utilizados nas mais diversas aplicações por mais de 10 anos. Devemos tomar alguns pequenos cuidados na hora de representar a abreviação de byte, a fim de que não haja confusão com a abreviação de bit. Enquanto abreviamos bit com “b” (b minúsculo), abreviamos byte com “B” (b maiúsculo). Assim, 1 KB é a representação de um kilobyte (1.024 bytes = 8.192 bits), enquanto 1 Kb é a representação de um kilobit (1.024 bits). Transmissão de Dados Normalmente quando falamos que um determinado dispositivo digital trabalha a um determinado número de bits, significa que o canal de comunicação desse dispositivo transmite e recebe essa quantidade de bits por vez, só podendo comunicar-se com dispositivos que manipulem a mesma quantidade de bits. A comunicação desses dois dispositivos, por sua vez, pode ser feita de duas maneiras: transmissão paralela ou transmissão em série. Transmissão Paralela Na transmissão paralela, todos os bits que o dispositivo transmissor é capaz de manipular são transmitidos simultaneamente ao receptor. Na Figura 1.1 mostramos a transmissão de um dado 10101110 entre dois dispositivos digitais. Figura 1.1: Comunicação paralela. A comunicação de todos os circuitos internos do PC é feita dessa maneira. Por exemplo, os atuais processadores transmitem 64 bits por vez; dessa forma, o caminho entre o processador e a memória RAM é um caminho de 64 bits, como ilustramos na Figura 1.2 (esse caminho entre o processador e a memória RAM é chamado barramento local, como estudaremos mais adiante). Figura 1.2: Exemplo de comunicação entre dois dispositivos de 64 bits. Citamos a comunicação do processador com a memória RAM apenas para exemplificar. Como dissemos, todos os componentes internos do micro utilizam esse método de comunicação, tais como discos rígidos, placas de vídeo, placas de som, etc. O que pode variar é a quantidade de bits que são transmitidos por vez e a velocidade com que a transmissão é feita, isto é, com que freqüência os dados são enviados do transmissor ao receptor. Clock A transmissão de dados entre o receptor e o transmissor é controlada por um sinal de controle chamado clock. Esse sinal é usado para sincronizar o transmissor com o receptor, isto é, para informar ao receptor que um dado está sendo transmitido. A Figura 1.3 mostra a transmissão de quatro dados entre o processador e a memória RAM. Repare que os dados são transmitidos na subida do pulso de clock, isto é, quando o clock passa de zero para um. Somente um dado pode ser transmitido por pulso de clock (processadores como o Athlon e o Pentium 4 e memórias RAM do tipo DDR-SDRAM e Rambus permitem que mais de um dado seja transmitido por pulso de clock, comoestudaremos em momento mais oportuno). O clock a que nos referimos aqui é o sinal clock usado na transmissão dos dados e não o clock que normalmente as pessoas se referem quando estão falando de um computador ou processador (por exemplo, processador com clock de 800 MHz). Toda transmissão paralela utiliza um sistema de clock. A comunicação do disco rígido com a placa- mãe utiliza um sistema de clock, assim como a comunicação da placa de vídeo com a placa-mãe. Esses sistemas de clock, entretanto, são independentes, isto é, o sistema de clock usado na transmissão de dados entre o processador e a memória RAM não é o mesmo usado na transmissão de dados entre o disco rígido e a placa-mãe, por exemplo. Figura 1.3: Um sinal chamado clock comanda a transferência de dados. Apenas para deixar esse conceito ainda mais claro, é válido já explicar que o clock que vimos na Figura 1.3 é o clock externo do processador (também conhecido como clock do barramento). Desde os processadores 486DX2, os processadores usados no PC utilizam um sistema de multiplicação de clock, onde o clock usado internamente pelo processador é diferente do clock usado em seu barramento local, isto é, usado na transmissão de dados entre o processador e a memória RAM. Por exemplo, um processador Pentium III de 700 MHz trabalha internamente a 700 MHz, porém externamente o seu clock é de 100 MHz. Obviamente voltaremos a explicar esse assunto em profundidade no Capítulo 6. A velocidade da transmissão paralela depende da freqüência do clock, isto é, da quantidade de pulsos que ele faz por segundo, que é medida em uma unidade chamada Hertz (Hz). Um clock de 100 MHz, por exemplo, significa que o sinal de clock usado na transmissão emite 100 milhões de pulsos por segundo. Como em cada pulso de clock um dado pode ser transmitido, aumentando-se a freqüência do clock aumentamos a velocidade com que os dados são transmitidos. Taxa de Transferência Além do clock, a velocidade de transmissão paralela depende também da quantidade de bits que são transmitidos por vez. Uma transmissão onde sejam transferidos 64 bits por vez será mais rápida do que uma transmissão onde sejam transferidos 32 bits por vez, caso seja usada uma mesma freqüência de clock. De forma que possamos comparar velocidades de transmissão de diferentes sistemas que usem diferentes quantidades de bits, a velocidade de transmissão paralela foi padronizada em bytes por segundo (B/s). Sempre que você vir qualquer dispositivo onde sua velocidade seja dada nessa unidade, significa que esse dispositivo utiliza transmissão paralela de dados. Por exemplo, discos rígidos ATA-100 têm uma taxa de transferência de 100 MB/s e unidades de CD-ROM 52x têm uma taxa de transferência máxima de 7.800 KB/s. Como você pode ver, esses dois dispositivos transmitem dados na forma paralela, já que as suas taxas de transferência estão sendo dadas em bytes por segundo. A velocidade de transmissão paralela pode ser obtida através da fórmula (a divisão por oito é feita para que o resultado seja dado em bytes por segundo): Taxa de transferência = clock (em Hz) x quantidade de bits 8 Assim, um processador que transfira dados a 64 bits por vez usando um clock de 100 MHz, terá uma taxa de transferência máxima teórica de 800 MB/s. É interessante notar que essa taxa de transferência também pode ser obtida em um sistema transferindo dados a 128 bits por vez com um clock de 50 MHz ou a 32 bits por vez com um clock de 200 MHz. Assim, um sistema que transfere uma quantidade de bits maior do que outro não é necessariamente mais rápido; depende do clock usado. Analogamente, um sistema de transferência que use um clock maior do que outro não necessariamente é mais rápido; depende da quantidade de bits que são transferidos por vez. Note que usamos a expressão “taxa de transferência máxima teórica”. Isso ocorre porque em nossos cálculos estamos levando em conta que estamos transferindo um dado por pulso de clock, sempre. Na prática, porém, essa situação raramente ocorre. Por exemplo, pode ser que o processador não use sempre todos os seus pulsos de clock para transmitir dados para a memória RAM: pode haver momentos em que o processador não terá o que transmitir para a memória RAM. Interferência Eletromagnética e Atenuação A transmissão paralela é a que oferece maior velocidade. O seu grande problema, entretanto, é com o ruído, isto é, interferência eletromagnética. Quando uma corrente elétrica passa por um fio, é criado um campo eletromagnético ao redor. Se o campo eletromagnético do fio for muito forte, será gerado um ruído no fio ao lado, corrompendo a informação que estiver sendo transmitida (ver Figura 1.4). Lembramos que as ligações existentes em uma placa de circuito impresso, chamadas trilhas, não deixam de ser fios que fazem a conexão dos diversos componentes soldados sobre a placa. Figura 1.4: Exemplo de interferência eletromagnética. Quanto maior a freqüência de operação, isto é, o clock, maior este problema. Esse é um dos motivos porque os processadores usam uma freqüência de operação externa muito menor do que a sua freqüência de operação interna. Além da interferência eletromagnética propriamente dita, há ainda o problema da atenuação, isto é, o sinal transmitido vai ficando fraco à medida em que trafega no fio, como mostramos na Figura 1.5. Quanto mais longo for o fio, mais fraco fica o sinal. A transmissão paralela tem um grande problema de atenuação de sinal, por isso quanto menor for o cabo, melhor. Esse é o motivo porque a transmissão paralela não é quase usada no exterior do micro, sendo mais usada em seu interior, como vimos discutindo. Figura 1.5: Exemplo de atenuação de sinal. Outro motivo é que a transmissão paralela usa uma quantidade alta de fios para efetuar a sua transmissão de dados. Na comunicação entre dois dispositivos de 64 bits, são necessários pelo menos 64 fios, um para cada bit de dados. Atualmente, o único dispositivo externo ao micro que utiliza comunicação paralela é a porta paralela do micro, que utiliza uma baixíssima taxa de transferência, de 150 KB/s e transmitindo apenas 8 bits por vez, justamente por conta desses problemas (as portas paralelas atualmente conseguem atingir 2 MB/s, como estudaremos no Capítulo 23). A porta paralela é usada basicamente na comunicação entre o micro e a impressora. Como a impressora é um dispositivo lento (por ser um sistema mecânico), essa baixa taxa de transferência não chega a ser um problema. Correção de Erros Os sistemas de transmissão de dados usam esquemas de correção de erros de modo a verificarem se os dados chegaram íntegros ao destino. Há vários sistemas de correção de erros. Na transmissão paralela, o mais simples chama-se checksum, e o mais usado, CRC (Cyclical Redundancy Check), que é uma variação do método checksum. O conceito básico desses sistemas é o seguinte: após serem transmitidos n dados, o transmissor soma os valores desses dados, dando uma soma (chamada checksum). Essa soma é transmitida. O receptor faz o mesmo processo, somando os dados recebidos e comparando o valor de checksum obtido com o valor de checksum que havia sido enviado pelo transmissor. Se os valores forem iguais, significa que a transmissão foi bem sucedida e os dados não foram corrompidos no caminho. Neste caso, o receptor envia uma informação chamada acknowledge (ack) ao transmissor, informando que a transmissão foi bem sucedida e que ele pode enviar o próximo grupo de dados. Caso os dados tenham sido corrompidos no caminho, o receptor envia uma informação chamada negative acknowledge (nack) ao transmissor, fazendo que o transmissor reenvie o último grupo de dados. Dessa forma, quando há problemas de ruído e atenuação no caminho entre o transmissore o receptor, na realidade o receptor tem como verificar que os dados chegaram corrompidos, pedindo um reenvio de dados ao transmissor. Dessa forma, a transmissão fica mais lenta, não porque a velocidade de clock diminua, mas porque o receptor pede um reenvio de dados e isso faz com que os dados demorem mais tempo para chegar ao seu destino. Transmissão em Série A transmissão em série, também chamada transmissão serial (embora a palavra “serial” não exista em português), difere-se da transmissão paralela por transmitir apenas um bit por vez. Logo de cara, a grande diferença entre a transmissão em série e a paralela é a velocidade de transmissão: uma transmissão paralela de 64 bits será 64 vezes mais rápida do que uma em série, caso usem o mesmo clock! Só que, por usar apenas um único fio para transmitir suas informações, a transmissão em série sofre bem menos com os problemas de ruído e atenuação, fazendo com que seja o método de transmissão preferido para dispositivos localizados fora do micro, como teclados, mouses, redes de computadores, dispositivos USB, entre outros. Assim, a maioria dos dispositivos externos ao micro usa esse método de comunicação. Nota: Note que a porta serial do micro é apenas uma das portas que oferecem esse tipo de comunicação a dispositivos externos ao micro. A comunicação em série é também utilizada em portas USB e Firewire, por exemplo, só que, por usarem um padrão próprio de comunicação, são incompatíveis com a porta serial do PC. Para que você entenda melhor essa questão, pense o seguinte: o teclado do micro utiliza uma comunicação em série com o micro, só que ele usa uma porta própria para ele, a princípio não sendo possível conectar um teclado diretamente à porta serial do micro. Existem dois tipos de transmissão em série: síncrona e assíncrona. A diferença entre eles é que o primeiro usa um fio para transmitir o sinal de clock, enquanto que o segundo, não. Transmissão em Série Síncrona Como comentamos, a transmissão em série síncrona usa um fio para a transmissão do sinal de clock, que é usado pelo receptor para saber onde começa e onde termina cada dado que está sendo transmitido, como você pode ver na Figura 1.6. Figura 1.6: Exemplo de transmissão em série síncrona. Transmissão em Série Assíncrona Nesse tipo de transmissão em série, o mesmo canal onde os dados são transmitidos é usado para a transmissão dos sinais de sincronismo entre o transmissor e o receptor. Esse é o tipo de transmissão usada nas portas seriais do micro, como veremos no Capítulo 23. Nesse tipo de transmissão, são transmitidos dois sinais de sincronismo, chamados start bit e stop bit, indicando, respectivamente, o início e o fim da transmissão de um grupo de bits, como mostramos na Figura 1.7. Figura 1.7: Exemplo de transmissão em série assíncrona. Taxa de Transferência A taxa de transferência em comunicações em série é medida em bits por segundo (bps), já que nesse tipo de transmissão os dados são enviados bit a bit. Assim, quando você vir um dispositivo onde a sua taxa de transferência é expressa em bits por segundo, você sabe estar diante de um dispositivo que usa transmissão de dados em série, como modems (velocidade de 56 Kbps, por exemplo) e redes locais (velocidade de 100 Mbps, por exemplo). Atenção: Cuidado, portanto, para não confundir bits por segundo, que indica a velocidade de transmissão em comunicações em série, com bytes por segundo, que indica a velocidade de transmissão em comunicações paralelas. Tome cuidado também para não confundir bits por segundo com baud, que é uma outra unidade de medida de transmissões em série, que explicaremos melhor no Capítulo 24. Arquitetura dos Micros do Padrão PC Em vez de perdermos tempo vendo como era o PC antigamente até chegarmos no PC atual e em vez de vermos também a maneira clássica e acadêmica de ver um computador, vamos ver logo como é um PC atual, moderno, baseado nos processadores disponíveis atualmente no mercado. Deixaremos para ver a estrutura dos PCs antigos nos Capítulos 2 a 5, quando esse assunto for mais pertinente. Figura 1.8: Arquitetura de um PC moderno típico. Na Figura 1.8 vemos a arquitetura de um PC moderno típico. Todos os componentes que mostramos na Figura 1.8 são instalados em uma placa principal, também chamada placa-mãe. Nessa placa localizam-se os circuitos de apoio (chipset) e os slots, que são conectores para a instalação de placas periféricas, tais como placas de vídeo e placas de som, além dos conectores para o processador, para a memória RAM, portas seriais, porta paralela, portas USB, conectores para os discos rígidos e muito mais. Estaremos estudando a placa-mãe em detalhes no Capítulo 12. Como comentamos no início deste capítulo, um PC não é formado somente pelo processador que a máquina usa; o micro é o conjunto formado por todos os dispositivos que o compõem, como a placa-mãe, memória RAM, placa de vídeo, disco rígido, etc. Todavia, o processador continua sendo o componente mais importante do micro, pelo menos do ponto de vista da arquitetura do PC, já que é nesse componente que os fabricantes investem pesado em pesquisa e desenvolvimento. Do ponto de vista da manutenção de micros, o componente mais importante do micro é o disco rígido, já que é lá que estão armazenados os arquivos do usuário. Se o processador do micro queimar, basta trocá-lo e o seu micro voltará a funcionar como antes. Se o disco rígido queimar, bem, a história é diferente: os seus dados terão sido perdidos (para a nossa sorte há empresas especializadas na recuperação de discos rígidos danificados). A seguir, vamos estudar como funciona um PC típico. Para isso, vamos começar pelo funcionamento do processador e a relação dele com os demais componentes do micro. Processador Os microprocessadores — por vezes chamados de processadores ou simplesmente CPU (Central Processing Unit) ou ainda, em português, UCP (Unidade Central de Processamento) — são circuitos integrados passíveis de ser programados para executar uma tarefa predefinida, basicamente manipulando e processando dados. Resumidamente, o papel do microprocessador é somente um: pegar dados, processar esses dados conforme programação prévia e devolver o resultado. De onde vêm tais dados e para onde vai o resultado é, para ele, indiferente (ver Figura 1.9). Figura 1.9: Esquema de funcionamento de um processador. Atualmente a maioria dos sistemas eletrônicos são microprocessados, isto é, têm um processador: fornos de microondas (você programa o tempo, temperatura, tipo de alimento, etc.), videocassetes (você programa para ele gravar a sua novela preferida todos os dias), carros (em seu sistema de injeção eletrônica, comanda a quantidade de ar e combustível que devem ser inseridos no motor, de acordo com dados lidos de alguns sensores), aparelhos de CD (você programa o aparelho a ficar repetindo indefinidamente aquela música do ABBA quando você está apaixonado) e, é claro, os computadores (para aquele nosso campeonato de Quake — afinal, ninguém é de ferro). Em teoria, qualquer sistema eletrônico que permita ser programado tem um processador controlando essa programação. Tal programação é feita através de instruções, que são “comandos” que o processador entende. Cada processador entende uma quantidade finita de instruções, que são listadas em uma tabela conhecida como conjunto de instruções. Cada processador tem um conjunto de instruções diferentes. Não faz sentido para um processador de um forno de microondas ter uma instrução do tipo “repetir faixa n”, bem como não faz sentido para o processador de um carro uma instrução do tipo “fazer pipoca” ou para um processador de um videocassete a instrução do tipo “injetar mais gasolina e cortar um poucodo ar”. Obviamente, no caso de processadores que são usados em sistemas dedicados, isto é, que tem uma quantidade limitada de tarefas que podem executar, como é o caso dos aparelhos que demos como exemplo, o conjunto de instruções é pequeno e limitado, e só servem para aplicações muito específicas. Os computadores, por outro lado, são sistemas que, ao menos teoricamente, têm a capacidade para serem programados até onde a imaginação do programador permitir. O que queremos dizer com isso é que os processadores usados em PC não são processadores de uso específico como os usados em fornos de microondas ou videocassetes, mas sim processadores de uso geral, que podem fazer uma infinidade de coisas (muito embora em nosso dia a dia a gente não use nem 20% da capacidade de processamento deles — bem, isso já é outra história). Funcionamento dos Processadores Como estamos vendo, os processadores são programados através de instruções. Um grupo de instruções forma um programa ou software. Em sistemas dedicados, como fornos de microondas, videocassetes, injeção eletrônica de carros, etc., o programa é sempre o mesmo. Quando anteriormente falamos que você “programa” um videocassete ou um aparelho de CD, na verdade você está entrando dados para o programa que está sendo executado pelo processador. A Figura 1.10 mostra o funcionamento básico de um sistema microprocessado. Dispositivos de entrada podem ser teclados, mouses, os botões localizados no videocassete, microondas, ou mesmo os sensores do sistema de injeção eletrônica do carro; e os dispositivos de saída podem ser monitores de vídeo, impressoras, displays de cristal líquido (no caso de microondas, videocassetes, etc.) e, no exemplo que demos do sistema de injeção eletrônica, o atuador que regula a mistura de ar e oxigênio que é injetada no motor do carro. Figura 1.10: Funcionamento básico de um sistema microprocessado. Você deve ter percebido no esquema apresentado na Figura 1.10 a existência de um componente chamado memória. O processador não tem uma capacidade interna de armazenamento muito grande. Isso significa que, a não ser em casos muito especiais (processadores dedicados), os programas não ficam armazenados dentro do processador, porque simplesmente não cabem lá dentro. Assim, o papel da memória é armazenar os programas para serem executados posteriormente pelo processador. Quando você está executando um programa em seu computador, o processador busca as instruções necessárias na memória RAM do micro. Existem dois tipos de memória, como explicaremos mais adiante: RAM (Random Access Memory) e ROM (Read Only Memory). O primeiro tipo permite que os dados presentes sejam modificados, enquanto que o segundo tipo, não. Em compensação, o conteúdo da memória RAM é apagada quando cortarmos a sua alimentação elétrica, o que não ocorre com a memória ROM. Por esse motivo, como sistemas dedicados executam sempre o mesmo programa, em geral esse programa está armazenado em uma memória ROM. Já em computadores, como podemos executar qualquer tipo de programa que a gente queira, a memória principal é do tipo RAM. Mas, é claro, que o sistema apresentado na Figura 1.10 é um sistema teórico. Na prática, o acesso do processador à memória RAM é intermediado por um circuito da placa-mãe (controlador de memória, que atualmente está embutido em um circuito chamado Ponte Norte, como veremos no Capítulo 12), como você pode ver na Figura 1.8. E mais: nos computadores atuais geralmente o processador não busca dados na memória RAM, mas sim a cópia dos dados da memória RAM presentes em um circuito chamado cache de memória, como estudaremos no Capítulo 11. De qualquer forma, mantivemos essa explicação clássica por ser de mais fácil compreensão. Só que mesmo a memória RAM pode ser pequena para armazenar o programa que necessita ser executado, ou todos os programas que estão sendo executados ao mesmo tempo, no caso dos processadores atuais, que permitem o recurso de multitarefa. Além disso, como comentamos, o conteúdo da RAM é apagado sempre que desligamos o micro e, com isso, a memória está “vazia” sempre em que ligamos o computador. Por isso, dados e programas são armazenados em um sistema de memória secundária, também chamada memória de massa, tais como discos rígidos, CDs-ROM, disquetes e Zip-disks, onde os dados não são perdidos quando desligamos o micro. Acontece que esses sistemas, por serem de acesso mecânico, têm uma velocidade muito inferior à do processador. Dessa forma, o esquema utilizado na execução de programas em um micro é o apresentado na Figura 1.11 (que é um esquema teórico; compare com a Figura 1.8 para entender o esquema usado na prática). Figura 1.11: Como os programas são carregados pelo processador. Quando você “chama” um programa, o mesmo é transferido normalmente do disco rígido para a memória RAM, e o processador busca as instruções do programa na memória RAM. O único componente capaz de executar instruções é o processador. Dessa forma, os programas não são executados no disco rígido ou no CD-ROM, mas sim transferidos desses dispositivos para a memória RAM, onde posteriormente o processador irá carregar cada instrução do programa que você deseja executar. Independentemente da aplicação, todos os processadores trabalham de uma forma muito parecida. Para executarem uma determinada instrução, são seguidos os passos mostrados na Figura 1.12. Na primeira etapa, Busca da Instrução (também conhecida como fetch), o processador busca a instrução na memória. Em seguida, a decodifica, isto é, verifica se é uma instrução válida (presente em seu conjunto de instruções) e o que a mesma faz. Em seguida, busca na memória os dados necessários para executar a instrução, caso esta seja acompanhada de dados. Por exemplo, uma hipotética instrução “Some A+B” necessita dos valores de A e B, que serão buscados na memória nesta etapa. Só então é que a instrução é executada. Após a execução da instrução, o processo começa novamente, com o processador indo na memória buscar a próxima instrução a ser executada. Poderíamos nos aprofundar mais ainda na teoria do funcionamento dos processadores, mas perderia o sentido em um livro tão prático como esse. Se você se interessou pelo assunto, recomendamos a leitura dos livros indicados na Bibliografia. Figura 1.12: Passos para a execução de uma instrução. Evolução dos Processadores Os processadores foram inventados na década de 70 por uma empresa chamada Intel. Com o sucesso obtido, várias outras empresas também começaram a construir seus próprios processadores. No início da década de 80, quando estava projetando o seu IBM PC, a IBM decidiu usar processadores da família Intel, mais especificamente um chamado 8088. Outras empresas, que lançaram também computadores pessoais (como a Apple, só para citar a mais conhecida), optaram por criar sua própria linha de computadores, usando outras famílias de processadores, incompatíveis com os processadores da família Intel. Nota: Quando falamos “família Intel” queremos dizer “processadores com conjunto de instruções x86, originalmente criado pela Intel”. Processadores atuais como os fabricados pela AMD (que é um outro fabricante de processadores) são da família Intel, já que usam esse conjunto de instruções isto é, são 100 % compatíveis em software com os processadores originalmente criados pela Intel. Portanto, tome o cuidado para não entender equivocadamente esse conceito, achando que somente processadores fabricados pela Intel são da “família Intel”. Como falamos anteriormente, cada processador tem um conjunto próprio de instruções. O processador só compreende instruções que façam parte de seu conjunto de instruções. Dessa forma, instruções de um processador não são compreendidas por um processador diferente.Em outras palavras, um programa (série de instruções) escrito para um determinado processador não “roda” em outro processador diferente. É por esse motivo que um Macintosh não consegue executar diretamente um programa de PC e vice-versa, uma vez que os dois utilizam processadores com conjunto de instruções incompatíveis. Por esse raciocínio, é fácil perceber que teoricamente um micro com um processador mais moderno seria incompatível com um micro mais antigo, já que os processadores são diferentes. Entretanto, processadores que pertencem a uma mesma família têm, além de seu novo conjunto de instruções, o conjunto de instruções dos processadores anteriores, de modo que o novo processador continue podendo rodar programas antigos. Dessa forma, é possível um Pentium 4 executar um programa escrito para o 8088 (processador utilizado no primeiro PC), já que reconhece o conjunto de instruções do antigo 8088. Os processadores usados nos PCs (ou seja, processadores da família Intel, processadores x86) já estão em sua 7ª geração, isto é, em sua sétima revisão estrutural. Só é considerada uma nova geração quando há alterações no funcionamento interno do processador. O grande problema para aqueles que não estudam a matéria é que os fabricantes lançam no mercado processadores de mesma geração com diversos nomes comerciais diferentes, levando o usuário a pensar que há muito mais gerações de processadores do que realmente existe. O exemplo mais claro disso está nos processadores Pentium II e Pentium III, que são processadores Intel de 6ª geração, funcionando internamente exatamente da mesma maneira, porém sendo vendidos com nomes comerciais diferentes, induzindo ao leigo a achar que o funcionamento de um Pentium III é mais “avançado” do que o funcionamento de um Pentium II, enquanto que, internamente, esses processadores trabalham exatamente da mesma maneira. Para que você entenda a fundo como os processadores funcionam, é necessário o estudo da arquitetura de cada uma das gerações de processadores x86, o que estaremos fazendo nos próximos capítulos. Em outras palavras, para entender de forma aprofundada o funcionamento interno de um processador Pentium 4, você terá de estudar o funcionamento de todos os processadores anteriores a ele para compreender o que esse processador traz de novo. De forma a facilitar os seus estudos, apresentamos um resumo das sete gerações de processadores x86, seus principais processadores e as principais diferenças em sua arquitetura em comparação com a geração anterior. � 1ª Geração: Processadores 8086 e 8088. O 8088 foi o primeiro processador usado no PC. Ele é um 8086 “piorado”. Apesar de ser um processador de 16 bits, o 8088 só acessa a memória a oito bits por vez. Isso foi feito porque na época do lançamento do 8086 não existiam circuitos de apoio de 16 bits no mercado, e os existentes eram muito caros, o que faria com que o PC custasse uma fortuna caso tivesse sido usado o 8086 em vez de o 8088. � 2ª Geração: Processadores 80286. Introduziu um modo de operação chamado modo protegido, que permitia ao processador acessar até 16 MB de memória RAM, dezesseis vezes mais do que o 8086/ 8088, entre outros recursos, como multitarefa e proteção de memória. Através de um outro modo de operação, chamado modo real, permitia que o processador se comportasse como se fosse um 8086, permitindo executar programas originalmente escritos para o primeiro PC. Esse processador não tinha uma instrução para que o processador voltasse do modo protegido para o modo real e, portanto, não tinha como ser usado na prática. Por isso que o modo protegido do 286 raramente foi usado. Estudaremos mais sobre esse processador no próximo capítulo. � 3ª Geração: Processadores 80386. Foi o verdadeiro marco na evolução dos processadores x86. O processador passou a ser de 32 bits e ter um modo protegido que funciona, permitindo o acesso direto a até 4 GB de memória RAM e recursos como multitarefa, proteção de memória, memória virtual e um novo modo de operação chamado virtual 8086 (ou simplesmente v86). Nós estudaremos o funcionamento de todos esses recursos no Capítulo 3. Nesta mesma época foi introduzido o conceito de memória cache, uma memória mais rápida do que a RAM localizada na placa-mãe, cujo conceito explicaremos mais adiante. � 4ª Geração: Processadores 80486. Adicionaram recursos internos para aumentar a velocidade de processamento: o co-processador matemático passou a estar embutido dentro do próprio processador (até o 386 esse circuito era à parte, e você precisava instalá-lo na placa-mãe) e o processador passou a ter uma pequena quantidade de memória cache dentro dele. A partir do 486DX2, os processadores passaram a usar um esquema de multiplicação de clock, como chegamos a comentar anteriormente. Estudaremos esses processadores no Capítulo 4. Como você pode perceber, o 486 não passa de um 386 “vitaminado”. � 5ª Geração: Processadores Pentium e Pentium MMX. Apesar de serem processadores de 32 bits, a partir da 5ª geração os processadores x86 passaram a usar um barramento de dados de 64 bits, podendo transferir dois dados por vez, aumentando o desempenho. A principal modificação foi o uso da arquitetura superescalar, isto é, o processador passou a ter mais de uma unidade de execução interna. Em português, isso significa que o processador tem, internamente, mais de um processador. Estudaremos esses processadores no Capítulo 5. � 6ª Geração: Processadores Pentium Pro, Pentium II, Pentium III, Celeron, Pentium II Xeon, Pentium III Xeon. Apesar de usarem o nome “Pentium”, são processadores de geração diferente do processador Pentium original (também chamado Pentium clássico). A principal inovação foi o uso de uma arquitetura híbrida CISC/RISC, que estudaremos em detalhes no Capítulo 6 e, portanto, não perderemos tempo explicando aqui como essa arquitetura funciona. Outros recursos, como execução fora de ordem e execução especulativa, também foram adicionados. Outra novidade foi a adição do circuito de memória cache que até os processadores de 5ª geração estava na placa-mãe do micro dentro do próprio processador, aumentando o desempenho de processamento. Assim, a partir da 6ª geração os processadores passaram a ter dois caches de memória dentro dele, um chamado nível 1 (L1), adicionado na 4ª geração, e um chamado nível 2 (L2), que era o cache que antes estava localizado na placa-mãe e foi adicionado nesta geração. A maioria dos processadores encontrados no mercado no momento da publicação deste livro era de 6ª geração. � 7ª Geração: Processadores Pentium 4. A arquitetura interna dos processadores de 7ª geração é baseada na dos processadores de 6ª geração, trazendo modificações importantes para o aumento do desempenho do processador. As principais novidades foram o aumento do desempenho do barramento externo (transferindo quatro dados por pulso de clock, em vez de apenas um, como nos processadores das gerações anteriores), a mudança da arquitetura do cache L1 e a existência de duas unidades de execução trabalhando com o dobro do clock interno do processador. Veremos essa arquitetura em detalhes do Capítulo 7. � Processadores IA-64. A primeira geração dessa nova arquitetura é representada pelos processadores Itanium. Sua principal modificação em relação aos demais processadores é usar uma arquitetura RISC pura, chamada IA-64, permitindo a execução de sistemas operacionais de 64 bits. Na realidade, usa uma tecnologia que não é exatamente RISC, chamada VLIW (Very Long Instruction Word), que estaremos estudando em detalhes no Capítulo 8 e, por isso, não explicaremos agora. Representa a 2ª mudança real na arquitetura dos processadores x86 — a primeira foi nos processadores de 3ª geração — já que desde o 386 os processadores x86 utilizam basicamente a mesmaarquitetura de software. No momento da publicação deste livro, esses processadores ainda estavam chegando ao mercado, a preços exorbitantes e com um público-alvo de servidores de rede de alto desempenho. Como utiliza uma arquitetura completamente diferente, é pouco provável que esses processadores sejam destinados a usuários “comuns”, pelo menos a curto prazo. E os processadores não-Intel? Você deve estar se perguntando onde entram os processadores de outras empresas, especialmente os processadores da AMD. O problema é que a 5ª geração desses processadores já apresentavam recursos que a Intel só foi adotar na 6ª geração de seus processadores, em especial a arquitetura híbrida CISC/RISC. Por isso, a partir da 5ª geração não há como fazer uma correlação direta entre os processadores fabricados pela Intel com os processadores fabricados por outras empresas. Por isso, estudaremos esses processadores separadamente, no Capítulo 9. Arquitetura dos Processadores Atuais Nos próximos capítulos estaremos estudando aprofundadamente a arquitetura de todos os processadores atualmente disponíveis para PCs e a arquitetura de alguns processadores que serão lançados em breve. Apenas para deixar mais clara a compreensão da matéria, os processadores atualmente têm alguns circuitos que antigamente eram encontrados fora dele, como comentamos no tópico passado. Entre esses circuitos, destacam-se: � Co-processador matemático: Também chamado Unidade de Ponto Flutuante ou simplesmente FPU (Floating Point Unit). Até os processadores de 3ª geração (386), esse circuito era um circuito à parte e opcional, que deveria ser instalado em um local apropriado na placa-mãe do micro. A partir dos processadores de 4ª geração (486), esse circuito passou a estar incorporado dentro do processador e, portanto, você não encontrará esse circuito em nenhuma placa-mãe atual. A idéia é simples: como o processador não sabe fazer cálculos matemáticos muito complexos (como um seno ou uma raiz cúbica), o programa normalmente terá de desmembrar a tarefa em várias instruções que o processador entenda. O co-processador matemático já conhece todas as funções matemáticas, e executa com uma só instrução o que necessitaria de diversas outras em um processador comum. � Cache de memória L1: A partir dos processadores de 4ª geração (486), o processador passou a ter uma pequena quantidade de memória cache dentro dele, chamada cache interno ou nível 1 (level 1, L1), aumentando a velocidade de processamento (mais adiante explicaremos o porquê). Como atualmente os processadores têm tanto o cache de memória L1 quanto o L2 embutidos, os termos “interno” e “externo” não fazem mais sentido. � Cache de memória L2: A partir dos processadores de 6ª geração esse circuito, que antes estava localizado na placa-mãe do micro, passou a estar localizado dentro do próprio processador. A mudança aumentou o desempenho do processador, já que, estando na placa-mãe, esse circuito é acessado na freqüência de operação externa do processador. Estando embutido no processador, é usada a freqüência de operação interna do processador, que é muito maior. No Capítulo 11, explicaremos em detalhes o funcionamento desse circuito. Memória Vimos que o papel do processador é somente um: pegar dados, processá-los conforme uma pré-programação e devolvê-los, não importando de onde vêm ou para onde vão. Vimos também que, por não ter uma área interna de armazenamento muito grande, o processador busca programas de uma área genericamente chamada memória. Em um computador quando usamos o termo “memória” normalmente estamos nos referindo a sua memória RAM, como chegamos a explicar anteriormente. Se um programa que o usuário pretenda executar não estiver na memória RAM, então ele deve ser transferido de um sistema de memória secundário, como discos rígidos, unidades de CD- ROM e disquetes para a memória RAM. Nota: Apesar de discos rígidos, unidades de CD-ROM, disquetes, etc. serem classificados como sistemas de memória secundária ou memória de massa, não devemos chamá-los de “memória”, já que o termo “memória” é sinônimo de memória RAM, como falamos. Muitos leigos chamam, de forma errônea, o disco rígido de “memória”. Enquanto para um leigo essa nomenclatura possa fazer sentido, para um técnico não faz, já que em seu dia a dia ele tem de tratar com diferentes tipos de memória, e uma classificação mais precisa é fundamental. As memórias eletrônicas — sejam do tipo RAM ou do tipo ROM — necessitam ser organizadas. Caso elas não sejam organizadas, não haverá como o processador saber onde buscar um determinado dado e onde colocar outro já processado. Por isso, internamente a memória é dividida em pequenas áreas, chamadas endereços. Imagine um edifício. Um edifício é dividido em n apartamentos. Para diferenciarmos cada apartamento, atribuímos números. Assim como podemos visitar o nosso vizinho que mora no apartamento 403, podemos ver um dado que se encontre no endereço 403. Na Figura 1.13, vemos o esquema de um circuito de memória de 1 MB. Dizer que uma memória é de 1 MB significa dizer que ela tem 1 M endereços que armazenam 1 byte cada. Como 1 M = 220 = 1.048.576, teremos essa quantidade de endereços para armazenarmos um dado de 8 bits em cada um. Observe que, na figura, ilustramos o armazenamento de um dado de 8 bits (um hipotético 10101100b) no endereço 5 h. Figura 1.13: Como funciona a memória. Você deve se lembrar que falamos que o processador e a memória RAM precisam se comunicar usando um mesmo número de bits (ver Figura 1.2). Os processadores disponíveis hoje para PCs têm um barramento de dados de 64 bits, armazenando, portanto, 64 bits por vez, e não 8 bits como ilustramos na Figura 1.13. Você deve estar se perguntando o porquê de estarmos usando um exemplo tão antigo (o esquema da Figura 1.13 é válido para os primeiros PCs, que usavam o processador 8088, que acessava a memória a oito bits por vez). Acontece que, por motivos históricos, a unidade usada para se referir à memória continua sendo o byte (8 bits), ainda que os processadores atualmente acessem a memória a 64 bits por vez. É o que observamos quando dizemos que um determinado PC com um processador Pentium III tem 64 MB de memória, por exemplo. Além do motivo histórico, há uma razão técnica muito importante. O correto seria dizer que esse PC tem 8 Mega Quad Words (8 MQW) de memória RAM e não 64 MB, já que a memória RAM é um elemento de 64 bits (quad word) e não de 8 bits (byte). Se todos os processadores do mundo acessassem a memória a 64 bits, essa unidade, apesar de esquisita a uma primeira vista (já que não estamos acostumados a ela), faria sentido. O problema é que há vários processadores no mercado lançado em várias épocas diferentes, cada um acessando a memória a uma quantidade diferente de bits. Assim, o byte foi usado com uma unidade padrão para podermos fazer facilmente uma comparação da quantidade de memória que um micro tem, independentemente da época de sua construção ou do processador usado. Por exemplo, 16 MB eqüivalem a 8 Megawords, a 4 Megadoublewords e a 2 Megaquadwords (todas essas quantidades querem dizer a mesma coisa: um sistema de memória capaz de armazenar 2.147.483.648 bits de informação). Seria inviável para um leigo entender que 16 MB, 8 MW, 4 MDW e 2 MQW significam absolutamente a mesma coisa. Mesmo um técnico mais esperto teria dificuldade de pensar rápido se tantas unidades de medida de memória fossem usadas. Assim, embora o Pentium III seja um processador que acessa a memória RAM a 64 bits por vez, continuamos a nos referir à memória como se fosse esta um elemento de 8 bits. Isso pode gerar confusão no futuro; devemos ter em mente que a memória RAM, assim como qualquer outro dispositivo que o processador acesse diretamente, deverá trabalharcom um mesmo número de bits que o microprocessador (um processador que acesse a memória RAM a 32 bits por vez necessitará de uma memória de 32 bits, mesmo que a unidade de memória de referência ainda seja o byte, como havíamos visto na Figura 1.2). Uma vez que a memória é um elemento externo ao processador, dizer que um processador pode acessar (“endereçar”) 1 MB de memória não significa que ele terá 1 MB de memória; significa que o microprocessador é capaz de enxergar até 1.048.576 lugares diferentes para armazenar dados de 8 bits. Para ter essa idéia ainda mais clara, basta lembrar que os processadores usados no PC a partir da sua 3ª geração (386) são capazes de acessar diretamente até 4 GB de memória. Você já viu algum micro com tanta memória instalada? Nota: Apesar de os processadores a partir do 386 permitirem o acesso a até 4 GB de memória RAM, a quantidade máxima de memória que podemos ter em um micro depende da placa-mãe, porque é no chipset (conjunto de circuitos da placa-mãe) que está embutido um circuito chamado Controlador de Memória, que gerencia o acesso à memória RAM. Esse circuito também tem um limite de acesso à memória RAM. Dessa forma, se a placa-mãe tem um chipset que acessa no máximo 512 MB de memória RAM, você só poderá ter, no máximo, 512 MB de memória RAM no micro, embora o processador consiga acessar bem mais do que isso. Voltaremos a esse assunto no Capítulo 12. RAM (Random Access Memory) Como dissemos anteriormente, quando usamos o termo “memória”, normalmente estamos nos referindo à memória RAM do micro. Esse tipo de memória é onde o processador busca instruções para serem processadas. A RAM (Random Access Memory) é um tipo de circuito eletrônico de memória que permite a leitura e a escrita de dados em seu interior. Só que ela é uma memória volátil, isto é, cortando-se sua alimentação elétrica, apagamos os dados que estavam nela armazenados. Por exemplo em uma calculadora, quando a desligamos, perdemos o dado que estava sendo exibido no visor, mostrando “0” quando a religamos. É por esse motivo que devemos usar sistemas de memória de massa (discos rígidos, CDs-ROM, disquetes, etc.) para armazenarmos dados e programas. ROM (Read Only Memory) A memória ROM (Read Only Memory) é um circuito eletrônico de memória onde os seus dados não podem ser modificados, isto é, o seu conteúdo é sempre o mesmo. Em compensação, o conteúdo dessa memória não é perdido quando cortamos a sua alimentação. Quando ligamos o micro, o processador não sabe o que fazer; ele precisa ser programado. O programa necessário para dar partida no micro é gravado em uma memória ROM, que está localizada na placa-mãe do computador. Assim, quando ligamos o micro, o processador lê e executa o programa que está localizado na memória ROM do computador. Um programa (software), quando armazenado em ROM, recebe o nome de firmware. Dentro da memória ROM do micro, há basicamente três programas (firmwares): 1. BIOS (Basic Input/Output System, Sistema Básico de Entrada/Saída): “Ensina” o processador a trabalhar com os periféricos mais básicos do sistema, tais como os circuitos de apoio, a unidade de disquete e o vídeo em modo texto. 2. POST (Power-On Self-Test, Autoteste ao Ligar): Um autoteste feito sempre que ligamos o micro. Você já deve ter reparado que, ao ligar o micro, há um teste de memória feito pelo POST. O POST executa as seguintes rotinas, sempre que o micro é ligado: � Identifica a configuração instalada. � Inicializa todos os circuitos periféricos de apoio (chipset) da placa-mãe. � Inicializa o vídeo. � Testa a memória. � Testa o teclado. � Carrega o sistema operacional para a memória. � Entrega o controle do microprocessador ao sistema operacional. 3. Setup (Configuração): Programa de configuração de hardware do microcomputador; normalmente chamamos esse programa apertando um conjunto de teclas durante o POST (geralmente basta pressionar a tecla Del durante a contagem de memória; esse procedimento, contudo, pode variar de acordo com o fabricante da placa- mãe). Como esses três firmwares estão gravados em uma mesma memória ROM, é muito comum haver confusão nos nomes e acabamos por chamar o POST ou o Setup de “BIOS”. Atualmente, usamos a nomenclatura “BIOS” como algo genérico, podendo ser interpretado como “tudo que está na memória ROM do micro”. Existem periféricos que também têm memória ROM, como, por exemplo, a placa de vídeo. O firmware dessas outras memórias ROM também são informalmente chamadas de BIOS. Assim “BIOS da placa de vídeo” é sinônimo do firmware contido na memória ROM da placa de vídeo. Atualmente há duas tecnologias básicas para a construção de circuitos de memória ROM: � Mask ROM: Essa é a tecnologia mais tradicional e usada até o lançamento das primeiras placas-mãe soquete 7 (ver Capítulo 12). Esse tipo de circuito vem programado de fábrica e não há como reprogramá-lo, a não ser trocando o circuito da placa. � Flash ROM: Essa é a tecnologia mais moderna para circuitos de memória ROM, pois permite que o circuito seja reprogramado eletronicamente, isto é, usando o próprio computador. Com isso, você mesmo pode reprogramar um circuito de memória ROM sem a necessidade de trocar peças, como é o caso do upgrade de BIOS em placas-mãe mais modernas (ver Capítulo 12). Cache O processador consegue ser bem mais rápido do que a memória RAM. Embora esse problema não importasse muito na época dos primeiros PCs, começou a ser um inconveniente e tanto a partir do processador 386. A solução adotada na maioria das vezes era fazer com que o processador esperasse o tempo necessário para que a lenta memória RAM ficasse pronta para receber novos dados. Essa técnica chamada wait states — diminui o desempenho do micro, pois o processador passará boa parte do tempo ocioso, esperando a memória RAM ficar pronta para receber ou entregar dados. Uma outra solução mais inteligente é a utilização de uma pequena quantidade de memória RAM de alto desempenho, chamada memória estática (o circuito que forma a memória RAM do micro é chamado memória dinâmica), como intermediária na leitura e escrita de dados na memória RAM. Com isso, o micro ganha desempenho, pois o processador é capaz de trocar dados com a memória estática em sua velocidade máxima. Na Figura 1.14 mostramos um esquema simplificado do funcionamento do cache de memória. Um circuito chamado Controlador de Cache (tradicionalmente embutido no chipset da placa-mãe) copia os dados que acredita que o processador precisará, da memória RAM para o cache de memória. Assim, em vez de ter de buscar os dados na memória RAM, que é um caminho lento, pois usa wait states, o processador lê a cópia dos dados localizada no cache de memória, que é um caminho bem mais rápido. A técnica do cache de memória foi introduzida nos PCs a partir do uso do processador 386DX. Como comentamos anteriormente, a partir dos processadores de 4ª geração (486), os processadores passaram a conter uma pequena quantidade de memória estática em seu interior. Esse cache interno é também conhecido como cache nível 1, ou simplesmente L1 (Level 1). A memória estática que compõe o cache de memória, e que ilustramos na Figura 1.14, passou a ser chamada memória cache externa, nível 2, ou simplesmente L2 (Level 2). Até os processadores de 5ª geração (Pentium e Pentium MMX) essa memória cache está fisicamente localizada na placa-mãe. Figura 1.14: Funcionamento do cache de memória. Na Figura 1.15 vemos o esquema de cache de memória usado em processadores de 4ª e 5ª gerações. O cache de memória interno (L1) é de pequena quantidade (como 8 KB ou 16 KB), enquanto que o cache de memória externo (L2) tem uma quantidade maior (como 256 KB ou 512 KB). Figura 1.15: Esquema de cache de memóriausado nos processadores de 4ª e 5ª gerações. A partir dos processadores Intel de 6ª geração, o cache de memória L2 passou a também estar embutido dentro do processador, de forma a aumentar o desempenho do micro. O acesso ao cache, estando ele embutido dentro do processador, é feito usando o clock interno do processador, enquanto que o acesso ao cache estando ele na placa- mãe do micro é feito usando o clock externo do processador (que é bem menor, como vimos anteriormente). Dessa forma, as denominações interno e externo não fazem mais sentido para os atuais processadores do mercado. Na Figura 1.16 vemos o esquema de funcionamento do cache de memória a partir desses processadores. Figura 1.16: Esquema de cache de memória usado a partir dos processadores de 6ª geração. Estudaremos o cache de memória em detalhes no Capítulo 11. Uso da Memória O processador 8088 usado nos primeiros PCs era capaz de “enxergar” somente 1 MB de memória. Essa área de 1 MB foi dividida em 16 áreas menores de 64 KB cada. Para manter compatibilidade com programas mais antigos (e, principalmente, com periféricos mais antigos), os micros atuais continuam com a mesma estrutura do PC original no primeiro megabyte de memória. Portanto, em seu PC com 64 MB de memória RAM, o primeiro megabyte continua sendo dividido, usado e acessado como no primeiro PC. Essa área é dividida da seguinte forma: � Os dez primeiros bancos (banco 0 a banco 9, endereços que vão de 00000h a 9FFFFh) são utilizados pelo processador no endereçamento à RAM. Logo, concluímos que o máximo de RAM que os computadores PC endereçam é 640 KB (10 x 64 KB). Esse trecho de memória é chamado memória básica, ou memória convencional. Mesmo instalando-se mais do que 640 KB de RAM em micros modernos, sistemas operacionais antigos como o DOS só reconhecerão 640 KB, pois precisam manter compatibilidade com o PC original. � Os bancos 10 e 11 (Ah e Bh, endereços de A0000h a BFFFFh) são reservados para o acesso à memória de vídeo pelo microprocessador. As placas de vídeo serão discutidas em capítulo próprio, mas é bom saber que a memória de vídeo está fisicamente localizada na própria placa, e não na placa-mãe. � Os bancos de 12 a 14 (Ch a Eh, endereços de C0000h a EFFFFh) são reservados para a localização de firmwares das mais diversas interfaces periféricas, tais como placas de vídeo, placas SCSI e placas de rede. Esse trecho de memória é chamado de memória superior, ou UMB (Upper Memory Banks). � No banco 15 (Fh, endereços de F0000h a FFFFFh) está localizada a memória ROM do micro, que é mais conhecida como BIOS (Basic Input/Output System). Nessa área se localizará a linguagem Basic residente, caso tenha sido instalada. (É uma memória ROM opcional existente nos primeiros PCs.) Área de Memória Endereços Conteúdo 0 a 640 KB 0000h a 9FFFFh Banco 0 ao banco 9 Memória Convencional 640 a 704 KB A0000h a AFFFFh Banco 10: Memória de Vídeo 704 a 768 KB B0000h a BFFFFh Banco 11: Memória de Vídeo 768 a 832 KB C0000h a CFFFFh Banco 12: ROM da placa de vídeo 832 a 896 KB D0000h a DFFFFh Banco 13: Firmware de interfaces 896 a 960 KB E0000h a EFFFFh Banco 14: Firmware de interfaces 960 a 1.024 KB F0000h a FFFFh Banco 15: BIOS (e Basic residente, caso haja). Figura 1.17: Mapa de memória usado pelos PCs no primeiro megabyte de memória. Barramento Genericamente falando, o barramento é um caminho para a troca de dados entre dois ou mais circuitos. Em geral, os barramentos que utilizam comunicação paralela, como o barramento local (barramento que conecta o processador à memória RAM), podem ser divididos em três grupos: � Barramento de dados: É por onde os dados circulam. � Barramento de endereços: É por onde a informação de endereço é fornecida. � Barramento de controle: Informações adicionais como, por exemplo, se a operação é de leitura ou escrita. Nos exemplos que demos anteriormente neste capítulo, quando falamos do barramento, falávamos somente do barramento de dados, como nas Figuras 1.2 e 1.3. Na Figura 1.18, nós vemos essa divisão no barramento local do micro. Se o processador quiser armazenar o dado 10101100b no endereço 5h (como exemplificamos anteriormente na Figura 1.13), deverá colocar, no barramento de dados, o valor do dado (10101100b), no barramento de endereços, o valor do endereço (5h) e, no barramento de controle, confirmar que se trata de uma operação de escrita em memória. Tudo isso é feito simultaneamente. Figura 1.18: Divisão do barramento. Nota: A Figura 1.18 é uma representação teórica, já que na prática o processador não se comunica diretamente com a memória RAM, mas sim com o chipset da placa-mãe (Ponte Norte), como havíamos mostrado anteriormente na Figura LS. Usamos essa representação teórica apenas para facilitar o entendimento da matéria. Na Figura 1.8, nós havíamos visto os principais barramentos existentes em um PC moderno: o barramento local, que conecta o processador à memória RAM, e os barramentos de I/O, como o PCI, o AGP e o ISA, que conectam placas periféricas ao micro. Muitas vezes todos os circuitos presentes em um barramento são conectados em paralelo. Isso significa que todos os circuitos recebem a mesma informação ao mesmo tempo. Por exemplo, em um micro com uma placa de som PCI e uma placa de vídeo PCI, essas duas placas recebem as mesmas informações ao mesmo tempo. Mas graças à existência do barramento de endereço e do barramento de controle, os circuitos são capazes de saber para quem é o dado que está circulando no barramento de dados. Assim, a placa de vídeo sabe que um dado é destinado a ela, capturando este dado, enquanto que a placa de som fica inoperante, já que sabe que o dado não é para si. Barramentos de I/O Quando dissemos somente “barramento” ou “barramento do processador” ou ainda “barramento do micro”, normalmente estamos nos referindo ao barramento local, que é o caminho que conecta o processador à memória RAM, como vimos. Esse barramento é de alto desempenho e, por esse motivo, periféricos lentos não podem ser conectados diretamente a ele, para que não haja obstrução na comunicação do processador e, conseqüentemente, queda de desempenho. Por esse motivo, o processador comunica-se com periféricos através de outros barramentos, genericamente chamados barramentos de I/O (ou E/S, Entrada/Saída), como havíamos visto na Figura 1.8. Entre esses barramentos, podemos citar os barramentos AGP, PCI e ISA. A comunicação desses barramentos com o barramento local é feita através de um circuito chamado ponte, que faz parte dos circuitos de apoio da placa-mãe (chipset). Estudaremos os barramentos do micro em detalhes no Capítulo 10. Clock Nós já falamos sobre esse assunto anteriormente, mas é sempre bom enfatizar. O clock é um dos sinais presentes no barramento de controle de qualquer barramento que use comunicação paralela. Ele serve para sincronizar a transferência de dados entre o transmissor e o receptor, como vimos na Figura 1.3. O sinal de clock comanda, portanto, a transferência de dados entre dois circuitos. Quanto maior for a freqüência do clock, mais dados serão transferidos, aumentando a taxa de transferência dos dados e, portanto, aumentando o desempenho da comunicação. Entretanto, como falamos algumas vezes, clock não é sinônimo de desempenho, ainda mais nos micros modernos. O clock estampado nos processadores é usado somente internamente, dentro do processador. Os processadores atualmente utilizam um esquema de multiplicação de clock, onde o clock do barramento local é muito inferior ao clock interno do processador. Por exemplo, em um Pentium III-700, internamente o processador opera a 700 MHz, mas o barramento local opera a somente 100 MHz. Esse esquema de multiplicaçãode clock foi criado porque é difícil construir placas-mãe e circuitos de apoio que consigam operar em freqüências de operação tão altas como aquelas que os processadores conseguem trabalhar internamente. Em um micro, o desempenho não é determinado pelo clock do processador, mas sim pelo desempenho geral do conjunto, onde os demais componentes do micro — placa-mãe, memória RAM, disco rígido e placa de vídeo — influenciam diretamente. Assim, dois micros equipados com o mesmo processador podem ter desempenhos completamente diferentes. No caso de micros equipados com processadores diferentes, o caso é ainda pior, porque o desempenho do processador não é só influenciado pelo seu clock interno: um processador onde suas instruções consigam ser executadas mais rapidamente será mais rápido! É por esse motivo que muitas vezes encontramos processadores de clock mais baixos sendo mais rápidos do que processadores de clock mais elevados. Para que essa idéia fique ainda mais clara, vamos a um exemplo real. Há casos em que o processador 486 é capaz de executar uma instrução por pulso de clock. Já o processador 386 executa uma instrução usando, no mínimo, três pulsos de clock. Nessa situação dada, o processador 486 é três vezes mais rápido do que um 386 operando a um mesmo clock! Por esse motivo, um 486 operando a 25 MHz consegue ser mais rápido do que um 386 operando a 40 MHz. A única forma existente para a comparação de desempenho de computadores é o uso de programas de teste de desempenho, como o Winstone. Internet: Veja uma lista completa de programas de teste de desempenho em http://www.clubedohardware.com.br/download.html. Além disso, dizer que um determinado processador foi projetado para trabalhar a uma determinada freqüência de clock não significa necessariamente que só trabalhará com aquela freqüência, e sim que suportará trabalhar no máximo àquela freqüência. Se quisermos, teoricamente podemos colocar um Pentium III-1000 para trabalhar a 100 MHz em vez de 1 GHz. Porém, qual seria a vantagem? O clock externo do processador é o sinal de clock usado no barramento local do micro. Os barramentos de I/O geralmente trabalham com freqüências de operação diferentes, como você aprenderá no Capítulo 10. Por exemplo, o barramento ISA trabalha com um clock de apenas 8 MHz, independentemente do processador da máquina. Isso garante que qualquer placa ISA instalada no micro funcionará corretamente. O mesmo ocorre com os demais barramentos de I/O — em especial, o PCI (que trabalha a 33 MHz, na maioria das vezes) e o AGP (que trabalha a 66 MHz). Reset Outro sinal bastante importante presente no barramento de controle do barramento local do micro chama-se reset, responsável por reinicializar o micro. Há basicamente duas formas de dar um reset no micro: através da chave Reset no gabinete do micro ou pressionando simultaneamente as teclas Ctrl, Alt e Del. No primeiro caso, o reset será efetuado por hardware: a chave no painel do gabinete é fisicamente conectada ao barramento de controle do micro. Quando um reset desse tipo é executado, o micro se comporta exatamente como se tivesse sido ligado novamente. Já no segundo caso, o reset é interpretado pelo sistema operacional, que poderá ou não repassar a informação de reset para o barramento de controle. Esse é um reset por software. Em geral, com um reset desse tipo, desviamos o processador das sub-rotinas iniciais do POST — como, por exemplo, a contagem de memória. O POST será executado somente do passo “Carregar o sistema operacional para a memória” em diante. Nesse caso, não teremos um microcomputador totalmente “limpo” (poderemos ter “restos” de programas ainda ocupando a memória RAM). Contudo, esse processo será mais rápido, uma vez que o POST não executará diversas sub-rotinas. Memória de Massa Como o conteúdo da memória RAM do micro se apaga quando o desligamos, devemos ter outros meios de armazenar os nossos dados e programas, de modo que eles possam ser recuperados futuramente. A ROM, apesar de manter as informações inalteradas, é uma memória somente de leitura, não permitindo que o usuário a utilize para guardar dados e programas. Dados e programas devem ser, portanto, armazenados em outro meio (mídia) que não o elétrico. Normalmente é utilizado o meio magnético: fitas e discos magnéticos (como disquetes e discos rígidos). Outra mídia cada vez mais popular é a óptica, disponível em CDs. Desse modo, as informações são armazenadas em um meio não-volátil e poderemos recuperá-las em uma outra oportunidade. É incrível a quantidade de usuários iniciantes que confunde a memória de massa com a memória principal do computador. A grande maioria acha que um disco rígido é que é a “memória” do computador. Devemos ter claro em mente o seguinte: a memória principal do computador é a RAM, ou seja, a que apaga quando o desligamos. Essa memória é também conhecida como memória primária. Por esse motivo, é necessário “carregar” o sistema operacional e programas para a memória RAM toda vez que ligamos o micro. Os programas deverão ser carregados de algum sistema de memória de massa — especialmente discos rígidos e disquetes. Essa “memória” é também conhecida como memória secundária e serve também para armazenarmos arquivos de dados. Mídias para cópias de segurança (backup) — como discos ópticos e fitas DAT — por vezes são referenciadas como memória terciária por armazenarem cópias de dados de discos rígidos (memória secundária) e pelo fato de o acesso a elas ser bem menos freqüente. Dispositivos de Entrada e Saída Embora o computador seja um objeto fantástico, não nos adiantaria em nada se ele não pudesse receber dados do usuário ou responder ao processamento executado de alguma forma. Em outras palavras, o computador seria um elefante branco se não pudéssemos fazê-lo se comunicar com o meio externo. Por isso, existem diversos dispositivos de entrada e saída de dados, genericamente chamados de dispositivos de I/O (Input/Output) ou dispositivos de E/S (Entrada/Saída), por exemplo, um teclado (dispositivo de entrada de dados) e um monitor de vídeo (dispositivo de saída de dados). Endereços de I/O O processador necessita programar os circuitos periféricos de apoio existentes na placa-mãe, bem como comunicar- se com dispositivos de entrada e saída, que podem estar conectados na placa-mãe, através de um barramento de I/O (como é o caso da placa de fax modem e da placa de som, por exemplo). Essa comunicação é feita através de uma área distinta e independente, chamada área de I/O (Input/Output, Entrada/Saída). Tradicionalmente, no PC, essa área é de 1 KB, ou seja, há 1.024 endereços (de 000h a 3FFh) que são utilizados pelo processador para se comunicar com algum circuito periférico ou programá-lo. Como exemplo prático, podemos citar a porta paralela, utilizada para a comunicação do micro com a impressora. Normalmente, a porta paralela do micro utiliza o endereço 378h, ou seja, quando o micro quer enviar algum dado à impressora, simplesmente “joga” esse dado para o endereço de I/O 378h. No Windows 9.x, você pode facilmente visualizar qual endereço de I/O um determinado periférico está utilizando (a área de I/O é chamada de Intervalo de Entrada e Saída). Isso pode ser feito através do gerenciador de dispositivos, acessado pelo ícone Sistema do painel de controle (um caminho alternativo seria clicar com o botão direito do mouse sobre o ícone Meu Computador, escolhendo a opção Propriedades do menu que aparecerá). Basta clicar no periférico que você quer visualizar e, a seguir, escolher a guia Recursos, como exemplificamos na Figura 1.19. Figura 1.19: Visualizando os endereços de I/O utilizados por uma placa de som no Windows 9.x. Circuitos de Apoio É claro que o processador não é capaz de
Compartilhar