Estou tentando entender a diferença entre endereçamento de byte e endereçamento de palavra.
Uma unidade de memória cache associativa definida de 4 vias com capacidade de 16 KB é construída usando um tamanho de bloco de 8 palavras. O comprimento da palavra é de 32 bits. O tamanho do espaço de endereço físico é 4 GB.
Nº de conjuntos no cache $ = (16 * 1024) / (4 * 8 * 4) = 2 ^ 7 $
Se o endereçamento de palavra for usado:
Bloco de deslocamento $ = 3 \ bits $
Visto que PAS é $ 4 \ GB $ , número total de endereços = $ 2 ^ {32} / 2 ^ 2 = 2 ^ {30} $
Então, bits de endereço total $ = 30 \ bits $
Estrutura do endereço:
Bits de tag: $ 20 \ bits $
Bits de definição: $ 7 \ bits $
Bits de deslocamento de bloco: $ 3 \ bits $
Agora, suponha que a CPU deseja acessar o 3º byte de uma palavra específica.
- O controlador de cache usará o campo de conjunto $ 7 \ bits $ para indexar em um conjunto e em seguida, comparar o campo de tag $ 20 \ bits $ superior com todos os blocos de $ 4 $ no conjunto. Se uma correspondência for encontrada, ocorre o acerto do cache e o deslocamento de bloco $ 3 \ bits $ inferior para colocar uma das palavras fora do $ 8 $ palavras em um dos registros de uso geral. A CPU então extrai o terceiro byte da palavra e executa a operação.
- Se as tags não forem correspondidas, ocorre a perda de cache, um sinal de leitura de memória é enviado e, devido à localidade espacial de referência, um bloco contendo o a palavra é transferida para o cache.
Se a CPU é endereçável por bytes:
Bits de endereço total $ = 32 $
Estrutura do endereço: Bits de tag: $ 20 \ bits $
Bits de definição: $ 7 \ bits $
Bits de deslocamento de bloco: $ 5 \ bits $
Se a CPU deseja acessar o terceiro byte de um palavra:
- O mesmo que na Etapa 1 de palavra endereçável, mas a CPU agora pode endereçar diretamente o terceiro byte da palavra, usando o $ 2 inferior bits $ deslocamento de byte. No entanto, estou confuso como isso aconteceria. Visto que o tamanho do registro da CPU tem uma largura de 1 palavra, semelhante ao endereçamento de palavra, uma palavra das 8 palavras no bloco será transferida para o registro. Mas como seria a etapa de “extração de bytes” será mais fácil aqui? E por que o chamamos de endereçamento de bytes se ainda estamos endereçando uma palavra?
- O mesmo que na Etapa 2 do endereçamento de palavras. Bloco de dados será transferido da memória para o cache em caso de perda de cache.
Além disso, esta resposta diz que a memória física é sempre byte endereçável. Qual é a diferença entre a endereçabilidade da memória e a endereçabilidade da arquitetura da CPU?
Resposta
Endereçamento de palavras significa que, o número de linhas no barramento de endereço no processador é menor que o número de bits na própria palavra.
Digamos que temos uma palavra de 4 bytes. (espaço de endereço de 32 bits)
Se esta máquina for byte addressab le, então o barramento de endereço da CPU terá 32 linhas, o que permite que ela acesse cada byte na memória.
Se esta máquina for endereçável por palavra, então o barramento de endereço da CPU terá 30 linhas ( $ 32 – log_ {2} 4 = 30 $ ), que permite acessar a memória SOMENTE em palavras / pedaços de 4 bytes e também de endereços que são múltiplos do tamanho das palavras.
Agora, se você pedir à CPU para buscar um byte de um endereço específico, ela primeiro eliminará os 2 bits menos significativos (por queda, quero dizer sobrescrevê-los com 0 “s) do endereço, buscar uma palavra do endereço resultante e retornar um byte usando os 2 bits menos significativos como um deslocamento dentro da palavra buscada.
Isso faz com que o tempo de acesso à memória aumente, já que a CPU tem que gastar mais tempo modificando o endereço e processando a palavra buscada. Mas também ajuda a reduzir o custo de hardware, pois a complexidade dos circuitos é reduzida devido à redução nas linhas de barramento de endereço.
No entanto, esse overhead nunca surge em uma máquina endereçável por byte, portanto, “byte extrair “é mais fácil.
Comentários
- Eu entendo o que você ‘ está dizendo. Mas o que ‘ Acontecerá no caso de endereçamento de byte? Suponha que a CPU precise do terceiro byte da palavra. Ela enviará o endereço de 32 bits com os 2 bits menos significativos definidos como 10, à direita t?Mas então como ele armazenará o byte dado que usa registrador de largura de 1 palavra? Ganhou ‘ para a CPU, neste caso, também buscar a palavra do cache e armazená-la nele ‘ registro s?
- Para sua primeira pergunta: as CPUs de endereçamento de bytes têm instruções de gravação separadas com base no tamanho dos dados a serem gravados. Um para um byte, um para um byte duplo, um para um byte quádruplo, um para uma palavra, etc. (Na verdade, qualquer CPU tem instruções de gravação separadas para cada um dos vários tamanhos suportados de dados a serem gravados). o byte a ser escrito é normalmente armazenado nos 8 LSBs do registrador, então a instrução de escrita para um byte é executada. Isso faz com que SOMENTE os 8 bits LSB do registro sejam carregados no barramento de dados e apenas um byte no endereço na memória seja modificado.
- Não fiz ‘ não entendo sua segunda pergunta. Você poderia explicar melhor.
- Suponho que a mesma coisa acontece com a leitura de um byte em uma máquina endereçável de bytes, certo? Por exemplo, vamos ‘ s dizer que ‘ s uma matriz de caracteres
char arr[10]
e a CPU deseja ler o terceiro caractere, ou seja,arr[2]
. Então, após acessar o byte usando o endereço de 32 bits, ele o armazenará nos 8 LSBs do registrador. Mas no caso de palavra endereçável, a CPU irá primeiro calcular o endereço da palavra à qual o terceiro byte pertence (ou seja, sobrescrever os 2 LSBs com 0) e buscar a palavra nele ‘ s registrar. Depois disso, ele usará o deslocamento de byte para obter o byte necessário. Isso está correto? - Muito obrigado. Solicito que coloque tudo isso junto na resposta original para que possa ajudar qualquer leitor futuro.