Buscar

Subsistemas de memória (resumo)

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 3, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 6, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você viu 9, do total de 12 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Prévia do material em texto

Capítulo 5
Subsistemas de Memória
Introdução
Conforme já mencionado anteriormente, a memória é o componente de um sistema de computação cuja função é armazenar as informações que são, foram ou serão manipuladas pelo sistema.
Conceitualmente, a memória é um componente muito simples: é um “depósito” onde são guardados certos elementos (informações) para serem usados quando desejado (recuperação da informação armazenada).
No entanto, na prática, a memória de um computador possui tantas variedades – tais como: de velocidade, de capacidade de armazenamento, de tecnologia de construção, de utilidade dentro do sistema – que se torna, na realidade, um sistema hierarquicamente estruturado, como veremos na próxima seção.
Na memória, são apenas duas as operações que podemos realizar. A primeira é a ação de armazenar informação (store), feita através da operação de escrita ou gravação. A segunda é a ação de recuperação da informação armazenada (retrieve) feita através de um processo de leitura.
Na memória de um computador, o elemento a ser manipulado fisicamente é o bit (binary digit), o qual, em grupos, corresponde a uma unidade de informação a ser armazenada, transferida, recuperada, etc.. Ou seja, a memória serve para armazenar informações na forma de bits e recupera-las quando desejado. Para isso, realizam-se operações de escrita (transferência de bits de outro componente do sistema de computação para a memória) e de leitura (transferência de bits da memória para algum outro componente do sistema).
Para que a informação possa ser armazenada em uma memória (escrita) é necessário que seja definido um local disponível identificado de alguma forma precisa e única (um número, por exemplo). O número ou código que é associado ao local é denominado endereço (address) e permite que a informação possa ser localizada.
Hierarquia de Memória
Para o correto e eficaz funcionamento da manipulação das informações (instruções e dados) de e para a memória de um computador, verifica-se a necessidade de se ter em um mesmo computador diferentes tipos de memória. Para certas atividades, por exemplo, é fundamental que a transferência de informações seja a mais rápida possível. É o caso das atividades realizadas internamente no processador, onde a velocidade é primordial, porém a quantidade de bits a ser manipulada é muito pequena.
Isso caracteriza um tipo de memória diferente, por exemplo, daquele em que a capacidade de memória é mais importante do que a sua velocidade de transferência.
Ainda em relação ao tipo de alta velocidade e pequena quantidade de bits armazenáveis, que se usa na CPU, existem variações decorrentes do tipo de tecnologia utilizada na fabricação da memória.
Devido a essa grande variedade de tipos de memória, não é possível desenvolver um sistema de computação com uma única memória. Na realidade, há muitas memórias no computador, as quais se interligam de forma bem estruturada, constituindo um sistema entre si, parte do sistema global de computação, podendo ser denominado subsistema de memória. 
Esse subsistema é projetado de modo que seus componentes sejam organizados hierarquicamente, conforma mostrado na estrutura em forma de pirâmide da figura 5.1.
A seguir serão definidos os principais parâmetros para análise das características de cada tipo de memória citado na figura 5.1.
Tempo de acesso – período de tempo decorrido desde o instante em que foi iniciada a operação de acesso até que a informação requerida (instrução ou dado) tenha sido efetivamente transferida. Pode ser chamado de tempo de acesso para leitura ou simplesmente tempo de leitura.
Capacidade – é a quantidade de informação que pode ser armazenada em uma memória; a unidade de medida mais comum é o byte, embora também possam ser usadas outras unidades como células (no caso de memória principal ou cache), setores (no caso de discos) e bits (no caso de registradores). 
Volatilidade – memórias podem ser do tipo volátil ou não volátil. Uma memória não volátil é a que retém a informação armazenada quando a energia elétrica é desligada enquanto que a memória volátil perde toda a sua informação quando isto acontece.
Uma vez que um processador nada pode fazer sem instruções que indiquem a próxima operação a ser realizada, é óbvio que todo sistema de computação deve possuir alguma quantidade de memória não volátil. Isto é, ele deve possuir, pelo menos, algumas instruções armazenadas em memória não volátil para serem executadas inicialmente, sempre que se ligar o computador.
Tecnologia de fabricação – ao longo do tempo, diversas tecnologias vêm sendo desenvolvidas para a fabricação de memórias. Algumas das tecnologias mais conhecidas e utilizadas são:
Memórias de semicondutores – são dispositivos fabricados com circuitos eletrônicos e baseados em semicondutores. São rápidas e relativamente caras, se comparadas com outros tipos. Registradores e memória principal são exemplos de memoras de semicondutores ou, mais simplesmente, memórias eletrônicas.
Memórias de meio magnético – são dispositivos, como os disquetes, discos rígidos e fitas magnéticas, fabricados de modo a armazenar informações sob a forma de campos magnéticos. Eles possuem características magnéticas semelhantes às das fitas cassete de som, as quais são memórias não voláteis. Devido à natureza eletromecânica de seus componentes e à tecnologia de construção em comparação com memórias de semicondutores, esse tipo é mais barato e permite, assim, o armazenamento de grande quantidade de informação. O método de acesso às informações armazenadas em discos e fitas é diferente, resultando em tempos de acesso diversos (por possuírem acesso direto, discos são mais rápidos do que fitas, que operam com acesso seqüencial).
Temporariedade – trata-se de uma característica que indica o conceito de tempo de permanência da informação em um dado tipo de memória. 
Por exemplo, informações (programas e dados) podem ser armazenadas em discos ou disquetes e lá permanecerem armazenadas indefinidamente. Pode-se então definir esse tipo de memória como permanente. Por outro lado, os registradores armazenam um dado por um tempo extremamente curto (nanossegundos), o suficiente para o dado ser, em seguida, transferido para a ALU. Os registradores são classificados como memória transitória. Outros exemplos de memórias transitórias são memória principal e memória cachê, embora os dados permaneçam nelas por mais tempo do que nos registradores (tempo de duração da execução de um programa – que pode ser de uns poucos segundos ou até mesmo de algumas horas). 
Custo – o custo de fabricação de uma memória é bastante variado em função de diversos fatores, entre os quais de pode mencionar principalmente a tecnologia de fabricação, que redunda em maior ou menor tempo de acesso, capacidade e outros. 
Registradores
Em um sistema de computação, o destino final de qualquer tipo de memória é o processador (a CPU). Isto é, o objetivo final de cada uma das memórias é armazenar informações destinadas a serem, em algum momento, utilizadas pelo processador. Ele é o responsável pela execução das instruções, pela manipulação dos dados e pela produção dos resultados das operações.
As ações operativas do processador são realizadas principalmente na ALU. No entanto, antes que a instrução seja interpretada e a ALU acionada, o processador necessita buscar a instrução de onde ela estiver armazenada (memória cachê ou principal) e armazená-la em seu próprio interior, em um local de memória denominado registrador de instrução (IR – Instruction Register).
Em seguida a este armazenamento da instrução, o processador deverá, na maioria das vezes, buscar dados da memória (cachê, principal ou mesmo de unidades de disco e fita) para serem manipulados na ALU. Esses dados também precisam ser armazenados em algum lugar da CPU até serem efetivamente utilizados. Os resultados de um processamento (soma, subtração, operação lógica, etc.) tambémprecisam, às vezes, ser guardados temporariamente na CPU, ou para serem novamente manipulados na ALU, por uma outra instrução, ou para serem transferidos para uma memória externa ao processador. Esses dados são armazenados na CPU em pequenas unidades de memória, denominas registradores.
Tempo de acesso – por serem construídos com a mesma tecnologia da CPU, estes dispositivos possuem o menor tempo de acesso do sistema, algo em torno de 10 a 20 nanossegundos.
Capacidade – os registradores são fabricados com a capacidade de armazenar um único dado, uma única instrução ou até mesmo um único endereço, fazendo, assim, com que sua capacidade seja de alguns poucos bits, variando, normalmente, entre 8 e 64 bits.
Volatilidade – registradores são memórias de semicondutores e, portanto, necessitam de energia elétrica para funcionarem. Assim, registradores são memórias voláteis.
Temporariedade – os registradores são memórias auxiliares internas à CPU e,. portanto, tendem a guardar informação o mais temporariamente possível. Acumuladores ou registradores de dados armazenam os dados apenas o tempo necessário para sua utilização na ALU.
Custo – devido à tecnologia mais avançada de sua fabricação, os registradores consistem no tipo de memória de maior custo. 
Memória Cache
Em toda execução de uma instrução, a CPU acessa a memória principal pelo menos uma vez para buscar a instrução (uma cópia dela) e transferi-la para um dos registradores da CPU. E mais ainda, muitas instruções requerem outros acessos à memória, seja para a transferência de dados para a CPU (que serão processados na ALU), seja para a transferência do resultado de uma operação da CPU para a memória. Em resumo, para a realização do ciclo de uma instrução há sempre a necessidade de ser realizado um ou mais ciclos de memória.
Considerando-se que um ciclo de memória é bem mais demorado do que o período de tempo que a CPU gasta para realizar uma operação na ALU, fica claro que a duração da execução de um ciclo de instrução é bastante afetada pela demora dos ciclos de memória.
Na tentativa de melhorar o desempenho dos sistemas de computação, os projetistas de processadores vêm constantemente obtendo velocidades cada vez maiores nas operações dessas unidades, o que não está acontecendo na mesma proporção com o aperfeiçoamento tecnológico das memórias utilizadas como memória principal. Assim, atualmente a diferença de velocidade entre processador e memória principal é talvez maior do que já foi no passado.
Na busca de uma solução para este problema (o gargalo de congestionamento na comunicação CPU/MP que degrada o desempenho do sistema), foi desenvolvida uma técnica que consiste na inclusão de um dispositivo de memória entre CPU e MP, denominado memória cache, cuja função é acelerar a velocidade de transferência das informações entre CPU e MP e, com isso, aumentar o desempenho dos sistemas de computação.
Para tanto, esse tipo de memória é fabricado com tecnologia semelhante à da CPU e, em conseqüência, possui tempos de acesso compatíveis, resultando numa considerável redução da espera da CPU para receber dados e instruções da cache, ao contrário do que acontece em sistemas sem cache.
Tempo de Acesso – sendo memórias de semicondutores, fabricadas com tecnologia e recursos para prover menores ciclos de memória que as memórias principais comuns, elas possuem velocidade de transferência tal que lhes garantem tempos de acesso entre 10 e 25 nanossegundos. 
Capacidade – tendo em vista que o processador acessa primeiramente a memória cache, para buscar a informação requerida, é importante que a referida memória tenha capacidade para armazenar uma apreciável quantidade de informações, visto que, se ela não foi encontrada na cache, então o sistema deverá sofrer um atraso para que a informação seja transferida da MP para a cache.
Por outro lado, uma grande capacidade implicará certamente na elevação de seu custo, muitas vezes inaceitável para compor o preço total do sistema. Desta forma, deve-se conciliar o compromisso de uma apreciável capacidade com a não-elevação demasiada de seu custo.
Valores típicos de memória cache oscilam entre 16K e 512K em máquinas de grande porte e até 256K para microcomputadores, considerando-se memórias cache externas à CPU, já que atualmente alguns processadores possuem uma certa quantidade de memória cache em seu interior. 
Volatilidade – a exemplo dos registradores, memórias cache são dispositivos construídos com circuitos eletrônicos, requerendo, por isso, energia elétrica para seu funcionamento. São, deste modo, dispositivos voláteis.
Temporariedade - o tempo de permanência de uma instrução ou dado nas memórias cache é relativamente pequeno, menor que a duração da execução do programa ao qual a referida instrução ou dado pertence. Isto porque, devido a seu tamanho não ser grande e ser utilizada por todos os programas em execução, há necessidade de alteração periódica da informação armazenada para permitir a entrada de novas informações.
Custo – o custo de fabricação das memórias cache é alto. O valor por byte está situado entre o dos registradores, que são os mais caros, e o da memória principal, mais barata. Memórias cache internas à CPU ainda são mais caras do que as externas. 
Memória Principal
Uma das principais características definidas no projeto de arquitetura Von Neumann consistia no fato de ser uma máquina “de programa armazenado”. O fato de as instruções, uma após a outra, poderem ser imediatamente acessadas pela CPU é que garante o automatismo do sistema e aumenta a velocidade de execução dos programas.
E o processador pode acessar imediatamente uma instrução após a outra porque elas estão armazenadas internamente no computador. Esta é a importância da memória.
E, desde o princípio, a memória especificada para armazenar o programa (e os seus dados) a ser executado é a memória que atualmente chamamos de principal, para distingui-la da memória de discos e fitas (memória secundária).
A memória principal é, então, 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.
Tempo de Acesso – a memória principal é construída com elementos cuja velocidade operacional se situa abaixo das memórias cache, embora sejam muito mais rápidas que a memória secundária. Atualmente, as memórias desse tipo possuem tempo de acesso entre 50ns e 150ns.
Capacidade – em geral, a capacidade da memória principal é bem maior que a da memória cache, na ordem de Mbytes.
Volatilidade – sendo atualmente construídas com semicondutores e circuitos eletrônicos, este tipo de memória também é volátil, tal como acontece com os registradores e a memória cache. No entanto, há normalmente uma pequena quantidade de memória não volátil fazendo parte da memória principal, a qual serve para armazenar pequena quantidade de instruções que são executadas sempre que o computador é ligado.
Temporariedade – para que um programa seja executado é necessário que ele esteja armazenado na memória principal (e seus dados também). Atualmente essa afirmação é parcialmente verdadeira, visto que não é mais necessário que o programa completo esteja na MP; neste caso, é obrigatório apenas o armazenamento, na MP, da instrução que será acessada pela CPU. Não importa, contudo, se é o programa todo ou parte dele que deve ser armazenado na MP para ser utilizado pela CPU. Fica claro que, em qualquer circunstância, as instruções e os dados permanecem temporariamente na MP, enquanto durar a execução do programa (ou até menos tempo). Esta temporariedade é bastante variável, dependendo de várias circunstâncias, como, por exemplo, o tamanho do programa e sua duração, a quantidade de programas que estão sendo processados juntos, etc..
Custo – esse tipo de memória apresenta custo inferior ao da memória cache e, por isso, podem ser vendidos computadores com uma quantidadeapreciável de MP sem que seu custo seja inaceitável.
Memória Secundária
O último tipo de memória a ser considerado é uma memória com maior capacidade de armazenamento do que os outros tipos já descritos, menor custo por byte, porém com tempos de acesso superiores aos demais tipos. Esta memória, denominada memória secundária tem por objetivo garantir um armazenamento mais permanente a toda a estrutura de dados e programas do usuário, razão por que deve naturalmente possuir maior capacidade que a memória principal.
A memória secundária de um sistema de computação pode ser constituída por diferentes tipos de dispositivos, alguns diretamente ligados ao sistema para acesso imediato (discos rígidos, por exemplo), e outros que podem ser conectados quando desejado (como os disquetes, fitas, CDs).
Uma das grandes características dos dispositivos que constituem a memória secundária é sua não volatilidade.
Tempo de Acesso – uma vez que os dispositivos que representam este tipo de memória são eletromecânicos e não circuitos puramente eletrônicos, como é o caso dos registradores, memória cache e memória principal, esse tipo de memória possui os maiores tempos de acesso dentre todos os tipos de memória. 
Tempos de acesso típicos para discos rígidos estão na faixa de 5 a 40 milissegundos. Discos óticos trabalham com tempo de acesso ainda maiores, na faixa de 150 a 500 milissegundos, enquanto as fitas magnéticas são ainda mais lentas, podendo ler um arquivo em tempos da ordem de segundos. 
Capacidade – uma das principais características da memória secundária é sua grande capacidade de armazenamento, a qual também varia consideravelmente dependendo do tipo de dispositivo utilizado.
Volatilidade – como estes dispositivos armazenam as informações de forma magnética ou ótica, elas não se perdem quando não há alimentação elétrica. Trata-se, pois, de elementos úteis para guardar os programas e dados de forma permanente.
Temporariedade – conforme mencionado no item anterior, a memória secundária é um componente de armazenamento com caráter permanente ou, pelo menos, de longo período de armazenamento. Ela serve, então, para armazenar programas e dados que não estão sendo requeridos imediatamente e que exigem grande espaço de armazenamento devido à sua natural quantidade.
Memória Principal (MP)
Organização da Memória Principal
	Para melhor descrever a organização da memória principal dos computadores, é bom lembrar alguns conceitos já expostos juntamente com outros a serem apresentados pela primeira vez:
A MP é o “depósito” de trabalho da CPU, isto é, a CPU e a MP trabalham íntima e diretamente na execução de um programa. As instruções e os dados do programa ficam armazenados na MP e a UCP vai buscando-os um a um à medida que a execução vai se desenrolando.
Palavra – unidade de informação do sistema CPU/MP que deve representar o valor de um número (um dado) ou uma instrução de máquina. A esse modo, a MP deveria ser organizada como um conjunto seqüencial de palavras, cada uma diretamente acessível pela CPU, o que na prática nem sempre acontece.
Endereço, conteúdo e posição de MP – em toda a organização composta de vários elementos, que podem ser identificados e localizados individualmente, há a necessidade de estabelecer um tipo qualquer de identificação para cada elemento e associar a esta identificação um código que defina sua localização dentro da organização, de modo que cada elemento possa ser facilmente identificado e localizado. Este é o conceito, já exposto, de endereço, conteúdo e posição de memória.
A memória principal de qualquer sistema de computação é organizada como um conjunto de N células seqüencialmente dispostas a partir do endereço igual a 0 até a última, de endereço igual a N-1. Cada célula é construída para armazenar um grupo de M bits, que representa a informação propriamente dita e que é manipulado em conjunto (como se fosse uma única unidade) em uma operação de leitura ou de escrita.
As memórias de semicondutores possuem várias características interessantes que as tornam extremamente vantajosas para constituírem-se na base da MP, a saber:
São memórias de acesso aleatório (RAM – Random Access Memory).
Ocupam relativamente pouco espaço, podendo muitos bits serem armazenados em um único chip.
Possuem tempo de acesso pequeno, sendo este igual para qualquer célula, independente da localização física da célula. Qualquer que seja o endereço, o tempo de acesso será o mesmo. 
Essencialmente, o espaço de MP (geralmente chamada de RAM) é um grupo de N células, cada uma podendo armazenar um grupo de M bits. Esta é a memória de trabalho da CPU e, portanto, deve permitir o armazenamento de instruções e dados (operação de escrita) e também a leitura destas mesmas instruções e dados. Esta memória é conhecida como memória do tipo leitura e escrita (read/write). Este tipo de memória tem uma particularidade desvantajosa que é o fato de ser volátil.
No entanto, todo sistema precisa, para iniciar seu funcionamento regular, que um grupo de instruções esteja permanentemente armazenado na MP de modo que, ao ligarmos o computador, estas instruções iniciem o funcionamento do sistema. Essas instruções vêm junto com o hardware e não devem sofrer um acidental apagamento se, inadvertidamente, um programa do usuário tentar gravar por cima delas. Elas devem estar, portanto, em um tipo de RAM que só permita a leitura de suas instruções. Essas memórias são chamadas de ROM (Read-Only Memory), e as instruções nelas presentes são inseridas na hora de sua fabricação e qualquer mudança implica na obtenção de uma nova pastilha. 
Memória ROM (Read-Only Memory)
Conforme definido anteriormente, memórias ROM são memórias de semicondutores fabricadas para atingir três objetivos:
Ter desempenho semelhante ao das memórias R/W de semicondutores.
Não ser volátil
Permitir apenas leitura de seu conteúdo.
Todo sistema de computação utiliza uma parte do espaço de endereçamento da MP com memórias do tipo ROM. Um exemplo típico é o dos PCs que vêm da fábrica com um conjunto de rotinas básicas do sistema operacional armazenadas em ROM, denominadas , em conjunto, de BIOS – Basic Input/Output System, sistema básico de entrada e saída.
Na ROM, o conjunto de bits (que compõem as instruções) é inserido durante o processo de fabricação. Após o término da fabricação, a pastilha ROM está completa, com o programa armazenado, e nada poderá alterar o valor de qualquer um de seus bits. Esse tipo de memória é relativamente barata se fabricada em grandes quantidades devido à redução do custo da máscara utilizada. No entanto, há certas desvantagens:
Não há possibilidade de recuperação de qualquer erro eventual no programa. Se um único bit for inserido de forma incorreta na pastilha (em geral, é um conjunto fabricado devido à máscara), o lote deve ser destruído e reiniciado o processo, o que pode acarretar problemas de custo.
O custo (não pequeno) da criação da máscara para inserção dos bits é o mesmo, seja para fabricar uma pastilha ou milhares delas.
Uma variação deste tipo de memória denomina-se PROM (Programmable ROM). Na realidade, não se trata propriamente de ser programável, porque não é possível a reutilização da PROM. Nela, como na ROM, somente é possível gravar os bits desejados um única vez, porém com a diferença de que a gravação dos bits é posterior à fase de fabricação da pastilha, embora deva ser realizada por dispositivo especial.
Uma ponderada diferença entre as ROM e PROM reside no seu custo individual. Como já mencionado, ROMs só se tornam atraentes se fabricadas em grande quantidade; para menores quantidades, a PROM se torna mais conveniente devido ao menor custo individual, o qual independe da quantidade (não há custo de fabricação da máscara).
Há outros dois tipos de ROM que têm uma particularidade interessante. Desde que se mantenham somente de leitura, durante uma execução normal elas podem ser apagadas (por um processo especial) e regravadas,sendo portanto reutilizáveis. São elas a EPROM (Erasable PROM) e EEPROM (Electronically EPROM).
A EPROM pode ser utilizada várias vezes porque os dados nela armazenados podem ser apagados ao se iluminar a pastilha com luz ultravioleta, a qual incide em uma janela de vidro, montada na parte superior da pastilha. Uma vez apagada, a pastilha pode ser reutilizada através de novo processo de gravação de bits.
O outro tipo, EEPROM, introduz uma característica mais versátil e prática no processo de reutilização da ROM: a gravação de bits, o apagamento e a reprogramação são efetuadas por controle da CPU. 
Memória Cache
Para que seja possível entender perfeitamente o sentido da criação e desenvolvimento das memórias cache e de sua crescente e permanente utilização nos sistemas de computação, devem ser conhecidos dois conceitos relacionados com o funcionamento e a utilidade dessas memórias: o conceito de diferença de velocidade CPU/MP e o conceito de localidade.
Diferença de Velocidade CPU/MP
	Parte do problema de limitação de velocidade do processador refere-se à diferença de velocidade entre CPU e MP. Ou seja, a MP transfere bits para a CPU em velocidades sempre inferiores às que a CPU pode receber e operar os dados, o que acarreta, muitas vezes, a necessidade de acrescentar-se um tempo de espera para a CPU.
	Se todos os circuitos da CPU e da MP fossem fabricados com elementos de mesma tecnologia, este problema deixaria de existir e não estaríamos aqui questionando o porque das memórias cache.
