Escolar Documentos
Profissional Documentos
Cultura Documentos
Protocolo Snooping:
Introdução:
Snooping é um protocolo de coerência de cache amplamente utilizado para gerenciar a
comunicação entre múltiplos processadores. Sua implementação permite reduzir a latência
de acesso a um dado compartilhado e diminuir a disputa por esses dados. Essa prática tem
por objetivo implementar o protocolo snooping com a finalidade de gerenciar três
processadores com caches particulares e uma memória de dados compartilhada, mostrando
seu funcionamento e monitorando o que acontece como o barramento de comunicação em
diferentes casos.
Módulos do Projeto:
Módulo snooping:
É o módulo principal que interliga todos os blocos criados no projeto. É nesse bloco que é
realizado o gerenciamento e o controle do tráfego dos dados entre processadores, caches e
memória principal.
Máquinas de Estado:
Parte 1:
Para facilitar a leitura dos resultados foram feitas as seguintes tabelas:
Bus Código
Mensagem CPU Código Read Miss 000 Estado Código
Write Miss 00 Read Hit 001 Invalid 00
Write Hit 01 Write Miss 010 Shared 01
Read Miss 10 Write Hit 011 Modified 10
Read Hit 11 Invalid 100 Exclusive 11
None 101
Transmitter_Waves:
Receiver_Waves:
Resultado das instruções:
Parte 2:
As operações implementadas possuem a seguinte decodificação (16 bits):
Operações:
Operação Exemplo Nº P R/W Address Data Hexadecimal
Read P1 RD 8 01 0 01000 0000 0000 0x4800
Write P2 WR 5, 28 10 1 00101 0001 1100 0xA502
Processador P1 Processador P2
Bloco State TAG Data
Bloco State TAG Data
B0 I 0x00 10 B0 I 0x04 10
B1 S 0x01 08 B1 M 0x05 68
B2 M 0x02 30 B2 I 0x06 10
B3 M 0x03 10 B3 S 0x07 18
Processador P3
Bloco State TAG Data
B0 S 0x08 20
B1 S 0x01 08
B2 E 0x06 09
B3 M 0x0B 05
Para o mapeamento dos blocos, foi utilizado os dois bits menos significativos da TAG
em questão.
Memória de Dados:
Memória de Instruções:
Endereço Instrução Binário Hexadecimal
0x00 P1 RD 0 0100 0000 0000 0000 4000
0x01 P2 WR 4, 20 1010 0100 0001 0100 A414
0x02 P1 RD 5 0100 0101 0000 0000 4500
0x03 P1 RD 6 0100 0110 0000 0000 4600
0x04 P3 RD 3 1100 0011 0000 0000 C300
• Na segunda instrução o P2 grava o valor 20 no endereço 4 (mapeado para o bloco B0), assim o bloco
passa do estado 00(inválido) para o estado 10(modificado). Como nenhum outro processador possuía
a TAG igual a 4, nenhum dos ouvintes alterou sua cache.
• Na terceira instrução P1 lê o endereço 5 (mapeado para B1) que está modificado em P2. Sendo assim
o bloco B1 do processador P1 será shared e o B1 de P2 também. Em seguida é realizado o write-back
do valor antigo de B1 em P2.
• Na quarta instrução P1 lê o endereço 6 (mapeado para B2) que está modificado. A leitura do dado é
satisfeita pela memória e é realizado o write-back do antigo valor de B2.
• Na quinta instrução P3 lê o endereço 3 (mapeado para B3), nesse caso o dado será satisfeito pela cache
de P1 que também está modificada. Sendo assim haverá 2 write-back (para B3 em P1 e para B3 em
P3).
Processador P1 Processador P2
Bloco State TAG Data
Bloco State TAG Data
B0 E 0x00 02 B0 M 0x04 20
B1 S 0x05 68 B1 S 0x05 68
B2 S 0x06 09 B2 I 0x06 10
B3 S 0x03 10 B3 S 0x07 18
Processador P3
Bloco State TAG Data
B0 S 0x08 20
B1 S 0x01 08
B2 S 0x06 09
B3 S 0x03 10
Memória de Dados:
Ao término de cada instrução, os valores cada bloco das caches e de cada endereço de
memória estão conforme o esperado pelas tabelas acima.
Dificuldades Encontradas: