Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

left-side-bubbles-backgroundright-side-bubbles-background

Crie sua conta grátis para liberar esse material. 🤩

Já tem uma conta?

Ao continuar, você aceita os Termos de Uso e Política de Privacidade

Prévia do material em texto

Organização de Computadores / Aula 1 - Evolução Histórica da Computaçãoa definição d
Introdução da história da tecnologia
A história da tecnologia e consequentemente da computação se dá desde o momento em que compreendemos o surgimento do fogo e o descobrimento que ele poderia ser usado a favor do ser humano como ferramenta de grande importância para a civilização.
Tais descobertas desencadearam a busca pelo conhecimento por parte do ser humano. Através desse conhecimento e da evolução do mesmo, novas tecnologias e ferramentas podem ser desenvolvidas e surgem a cada dia. Se não fosse isso, continuaríamos até os dias de hoje morando em cavernas, porém aquecidos com o fogo.
O fogo incentivou a descoberta da manipulação dos metais, que permitiu a criação de novas ferramentas para caça e manipulação da madeira etc.
Com o passar do tempo, podemos identificar que todo esse desenvolvimento possui uma motivação: a busca pela otimização de processos para a melhoria do cotidiano, seja de uma pessoa, ou até mesmo de uma civilização
O surgimento e as gerações na evolução dos computadores
De acordo com os grandes autores da computação, a história dos computadores pode ser dividida em gerações.
Considerando Tanenbaum (2007), por exemplo, a Geração Zero é chamada dessa forma pois foi formada por dispositivos mecânicos.
As gerações seguintes foram formadas pelo surgimento de dispositivos eletrônicos, marcados por alguma inovação.
Já outros autores defendem a subdivisão da geração zero em dois momentos: a dos dispositivos mecânicos e a dos dispositivos eletromecânicos, mas nada que altere as gerações posteriores.
Para entendermos melhor toda essa evolução, veremos um pouco de cada uma delas, mas podemos enfatizar, neste momento, que as gerações de computadores antecederam até mesmo o surgimento da eletricidade, ou seja, dos dispositivos mecânicos, em que os equipamentos se baseiam no uso de engrenagens, entre outras formas de construção, e, por isso, também podem ser considerados equipamentos de grande tecnologia para a sua época.
A partir daí, com a vinda das gerações seguintes, veremos que um dos destaques será o tamanho dos equipamentos construídos, cada vez menores, e o desenvolvimento de capacidades de processamento cada vez maiores, devido ao surgimento de novas tecnologias eletrônicas usadas para marcar uma geração específica da evolução dos computadores.
Geração Zero - Computadores Mecânicos e Eletromecânicos
A geração de computadores mecânicos se resume ao uso de equipamentos que otimizaram processos da civilização através do uso de alguns dispositivos, como, por exemplo, aqueles que facilitavam o cálculo de resultados.
500a.C. Ábaco
Podemos dizer que ela se inicia na Mesopotâmia, aproximadamente 500 a. C., com a invenção do ábaco, uma espécie de calculadora que permitia a contagem rápida de valores pelos trabalhadores agrários.
Existem vários tipos de ábaco, porém se resumem ao uso de bolinhas deslizantes que representam unidades decimais, dezenas, centenas, entre outros, e cálculos relativos à soma e à subtração.
Esse equipamento é o reflexo de uma grande evolução nas formas de cálculo da época e perdura até hoje, já que o ábaco continua sendo utilizado com a mesma finalidade, inclusive como instrumento didático para incentivar o pensamento e a lógica matemática.
1642-1644. Calculadora de somar e subtrair
Aceleramos, então, para séculos mais “próximos”, entre os anos 1642-1644, quando o físico e filósofo francês Blaise Pascal, interessado em otimizar o processo de cálculos aritméticos, criou uma calculadora totalmente mecânica, que permitia o cálculo através de engrenagens.
Pascal criou a calculadora de somar e subtrair para ajudar seu pai a contabilizar os impostos na França, país onde trabalhava. O cálculo era feito totalmente através de engrenagens, onde uma manivela, operada manualmente, permitia que a conta fosse efetuada.
1673. Calculadora das quatro operações fundamentais
Como dito anteriormente, a máquina de Pascal foi desenvolvida para cálculos de soma e subtração. Com base na mesma ideia, por volta de 1673, Gottfried Wilhelm von Leibniz propôs uma evolução da calculadora, possibilitando o cálculo das quatro operações básicas, ou seja, incluindo a multiplicação e a divisão através do uso de operações sucessivas, também todas executadas de forma manual, através de engrenagens.
Temos, então, o que pode ser considerada a primeira calculadora básica com as quatro operações fundamentais, representando uma evolução para a época.
Antes de continuar, assista ao vídeo que mostra o funcionamento da máquina de Pascal (Pascaline).
Revolução Industrial
Não podemos deixar de citar uma época fundamental para o avanço das tecnologias de computação: a época da Revolução Industrial. Nela, tivemos uma transição nos processos de produção da forma artesanal e manual para uma fabricação que intensificou o uso de máquinas, permitindo maior eficiência e agilidade, bem como a redução de erros e retrabalhos.
Veja outros destaques na história da evolução dos computadores:
A Geração de Computadores Eletrônicos
Devido à baixa capacidade e ao desgaste de peças em máquinas essencialmente mecânicas, tornou-se uma necessidade a substituição dos equipamentos que conhecemos na geração zero pelos que possibilitassem maior agilidade e menos desgaste.
Certamente a eletricidade e a eletrônica cooperaram para a evolução que veremos a seguir, basicamente dividida em fases evolutivas demarcadas pelo surgimento de materiais que permitiram mudanças consideráveis na forma em que os computadores eram projetados.
Primeira Geração (Válvula)
A primeira geração dos computadores foi marcada pela utilização de válvulas. A válvula é um tubo de vidro, muito similar a uma lâmpada, com eletrodos que possuem a finalidade de controlar o fluxo de elétrons.
Em resumo, substitui-se os relés eletromecânicos da aritmética binária pelo controle de fluxo de elétrons através da válvula ligada ou desligada (com corrente/sem corrente). Assim, os equipamentos já atingiam frequências de operação maiores do que os relés mecânicos e grande agilidade em cálculos. Surgem, então, diversos computadores, na sua maioria para propósitos militares ou científicos.
Dentro dessa geração, é importante citar os equipamentos de grande importância:
Colossus (Segunda Guerra Mundial).
ENIAC (Eletronic Numerical Integrator and Computer)
Segunda Geração (Transistor)
A segunda geração de computadores iniciou com a chegada de um substituto para a válvula, o transistor.
Criado pela Bell Labs para uso em aparelhos telefônicos, o transistor ofereceu grande revolução na computação, uma vez que as válvulas consumiam muita energia e precisavam de pré-aquecimento para funcionar. Possuíam também pouca confiabilidade em seus resultados e curta vida útil, sendo necessárias trocas constantes.
Além de menores, os transistores consumiam menos energia, sofriam menos aquecimento e eram mais rápidos, o que permitiu que fossem incorporados ao desenvolvimento de computadores, durante o período de 1955 a 1964.
O TX-0 (Transistorized Experimental Computer Zero) foi o primeiro computador transistorizado a ser desenvolvido.
Porém, há um fator interessante que vale a pena ser mencionado: o desenvolvimento do PDP-1, criado pela DIGITAL. Com o preço de U$120.000,00, foi o primeiro computador comercializado, tento sido vendidas aproximadamente 50 unidades na época. Ele possuía memória de 4Kbytes e deu origem ao conceito de “minicomputadores”.
Agora, assista ao vídeo para saber mais sobre o funcionamento do transistor.
Terceira Geração (Circuitos Integrados)
A terceira geração veio com a invenção do circuito integrado de silício por Robert Noyce, físico e um dos fundadores da Intel.
Com o circuito integrado, dezenas de transistores poderiam estar em um único chip, o que possibilitava a construção de computadores menores e ainda mais rápidos e baratos, pois permitia também a produção em escala maior.
Quarta Geração (VLSI)
Traduzido como Very Large Scale Integration, ou Integraçãode Circuitos em Larga Escala, essa geração veio mais como uma evolução dos circuitos integrados, onde a tecnologia permite hoje a inclusão de milhões de transistores em um chip.
Para compreender isso, é necessário entender o processo de litografia. Contudo, neste momento, podemos nos ater à informação de que os fabricantes usam tecnologia de nanômetros distância na construção de microchips, ou seja, a distância entre um transistor e outro dentro do chip.
Para termos uma ideia dessa distância, um nanômetro equivale a um bilionésimo de milímetro.
Era da computação pessoal
· Altair 8080
Primeiro computador pessoal comercializado. Sua primeira linguagem de programação foi o Basic, desenvolvido pela Microsoft.
· IBM PC (Personal Computer)
Computador pessoal desenvolvido pela IBM, também com o processador Intel 8080. Possuía frequência de 4.77Mhz, monitor monocromático e 16KB de memória.
Tal arquitetura da IBM possuía um projeto de circuito público, de forma que outros fabricantes poderiam desenvolver componentes facilmente acopláveis a essa arquitetura, tornando esse PC o equipamento mais vendido da história.
· Apple
Criada por Steve Jobs e Steve Wosniak.
Os computadores Apple tinham o objetivo de ser equipamentos de acesso ao público em geral.
O primeiro modelo, o Apple I, foi construído originalmente em uma garagem, e teve muita procura. Porém, o alcance comercial se deu com a venda do Apple II, que já tinha uma linha de produção mais robusta.
Atividade
1 - Vamos começar a conhecer a evolução analisando o resultado dela na atualidade. Veja o gráfico abaixo relativo à quantidade de transistores na fabricação de processadores com o passar dos anos.
Que conclusões você pode tirar somente olhando este gráfico?
2 - O que Pascal trouxe como inovação no desenvolvimento da tecnologia?
Criou uma calculadora mecânica baseada em engrenagens.
3 - Sobre o ábaco, qual afirmativa está INCORRETA?
Surgiu séculos antes de Cristo.
4 - No que se refere ao surgimento das gerações de computadores, qual a ordem cronológica dos mesmos?
Válvula, Transistor e CI
5 - Com base na história e evolução dos computadores, qual pode ser considerado o primeiro dispositivo de entrada em um equipamento?
Cartão perfurado
Organização de Computadores / Aula 2 - Hardware, Software e Conceitos
· Na Designer Hardware e seus componentes
Hoje temos contato com uma diversidade de dispositivos de computação, alguns com capacidade de processamento igual ao até mesmo superior a alguns computadores tradicionais. Por exemplo, o que conhecemos hoje como smartphones, telefones celulares de alta capacidade de processamento, possuem configurações de hardware realmente robustas.
O hardware de um computador é formado por diversos componentes e dispositivos interconectados, de forma que, através dessa comunicação, as suas funções em conjunto possam ser desempenhadas.
Cada equipamento possui a sua particularidade. Porém, como base, existem alguns componentes hoje presentes em qualquer equipamento, seja ele um computador de uso pessoal, uma calculadora, ou até mesmo o smartphone que citamos.
Veja abaixo os componentes do hardware cujas funcionalidades devemos conhecer: 
Agora, vamos conhecer cada um desses componentes mais detalhadamente.
Unidade Central de Processamento (UCP ou CPU)
É o dispositivo central de um computador. Muitos acreditam que a CPU é o gabinete do computador, mas, na verdade, ela é o que conhecemos hoje como processador.
Internamente, possui dois importantes componentes:
Unidade de Controle
Responsável pelo gerenciamento de todo o fluxo de informações entre as unidades que fazem parte do hardware, bem como a execução das instruções.
Unidade Lógica e Aritmética
Responsável pelos cálculos e decisões a serem efetuadas de acordo com as instruções recebidas.
Memória
Responsável pelo armazenamento das instruções e dados a serem executados ou manipulados pela CPU e seus componentes, bem como armazenamento de informações recebidas pelas Unidades de Entrada e Saída. Podemos dizer que a memória poderia ser memória RAM ou até mesmo o HD (ou disco rígido) como unidades de memória.
Memória RAM
Disco Rígido
Dispositivos de Entrada
Todos os periféricos que são utilizados e interligados ao computador para envio de informações para o processamento. Por exemplo: mouse, teclado ou botões de função localizados no equipamento.
Mouse
Teclado
Dispositivos de Saída
Todos os periféricos utilizados para enviar alguma informação para o usuário. Uma impressora ou um monitor de vídeo são exemplos.
Impressora
Monitor
Esse é somente um resumo de tudo o que estudaremos de forma mais aprofundada nas próximas aulas, nos permitindo entender melhor a relação e a função de cada um desses componentes.
Dispositivos Internos x Dispositivos Externos
É importante citarmos que o computador é formado por diversos componentes em sua montagem de hardware.
Em resumo, temos:
Dispositivos Internos
• Processador
• Placa-mãe
• Disco rígido
• Placa de rede
Dispositivos Externos
• Teclado
• Mouse
• Impressora
Software
Software são todos programas responsáveis por administrar a execução de funções pelo hardware e automatizar as tarefas que o computador irá desempenhar.
Classificação de acordo com as funcionalidades
Cada software possui uma função específica, de forma que é necessário, neste momento, classificá-lo em duas categorias principais:
Software Básico:
Utilizado para produzir ou gerenciar a operação do computador e a relação dentre softwares aplicativos com o hardware.
Exemplos:
• Linguagens de programação;
• Sistemas Operacionais;
• Compiladores.
Software Aplicativo:
Seu foco é o usuário final. Normalmente, os erros ou falhas percebidas pelo usuário são identificados nos softwares que se encaixam nesta categoria.
Exemplos:
• Editores de Texto;
• Planilhas;
• Sistemas de Folha de Pagamento;
• Sistemas Comerciais;
• Sistemas de Controle de Estoque;
• Antivírus.
Classificação segundo a forma de aquisição ou de distribuição
Antes de entrarmos no assunto Sistema Operacional, é muito importante citarmos outra classificação de software, agora quanto à sua forma de aquisição ou de distribuição:
Software Livre
Conceito criado por Richard Stallman, em 1983, que defendia uma liberdade de uso para utilizar, copiar, distribuir, modificar e melhorar o software, na condição de que o ciclo continuasse, ou seja, todas as melhorias e modificações no software deveriam ser livres.
Muitos desenvolvedores têm usado essa filosofia criando softwares disponíveis livremente para uso, de forma que sua cópia ou redistribuição não caracteriza pirataria. Instituições públicas têm utilizado essa classificação em vista da economia gerada com a compra de softwares.
Software Proprietário
Não é de livre utilização, cópia ou distribuição. Seu uso somente é possível e permitido mediante a compra de licenças de uso, que podem ser por usuário, por máquina ou por empresa. Porém, sempre mediante o investimento financeiro conforme contratado com o fabricante.
O aspecto positivo de um software proprietário se dá pelo fato do fabricante ter a obrigação contratual de oferecer suporte ao aplicativo comprado. Sua cópia ou distribuição sem a compra da licença é considerada pirataria.
Conceitos Básicos
Sistema
Conjunto de partes coordenadas que colaboram para a realização de um determinado objetivo.
Essa definição se aplica aos sistemas de computação em que partes (o teclado, a memória, o processador e os dispositivos periféricos) se coordenam para realizar um objetivo comum: computar. Lembre-se que sistema é simplesmente a descrição de um programa de computador.
Algoritmo X Linguagem de Programação X Programa
Qual é a relação entre esses termos?
Por definição, algoritmo é o conjunto de etapas (instruções) finitas, ordenadamente definidas, com o propósito de obter solução para um determinado problema.
Para que um algoritmo seja executado por um computador, é necessário que o processador entenda o que está sendo solicitado. A sequência precisa ser finita, exata e sem duplicidade de interpretação para que a solicitaçãodo algoritmo seja feita com eficiência.
Veja um caso simples de transcrição de um algoritmo para, por exemplo, trocar o pneu de um carro:
Perceba que é uma forma de documentar uma sequência de processos não somente em TI. Trata-se de uma ferramenta de uso em diversas áreas de atuação em uma empresa.
Cada passo do algoritmo corresponde a um conjunto de instruções transcritas para a solução de um problema.)
Como um ser humano programa em linguagem binária ou linguagem de máquina?
Sabemos que em computação tudo se baseia no sistema binário (0 e 1).
A solução encontrada foi o desenvolvimento de outras formas de linguagem de programação, que fossem mais próximas do entendimento do programador. Elas são conhecidas como linguagem de Alto Nível.
De forma contrária, linguagem de Baixo Nível são aquelas linguagens mais complexas para o ser humano, em que é mais difícil a compreensão por parte do programador e são necessárias mais ações na programação.
Exemplos de códigos com a mesma função
Veja exemplos de códigos com a mesma função em linguagem de Alto e Baixo Nível. Dessa forma, fica mais fácil visualizar a diferença para um programador.
Exemplo para exibir a mensagem “Olá Mundo” em Linguagem de Alto Nivel - Python
Exemplo para exibir a mensagem “Olá Mundo” em Linguagem de Baixo Nivel - Assembly
O processo consiste:
No programador escrever o código, em sequências de instruções exatas e de fácil entendimento.
Em seguida, essa sequência precisa ser convertida em linguagem binária, que é entendida e executada pelo processador do computador.).
Sendo assim, um programa é a formalização de um algoritmo em linguagem inteligível pelo computador (linguagem de máquina). Normalmente, é composto por diversos algoritmos e feito, na sua maioria, com uma tecnologia única de linguagem de programação, que é uma linguagem formal. Por exemplo: Cobol, Pascal, Fortran, Visual Basic, Lisp, Assembly, C++, Delphi, Ada, Java etc.
Tradução
Como o próprio nome diz, consiste na tradução de um programa escrito em linguagem de Alto Nível para a linguagem binária da máquina correspondente.
Os exemplos de tradutores são:
• Assembler (Montador) da linguagem Assembly e um Compilador da linguagem C++;
• Visual Basic.
É feito o processo de Compilação, onde o programa escrito na linguagem fonte é traduzido para linguagem máquina e depois ligado e carregado para ser executado.
Interpretação
O programa fonte é traduzido e executado, instrução a instrução, de modo interativo.
O interpretador traduz cada instrução para uma representação interna e interpreta-a simulando o funcionamento do processador.
Vantagens - O ciclo escrita, execução, modificação e atualização é mais rápido.
Desvantagens - A execução é mais lenta.
Palavra (word)
Em Ciência da Computação, palavra (em inglês: word) é a unidade natural de informação usada por cada tipo de computador em particular. É uma sequência de bits de tamanho fixo processada em conjunto em uma máquina.
Trata-se de uma característica importante de uma arquitetura de computador, pois reflete diretamente em vários aspectos da estrutura, da performance e de sua operação, indicando a unidade de transferência entre a CPU e memória principal.
Os computadores modernos possuem tamanho de palavra de 16, 32 e 64 bits, o que indica a unidade básica de transferência de dados entre a CPU e a memória principal.
Por isso, é importante ficarmos atentos para, caso tenhamos um equipamento 64 bits, também instalarmos softwares e aplicativos 64 bits, pois os mesmos foram desenvolvidos para usar essa transferência máxima entre CPU e Memória.
Quando instalamos um aplicativo em sua versão 32 bits, estamos diminuindo a capacidade de processamento do nosso equipamento. Por exemplo: Um processador de 32 bits possui palavra de comprimento fixo igual a 32 bits, ou 4 bytes. Já um processador de 64 bits possui palavra de 64 bits ou 8 bytes.
Tempo de acesso (latência)
Tempo para recuperação/escrever de uma informação na memória. Depende da tecnologia da memória utilizada.
Se formos comparar com uma vitrola, de disco de vinil, seria o tempo gasto desde o momento em que pegamos a agulha até quando colocamos a mesma no início da música que queremos ouvir, mas ainda não começou a tocar.
Tempo de resposta
Mede o desempenho global do sistema. Baseia-se no tempo gasto entre o início da solicitação e a apresentação da resposta.
Engloba o tempo de acesso ou latência. Considerando o mesmo exemplo da vitrola, seria o tempo gasto desde o momento em que pegamos a agulha até o tempo em que a música foi totalmente entregue a nós.
Bits e bytes
K (Kilo), M (Mega), G (Giga), T (Tera) e P (Peta)
Esses termos foram criados para indicar valores múltiplos de bits e bytes. São potências de 2 (afinal, estamos falando de uma base binária) e não de 10.
Assim:
Kilo (= K)
Representa 1024 unidades (210), e não 1000.
Mega (= M)
Representa 1.048.576 unidades (220) ou 1024.K
(Afinal, 220 = 210.210).
É isso que nos permite entender o quadro abaixo, relativo às representações das unidades.
	1 byte
	8 bits
	1 kilobyte
	1024 byte
	1 megabyte
	1024 kilobyte
	1 gigabyte
	1024 megabyte
	1 terabyte
	1024 gigabyte