O problema de diferença de velocidade se torna difícil de solucionar apenas com melhorias no desempenho das MP, devido a fatores de custo e tecnologia. Enquanto o desempenho dos microprocessadores vem aumentando rapidamente, o mesmo não acontece com a velocidade de transferência da MP.
Conceito de Localidade
Podemos definir o conceito de localidade como sendo o fenômeno relacionado com o modo pelo qual os programas em média são escritos e executados pela CPU. Pesquisas e amostragens concluíram que a execução dos programas se realiza, na média, em pequenos grupos de instruções.
No exemplo da figura 5.2, um certo programa pode ser constituído de um grupo de instruções iniciais, realizadas em seqüência (parte 1), de 2 loops e de uma sub-rotina chamada dentro do loop 1, o que significa que ela será repetida várias vezes, e do resto do código (partes 2 e 3).
	O que acontece é que cada parte do programa é realizada separadamente, isto é, durante um tempo a CPU somente acessa o grupo de instruções da parte 1, depois se dedica ao loop 1 e, neste, diversas vezes salta para a área da sub-rotina e acessa somente seu código, e assim por diante. 
	Assim, seria uma boa idéia colocar a parte repetitiva de um pedaço do programa em uma memória bem rápida, deixando o restante do programa, que não está sendo utilizado no momento, na memória mais lenta.
