Software Básico
MemóriaCapítulo 2
Mitsuo Takakihttp://www.cin.ufpe.br/~mt2/
Memória Principal
Introdução
Introdução
• É a parte do computador onde estão armazenados os programas e os dados.
• Composta de células endereçáveis.– Armazenam informações.– Possui um número chamado de endereço.• Usado pelos programas para referenciá-la.
– Todas as células possuem o mesmo número de bits.
Introdução
• A memória pode ser vista como um grande repositório (vetor) de células.
• O endereço é equivalente ao índice da posição da célula no vetor.
Introdução
• O número de bits usado no endereçamento determina a quantidade de células endereçáveis.– 32 bits pode endereçar 4 bilhões de células.
• A célula é a menor unidade endereçável.
Ordenação de Bytes
• Os bytes em uma palavra podem ser ordenados da esquerda para direita ou da direita para esquerda.
Ordenação de Bytes
Ordenação de Bytes
• Computadores como SPARC e mainframes da IBM utilizam a estratégia big endian.
• Computadores da família Intel utilizam little endian.
Problemas na Ordenação de Bytes
• Não existe uma forma certa ou errada, ambas são válidas e consistentes.
• Problemas podem ocorrer no transmissão de dados de uma máquina little endian para uma big endian, ou vice-versa.
Problemas na Ordenação de Bytes
Problemas na Ordenação de Bytes
• A solução proposta é utilizar cabeçalhos na frente de cada item de dados.– Informa o tipo do dado e o seu comprimento.– Não é eficiente, produz overhead.
Memória Principal
Memória Cache
Introdução• As CPUs sempre se mantiveram mais rápidas que
as memórias.
• Quanto mais lenta for a memória, mais ciclos de CPU serão desperdiçados.
• Sempre que a CPU precisa de um dado que não está nos registradores, este é buscado na memória.– O que a CPU faz enquanto a informação não chega?
Formas de Esperar por um Dado
• Existem duas formas de resolver este problema:– A CPU é bloqueada quando esta tenta ler uma
palavra de memória antes de ela chegar. (HW)– O compilador não gera código que usa palavras
antes de estarem prontas. (SW)
Bloqueio por Software
• O compilador introduz instruções NOP.– Instruções que não realizam nada.
• Estas pausas são também conhecidas como bolhas.
Bloqueio por Software
Bloqueio por Software
• NOPs também são utilizados em cracks.
• Instruções são substituídas por NOPs.– Verificação de serial.– Autenticação.
Exemplo de Crack em Javapublic String getContent(User user) {
if (user.equals(this.owner)) {return content;
} else {throw new AuthenticationException("Wrong user!!");
}}
...public boolean equals(Object o) {
User other = (User) o;boolean result = true;
result = result & (other.password.equals(this.password));result = result & (other.username.equals(this.username));
return result;}
Exemplo de Crack em Javapublic java.lang.String getContent(authentication.User); Code: 0: aload_1 1: aload_0 2: getfield #17; //Field owner:Lauthentication/User; 5: invokevirtual #26; //Method authentication/User.equals:
(Ljava/lang/Object;)Z 8: ifeq 16 11: aload_0 12: getfield #15; //Field content:Ljava/lang/String; 15: areturn 16: new #32; //class authentication/AuthenticationException 19: dup 20: ldc #34; //String Wrong user!! 22: invokespecial #36; //Method
authentication/AuthenticationException."<init>":(Ljava/lang/String;)V 25: athrow
Exemplo de Crack em Javapublic java.lang.String getContent(authentication.User); Code: 0: aload_1 1: aload_0 2: getfield #17; //Field owner:Lauthentication/User; 5: invokevirtual #26; //Method authentication/User.equals:
(Ljava/lang/Object;)Z 8: nop 9: aload_0 10: getfield #15; //Field content:Ljava/lang/String; 13: areturn 14: new #32; //class authentication/AuthenticationException 17: dup 18: ldc #34; //String Wrong user!! 20: invokespecial #36; //Method
authentication/AuthenticationException."<init>":(Ljava/lang/String;)V 23: athrow
Exemplo de Crack em Java
• A instrução de verificação da autenticidade do usuário é substituída por uma instrução NOP.
• A autenticação é omitida.– By-pass
Memórias Cache
• Para reduzir o impacto dos problemas de sincronização, uma memória de alta velocidade é introduzida na CPU.
• Chamada de memória cache.
• É utilizada para armazenar palavras de memória utilizadas com mais freqüência.
Memória Cache
• Quando a CPU precisa de uma palavra, ela verifica a cache.
• Se a palavra buscada não está na cache, então é buscada na memória principal.
Memória Cache
• Sabe-se que quando uma palavra é referenciada no endereço A, a próxima referência está na vizinhança de A.
• Um exemplo disto é o próprio programa.– Exceto em casos de desvios e chamadas a
procedimentos.
Memória Cache
• Reduz o tempo gasto com acesso à memória armazenando os dados freqüentes.– Grande parte do tempo de execução é gasto em
laços.– Um programa de manipulação de matrizes fará
muitas referências à mesma matriz.
Princípio da Localidade
• O princípio da localidade é a observação de que referências à memória, feita em qualquer intervalo de tempo curto, tendem a usar apenas uma pequena fração da memória total.
• Quando uma palavra é referenciada, ela e seus vizinhos são copiados para a cache.
Linhas de Cache
• Memórias principais e caches são divididos em blocos de tamanho fixo.– Chamados de linhas de cache.
• Quando uma busca na cache falha, toda a linha é carregada.
Linhas de Cache
Projeto de Cache
• Algumas questões são importantes no projeto de cache.
1.Tamanho da cache.– Quanto maior o tamanho da cache, melhor seu
funcionamento, porém maior é o custo.2.Tamanho da linha de cache.– Uma cache de 16kb pode ser dividida em até
1024 linhas de 16 bytes, 2048 linhas de 8 bytes...
Projeto de Cache
3. Organização da cache.– Como são controladas as palavras de memória
que estão sendo mantidas no momento.
4. O número de caches.– É comum um ter uma cache primária dentro do
chip, uma cache secundária fora do chip e uma terceira mais adiante.
Projeto de Cache
5. Localização das instruções e dos dados.– Instruções e dados podem ser mantidos em
locais diferentes.– Pode ser classificada como:• Cache unificada• Cache dividida
Projeto de CacheCache Unificada
• Projeto mais simples.
• Mantém um equilíbrio entre as buscas de instruções e buscas de dados.
• Mantém as instruções e os dados na mesma cache.
Projeto de CacheCache Dividida
• Tendência nos projetos atuais.– Também conhecido como arquitetura Harvard.
• Utiliza uma cache dividida, separando instruções dos dados.– Permite acesso paralelo às instruções e dados.– Instruções não são modificadas durante a execução,
portanto, o conteúdo da cache de instruções nunca é escrito de volta na memória.
Memória Secundária
Introdução
• A memória principal sempre será muito pequena.
• O usuário sempre quer usar mais memória do que tem disponível.
Hierarquia de Memória
Hierarquia de Memória
• A medida que desce na hierarquia, três parâmetros aumentam:– O tempo de acesso.– Capacidade de armazenagem.• Com exceção das fitas e discos óticos.
– O preço por bit.
Discos Magnéticos
Introdução
• Composto de um ou mais pratos de alumínio com um revestimento magnetizável.
• Possui um cabeçote de disco com uma bobina de indução.– Flutua logo acima da superfície, apoiado sobre um
colchão de ar.– Em discos flexíveis o cabeçote toca a superfície.
Introdução
• O cabeçote alinha as partículas magnéticas definindo um valor no setor.– Alinha para esquerda ou para direita.
• A seqüência circular de bits escritos quando o disco faz uma rotação completa é denominada trilha.
Estruturas
• Cada trilha é dividida em setores.– Possui um número fixo de setores.
• Cada setor possui um preâmbulo que permite a sincronização do cabeçote antes de uma leitura ou escrita.
Estruturas
• Após os dados, está um código de correção de erros.
• Há uma lacuna entre os setores chamada de lacuna de intersecção.
Estruturas
• Os discos possuem braços móveis que deslocam-se para dentro e para fora.– Permite acessar diferentes distâncias radiais.
• A cada distância radial pode ser escrita uma trilha diferente.
Estruturas
Estruturas
• A maioria dos discos é composta de vários pratos empilhados na vertical.
Busca de Dados
• Para ler ou escrever um setor, o braço deve se posicionar até a posição radial correta.– Esta ação é chamada de busca (seek).
• Assim que o cabeçote é posicionado, o disco deve ser rotacionado até o setor ser posicionado sob o cabeçote.– Este tempo é chamado de latência rotacional.
Latência Rotacional
Controlador de Disco
• Todo drive possui um controlador de disco.– Um chip que controla o drive.
• Pode conter uma CPU completa.
• Deve aceitar comandos de software.– Read, write e format.
Controlador de Disco
• Controla o movimento do braço, detecta e corrige erros.
• Deve converter bytes de 8 bits lidos da memória em uma corrente serial de bits e vice-versa.
Discos IDEs
• Possui o controlador integrado ao drive.– Discos anteriores possuíam uma placa separado para
o controlador.
• Realiza leitura e escrita da seguinte forma:– O SO coloca os parâmetros nos registradores da CPU
e chama o BIOS (Basic Input Output System);– O BIOS emite as instruções para carregar os
registradores do controlador.– O controlador inicia as transferências.
Top Related