Veja como fica a conversão através das potências de 2:
	Sufixo
	Sufixo
	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
Capacidade de armazenamento x Capacidade de transferência
Esse tema é interessante e polêmico, pois esclarece muitas dúvidas, principalmente nas representações de bits e bytes.
Quando falamos em armazenamento, normalmente utilizamos representação em Bytes (B maiúsculo).
Exemplos:
1 Kbyte ou 1 KB = 1024 Bytes
1 Mbyte ou 1 MB = 1024 Kbytes
Quando falamos em capacidade de transferência usamos bits (b minúsculo), normalmente indicado em bits por segundo (bps).
Exemplos:
1 Kbit ou 1 Kb = 1024 bits
1 Mbits ou 1 Mb = 1024 Kbits
Perceba que usando os primeiros exemplos de cada item, temos 1 KB (Kbyte) e 1 Kb (Kbit), que são itens completamente diferentes.
Uma vez que sabemos que 1 byte equivale a 8 bits, teríamos:
	1 KB (Kbyte)
	1 Kb (Kbit)
	8 Kb (Kbits)
	1 Kb (Kbit)
	8 . 1024 . bits
	1 . 1024 . bits
	8192 bits
	1024 bits
Note também que as representações parecem iguais, mas os resultados finais são diferentes, já que de um lado trabalha-se com Bytes e do outro Bits.
É por isso que, quando contratamos um link de internet banda larga para nossa casa, por exemplo, de 10 Mbps, nunca conseguimos uma taxa de download de 10 Megabytes por segundo. Afinal, o link contratado equivale a 10 Megabits por segundo.
Atividade
1 - Considerando que você possui um link de internet de 10 Mbps, qual seria a taxa de download em Kbytes por segundo? Quanto tempo, em minutos, você conseguiria fazer o download de um arquivo de 600 Mbytes?
Corrigir
2 - Dos aspectos abaixo, referentes à software livre, marque a alternativa INCORRETA:
e) Permitido vender
3 - Os dispositivos de E/S (Entrada e Saída), ou periféricos, são os equipamentos acoplados ao sistema de computação, que efetuam as funções de entrada e saída. Mouse, Monitor de vídeo e Teclado são, respectivamente, periféricos de:
b) Entrada, saída e entrada de dados
4 - Qual dos programas abaixo pode ser considerado como software básico?
b) Sistemas Operacionais
Organização de Computadores / Aula 3 - Sistemas de Numeração
Introdução
	410 + 710 = 1110
68 + 38 = 118
916 + 816 = 1116
1012 + 112 = 10002
Algo nas contas acima pareceu estranho?
Inicialmente, é muito provável, que a única conta que você imaginou estar correta seja a primeira. Porém, nesta aula, vamos entender porque todas as contas acima estão corretas, apesar de parecerem estranhas para nós.
Simbologia para representar quantidades
Os sistemas de numeração têm o objetivo de fornecer uma simbologia com regras para representar certas quantidades, de forma que, com essas regras e normas, a informação quantitativapossa ser identificada por quem a conheça.
Atualmente, essa representação é feita através de números. Em alguns casos, também letras.
Sistema de Numeração Não Posicional
O sistema de numeração não posicional já foi muito usado na antiguidade.
Apesar de muito utilizado, não era um sistema de numeração fácil para, por exemplo, fazer operações aritméticas. Isso pode ter sido uma das causas do sistema de numeração posicional.
O exemplo mais conhecido e estudado nas escolas até hoje é o sistema de numeração romano, onde letras representam certas quantidades.
Para ilustrar, temos:
, 10, 50,.
A única regra diferenciada na numeração romana é que se um algarismo menor for colocado à esquerda de um maior, o mesmo deverá ser subtraído do maior. Apesar de muito utilizado, não era um sistema de numeração fácil para, por exemplo, fazer operações aritméticas. Isso ter sido uma das causas do sistema de numeração posicional.
Sistema de Numeração Posicional
Nos sistemas de numeração posicionais, o valor representado pelo algarismo no número depende da posição em que ele aparece na representação, ou seja, seu valor absoluto é modificado por um fator (ou peso), que varia conforme a posição do algarismo, sendo crescente da direita para a esquerda.
Vamos entender melhor através do exemplo:
Fonte: Criado pelo autor
Como podemos verificar, o exemplo trata do sistema na base decimal, onde o “peso” de cada número foi baseado em uma potência de 10, levando como referência a sua posição no número formado. Dependendo da posição onde o algarismo se localiza, seu resultado final e seu peso serão diferentes.
É o que podemos ver com o número 3. Ele aparece 3 vezes no número. Porém, de acordo com sua posição, seus pesos os transformam em 3000, 30 e 3, respectivamente.
Sendo assim, temos dois conceitos fundamentais no sistema de numeração posicional que deverão ser aplicados em todos os sistemas que veremos posteriormente:
	A base que representa este número.
	A posição em que o algarismo está.
Bases Numéricas
Como sabemos, é muito importante em um sistema de numeração posicional conhecer a base em que estamos trabalhando. Com ela, teremos o conhecimento de quais símbolos podem ser utilizados na representação numérica dos mesmos, de acordo com as posições.
	Sistema Binário
	Usado na computação, sabemos que todos números são formados pelo 0 e 1, ou seja, 2 algarismos.
	Sistema Decimal
	Usado em nosso cotidiano, sabemos que todos os números são formados pelos números que variam de 0 a 9, ou seja, 10 algarismos.
	Sistemas Octal e Hexadecimal
	Não é diferente, teremos a representação de todos os números com 8 e 16 algarismos, respectivamente.
Para conhecer os símbolos utilizados na representação dos números de acordo com sua base, veja a tabela abaixo:
	Sistema
	Base
	Símbolos
	Binário
	2
	0, 1
	Octal
	8
	0, 1, 2, 3, 4, 5, 6, 7
	Decimal
	10
	0, 1, 2, 3, 4, 5, 6, 7, 8, 9
	Hexadecimal
	16
	0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F
Fonte: Adaptado pelo autor
Isso quer dizer que, para cada algarismo representado em um sistema de base, temos um equivalente, sendo representado em qualquer outra base, mas não com a mesma simbologia.
Entenderemos isso em breve, mas, antes, veja o exemplo abaixo com uma pequena comparação de números representados nas quatro bases que estudaremos:
	Decimal (Base 10)
	Binário (Base 2)
	Octal (Base 8)
	Hexadecimal (Base 16)
	00
	00000
	00
	00
	01
	00001
	01
	01
	02
	00010
	02
	02
	03
	00011
	03
	03
	04
	00100
	04
	04
	05
	00101
	05
	05
	06
	00110
	06
	06
	07
	00111
	07
	07
	08
	01000
	10
	08
	09
	01001
	11
	09
	10
	01010
	12
	0A
	11
	01011
	13
	0B
	12
	01100
	14
	0C
	13
	01101
	15
	0D
	14
	01110
	16
	0E
	15
	01111
	17
	0F
	16
	10000
	20
	10
Sistemas de Numeração
O quadro anterior é bem interessante. Todavia, nos mostra somente uma pequena relação comparativa de números até o 16 decimal. Porém, não podemos ficar na dependência de consultar quadros para comparação, precisamos, na verdade, entender os métodos de conversão, a fim de que qualquer conversão necessária seja feita.
Sendo assim, vamos conhecer as regras de conversão de um número decimal para as bases Binária, Octal e Hexadecimal.
Conversão de Decimal para outra Base
A conversão de números da base 10 para uma base qualquer é realizada através da aplicação de algoritmos para a parte inteira e para a parte fracionária.
O algoritmo, para converter a parte inteira de um número decimal para outra base qualquer, consiste nos seguintes passos:
1º Passo
Realizar divisões sucessivas pelo valor que identifica a base (exemplo: Binário dividir por 2).
A primeira divisão usa como dividendo o próprio número e as demais utilizarão o quociente obtido na divisão anterior.
Deverão ser feitas tantas divisões quanto necessário para o quociente se tornar zero ou ser menor do que a base, não sendo mais possível efetuar divisões.
2º Passo
Não sendo possível efetuar mais divisões, deve-se transcrever o último quociente juntamente com os restos das divisões, em ordem inversa ao cálculo efetuado.
Vejamos na prática a conversão de Decimal para as seguintes bases:AL
· HEXADECIMAL
Atividade
Nada melhor do que a prática para verificar se você entendeu o processo de conversão de números da base Decimal para as bases Binária, Octal e Hexadecimal.
Faça as conversões abaixo e digite o resultado:
a) 74610 para a base 2 = 1011101010
b) 23410 para a base 8 = 352
c) 45910 para a base 16 = 1CB
d) 25510 para a base 16 = FF
Conversão de uma Base para Decimal
Quando queremos converter de uma base qualquer para Decimal, utilizamos a mesma regra para todas as bases. Ao contrário da regra anterior, em que fazíamos a divisão pela base, na conversão de uma base para decimal, é feita a multiplicação de cada algarismo do número pela base, elevada à potência de sua posição do algarismo.
Neste momento, vamos perceber que o sistema de numeração posicional influenciará nos cálculos. Relembrando o sistema de posições, elas devem ser numeradas da direita para a esquerda, começando da posição 0.
Montada a expressão, podemos iniciar a resolução dos cálculos.
Em primeiro lugar, a multiplicação dos números pelo resultado das suas bases e potências.
em segundo lugar, somando-se os resultados de tudo o que foi obtido.
Feito isso, temos o número Decimal convertido. Primeiro a resolução das potências.
Vamos a alguns exemplo de conversão, para que fique mais claro a regra em questão:
6578 para a base 10
Multiplicar cada algarismo individualmente pela base elevada à sua potência e somar os resultados.
Com a expressão montada, podemos iniciar os cálculos, conforme abaixo:
Vamos para mais um exemplo, agora em Hexadecimal, a ser convertido para Decimal.
Em primeiro lugar, antes de começar, é importante relembrar que existe uma particularidade no sistema Hexadecimal, em que temos números que são representados por letras, e isso também será usado.
	Decimais
	1
	2
	3
	4
	5
	6
	7
	8
	9
	10
	11
	12
	13
	14
	15
	Hexadecimais
	1
	2
	3
	4
	5
	6
	7
	8
	9
	A
	B
	C
	D
	E
	F
Fonte: Criado pelo Autor
1AC216 para a base 10
Montando a formação para conversão, seguindo a mesma regra:
Fonte: Criado pelo Autor
Com a expressão montada, podemos iniciar os cálculos, conforme abaixo:
Fonte: Criado pelo Autor
em vermelho, a ú das anteriormente.
Como último exemplo, vamos agora converter um número Binário para Decimal e identificar qual seria o equivalente do mesmo após a conversão.
110111102 para a base 10
Montando a formação para conversão, seguindo a regra:
Fonte: Criado pelo Autor
Para a conversão de números nas bases Octal e Hexadecimal para a base Binária, as regras são similares, respeitando-se as respectivas particularidades.
1 - Cada algarismo do número deve ser convertido individualmente para a Base Binária;
2 - Ao ser convertido, cada algarismo convertido deve ser formado por um grupo de:
• 3 algarismos binários (se o original for Octal);
• 4 algarismos binários (se o original for Hexadecimal).
Vamos a alguns exemplos.
Fonte: Criado pelo Autor
Conversão da base Binária para Octal e HexadecimalPara a conversão de números Binários para as bases Octal e Hexadecimal, as regras também são similares às anteriores:
1 – Com o número binário a ser convertido, dividimos o mesmo, da direita para a esquerda, em grupos de:
• 3 algarismos binários (se o número a ser convertido for Octal);
• 4 algarismos binários (se o número a ser convertido for Hexadecimal);
2 – Uma vez efetuada essa divisão, cada grupo deve ser convertido para Decimal, que será o seu número representativo. No caso do Hexadecimal, se o número corresponder entre 10 e 15, o mesmo deverá ser substituído pela letra correspondente, de A até F.
Vamos usar como exemplo a conversão do mesmo algarismo Binário 11011002 para os sistemas:
	
	
Fonte: Criado pelo Autor
Dessa forma, finalizamos todos sistemas de numeração e metodologias de conversão para os sistemas de numeração Decimal, Binário, Octal e Hexadecimal.
Não deixe de fazer novos cálculos. Para estudar, use a calculadora do Windows para comprovar que seus cálculos estão exatos.
1 - Efetue a conversão do número 1000010010012 para a base 10:
a) 2111
2 - Efetue a conversão do número 12710 para a base 2:
c) 1111111
3 - Efetue a conversão do número 204710 para a base 16:
d) 7FF
Organização de Computadores / Aula 4 - Aritmética e Representação de Sinais
Introdução
Toda operação aritmética ou lógica com mais é feita sem efetuar nenhuma conversão, mas, sim, em binário, para, dessa forma, ser convertido e visualizado pelo ser humano na base pretendida, seja ela decimal, hexadecimal ou outras.
Nesta aula, serão apresentados os processos de cálculo das operações aritméticas nestes sistemas de base. Também é muito importante entendermos como se faz a representação de números positivos e negativos na arquitetura de computadores.
Sendo assim, é fundamental que conheçamos as técnicas de: Sinal de Magnitude e Complemento de 1 e de 2 para tais representações.
Operações Aritméticas
As operações aritméticas em outros sistemas de base devem ser feitas da mesma forma que na base decimal, com uma particularidade importante: a quantidade de algarismos disponíveis no sistema de base. Isso trará resultados diferentes nas somas, de acordo com a base em questão.
Soma no Sistema Binário
Para esse caso, devemos lembrar que o sistema possui somente 2 algarismos: 0 e 1.
Sendo assim, diferente da soma decimal, onde:
	110 + 110 = 210
A soma em binário nos traz que:
	12 + 12 = 102
Isso nos traz uma regra já conhecida no sistema decimal: o transporte para outra coluna, “vai um”.
Sendo assim, temos:
	0 + 0 = 0
	0 + 1 = 1
	1 + 0 = 1
	1 + 1 = 0, com “vai 1”, ou seja, 10.
Veja o exemplo da soma dos binários 101101 + 101111:
Subtração no Sistema Binário
Para este caso, devemos também lembrar que o sistema possui somente 2 algarismos: 0 e 1.
Apesar de usar o mesmo método de subtração da base decimal, a subtração em binário pode ser um pouco mais complexa, no caso de se ter a ocorrência 0 – 1, onde deve ser feito um empréstimo superior do primeiro algarismo diferente de zero, existente à esquerda.
Isso traz a seguinte regra:
	0 - 0 = 0
	0 - 1 = 11 (“1 e empresta 1”)
	1 - 0 = 1
	1 - 1 = 0
Veja, no exemplo da subtração dos binários 10100 – 1111, o passo a passo de como se fazer a subtração.
Perceba a importância de executar o passo a passo, verificando quando é necessário “emprestar” do vizinho a fim de completar a subtração necessária.
Essa atenção é necessária para que o cálculo seja feito com exatidão. Por isso, para não confundir, é recomendável inserir a representação do empréstimo com o sinal negativo e abaixo dos cálculos, conforme diagrama acima.
Atividade
Nada melhor do que praticar as operações aritméticas para verificar se os conceitos e procedimentos foram assimilados!
Dessa forma, tente efetuar os cálculos abaixo, conforme regras estudadas:
1) 1010102 + 110112 = 1000101
2) 1100112 + 1011012 =1100000
3) 1000112 – 11112 =10100
4) 10002 – 1112= 1
Soma no Sistema Hexadecimal
Para realizar operações aritméticas no sistema hexadecimal, é importante relembrar, assim como na base binária, que existe um número diferenciado de algarismos que representam esta base.
Dessa forma, antes de abordar as regras para cálculos com números hexadecimais, é importante relembrar a equivalência dos números decimais e seus respectivos hexadecimais:
	Decimais
	0
	1
	2
	3
	4
	5
	6
	7
	8
	9
	10
	11
	12
	13
	14
	15
	Hexadecimais
	0
	1
	2
	3
	4
	5
	6
	7
	8
	9
	A
	B
	C
	D
	E
	F
No caso da soma de hexadecimais, todas as regras continuam as mesmas, com um detalhe a ser observado: o “vai 1” será utilizado sempre que a soma de dois algarismos exceder o valor de 15 (ou seja, F), que é o maior algarismo da base hexadecimal, e irá com o valor 1 para o vizinho, e não como 15 ou F.
Veja o exemplo a seguir, relativo à soma 12ABCD16 + 4B1F9116:
Repare que, ao efetuar a soma, trocamos a letra pelo valor decimal correspondente. Caso seja superior, subtraímos o valor 16, a fim de verificar o valor que ficará nessa unidade, e o restante será transportado como “1” para o vizinho da esquerda.
Logo, o procedimento de soma em hexadecimal será concluído com sucesso.
Subtração no Sistema Hexadecimal
Para realizar subtrações no sistema hexadecimal, é importante relembrar as regras do sistema da base hexadecimal, que também possui caracteres que representam alguns de seus algarismos.
A regra se assemelha à soma no sistema hexadecimal. Porém, ao contrário do transporte, conhecido como “vai um”, temos o empréstimo do vizinho. Assim como já é feito no sistema decimal. Porém, ao emprestar 1 unidade do vizinho, estará emprestando o equivalente a 16.
Vamos ao exemplo abaixo, da subtração dos hexadecimais D8A93C - 23E4A1:
Atividade
Nada melhor do que praticar as operações aritméticas para verificar se os conceitos e procedimentos foram assimilados!
Efetue os cálculos abaixo, conforme as regras estudadas:
1) AA16 + BB16 = 165
2) ABC16 + 2DE16 = D9A
3) BB16 - AA16 = 11
4) CAFE16 – ABCD16 = 1F31
Corrigir
Representação de números positivos e negativos em binário
É possível que você esteja se perguntando...Se os sistemas de computação processam tudo em binário, como podem fazer com números negativos?
Pois bem, é isto que será visto agora, ou seja, o uso de sinal + (positivo) ou – (negativo) em números binários.
Existem várias maneiras. Porém, falaremos dos três principais tipos.
Sinal e magnitude
Nesta representação, caso tenhamos um número com n algarismos binários (n bits), seu sinal é obtido inserindo-se um bit adicional mais à esquerda, para indicar o valor do sinal, e sua magnitude, ou seja, o seu valor, continua mantendo os bits restantes deste número.
Os valores dos bits de magnitude (ou seja, o valor binário do número) sempre permanecem os mesmos, sendo que a única alteração é o bit mais à esquerda, onde 0 indica POSITIVO e 1 indica NEGATIVO.
Veja um exemplo, da representação binária em 7 bits do número decimal 39:
	Número em binário:
	0100111 (7 Bits)
	39
	Sinal + (Bit adicional)
	00100111 (8 Bits)
	+39
	Sinal - (Bit adicional)
	10100111 (8 Bits)
	-39
Essa solução implementada gerou alguns problemas, pois iniciou uma dupla interpretação para o zero, que poderia ser um sinal positivo, ou somente uma indicação de um número, gerando ambiguidades de significado.
Complemento de 1
Mais um método de representação de números positivos e negativos em binário. Um pouco mais complexo, porém mais confiável do que o método de sinal e magnitude.
Para executá-lo, devem ser feitos os seguintes procedimentos:
1. Com o número binário a ser inserido o sinal, acrescenta-se um bit significativo 0 (zero) mais à esquerda do número, identificando o sinal POSITIVO do mesmo. Procedimento já executado anteriormente em sinal e magnitude;
2. Para identificação do número como negativo, é feita também a inclusão de um bit significativo à esquerda, porém agora invertido, ou seja, ao invés de 0 (zero), 1 (um), assim como a regra de sinal e magnitude. Porém, também são invertidos todos os Bits relativos à magnitude (ou identificação do valor) do número.
Vejaum exemplo da mesma representação binária em 7 bits do número decimal 39 no Complemento de 1:
	Número em binário:
	0100111 (7 Bits)
	39
	Sinal + (Bit adicional)
	00100111 (8 Bits)
	+39
	Sinal - (Bit adicional)
	11011000 (8 Bits)
	-39
	Explicando a tabela, temos:
	
	
Complemento de 2
Método muito utilizado em computação, por não dar ambiguidade no valor e significado do zero em seu significado. Este método é tido como o mais confiável da atualidade.
Para entendê-lo, devemos rever o processo do Complemento de 1, com um procedimento adicional:
1. Com o número binário a ser inserido o sinal, acrescenta-se um bit significativo 0 (zero) mais à esquerda do número, identificando o sinal POSITIVO do mesmo. Procedimento já executado anteriormente em sinal e magnitude; 
2. Para identificação do número como negativo, é feita também a inclusão de um bit significativo à esquerda. Porém, agora invertido, ou seja, ao invés de 0 (zero), 1 (um), assim como a regra de sinal e magnitude. Porém, também são invertidos todos os Bits relativos à magnitude (ou, identificação do valor) do número;
3. Realizada a inversão dos Bits, é adicionado 1 ao binário resultante;
4. Feito isso, é encontrado o Complemento de 2, relativo ao negativo de um número em binário.
Veja um exemplo, da mesma representação binária em 7 bits do número decimal 39 no Complemento de 2:
	Número em binário:
	0100111 (7 Bits)
	39
	Sinal + (Bit adicional)
	00100111 (8 Bits)
	+39
	Sinal - (Bit adicional)
	10100111 (8 Bits)
11011000 + 1
11011001
	-39
	Explicando a tabela, temos:
	
	
<="" p="" style="box-sizing: border-box; border: 0px; vertical-align: baseline; margin: 0px; padding: 0px; font-size: 17.6px; display: block; max-width: 100%; height: auto;">
Atividade
1 - Vimos na atividade da aula passada a calculadora do sistema operacional e sua funcionalidade para conversão de sistemas de bases diferentes. Agora vamos fazer um novo teste.
Será que esta mesma calculadora também faz cálculos aritméticos com números de outras bases?
Encontre os resultados dos cálculos abaixo:
AAA16 + BBB16 = 1665
1011012 + 1011112 = 1011100
101002 - 11112 = 101
Lembre-se: Abra a Calculadora e selecione o Menu. Depois, clique em Programador. A calculadora será alterada, podendo fazer conversões entre as bases.
Clique na base que você deseja fazer os cálculos. Ela alterará a cor e você poderá efetuar os cálculos naquela base especifica.
2 - Efetue a operação aritmética 101012 - 11112:
110
3 - Efetue operação aritmética 1110001112 + 110012:
111100000
4 - Efetue operação aritmética FACE16 – BA1A16:
40B4
Organização de Computadores / Aula 5 - Circuitos lógicos
· Introdução
· Como estudado, todo processamento em um computador é baseado em Bits, ou seja, 0´s e 1´s que, agrupados, podem gerar diversas informações para o ser humano.
Também vimos que o uso do sistema binário vem desde a geração de computadores valvulados, onde as válvulas eram usadas para controlar passagem ou não de corrente elétrica, de forma que, se válvula estivesse ligada ou desligada, indicaria o bit 0 ou o bit 1.
Lembrando que este processamento utiliza o sistema de numeração binário correlacionando-se justamente os níveis lógicos.
Por exemplo:
	1
	LIGADO
	VERDADEIRO
	ALTO
	SIM
	0
	DESLIGADO
	FALSO
	BAIXO
	NÃO
Posteriormente, a válvula evoluía para transistores, utilizado até hoje nos computadores. Os transistores são formados por componentes eletrônicos que permitem a capacidade de processar informações binárias a nível lógico. Esses elementos são conhecidos como portas lógicas e são o assunto principal desta aula.
Portas Lógicas
Uma porta lógica é um componente de hardware que recebe um ou mais sinais de entrada e produz um sinal de saída, de acordo com a lógica estabelecida para a construção do referido circuito definido.
As portas lógicas foram definidas como representação através de:
	Símbolos
	Para que sejam montados os circuitos.
	Expressões
	Muito similares às expressões matemáticas.
Através desses tipos de representação, é possível identificar o resultado lógico que um circuito deseja representar.
Pode-se entender melhor as expressões lógicas através do uso de Tabelas Verdade , onde são mapeadas as possibilidades de um problema e identificadas as similaridades e as diferenças. Vamos entender melhor através de um exemplo.
Veja a tabela verdade do problema da lâmpada.
	A – Lâmpada / B – Interruptor / S – Saída
1- Lâmpada queimada, interruptor desligado;
2- Lâmpada queimada, interruptor ligado;
3- Lâmpada funcionando, interruptor desligado; e
4- Lâmpada funcionando, interruptor ligado.
	A
	B
	S
	FALSO
	FALSO
	FALSO
	FALSO
	VERDADEIRO
	FALSO
	VERDADEIRO
	FALSO
	FALSO
	VERDADEIRO
	VERDADEIRO
	VERDADEIRO
	A
	B
	S
	0
	0
	0
	0
	1
	0
	1
	0
	0
	1
	1
	1