Utilização da Memória Cache
Como aproveitar, então, os princípios de localidade( conforme mencionado no item anterior, o projetista do sistema cria um elemento de memória intermediário entre a CPU e a MP, como mostrado na figura 5.3. Este elemento de memória, denominado memória cache, deve possuir elevada velocidade de transferência e um tamanho capaz de armazenar partes de um programa suficientemente grandes para obter o máximo rendimento dos princípios de localidade e suficientemente pequenas para não elevar em excesso o custo do sistema de computação, uma vez que esse tipo de memória é relativamente cara.
Com a inclusão da cache, podemos descrever rapidamente o funcionamento do sistema:
Sempre que a CPU vai buscar uma nova informação (instrução ou dado), ela acessa a memória cache.
Se a informação estiver na cache (hit), ela é transferida em alta velocidade, compatível com a da CPU.
Se a informação não estiver na cache (fault), então o sistema está programado para interromper a execução do programa e transferir a informação desejada da MP para a cache. Só que essa transferência não é somente da instrução desejada, mas dele e de um grupo subsequente, na pressuposição de que as instruções do grupo serão requeridas pela CPU em seguida e, portanto, já estarão na cache quando necessário (hits). A figura 5.3 demonstra bem como varia a unidade de transferência nos dois casos: em um, palavra por palavra e na outra, bloco por bloco.
Para haver realmente algum aumento de desempenho de um sistema de computação, com a inclusão da memória cache, é necessário que haja mais hits do que faults. Isto é, a memória cache somente é produtiva se a CPU puder encontrar uma quantidade apreciável de palavras na cache, suficientemente grande para sobrepor as eventuais perdas de tempo com faults, que redundam em transferência de um bloco de palavras da MP para a cache, além da transferência da instrução desejada, agora já existente na cache (depois da transferência do bloco que a contém).
Elementos de Projeto de uma Memória Cache
	Para se efetivar o projeto e implementação de uma memória cache, deve-se definir os seguintes parâmetros:
Definição do tamanho da cache.
Função de mapeamento de dados MP/Cache.
Algoritmos de substituição de dados na cache.
Política de escrita pela cache.
Tamanho da memória Cache
Como já vimos, uma memória cache só é produtiva se, durante a execução de um programa, ocorrerem muito mais hits do que faults, e isso foi conseguido com uma cache de pequeno tamanho, para que o custo do sistema fosse baixo.
A definição da faixa de tamanho adequada para uma cache depende de uma série de fatores, específicos de um certo sistema, tais como:
Tamanho da MP.
Relação hits/faults.
Tempo de acesso da MP.
Custo médio por bit, da MP, da cache.
Tempo de acesso da cache.
Natureza do programa em execução (princípio da localidade).
Mapeamento de Dados MP/Cache
Para entender melhor o sentido desta função como elemento de projeto de memória cache, devemos considerar que a MP consiste em um conjunto seqüencial de N = 2E palavras endereçáveis (células), cada uma possuindo um único e unívoco endereço com E bits.
Consideremos ainda que a MP está dividida em um conjunto de B blocos (numerados de 0 a B-1), cada um constituído de K células (palavras), sendo B = N/K ou B = 2E/K. A memória cache constituída de Q linhas de dados, denominadas quadros, cada uma podendo armazenar K palavras (células). Q é bem menor do que B para que a cache não seja muito cara.
A cada instante, a memória cache possui um conjunto de blocos da MP armazenados em seus quadros, com os dados que a CPU deve precisar. Porém, como há mais blocos que quadros (Q < B), não é possível um quadro estar dedicado a armazenar um específico bloco da MP, ou seja, um quadro é usado por mais de um bloco e, por conseguinte, é preciso identificar, em cada instante, qual bloco que está armazenado em determinado quadro da cache. Para isso, cada quadro contém um campo (além daquele para armazenar as K palavras), denominado tag, que contém a identificação do bloco.
Algoritmos de Substituição de Dados na Cache
	O problema se resume em definir qual dos blocos atualmente armazenados na cache deve ser retirado para dar lugar a um novo bloco que está sendo transferido (isto é necessário porque todos os quadros estarão provavelmente ocupados, visto que Q << B).
	A seguir, apresentamos alguns dos principais algoritmos de substituição utilizados:
O que não é usado há mais tempo (LRU – Last Recently Used) – o sistema escolhe para ser substituído o bloco que está há mais tempo sem ser utilizado. 
FIFO (First in First Out) – o sistema escolhe o bloco que está armazenado há mais tempo na cache, independentemente de estar sendo usado ou não com freqüência pela CPU.
O que tem menos referências (LFU – Last Frequently Used) – o sistema escolhe o bloco que tem tido menos acessos por parte da CPU.
Escolha aleatória – trata-se de escolher aleatoriamente um bloco para ser substituído, independentementede sua situação no conjunto.
Política de Escrita pela Memória Cache
Em sistemas com memória cache, toda vez que a CPU realiza uma operação de escrita, esta ocorre imediatamente na cache. Como a cache é apenas uma memória intermediária, não a principal, é necessário que, em algum momento, a MP seja atualizada, para que o sistema mantenha sua correção e integridade.
	Antes que um bloco possa ser substituído na cache, é necessário considerar se ele foi ou não alterado e se estas alterações também foram realizadas na MP; caso contrário, isto significa que o bloco da cache está diferente do da MP e isto não pode acontecer, pois a MP precisa ser tão corretamente mantida quanto a cache.
	Atualmente, podem ser encontradas algumas políticas de escrita, cada uma contendo suas vantagens e desvantagens em relação às outras, no que se refere principalmente ao custo e ao desempenho.
	O problema é complicado se levarmos em conta algumas ponderações, tais como:
A MP pode ser acessada tanto pela cache quanto por dispositivos de entrada e saída. Neste caso, é possível que uma palavra da MP tenha sido alterada na cache e ainda não na MP e, assim, esta palavra da MP está desatualizada.
A MP pode ser acessada por várias CPUs, cada uma contendo sua memória cache. Neste caso, é possível que uma palavra da MP seja alterada para atender à alteração de uma cache específica de uma CPU, e as demais caches cujo conteúdo esteja ligado a esta palavra estarão desatualizadas.
	Entre as técnicas mais conhecidas, destacamos: write through e write back.
( Escrita em ambas (write through) – por esta técnica, cada escrita em uma palavra da cache acarreta escrita igual na palavra correspondente da MP, assegurando validade permanente e igual ao conteúdo de ambas as memórias. Caso haja outros módulos CPU/Cache, estes alterarão também suas respectivas caches.
( Escrita somente no retorno (write back) – esta técnica não realiza atualização simultânea como a anterior, mas sim quando o bloco foi substituído e se houver ocorrido alteração. Em outras palavras, sempre que ocorrer uma alteração da palavra na cache, o quadro correspondente será marcado através de um bit adicional. Assim, quando o bloco armazenado no quadro específico for substituído, o sistema verifica o valor desse bit adicional; caso seja igual a 1, então o bloco é escrito na MP; caso contrário, não.
	Comparando-se as técnicas, podem ser estabelecidas algumas conclusões:
Com a política write through pode haver uma grande quantidade de escritas desnecessárias na MP, a natural redução de desempenho do sistema.
A política write back minimiza aquela desvantagem, porém a MP fica potencialmente desatualizada para utilização por outros dispositivos a ela ligados, como módulos de E/S, o que os obriga a acessar o dado através da cache.
Registradores
Memória Cache
Memória Principal
Memória Secundária
Discos
Fitas
custo baixo
velocidade baixa
capacidade elevada
custo alto
velocidade alta
capacidade baixa
Figura 5.1: Hierarquia de memória
Figura 5.2: Um programa em execução com várias partes
Parte 2
Parte 3
sub-rotina
Parte 1
MP
Outro 
programa qualquer 
call sub-rotina
Executado seqüencialmente
loop 1
loop 2
Figura 5.3: Organização para transferência de informações entre CPU/Cache/MP
CPU
Cache
MP
Transferência cache/CPU:
palavra por palavra
Transferência cache/MP:
bloco por bloco de palavras
- � PAGE �1� -

Outros materiais