500 likes | 587 Views
Software Básico. Memória Capítulo 2 Mitsuo Takaki http://www.cin.ufpe.br/~mt2/ mt2@cin.ufpe.br. 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.
E N D
Software Básico Memória Capítulo 2 Mitsuo Takaki http://www.cin.ufpe.br/~mt2/ mt2@cin.ufpe.br
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 • 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 • 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 • 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 Java public 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 Java public 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 Java public 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.
Projeto de Cache • Algumas questões são importantes no projeto de cache. • Tamanho da cache. • Quanto maior o tamanho da cache, melhor seu funcionamento, porém maior é o custo. • 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 • Organização da cache. • Como são controladas as palavras de memória que estão sendo mantidas no momento. • 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 • 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.
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 • 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.
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 • 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.
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.