






























































Estude fácil! Tem muito documento disponível na Docsity
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Prepare-se para as provas
Estude fácil! Tem muito documento disponível na Docsity
Prepare-se para as provas com trabalhos de outros alunos como você, aqui na Docsity
Encontra documentos específicos para os exames da tua universidade
Prepare-se com as videoaulas e exercícios resolvidos criados a partir da grade da sua Universidade
Responda perguntas de provas passadas e avalie sua preparação.
Ganhe pontos para baixar
Ganhe pontos ajudando outros esrudantes ou compre um plano Premium
Apostila sobre Organização de Computadores
Tipologia: Notas de estudo
1 / 70
Esta página não é visível na pré-visualização
Não perca as partes importantes!































































Universidade do Estado do Rio de Janeiro Centro de Tecnologia e Ciências Instituto de Matemática e Estatística Departamento de Informática e Ciência da Computação
A execução de instruções é um dos pontos centrais num sistema computacional. Vários aspectos na definição e implementação da arquitetura de um computador são influenciados pelas características de cada uma das instruções. Este capítulo discute alguns conceitos básicos envolvidos no funcionamento de um computador eletrônico digital. Um dos pontos que dificulta a compreensão do seu funcionamento é justamente o fato deles serem eletrônicos. Grande parte do trabalho destes sistemas é realizado por sinais elétricos e por componentes eletrônicos. O usuário comum, em geral, não está familiarizado em este tipo de operação.
Os computadores são máquinas que podem ser utilizadas eficientemente na solução de alguns tipos de problemas. A decisão de usar ou não o computador na solução de um problema depende da necessidade do usuário. Em geral, essa decisão é baseada na complexidade do problema a ser resolvido. Por exemplo, suponha que desejamos calcular uma equação algébrica do vigésimo grau. Sua solução manual é quase impossível devido a grande quantidade de cálculos necessários à obtenção da solução numérica. Outro aspecto relevante nesta decisão é o volume de dados a serem processados. As aplicações que exigem a manipulação de uma grande quantidade de informações se beneficiam dos sistemas computacionais. É interessante observar que podemos identificar quatro tipos de problemas se considerarmos a sua complexidade e a quantidade de informações que devem ser manipuladas, que são os problemas de: a) natureza simples e com baixo volume de dados; b) natureza simples e com grande volume de dados; c) natureza complexa e com baixo volume de dados; d) natureza complexa e com grande volume de dados; Os problemas de natureza simples e com pequena quantidade de informações não precisam necessariamente do uso do computador para serem solucionados. Entretanto, os demais devem necessariamente utilizá-lo na obtenção de uma solução em um intervalo de
A função do processador é controlar todo o sistema e realizar todas as operações sobre os dados, de acordo com o indicado pelas instruções no código do programa. A memória principal armazena as instruções que são executadas pelo processador, e os dados que serão manipulados. As interfaces de entrada e de saída são as portas de comunicação para o mundo externo, às quais estão conectados os dispositivos periféricos tais como vídeo, teclado, discos e impressora. É através do barramento que o processador se comunica com a memória principal e as interfaces de entrada/saída. A Figura 1.1 mostra a organização típica de um computador pessoal ou estação de trabalho que fazem parte do seu cotidiano.
Processador
Memória Principal
Disco
.
Vídeo Rede
Interface de E/S
Interface de E/S Interface de E/S
Figura 1.1. Organização típica de um computador.
Inicialmente é necessário definir como os problemas podem ser apresentados ao sistema. Isto é, qual a linguagem de comunicação entre os usuários e o sistema computacional. Definida uma linguagem comum, bastaria entregar na entrada do sistema a descrição do problema, e aguardar na sua saída o resultado do pedido. Neste caso precisamos de um sistema capaz de manipular informações em todas as áreas de atuação dos usuários. O sistema receberá um determinado problema e deverá providenciar a sua solução. Note que o sistema deve estar preparado para solucionar uma diversidade enorme de problemas.
Contexto de Software
Em geral, é através das linguagens de alto nível que os usuários costumam especificar os problemas que devem ser solucionados. Como exemplo de linguagens de alto nível podemos citar a linguagem C, Pascal, Fortran entre outras. A Figura 1.2 situa o conjunto de instruções do processador dentro dos diversos níveis de software existentes em um sistema de computação.
Programa em Linguagem de Alto Nível
Programa em Linguagem Assembly
Comandos de Alto Nível
Instruções da Arquitetura
Compilador
Assembler
Linker/Loader
Programa Executável
Figura 1.2. O conjunto de instruções dentro do contexto de software.
O compilador traduz o programa de alto nível em uma seqüência de instruções de processador. O resultado desta tradução é o programa em linguagem de montagem ou linguagem de máquina ( assembly language ). A linguagem de montagem é uma forma de representar textualmente as instruções oferecidas pela arquitetura do processador. Cada arquitetura possui uma linguagem de montagem particular. No programa em linguagem de montagem, as instruções são representadas através de mnemônicos, que associam o nome da instrução à sua função, como por exemplo, ADD ou SUB, isto é soma e subtração, respectivamente. O programa em linguagem de montagem é convertido para um programa em código objeto pelo montador ( assembler ). O montador traduz diretamente uma instrução da forma
Passos de Execução de uma Instrução
Após o programa ser armazenado na memória, em uma série de endereços consecutivos, podemos iniciar o procedimento de solução do problema. O primeiro endereço de um programa contém necessariamente uma instrução de processador. Para realizar o processamento, propriamente dito, é necessário buscar a instrução que estiver armazenada no primeiro endereço de memória onde se encontra o programa. Em seguida, essa instrução é decodificada. Em outras palavras, o processador define o código de operação daquela instrução em particular. O passo seguinte é o de execução da instrução, seguido de um outro passo para armazenar o resultado , caso seja necessário. Tema para reflexão Porque existem diferentes instruções de soma? Resumindo podemos afirmar que a execução de uma instrução é realizada com quatro passos básicos: busca ; decodificação ; execução e resultado. Um programa é executado quando colocamos em loop esses quatro passos básicos.
(a) Instrução de processador; (b) Operando referenciado por valor; (c) Operando referenciado por endereço; (d) Programa armazenado; (e) Ciclo de execução de instruções.
A Figura 1.3 mostra o modelo de computador proposto em 1940 por John von Neumann , um matemático húngaro, naturalizado americano. Sua contribuição para o desenvolvimento da Ciência da Computação foi significativa, a ponto de tornar seu nome sinônimo da arquitetura de um computador uniprocessador ( máquina de von Neumann ). O modelo de von Neumann ainda representa a base dos projetos das máquinas atuais. Na Figura 1.3 podemos identificar os componentes responsáveis pelo processamento, armazenamento e entrada e saída das informações. A diferença entre os computadores antigos e os atuais está na sua tecnologia de fabricação. Considerando o desenvolvimento da tecnologia de implementação dos circuitos eletrônicos podemos dividir os computadores em gerações. As máquinas da primeira geração eram fabricadas com válvulas, as da segunda com
transistores, as da terceira com circuitos integrados de densidade média e as da quarta com circuitos integrados de alta densidade.
Figura 1.3. O modelo de von Neumann.
Os computadores eletrônicos digitais são assim denominados porque são equipamentos construídos a partir de circuitos eletrônicos. Esses computadores são capazes de realizar cálculos, operações lógicas e movimentação de dados entre seus dispositivos de armazenamento. Os sistemas digitais, em seu nível mais baixo, representam as informações através de dígitos. Num nível mais alto, uma codificação com estes dígitos formam diferentes combinações que podem representar qualquer tipo de informação. Os sistemas digitais são constituídos por uma combinação de dispositivos que manipulam informação representada por dígitos. Na maioria das vezes as informações são representadas internamente por sinais elétricos binários (5 Volts = 1 e 0 Volts = 0). Isto é, eles só assumem dois valores associados a 0 e 1. Incluído nesta categoria, o computador digital é um sistema digital binário , pois a informação é representada nele através dos dígitos binários.
Unidade de Memória
Unidade de Saída
Unidade de Entrada
Unidade de Controle
Unidade Lógica Aritmética
tempo que são múltiplos inteiros do período do clock da máquina. Portanto, o ciclo de execução de instruções é realizado em um tempo que é um múltiplo inteiro do período do clock da máquina. Os processadores modernos conseguem executar milhões de instruções em um segundo. A freqüência do sinal de clock gira em torno de 800 MHz nas máquinas com um custo acessível à maioria dos usuários. Embora já estejam disponíveis processadores com mais de 1 GHz, porém com custo ainda elevado para a maioria dos usuários comuns.
Organização Genérica de um Processador
Uma organização seja de um processador, ou sistema de computador, deve ser definida através dos seus componentes, da funcionalidade de cada um desses componentes e como eles intergem entre si. A execução de uma instrução típica, tal como a soma de dois valores, requerer um conjunto de ações separadas (busca na memória, decodificação, uso da unidade lógica aritmética, armazenamento), cada uma delas ocorrendo em um período do clock do sistema. A Figura 1.5 mostra uma organização genérica de um processador.
Figura 1.5. Organização genérica de um processador.
Um processador pode ser visto como possuindo duas seções: a seção de controle e a seção de processamento. É na seção de processamento que as informações são manipuladas. A seção de controle é responsável por enviar sinais a seção de processamento para controlar cada um de seus componentes.
R ..... PC Rn
Estado
MAR MBR
ALU
IR
Unidade de Controle
A seção de controle é composta por uma unidade de controle e um registrador de instruções. A seção de processamento é composta por diversos registradores e uma ALU ( Arithmetic Logic Unit ). O registradores podem ser classificados como registradores de propósito geral (R0 a Rn), propósito específico (estado, PC – program counter , IR – instrucition register ) e temporários ou auxiliares ( MAR – Memory Address Register , MBR – Memory Buffer Register ). A ALU é responsável por manipular todas as informações, isto é, realizar as operações lógicas e aritméticas propriamente ditas. Associado a ela existe um registrador de estado para armazenar as informações sobre os resultados produzidos pela ALU. O registrador PC armazena o endereço de memória da próxima instrução a ser executada. Os registradores MAR e MBR são responsáveis por realizar a transferência de informações entre o processador entre a memória. As instruções são armazenadas na memória, da mesma maneira que os dados, e recuperadas uma a uma no momento de sua execução. Vale observar que os dados necessários à execução de tais instruções também estão na memória, sendo recuperados exatamente da mesma maneira que as instruções. A única diferença é que a instrução quando vem da memória é armazenada no registrador MBR e depois transferida para o IR. O dado, que também é armazenado no MBR, depois é transferido para um registrador de propósito geral. As instruções permanecem no IR enquanto são executadas. As instruções, os dados e os endereços são sempre formados por cadeias de 0’s e 1’s. Em última análise eles formam uma cadeia binária. Uma determinada cadeia binária armazenada na memória de um processador pode ser interpretada de várias formas diferentes. A Tabela 1.1 mostra como a cadeia de bits 10100000 pode ser interpretada de diferentes maneiras pelo processador 8086 da Intel.
Conteúdo da Memória Significado Código 10100000 A Caracter EBCDIC 10100000 160 Número inteiro 10100000 á Caracter ASCII- 10100000 MOVE Instrução Intel 8086
Tabela 1.1. Exemplos de significados de cadeias binárias.
O valor binário 1010000 pode ser interpretado pelo processador 8086 como um caracter EBCDIC, um número inteiro, um caracter ASCII, ou como uma instrução de processador.
Barramento de endereços: É um barramento unidirecional, no sentido do processador para a memória ou para as interfaces de entrada e saída. Por ele circulam os endereços das informações nos acessos a esses componentes. O registrador MAR armazena o endereço das informações a serem acessadas e está diretamente ligado ao barramento de endereços. O tamanho do MAR está associado ao tamanho da memória. Para uma memória com 2 N endereços o MAR possui N bits. Barramento de controle: É um barramento bidirecional, por onde trafegam os sinais necessários ao controle da troca de informações entre o processador e os demais componentes do sistema. Como exemplo de sinais de controle podemos citar os que controlam a leitura, a escrita ou a espera por um dispositivo. Além das memórias, também estão ligados aos barramentos um conjunto de interfaces de entrada e saída. Cada interface de entrada e saída possui conectado a ela um dispositivo de entrada e saída. Essas interfaces tornam transparente para o processador os detalhes físicos dos dispositivos de entrada e saída do computador. Em um computador existem vários dispositivos periféricos como o teclado, o vídeo, o disco, a impressora entre outros.
Unidades Computacionais Básicas
Quando nos referimos à capacidade de processamento do processador, a capacidade de armazenamento da memória ou a transferência de informações entre dispositivos, costumamos utilizar diferentes unidades de medidas e seus múltiplos. A seguir estão exemplificadas, na Tabela 1.2, as unidades mais comuns usadas quando nos referimos a estes componentes.
Capacidade de Processamento (segundos)
Capacidade de Armazenamento ( bytes )
Transferência de Informação (ordem de grandeza) um Mili = 10 -3^ (ms) um Kilo = 2 10 Tempo de acesso a disco: ms um Micro = 10 -6^ (μs) um Mega = 2 20 Tempo de acesso a memória: ηs um Nano = 10 -9^ (ηs) um Giga = 2^30 Ciclo de máquina: μs / ηs um Pico = 10 -12^ (ps) um Tera = 2^40 Execução de instruções: μs / ηs
Tabela 1.2. Exemplos de unidades de medidas utilizadas em sistemas computacionais.
Neste capítulo discute as abstrações utilizadas em sistemas de computadores. O princípio da abstração é a forma encontrada pelos projetistas de hardware e software para tratar a complexidade dos sistemas computacionais. Além disso, apresenta algumas das tecnologias computacionais que vem sendo empregadas e que tornam mais fáceis a utilização destes sistemas.
Nos últimos anos temos presenciado uma evolução rápida dos sistemas computacionais. Podemos dizer que os computadores levaram a civilização contemporânea a uma terceira revolução, a chamada revolução da informação. Antes a civilização presenciou a revolução agrícola e a industrial. A revolução da informação proporcionou um aumento significativo na disseminação de informações. Este fato aumentou a capacidade intelectual da humanidade com impacto direto nas ciências. Atualmente os cientistas da computação têm trabalhado em várias linhas de investigação científica. Eles buscam viabilizar ferramentas mais eficientes para que os cientistas teóricos e experimentais possam explorar novas fronteiras do conhecimento nas mais diversas áreas como as Engenharias, a Astronomia, a Biologia, a Física, a Química entre outras. O custo dos sistemas computacionais tem decrescido significativamente nos últimos anos. A redução do custo permite que a utilização dos computadores se multiplique. Hoje estes sistemas são viáveis para diversas aplicações onde antigamente o custo era proibitivo, como por exemplo nos caixas eletrônicos, nos automóveis ou laptops. Os avanços verificados na tecnologia de hardware têm permitido que os especialistas criem programas extremamente úteis. Este fato pode ser comprovado no emprego dos computadores nas mais diversas atividades desenvolvidas pelas pessoas. Os bons programadores têm como um dos seus principais objetivos o desempenho dos seus programas. Para os usuários a obtenção de resultados rápidos é um fator preponderante para o sucesso de qualquer software. Nos anos 60 e 70 a principal restrição para um bom desempenho dos computadores era o tamanho da memória. Assim, os programadores procuravam minimizar o espaço de memória utilizado pelo seu programa para torná-lo mais
Apesar de muitas mudanças e melhorias, as linguagens de montagem estão longe da facilidade desejada pelos cientistas. A linguagem de montagem obriga o programador a escrever uma linha para cada instrução a ser executada pela máquina. Isto força o programador a raciocinar como a máquina. Este pensamento de raciocinar num nível mais baixo inspirou uma questão simples. Se podemos traduzir uma linguagem de montagem para instruções binárias, de maneira a tornar mais simples o trabalho dos programadores, porque não traduzir uma notação de mais alto nível para uma notação binária? Apesar de ser uma tarefa mais complexa projetar e construir este tradutor, ela é viável. Os programadores de hoje têm uma alta produtividade devido ao projeto deste tradutor de alto nível denominado compilador. Os compiladores são programas que aceitam uma notação mais natural muito próxima da nossa linguagem. A linguagem que eles compilam são denominadas linguagem de alto nível. Seu uso permite que um programador escreva a seguinte expressão A + B e o compilador a expresse na linguagem de montagem ADD A, B. Por sua vez, o montador deve traduzir este comando para a instrução binária
As linguagens de alto nível oferecem várias vantagens aos programadores. Primeiro, elas permitem que os programadores raciocinem de uma forma mais natural, mesmo usando palavras em língua inglesa e notações algébricas. Além disso, as linguagens de alto nível são projetadas de acordo com o tipo de programa a ser escrito. Por exemplo, a linguagem Fortran foi projetada para realizar cálculos científicos, o Cobol para processar dados comerciais, o Lisp para manipular símbolos e assim por diante. A segunda vantagem do uso das linguagens de alto nível é o aumento da produtividade dos programadores. O tempo gasto para desenvolver programas melhora na razão inversa da quantidade de linhas de código necessárias para expressar uma idéia. Outra vantagem é o fato de que programas escritos em tais linguagens são independentes do computador no qual foram desenvolvidos. Isto porque os compiladores e montadores, em geral, podem traduzir linguagens de alto nível para instruções de qualquer máquina. A reutilização de programas já escritos é muito mais vantajosa do que escrever novamente um programa desde o princípio. Por isso, os programadores compartilham as rotinas potencialmente mais utilizadas, organizando-as em bibliotecas. Uma das primeiras bibliotecas a ser idealizada continha rotinas de entrada e saída de dados. Ela continha rotinas, por exemplo, para controlar uma impressora, um disco, fitas entre outros dispositivos. A experiência mostrou que um conjunto de programas poderia ser mais eficientemente executado se houvesse um programa separado responsável por supervisionar a execução dos demais. Ele seria responsável por iniciar o processamento do próximo programa numa fila, evitando a intervenção humana para realizar esta tarefa. Estes tipos de
programas, denominados supervisores , juntamente com as rotinas de entrada e saída formam a base do que hoje chamamos de sistema operacional. Os sistemas operacionais são programas que controlam e coordenam os recursos físicos da máquina, além de implementarem a interface entre os serviços do sistema e o usuário. Os softwares tendem a ser classificados por seu uso. Aqueles que implementam serviços para tornar a máquina mais atrativa, serviços estes utilizados por outros programas, são denominados softwares do sistema. Como exemplo destes softwares podemos citar os sistemas operacionais, os compiladores e montadores. Já os softwares de aplicação ou simplesmente aplicativos são programas desenvolvidos para simples usuários da máquina, como por exemplo, as planilhas eletrônicas ou os processadores de texto.
A seção 2.2 apresentou alguns dos conceitos básicos envolvidos no nível do software. Esta seção aborda um pouco sobre o hardware dos computadores. A Figura 2.1 ilustra uma visão simplificada dos níveis hierárquicos do hardware e do software , mostrados de forma clássica, como anéis concêntricos, construídos a partir do núcleo do hardware em direção a camada do software mais próxima do usuário.
Figura 2.1. Visão simplificada dos níveis hierárquicos do hardware e do software.
Um computador típico dos dias de hoje possui vários dispositivos de entrada e saída como um teclado, vídeo, mouse , impressora e um gabinete contendo mais hardware. Segundo o livro de Patterson e Henessy, este hardware é composto por cinco componentes clássicos que são os dispositivos de entrada de dados, os dispositivos de saída de dados, a memória, o caminho de dados e a unidade de controle. Estes dois últimos componentes quando
Hardware
Softwares de sistema
Softwares de aplicação
Uma outra questão importante nos dias de hoje é a conexão entre computadores através das redes. As ligações em rede têm uma série de vantagens como a troca de informações com altas taxas de velocidade, o compartilhamento de recursos e acessos remotos. As redes variam muito em relação ao seu tamanho e seu desempenho. Uma das redes de comunicação mais populares é a Ethernet. Sua tecnologia é apropriada para interconexão numa rede local. Isto é, ela é adequada, por exemplo, a distâncias como um andar de um edifício. Para redes de longa distância (entre cidades, continentes) são utilizadas transmissões via satélite, rádio ou fibras óticas.
O desenvolvimento da tecnologia de implementação dos componentes eletrônicos vem sustentando o crescimento da indústria de computação desde os anos 70. A tecnologia é que impõe limites ao que um computador pode realizar. Por exemplo, é a tecnologia que define a velocidade de processamento e a capacidade de armazenamento. Um transistor é um componente eletrônico controlado por eletricidade. Antigamente os circuitos integrados eram compostos por dezenas ou centenas de transistores em um único chip. Num curto intervalo de tempo, a mesma área de um chip passou a integrar vários milhões de transistores dando origem aos chamados circuitos very large-scale integrated ( VLSI ). O processo de fabricação de um chip tem início com o silício que é um elemento químico encontrado na areia. Ele é um elemento semicondutor porque não é um bom condutor de eletricidade nem um bom isolante. Quando combinado com outros elementos químicos especiais o silício pode adquirir excelente condutividade, ser completamente isolante, ou conduzir ou isolar a eletricidade sob certas condições especiais atuando como uma chave. Os transistores pertencem a esta última categoria. Portanto, um circuito VSLI é um conjunto formado por milhões de combinações de condutores, isolantes e chaves. O processo de fabricação dos circuitos integrados é importante para a determinação do custo final de um chip. Ele determina também o custo final de um computador. A Figura 2.3 mostra o processo de fabricação de um chip. A figura mostra uma barra de silício que após ser fatiada transforma-se num waffer virgem. Para gravar os circuitos são necessários de 20 a 30 passos de processamento. Os waffers já como padrão gravado são divididos em chips por um separador. Depois de testados estes chips são encapsulados, novamente testados e disponibilizados para consumo.
Figura 2.3. Processo de fabricação de um chip.
Apesar de ser difícil prever o nível da relação custo/desempenho que os computadores terão no futuro, é seguro apostar na premissa de que esta relação será melhor do que a possuímos hoje. Para aproveitar estes avanços os projetistas de computadores e os programadores de software devem entender de uma grande variedade de assuntos. Tanto os projetistas de hardware quanto os projetistas de software constroem seus sistemas baseados numa arquitetura com níveis hierárquicos. O entendimento da abstração é de importância fundamental para a compreensão dos sistemas computacionais da atualidade.
Barra de silício Waffers virgens
Chips testados
Expedição para consumo
Teste final
Chips encapsulados Chips testados
Fatiador
20 a 30 passos de processamento
Testador de chips
Waffers gravados
Chips individuais Chip pronto para encapsulamento
Separador