Através dessa tabela, podemos perceber que o resultado lógico dependerá da função lógica que uma porta representará. É isso que estudaremos a partir de agora.
Atividade
Quando falamos de lógica, podemos ter muitas dúvidas, mas existe a certeza de que é uma análise feita com base em algumas informações, de forma que há um resultado lógico no fim da análise.
Vamos começar de maneira básica, analisando variáveis de um pequeno problema. Imagine que você tenha um quarto e precise acender a luz no mesmo. As únicas variáveis possíveis dentro desta análise seriam o interruptor do quarto e uma lâmpada, conforme o exemplo dado anteriormente.
Fazendo uma análise desta lógica, qual a possibilidade do quarto ter sua luz acesa?
Se temos duas variáveis conhecidas, temos algumas possibilidades para a luz acesa:
1- Lâmpada queimada, interruptor desligado;
2- Lâmpada queimada, interruptor ligado;
3- Lâmpada funcionando, interruptor desligado;
4- Lâmpada funcionando, interruptor ligado.
Sendo assim, temos 25% de certeza de que o quarto será aceso, pois, se a lâmpada ou interruptor estiverem ruins, não há sucesso.
Porta E ou AND
É aquela que executa a multiplicação de duas ou mais variáveis.
Com a porta E ou AND, temos na tabela verdade uma saída no um (1), ou seja, verdadeiro, SE E SOMENTE SE as suas entradas ou mais entradas forem todas iguais a um, ou seja, positivas.
A saída será igual a zero (0) nos demais casos.
O conceito é utilizado para qualquer número de variáveis de entrada.
Como simbologia e expressão lógica, tem-se:
X = A . B
Onde se lê:
X = A e B
Como Tabela Verdade, tem-se:
	A
	B
	A.B
	0
	0
	0
	0
	1
	0
	1
	0
	0
	1
	1
	1
Porta OU ou OR
É aquela que executa a soma, em que se obtém o valor um (1) quando uma ou mais variáveis de entrada forem iguais a um (1) e assume valor zero (0) se e somente se todas as suas variáveis forem iguais a zero (0).
Vejamos como a porta OU é representada.
Como simbologia e expressão lógica, tem-se:
X = A + B
Onde se lê:
X = A ou B
Como Tabela Verdade, tem-se:
	A
	B
	A+B
	0
	0
	0
	0
	1
	1
	1
	0
	1
	1
	1
	1
Porta NÃO / NOT
A função NÃO (também conhecida como Complemento) é aquela que inverterá o estado ou valor da variável, ou seja, se a variável estiver com valor zero (0), vai para um (1), e, se a variável estiver com valor um (1), vai para zero (0).
O travessão sobre a letra ou expressão representa a variável, e esta simbologia representa onde ocorrerá uma inversão.
Pode-se dizer que A é a negação ou a inversão de A. Vejamos como é representada.
Como simbologia e expressão lógica, tem-se:
Como Tabela Verdade, tem-se:
	A
	X
	0
	1
	1
	0
Porta NÃO E, NE ou NAND
Essa função é uma composição de duas portas lógicas já estudadas, ou seja, da função E com a função NÃO, de forma que o resultado será uma nova função E invertida.
Vejamos como ela será representada.
Como simbologia e expressão lógica, tem-se:
Como Tabela Verdade, tem-se:
	A
	B
	X
	0
	0
	1
	0
	1
	1
	1
	0
	1
	1
	1
	0
Veja e compare o resultado da Tabela Verdade com a função E. Você perceberá que realmente a saída foi totalmente invertida, sendo que o restante permaneceu da mesma forma.
Porta NOU / NOR
Como o próprio nome diz, essa função é uma composição de duas portas lógicas já estudadas, ou seja, da funçãoOU com a função NÃO, de forma que o resultado será uma nova função OU invertida.
Vejamos como ela será representada.
Como simbologia e expressão lógica, tem-se:
Como Tabela Verdade, tem-se:
	A
	B
	X
	0
	0
	1
	0
	1
	0
	1
	0
	0
	1
	1
	0
Porta “OU – EXCLUSIVO” (XOR)
Essa porta lógica, OU – EXCLUSIVO, apresenta como resultado lógico 1, se as variáveis de entrada forem diferentes entre si, ou seja, se houver EXCLUSIVIDADE de valor na variável.
Como simbologia e expressão lógica, tem-se:
Como Tabela Verdade, tem-se:
	A
	B
	X
	0
	0
	0
	0
	1
	1
	1
	0
	1
	1
	1
	0
Porta “NOU – EXCLUSIVO” (XNOR) / COINCIDÊNCIA
A função lógica XNOR, conhecida como COINCIDÊNCIA, ao contrário da OU-EXCLUSIVO, tem como resultado um (1), sempre que em suas variáveis de entrada houver uma igualdade.
Vejamos como ela é representada.
Como simbologia e expressão lógica, tem-se:
Como Tabela Verdade, tem-se:
	A
	B
	X
	0
	0
	1
	0
	1
	0
	1
	0
	0
	1
	1
	1
Expressões Lógicas
Uma vez reconhecidas as portas lógicas e suas funcionalidades, é importante entender a construção de circuitos através de expressões lógicas, bem como o inverso, ou seja, a construção de expressões com base no circuito já informado.
Vejamos um exemplo:
Dado o circuito abaixo, qual a expressão lógica o representa?
Vejamos um passo a passo de como descobrir.
1. Procure iniciar a formação das expressões da direita para a esquerda:
2. Para facilitar a identificação das expressões, pode ser útil desmembrar os membros da porta lógica final. Conforme exemplo abaixo, desmembrando, teríamos a expressão lógica:
X = X’ . X’’
De forma que, identificando X’ e X’’, simplesmente podemos substituir na expressão:
3. Pode-se verificar que ambos os desmembramentos, X’ e X’’, são formados pela mesma porta lógica, função OU, representada pelo símbolo +. Sendo assim, pode-se escrever as expressões que representam os mesmos:
X’ = A + B
X’’ = C + D
4. Uma vez identificado, temos:
X = X’ . X’’
X = (A+B) . (C+D)
Atividade
Uma vez entendido como construir a expressão lógica ou expressão booleana de um circuito, tente fazer a construção da expressão que represente o circuito abaixo:
GABARITO Seguindo a proposta da direita para a esquerda, identificamos três variáveis na porta final do circuito, formado por uma porta OU (+):
 Sendo assim, temos: S = S’ + S’’ + S’’’ Partindo desse pressuposto: S’ = A . B S’’ = C (lembrando que existe uma porta inversora) S’’’= C . D (lembrando que existe uma porta inversora) Sendo assim: 
S = (A . B) + C + (C . D) Lembre-se que o inverso também pode ser feito, ou seja, construir o circuito através da expressão. Tente construir o circuito da expressão abaixo: 
S = [(A + B) + (C .D)] .D Observação: Assim como usado na matemática, parenteses, chaves, entre outros símbolos que indicam a hierarquia das expressões, também devem ser respeitados na divisão da construção dos circuitos.
Tabela Verdade
	A
	B
	C
	A
	C
	A.B.C
	S
	0
	0
	0
	1
	1
	0
	1
	0
	0
	1
	1
	0
	0
	1
	0
	1
	0
	1
	1
	0
	1
	0
	1
	1
	1
	0
	0
	1
	1
	0
	0
	0
	1
	0
	0
	1
	0
	1
	0
	0
	0
	0
	1
	1
	0
	0
	1
	1
	1
	1
	1
	1
	0
	0
	0
	1
Como último assunto desta aula, falaremos detalhadamente sobre Tabela Verdade.
A Tabela Verdade, como vimos na verificação das portas lógicas, permite que possíveis saídas de um circuito sejam identificadas. Assim, é possível saber a probabilidade, por exemplo, de uma saída positiva em um circuito.
Mas quando há um circuito mais complexo e com mais variáveis?
É necessário respeitar algumas regras para que a Tabela Verdade seja construída.
Uma dica importante é a probabilidade de variações possíveis de acordo com a quantidade de variáveis existentes na expressão. Considerando que o Sistema é Binário (Base 2), eleva-se a base 2 à quantidade de variáveis existentes.
Vamos entender:
2 variáveis, 4 variações na Tabela Verdade (22);
3 variáveis, 8 variações na Tabela Verdade (23).
Agora, veja o exemplo abaixo:
3 variáveis , 8 variações na Tabela Verdade (23)
Considerando as 8 variações no exemplo, criam-se colunas com as variáveis existentes, inserindo metade das linhas (4 linhas) com bit 0 e 4 linhas com bit 1. Na próxima coluna, a mesma regra, agora com metade das linhas da coluna anterior (2 linhas), e assim por diante. Dessa forma, tem-se todas as variações possíveis com as 3 variáveis A , B e C.
As colunas seguintes foram criadas pois existem duas condições diferenciadas, ou seja, a inversão da variável A e também C, onde deve-se identificar os valores invertidos (veja que os valores dessas colunas são exatamente a inversão das colunas A e C).
Tendo a inversão da variação C e calculada a função A.B.C, sabe-se que é uma função E, onde a saída é igual a 1 SE e SOMENTE SE todas variáveis forem igual a 1. Sendo assim, devem ser comparadas as variáveis das três colunas relativas a A,B e C a fim de verificar quais compreendem essa regra.
Feito isso, já se pode finalizar a Tabela Verdade, aplicando a função OU entre as possibilidades A,B, A. B. C.
Essa função é caracterizada por saída igual a 1, se uma única variável for igual a 1.
Sendo assim, é obtido o resultado final da Tabela Verdade.
Exercício
Questão 1: Considere a Tabela Verdade da expressão S=(A+B).A. Qual a probabilidade de ocorrer uma saída positiva? (Igual a 1)
50%
Questão 2: Considere a Porta Lógica abaixo. Como ela é conhecida?
NAND
Questão 3: Considere a expressão lógica abaixo. Qual a probabilidade de ocorrer uma saída igual a zero (0)?
25%
Organização de Computadores / Aula 6 - Modelo de Von Neumann
Rangel
Conceito de Von Neumann
Conforme estudado na aula de história da computação, as primeiras máquinas tinham um propósito específico, ou seja, programas fixos para processar. Hoje ainda existem computadores com esta finalidade, como a calculadora de mesa, que pode fazer cálculos com as operações fundamentais, mas não pode ser utilizada para nenhuma outra finalidade, como processar um jogo ou realizar cálculos que não existam em sua função.
Alterar o programa de uma máquina de propósito específico exige muito trabalho e reestruturação da máquina, desenho e religação de componentes. Fato que ocorria com os primeiros computadores.
John Von Neumann, matemático húngaro de renome, com diversas contribuições científicas na matemática e na física e também professor na Universidade de Princeton, participou do projeto e construção do ENIAC, já estudado anteriormente.
Em 1945, John Von Neumann escreveu um artigo crítico sobre os princípios da computação, que se tornaram um padrão na construção de computadores até a atualidade.
O Conceito de Von Neumann se baseava na criação de um modelo de computador em que a máquina possuiria o programa (e suas instruções) armazenado em memória, de forma que os programas em execução poderiam ser alterados durante a execução (uma variável poderia ser alterada em meio à execução) e todas as instruções seriam armazenadas e executadas sequencialmente em memória, de acordo com seu endereçamento.
Além disso, Von Neumann propôs uma arquitetura básica, composta pelos elementos abaixo:
Basicamente, todo e qualquer computador possuiria os seguintes elementos:
• CPU (ou UCP);
• Unidade de memória;
• Unidade de entrada;
• Unidade de saída.
Nesse modelo, dados e instruções são armazenadas em uma única memória, utilizada tanto para leitura quanto para escrita, e podem ser acessados através de endereços.
Programas agora são tratados também como dados, que, uma vez executados, iniciam o ciclo de Busca-Decodificação-Execução para que obtenham o resultado esperado de suas instruções.
Atividade
Você sabe o que são unidades de entrada e de saída em um computador? Cite alguns exemplos.
GABARITO
• Unidades de Entrada: Mouse, Teclado, Touchpad de um notebook;
• Unidades de Saída: Impressora, Monitor (que não seja touch);
Qual é a frequência de operação do seu processador?
GABARITO
Se não tiver descoberto, utilizando o Windows, abra o Windows Explorer, clique com o botão direito do mouse em Meu Computador e peça Propriedades. Veja que, na janela à direita, há a informaçãodo seu processador e a frequência de trabalho do mesmo.
Composição do Modelo de Von Neumann
Todos os componentes estão interligados através de barramentos que permitem a transmissão dos bits entre eles, facilitando o processamento e integrando melhor todos os componentes na arquitetura de computadores.
Como caraterísticas de funcionamento do Modelo de Von Neumann, temos:
• Programação sequencial;
• Valor de uma variável alterado durante a execução de um programa;
• Instruções e dados armazenados indistintamente na memória e acessíveis através de endereços.
Diagrama Funcional da CPU
Para entender melhor a estrutura funcional da CPU e demais componentes, veja o diagrama abaixo:
A Unidade Central de Processamento - UCP (ou CPU, que vem do inglês Central Processing Unit) é considerada o cérebro do computador, responsável pela execução dos programas armazenados na memória através do ciclo de Busca-Decodificação-Execução.
Além disso, tem como função controlar as operações do computador entre os demais componentes.
Veja seus principais elementos:
Unidade de Controle (UC)
Responsável por buscar instruções na memória principal, determinar seu tipo e encaminhar.
Unidade Lógica e Aritmética (ULA)
Responsável por executar as instruções, efetuando operações matemáticas e operações lógicas, como já estudado.
Registradores
Memórias de alta velocidade, responsáveis, principalmente, pelo armazenamento de resultados necessários na execução de instruções. Na verdade, são as mais rápidas existentes em um computador.
Alguns registradores tem uma finalidade específica e fazem parte do diagrama funcional da CPU, sendo eles:
	RDM
	Registrador de Dados de Memória - tem conteúdo que foi lido ou que será gravado em uma local da memória.
	REM
	Registrador de Endereços de Memória - contém o endereço da Memória Principal onde a CPU deseja efetuar uma leitura ou gravação.
	RI
	Registrador de Instruções - tem o conteúdo da instrução em execução no momento.
	CI
	Contador de Instrução - também chamado de Contador de Programa, contém o endereço da próxima instrução que será requisitada na memória. Toda vez que este conteúdo é lido, já á alterado para o endereço da próxima instrução a ser executada.
	ACC
	Acumulador - armazena os dados temporários para as operações na ULA.
Barramentos
Dentro de toda organização de computadores, também se baseando no diagrama funcional da CPU, verifica-se a existência de três barramentos distintos.
Como se sabe, barramentos são elementos que efetuam a ligação entre componentes dos computadores. Da mesma forma, esses barramentos distintos têm a mesma função e especializada, ou seja, somente um determinado conteúdo pode trafegar nos mesmos.
	Barramento de dados
	Barramento de endereços
	Barramento de controle
	Canal de comunicação bidirecional que interliga o RDM à memória e outros dispositivos. Sua função é a transferência de conteúdo entre a CPU e a memória principal e os dispositivos de entrada e saída.
	Canal unidirecional que faz a transferência de bits que representam um endereço de memória.
	Canal bidirecional que efetua o envio de sinais de controle utilizados para diversos elementos do computador, como se fossem ações a serem feitas por estes elementos.
Decodificador de instruções (DI)
Este elemento não faz parte de barramentos nem registradores, mas tem uma função de grande importância no processo de execução das instruções.
Ele é o responsável por decodificar o conteúdo dos dados enviados pelas instruções armazenadas na memória, interpretando as operações a serem realizadas.
Feita a decodificação, a unidade de controle poderá enviar para o respectivo responsável a finalização da operação requisitada na instrução, seja ela um cálculo matemático, gravação em um arquivo ou uma impressão.
Ciclo de Busca – Decodificação – Execução
Tendo conhecimento de todos personagens envolvidos no modelo funcional de uma CPU, é importante entender o funcionamento do ciclo de Busca–Decodificação–Execução, que ocorre diversas vezes em um computador, de acordo com sua capacidade de operação.
Basicamente, esse ciclo ocorre desde o momento em que a CPU busca uma instrução armazenada na memória até o momento em que ela foi executada, estando, assim, a CPU disponível para mais uma execução.
Veja o funcionamento, com detalhes, do ciclo:
	Busca
	Decodificação
	Execução
	• Copiar o endereço contido no CI para o registrador de endereços da memória (REM) através do barramento de endereços;
• Enviar um sinal de controle com comando de leitura, via barramento de controle, pela UC para a Memória Principal;
• Ler o conteúdo no endereço da memória, armazenando o mesmo no RDM, através do barramento de dados de memória;
• Copiar o registrador de dados da memória (RDM) para o (RI);
• Atualizar o CI com o próximo endereço a ser executado.
	Nessa fase, é determinada qual instrução deve ser executada, enviando o conteúdo do RI para decodificação pelo DI.
	• Encaminhamento da operação para finalização pela UC;
• Fim da execução da operação.
Finalizado esse ciclo, um novo ciclo é iniciado, para a execução de uma nova instrução.
CLOCK
Como último elemento , é visto, no diagrama funcional da CPU, o CLOCK, um gerador de pulsos regulares de curta duração.
Esse sinal é enviado pela CPU, como referência de tempo para todas as atividades dentro de um computador, de forma a garantir o sincronismo de todas as operações, independente do dispositivo, uma vez que alguns periféricos possuem clocks diferentes do clock interno da CPU.
O clock é medido em quantidade de vezes por segundo, ou Hertz (hz).
Exercícios
Questão 1: Considere as alternativas abaixo sobre overclock:
1) Técnica que permite que o processador trabalhe em uma frequência maior do que aquela para a qual foi projetado;
2) Permite que ocorra uma queda na emissão de calor por parte do processador;
3) É utilizado também para aumentar a frequência de trabalho em outros periféricos, como placas de vídeo.
Somente a alternativa 1
Questão 2: Registrador de Instrução (ou PC Counter) é:
Um registrador interno ao processador que armazena o endereço da próxima instrução a ser executada.
Questão 3: É responsável por enviar para a memória principal o endereço do conteúdo a ser consultado para execução da instrução:
REM
Organização de Computadores / Aula 07: Processador e Conjunto de Instruções
· IntroduçãoIntrodução
Uma vez conhecido o funcionamento de um processador de acordo com o modelo de Von Neumann e do ciclo de instrução, é importante entender as instruções.
Todo programa desenvolvido precisa ser traduzido para linguagem de máquina, de forma que as instruções sejam compatíveis com aquele processador, uma vez que todo o processador contém um conjunto de instruções relacionado à capacidade de executar.
Instrução de Máquinas
Como já estudado, quem executa um programa e suas instruções é o hardware, que, através dos ciclos de instrução do processador, busca as instruções em linguagem de máquina.
Afinal, um programa desenvolvido em linguagem de Alto Nível (mais amigável ao programador) não pode ser executado diretamente pelo hardware. Ele precisa ser traduzido para linguagem de máquina por um compilador antes de ser efetivamente carregado em memória, a fim de que o processador possa executá-lo.
A linguagem de máquina é composta de códigos binários, representando essas instruções, endereços e dados e está totalmente vinculada ao conjunto de instruções definido para uma máquina.
Em termos de funcionalidade, as operações da máquina podem ser:
	Matemáticas
	Ex: Operações aritméticas, lógicas, de complemento.
	Movimentação de dados
	Ex: Movimentação da memória para um registrador.
	Entrada/saída
	Ex: Leitura e gravação de dados em dispositivos externos.
	Controle
	Ex: Desvio condicional da sequência de execução (Se X>18 então ...).
Formato das Instruções
	
	Operando
Define o valor binário da localização do
dado ou mesmo o próprio conteúdo do dado a ser processado pela instrução
definida em seu código de operação.
Normalmente o operando define um endereçode memória que possui o dado armazenado ou onde será armazenado o resultado de
uma operação. Operações aritméticas possuem em geral 2 ou 3 operandos.
	Código
de operação
	Operando
1
	Operando
2
	Operando
3
	Código de Operação
Define a operação que será realizada pelo
processador. É o campo da instrução onde o valor binário identifica a operação
a ser realizada
Este código é a entrada no Decodificador de
Instruções para a unidade de controle. Cada instrução possui um código único,
que será seu identificador dentro da execução de instruções em um processador.
	
Aspectos dos Conjuntos de Instruções
Há diversos formatos de instruções, com características particulares, vantagens e desvantagens.
O conjunto de instruções de uma máquina pode ser constituído por instruções de diversos formatos. Esta flexibilidade permite a escolha da instrução adequada para aplicação em cada caso.
O conjunto de instruções normalmente pode ser analisado sob alguns aspectos, como, por exemplo:
	Quantidade de instruções
	
	Quantidade de operandos (normalmente 1, 2 ou 3 operandos)
	
	Modo de endereçamento
Veja o exemplo de uma instrução com 2 operandos:
		ADD
	11010011
	8 BITS
		SALÁRIO
	110011001100
	12 BITS
		TAXA
	101010101010
	12 BITS
Podemos ver que na formação da instrução temos:
	A Operação ADD definida por um código binário de 8 bits
	
	Somado a 2 Operandos, separados por vírgulas e definidos por 12 Bits cada um
Totalizando 32 Bits de uma instrução
Isso já nos leva a entender que a Palavra desse processador seria de 32 Bits, que é o tamanho da informação que trafega entre a CPU e a memória principal. Dessa forma, temos um exemplo de uma instrução definida por 1 operação e 2 operandos.
Veremos posteriormente exemplos práticos de instruções com 1, 2 e 3 Operandos, o que permite verificar como é o processamento interno de uma máquina, por exemplo, na execução de uma expressão matemática.
Quantidade de Operados
Instruções de máquinas são constituídas por um conjunto de beta, que contém um subconjunto chamado código de operação, responsável por identificar a operação a ser realizada pelo hardware.
Esse código é decodificado na UC na fase de instrução, gerando os pulsos de controle para acionar as portas lógicas necessárias à execução da operação.
Possui ainda um ou mais grupos de bits denominados campo(s) do(s) operando(s) que tem por função identificar e localizar o dado a ser processado.
Instruções com 3 operandos
Dentro de uma instrução de 3 operandos, os campos 1 e 2 representam os endereços de cada dado que será utilizado na operação.
O campo relativo ao Operando 3 contém o endereço onde será armazenado o resultado da operação em execução.
Como exemplo, teríamos como operações fundamentais (ADD = SOMA, SUB = SUBTRAÇÃO, MPY = MULTIPLICAÇÃO e DIV = DIVISÃO) as representações abaixo:
	ADD
	A, B, X
	
	X=A+B
	SUB
	A, B, X
	
	X=A-B
	MPY
	A, B, X
	
	X=A*B
	DIV
	A, B, X
	
	X=A/B
Quando verificar as instruções acima, pense da seguinte forma:
	ADD
	A, B, X
	
	“Pegue A, some com B, e armazene em X”
Seguindo esse pensamento, como seria escrito um conjunto de instruções de 3 operandos para executar o cálculo da expressão abaixo?
	X = A*(B+C*D-E/F)
Resultado:
	X = A*(B+C*D-E/F)
	1
	MPY
	C,D,T1
	2
	DIV
	E,F,T2
	3
	ADD
	B,T1,X
	4
	SUB
	X,T2,X
	5
	MPY
	A,X,X
Veja que com 3 operandos foram necessárias 5 linhas de programação.
Respeitando as regras matemáticas e priorizando parênteses, multiplicações e divisões, a ordem criada na programação das instruções foi a seguinte:
	X = A*(B+C*D-E/F)
	1
	MPY
	C,D,T1
	Ficamos com X = A*(B+T1-E/F)
	2
	DIV
	E,F,T2
	Ficamos com X = A*(B+T1-T2)
	3
	ADD
	B,T1,X
	Ficamos com X = A*(X-T2)
	4
	SUB
	X,T2,X
	Ficamos com X = A*(X)
	5
	MPY
	A,X,X
	Ficamos com X = X
