BR102013021930A2 - Método para sincronizar um número de instruções realizadas por uma pluralidade de processadores e sistema para sincronizar processadores - Google Patents

Método para sincronizar um número de instruções realizadas por uma pluralidade de processadores e sistema para sincronizar processadores Download PDF

Info

Publication number
BR102013021930A2
BR102013021930A2 BRBR102013021930-4A BR102013021930A BR102013021930A2 BR 102013021930 A2 BR102013021930 A2 BR 102013021930A2 BR 102013021930 A BR102013021930 A BR 102013021930A BR 102013021930 A2 BR102013021930 A2 BR 102013021930A2
Authority
BR
Brazil
Prior art keywords
instructions
processor
total number
time
iteration
Prior art date
Application number
BRBR102013021930-4A
Other languages
English (en)
Inventor
Willian David Ii Smithi
Jon Marc Diekema
Safayet Nizam Uddin Ahmed
Original Assignee
Gen Electric
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Gen Electric filed Critical Gen Electric
Publication of BR102013021930A2 publication Critical patent/BR102013021930A2/pt

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • G06F9/4887Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues involving deadlines, e.g. rate based, periodic
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1675Temporal synchronisation or re-synchronisation of redundant processing components
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/1675Temporal synchronisation or re-synchronisation of redundant processing components
    • G06F11/1691Temporal synchronisation or re-synchronisation of redundant processing components using a quantum
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/18Error detection or correction of the data by redundancy in hardware using passive fault-masking of the redundant circuits
    • G06F11/182Error detection or correction of the data by redundancy in hardware using passive fault-masking of the redundant circuits based on mutual exchange of the output between redundant processing components
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/16Error detection or correction of the data by redundancy in hardware
    • G06F11/20Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements
    • G06F11/202Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant
    • G06F11/2038Error detection or correction of the data by redundancy in hardware using active fault-masking, e.g. by switching out faulty elements or by switching in spare elements where processing functionality is redundant with a single idle spare processing component
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2201/00Indexing scheme relating to error detection, to error correction, and to monitoring
    • G06F2201/815Virtual

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Multi Processors (AREA)
  • Executing Machine-Instructions (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

MÉTODO PARA SINCRONIZAR UM NÚMERO DE INSTRUÇÕES REALIZADAS POR UMA PLURALIDADE DE PROCESSADORES E SISTEMA PARA SINCRONIZAR PROCESSADORES. Trata-se de um sistema e método para controlar a execução de instrução de processador. Em um exemplo, um método para sincronizar um número de instruções realizadas pelos processadores inclui instruir um primeiro processador para executar iterativamente instruções por meio de um primeiro conjunto de iterações até um período de tempo predeterminado ter transcorrido. Um número de instruções executadas em cada iteração do primeiro conjunto de iterações é menor que um número de instruções executadas em uma iteração anterior do primeiro conjunto de iterações. O método também inclui instruir um segundo processador a iterativamente executar instruções por meio de um segundo conjunto de iterações até o período de tempo predeterminado ter transcorrido. Um número de instruções executadas em cada iteração do segundo conjunto de interações é menor que um número de instruções executadas em uma iteração anterior do segundo conjunto de iterações. O método inclui determinar se instruções adicionais devem ser executadas.

Description

“MÉTODO PARA SINCRONIZAR UM NÚMERO DE INSTRUÇÕES REALIZADAS POR UMA PLURALIDADE DE PROCESSADORES E SISTEMA PARA SINCRONIZAR PROCESSADORES” Antecedentes A matéria revelada no presente documento refere-se a processadores e, mais particularmente, a um sistema e método para sincronizar a execução de instrução de processador.
Os processadores (por exemplo, unidades de processamento central (CPUs), microprocessadores, etc.) são usados para executar instruções em uma variedade de aplicações diferentes. Por exemplo, os processadores podem ser usados para executar instruções em aplicações críticas de segurança e/ou críticas de missão que têm requisitos altos de integridade, disponibilidade e garantia. Tais aplicações podem incluir uso militar, em nave espacial, em foguete, aviônico, usinas de energia nuclear e assim por diante. Em tais aplicações, dois ou mais processadores podem ser configurados para executar um número específico de instruções dentro de uma quantidade específica de tempo. Por exemplo, dois ou mais processadores podem ser configurados para operar de uma maneira síncrona de modo que os dois ou mais processadores comecem e/ou terminem as operações substancialmente ao mesmo tempo. Infelizmente, se os dois ou mais processadores não começarem e/ou terminem as operações substancialmente ao mesmo tempo, os resultados dos dois ou mais processadores podem ser não confiáveis e/ou não utilizáveis.
Breve Descrição Em concordância com uma realização, um método para sincronizar um número de instruções realizadas pelos processadores inclui instruir um primeiro processador a executar iterativamente instruções por meio de um primeiro conjunto de iterações até um período de tempo predeterminado ter transcorrido. Um número de instruções executadas em cada iteração do primeiro conjunto de iterações é menor que um número de instruções executadas em uma iteração anterior do primeiro conjunto de iterações. O método também inclui instruir um segundo processador a iterativamente executar instruções por meio de um segundo conjunto de iterações até o período de tempo predeterminado ter transcorrido. Um número de instruções executadas em cada iteração do segundo conjunto de iterações é menor que um número de instruções executadas em uma iteração anterior do segundo conjunto de iterações. O método inclui determinar um primeiro número total de instruções executadas pelo primeiro processador durante o período de tempo predeterminado e determinar um segundo número total de instruções executadas pelo segundo processador durante o período de tempo predeterminado. O método também inclui instruir o segundo processador a executar um primeiro número calculado de instruções se o segundo número total de instruções for menor que o primeiro número total de instruções.
Em concordância com outra realização, um método inclui receber dados de entrada em um sistema, fornecer os dados de entrada aos múltiplos processadores, executar o código de aplicação com o uso dos dados de entrada para produzir um respectivo número de saídas dos processadores e aplicar um algoritmo de consenso distribuído ao respectivo número de saídas para produzir uma saída de consenso. Os processadores incluem um primeiro processador configurado para executar iterativamente instruções por meio de um primeiro conjunto de iterações até um período de tempo predeterminado ter transcorrido. Um número de instruções executadas em cada iteração do primeiro conjunto de iterações é menor que um número de instruções executadas em uma iteração anterior do primeiro conjunto de iterações. Os processadores também incluem um segundo processador configurado para executar iterativamente instruções por meio de um segundo conjunto de iterações até o período de tempo predeterminado ter transcorrido. Um número de instruções executadas em cada iteração do segundo conjunto de iterações é menor que um número de instruções executadas em uma iteração anterior do segundo conjunto de iterações.
Em concordância com uma realização adicional, um sistema para sincronizar processadores inclui um primeiro processador configurado para executar iterativamente instruções por meio de um primeiro conjunto de iterações até um período de tempo predeterminado ter transcorrido. Um número de instruções executadas em cada iteração do primeiro conjunto de iterações é menor que um número de instruções executadas em uma iteração anterior do primeiro conjunto de iterações. O sistema também inclui um segundo processador configurado para executar iterativamente instruções por meio de um segundo conjunto de iterações até o período de tempo predeterminado ter transcorrido. Um número de instruções executadas em cada iteração do segundo conjunto de iterações é menor que um número de instruções executadas em uma iteração anterior do segundo conjunto de iterações. O sistema inclui um terceiro processador configurado para executar iterativamente instruções por meio de um terceiro conjunto de iterações até o período de tempo predeterminado ter transcorrido. Um número de instruções executadas em cada iteração do terceiro conjunto de iterações é menor que um número de instruções executadas em uma iteração anterior do terceiro conjunto de iterações.
Breve Descrição dos Desenhos Esses e outros atributos, aspectos e vantagens da presente invenção se tornarão mais bem entendidos quando a seguinte descrição detalhada for lida em referência aos desenhos anexos em que caracteres similares representam partes similares por todos os desenhos, em que: A Figura 1 é um diagrama de blocos de uma realização de um sistema de integridade alta que pode empregar dois ou mais processadores sincronizados; A Figura 2 é um diagrama de blocos de outra realização de um sistema de integridade alta que pode empregar dois ou mais processadores sincronizados; A Figura 3 é um diagrama de blocos de uma realização de um sistema de integridade alta que tem um processador com múltiplos núcleos com um hipervisor para controlar a operação de múltiplos processadores; A Figura 4 é um diagrama do processador com múltiplos núcleos da Figura 3; A Figura 5 é um diagrama de temporização de uma realização de um método para controlar instruções executadas por um processador; A Figura 6 é um diagrama de temporização de uma realização de um método para sincronizar múltiplos processadores; e A Figura 7 é um fluxograma de uma realização de um método para controlar instruções executadas por um processador.
Descrição Detalhada Uma ou mais realizações específicas da presente revelação serão descritas abaixo. Em um esforço para fornecer uma descrição concisa dessas realizações, todos os atributos de uma implantação real podem não ser descritos no relatório descritivo. Deve-se perceber que no desenvolvimento de qualquer implantação real, como em qualquer planejamento ou projeto de desenho, numerosas decisões específicas por implantação devem ser tomadas para atingir os objetivos específicos dos desenvolvedores, tal como em conformidade com restrições relacionadas ao sistema e relacionadas a negócios, que podem variar de uma implantação para outra. Além disso, deve-se perceber que tal esforço de desenvolvimento deve ser complexo e consumir tempo, mas seria, todavia, uma obrigação de rotina de projeto, fabricação e manufatura para aqueles versados na técnica que têm o benefício desta revelação.
Quando se apresentam elementos de várias realizações da presente invenção, os artigos “um”, “uma”, “o”, “a” e “dito” pretendem significar um ou mais dos elementos. Os termos “que compreende”, “que incluir” e “que tem” pretendem incluir e significar que podem haver elementos adicionais outros que os elementos listados. A Figura 1 é um diagrama de blocos de uma realização de um sistema de integridade alta 10 que pode empregar dois ou mais processadores sincronizados. Conforme pode ser percebido, o sistema de integridade alta 10 pode ser um sistema de integridade alta (por exemplo, probabilidade alta de alcançar uma resposta correta), disponibilidade alta (por exemplo, sistema funcional capaz de entregar uma resposta) e/garantia alta (por exemplo, confiança de que o sistema está executando o software correto). Por exemplo, o sistema de integridade alta 10 pode ser projetado com uma taxa de falha em tempo (FIT) menor que aproximadamente 1,0 x 10'9 por hora (por exemplo, por hora de voo). Certas realizações podem incluir três ou mais processadores sincronizados para fornecer um sistema de integridade alta e disponibilidade alta. Dessa forma, o sistema de integridade alta 10 pode ser projetado para ser usado em uma aplicação de aviônica crítica em segurança em tempo real (por exemplo, aeronave). O sistema de integridade alta 10 inclui a memória 12 para manter uma aplicação 14. Além disso, a aplicação 14 é configurada para fornecer instruções executáveis a um ou mais processadores 16, 18, e 20. Como pode ser percebido, a aplicação 14 para cada um dos processadores 16, 18, e 20 é a mesma aplicação funcional e fornece as instruções executáveis a um ou mais processadores 16, 18, e 20. Dessa forma, o sistema de integridade alta 10 é projetado de modo que a plataforma (por exemplo, processadores 16, 18, e 20) forneça a integridade e disponibilidade. Em tal configuração, a plataforma pode incluir um projeto complexo, enquanto a aplicação 14 inclui um projeto simplificado. Em certas realizações, a aplicação 14 pode ser projetada para fornecer a integridade. Em tal configuração, a plataforma pode incluir um projeto simples, enquanto a aplicação 14 inclui um projeto complexo para fornecer a lógica para integridade alta, disponibilidade alta e garantia alta. Conforme ilustrado na presente realização, os processadores 16, 18 e 20 fornecem resultados a um barramento de sistema 22. Por exemplo, os resultados das instruções executadas podem ser fornecidos a partir dos processadores 16, 18 e 20 ao barramento de sistema 22.
Embora apenas três processadores 16, 18 e 20 sejam ilustrados, o sistema de integridade alta 10 pode incluir menos ou mais processadores. Por exemplo, em certas realizações, cinco ou seis processadores podem ser usados em um projeto que tem um taxa FIT menor que aproximadamente 1,0 x 10'11 por hora, em que cada processador tem um taxa FIT de aproximadamente 1,0 x 10'3. Deve-se perceber que muitas suposições e variáveis são usadas para calcular a taxa FIT. Como outro exemplo, seis, sete ou oito processadores podem ser usados em um projeto que tem uma taxa FIT menor que aproximadamente 1,0 x 10"15 por hora. Os processadores 16, 18, e 20 podem, cada um, receber a mesma entrada e podem ser projetados para fornecer a mesma saída. Dessa forma, a saída dos processadores 16, 18 e 20 pode ser sincronizada em tempo real para verificar que a saída dos processadores 16, 18 e 20 é a mesma. Com os processadores sincronizados 16, 18 e 20, o sistema de integridade alta 10 pode produzir resultados confiáveis.
Os resultados confiáveis produzidos pelos processadores sincronizados 16, 18 e 20 podem atender os requisitos de alta integridade, disponibilidade e garantia. Como tal, o sistema de integridade alta 10 pode ser usado para aplicações críticas em segurança e/ou críticas em missão. Dessa forma, o sistema de integridade alta 10 pode operar de uma maneira eficaz e de custo compensador sem usar hardware especializado. A Figura 2 é um diagrama de blocos de uma realização de um sistema de integridade alta 26 que pode empregar dois ou mais processadores sincronizados. O sistema de integridade alta 26 inclui as primeiras máquinas de estado replicado 28 e as segundas máquinas de estado replicado 30. As primeiras máquinas de estado replicado 28 têm uma entrada 32 (por exemplo, dados de entrada) que é fornecida de modo idêntico a cada processador 34, 36, e 38. Após executar as instruções, os processadores 34, 36 e 38 fornecem uma saída sincronizada. Sendo assim, as primeiras máquinas de estado replicado 28 realizam um consenso distribuído 40 (por exemplo, algoritmo) que resulta em uma saída única das primeiras máquinas de estado replicado 28. Além disso, as segundas máquinas de estado replicado 30 têm uma entrada 42 (por exemplo, dados de entrada) que é fornecida de modo idêntico a cada processador 44, 46 e 48. Em certas realizações, as entradas 32 e 42 são as mesmas. Após executar as instruções, os processadores 44, 46 e 48, cada um, fornecem uma saída sincronizada. Sendo assim, as segundas máquinas de estado replicado 30 realizam um consenso distribuído 50 (por exemplo, algoritmo) que resulta em uma saída única das segundas máquinas de estado replicado 30. A saída da primeira e da segunda máquinas de estado replicado 28 e 30 fornece uma redundância que facilita que ou o consenso distribuído 40 ou o consenso distribuído 50 seja usado. Por exemplo, se o consenso distribuído 40 da primeira máquina de estado replicado 28 determinar uma resposta, então essa resposta é usada. No entanto, se o consenso distribuído 40 da primeira máquina de estado replicado 28 não determinar uma resposta, uma resposta do consenso distribuído 50 da segunda máquina de estado replicado 30 é usada. Assim, a redundância da primeira e da segunda máquinas de estado replicado 28 e 30 facilita a disponibilidade intensificada. Deve-se perceber que com o uso da presente realização, uma taxa FIT menor que aproximadamente 1,0 x 10'15 por hora pode ser obtida.
Como pode ser percebido, o sistema de integridade alta 26 pode usar qualquer algoritmo adequado para o consenso distribuído. Por exemplo, o sistema de integridade alta 26 pode usar paxos básicos, múltiplos paxos, paxos baratos, paxos rápidos, paxos generalizados, múltiplos paxos bizantinos, múltiplos paxos bizantinos rápidos, paxos de menor armazenamento, paxos de cópia, paxos de um correto, paxos B rápidos, paxos bizantinos teóricos de informações, Chandra-Toueg (CT), Mostefaoui-Raynal (MR), atualização de consulta (Q/U), quórum híbrido (HQ), zyzzyva, aardvark, vertical, Brooks-lyengar, tolerância à falha bizantina prática (PBFT) e/ou aliph, entre outros.
Conforme descrito acima, os processadores 34, 36 e 38 pode, cada um, fornecer uma saída sincronizada. Além disso, os processadores 44, 46 e 48 pode, cada um, fornecer uma saída sincronizada. Como pode ser percebido, os processadores podem ser sincronizados de qualquer maneira adequada que fornece sincronização em tempo real. Dessa forma, os consensos distribuídos 40 e 50 do sistema de integridade alta 26 podem fornecer resultados confiáveis e/ou utilizáveis. A Figura 3 é um diagrama de blocos de uma realização de um sistema de integridade alta 60 que tem um processador com múltiplos núcleos 62 com um hipervisor para controlar a operação de múltiplos processadores. O sistema de integridade alta 60 inclui o primeiro processador com múltiplos núcleos 62, um segundo processador com múltiplos núcleos 64 e um terceiro processador com múltiplos núcleos 66. Embora processadores com múltiplos núcleos sejam descritos no presente documento, o sistema de integridade alta 60 pode incluir processadores com qualquer número adequado de núcleos (por exemplo, 1, 2, 4, 8, 16, etc.). Além disso, cada um dos processadores com múltiplos núcleos 62, 64 e 66 inclui processadores de aplicação 68, 70 e 72 para executar as instruções e um processador I/O 74 configurado para controlar a execução de instrução dos processadores de aplicação 68, 70 e 72 e para executar um algoritmo de consenso distribuído. Os processadores com múltiplos núcleos 62, 64 e 66 se comunicam entre si e com dispositivos externos com o uso de barramentos de sistema 76 e 78. Embora dois barramentos de sistema 76 e 78 sejam ilustrados, o sistema de integridade alta 60 pode incluir qualquer número adequado de barramentos (por exemplo, 1, 2, 4, etc.). Conforme ilustrado, os processadores de aplicação 68 de cada um dos processadores com múltiplos núcleos 62, 64 e 66 podem formar uma máquina de estado replicado 80. Além disso, os processadores de aplicação 70 de cada um dos processadores com múltiplos núcleos 62, 64 e 66 podem formar uma máquina de estado replicado 82. Além disso, os processadores de aplicação 72 de cada um dos processadores com múltiplos núcleos 62, 64 e 66 podem formar uma máquina de estado replicado 84. Em certas realizações, o número de núcleos de processador alocados nos processadores com múltiplos núcleos 62, 64 e 66 pode variar, de modo que menos que o número disponível total de núcleos de processador possa ser alocado, um número diferente de núcleos de processador pode ser alocado em cada um dos processadores com múltiplos núcleos 62, 64 e 66 e assim por diante. Em certas realizações, uma aplicação de integridade alta pode usar verificação de integridade, mas não disponibilidade alta e pode alocar apenas dois núcleos de processador na aplicação de integridade alta. Em outras realizações, a aplicação de integridade alta pode atingir disponibilidade alta por alocação de mais de três núcleos de processador de cada um dos processadores com múltiplos núcleos 62, 64 e 66 na aplicação de integridade alta. A Figura 4 ilustra ainda um diagrama do primeiro processador com múltiplos núcleos 62. Deve-se perceber que o segundo processador com múltiplos núcleos 64 e o terceiro processador com múltiplos núcleos 66 podem incluir o mesmo que o primeiro processador com múltiplos núcleos 62. Conforme ilustrado, o primeiro processador com múltiplos núcleos 62 incíui um hipervisor 86 (por exemplo, gerenciador de máquina virtual (VMM)). Na presente realização, o hipervisor 86 é um hipervisor de tipo um; no entanto, em outras realizações, qualquer hipervisor adequado (por exemplo, tipo dois) pode ser usado. Como pode ser percebido, um hipervisor de tipo um pode ser um hipervisor que é executado diretamente em um hardware do hospedeiro para controlar o hardware e gerenciar os sistemas operacionais visitantes (por exemplo, VMware vSphere, servidor Oracle VM para SPARC, o Citrix XenServer, KVM, hipervisor Microsoft Hyper-V e assim por diante). Além disso, um hipervisor de tipo dois pode ser um hipervisor que é executado dentro de um ambiente de sistema operacional convencional (por exemplo, BHyVe, VMware Workstation, VirtualBox). Para sistemas em tempo real integrados, a tecnologia de hipervisor pode ser baseada em um centro de separação usado em um MILS RTOS ou um ARINC-653 RTOS (por exemplo, Green Hills INTEGRITY e INTEGRITY-178, Wind River VxWorks MILS e 653, LynuxWorks LynxSecure e LynxOS-178, etc.). O primeiro processador com múltiplos núcleos 62 também inclui recursos em chip 88 que podem ser fornecidos aos processadores 68, 70, 72, e 74. Por exemplo, os recursos em chip 88 podem incluir recursos de rede, recursos de partição, recursos de segurança e assim por diante. O processador de aplicação 68 (Partição VM 1), o processador de aplicação 70 (Partição VM 2) e o processador de aplicação 72 (Partição VM 3) podem ser, cada um, configurados de uma forma similar. Dessa forma, os processadores de aplicação 68, 70 e 72, cada um, operam com o uso de um sistema operacional visitante (OS visitante) 90 (por exemplo, Linux, Windows, um RTOS incorporado, etc.) que interage com o hipervisor 86 para acessar o hardware do primeiro processador com múltiplos núcleos 62. Em certas realizações, os processadores de aplicação 68, 70 e 72 pode, cada um, operar com o uso de um ambiente de “metal nu” (por exemplo, tempo de execução Ada) ao invés do OS visitante 90. Além disso, uma ou mais aplicações 92 e 94 podem ser executadas pelo OS visitante 90 para executar instruções fornecidas ao OS visitante 90. Os processadores de aplicação 68, 70 e 72 podem incluir “clientes”, tal como um cliente de disco virtual 96 e um cliente de cartão de interface de rede virtual (NIC) 98 que são configurados para acessar “servidores” correspondentes (por exemplo, unidades). Além disso, os processadores de aplicação 68, 70 e 72, cada um, incluem uma estrutura de núcleo 100 (por exemplo, um contador de instruções desativadas (RIC) e relógio) que são funções reais implantadas nos processadores 68, 70 e 72. Adicionalmente, os processadores de aplicação 68, 70 e 72 também podem incluir um cliente de relógio virtual 102 que é usado para acessar um servidor de relógio virtual.
Conforme ilustrado, o processador I/O 74 também incluir o OS visitante 90, o disco virtual 96 e o NIC virtual 98. Além disso, o processador I/O 74 é configurado para executar um algoritmo de consenso distribuído 104. O processador I/O 74 também inclui uma unidade de disco 110 que atua como um servidor para fornecer acesso aos recursos de disco (por exemplo, por meio de clientes de disco virtual 96) e uma unidade de cartão de interface de rede (NIC) 112 que atua como um servidor para fornecer acesso à rede (por exemplo, por meio de clientes de NIC 98). O processador I/O 74 é configurado para realizar a lógica de consenso distribuído através de outros processadores 68, 70 e 72. Além disso, o processador I/O 74 inclui uma estrutura de núcleo 114 (por exemplo, um contato de instrução desativada (RIC), relógio, NIC e disco). Além disso, o processador 74 inclui um servidor de relógio virtual 116 para fornecer um relógio virtual aos clientes de relógio virtual 102 para facilitar a sincronização entre os processadores 68, 70 e 72 (por exemplo, rotas de processamento). Dessa forma, o processador I/O 74 é configurado para realizar a interface entre os processadores de aplicação 68, 70 e 72 e outro hardware assim habilitando os processadores de aplicação 68, 70 e 72 a receber e executar as instruções. Além disso, conforme ilustrado, cada um dos processadores 68, 70, 72 e 74 inclui um OS visitante 90 de modo que os processadores possam realizar operações de modo independente. Deve-se perceber que os processadores de aplicação 68, 70 e 72 podem ser configurados para operar como máquinas de estado replicado sem variáveis ocultas (por exemplo, informações adicionadas aos dados que são processados). Por exemplo, os processadores de aplicação 68, 70 e 72 podem ser configurados para operar de modo que as informações possam ser recebidas (por exemplo, dados de entrada), instruções possam ser executadas e um resultado seja emitido da mesma maneira (por exemplo, os resultados são os mesmos) de qualquer um dos processadores de aplicação 68, 70 e 72. Dessa forma, com a mesma entrada fornecida aos processadores de aplicação 68, 70 e 72, a mesma saída pode ser obtida. Além disso, as saídas podem ser sincronizadas de modo que os processadores de aplicação 68, 70 e 72 iniciem e/ou finalizem o processamento em intervalos de tempo sincronizados, resultando em resultados idênticos (por exemplo, consistentes) sem diferenças observáveis. A Figura 5 é um diagrama de temporização 120 de uma realização de um método para controlar instruções executadas por um processador. Conforme ilustrado, as instruções são executadas ao longo de uma linha do tempo 122. Um primeiro sinal de sincronização de tempo 124 (por exemplo, sinal de relógio) é ilustrado no lado esquerdo da linha do tempo 122. Além disso, um segundo sinal de sincronização de tempo 126 é ilustrado em direção a uma porção central da linha do tempo 122. Uma duração 128 é o tempo entre o primeiro sinal de sincronização de tempo 124 e o segundo sinal de sincronização de tempo 126. Conforme pode ser percebido, a duração 128 pode ser qualquer duração adequada. Por exemplo, em certas realizações, a duração 128 pode ser aproximadamente 250 ps +/- 10 ps. Além disso, um terceiro sinal de sincronização de tempo 130 é ilustrado no lado direito da linha do tempo 122. Uma duração 132 é a diferença no tempo entre o segundo sinal de sincronização de tempo 126 e o terceiro sinal de sincronização de tempo 130 e é em geral a mesma que a duração 128. Conforme pode ser percebido, o mesmo padrão ilustrado no diagrama de temporização 120 pode ser repetido durante a operação de um processador. Dessa forma, a duração entre quaisquer dois sinais de sincronização pode ser qualquer tempo adequado com base no processador, aplicação, relógio, temporização e assim por diante (por exemplo, aproximadamente 250 ps +/- 10 ps).
Em certas realizações, pode ser desejável maximizar um número de instruções executadas por um processador entre sinais de sincronização de tempo sem executar as instruções enquanto os sinais de sincronização de tempo ocorrem. Dessa forma, pode ser desejável interromper a execução de instruções dentro de uma janela de tempo 134 antes do segundo sinal de sincronização de tempo 126. Além disso, uma duração 136 (por exemplo, período de tempo predeterminado) ilustra um tempo total time entre o primeiro sinal de sincronização de tempo 124 e um tempo de partida da janela de tempo 134. Deve-se perceber que a duração 136 é menor que a duração 128. Em certas realizações, a duração 136 pode ser aproximadamente 230 ps e a duração da janela de tempo 134 pode ser aproximadamente 20 ps.
Em algumas realizações, um número total de instruções executadas por um processador pode ser controlado. Em um exemplo, o número de instruções executadas pelo processador pode seguir uma progressão geométrica em que o número de instruções executadas em cada iteração é aproximadamente metade do número de instruções executadas na iteração anterior. Por exemplo, um número total estimado de instruções que o processador executa durante a duração 136 pode ser calculado (por exemplo, com base pelo menos parcialmente na duração 136). Durante uma primeira iteração do método para controlar as instruções executadas pelo processador (por exemplo, processador 68, 70, 72), aproximadamente metade do número total estimado de instruções pode ser executada. Por exemplo, entre o primeiro sinal de sincronização de tempo 124 e um tempo 138, aproximadamente metade do número total estimado de instruções pode ser executada. Sendo assim, o processador (por exemplo, processador 68, 70, 72) pode ser instruído (por exemplo, pelo processador 74) a executar iterativamente um número de instruções durante uma iteração atual que é menor que um número anterior de instruções executadas em uma interação anterior até a duração 136 ter transcorrido. Por exemplo, entre o tempo 138 e um tempo 140, o processador pode ser instruído a executar aproximadamente metade das instruções executadas entre o primeiro sinal de sincronização de tempo 124 e o tempo 138. Além disso, entre o tempo 140 e um tempo 142, o processador pode ser instruído a executar aproximadamente metade das instruções executadas entre o tempo 138 e o tempo 140. Conforme ilustrado, o tempo 142 não está dentro da janela de tempo 134. Dessa forma, entre o tempo 142 e um tempo 144, o processador pode ser instruído a executar aproximadamente metade das instruções executadas entre o tempo 140 e o tempo 142. O tempo 144 está dentro da janela de tempo 134, portanto, a duração 136 transcorreu. Como pode ser percebido, o processador pode enviar uma indicação (por exemplo, uma impressão digital, uma mensagem aos outros processadores, uma determinação de instruções adicionais para executar, geração de uma interrupção de temporizador, etc.) após cada iteração ser concluída. O número total de instruções executadas durante a duração 136 pode ser determinado de qualquer maneira adequada. Por exemplo, o número total de instruções executadas durante a duração 136 pode ser determinado por soma (isto é, adição) o número de instruções executadas entre o primeiro sinal de sincronização de tempo 124 e o tempo 144. Como outro exemplo, o número total de instruções executadas durante a duração 136 pode ser determinado por acesso (por exemplo, leitura) a uma conta de um contador de instrução desativada (RIC).
Em certas realizações, o número total de instruções executadas durante a duração 136 pode ser menor que o desejado. Dessa forma, o processador pode ser instruído a executar um número calculado de instruções após a duração 136 ter transcorrido. Em contraste, se o número total de instruções executadas durante a duração 136 for maior ou igual a um número total desejado de instruções, o processador pode atrasar o processamento durante um período de tempo após a duração 136.
Novamente, durante a duração 132 após o segundo sinal de sincronização de tempo 126, uma janela de tempo 146 pode ser disposta antes do terceiro sinal de sincronização de tempo 130. Pode ser desejável interromper a execução de instruções dentro da janela de tempo 146 para controlar o número de instruções executadas antes do terceiro sinal de sincronização de tempo 130. Além disso, uma duração 148 (por exemplo, período de tempo predeterminado) ilustra um tempo total entre o segundo sinal de sincronização de tempo 126 e um tempo de partida da janela de tempo 146. Deve-se perceber que a duração 148 é menor que a duração 132.
Similarmente, o número total de instruções executadas por um processador pode ser novamente controlado. Por exemplo, um número total estimado de instruções que se espera que o processador execute durante a duração 148 pode ser calculado (por exemplo, com base pelo menos parcialmente na duração 148). Durante uma primeira iteração do método para controlar as instruções executadas pelo processador após o segundo sinal de sincronização de tempo 126, aproximadamente metade do número total estimado de instruções pode ser executada. Por exemplo, entre o segundo sinal de sincronização de tempo 126 e um tempo 150, aproximadamente metade do número total estimado de instruções pode ser executada. O processador pode ser instruído a executar iterativamente um número de instruções durante uma iteração atual que é menor que um número anterior de instruções executadas em uma interação anterior até a duração 148 ter transcorrido. Por exemplo, entre o tempo 150 e um tempo 152, o processador pode ser instruído a executar aproximadamente metade das instruções executadas entre o segundo sinal de sincronização de tempo 126 e o tempo 150. Além disso, entre o tempo 152 e um tempo 154, o processador pode ser instruído a executar aproximadamente metade das instruções executadas entre o tempo 150 e o tempo 152. Conforme ilustrado, o tempo 154 não está dentro da janela de tempo 146. Dessa forma, entre o tempo 154 e um tempo 156, o processador pode ser instruído a executar aproximadamente metade das instruções executadas entre o tempo 152 e o tempo 154. O tempo 156 está dentro da janela de tempo 146, portanto, a duração 148 transcorreu. Como pode ser percebido, o processador pode enviar uma indicação e realizar lógica adicional para sincronizar contagens de instrução desativada (RICs) entre processadores replicados após cada iteração ser concluída.
Novamente, o número total de instruções executadas durante a duração 148 pode ser determinado de qualquer maneira adequada. Por exemplo, o número total de instruções executadas durante a duração 148 pode ser determinado pela soma do número de instruções executadas entre o segundo sinal de sincronização de tempo 126 e o tempo 156. Como outro exemplo, o número total de instruções executadas durante a duração 148 pode ser determinado por acesso a uma contagem de um RIC.
Em certas realizações, o número total de instruções executadas durante a duração 148 pode ser menor que o desejado. Dessa forma, o processador pode ser instruído a executar um número calculado de instruções após a duração 148 ter transcorrido. Por exemplo, o processador pode ser instruído a executar o número calculado de instruções entre o tempo 156 e um tempo 158. Em contraste, se o número total de instruções executadas durante a duração 148 for maior ou igual a um número total desejado de instruções, o processador pode atrasar o processamento durante um período de tempo após a duração 148. O diagrama de temporização 120 pode ser também usado para ilustrar outra realização. Por exemplo, o número de instruções executadas pelo processador pode ser calculado com base em uma duração de tempo remanescente. Por exemplo, um número total estimado de instruções que o processador executa durante a duração 136 pode ser calculado com base pelo menos parcialmente na duração 136. Durante uma primeira iteração do método para controlar as instruções executadas pelo processador (por exemplo, processador 68, 70, 72), metade do número total estimado de instruções pode ser executada. Por exemplo, no primeiro sinal de sincronização de tempo 124, metade do número total estimado de instruções pode ser executada. Sendo assim, o processador (por exemplo, processador 68, 70, 72) pode ser instruído (por exemplo, pelo processador 74) a executar um número estimado de instruções com base em metade do tempo remanescente da duração 136. Além disso, no tempo 140, o processador pode ser instruído a executar um número estimado de instruções com base em metade do tempo remanescente da duração 136. Conforme ilustrado, o tempo 142 não está dentro da janela de tempo 134. Dessa forma, no tempo 142, o processador pode ser instruído a executar um número estimado de instruções com base em metade do tempo remanescente da duração 136. O tempo 144 está dentro da janela de tempo 134, portanto, a duração 136 transcorreu. Como pode ser percebido, o processador pode sincronizar com outros processadores após ter entrado na janela de tempo 134. Para sincronizar com outros processadores, uma impressão digital do processador pode ser comparada a uma impressão digital de outro processador. Um período de tempo total durante o qual o número de instruções foi executado pode ser determinado conforme anteriormente discutido. Em certas realizações, o processador pode ser instruído a executar um segundo número de instruções após a duração 136 ter transcorrido se o período de tempo total for menor que um período de tempo predeterminado. Além disso, em algumas realizações, o processador pode ser instruído a atrasar o processamento após a duração 136. Com o uso dos métodos descritos acima, um processador pode ser controlado para executar um certo número de instruções dentro de um certo período de tempo. Dessa forma, o número de instruções executadas dentro de um período de tempo pode ser otimizado (por exemplo, maximizado). Além disso, múltiplos processadores podem ser controlados juntos para sincronizar os processadores. A Figura 6 é um diagrama de temporização 180 de uma realização de um método para sincronizar múltiplos processadores. Dessa forma, a operação de um primeiro processador é ilustrada ao longo de uma linha do tempo 182, a operação de um segundo processador é ilustrada ao longo de uma linha do tempo 184 e a operação de um terceiro processador é ilustrada ao longo de uma linha do tempo 186. Além disso, um primeiro sinal de sincronização de tempo 188 (por exemplo, sinal de relógio) é ilustrado no lado esquerdo das linhas do tempo 182, 184, e 186. Além disso, um segundo sinal de sincronização de tempo 190 é ilustrado no lado direito das linhas do tempo 182, 184, e 186. Adicionalmente, em direção ao lado direito das linhas do tempo 182, 184 e 186 é um segmento de tempo 192 em que a sincronização do primeiro, do segundo e do terceiro processadores é verificada e/ou corregida de modo que os processadores sejam sincronizados quando o segundo sinal de sincronização de tempo 190 é recebido.
Uma duração 194 é o tempo entre o primeiro sinal de sincronização de tempo 188 e o segundo sinal de sincronização de tempo 190. Como pode ser percebido, a duração 194 pode ser qualquer duração adequada. Por exemplo, em certa realização, a duração 194 pode ser aproximadamente 250 ps +/- 10 ps. Como pode ser percebido, o mesmo padrão ilustrado no diagrama de temporização 180 pode ser repetido quando necessário (por exemplo, entre cada sinal de sincronização de tempo) durante a operação dos processadores. Dessa forma, a duração entre dois sinais de sincronização consecutivos pode ser qualquer tempo adequado, tal como um tempo com base no processador, aplicação, relógio, temporização e assim por diante (por exemplo, aproximadamente 250 ps +/-10 ps).
Em certas realizações, pode ser desejável maximizar um número de instruções executadas pelos processadores entre sinais de sincronização de tempo e sincronizar os processadores entre si. Dessa forma, para sincronizar os processadores, pode ser desejável interromper a execução de instruções em cada processador dento das janelas de tempo 196, 198 e 200 antes de o segundo sinal de sincronização de tempo 190. Além disso, uma duração 202 (por exemplo, período de tempo predeterminado) ilustra um tempo total entre o primeiro sinal de sincronização de tempo 188 e um tempo de partida das janelas de tempo 196, 198 e 200. Deve-se perceber que a duração 202 é menor que a duração 194. Em certas realizações, a duração 202 pode ser aproximadamente 230 ps e a duração de cada uma das janelas de tempo 196, 198 e 200 pode ser aproximadamente 20 ps.
Em algumas realizações, um número total de instruções executadas por um processador pode ser controlado. Por exemplo, um número total estimado de instruções que cada um dos processadores executa durante a duração 202 pode ser calculado (por exemplo, com base pelo parcialmente na duração 202). Conforme discutido acima, o número de instruções executadas durante cada iteração pode ser determinado com o uso de qualquer método adequado. Por exemplo, o número de instruções pode ser baseado em uma progressão geométrica (por exemplo, aproximadamente metade de um número anterior de instruções), um tempo remanescente (por exemplo, metade das janelas remanescentes de tempos) e assim por diante. Durante uma primeira iteração do método para controlar instruções executadas pelo primeiro processador, aproximadamente metade do número total estimado de instruções pode ser executada. Por exemplo, entre o primeiro sinal de sincronização de tempo 188 e um tempo 204, aproximadamente metade do número total estimado de instruções pode ser executada. Sendo assim, o primeiro processador pode ser instruído a executar iterativamente um número de instruções durante uma iteração atual que é menor que um número anterior de instruções executadas em uma interação anterior até a duração 202 ter transcorrido. Por exemplo, entre o tempo 204 e um tempo 206 (por exemplo, durante uma segunda iteração), o processador pode ser instruído a executar aproximadamente metade das instruções executadas entre o primeiro sinal de sincronização de tempo 188 e o tempo 204. Além disso, entre o tempo 206 e um tempo 208 (por exemplo, durante uma terceira iteração), o processador pode ser instruído a executar aproximadamente metade das instruções executadas entre o tempo 204 e o tempo 206. Conforme ilustrado, o tempo 208 não está dentro da janela de tempo 196. Dessa forma, entre o tempo 208 e um tempo 210, o primeiro processador pode ser instruído a realizar uma quarta interação por execução de aproximadamente metade das instruções executadas entre o tempo 206 e o tempo 208. Conforme ilustrado, o tempo 210 está dentro da janela de tempo 196; portanto, a duração 202 transcorreu após quatro iterações terem sido realizadas. Como pode ser percebido, o primeiro processador pode enviar uma indicação (por exemplo, uma impressão digital, uma mensagem aos outros processadores, uma determinação de instruções adicionais para executar, geração de uma interrupção de temporizador, etc.) após cada iteração ser concluída. Além disso, o primeiro processador pode enviar uma impressão digital (por exemplo, RIC, contagem de carregamento de memória, contagem de armazenamento de memória, contagens de instruções de ramificação, carregamentos e armazenamento de dados, ramificações tomadas e assim por diante) após cada iteração ser concluída. O segundo processador pode ser também controlado para interromper a execução de instruções após a duração 202 ter transcorrido. Por exemplo, durante uma primeira iteração do método para controlar instruções executadas pelo segundo processador, aproximadamente metade do número total estimado de instruções pode ser executada. Especificamente, entre o primeiro sinal de sincronização de tempo 188 e um tempo 212, aproximadamente metade do número total estimado de instruções pode ser executada. Sendo assim, o segundo processador pode ser instruído a executar iterativamente um número de instruções durante uma iteração atual que é menor que um número anterior de instruções executadas em uma interação anterior até a duração 202 ter transcorrido. Por exemplo, entre o tempo 212 e um tempo 214 (por exemplo, durante uma segunda iteração), o segundo processador pode ser instruído a executar aproximadamente metade das instruções executadas entre o primeiro sinal de sincronização de tempo 188 e o tempo 212. Além disso, entre o tempo 214 e um tempo 216 (por exemplo, durante uma terceira iteração), o segundo processador pode ser instruído a executar aproximadamente metade das instruções executadas entre o tempo 212 e o tempo 214. Além disso, entre o tempo 216 e um tempo 218 (por exemplo, durante uma quarta iteração), o segundo processador pode ser instruído a executar aproximadamente metade das instruções executadas entre o tempo 214 e o tempo 216. Conforme ilustrado, o tempo 218 não está dentro da janela de tempo 198. Dessa forma, entre o tempo 218 e um tempo 220, o segundo processador pode ser instruído a realizar uma quinta iteração por execução de aproximadamente metade das instruções executadas entre o tempo 216 e o tempo 218. Conforme ilustrado, o tempo 220 está dentro da janela de tempo 198; sendo assim, a duração 202 transcorreu após cinco iterações terem sido realizadas. Similarmente ao primeiro processador, o segundo processador pode enviar uma indicação (uma impressão digital, uma mensagem aos outros processadores, uma determinação de instruções adicionais para executar, geração de uma interrupção de temporizador, etc.) após cada iteração ser concluída. O terceiro processador pode ser também controlado para interromper a execução de instruções após a duração 202 ter transcorrido. Por exemplo, durante uma primeira iteração do método para controlar instruções executadas pelo terceiro processador, aproximadamente metade do número total estimado de instruções pode ser executada. Especificamente, entre o primeiro sinal de sincronização de tempo 188 e um tempo 222, aproximadamente metade do número total estimado de instruções pode ser executada. Sendo assim, o terceiro processador pode ser instruído a executar iterativamente um número de instruções durante uma iteração atual que é menor que um número anterior de instruções executadas em uma interação anterior até a duração 202 ter transcorrido. Por exemplo, entre o tempo 222 e um tempo 224 (por exemplo, durante uma segunda iteração), o terceiro processador pode ser instruído a executar aproximadamente metade das instruções executadas entre o primeiro sinal de sincronização de tempo 188 e o tempo 222. Além disso, entre o tempo 224 e um tempo 226 (por exemplo, durante uma terceira iteração), o terceiro processador pode ser instruído a executar aproximadamente metade das instruções executadas entre o tempo 222 e o tempo 224. Além disso, entre o tempo 226 e um tempo 228 (por exemplo, durante uma quarta iteração), o terceiro processador pode ser instruído a executar aproximadamente metade das instruções executadas entre o tempo 224 e o tempo 226. Adicionalmente, entre o tempo 228 e um tempo 230 (por exemplo, durante uma quinta iteração), o terceiro processador pode ser instruído a executar aproximadamente metade das instruções executadas entre o tempo 226 e o tempo 228. Conforme ilustrado, o tempo 230 não está dentro da janela de tempo 200. Dessa forma, entre o tempo 230 e um tempo 232, o terceiro processador pode ser instruído a realizar uma sexta iteração por execução de aproximadamente metade das instruções executadas entre o tempo 228 e o tempo 230. Conforme ilustrado, o tempo 232 está dentro da janela de tempo 200; portanto, a duração 202 transcorreu após seis iterações terem sido realizadas. Similarmente ao primeiro e ao segundo processadores, o terceiro processador pode enviar uma indicação e/ou uma impressão digital após cada iteração ser concluída. O número total de instruções executadas pelo primeiro, pelo segundo e/ou pelo terceiro processadores durante a duração 202 pode ser determinado de qualquer maneira adequada. Por exemplo, o número total de instruções executadas durante a duração 202 pode ser determinado pela soma (por exemplo, adição) do número de instruções executadas entre o primeiro sinal de sincronização de tempo 188 e o tempo ao final da última iteração (por exemplo, os tempos 210, 220, 232). Como outro exemplo, o número total de instruções executadas durante a duração 202 pode ser determinado por acesso (por exemplo, leitura) a uma contagem de um RIC.
Em certas realizações, o número total de instruções executadas pelo primeiro, pelo segundo e pelo terceiro processadores durante a duração 202 pode ser menor que o desejado. Dessa forma, os processadores podem ser instruídos a executar um número calculado de instruções após a duração 202 ter transcorrido. Em contraste, se o número total de instruções executadas durante a duração 202 for maior ou igual a um número total desejado de instruções, os processadores podem atrasar o processamento durante um período de tempo após a duração 202.
Por exemplo, conforme escrito acima, durante a duração 202, o primeiro processador começou quatro iterações, o segundo processador começou cinco iterações e o terceiro processador começou seis iterações. Para os propósitos desta ilustração, o primeiro, o segundo e o terceiro processadores podem ser processadores de 1,0 GHz capazes de executar dois bilhões de instruções por segundo. Além disso, para essa ilustração, os processadores são configurados para operar com o uso da abordagem geométrica conforme descrito acima. Sendo assim, um número total estimado de instruções a serem executadas durante a duração 202 (por exemplo, 230 ps) pode ser aproximadamente 460.000 instruções (por exemplo, 2.000.000,000 x 230 ps). Dessa forma, durante uma primeira iteração, aproximadamente uma metade do número total de instruções pode ser executada; portanto, durante a primeira iteração, aproximadamente 230.000 instruções podem ser executadas. Além disso, durante cada iteração seguinte, aproximadamente metade das instruções executadas na iteração anterior pode ser executada. Como tal, durante a segunda iteração, aproximadamente 115.000 instruções podem ser executadas. Além disso, durante a terceira iteração, aproximadamente 57.500 instruções podem ser executadas. Além disso, durante a quarta iteração, aproximadamente 28.750 instruções podem ser executadas. Durante a quinta iteração, aproximadamente 14.375 instruções podem ser executadas e durante a sexta iteração, aproximadamente 7.188 instruções podem ser executadas. Como pode ser percebido, a impressão digital de cada processador deve corresponder após cada iteração ser concluída.
Sendo assim, o primeiro processador pode executar aproximadamente 431.250 instruções (por exemplo, 230.000 + 115.000 + 57.500 + 28.750) pelo tempo em que as iterações do primeiro processador param dentro da janela 196 (por exemplo, após a quarta iteração). Sendo assim, o segundo processador pode executar aproximadamente 445.625 instruções (por exemplo, 230.000 + 115.000 + 57.500 + 28.750 + 14.375) pelo tempo em que as iterações do segundo processador param dentro da janela 198 (por exemplo, após a quinta iteração). Além disso, o terceiro processador pode executar aproximadamente 452.813 instruções (por exemplo, 230.000 + 115.000 + 57.500 + 28.750 + 14.375 + 7.188) pelo tempo em que as iterações do terceiro processador param dentro da janela 200 (por exemplo, após a sexta iteração). Deve-se perceber que o primeiro, o segundo e o terceiro processadores podem executar um número diferente de instruções com base em qualquer número de variáveis, tais como variações no desempenho dos processadores pelo dado período de tempo.
Como tal, cada um dentre o primeiro, o segundo e o terceiro processadores pode não ser sincronizado (por exemplo, pode não ter realizado o mesmo número de instruções). Dessa forma, o primeiro processador pode executar aproximadamente 21.563 instruções (por exemplo, 14.375 + 7.188) para aproximar-se ao terceiro processador. Além disso, o segundo processador pode executar aproximadamente 7.188 instruções para aproximar-se ao terceiro processador. Sendo assim, durante as janelas de tempo 196 e 198, o primeiro e o segundo processadores podem ser instruídos a executar as instruções adicionais de modo que ao final das janelas de tempo 196 e 198 o primeiro e o segundo processadores tenham concluído o mesmo número de instruções que o terceiro processador. Além disso, o terceiro processador pode ser atrasado durante o restante da janela de tempo 200 para permitir que o primeiro e o segundo processadores tempo executem as instruções. Deve-se perceber que o primeiro e/ou o segundo processadores podem começar a executar instruções adicionais antes que o terceiro processador termine sua sexta iteração de modo que haja tempo suficiente para executar as instruções.
Como outro exemplo, novamente durante a duração 202, o primeiro processador começou quatro iterações, o segundo processador começou cinco iterações e o terceiro processador começou seis iterações. Similarmente, para os propósitos desta ilustração, o primeiro, o segundo e o terceiro processadores podem ser processadores de 1,0 GHz capazes de executar dois bilhões de instruções por segundo. Além disso, para essa ilustração, os processadores são configurados para operar com o uso com base em um tempo remanescente conforme descrito acima. Sendo assim, um número total estimado de instruções a serem executadas durante a duração 202 (por exemplo, 230 ps) pode ser aproximadamente 460.000 instruções (por exemplo, 2.000.000,000 x 230 ps). Dessa forma, durante uma primeira iteração, instruções para aproximadamente uma metade da duração total podem ser executadas; portanto, durante a primeira iteração, aproximadamente 230.000 instruções podem ser executadas por cada processador (por exemplo, 2.000.000.000 x 115 ps). Além disso, durante cada iteração seguinte, cada um dos processadores pode executar instruções com base no seu respectivo tempo remanescente.
Como tal, durante a segunda iteração, o primeiro processador pode determinar que o mesmo tem aproximadamente 108 ps remanescentes; portanto, o primeiro processador pode executar aproximadamente 108.000 instruções (por exemplo, 2.000.000.000 x 54 ps) para executar instruções por aproximadamente metade do tempo remanescente. Além disso, durante a terceira iteração, o primeiro processador pode determinar que o mesmo tem aproximadamente 52 ps remanescentes; portanto, o primeiro processador pode executar aproximadamente 52.000 instruções (por exemplo, 2.000.000.000 x 26 ps) para executar instruções por aproximadamente metade do tempo remanescente. Adicionalmente, durante a quarta iteração, o primeiro processador pode determinar que o mesmo tem aproximadamente 24 ps remanescentes; portanto, o primeiro processador pode executar aproximadamente 24.000 instruções (por exemplo, 2.000.000.000 x 12 ps) para executar instruções por aproximadamente metade do tempo remanescente. Dessa forma, o primeiro processador pode executar aproximadamente 414.000 instruções (por exemplo, 230.000 + 108.000 + 52.000 + 24.000) pelo tempo em que as iterações para o primeiro processador param dentro da janela 196.
Voltando-se para o segundo processador, durante a segunda iteração, o segundo processador pode determinar que o mesmo tem aproximadamente 110 ps remanescentes; portanto, o segundo processador pode executar aproximadamente 110.000 instruções (por exemplo, 2.000.000.000 x 55 ps) para executar instruções por aproximadamente metade do tempo remanescente. Além disso, durante a terceira iteração, o segundo processador pode determinar que o mesmo tem aproximadamente 54 ps remanescentes; portanto, o segundo processador pode executar aproximadamente 54.000 instruções (por exemplo, 2.000.000.000 x 27 ps) para executar instruções por aproximadamente metade do tempo remanescente. Adicionalmente, durante a quarta iteração, o segundo processador pode determinar que o mesmo tem aproximadamente 24 ps remanescentes; portanto, o segundo processador pode executar aproximadamente 24.000 instruções (por exemplo, 2.000.000.000 x 14 ps) para executar instruções por aproximadamente metade do tempo remanescente. Além disso, durante a quinta iteração, o segundo processador pode determinar que o mesmo tem aproximadamente 10 ps remanescentes; portanto, o segundo processador pode executar aproximadamente 10.000 instruções (por exemplo, 2.000.000.000 x 5 ps) para executar instruções por aproximadamente metade do tempo remanescente. Dessa forma, o segundo processador pode executar aproximadamente 428.000 instruções (por exemplo, 230.000 + 110.000 + 54.000 + 24.000 + 10.000) pelo tempo em que as iterações para o segundo processador param dentro da janela 198.
Voltando-se para o terceiro processador, durante a segunda iteração, o terceiro processador pode determinar que o mesmo tem aproximadamente 114 ps remanescentes; portanto, o terceiro processador pode executar aproximadamente 114.000 instruções (por exemplo, 2.000.000.000 x 57 ps) para executar instruções por aproximadamente metade do tempo remanescente. Além disso, durante a terceira iteração, o terceiro processador pode determinar que o mesmo tem aproximadamente 58 ps remanescentes; portanto, o terceiro processador pode executar aproximadamente 58.000 instruções (por exemplo, 2.000.000.000 x 29 ps) para executar instruções por aproximadamente metade do tempo remanescente. Adicionalmente, durante a quarta iteração, o terceiro processador pode determinar que o mesmo tem aproximadamente 28 ps remanescentes; portanto, o terceiro processador pode executar aproximadamente 28.000 instruções (por exemplo, 2.000.000.000 x 14 ps) para executar instruções por aproximadamente metade do tempo remanescente. Além disso, durante a quinta iteração, o terceiro processador pode determinar que o mesmo tem aproximadamente 14 ps remanescentes; portanto, o terceiro processador pode executar aproximadamente 14.000 instruções (por exemplo, 2.000.000.000 x 7 ps) para executar instruções por aproximadamente metade do tempo remanescente. Além disso, durante a sexta iteração, o terceiro processador pode determinar que o mesmo tem aproximadamente 6 ps remanescentes; portanto, o terceiro processador pode executar aproximadamente 6.000 instruções (por exemplo, 2.000.000.000 x 3 ps) para executar instruções por aproximadamente metade do tempo remanescente. Dessa forma, o terceiro processador pode executar aproximadamente 450.000 instruções (por exemplo, 230.000 + 114.000 + 58.000 + 28.000 + 14.000 + 6.000) pelo tempo em que as iterações para o terceiro processador param dentro da janela 200. Como pode ser percebido, a impressão digital de cada processador pode não corresponder após cada iteração ser concluída.
Como tal, cada um dentre o primeiro, o segundo e o terceiro processadores pode não ser sincronizado (por exemplo, pode não ter realizado o mesmo número de instruções). Dessa forma, o primeiro processador pode executar aproximadamente 36.000 instruções (por exemplo, 450.000 a 414.000) para aproximar-se ao terceiro processador. Além disso, o segundo processador pode executar aproximadamente 22.000 (por exemplo, 450.000 a 428.000) instruções para aproximar-se ao terceiro processador. Sendo assim, durante as janelas de tempo 196 e 198, o primeiro e o segundo processadores podem ser instruídos a executar as instruções adicionais de modo que ao final das janelas de tempo 196 e 198 o primeiro e o segundo processadores tenham concluído o mesmo número de instruções que o terceiro processador. Além disso, o terceiro processador pode ser atrasado durante o restante da janela de tempo 200 para permitir que o primeiro e o segundo processadores tempo executem as instruções. Deve-se perceber que o primeiro e/ou o segundo processadores podem começar a executar instruções adicionais antes que o terceiro processador termine sua sexta iteração de modo que haja tempo suficiente para executar as instruções. Após os processadores serem sincronizados, as impressões digitais de cada processador devem corresponder. Por exemplo, as contagens de instrução desativada (RICs) devem corresponder. A Figura 7 é um fluxograma de uma realização de um método 240 para controlar instruções executadas por um processador (por exemplo, processador 68, 70, 72). O processador é instruído a executar instruções (bloco 242). Por exemplo, o processador pode ser instruído por outro processador a executar um número de instruções com base em um período de tempo para execução ou com base em um número predeterminado de instruções. Em uma realização, o processador pode ser instruído a executar instruções que correspondem a aproximadamente metade das instruções antecipadas para serem executadas entre um tempo atual e um começo de uma janela de tempo (por exemplo, janela de tempo 134, 146) no futuro em que se deseja parar a execução de instruções. Após o processador ter executado as instruções, uma determinação é feita em relação a se o tempo atual está dentro da janela de tempo (bloco 244). Se o tempo atual não estiver dentro da janela de tempo, o método retorna ao bloco 242 em que o processador é instruído a executar instruções adicionais. Como pode ser percebido, o número de instruções executadas durante cada iteração pode ser maior que o número de instruções em cada iteração seguinte. Retornando ao bloco 244, se o tempo atual estiver dentro da janela de tempo, um número total de instruções executadas é determinado (bloco 246).
Os efeitos técnicos da invenção incluem ser capaz de controlar um número de instruções executadas entre sinais de sincronização de tempo em um único processador. Além disso, em um sistema com múltiplos processadores, os processadores podem ser controlados de modo que cada processador execute o número de instruções entre sinais de sincronização consecutivos. Dessa forma, os processadores podem ser sincronizados e podem ser adequados para uso em um sistema de integridade alta e/ou disponibilidade alta.
Esta descrição escrita usa exemplos para revelar a invenção, incluindo o melhor modo, e também para habilitar qualquer pessoa versada na técnica a praticar a invenção, incluindo produzir e usar quaisquer dispositivos ou sistemas e executar quaisquer métodos incorporados. O escopo patenteável da invenção é definido pelas reivindicações, e pode incluir outros exemplos que ocorram àqueles versados na técnica. Tais outros exemplos pretendem estar incluídos no escopo das reivindicações se tiverem elementos estruturais que não difiram da linguagem literal das reivindicações, ou se incluírem elementos estruturais equivalentes com diferenças não substanciais das linguagens literais das reivindicações.

Claims (20)

1. MÉTODO PARA SINCRONIZAR UM NÚMERO DE INSTRUÇÕES REALIZADAS POR UMA PLURALIDADE DE PROCESSADORES, que compreende: instruir um primeiro processador a executar iterativamente instruções por meio de uma primeiro pluralidade de iterações até um período de tempo predeterminado ter transcorrido, em que um número de instruções executadas em cada iteração da primeira pluralidade de iterações é menor que um número de instruções executadas em uma iteração anterior da primeira pluralidade de iterações; instruir um segundo processador a executar iterativamente instruções por meio de uma segunda pluralidade de iterações até o período de tempo predeterminado ter transcorrido, em que um número de instruções executadas em cada iteração da segunda pluralidade de iterações é menor que um número de instruções executadas em uma iteração anterior da segunda pluralidade de iterações; determinar um primeiro número total de instruções executadas pelo primeiro processador durante o período de tempo predeterminado; determinar um segundo número total de instruções executadas pelo segundo processador durante o período de tempo predeterminado; e instruir um segundo processador a executar um primeiro número calculado de instruções se o segundo número total de instruções for menor que o primeiro número total de instruções.
2. MÉTODO, de acordo com a reivindicação 1, que compreende instruir o primeiro processador a executar um segundo número calculado de instruções se o primeiro número total de instruções for menor que o segundo número total de instruções.
3. MÉTODO, de acordo com a reivindicação 1, que compreende instruir o primeiro processador a atrasar o processamento se o primeiro número total de instruções for maior ou igual ao segundo número total de instruções.
4. MÉTODO, de acordo com a reivindicação 1, que compreende instruir o segundo processador a atrasar o processamento se o segundo número total de instruções for maior ou igual ao primeiro número total de instruções.
5. MÉTODO, de acordo com a reivindicação 1, que compreende instruir um terceiro processador a executar iterativamente instruções por meio de uma terceira pluralidade de iterações até o período de tempo predeterminado ter transcorrido, em que um número de instruções executadas em cada iteração da terceira pluralidade de iterações é menor que um número de instruções executadas em uma iteração anterior da terceira pluralidade de iterações.
6. MÉTODO, de acordo com a reivindicação 5, que compreende determinar um terceiro número total de instruções executadas pelo terceiro processador durante o período de tempo predeterminado.
7. MÉTODO, de acordo com a reivindicação 6, que compreende instruir o terceiro processador a executar um terceiro número calculado de instruções se o terceiro número total de instruções for menor que o primeiro número total de instruções ou segundo número total de instruções.
8. MÉTODO, de acordo com a reivindicação 6, que compreende instruir o terceiro processador a atrasar o processamento se o terceiro número total de instruções for maior ou igual ao primeiro número total de instruções e se o terceiro número total de instruções for maior ou igual ao segundo número total de instruções.
9. MÉTODO, de acordo com a reivindicação 6, que compreende instruir o primeiro processador a executar um segundo número calculado de instruções se o primeiro número total de instruções for menor que o segundo número total de instruções ou o terceiro número total de instruções.
10. MÉTODO, de acordo com a reivindicação 6, que compreende instruir o primeiro processador a atrasar o processamento se o primeiro número total de instruções for maior ou igual ao primeiro número total de instruções e se o primeiro número total de instruções for maior ou igual ao terceiro número total de instruções.
11. MÉTODO, de acordo com a reivindicação 6, que compreende instruir o segundo processador a executar o primeiro número calculado de instruções se o segundo número total de instruções for menor que o primeiro número total de instruções ou o terceiro número total de instruções.
12. MÉTODO, de acordo com a reivindicação 6, que compreende instruir o segundo processador a atrasar o processamento se o segundo número total de instruções for maior ou igual ao primeiro número total de instruções e se o segundo número total de instruções for maior ou igual ao terceiro número total de instruções.
13. MÉTODO, que compreende: receber dados de entrada em um sistema; fornecer os dados de entrada a uma pluralidade de processadores; executar um código de execução com o uso dos dados de entrada para produzir uma respectiva pluralidade de saídas da pluralidade de processadores; e aplicar um algoritmo de consenso distribuído à respectiva pluralidade de saídas para produzir uma saída de consenso; em que a pluralidade de processadores compreende: um primeiro processador configurado para executar iterativamente instruções por meio de uma primeira pluralidade de iterações até um período de tempo predeterminado ter transcorrido, em que um número de instruções executadas em cada iteração da primeira pluralidade de iterações é menor que um número de instruções executadas em uma iteração anterior da primeira pluralidade de iterações; e um segundo processador configurado para executar iterativamente instruções por meio de uma segunda pluralidade de iterações até o período de tempo predeterminado ter transcorrido, em que um número de instruções executadas em cada iteração da segunda pluralidade de iterações é menor que um número de instruções executadas em uma iteração anterior da segunda pluralidade de iterações.
14. MÉTODO, de acordo com a reivindicação 13, em que executar os dados de entrada compreende determinar um primeiro número total de instruções executadas pelo primeiro processador durante o período de tempo predeterminado e determinar um segundo número total de instruções executadas pelo segundo processador durante o período de tempo predeterminado.
15. MÉTODO, de acordo com a reivindicação 14, em que executar os dados de entrada compreende instruir o segundo processador a executar um número calculado de instruções se o segundo número total de instruções for menor que o primeiro número total de instruções.
16. MÉTODO, de acordo com a reivindicação 14, em que executar os dados de entrada compreende instruir o segundo processador a atrasar o processamento se um segundo número total de instruções for maior ou igual ao primeiro número total de instruções.
17. SISTEMA PARA SINCRONIZAR PROCESSADORES, que compreende: um primeiro processador configurado para executar iterativamente instruções por meio de uma primeira pluralidade de iterações até um período de tempo predeterminado ter transcorrido, em que um número de instruções executadas em cada iteração da primeira pluralidade de iterações é menor que um número de instruções executadas em uma iteração anterior da primeira pluralidade de iterações; um segundo processador configurado para executar iterativamente instruções por meio de uma segunda pluralidade de iterações até o período de tempo predeterminado ter transcorrido, em que um número de instruções executadas em cada iteração da segunda pluralidade de iterações é menor que um número de instruções executadas em uma iteração anterior da segunda pluralidade de iterações; e um terceiro processador configurado para executar iterativamente instruções por meio de uma terceira pluralidade de iterações até o período de tempo predeterminado ter transcorrido, em que um número de instruções executadas em cada iteração da terceira pluralidade de iterações é menor que um número de instruções executadas em uma iteração anterior da terceira pluralidade de iterações.
18. SISTEMA, de acordo com a reivindicação 17, que compreende um quarto processador configurado para instruir o primeiro processador a executar um número calculado de instruções se o primeiro número total de instruções for menor que o segundo ou o terceiro números totais de instruções e instruir o primeiro processador a atrasar o processamento se o primeiro número total de instruções for maior ou igual ao segundo e terceiro números totais de instruções.
19. SISTEMA, de acordo com a reivindicação 17, que compreende um quarto processador configurado para instruir o segundo processador a executar um número calculado de instruções se o segundo número total de instruções for menor que o primeiro ou o terceiro números totais de instruções e instruir o segundo processador a atrasar o processamento se o segundo número total de instruções for maior ou igual ao primeiro e terceiro números totais de instruções.
20. SISTEMA, de acordo com a reivindicação 17, que compreende um quarto processador configurado para instruir o terceiro processador a executar um número calculado de instruções se o terceiro número total de instruções for menor que o primeiro ou o segundo números totais de instruções e instruir o terceiro processador a atrasar o processamento se o terceiro número total de instruções for maior ou igual ao primeiro e segundo números totais de instruções.
BRBR102013021930-4A 2012-09-14 2013-08-28 Método para sincronizar um número de instruções realizadas por uma pluralidade de processadores e sistema para sincronizar processadores BR102013021930A2 (pt)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US13/620,047 US9342358B2 (en) 2012-09-14 2012-09-14 System and method for synchronizing processor instruction execution

Publications (1)

Publication Number Publication Date
BR102013021930A2 true BR102013021930A2 (pt) 2015-01-27

Family

ID=49162034

Family Applications (1)

Application Number Title Priority Date Filing Date
BRBR102013021930-4A BR102013021930A2 (pt) 2012-09-14 2013-08-28 Método para sincronizar um número de instruções realizadas por uma pluralidade de processadores e sistema para sincronizar processadores

Country Status (6)

Country Link
US (1) US9342358B2 (pt)
EP (1) EP2709010B1 (pt)
JP (1) JP6196855B2 (pt)
CN (1) CN103677756B (pt)
BR (1) BR102013021930A2 (pt)
CA (1) CA2826572A1 (pt)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TW201229910A (en) * 2011-01-14 2012-07-16 Hon Hai Prec Ind Co Ltd Method of activating application in virtual environment
FR3023398B1 (fr) * 2014-07-01 2016-07-01 Bull Sas Procede et dispositif d'execution synchronisee d'une application dans un environnement a haute disponibilite
US9996431B2 (en) * 2016-03-23 2018-06-12 GM Global Technology Operations LLC Architecture and apparatus for advanced arbitration in embedded controls
FR3052890B1 (fr) * 2016-06-21 2018-07-13 Thales Sa Procede de reception garantie de signaux communs dans un systeme avionique comportant une pluralite de calculateurs electroniques
CN106445852B (zh) * 2016-08-12 2019-05-14 中国航空工业集团公司西安飞行自动控制研究所 一种基于自监控架构的任务间通讯装置与方法
US10452446B1 (en) * 2017-06-07 2019-10-22 Rockwell Collins, Inc. High integrity multi-core processing
CN111767078A (zh) * 2019-04-02 2020-10-13 上海寒武纪信息科技有限公司 数据运行方法、装置和相关产品
FR3108993A1 (fr) * 2020-04-07 2021-10-08 Airbus Operations Procédé et système de synchronisation d’unités de calcul d’un aéronef.

Family Cites Families (47)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4589066A (en) 1984-05-31 1986-05-13 General Electric Company Fault tolerant, frame synchronization for multiple processor systems
US5295258A (en) 1989-12-22 1994-03-15 Tandem Computers Incorporated Fault-tolerant computer system with online recovery and reintegration of redundant components
US5233615A (en) 1991-06-06 1993-08-03 Honeywell Inc. Interrupt driven, separately clocked, fault tolerant processor synchronization
US5613127A (en) 1992-08-17 1997-03-18 Honeywell Inc. Separately clocked processor synchronization improvement
US5537655A (en) 1992-09-28 1996-07-16 The Boeing Company Synchronized fault tolerant reset
JPH0773059A (ja) 1993-03-02 1995-03-17 Tandem Comput Inc フォールトトレラント型コンピュータシステム
US5550736A (en) 1993-04-27 1996-08-27 Honeywell Inc. Fail-operational fault tolerant flight critical computer architecture and monitoring method
US5572620A (en) 1993-07-29 1996-11-05 Honeywell Inc. Fault-tolerant voter system for output data from a plurality of non-synchronized redundant processors
JPH07175765A (ja) * 1993-10-25 1995-07-14 Mitsubishi Electric Corp 計算機の障害回復方法
US5557623A (en) 1994-08-12 1996-09-17 Honeywell Inc. Accurate digital fault tolerant clock
US5742753A (en) 1996-06-06 1998-04-21 The Boeing Company Mesh interconnected array in a fault-tolerant computer system
US5896523A (en) 1997-06-04 1999-04-20 Marathon Technologies Corporation Loosely-coupled, synchronized execution
ATE215244T1 (de) 1997-11-14 2002-04-15 Marathon Techn Corp Verfahren zur erhaltung von synchronisierter ausführung bei fehler-betriebssicheren/ fehlertoleranten rechnersystemen
US6374364B1 (en) 1998-01-20 2002-04-16 Honeywell International, Inc. Fault tolerant computing system using instruction counting
US6327668B1 (en) * 1998-06-30 2001-12-04 Sun Microsystems, Inc. Determinism in a multiprocessor computer system and monitor and processor therefor
US6367031B1 (en) 1998-12-17 2002-04-02 Honeywell International Inc. Critical control adaption of integrated modular architecture
ATE456092T1 (de) 2000-04-11 2010-02-15 Boeing Co Verarbeitungssystem mit mehrheitsentscheidung
US6633969B1 (en) * 2000-08-11 2003-10-14 Lsi Logic Corporation Instruction translation system and method achieving single-cycle translation of variable-length MIPS16 instructions
US6895582B1 (en) 2000-09-11 2005-05-17 Rockwell Collins Method and apparatus for high assurance computing using virtual machines on general purpose computing resources
US6938183B2 (en) 2001-09-21 2005-08-30 The Boeing Company Fault tolerant processing architecture
EP1341080A1 (fr) * 2002-02-26 2003-09-03 Koninklijke Philips Electronics N.V. Système de traitement d'instructions d'un programme
US6948091B2 (en) 2002-05-02 2005-09-20 Honeywell International Inc. High integrity recovery from multi-bit data failures
US7558883B1 (en) 2002-06-28 2009-07-07 Microsoft Corporation Fast transaction commit
US7565433B1 (en) 2002-06-28 2009-07-21 Microsoft Corporation Byzantine paxos
JP2004046599A (ja) * 2002-07-12 2004-02-12 Nec Corp フォルトトレラントコンピュータ装置、その再同期化方法及び再同期化プログラム
US7620680B1 (en) 2002-08-15 2009-11-17 Microsoft Corporation Fast byzantine paxos
US8005888B2 (en) 2003-12-30 2011-08-23 Microsoft Corporation Conflict fast consensus
US7334154B2 (en) 2004-06-18 2008-02-19 Microsoft Corporation Efficient changing of replica sets in distributed fault-tolerant computing system
US7856502B2 (en) 2004-06-18 2010-12-21 Microsoft Corporation Cheap paxos
US7505400B2 (en) 2004-09-22 2009-03-17 Honeywell International Inc. Dual lane connection to dual redundant avionics networks
US7698465B2 (en) 2004-11-23 2010-04-13 Microsoft Corporation Generalized Paxos
US7555516B2 (en) 2004-11-23 2009-06-30 Microsoft Corporation Fast Paxos recovery
US20060143517A1 (en) 2004-12-22 2006-06-29 Microsoft Corporation Replicated virtual machine
US9753754B2 (en) 2004-12-22 2017-09-05 Microsoft Technology Licensing, Llc Enforcing deterministic execution of threads of guest operating systems running in a virtual machine hosted on a multiprocessor machine
US8046413B2 (en) 2005-02-14 2011-10-25 Microsoft Corporation Automatic commutativity detection for generalized paxos
US20060200278A1 (en) 2005-03-02 2006-09-07 Honeywell International Inc. Generic software fault mitigation
US7877552B2 (en) 2005-05-24 2011-01-25 Marathon Technologies Corporation Symmetric multiprocessor fault tolerant computer system
US7797457B2 (en) 2006-03-10 2010-09-14 Microsoft Corporation Leaderless byzantine consensus
US7636868B2 (en) 2006-06-27 2009-12-22 Microsoft Corporation Data replication in a distributed system
US7793147B2 (en) 2006-07-18 2010-09-07 Honeywell International Inc. Methods and systems for providing reconfigurable and recoverable computing resources
US20080140801A1 (en) 2006-10-05 2008-06-12 Holt John M Multiple computer system with dual mode redundancy architecture
FR2912526B1 (fr) * 2007-02-13 2009-04-17 Thales Sa Procede de maintien du synchronisme d'execution entre plusieurs processeurs asynchrones fonctionnant en parallele de maniere redondante.
FR2914519B1 (fr) 2007-03-26 2009-06-12 Airbus France Sas Procede de controle d'integrite des donnees dans un reseau afdx.
US7987385B2 (en) 2007-07-24 2011-07-26 Ge Aviation Systems Llc Method for high integrity and high availability computer processing
US7849223B2 (en) 2007-12-07 2010-12-07 Microsoft Corporation Virtually synchronous Paxos
US8499297B2 (en) 2008-10-28 2013-07-30 Vmware, Inc. Low overhead fault tolerance through hybrid checkpointing and replay
WO2010067105A1 (en) 2008-12-12 2010-06-17 Bae Systems Plc An apparatus and method for processing data streams

Also Published As

Publication number Publication date
US9342358B2 (en) 2016-05-17
CA2826572A1 (en) 2014-03-14
JP2014059870A (ja) 2014-04-03
CN103677756B (zh) 2018-08-10
JP6196855B2 (ja) 2017-09-13
EP2709010A1 (en) 2014-03-19
US20140082331A1 (en) 2014-03-20
CN103677756A (zh) 2014-03-26
EP2709010B1 (en) 2016-11-09

Similar Documents

Publication Publication Date Title
BR102013021930A2 (pt) Método para sincronizar um número de instruções realizadas por uma pluralidade de processadores e sistema para sincronizar processadores
US20100095152A1 (en) Checkpointing A Hybrid Architecture Computing System
US20140331014A1 (en) Scalable Matrix Multiplication in a Shared Memory System
US11675654B2 (en) Systems and methods for error recovery
CA2826568C (en) System and method for controlling processor instruction execution
US11016861B2 (en) Crash recoverability for graphics processing units (GPU) in a computing environment
Missimer et al. Distributed real-time fault tolerance on a virtualized multi-core system
CN104063295A (zh) 一种多核操作系统可重构容错启动方法
Nogueira et al. CloudBFT: elastic byzantine fault tolerance
Wang et al. A work-stealing scheduling framework supporting fault tolerance
US9262271B2 (en) Method of improving fault tolerance in a computing system arranged to find a computational solution
BR102013023551A2 (pt) Método para controlar uma quantidade total de instruções executado por um processador e para controlar um período de tempo e sistema para controlar uma quantidade total de instruções executadas por um processador
Cores et al. Failure avoidance in MPI applications using an application-level approach
Gilbert et al. Performance implications of virtualization and hyper-threading on high energy physics applications in a grid environment
Wang et al. A fault tolerant self-scheduling scheme for parallel loops on shared memory systems
Hammoud et al. Distributed Programming for the Cloud: Models, Challenges, and Analytics Engines.
Hayot-Sasson et al. Evaluation of pilot jobs for Apache Spark applications on HPC clusters
Qiu et al. An efficient fault-tolerant scheduling algorithm for periodic real-time tasks in heterogeneous platforms
Zhezhera et al. Development of a functionally sustainable system of orientation of a free battle flighting unit
Dou et al. Performance analysis for fast parallel recomputing algorithm under DTA
RU2612569C2 (ru) Способ автоматического управления избыточностью неоднородной вычислительной системы и устройство для его реализации
Xiao-dong Research on Multi-thread Parallel Computing Fault-Tolerant Technology
Backer et al. Balancing performance and fault detection for GPGPU workloads
van Kampenhout et al. Fault-Tolerant Deployment of Dataflow Applications Using Virtual Processors
Missimer Distributed real-time fault tolerance in a virtualized separation kernel

Legal Events

Date Code Title Description
B03A Publication of an application: publication of a patent application or of a certificate of addition of invention
B06F Objections, documents and/or translations needed after an examination request according art. 34 industrial property law
B06U Preliminary requirement: requests with searches performed by other patent offices: suspension of the patent application procedure
B09A Decision: intention to grant
B11D Dismissal acc. art. 38, par 2 of ipl - failure to pay fee after grant in time