Software Básico
Memória
Capítulo 2
Mitsuo Takaki
http://www.cin.ufpe.br/~mt2/
[email protected]
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
problema:
formas
de
resolver
este
– 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 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.
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 Cache
Cache 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 Cache
Cache Dividida
• Tendência nos projetos atuais.
– Também conhecido como arquitetura Harvard.
• Utiliza uma cache
instruções dos dados.
dividida,
separando
– 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.
Download

linhas de cache