Feito isso, o cálculo foi realizado utilizando-se de 2 endereços de memória adicionais (T1 e T2, além de X, que era o endereço final para armazenamento do cálculo da expressão.
Instruções com 2 operandos
Nas instruções com 2 operandos, novas operações aparecem, em virtude de algumas limitações. Quando há somente 2 operandos, o campo 1 sempre recebe o resultado da operação.
	ADD
	A, B
	
	A=A+B
	SUB
	A, B
	
	A=A-B
	MPY
	A, B
	
	A=A*B
	DIV
	A, B
	
	A=A/B
	MOVE
	A, B
	
	A=B
Seguindo esse pensamento, como seria escrito um conjunto de instruções de 2 operandos para executar o cálculo da mesma expressão que foi feita anteriormente?
	X = A*(B+C*D-E/F)
Resultado:
	X = A*(B+C*D-E/F)
	1
	MPY
	C,D
	
	2
	DIV
	E,F
	
	3
	ADD
	B,C
	
	4
	SUB
	B,E
	
	5
	MPY
	A,B
	
	6
	MOVE
	X,A
	
Com a mudança de operandos, também foi alterada a quantidade de linhas de código necessárias para efetuar o cálculo, de forma que sua ordem de execução foi a seguinte:
	X = A*(B+C*D-E/F)
	1
	MPY
	C,D
	Ficamos com X = A*(B+C-E/F)
	2
	DIV
	E,F
	Ficamos com X = A*(B+C-E)
	3
	ADD
	B,C
	Ficamos com X = A*(B-E)
	4
	SUB
	B,E
	Ficamos com X = A*(B)
	5
	MPY
	A,B
	Ficamos com X = A
	6
	MOVE
	X,A
	Ficamos com X = X
Perceba que a Operação Move, como o próprio nome diz, MOVE o conteúdo de um endereço de memória, para outro endereço. Sendo assim, o conteúdo que estava no endereço de memória A foi movido para o endereço X.
Instruções com 1 operando
Nas instruções com 1 operando, o uso do Acumulador (registrador utilizado para armazenamento temporário na CPU) é constante, pois é utilizado como um operando não expressamente declarado, mas utilizado em todas as operações.
	ADD
	Op.
	
	ACC=ACC+Op
	SUB
	Op.
	
	ACC=ACC-Op
	MPY
	Op.
	
	ACC=ACC*Op
	DIV
	Op.
	
	ACC=ACC/Op
	LDA
	Op.
	
	ACC=Op
	STA
	Op.
	
	Op=ACC
Nesse tipo de execução, tem-se 2 novas operações, sendo elas LDA (LOAD) e STA (STORAGE), onde:
	• LDA se refere a carregar um conteúdo armazenado na memória; e
	• STA a armazenar um conteúdo na memória
Quando visualizadas as operações, implicitamente o Operando ACC deve ser considerado, ou seja, no exemplo ADD Op., entende-se:
“Pegue o conteúdo do Acumulador, some ao Operando, e grave novamente no Acumulador”.
Seguindo esse pensamento, como seria escrito um conjunto de instruções de 2 operandos para executar o cálculo da mesma expressão que foi feita anteriormente?
	X = A*(B+C*D-E/F)
Resultado:
	X = A*(B+C*D-E/F)
	1
	LDA C
	Carrega C no Acc
	
	2
	MPY D
	Efetua Acc*D e grava em Acc
	
	3
	STA X
	Armazena o conteúdo de Acc em X
	
	4
	LDA E
	Carrega E no Acc
	
	5
	DIV F
	Efetua Acc/F e grava em Acc
	
	6
	STA T1
	Armazena o conteúdo de Acc em T1
	
	7
	LDA B
	Carrega B no Acc
	
	8
	ADD X
	Efetua Acc+X e grava em Acc
	
	9
	SUB T1
	Efetua Acc-T1 e grava em Acc
	
	10
	MPY A
	Efetua Acc*A e grava em Acc
	
	11
	STA X
	Grava o conteúdo de Acc em X
	
Veja que, durante a execução das instruções, ele preparou C*D e gravou em X, como também E/F e gravou em T1, posteriormente, executando uma operação após a outra. Mesmo assim, foram necessárias 11 linhas de operações para a execução da mesma expressão matemática.
Modos de Endereçamento de Instruções
Sabe-se que os programas a serem executados e, consequentemente, suas instruções são carregados na memória principal.
Para que o conteúdo a ser lido ou armazenado seja referenciado, é necessário ter um modo de endereçamento que possa identificá-lo individualmente para que a unidade central de processamento, ou CPU, possa determinar qual posição de memória está sendo usada por uma instrução da máquina.
Sendo assim, existem alguns modos de endereçamento:
• Imediato: utiliza um valor como operando e não um endereço na memória, ou seja, não é utilizado um endereço da memória, o operando é parte da instrução. Permite definir constante e valores de variáveis iniciais;
• Direto: indica o endereço de memória onde está o operando;
• Indireto: Indica um ponteiro de endereço para um operando, onde o conteúdo deste ponteiro não é um dado e sim outro endereço. Há um duplo endereçamento neste caso;
• Por registrador: O endereço se refere a um endereço de registrador e não da memória principal;
• Base + Deslocamento: Endereço obtido pela soma do operando com o conteúdo de umregistrador-base.
Paralelismo
Como temos estudado desde o início, o resultado de toda a evolução na computação é a busca pela otimização.
Todas as evoluções conhecidas até o momento são resultado dessas buscas. Um destes resultados, perceptíveis e em constante crescimento, é a frequência de operação das máquinas, ou clock interno dos processadores.
Aumentar a velocidade do clock interno dos processadores sempre é sinônimo de aumentos significativos na performance de um equipamento. Porém, existem outros métodos, desenvolvidos no decorrer das pesquisas, que permitiram a evolução na otimização do ciclo de Busca–Decodificação–Execução, conhecida como Paralelismo.
O Paralelismo, como a própria palavra diz, é a possibilidade de executar instruções em paralelo. Quando pensamos desta forma, em um primeiro momento, pensamos nos atuais processadores Dual Core, Quad Core, entre outros, que não deixam de ser um tipo de paralelismo a nível de Processador.
E se dissermos que há possibilidade de paralelismo em um único processador?
É isso que veremos a partir de agora.
Formas gerais de paralelismo
Existem duas formas gerais de paralelismo:
	• Paralelismo no nível de instrução
	
	• Paralelismo no nível de processador
Paralelismo no nível de instrução
Dos diversos métodos de paralelismo a nível de instrução, o mais conhecido deles é o PIPELINE.
Pipeline foi uma técnica revolucionária que consistia em dividir a execução de uma instrução através do ciclo de instruções em diversas etapas, chamadas estágios, onde cada uma era manipulada por um agente distinto dentro do ciclo de instrução.
Dessa forma, era possível identificar agentes “ociosos” dentro do processo, podendo agilizar e iniciar outra instrução, mesmo que a anterior não tivesse sido finalizada.
Tomemos como base o ciclo de Busca–Decodificação–Execução e algumas de suas etapas:
		Tempo
	1
	2
	3
	4
	5
	6
	7
	8
	9
	10
	11
	12
	
	[C]
	[M]
	[D]
	[X]
	[W]
	
	
	
	
	
	
	
	
	
	[C]
	[M]
	[D]
	[X]
	[W]
	
	
	
	
	
	
	
	
	
	[C]
	[M]
	[D]
	[X]
	[W]
	
	
	
	
	
	
	
	
	
	[C]
	[M]
	[D]
	[X]
	[W]
	
	
	
	
	
	
	
	
	
	[C]
	[M]
	[D]
	[X]
	[W]
	
	
	
	
	
	
	
	
	
	[C]
	[M]
	[D]
	[X]
	[W]
	
	
	
	
	
	
	
	
	
	[C]
	[M]
	[D]
	[X]
	[W]
	
	
	
	
	
	
	
	
	
	[C]
	[M]
	[D]
	[X]
	[W]
Carrega Instrução [C]
	
	Acessa Memória [M]
	
	Decodifica Instrução [D]
	
	Executa Instrução [X]
	
	Armazena resultado [W]
Fonte: Adaptado pelo Autor
Se tomarmos originalmente o ciclo de instrução aprendido e o ciclo de clock, a próxima instrução seria carregada somente depois que TODO o ciclo fosse executado. Porém, entende-se que, se a instrução foi carregada e já está no processo de busca na memória, o processo poderia ser otimizado.
O Pipeline foi criado para isso. Trata-se de uma metodologia básica para melhorar a velocidade, reduzindo o número de ciclos de clock necessários para executar uma instrução, permitindo sobrepor a execução das instruções através dos pipelines, fazendo, assim, o uso uso mais adequado do hardware.
Veja o esquema abaixo, de acordo com a cronologia do tempo:
Perceba que, com o pipeline, ocorre uma independência entre as fases de execução da instrução.
Não será sempre o caso, mas, em boa parte das vezes, o pipeline evitará a ociosidade e aumentará a eficiência do processador.
Se analisar, no tempo 5, há a primeira instrução no final de execução. Contudo, outras 4 instruções já foram iniciadas, simplesmente usando a ociosidade das etapas anteriores do ciclo de instrução.
Logo, o paralelismo a nível de instrução, através do pipeline, aumenta o desempenho de uma CPU devido ao aumento da vazão das instruções, para que haja maior número de instruções executadas por unidade de tempo.
Atividade
Imagine que você é uma CPU, porém não conhece instruções para multiplicação e divisão de números. Como poderia calcular uma multiplicação ou divisão, sem possuir essas operações?
GABARITO
É necessário utilizar operações de soma ou de subtração, porém usando um contador que verifique quantas vezes já foi somado, ou subtraído, para validar com a conta a ser efetuada originalmente. Você verá que, no passado, para execução de algumas instruções em processador, esse método também precisou ser utilizado.
Exercícios
Questão 1: Considerando uma instrução com código de operação de 4 bits e operando de 8 bits, quantas instruções no máximo podem existir nessa configuração?
16 instruções diferentes
Questão 2: Considere a expressão X = A*(B+C*D-E/F). O conjunto de instruções de 3 operandos abaixo representa as instruções necessárias para a aplicação da mesma.
01: MPY C,D,T1
02: DIV E,F,T2
03: ADD B,T1,X
04: __________
05: MPY A, X,X
Identifique a instrução na linha 04 para que o conjunto de instruções obtenha o resultado correto da expressão:
SUB X,T2,X
Questão 3: São Modos de Endereçamento de Instruções:
Imediato
Direto
Indireto
Por registrador
Organização de Computadores / Aula 08: Memória
O que é memória?
Memória é o componente dentro da arquitetura e organização do computador com a função de armazenar os programas e os dados que serão manipulados pelo sistema operacional dentro dos ciclos de instrução.
A memória não pode ser considerada um componente único, mas sim um subsistema.
Veremos nesta e na próxima aula que, para o perfeito funcionamento otimizado do computador, vários tipos de memória são envolvidos a fim de compensar a velocidade da CPU, que é sempre superior à da velocidade da memória.
Caso dentro do sistema de computação existisse somente um tipo de memória, para que o processamento fosse aceitável, sua velocidade teria que ser compatível à velocidade da CPU.
Isso inviabilizaria a construção da máquina, pois, com esta velocidade e com alta capacidade de armazenamento, a tecnologia utilizada seria de alto custo e não acessível ao mercado.
Velocidade de processamento
Para ficar mais clara a diferença de velocidade de processamento, vamos falar dos números. 
Dentro da CPU, um dado é processado em aproximadamente 5 nanossegundos (isto significa 5 bilionésimos de segundo), ao contrário do processamento da memória principal (que será vista detalhadamente na próxima aula).  
Como sabemos que tudo que está sendo processado fica armazenado na memória RAM e é requisitado pela CPU, quando a CPU recebe este conteúdo e processa em 5ns, a CPU fica mais 55ns ociosa aguardando o envio de uma nova informação por parte da memória principal.  
Por esse e por outros motivos, surgiram outras memórias que auxiliam nesta compensação.
Memória primária x secundária
Para se entender a diferença dessas divisões, é importante conhecer o conceito de volatilidade. 
Uma memória é volátil quando ela perde o conteúdo, quando não há alimentação de energia. Resumindo, se o equipamento é desligado, seu conteúdo é perdido.
Sendo assim, analise as definições:
Memória primária
São os componentes que fornecem dados e instruções para uso imediato, sendo voláteis.
 
Basicamente, é formada pelos seguintes componentes:
Registradores, Memória cache e Memória principal.
Memória secundária
São os componentes que provêm capacidade de armazenamento permanente (não voláteis).
 
Exemplos de dispositivos de armazenamento secundário são:
Discos Rígidos, Discos Óticos (CDs, DVDs, etc.) e Fitas.
Dessa forma, podemos considerar como hierarquia de memória a estrutura apresentada a seguir:
	Classificação
	Nome
	Nome
	Custo
	Volatilidade
	Velocidade
	Primária
	Registradores
	Bytes
	Muito alto
	Volátil
	
	Maior
	
	Memória Cache
	de K a MBytes
	Alto
	Volátil
	
	
	
	Memória Principal
	de M a GBytes
	Médio
	Volátil
	
	
	Secundária
	Disco Rígido, DVD, Bluray
	de G a TBytes
	baixo
	Não-Volátil
	
	Menor
Fonte: Adaptado pelo autor
Registradores
Quando estudamos o ciclo de instrução, ou ciclo de busca–decodificação e execução, verificamos a presença de registradores, que são dispositivos de armazenamento temporário, localizados na CPU, utilizados constantemente dentro do processo de execução das instruções.
Por serem usados pela CPU, entende-se que são memórias muito rápidas. Na verdade, são consideradas as memóriasmais rápidas existentes no sistema de computação.
Porém, como seu objetivo é o armazenamento do conteúdo de memória a ser processado pela CPU, sua capacidade de armazenamento se limita à palavra daquele processador, normalmente variando de 8 a 64 Bits.
Mesmo sendo de baixa capacidade de armazenamento, os registradores são sempre construídos internamente no chip do processador.
O que faz com que sua tecnologia de construção seja cara e não permita o uso de muitos registradores. Contudo, isso permite que seu tempo de acesso seja compatível com a velocidade da CPU, entre 1 e 5 nanossegundos.
O conceito de registrador surgiu da necessidade da CPU armazenar temporariamente dados que serão usados em seu processamento.
Por estarem dentro da CPU, subentende-se que os registradores são voláteis, isto é, precisam ser alimentados constantemente pela energia elétrica para manter o conteúdo armazenado.
Memória cache
Como já estudado, a CPU trabalha diretamente com a memória RAM. Sendo assim, todos os dados processados são recebidos dos módulos de memória RAM, para, dessa forma, serem decodificados e executados.
Porém, com o desenvolvimento constante na tecnologia de construção de processadores, (lembre-se inclusive da Lei de Moore) a sua velocidade foi ficando cada vez maior quando comparada à velocidade de transmissão da memória principal (que não acompanhou da mesma forma a evolução em velocidade, mas sim em capacidade de armazenamento).
Com isso, surgiu um desequilíbrio entre a comunicação da CPU e a memória principal, de forma que a CPU processa dados mais rápido do que a memória RAM poderia enviar, resultando em longos períodos de ociosidade ou estados de espera (“wait states”) devido ao gargalo (“bottleneck”) criado por este desequilíbrio, o que logicamente resulta em um desperdício da capacidade de processamento da CPU.
Por esse fato e também porque os registradores possuem alta velocidade mas baixa capacidade de armazenamento, foi necessário, dentro da hierarquia da memória, criar uma nova “camada” que possibilitasse a CPU usar melhor toda a sua capacidade de processamento: a memória cache.
Memória Cache feita no núcleo da CPU.
Portanto, a cache é uma memória criada justamente para diminuir os “estados de espera” entre CPU e memória principal, sendo muito mais rápida do que a memória RAM e com mais capacidade do que os registradores.
Ela tem a função de armazenar temporariamente conteúdos muito requisitados e fornecer as informações para a CPU de forma mais ágil, evitando que a memória principal tenha que ser consultada a todo momento, reduzindo a ociosidade da CPU.
Certamente, o custo da memória cache é maior do que o da principal e menor do que o custo de registradores, o que justifica parte da solução encontrada.
No entanto, o custo de fabricação da memória cache é muito maior do que o da principal, não justificando a extinção da principal. Ou seja, não seria viável economicamente construir um computador somente com tecnologia de memória cache.
A partir dos processadores 386, surgiu a inclusão de memória cache, localizada entre a CPU e a principal, e que funcionaria como um espelho de parte do conteúdo dessa memória principal.
Exemplo das primeiras placas-mãe lançadas com memória cache, localizada na própria placa-mãe.
Princípio da localidade
O funcionamento da memória cache se faz da seguinte forma: todo conteúdo consultado com mais frequência na memória principal é mantido de forma espelhada na memória cache, ou seja, este conteúdo não é apagado na memória principal, somente espelhado.
Esse conteúdo consultado com frequência é verificado pelo princípio da localidade.
Por esse princípio, se um endereço, por exemplo, na memória principal, foi requisitado pela CPU, é bem provável que um endereço próximo ou vizinho a este seja o próximo a ser consultado pela CPU na memória principal.
Dessa forma, antecipa-se não somente o conteúdo solicitado pela CPU, mas também o conteúdo dos endereços próximos a esta localidade são espelhados da memória principal para a cache, de modo que, em uma próxima vez que for efetuada uma consulta por parte da CPU, este conteúdo possa ser acessado diretamente pela cache, otimizando o tempo de processamento.
Tipos de princípio da localidade
· PRINCÍPIO DA LOCALIDADE TEMPORAL
· PRINCÍPIO DA LOCALIDADE ESPACIAL
O conteúdo estará disponível na memória cache de imediato?
Logicamente, nem sempre, em uma consulta efetuada pela CPU, o conteúdo estará disponível na memória cache de imediato.  
Sendo assim, existem duas possibilidades:
• Se a CPU busca um determinado dado e o encontra na cache, dá-se o que chamamos de cache hit, ou seja, conteúdo é localizado na cache;
• Se o caso for negativo, ou seja, se o dado não estiver presente na cache, sendo necessário requisitar o conteúdo para a memória principal, dá-se o que chamamos de cache miss.
Independente de cache miss ou cache hit, dentro do processo de fabricação da memória cache e suas metodologias de gravação de dados, o índice de cache hit é geralmente acima de 90%.
Isso nos mostra que, em boa parte do tempo, o equipamento atua pesquisando na memória cache.
Níveis de cache
· CACHE L1 (NÍVEL 1)
Pequena memória inserida internamente no processador, ou seja, encapsulada dentro do núcleo de processamento.
Também conhecida como cache on-die (no núcleo), exatamente por estar dentro do processador.
Alguns fabricantes identificam as memórias cache L1 como formada por dois elementos:
Memória de instrução – acionada quando o processador está buscando uma instrução;
Memória para dados – acionada se o processador estiver buscando um dado.
· CACHE L2 (NÍVEL 1)
Localizada fora do núcleo, mas muito próxima do mesmo, sendo construída normalmente dentro do processador.
· CACHE L3 (NÍVEL 3)
Em algumas arquiteturas, encontramos ainda o nível 3 na placa-mãe.
Em outras, dentro do processador. Porém, usada como cache compartilhada entre os núcleos de um processador.
Foi criada originalmente pelo fabricante AMD.
Exemplo do processador Phenom II X3 da AMD
Para ficar mais claro, veja o exemplo abaixo, de um processador Phenom II X3 da AMD, de 6 núcleos, em que são mostradas suas especificações por meio de imagem microscópica.
• L1 Cache: 128KB (64KB Instrução + 64KB Dados) em cada Núcleo;
• L2 Cache: 512KB em cada Núcleo;
• L3 Cache: 6MB L3 (Compartilhado entre os núcleos).
Mapeamento de cache
Mesmo com a memória cache, a localização das instruções ou dados a serem manipulados pela CPU continuam se relacionando a endereços da memória principal e não da memória cache.
Se a CPU busca um determinado conteúdo, continua sendo referenciado o endereço da MP.
Sabendo que a memória cache possui uma pequena porção de memória e que normalmente o índice de cache hit é de 90%, como esta memória é referenciada na cache, de forma a evitar que toda a memória cache tenha que ser varrida a fim de localizar um determinado endereço?
O que seria ineficiente?
A base disso é o processo de mapeamento da memória, ou seja, é feita uma divisão da memória principal em blocos de tamanho fixo, conhecidas como linhas de cache.
Essas linhas possuem de 4 bytes (32 bits) a 64 bytes (512 bits) e são endereçadas a partir do zero, de forma que, se a memória principal for dividida em 64 bytes, teríamos as linhas que iriam de 0 a 63 bytes, de 64 a 127 bytes, e assim por diante.
Feito isso, já se tem uma forma de mapeamento que pode ser feito na cache.
Veja algumas formas desse mapeamento da cache:
Caches totalmente associativas
Neste método todas as linhas de cache da memória principal podem ser gravadas em qualquer localização na memória cache.
É uma forma ineficiente porque a recuperação dos dados pode levar à varredura completa da cache para localizar o conteúdo.
Caches de mapeamento direto
O método de mapeamento direto limita a gravação das linhas de cache em locais específicos na cache. Porém, este índice pré-definido dos locais permite que a pesquisa do conteúdo na cache seja mais ágil.
A figura abaixo mostra um esquema de mapeamento direto em que a linha de cache consisteem 32 bytes (256 bits).
Caches associativas de conjunto
Este tipo de mapeamento é um esquema híbrido entre o mapeamento totalmente associativo e o mapeamento direto.
Ele permite que os problemas do mapeamento totalmente associativo (em que a cache inteira precisa ser varrida à procura de um endereço) e do mapeamento direto (em que ocorrem colisões) sejam minimizados.
Nele, um mesmo endereço na memória principal pode ser armazenado em mais de um local (por vez) da cache, através da criação de vias de cache, ou seja, cada linha pode possuir n vias de cache, onde normalmente são de 2 a 4 vias.
Utilizando o exemplo mencionado anteriormente, onde foi consultado pela CPU o endereço 195 e logo após o 65, que faziam parte da mesma linha de chave, a colisão seria evitada, pois, com 2 vias possíveis na linha de cache 0, ambas as linhas da memória principal poderão ser gravadas, cada uma em uma via específica.
Isso resolve parte dos problemas encontrados nos métodos anteriores e agiliza o mapeamento e a consulta de conteúdo na cache.
Métodos de substituição de dados
No que se refere à memória cache, é importante lembrar que existe um momento em que sua capacidade está lotada e os dados precisam ser substituídos, como, por exemplo, os das vias de cache.
Como optar por qual via de cache a ser excluída  para uma nova substituição? 
Existem três métodos conhecidos de substituição de dados na cache:
	Substituição Aleatória
	É escolhida uma posição qualquer da cache aleatoriamente para ser substituída.
	First-in First-out
	Remove a linha que está mais tempo na cache.
	Least Recently Used (LRU)
	Remove a via menos recentemente utilizada e a linha que a mais tempo não é referenciada pelo CPU. Quando há um cache hit, um contador é zerado para esta via, enquanto todos os demais tem seu contador incrementado.
Quando for necessário substituir uma linha na cache, será retirada aquela cujo contador tiver o valor mais alto. Utilizado para substituição de dados no mapeamento de cache associativa de conjunto.
Políticas de escrita em cache na memória principal
Logicamente, é necessário que, em algum momento, os dados atualizados na memória cache também sejam atualizados na memória principal. Afinal, uma deve ser o espelho da outra.
Sendo assim, existem políticas que efetuam esta atualização:
Write Through
Consiste em atualizar o valor em cache e na MP simultaneamente.
Write Back
Consiste em atualizar a cache, porém ao enviar atualizações em blocos para a memória principal.
Atividade
1 - Nesta aula, conhecemos mais a fundo o subsistema de memória, incluindo a memória cache.
Sobre isso, responda:
Quanto seu equipamento possui de memória cache?
Quais os tipos encontrados?
Para esta atividade, instale o aplicativo CPUZ e procure descobrir a configuração de memória cache que seu computador possui.
GABARITO
Ao instalar, você verá uma opção como a tela abaixo. Nela, será visualizada a configuração de memória cache disponível em seu equipamento. Guarde esta informação, usaremos posteriormente.
2 - Sobre memória cache:
Há ocorrência de cache miss e cache hit.
Funciona como espelho da parte de memória principal.
Capacidade de armazenamento maior do que dos registradores.
Velocidade de acesso maior do que a da memória principal.
3 - É considerada como uma memória secundária:
Disco rígido
4 - Remove a via menos recentemente utilizada. Remove a linha que mais tempo não é referenciada pelo CPU:
Substituição Aleatória
First-in First-Out
Write Back
Write ThroughCondicional
Organização de Computadores / Aula 09: Memória (Parte 2)
Introdução
· Lembra o que é memória?
Como vimos na última aula, memória é o componente dentro da arquitetura e organização do computador com a função de armazenar os programas e os dados que serão manipuladas pelo sistema operacional dentro dos ciclos de instrução.
Uma das principais características definidas na arquitetura de Von Neumann baseia-se no fato de uma máquina possuir programa armazenado. Isso significa que as instruções, uma após a outra, são imediatamente requisitadas pela CPU, sendo um dos fatores que implementa a automação do sistema e otimiza a velocidade de execução dos programas (uma máquina executando ações sucessivas, sem intervalos e sem cansar, como não acontece com os seres humanos).
Memória Principal
A Memória Principal é a memória básica de um sistema de computação desde seus primórdios. É o dispositivo onde o programa (e seus dados) que vai ser executado é armazenado para que a CPU vá “buscando” instrução por instrução.
Normalmente é chamada de RAM (Random Access Memory, em português Memória de Acesso Aleatório).
Sua tecnologia de construção se difere das memórias cache. Para se ter uma ideia, cada bit na memória cache precisa de 6 transistores, ao passo que 1 bit de MP necessita apenas de 1 capacitor e 1 transistor.
Isso permite uma densidade mais elevada da MP e, portanto, uma capacidade maior a um custo menor.
Porém, o acesso é bem mais lento do que o das memórias cache, como já é sabido.
Estrutura Processador/Memória Principal
Somente duas operações são permitidas na comunicação CPU/Memória Principal. São elas:
	Leitura (sinal READ)
	Escrita (sinal WRITE)
	Para recuperar um conteúdo armazenado. Esta ação não elimina o conteúdo da memória.
	Para armazenar informações na memória. Esta ação elimina o conteúdo da memória, gravando uma informação por cima.
Dentro do processo de gravação, são utilizados:
 Barramentos de Controle;
 Endereços e Dados;
 Unidade de Controle (UC);
 Registradores de Endereço de Memória (REM);
 Registrador de Dados de Memória (RDM).
Todo o processo de comunicação pode ser resumido pela figura acima, em que o único fluxo unidirecional é relativo ao barramento de Endereços.
Processo de leitura
	1
	A CPU armazena no REM o endereço da posição, onde a informação a ser lida está localizada;
	2
	A CPU comanda uma leitura (sinal de controle para memória - READ), pelo barramento de controle;
	3
	O conteúdo (Palavra) da posição identificada pelo endereço armazenado no REM, então, é transferido para o RDM e a partir dele enviado para a UCP, pelo barramento de dados.
Processo de escrita
	1
	A CPU envia, para o REM, o endereço da memória onde a palavra será gravada e, para o RDM, a informação (Palavra) da posição a ser gravada;
	2
	A CPU comanda uma gravação (sinal write) pelo barramento de controle;
	3
	A palavra armazenada no RDM é, nesse momento, transferida para a posição de memória, cujo endereço está no REM.
Células e Endereços
A Memória Principal é organizada como um conjunto de células que ficam sequencialmente dispostas, de modo que a CPU possa recuperar e armazenar informações sempre que necessário, através de endereços que permitem a localização das mesmas.
Quando se diz célula, queremos dizer a unidade de armazenamento do computador na Memória Principal, sendo a menor unidade da memória que pode ser endereçada, pois não é possível buscar uma parte da célula, e sim a célula no seu todo, que possui um tamanho fixo, de acordo com a máquina e sua construção.
Porém, na atualidade, se baseia em células de 8 bits, ou seja, 1 byte, que são identificadas por um Endereço único, onde a CPU se referencia  ao tentar acessar, seja para consulta ou para gravação pelo Sistema Operacional.
As células são numeradas sequencialmente, de 0 a m-1. Endereço é o localizador da célula, que permite identificar univocamente uma célula, conforme exemplo abaixo.
A Memória Principal é assim organizada em unidade de armazenamento, formada por este conjunto de células.
Em geral, para se representar o endereço, é utilizado o tamanho máximo da PALAVRA do computador. Normalmente, o tamanho máximo do Registrador, endereço este que irá trafegar no Barramento de Endereços, já estudado em aulas anteriores.
Representação do endereço
É a quantidade de bits necessária para representar a quantidade de memória.
Se analisarmos desta maneira, sabemos que 1 bit consegue representar 2 endereços de memória, ou seja, 0 e 1.
Sendo assim, podemos considerar algumas fórmulas parafacilitar a representação de endereços de células na Memória Principal.
Fórmulas:
Quantidade células possíveis para de se endereçar com x bits.
Assim, com 8 bits, conseguimos endereçar o total de 256 células, uma vez que 28 = 256 células de memória de 8 Bits, ou 256 Bytes.
Capacidade de memória
Você deve estar se perguntando... como se calcula a capacidade de memória de um equipamento?
Deve-se calcular o número total de endereços (total de células) x tamanho de cada célula de memória.
Vamos entender melhor através de um exemplo.
Atividade
Com base no estudo acima, prove que um computador de 32 bits é compatível com o máximo de 4 GB de memória RAM.
GABARITO
Sabendo que o processador é de 32 Bits e sua PALAVRA é de 32 bits, o registrador também poderá endereçar no máximo 32 bits em endereço de memória. Sendo assim, 232 = 4294967296 células de memória de 8 Bits, que equivalem a um total de 4 Gigabytes.
Classificações da memória
As memórias podem ser classificadas de diversas maneiras.
Veja alguns exemplos importantes:
Quanto à forma de acesso
	Aleatória (RAM)
	Não aleatório (Memórias Secundárias)
	Significa que o tempo de acesso será o mesmo, independentemente de onde se encontra a célula.
O termo acesso aleatório se relaciona à capacidade de acesso em qualquer posição de memória e em qualquer momento para gravação e leitura de conteúdo.
	O tempo de acesso dependerá de onde o dado se encontra e tem relação com o acesso sequencial, imposto por alguns dispositivos de armazenamento, como uma unidade de fita.
Quanto ao acesso de leitura e escrita
· R/W
Read and Write ou memória de leitura e escrita. Este tipo de memória permite operações de escrita e leitura pelo usuário e pelos programas. É uma memória volátil, ou seja, perde seu conteúdo na falta de energia.
· ROM
Read Only Memory ou memória apenas de leitura. Esta memória permite apenas a leitura. Seu conteúdo, uma vez gravado, não pode mais ser alterado.
Foi muito utilizado inicialmente por fabricantes de computadores para gravar programas que não deviam ser apagados (por exemplo a BIOS - Basic Input Output System de computadores). É um tipo de memória não volátil.
· PROM
Programmable Read Only Memory ou memória apenas de leitura, programável. Esta memória é uma ROM Programável. Diz-se programável pois ela poderia ser comprada “virgem”, sem conteúdo, e, uma vez gravado o conteúdo com os gravadores de PROM, não podiam mais ser alterados.
· EPROM
Erasable Programmable Read Only Memory ou memória apenas de leitura.
Assim como a PROM, poderia ser gravado com os gravadores de PROM apropriados, mas poderiam também ter seu conteúdo apagado utilizando-se máquinas específicas, baseadas em raios ultravioleta. Não foi muito utilizado depois da chegada da EEPROM.
· EEPROM (OU E2PROM)
Electrically Erasable Programmable Read Only Memory ou memória apenas de leitura, programável e eletronicamente alterável. Também chamada EAROM (Electrically Alterable ROM).
Esta sim é uma memória EPROM, agora apagável por processo eletrônico, com equipamento e programas adequados. Apesar de mais cara, é geralmente utilizada em dispositivos em que se deseja permitir alteração, possibilitando a carga de novas versões de programas ou então para possibilitar a reprogramação dinâmica de funções específicas de um determinado programa ou equipamento.
Atualmente, grande parte dos equipamentos, sejam eles notebooks ou desktops, possuem sua atualização de BIOS ou Firmware baseado em EEPROM, em que sua atualização não depende da troca de hardware, mas somente da execução de um programa que faz toda a sua alteração eletrônica.
· FLASH
Um tipo específico de EEPROM, que é escrita e apagada em blocos, ao contrário das EEPROMs convencionais, em que é possível apagar cada byte, ao invés de grandes blocos de dados.
EEPROMs convencionais são bem mais caras. Poderiam ser utilizadas para substituir os discos rígidos, porém se desgastam após serem apagadas 100 mil vezes. Ao passo que discos duram muitos anos, não importando quantas vezes sejam reescritos.
O custo do byte armazenado em uma memória flash também é bem maior do que o custo do byte em um disco rígido convencional, como pode ser visto hoje com os discos SSD.
Quanto à tecnologia de construção
	SRAM (Static RAM)
	DRAM (Dynamic RAM)
	São memórias de conteúdo estático, que não dependem de atualizações periódicas de alimentação de energia para manterem os valores armazenados. Estes tipos de memória, por serem mais rápidas e de custo mais elevado, são utilizadas principalmente na construção de memórias cache.
	Essas memórias têm tempo de acesso maior, na faixa de 60ns e são as mais comuns hoje em dia. A Memória Principal normalmente emprega essa tecnologia.
Como seu conteúdo é perdido em alguns instantes, elas precisam ser periodicamente atualizadas (ciclo de “refresh”) e com alimentação constante de energia, o que faz com que fiquem indisponíveis para novas transferências em intervalos regulares. São as memórias utilizadas na construção da memória RAM.
Antes de continuar, saiba mais sobre memória DRAM.
Memória secundária
Memórias secundárias ou memórias auxiliares são dispositivos de armazenamento em massa, não deixando de ser importantes no subsistema de memória, principalmente na resolução de problemas de armazenamento de grande quantidade de informações, bem como pelo falo de serem memórias não voláteis, ou seja, a informação não é perdida quando a mesma perde a alimentação de energia elétrica.
A capacidade da Memória Principal é limitada pelo seu relativo alto custo. As memórias auxiliares, ao contrário, têm maior capacidade e menor custo.
Portanto, o custo por bit armazenado é muito menor.
A memória secundária em sistema de computação pode ser formada por diferentes tipos de dispositivos, alguns acessados diretamente e de forma constante pelo sistema operacional (disco rígidos - Hard Disks – HD, ou os atuais discos SSD) e outros que podem ser conectados quando desejados (Pen Drives, CD-ROM, etc).
	
Pendrive
	
Cartão de memória
	
HD Externo
	
HD (Hard Disk)
	
CD / DVD /Bluray
Lembrando que uma das principais características dos dispositivos que constituem as memórias secundárias é sua NÃO VOLATILIDADE, isto é, não dependem de estar energizados para manter seu conteúdo gravado.
Características importantes
Veja algumas características importantes quanto a outros dispositivos de armazenamento secundário:
· TEMPO DE ACESSO
Uma vez que muitos são dispositivos eletromecânicos e não circuitos puramente eletrônicos (a exemplo dos discos rígidos, CD-ROM, DVD-ROM, entre outros), seu tempo de acesso é muito mais elevado.
O acesso a um dado no disco rígido, por exemplo, depende do deslocamento do braço que contém a leitora e do movimento de rotação do disco.
Dessa forma, todos os processos mecânicos a serem executados por esses dispositivos jamais se compararão em termos de velocidade a um acesso aleatório de uma célula da Memória Principal, que depende apenas de um sinal elétrico para localizar um conteúdo na memória.
· CAPACIDADE
Um dos grandes atrativos dos dispositivos de Memória Secundária é sua alta capacidade de armazenamento, que chegam a dezenas e até centenas de GBytes.
· VOLATILIDADE
Como esses dispositivos armazenam as informações de forma magnética ou ótica, elas não se perdem nem desaparecem quando não há alimentação de energia elétrica.
Disco Rígido
Em termos de Memória Secundária, ainda é muito utilizado o Disco Rígido, formado por uma estrutura eletromecânica de discos de platina, em que a leitura é feita por um cabeçote, que, através da indução, efetua a leitura dos dados, sem efetivamente ter o contato físico com o disco.
Disco Rígido
Disco SSD
Apesar de ainda ser o mais utilizado, oferece riscos maiores para falhas por ser um dispositivo eletromecânico. Por isso, a cada dia cresce o uso dos discos SSD (Solid State Disk), que são discos puramente eletrônicos, formados por células de memória flash e que não dependem de dispositivos eletromecânicos para seu funcionamento.
Isso aumenta consideravelmentesua velocidade, como também seu custo, cujo o GByte ainda é consideravelmente mais caro do que o custo oferecido pelo Disco Rígido.
Basicamente, a função principal dos discos HDD (Hard Disk Drive) e SSD (Solid State Drive) são as mesmas, ou seja, o armazenamento de grande volume de dados não volátil.
A principal desvantagem do SSD em relação ao HD ainda hoje é o preço devido ao fato de que o SSD é uma tecnologia puramente eletrônica, em que discos magnéticos foram trocados por memórias flash, de forma que o custo por GB de armazenamento ainda é mais caro.
Porém, os SSDs se destacam quando o assunto é velocidade. Em uma pequena comparação com um HDD, o tempo de boot de um sistema operacional Windows em um mesmo equipamento cai para menos da metade em um disco SSD.
Atividade
1 - Seguindo a mesma linha de atividades efetuadas na aula anteriores, e aproveitando que o CPUZ já está instalado em seu equipamento, você conseguiria identificar quantos pentes de memória possui e as características de frequência e largura de banda da sua memória?
Verifique com o CPUZ, e guarde esta tela, pois, certamente, será útil para nossos estudos.
GABARITO
Ao instalar, você verá uma opção como a tela abaixo, onde será visualizada a configuração de memória cache disponível em seu equipamento. Guarde esta informação, pois a usaremos posteriormente.
2 - Imagine uma calculadora em que sua última célula apresenta o endereço 255. Considerando que cada célula possui 8 Bits, quantos bytes esta calculadora possui de memória?
256 bytes
3 - Tipo de memória que pode ter seu conteúdo apagado utilizando um equipamento baseado em raios ultravioleta:
EPROM
4 - Considere a memória RAM do tipo DDR2-667 PC2-4200. Com base nessas informações, qual o clock REAL desta memória?
333 Mhz
Organização de Computadores / Aula 10: Dispositivo de E/S
Introdução
O que são dispositivos de entrada e saída?
São considerados dispositivos de entrada e saída todos aqueles equipamentos de computação que, sendo interligados ao sistema de computação, possam inserir e extrair informação do mesmo.  
Esses dispositivos também fazem parte do modelo de Von Newman e até mesmo do projeto inicial do Calculador Analítico de Charles Babbage e, da mesma forma que os processadores e memórias, têm evoluído constantemente, existindo diversas formas de inserir e extrair informações de um computador.
Vejamos alguns exemplos:
Dispositivos de Entrada
Como exemplo mais simbólico, pode-se citar o teclado como um grande e necessário dispositivo de entrada, afinal, sem o mesmo não seria possível inserir os códigos de programação ou instruções a serem usadas na programação de computadores.  
O mesmo para o mouse, dispositivo único e ainda muito utilizado, mas que em alguns casos tem sido substituído por telas Touch-Screen, também dispositivos de entrada.  
Mouse
Teclado
Webcam
Scanner
Dispositivos de Saída
Como dispositivo de saída, nada melhor do que citar uma impressora como representante ou um monitor de vídeo, que permite a visualização dos resultados obtidos em um processamento ou relatório.
Monitor
Impressora
Alto-falante
Projetor
Independente da finalidade, a função de dispositivos de E/S sempre será receber ou enviar informações ao meio exterior de um sistema de computação, convertendo as informações obtidas (de entrada ou de saída) em uma forma inteligível para a máquina (se estiver recebendo dados) ou para o usuário (se estiver enviando). 
Para tanto, cada dispositivo de E/S, assim como as células de memória acessadas pela CPU, precisam ter um endereço computacional para que sejam contatados.
Assim como estudado no modelo de comunicação entre CPU e MP, o envio de sinais de controle, bem como demais informações, era feito por meio de barramentos. Para E/S, também são necessários barramentos de comunicação, pois é através deles que se pode interligar todos os componentes do sistema de computação.
Tipos de transmissão
Existem basicamente duas formas básicas de se realizar transmissão e recepção de dados entre os periféricos, CPU e MP, que pode ser serial ou paralela.
Dependendo da tecnologia ou finalidade de comunicação, cada periférico pode possuir uma dessas formas de comunicação e sua tecnologia respectiva, respeitando a capacidade de transferência entre dispositivos, uma vez que cada periférico possui uma capacidade diferente para transmissão.
Transmissão serial
Na transmissão serial, o periférico é conectado ao dispositivo controlador (veremos posteriormente) ou interface de E/S por uma única linha de transmissão de dados.
 Nesse tipo de transmissão, a informação é transmitida/recebida bit a bit e, por não haver necessidade de controle e gerenciamento como o paralelo, é de fácil controle e implementação.
 Por essa facilidade, o uso deste tipo de transmissão, bem como tecnologias disponíveis, têm crescido consideravelmente.
 Por exemplo, a porta USB (Universal SERIAL Bus, ou barramento SATA - SERIAL ATA), são tecnologias padronizadas no uso de equipamentos.
Transmissão paralela
Na transmissão em paralelo, um grupo de bits é transmitido de cada vez, cada um sendo enviado por uma linha separada de transmissão.
A informação é transmitida/recebida em grupos de bits de cada vez, simultaneamente.
Por ser feita dessa forma, os sinais de cada linha de barramento precisam chegar simultaneamente. Sendo assim, é difícil de controlar, pois os mecanismos de verificação desse “paralelismo” têm de custo elevado.
Entenda melhor por meio da imagem a seguir:
Esquema comparativo das transmissões serial e paralela
Controladora de E/S
A CPU e Memória Principal não se comunicam diretamente com o periférico, necessitando de uma interface de comunicação entre CPU/MP e o periférico, conhecidos normalmente como controladoras de E/S, conforme mostra a figura:
Esquema de comunicação dos componentes do computador
Esses dispositivos ficam interligados através de barramento ou “bus” e normalmente possuem unidades de memória (registradores) para comunicação com a CPU, que se comunica com sua controladora, responsável por converter o fluxo de bits em um bloco de bytes, executando também as correções de erros necessárias e tornando os dados disponíveis para serem copiados para a MP.
Sendo assim, as controladoras de E/S são um hardware que controla uma porta, barramento ou dispositivo e sua comunicação com a CPU, ou seja, quando um programa precisa de dados do disco, por exemplo, ele envia um comando ao controlador de disco, que emite um sinal de comando como “seek” à unidade de disco.
Controladora de E/S - Processo de comunicação
	1
	Inicialmente, a CPU interroga o dispositivo, enviando o endereço do dispositivo e um sinal dizendo se quer mandar ou receber dados através da controladora;
	2
	A controladora, reconhecendo seu endereço, responde quando está pronta para receber (ou enviar) os dados;
	3
	A CPU então irá transferir (ou receber) os dados através da controladora;
	4
	A controladora responderá à CPU confirmando que:
• Recebeu (ou transferiu) os dados (“Acknowledge” ou ACK); ou
• Não recebeu os dados, neste caso solicitando retransmissão (“Not-acknowledge” ou NAK).
Device Drivers
Para que o Sistema Operacional possa se comunicar com novos periféricos e dispositivos interligados ao sistema de computação, é necessário que ele reconheça esses dispositivos.
Dessa forma, podemos entender como Device Driver o software que permite que o sistema operacional e este dispositivo específico possam se comunicar dentro do processamento da CPU.
Normalmente, por se tratar de um novo periférico a ser instalado no sistema de computação, o driver é desenvolvido pela mesma empresa que projetou e fabricou o dispositivo, de forma que o driver serve como complemento a fim de traduzir as requisições de alto nível (feitas pelo usuário) para o dispositivo específico (junto à controladora), podendo também trabalhar junto à controladora de E/S na conversão de dados e detecção e correção de erros, garantindo o correto funcionamento do dispositivo.
Formas de comunicação entre CPU/MP e interfacede E/S
Existem formas de comunicação da CPU e Memória Principal com as interfaces de entrada e saída.
Para qualquer tipo de comunicação, sempre há o armazenamento de conteúdo de dados em memória, a fim de que este conteúdo possa ser trafegado durante o processamento.
Porém, esta comunicação pode se diferir pelo tipo de memória utilizada durante esse processamento, sendo eles:
     
Memória compartilhada
Nesse tipo, a memória principal é compartilhada tanto por instruções e dados comuns de um programa quanto por instruções/dados de operações de E/S, sendo necessário somente lançar no barramento de controle o comando de leitura/escrita que deve ser executado, pois a memória principal é justamente a memória utilizada neste tipo de operação.
	Vantagem
	Não necessita de instruções especiais para processamento.
	Desvantagem
	Ocupa parte do espaço da memória principal para seu processamento.
     
Memória isolada
Nesse exemplo, existe uma memória isolada. Consiste em criar um espaço de memória próprio de E/S para aquela operação, não utilizando assim uma parcela da memória principal.
Para isso, é necessário um sinal de identificação a fim de saber se a instrução a ser processada é de E/S ou não, pois o local de armazenamento do conteúdo a ser processado estará em local diferente.
	Vantagem
	Não utiliza espaço da memória principal.
	Desvantagem
	Necessita de instruções especiais.
Formas de realização de entrada/saída
Agora que estudamos como funciona a comunicação dos dispositivos de entrada e saída em um Sistema de Computação, é importante entender como é realizada a comunicação de entrada e saída nos mesmos.
Existem três tipos principais:
· E/S PROGRAMADA
Nesse tipo, a CPU lê constantemente o status do controlador de E/S e verifica se já acabou o processamento (Polling ou Busy-waiting), espera até o fim da operação para dar continuidade aos demais.
Há um intenso uso da  CPU, bem como uma ociosidade de tempo, uma vez que o polling faz com que existam momentos de espera no processamento.
· E/S COM EMPREGO DE INTERRUPÇÃO
Muito utilizada na arquitetura atual, como o próprio nome diz, nesse tipo, a CPU solicita a transferência de um processamento à controladora e desvia-se para outra atividade, sem aguardar que o processamento seja finalizado.
Dessa forma, ela pode se preocupar com outros processamentos até que o mesmo seja finalizado pelo dispositivo de E/S, que, ao finalizar, avisa à CPU, por meio de um sinal de interrupção, que faz com que a CPU “desvie” sua atenção para o resultado do processamento requisitado.
Tipos de interrupção:
Internas: Geradas pela execução de uma instrução. Exemplo: Divisão por Zero, etc.
Externas: Geradas por um sinal externo à CPU. Utilizadas na comunicação com periféricos.
· ACESSO DIRETO À MEMÓRIA (DMA – DIRECT MEMORY ACCESS)
Controlador de DMA: Permite a transferência de dados entre uma interface e a MP praticamente sem intervenção da CPU.
CPU solicita transferência. Controlador sinaliza final através de interrupção.
Tratamento de interrupção (Interrupt Handler)
O tratamento de interrupções pode ser resumido pelo exemplo de diálogo abaixo, onde é demonstrada a comunicação SEM interrupção e COM interrupção.
Este exemplo pode diferenciar claramente como o emprego de interrupção interfere e auxilia na otimização do processamento em um Sistema de Computação.
Programa sem interrupção
Programa com interrupção
É importante reforçar que cada tipo de interrupção tem um tratamento específico a ser feito.
Se estivermos falando de um click do mouse, o “mecanismo de tratamento” vai verificar que o botão foi pressionado e, dependendo do botão (vamos considerar um mouse de 2 botões), uma operação diferente será executada.
Geralmente, a CPU utiliza o código identificador do botão pressionado para um endereço específico de memória e cada programa irá tomar sua decisão do que será feito quando este “click” for efetuado, seja ele um navegador de internet, um jogo, entre outros aplicativos.
Quando esse processo de interrupção pelo mouse é encerrado, o tratamento também é encerrado, e a CPU volta à execução do programa que havia sido interrompido para tratar o “click” do mouse, restaurando todos os valores, salvos antes da interrupção, e retomando exatamente do ponto em que parou.
Tipos de interrupções
Maskable interrupt (IRQ)
É uma interrupção de hardware que pode ser ignorada por configurar um bit em um registro da máscara de interrupção (IMR) bit-mask.
Non-maskable interrupt (NMI)
É uma interrupção de hardware que carece um bit-mask associado. Então, isso nunca pode ser ignorado.
NMIs são frequentemente usados por timers, especialmente por watchdog timers.
Inter-processor Interrupt (IPI)
Caso especial gerado por um processador para interromper outro processador em um sistema de multiprocessadores.
Software Interrupt
É uma interrupção gerada dentro de um processador pela execução de uma instrução.
Interrupções de software são frequentemente usadas para implementar chamadas de sistema porque elas implementam uma chamada de sub-rotina com a mudança de nível da CPU.
Atividade
1 - Pensando em dispositivos de entrada e saída, você conseguiria perceber dispositivos que hora podem servir como entrada, hora como saída ou que podem ter somente uma dessas funções? O que você pensa sobre isso?
GABARITO
Com o avanço da tecnologia, podemos ter equipamentos que funcionem como dispositivos de entrada e saída ao mesmo tempo.
Um caso típico é o monitor de vídeo, que até alguns anos atrás seria somente um dispositivo de saída, porém, agora, com o advento do touch-screen, também se tornou um dispositivo de entrada.
2 - Em função da interação entre o sistema operacional e os dispositivos de E/S, pode-se afirmar que:
b) tudo o que os sistemas operacionais veem  é a interface da controladora, que pode ser muito diferente da interface para o dispositivo de E/S.
3 - (FCC/TJ-PE/2012) Em relação aos modelos de entrada e saída, considere:
 I. Na entrada e saída mapeada, o programa vê os dispositivos periféricos como endereços de memória, mandando dados para eles como se estivesse escrevendo na memória.
 II. No modo de transferência simples, o controlador de DMA devolve o controle de barramento à CPU a cada transferência de um byte (ou palavra); no modo de transferência por bloco, o controlador de DMA não devolve o controle do barramento à CPU até que toda a transferência tenha sido efetuada.
 III. Na entrada e saída mapeada, se cada dispositivo tem seus registradores de controle em uma página diferente do espaço de endereçamento, o sistema operacional pode dar a um usuário o controle sobre dispositivos específicos, simplesmente incluindo as páginas desejadas em sua tabela de páginas.
 IV. Os controladores de DMA que usam endereçamento de memória física para suas transferências requerem que o sistema operacional converta o endereço virtual do buffer de memória pretendido em um endereço físico e escreva esse endereço físico no registrador de endereço do DMA.
 Está CORRETO o que se afirma em
e) I, II, III e IV.
4 - (UFG/2017) A adoção de um mecanismo de E/S orientada à interrupção tem como desvantagem a ocorrência de uma interrupção para cada caractere, o que desperdiça uma certa quantidade de tempo de CPU. Uma solução, em geral, mais eficiente para realizar E/S é usar:
c) o acesso direto à memória

Mais conteúdos dessa disciplina