BR112015001476B1 - Método implementado por computador, sistema de computador e meio de armazenamento para fluxo contínuo livre de bloqueio para dados de código executável - Google Patents

Método implementado por computador, sistema de computador e meio de armazenamento para fluxo contínuo livre de bloqueio para dados de código executável Download PDF

Info

Publication number
BR112015001476B1
BR112015001476B1 BR112015001476-3A BR112015001476A BR112015001476B1 BR 112015001476 B1 BR112015001476 B1 BR 112015001476B1 BR 112015001476 A BR112015001476 A BR 112015001476A BR 112015001476 B1 BR112015001476 B1 BR 112015001476B1
Authority
BR
Brazil
Prior art keywords
memory
operational code
code
operational
computer
Prior art date
Application number
BR112015001476-3A
Other languages
English (en)
Other versions
BR112015001476A2 (pt
Inventor
Kristofer Reierson
Original Assignee
Microsoft Technology Licensing, Llc
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 Microsoft Technology Licensing, Llc filed Critical Microsoft Technology Licensing, Llc
Publication of BR112015001476A2 publication Critical patent/BR112015001476A2/pt
Publication of BR112015001476B1 publication Critical patent/BR112015001476B1/pt

Links

Images

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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3816Instruction alignment, e.g. cache line crossing
    • 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/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Debugging And Monitoring (AREA)

Abstract

MÉTODO IMPLEMENTADO POR COMPUTADOR, SISTEMA DE COMPUTADOR E MEIO DE ARMAZENAMENTO PARA FLUXO CONTÍNUO LIVRE DE BLOQUEIO PARA DADOS DE CÓDIGO EXECUTÁVEL. Um desmontador que recebe instruções e desmonta as mesmas em vários códigos operacionais separados. O desmontador cria uma tabela identificando limites entre cada código operacional. Cada código operacional é gravado na memória de uma maneira código operacional por código operacional por atomicamente gravar blocos padrão de memória. Códigos operacionais e ponto de parada para depuração são anexados ao código operacional para criar um bloco completo de memória quando necessário. O bloco de memória pode ter trinta e dois ou sessenta e quatro bits, por exemplo. Códigos operacionais longos podem sobrepor dois ou mais blocos de memória. Códigos operacionais de ponto de parada para depuração podem ser anexados a uma segunda parte do código operacional longo para criar um bloco completo de memória. Um interceptador de falha de fluxo identifica quando uma página de dados solicitada não está disponível e recupera a página de dados.

Description

ANTECEDENTES
[0001] Uma condição de corrida ("race condition") ocorre quando comandos para ler e gravar dados são recebidos ao mesmo tempo. Isto também pode acontecer, por exemplo, quando um encadeamento está executando um pacote de dados executáveis a partir da memória ao mesmo tempo em que um encadeamento de gravação está distribuindo os dados para a memória. O resultado pode ser falha do computador, parada de programa, erros de leitura/gravação, ou outros problemas. Em uma solução, o encadeamento executando pode ser suspenso enquanto aguardando pelo encadeamento de gravação para proporcionar os dados. Entretanto, suspender um encadeamento pode causar problemas de performance para processos relacionados. Por exemplo, dezenas ou centenas encadeamentos podem estar executando para um processo no qual somente um ou alguns encadeamento acessam os dados, mas todos os encadeamentos podem ter que ser suspensos para aguardar a distribuição de dados cada vez que ocorre uma falha de fluxo.
SUMÁRIO
[0002] Este Sumário é proporcionado para introduzir uma seleção de conceitos de uma forma simplificada, os quais são adicionalmente descritos abaixo na Descrição Detalhada. Este Sumário não é pretendido para identificar aspectos chave ou aspectos essenciais do assunto reivindicado, nem é pretendido para ser utilizado para limitar o escopo do assunto reivindicado.
[0003] Concretizações permitem código executável ser distribuído de uma maneira livre de bloqueio por desmontar o mesmo e ordenar as gravações junto à página de memória. Isto permite que o código executável permaneça em um estado consistente durante toda a distribuição de dados em fluxo contínuo. Devido à memória estar em um estado consistente, outros encadeamentos podem continuar a executar enquanto o código binário é gravado na memória. Isto permite maior escalabilidade e performance.
[0004] Concretizações adicionais permitem o fluxo contínuo de dados de código executável no modo do usuário, sem suspender todo o processo ou utilizar um componente do modo kernel.
BREVE DESCRIÇÃO DOS DESENHOS
[0005] Para adicionalmente esclarecer as vantagens acima e outras vantagens e aspectos de concretizações da presente invenção, uma descrição mais particular de concretizações da presente invenção será fornecida por referência aos desenhos anexos. É apreciado que estes desenhos representam somente concretizações típicas da invenção e, portanto, não são para ser considerados limitando o seu escopo. A invenção será descrita e explicada com especificidade e detalhes adicionais através do uso dos desenhos acompanhantes nos quais:
[0006] As FIGURAS 1A a 1D ilustram o ordenamento das gravações de memória com o passar do tempo de acordo com uma concretização.
[0007] A FIGURA 2 ilustra um sistema para transmitir continuamente livre de bloqueio dados de código executável de acordo com uma concretização.
[0008] A FIGURA 3 é um fluxograma de um processo ou método para transmitir continuamente dados de código executável de acordo com uma concretização.
[0009] A FIGURA 4 ilustra um exemplo de um ambiente de computação e de interoperabilidade adequado para proporcionar transmissão de fluxo contínuo livre de bloqueio de dados de código executável.
DESCRIÇÃO DETALHADA
[00010] A solução livre de bloqueio descrita neste documento tira vantagem de dois aspectos de um processador moderno. Primeiro, o processador proporciona uma gravação com acesso à memória de trinta e dois bits ou de sessenta quatro bits. Isto garante que o processador irá ver todos os trinta e dois bits ou sessenta e quatro bits na memória. Em segundo lugar, o processador possui um código de operação (opcode) de exceção de interrupção de depuração de um byte. Este código operacional de interrupção de depuração permite ao processador tentar novamente a leitura e executar códigos operacionais a partir da memória sem causar que um encadeamento de chamada falhe.
[00011] Em uma concretização, o código é desmontado na memória antes das instruções se tornarem disponíveis para um processador. Esta desmontagem permite a criação de uma lista ordenada de gravações na memória consistindo de várias gravações separadas de trinta e dois bits ou de sessenta e quatro bits. Esta desmontagem e análise podem ser executadas em um cliente ou em um servidor. Executar esta operação no cliente economiza transmissões da rede ao custo de ciclos aumentados do processador, enquanto executar a operação no servidor significa maior transmissão da rede, mas requer menos operação do processador no nó cliente.
[00012] Quando a página da memória é alocada, toda a página é gravada com os códigos de exceção de um bit. Um indicador de falha de fluxo mantém uma lista de páginas e de localizações que foram gravadas ou que são inválidas.
[00013] Os códigos operacionais são gravados na memória utilizando os blocos de trinta e dois bits ou de sessenta e quatro bits iniciando no fim da página. Alternativamente, a árvore da montagem pode ser analisada para identificar códigos operacionais folha, os quais são códigos operacionais que são chamados por outros códigos operacionais. Os códigos operacionais folha podem ser identificados por uma transversal do gráfico de chamada de execução do código operacional. Estes códigos operacionais folha podem ser gravados primeiro na memória.
[00014] Para códigos operacionais que possuem trinta e dois bits ou menos (ou sessenta e quanto bits ou menos em outras concretizações), todos os códigos operacionais são gravados na memória de modo que o processador irá executar aas instruções com sucesso. Se o código operacional for maior do que trinta e dois bits (ou maior do que sessenta e quatro bits em outras concretizações), então o "fim" do código operacional é gravado primeiro. Por gravar o fim do código operacional primeiro, se o processador executar a instrução enquanto o código operacional ainda está sendo gravado, então o processador irá executar primeiro o código operacional de interrupção de depuração. Isto permite que o indicador de falha de fluxo termine a gravação do código operacional e de modo que o processador possa recuperar o código operacional. Se a gravação de trinta e dois bits (ou de sessenta e quatro bits) se estender mais do que um código operacional, então um código operacional de interrupção de depuração é gravado para permitir a nova tentativa. Se a gravação de trinta e dois bits (ou sessenta e quatro bits) já tiver sido gravada, então, o valor anterior é gravado, caso em que o código operacional permanece válido.
[00015] Por gravar os códigos operacionais desmontados espaçados por paradas para depuração, o processador irá encontrar um ponto de interrupção de depuração inválido ou código executável válido. Se o aplicativo executar um debug breakpoint inválido, então um interceptor de falha de fluxo como descrito neste documento irá interceptar a exceção antes de ela ser distribuída para o aplicativo. O interceptor de falha de fluxo aguarda até que a memória esteja válida e então tenta novamente o código operacional. O interceptor de falha de fluxo pode utilizar a tabela de páginas e códigos operacionais gravados para diferenciar entre um ponto de parada que ocorre como parte de falha do fluxo, o que deve ser recuperado, ou um utilizado por um depurador ou pelo aplicativo, o qual deve ser passado de volta para o aplicativo. No caso de código executável válido, o aplicativo executa o código com sucesso. Como resultado, o indicador de falha de fluxo não precisa suspender todos os encadeamentos no processo quando distribuindo os resultados de uma falha de fluxo.
[00016] As FIGURAS 1A a 1D ilustram o ordenamento das gravações de memória com o passar do tempo de acordo com uma concretização. O código de programa utilizado neste exemplo compreende as instruções: 0xAB 0xE9 0x00 0xFE 0x70 0x08 Um desmontador separa este código nos seguintes códigos operacionais: (1): 0xAB (2): 0xE9 0x00 0xFE 0x70 0x08 (3):
[00017] O primeiro código operacional tem o comprimento de um byte, o segundo código operacional tem o comprimento de cinco bytes, e códigos operacionais adicionais de vários comprimentos são identificados de uma maneira similar.
[00018] A memória 101 compreende vários blocos de trinta e dois bits 102 até 104. Em outras concretizações, os blocos de memória podem ter sessenta e quatro bits ou algum outro tamanho. A FIGURA 1A ilustra um estado original no qual toda a memória 101 é preenchida com códigos operacionais de ponto de parada para depuração com um byte 0xCC. Se um encadeamento ler instruções a partir da memória 101 nesta hora, o código operacional de ponto de parada para depuração irá causar que o indicador de fluxo tente carregar código para a memória 101 e então o encadeamento irá tentar ler o código novamente.
[00019] Na FIGURA 1B, o primeiro código operacional 0xAB foi gravado junto ao bloco de trinta e dois bits 102b. o primeiro código operacional de um byte 0xAB é gravado na memória 101 com uma gravação atômica que substitui o primeiro 0xCC. A operação de gravação precisa gravar trinta e dois bits de dados. Devido à instrução ter sido desmontada antes da gravação na memória, a operação de gravação rastreia quais bytes estão sendo gravados e sabe como preencher os trinta e quatro bits restantes do bloco 102b com 0xCC para encher todo o bloco de trinta e dois bits. Se o processador executar a primeira instrução 0xAB, ele terá sucesso. Entretanto, se o processador tentar executar a segunda instrução nesta hora, o ponto de parada para depuração 0xCC será lido e um mecanismo de nova tentativa de fala de fluxo irá assumir o controle.
[00020] O indicador de falha e fluxo agora precisa gravar o segundo código operacional (isto é, 0xE9 0x00 0xFE 0X70 0x08). O indicador de falha de fluxo sabe que a instrução anterior (0xAB) foi gravada e sabe como os blocos 102b até 104b foram gravados. O indicador de falha de fluxo também sabe o comprimento do próximo código operacional e como ele precisa ser gravado na memória 101. Em particular, o indicador de falha de fluxo sabe que o segundo código operacional de cinco bytes será gravado junto aos blocos 102b e 103b após o código operacional 0xAB. O indicador de falha de fluxo também determina que o segundo código operacional não irá encaixar dentro do espaço restante em um único bloco de trinta e dois bits 102b. Portanto, o segundo código operacional deve ser dividido entre blocos de memória 102b e 103b.
[00021] Como ilustrado na FIGURA 1C, a segunda parte do código operacional (isto é, 0x70 0x08) é gravada junto ao bloco 103c - preenchido com pontos de parada para depuração 0x00 para preencher trinta e dois bits - antes da gravação da primeira parte do código operacional. Por gravar a segunda parte do código operacional primeiro, se o processador executar o código operacional após o bloco 0xAB, então o processador irá incorrer em uma falha de depuração (0xCC) e não irá tentar executar o coletor de lixo.
[00022] Após a segunda parte do código operacional ser gravada junto ao bloco 103c, então a primeira parte (isto é, 0xE9 0x00 0xFE) pode ser gravada junto à memória 101. Como ilustrado na FIGURA 1D, esta primeira parte é gravada com o primeiro código operacional 0xAB na posição que ele foi anteriormente designado no bloco 102d. Nesta hora, o processador estará apto a executar com sucesso ambas as instruções. Este processo de instruções de gravação na memória 101 pode ser aplicado código operacional por código operacional até que toda a página esteja residente.
[00023] A FIGURA 2 ilustra um sistema para transmissão continua livre de bloqueio de dados de código executável de acordo com uma concretização. Um aplicativo executando no sistema operacional 201 tenta ler uma página de dados 202 a partir da memória. Quando uma página não residente de memória executável é chamada, isto ativa a exceção do sistema operacional 203, a qual notifica ao sistema operacional 201 que esta chamada falhou. O sistema operacional 201 envia um código de retorno de falha de leitura para o interceptador de falha de fluxo 204 antes do aplicativo ver a falha. O interceptador de falha de fluxo 204 consulta a página em sua base de dados e determina que ele precisa recuperar a página. O interceptador de falha de fluxo 204 faz uma chamada de rede para obter a página a partir do servidor de rede 205, por exemplo, e altera o acesso à memória da página de modo que ele pode gravar os dados junto à página de dados 202.
[00024] Nos sistemas existentes, o interceptador de falha de fluxo 204 precisaria suspender o processo que solicitou os dados. Se o processo não for suspenso, então outro encadeamento poderia executar dados na página 202 à medida que ela estava sendo gravada na memória e o processo falharia quando ele tentasse executar dados parciais. Após a página 202 ter sido gravada na memória, então o processo poderia ser reiniciado com o interceptador de falha de fluxo alterando a exceção do sistema operacional para "sucesso" e o aplicativo continuando a executar.
[00025] Nos sistemas existentes, esta etapa de suspender todo o processo é necessária devido ao acesso de alteração junto à página de dados 202 e aos dados de gravação para a mesma não poderem ser realizados em uma única etapa. Isto significa que dois encadeamentos no processo não podem estar executando quando você está servindo a uma falha de fluxo.
[00026] Os sistemas existentes são melhorados neste documento pela adição do desmontador 206 e pelo rastreador de página gravada/não gravada 207. O desmontador 206 é responsável por pegar o código binário retornado e desmontar o mesmo. O desmontador 206 retorna uma lista de deslocamentos que contêm os limites de cada código operacional. Como citado no exemplo da FIGURA 1, cada código operacional pode ter o comprimento de um ou mais bytes. O rastreador de página gravada/não gravada 207 contém a lista de deslocamentos gerados pelo desmontador 206 bem como uma lista destes deslocamentos que foram confirmados.
[00027] O processo não precisa ser suspenso quando utilizando o desmontador 206 e o rastreador de página gravada/não gravada 207. Ao invés disso, após o código solicitado ser retornado para o interceptador de falha de fluxo 204 a partir do servidor 205, o desmontador é chamado para gerar o mapa de deslocamentos. O mapa de deslocamentos é então armazenado pelo interceptador de falha de fluxo 204, o qual começa a gravar códigos operacionais junto à página de dados 202 de uma maneira de código operacional por código operacional como descrito acima. O interceptador de falha de fluxo 204 consulta este mapa de deslocamentos para determinar o limite de cada código operacional. O interceptador de falha de fluxo 204 pode gravar os códigos operacionais junto à página de dados 202 em qualquer ordem apropriada iniciando com o começo ou com o fim da lista de códigos operacionais.
[00028] Se ocorrer qualquer disputa, tal como se o processador executar uma instrução parcialmente preenchida, então o mecanismo de falha do sistema operacional 203 irá ser ativado. Isto irá causar que o interceptador de falha de fluxo 204 seja invocado pelo sistema operacional 201. O interceptador de falha de fluxo 204 consulta o rastreador de página gravada/não gravada 207 e grava o próprio código operacional junto à página de dados 202 ou aguarda até que o encadeamento termina a gravação de dados. O interceptador de falha de fluxo 204 então recupera a exceção.
[00029] A FIGURA 3 é um fluxograma de um processo ou método para transmitir continuamente dados de código executável de acordo com uma concretização. Na etapa 301, um processador recebe instruções compreendendo vários códigos operacionais. Cada um dos códigos operacionais pode compreender um ou mais bytes de dados. Na etapa 302, um desmontador é utilizado para desmontar as instruções em códigos operacionais separados. Na etapa 303, é criada uma tabela que identifica os limites entre cada código operacional. A tabela pode ser armazenada em um rastreador de página gravada/não gravada, por exemplo. Na etapa 304, cada código operacional é gravado na memória de uma maneira código operacional por código operacional por atomicamente gravar blocos padrão da memória. Os códigos operacionais podem ser gravados na memória por um interceptador de falha de fluxo, por exemplo.
[00030] Em algumas concretizações, códigos operacionais de ponto de parada para depuração podem ser gravados em todas as localizações de memória para inicializar a memória. Quando os códigos operacionais são gravados na memória, os códigos operacionais de ponto de parada para depuração podem ser anexados ao código operacional para criar um bloco padrão completo de memória. O bloco padrão de memória pode ter trinta e dois bits ou sessenta e quatro bits, por exemplo.
[00031] Quando um código operacional longo irá sobrepor dois ou mais blocos padrão de memória, então ele pode ser dividido em duas partes. A segunda parte do código operacional longo é gravada em um segundo bloco de memória, e então, a primeira parte do código operacional longo é gravada em um primeiro bloco de memória. Gravar o código operacional longo desta maneira irá garantir que um ponto de parada para depuração será encontrado se uma localização de memória for lida antes de todo o código operacional ser gravado. Os códigos operacionais de ponto de parada para depuração podem ser anexados à segunda parte do código operacional longo para criar um bloco padrão completo de memória. Um código operacional anterior pode ser gravado junto com a primeira parte do código operacional longo no primeiro bloco da memória.
[00032] Será entendido que as etapas 301 até 305 do processo ilustrado na FIGURA 3 podem ser executadas simultaneamente e/ou sequencialmente. Será adicionalmente entendido que cada etapa pode ser executada em qualquer ordem e pode ser executada uma vez ou repetidamente.
[00033] A FIGURA 4 ilustra um exemplo de um ambiente adequado de computador e de interoperabilidade 400 no qual os exemplos das FIGURAS 1 até 3 podem ser implementados para proporcionar fluxo contínuo livre de bloqueio de dados de código executável. O ambiente de sistema de computação 400 é somente um exemplo de um ambiente de computação adequado e não é pretendido para sugerir qualquer limitação quanto ao escopo de uso ou quanto à funcionalidade da invenção. A invenção é operacional com vários outros ambientes ou configurações de sistema de computação de propósito geral ou de propósito especial. Exemplos bem conhecidos de sistemas, ambientes e/ou de configurações de sistemas de computação que podem ser adequados para uso com a invenção incluem, mas não estão limitados a: computadores pessoais, computadores servidores, dispositivo portáteis ou laptop, dispositivos tablet, sistemas multiprocessador, sistemas baseados em microprocessador, decodificadores de sinal, eletroeletrônicos programáveis, PCs de rede, minicomputadores, computadores de grande porte, ambiente de computação distribuída que inclui qualquer um dos sistemas ou dispositivos acima, dentre outros.
[00034] A invenção pode ser descrita no contexto geral de instruções executáveis por computador, tais como módulos de programa, sendo executados por um computador. Geralmente, os módulos de programa incluem rotinas, programas, objetos, componentes, estruturas de dados, e assim por diante, que executam tarefas particulares ou implementam tipos particulares de dados abstratos. A invenção também pode ser praticada em ambientes de computação distribuída onde as tarefas são executadas por dispositivos de processamento remotos que estão ligados através de uma rede de comunicações. Em um ambiente de computação distribuída, os módulos de programa podem estar localizados em meios de armazenamento do computador local e/ou remotos incluindo dispositivos de armazenamento em memória.
[00035] Com referência à FIGURA 4, um sistema ilustrativo para implementar vários aspectos da invenção pode incluir um dispositivo de computação de propósito geral na forma de um computador 400. Componentes podem incluir, mas não estão limitados a vários componentes de hardware, tais como a unidade de processamento 401, o armazenamento de dados 402, tal como uma memória do sistema, e o barramento do sistema 403 que acopla vários componentes do sistema incluindo o armazenamento de dados 402 com a unidade de processamento 401. O barramento do sistema 403 pode ser qualquer um dentre vários tipos de estruturas de barramento incluindo um barramento de memória ou controlador de memória, um barramento periférico, e um barramento local utilizando qualquer uma dentre várias arquiteturas de barramento. A título de exemplo e não de limitação, tais arquiteturas incluem o barramento da Arquitetura Padrão da Indústria (ISA), o barramento aprimorado ISA (EISA), o barramento da Arquitetura de Micro Canal (MCA), o barramento local da Associação de Padrões de Eletrônica e Vídeo (VESA), e o barramento da Interconexão de Componentes Periféricos (PCI) também conhecido como barramento Mezanino.
[00036] O computador 400 tipicamente inclui vários meios legíveis por computador 404. Os meios legíveis por computador 404 podem ser qualquer meio disponível que possa ser acessado pelo computador 400 e inclui tanto meios voláteis como não voláteis e meios removíveis e não removíveis, mas exclui sinais propagados. A título de exemplo e não de limitação, os meios legíveis por computador 404 podem compreender meio de armazenamento do computador e meio de comunicação. O meios de armazenamento do computador inclui meio volátil e não volátil, removível e não removível, implementado em qualquer método ou tecnologia para armazenamento de informação tal como instruções legíveis por computador, estruturas de dados, módulos de programa ou outros dados. O meio de armazenamento do computador inclui, mas não está limitado a RAM, ROM, EEPROM, memória flash ou outra tecnologia de memória, CD-ROM, discos versáteis digitais (DVD) ou outro armazenamento em disco ótico, cassetes magnéticos, fita magnética, armazenamento em disco magnético ou outros dispositivos de armazenamento magnético, ou qualquer outro meio que possa ser utilizado para armazenar as informações desejadas e que possa ser acessado pelo computador 400. O meio de comunicação tipicamente incorpora instruções legíveis por computador, estruturas de dados, módulos de programa ou outros dados em um sinal de dados modulado tal como uma onda portadora ou outro mecanismo de transporte e inclui qualquer meio de distribuição de informação. O termo "sinal de dados modulado" significa um sinal que tem uma ou mais de suas características estabelecidas ou alteradas de uma maneira tal a codificar informação no sinal. A título de exemplo e não de limitação, o meio de comunicação inclui meio com uso de fios tal como rede com uso de fios ou conexão com fios direta, e meio sem uso de fios tal como meio acústico, RF, infravermelho e outros meios sem uso de fios. Combinações de qualquer um dos ditos acima também estão incluídas dentro do escopo de meio legível por computador. O meio legível por computador pode ser incorporado como um produto de programa de computador, tal como software armazenado no meio de armazenamento do computador.
[00037] O armazenamento de dados ou memória do sistema 402 inclui meios de armazenamento do computador na forma de memória volátil e/ou não volátil tal como memória somente para leitura (ROM) e memória de acesso aleatório (RAM). A memória 402 ou meio legível por computador 404 pode ser utilizado para armazenar páginas de dados, listas de limite de código operacional, códigos operacionais, dentre outros. Um sistema básico de entrada/saída (BIOS), contendo as rotinas básicas que ajudam a transferir informações entre os elementos dentro do computador 400, tal como durante a inicialização, tipicamente é armazenado na ROM. A RAM tipicamente contém dados e/ou módulos de programa que são imediatamente acessíveis e/ou estão sendo atualmente operados pela unidade de processamento 401. A título de exemplo e não de limitação, o armazenamento de dados 402 mantém um sistema operacional, programas aplicativos e outros módulos de programa e dados de programa. Um sistema operacional executando na unidade de processamento 402 pode suportar funções tais como exceção de sistema operacional 203, interceptador de falha de fluxo 204, desmontador 206, e/ou rastreador de página gravada/não gravada 207 (FIGURA 2).
[00038] O armazenamento de dados 402 também pode incluir outros meios de armazenamento do computador removíveis/não removíveis, voláteis/não voláteis. Somente a título de exemplo, o armazenamento de dados 402 pode ser uma unidade de disco rígido que lê ou grava a partir/junto ao meio magnético não removível, não volátil, uma unidade de disco magnético que lê/grava a partir/junto a um disco magnético removível, não volátil, e uma unidade de disco ótico que lê e/ou grava a partir/ junto a um disco ótico removível, não volátil, tal como um CD ROM ou outro meio ótico. Outros meios de armazenamento do computador removíveis/não removíveis, voláteis/não voláteis incluem, mas não estão limitados a cassetes de fita magnética, cartões de memória flash, discos versáteis digitais, fita de vídeo digital, RAM de estado sólido, ROM de estado sólido, dentre outros. As unidades e seu meio de armazenamento do computador associado, descritos acima e ilustrados na FIGURA 4, proporcionam armazenamento de instruções legíveis por computador, de estruturas de dados, de módulos de programa e de outros dados para o computador 400.
[00039] O usuário pode entrar com comandos e informação através de uma interface com o usuário 405 ou de outros dispositivos de entrada tais como um tablet, digitalizador eletrônico, um microfone, um teclado, e/ou dispositivo de apontamento, normalmente referido como mouse, trackball ou teclado sensível ao toque. Outros dispositivos de entrada podem incluir um joystick, controle de jogo, antena de satélite, scanner, dentre outros. Adicionalmente, entradas de voz, entradas de gesto utilizando mãos ou dedos, ou outra interface com o usuário natural (NUI) também podem ser utilizados com os dispositivos de entrada apropriados, tais como microfone, câmera, tablet, teclado sensível ao toque, luva, ou outro sensor. Estes e outros dispositivos de entrada frequentemente são conectados com a unidade de processamento 401 através de uma interface de entrada do usuário 405 que é acoplada com o barramento do sistema 403, mas podem ser conectados por outra interface ou estruturas de barramento, tal como porta paralela, porta de jogo ou um barramento serial universal (USB). Um monitor 406 ou outro tipo de dispositivo de vídeo também é conectado com o barramento do sistema 403 via uma interface, tal como uma interface de vídeo. O monitor 406 também pode ser integrado com um painel de tela sensível ao toque ou coisa parecida. Observe que o monitor e/ou o painel de tela sensível ao toque pode ser fisicamente acoplado com um invólucro no qual o dispositivo de computação 400 está incorporado, tal como em um computador pessoal do tipo tablet. Em adição, computadores tal como o dispositivo de computação 400 também podem incluir ouros dispositivos periféricos de saída tais como alto-falantes e impressora, os quais podem ser conectados através de uma interface de periférico de saída ou coisa parecida.
[00040] O computador 400 pode operar em um ambiente em rede ou em nuvem utilizando conexões lógicas 407 com um ou mais dispositivos remotos, tal como um computador remoto. O computador remoto pode ser um computador pessoal, um servidor, um roteador, um PC de rede, um dispositivo par ou outro nó comum de rede, e tipicamente inclui vários ou todos os elementos descritos acima em relação ao computador 400. As conexões lógicas representadas na FIGURA 4 incluem uma ou mais redes de área local (LAN) e uma ou mais redes de longa distância (WAN), mas também podem incluir outras redes. Tais ambiente em rede são normais em escritórios, redes de computadores de grandes empresas, intranets e na Internet.
[00041] Quando utilizado em um ambiente de computação em rede ou em nuvem, o computador 400 pode ser conectado com uma rede pública ou privada através de uma interface ou adaptador de rede 407. A interface de rede 407 pode proporcionar uma conexão com um dispositivo remoto, tal como um servidor de rede 205 (FIGURA 2). Em algumas concretizações, um modem ou outro dispositivo para estabelecer comunicações através da rede. O modem, o qual pode ser interno ou externo, pode ser conectado com o barramento do sistema 403 bia a interface de rede 407 ou outro mecanismo apropriado. Um componente de interoperabilidade sem uso de fios tal como compreendendo uma interface e antena, pode ser acoplado através de um dispositivo adequado tal como um ponto de acesso ou computador par, com uma rede. Em um ambiente em rede, os módulos de programa representados em relação ao computador 400, ou partes dos mesmos, podem ser armazenados no dispositivo de armazenamento em memória remoto. Pode ser apreciado que as conexões de rede apresentadas são ilustrativas e outros dispositivos para estabelecer uma ligação de comunicação entre os computadores pode ser utilizado.
[00042] Apesar de o assunto ter sido descrito em linguagem específica para aspectos estruturais e/ou atos metodológicos, é para ser entendido que o assunto definido nas concretizações anexas não está necessariamente limitado aos aspectos específicos ou atos descritos acima. Ao invés disso, os aspectos e atos específicos descritos acima são revelados como formas ilustrativas para implementar as concretizações.

Claims (13)

1. Método implementado por computador caracterizado pelo fato de que compreende as etapas de: receber (301) instruções compreendendo uma pluralidade de códigos operacionais, cada código operacional compreendendo um ou mais bytes de dados; desmontar (302) as instruções em códigos operacionais separados; criar (303) uma tabela identificando os limites entre cada código operacional; gravar códigos operacionais de ponto de parada para depuração em todas as localizações de memória para inicializar a memória; anexar (305) códigos operacionais de ponto de parada para depuração a um código operacional para criar um bloco padrão completo de memória (101); e gravar (304) cada código operacional em memória (101) de uma maneira código operacional por código operacional ao atomicamente gravar blocos padrão de comprimento de trinta e dois bits ou sessenta e quatro bits (102-104) de memória (101).
2. Método implementado por computador, de acordo com a reivindicação 1, caracterizado pelo fato de que ainda compreende: identificar quando um código operacional longo irá sobrepor dois ou mais blocos padrão de memória; gravar uma segunda porção do código operacional longo em um segundo bloco de memória; e gravar uma primeira porção do código operacional longo em um primeiro bloco de memória.
3. Método implementado por computador, de acordo com a reivindicação 2, caracterizado pelo fato de que ainda compreende: anexar (305) códigos operacionais de ponto de parada para depuração à segunda porção do código operacional longo para criar um bloco padrão completo de memória.
4. Método implementado por computador, de acordo com a reivindicação 3, caracterizado pelo fato de que ainda compreende: gravar um código operacional anterior e a primeira porção do código operacional longo no primeiro bloco de memória.
5. Sistema de computador caracterizado pelo fato de que compreende: um processador; memória de sistema (402); um ou mais meios de armazenamento legíveis por computador tendo um método para transmissão contínua de código executável, o processador operando para: receber (301) instruções compreendendo uma pluralidade de códigos operacionais, cada código operacional compreendendo um ou mais bytes de dados; desmontar (302) as instruções em códigos operacionais separados; criar (303) uma tabela identificando os limites entre cada código operacional; gravar códigos operacionais de ponto de parada para depuração em todas as localizações de memória para inicializar a memória; gravar (304) cada código operacional em memória (101) de uma maneira código operacional por código operacional ao atomicamente gravar blocos padrão de comprimento de trinta e dois bits ou sessenta e quatro bits (102104) de memória (101); e anexar (305) códigos operacionais de ponto de parada para depuração a um código operacional para criar um bloco padrão completo de memória (101).
6. Sistema de computador, de acordo com a reivindicação 5, caracterizado pelo fato de que o processador ainda operar para: identificar quando um código operacional longo irá sobrepor dois ou mais blocos padrão de memória; gravar uma segunda porção do código operacional longo em um segundo bloco de memória; e gravar uma primeira porção do código operacional longo em um primeiro bloco de memória.
7. Sistema de computador, de acordo com a reivindicação 6, caracterizado pelo fato de que o processador ainda opera para: anexar (305) códigos operacionais de ponto de parada para depuração à segunda porção do código operacional longo para criar um bloco padrão completo de memória.
8. Sistema de computador, de acordo com a reivindicação 6, caracterizado pelo fato de que o processador ainda operar para: gravar um código operacional anterior e a primeira porção do código operacional longo no primeiro bloco de memória.
9. Sistema de computador, de acordo com a reivindicação 5, caracterizado pelo fato de que ainda compreende: um interceptor de falha de fluxo operando para identificar quando uma página de dados solicitada não está disponível; e recuperar a página de dados a partir de uma fonte remota.
10. Sistema de computador, de acordo com a reivindicação 5, caracterizado pelo fato de que ainda compreende: um desmontador operado para desmontar as instruções em códigos operacionais separados.
11. Sistema de computador, de acordo com a reivindicação 5, caracterizado pelo fato de que ainda compreende: um rastreador de página mantendo a tabela que identifica os limites entre cada código operacional.
12. Meio de armazenamento legível por computador que exclui sinais propagados, o Meio de armazenamento legível por computador armazenando um método para transmissão contínua de dados de código executável, caracterizado pelo fato de que o método compreende: receber uma falha indicando que uma página de dados não está disponível; solicitar instruções incluindo a página de dados; receber (301) as instruções a partir de uma fonte remota, as instruções compreendendo uma pluralidade de códigos operacionais, cada código operacional compreendendo um ou mais bytes de dados; desmontar (302) as instruções em códigos operacionais separados; criar (303) uma tabela identificando os limites entre cada código operacional; gravar códigos operacionais de ponto de parada para depuração em todas as localizações de memória para inicializar a memória; identificar quando um código operacional longo irá sobrepor dois ou mais blocos de memória padrão; gravar (304) cada código operacional em memória (101) de uma maneira código operacional por código operacional ao atomicamente gravar blocos padrão de comprimento de trinta e dois bits ou sessenta e quatro bits (102-104) de memória (101); gravar uma segunda porção do código operacional longo em um segundo bloco de memória; e gravar uma primeira porção do código operacional longo em um primeiro bloco de memória.
13. Meio de armazenamento legível por computador, de acordo com a reivindicação 12, caracterizado pelo fato de que o método ainda compreende: anexar (305) códigos operacionais de ponto de parada para depuração a um código operacional para criar um bloco padrão completo de memória.
BR112015001476-3A 2012-07-27 2013-07-26 Método implementado por computador, sistema de computador e meio de armazenamento para fluxo contínuo livre de bloqueio para dados de código executável BR112015001476B1 (pt)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/560,216 2012-07-27
US13/560,216 US9436474B2 (en) 2012-07-27 2012-07-27 Lock free streaming of executable code data
US2014018812 2014-01-30

Publications (2)

Publication Number Publication Date
BR112015001476A2 BR112015001476A2 (pt) 2017-07-04
BR112015001476B1 true BR112015001476B1 (pt) 2022-06-28

Family

ID=48985821

Family Applications (1)

Application Number Title Priority Date Filing Date
BR112015001476-3A BR112015001476B1 (pt) 2012-07-27 2013-07-26 Método implementado por computador, sistema de computador e meio de armazenamento para fluxo contínuo livre de bloqueio para dados de código executável

Country Status (11)

Country Link
US (2) US9436474B2 (pt)
EP (1) EP2877918B1 (pt)
JP (1) JP6328632B2 (pt)
KR (1) KR102042304B1 (pt)
CN (1) CN104508626B (pt)
AU (2) AU2013295686B2 (pt)
BR (1) BR112015001476B1 (pt)
CA (1) CA2878558C (pt)
MX (1) MX347111B (pt)
RU (1) RU2639235C2 (pt)
WO (1) WO2014018812A1 (pt)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9747189B2 (en) 2015-11-12 2017-08-29 International Business Machines Corporation Breakpoint for predicted tuple processing time in a streaming environment
CN107797821B (zh) * 2016-09-05 2021-10-08 上海宝存信息科技有限公司 重试读取方法以及使用该方法的装置

Family Cites Families (45)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5768575A (en) * 1989-02-24 1998-06-16 Advanced Micro Devices, Inc. Semi-Autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for sepculative and out-of-order execution of complex instructions
JPH0395629A (ja) 1989-09-08 1991-04-22 Fujitsu Ltd データ処理装置
JPH03216734A (ja) * 1990-01-22 1991-09-24 Hitachi Micro Comput Eng Ltd データ処理方法及び中央処理装置
JPH05312838A (ja) * 1992-05-12 1993-11-26 Iwatsu Electric Co Ltd ロジック・アナライザ
GB9412434D0 (en) * 1994-06-21 1994-08-10 Inmos Ltd Computer instruction compression
US6009508A (en) * 1994-06-21 1999-12-28 Sgs-Thomson Microelectronics Limited System and method for addressing plurality of data values with a single address in a multi-value store on FIFO basis
CN101211255B (zh) * 1994-12-02 2012-07-04 英特尔公司 对复合操作数进行压缩操作的处理器、设备和计算系统
US6212574B1 (en) 1997-04-04 2001-04-03 Microsoft Corporation User mode proxy of kernel mode operations in a computer operating system
US5946484A (en) * 1997-05-08 1999-08-31 The Source Recovery Company, Llc Method of recovering source code from object code
US6061772A (en) * 1997-06-30 2000-05-09 Sun Microsystems, Inc. Split write data processing mechanism for memory controllers utilizing inactive periods during write data processing for other transactions
US6282698B1 (en) * 1998-02-09 2001-08-28 Lucent Technologies Inc. Detecting similarities in Java sources from bytecodes
US6119115A (en) 1998-03-12 2000-09-12 Microsoft Corporation Method and computer program product for reducing lock contention in a multiple instruction execution stream processing environment
EP0955578A1 (en) * 1998-05-04 1999-11-10 International Business Machines Corporation Method and device for carrying out a function assigned to an instruction code
US6077312A (en) * 1998-05-06 2000-06-20 International Business Machines Corporation Apparatus, program product and method of debugging utilizing a context sensitive breakpoint
US6253309B1 (en) 1998-09-21 2001-06-26 Advanced Micro Devices, Inc. Forcing regularity into a CISC instruction set by padding instructions
US6397273B2 (en) 1998-12-18 2002-05-28 Emc Corporation System having an enhanced parity mechanism in a data assembler/disassembler for use in a pipeline of a host-storage system interface to global memory
US6408382B1 (en) * 1999-10-21 2002-06-18 Bops, Inc. Methods and apparatus for abbreviated instruction sets adaptable to configurable processor architecture
US20030023960A1 (en) * 2001-07-25 2003-01-30 Shoab Khan Microprocessor instruction format using combination opcodes and destination prefixes
US7444500B1 (en) 2000-08-14 2008-10-28 General Software, Inc. Method for executing a 32-bit flat address program during a system management mode interrupt
US6708326B1 (en) * 2000-11-10 2004-03-16 International Business Machines Corporation Method, system and program product comprising breakpoint handling mechanism for debugging and/or monitoring a computer instruction sequence
US20040059641A1 (en) * 2002-06-25 2004-03-25 Lucas Brown System and method for creating user selected customized digital data compilations
US7917734B2 (en) 2003-06-30 2011-03-29 Intel Corporation Determining length of instruction with multiple byte escape code based on information from other than opcode byte
US7581082B2 (en) 2005-05-13 2009-08-25 Texas Instruments Incorporated Software source transfer selects instruction word sizes
US7506206B2 (en) * 2005-06-07 2009-03-17 Atmel Corporation Mechanism for providing program breakpoints in a microcontroller with flash program memory
US20070006189A1 (en) * 2005-06-30 2007-01-04 Intel Corporation Apparatus, system, and method of detecting modification in a self modifying code
US7761864B2 (en) * 2005-08-09 2010-07-20 Intermec Ip Corp. Method, apparatus and article to load new instructions on processor based devices, for example, automatic data collection devices
US20070079177A1 (en) * 2005-09-30 2007-04-05 Charles Spirakis Process monitoring and diagnosis apparatus, systems, and methods
US7703088B2 (en) * 2005-09-30 2010-04-20 Intel Corporation Compressing “warm” code in a dynamic binary translation environment
US20070168736A1 (en) * 2005-12-19 2007-07-19 Ottavi Robert P Breakpoint groups
US8584109B2 (en) * 2006-10-27 2013-11-12 Microsoft Corporation Virtualization for diversified tamper resistance
US8037459B2 (en) * 2007-07-31 2011-10-11 International Business Machines Corporation Recovery from nested exceptions in an instrumentation routine
US8185783B2 (en) 2007-11-22 2012-05-22 Microsoft Corporation Split user-mode/kernel-mode device driver architecture
CN102077195A (zh) * 2008-05-08 2011-05-25 Mips技术公司 具有紧凑指令集架构的微处理器
US8423961B2 (en) 2008-06-06 2013-04-16 Microsoft Corporation Simulating operations through out-of-process execution
US8103912B2 (en) * 2008-09-07 2012-01-24 EADS North America, Inc. Sequencer and test system including the sequencer
KR101581001B1 (ko) * 2009-03-30 2015-12-30 삼성전자주식회사 프로그램의 동적 분석 방법 및 그 장치
US9274796B2 (en) * 2009-05-11 2016-03-01 Arm Finance Overseas Limited Variable register and immediate field encoding in an instruction set architecture
CN101853148B (zh) 2009-05-19 2014-04-23 威盛电子股份有限公司 适用于微处理器的装置及方法
US20120079459A1 (en) * 2010-09-29 2012-03-29 International Business Machines Corporation Tracing multiple threads via breakpoints
US9176738B2 (en) * 2011-01-12 2015-11-03 Advanced Micro Devices, Inc. Method and apparatus for fast decoding and enhancing execution speed of an instruction
US9053233B2 (en) * 2011-08-15 2015-06-09 Freescale Semiconductor, Inc. Method and device for controlling debug event resources
GB2501299A (en) * 2012-04-19 2013-10-23 Ibm Analysing computer program instructions to determine if an instruction can be replaced with a trap or break point.
US8990627B2 (en) * 2012-05-23 2015-03-24 Red Hat, Inc. Leveraging page fault and page reclaim capabilities in debugging
US9342284B2 (en) * 2013-09-27 2016-05-17 Intel Corporation Optimization of instructions to reduce memory access violations
US9619346B2 (en) * 2013-10-31 2017-04-11 Assured Information Security, Inc. Virtual machine introspection facilities

Also Published As

Publication number Publication date
EP2877918B1 (en) 2022-02-16
CA2878558C (en) 2020-11-03
WO2014018812A1 (en) 2014-01-30
CN104508626B (zh) 2017-06-13
AU2018205196A1 (en) 2018-08-02
US20160371083A1 (en) 2016-12-22
KR102042304B1 (ko) 2019-11-07
AU2013295686A1 (en) 2015-01-29
JP2015524591A (ja) 2015-08-24
CA2878558A1 (en) 2014-01-30
AU2018205196B2 (en) 2019-07-25
RU2639235C2 (ru) 2017-12-20
JP6328632B2 (ja) 2018-05-23
MX2015001127A (es) 2015-04-08
EP2877918A1 (en) 2015-06-03
AU2013295686B2 (en) 2018-04-19
RU2015102341A (ru) 2016-08-10
US9436474B2 (en) 2016-09-06
US20140032883A1 (en) 2014-01-30
KR20150040277A (ko) 2015-04-14
US9841976B2 (en) 2017-12-12
BR112015001476A2 (pt) 2017-07-04
MX347111B (es) 2017-04-12
CN104508626A (zh) 2015-04-08

Similar Documents

Publication Publication Date Title
JP2021523444A (ja) クロスレベル追跡マッピングによる実行制御
US8813038B2 (en) Data race detection
US8281318B2 (en) Systems and methods for inter process communication based on queues
BR112015019099B1 (pt) Método implementado por computador para gerar uma pilha de chamadas assíncronas e sistema de computador
BR112014031353B1 (pt) Facilidade de assistência de processador
US10180799B2 (en) Efficient retrieval of memory values during trace replay
Hayden et al. Kitsune: Efficient, general-purpose dynamic software updating for C
CN110168508B (zh) 监测断点出现的存储器位置的方法、计算机系统和介质
US11366740B2 (en) Debugging shared memory errors
KR20210021464A (ko) 예약된 태그 필드 비트를 사용하는 캐시 기반 트레이스 리플레이 중단점
US10853224B2 (en) Indexing and searching a time-travel trace for arbitrary length/arbitrary alignment values
US20230124327A1 (en) Cross-thread memory indexing in time-travel debugging traces
Jiang et al. DRDDR: a lightweight method to detect data races in Linux kernel
BR112015001476B1 (pt) Método implementado por computador, sistema de computador e meio de armazenamento para fluxo contínuo livre de bloqueio para dados de código executável
Hirt et al. Oracle JRockit: The Definitive Guide
US11068378B2 (en) Memory value exposure in time-travel debugging traces
Altekar et al. Dcr: Replay debugging for the datacenter
US20200142807A1 (en) Debugger with hardware transactional memory
Kwon et al. Lightweight migration for web applications with framework separation
Li FACULTY OF SCIENCE DEPARTMENT OF COMPUING

Legal Events

Date Code Title Description
B25A Requested transfer of rights approved

Owner name: MICROSOFT TECHNOLOGY LICENSING, LLC (US)

B06F Objections, documents and/or translations needed after an examination request according [chapter 6.6 patent gazette]
B06U Preliminary requirement: requests with searches performed by other patent offices: procedure suspended [chapter 6.21 patent gazette]
B06A Patent application procedure suspended [chapter 6.1 patent gazette]
B09A Decision: intention to grant [chapter 9.1 patent gazette]
B16A Patent or certificate of addition of invention granted [chapter 16.1 patent gazette]

Free format text: PRAZO DE VALIDADE: 20 (VINTE) ANOS CONTADOS A PARTIR DE 26/07/2013, OBSERVADAS AS CONDICOES LEGAIS