Pergunta

Eu tenho que construir um simulador de processador dual-core em C (na verdade é uma simulação de memória multinível, cache L1 / L2, substituição de bloco, etc). Coisa é, eu estou tendo um momento difícil descobrir uma maneira de sincronizar os núcleos (que eu estou de programação como threads). Alguma idéia de como eu poderia fazer um relógio global? Devo mudar de tópicos para processos filhos? Agradecemos antecipadamente

Foi útil?

Solução

Então, muitas opções aqui: uma vez que você pode acabar-se a apoiar as interações complexas com múltiplas threads, você pode querer considerar o uso de um "relógio virtual" com uma passagem de mensagens "bus" . Dessa forma, você terá mais tempo para se concentrar na funcionalidade do núcleo, em vez de depuração a lógica synchonization ...

Usando esta técnica, você pode construir um estado-máquina (veja aqui ) por thread "actor" (pior caso) e se preocupar menos com mutexes / condições. Assim que tiver esta base, você será capaz de lidar com casos que aparecem mid-stream (por exemplo, "eu esqueci esse detalhe ... não se preocupe, basta adicionar um estado aqui ... não tem que re -shuffle meus mutexes).

Além disso, como fazer simulação é tudo sobre o "tempo virtual" (desde que você não pode executar em tempo real!), Em seguida, ter uma arquitetura de base com base em um "relógio virtual" abstrai o problema a um nível adequado.

Outras dicas

Você poderia ter uma linha de relógio mais threads do processador N. O fio relógio pode explicitamente fazer chamadas para cada thread do processador para fazer 1 etapa de processamento. Cada segmento processador recebe um telefonema do fio relógio para doStep(); faz um passo, em seguida, retorna o controle de volta para o segmento relógio.

Você também pode embaralhar a ordem em que as threads do processador são chamados a fazer passos para que você está mais propenso a erros de captura em seu código de cliente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top