PT100205A - Metodo e sistema para traduzir um primeiro codigo de programa para um segundo codigo de programa executaveis em computadores - Google Patents
Metodo e sistema para traduzir um primeiro codigo de programa para um segundo codigo de programa executaveis em computadores Download PDFInfo
- Publication number
- PT100205A PT100205A PT100205A PT10020592A PT100205A PT 100205 A PT100205 A PT 100205A PT 100205 A PT100205 A PT 100205A PT 10020592 A PT10020592 A PT 10020592A PT 100205 A PT100205 A PT 100205A
- Authority
- PT
- Portugal
- Prior art keywords
- code
- instruction
- instructions
- subsequence
- execution
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims abstract description 42
- PWPJGUXAGUPAHP-UHFFFAOYSA-N lufenuron Chemical compound C1=C(Cl)C(OC(F)(F)C(C(F)(F)F)F)=CC(Cl)=C1NC(=O)NC(=O)C1=C(F)C=CC=C1F PWPJGUXAGUPAHP-UHFFFAOYSA-N 0.000 title 2
- 230000002860 competitive effect Effects 0.000 title 1
- 230000002829 reductive effect Effects 0.000 claims abstract description 18
- 238000012545 processing Methods 0.000 claims description 54
- 230000036961 partial effect Effects 0.000 claims description 31
- 238000012360 testing method Methods 0.000 claims description 25
- 238000003860 storage Methods 0.000 claims description 24
- 238000011068 loading method Methods 0.000 claims description 11
- 230000008569 process Effects 0.000 claims description 9
- 238000013515 script Methods 0.000 claims description 5
- 230000008859 change Effects 0.000 claims description 3
- 230000000977 initiatory effect Effects 0.000 claims 5
- 238000000889 atomisation Methods 0.000 claims 1
- 230000014616 translation Effects 0.000 description 42
- 238000013519 translation Methods 0.000 description 36
- 239000008187 granular material Substances 0.000 description 15
- 230000004048 modification Effects 0.000 description 9
- 230000007246 mechanism Effects 0.000 description 8
- 238000012986 modification Methods 0.000 description 8
- 238000004321 preservation Methods 0.000 description 7
- 230000000875 corresponding effect Effects 0.000 description 5
- 238000010586 diagram Methods 0.000 description 4
- 230000008901 benefit Effects 0.000 description 3
- 230000005012 migration Effects 0.000 description 3
- 238000013508 migration Methods 0.000 description 3
- 230000000903 blocking effect Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- 230000006872 improvement Effects 0.000 description 2
- 230000002427 irreversible effect Effects 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 206010000210 abortion Diseases 0.000 description 1
- 231100000176 abortion Toxicity 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000015556 catabolic process Effects 0.000 description 1
- 238000006243 chemical reaction Methods 0.000 description 1
- 238000004590 computer program Methods 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 125000004122 cyclic group Chemical group 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000003111 delayed effect Effects 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000005469 granulation Methods 0.000 description 1
- 230000003179 granulation Effects 0.000 description 1
- 230000002452 interceptive effect Effects 0.000 description 1
- 230000014759 maintenance of location Effects 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 230000009467 reduction Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 238000012163 sequencing technique Methods 0.000 description 1
- 239000000725 suspension Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/52—Binary to binary
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/3017—Runtime instruction translation, e.g. macros
- G06F9/30174—Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3824—Operand accessing
- G06F9/3834—Maintaining memory consistency
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45504—Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
- Noodles (AREA)
- Debugging And Monitoring (AREA)
- Diaphragms For Electromechanical Transducers (AREA)
- Investigating, Analyzing Materials By Fluorescence Or Luminescence (AREA)
- Luminescent Compositions (AREA)
- Devices For Executing Special Programs (AREA)
- Exchange Systems With Centralized Control (AREA)
- Retry When Errors Occur (AREA)
Description
Ν
FUNDAMENTO DA INVENÇÃO A presente invenção diz respeito a sistemas e métodos para adaptar códigos de programas para serem executados em diferentes sistemas de computador e mais em particular a sistemas e métodos para traduzir códigos baseados num conjunto de instruções, para códigos baseados num conjunto de instruções relativamente reduzido enquanto mantêm a atomicidade de estado.
Nos primeiros anos da programação de computadores, as instruções para programas de computador eram gerados ao nível do microcódigo. Com o desenvolvimento e crescimento da engenharia de sistemas, combinaram-se mais tarefas em instruções singulares complexas executáveis por computadores tendo uma arquitectura de "hardware" concebida para a complexidade da instrução. 0 aumento da complexidade de instrução providenciou geralmente aumento de benefício preço/rendimento nos meios de desenvolvimento dos custos de "hardware" de computador e capacidade de produção.
Como resultado, os códigos de conjuntos de instruções complexas (CISC) tornaram-se largamente aceites.
Com o aumento da complexidade das instruções, contudo, tem-se tornado mais difícil conceber sistemas de hardware para velocidade mais alta de execução. Em vez disso, um conjunto reduzido de código de instrução (RISC), acoplado com arquitectura de computador correlacionada com o RISC, tem ganho aceitação como um mecanismo para levar a uma significante melhoria do preço/ren-dimento de sistema.
Um sistema RISC geralmente emprega instruções básicas mais simples para dirigir as desejadas operações. Uma única instrução RISC normalmente específica uma única operação com quanto muito um único acesso à memória.
Para além disso, um sistema RISC normalmente providencia um registo para cada instrução básica. As instruções num conjunto de instruções RISC estão ainda acima do nível do micro-cõdigo.
No sistema CISC típico, uma única instrução pode especificar uma sequência complexa de operações e pode fazer muitos acessos directos à memória. Assim, as operações executadas por uma instrução CISC podem exigir várias instruções RISC.
Um sistema RISC é geralmente concebido com "hardware" optimizado e "software" "tradeoffs" que providencia operação do sistema mais rápida, produtividade geral melhorada e, custos de sistema mais baixos relativamente aos custos do hardware disponível e capacidade de produção.
Um obstáculo para a conversão dos sistemas CISC para os sistemas RISC é a existência de grandes bibliotecas de "software" que foram desenvolvidas para sistemas CISC e que geralmente não estão disponíveis para sistemas RISC. Quando um utilizador de computador escolhe adquirir um novo sistema de computador, uma das principais considerações do utilizador é se a biblioteca de programas de aplicação pode ser convertida para uso no novo sistema de computador, ou qual será o custo de substituir a biblioteca.
Assim, para utilizadores de sistemas de computador que desejam atingir melhor preço/produtividade através dos sistemas de computador RISC, é de maior importância que um mecanismo económico e eficaz seja fornecido para adaptação ou migrar a biblioteca de programas de aplicação de utilizador, para execução no sistema de computador RISC.
Estão disponíveis várias escolhas para o utilizador para a migração de programas. Pode-se empregar a recompilação e a descodificação, mas estas técnicas são tipicamente usadas para migrar programas escritos numa linguagem de alto nível tal como o FORTRAN e as quais ou não têm dependências de máquina detalhadas ou lhes removeram quaisquer dependências de máquina existentes por modificações manuais de programação.
Mais além, na recompilação ou descodificação, o utilizador tipicamente, arca com toda a responsabilidade para a modificação de programa e garantias do comportamento dos programas.
Alternativamente, os procedimentos de interpretação podem ser usados mas a penalidade para esta aproximação é, geralmente, uma substancial redução da produtividade dos programas.
Mais em particular, os procedimentos de interpretação são programas de software que correm num computador e têm uma cadeia de instruções subjugadas (as quais podem muito bem ser instruções para um diferente tipo de computador) tais como dados, e para cada instrução subjugada para executar a operação indicada. -8-
Tais procedimentos tipicamente executam 10 a 100 instruções maquina no computador destinado a interpretar uma única instrução subjugada. Assim, os procedimentos de interpretação providenciam produtividade de programa substancialmente reduzida, comparado com a execução directa de código funcionalmente equivalente no único computador. A migração mais eficaz e eficiente, contudo, envolve a tradução de código. Na tradução de código, cada instrução de um programa existente é produzida uma ou mais instruções na linguagem da máquina de destino.
Concordantemente, a tradução dos programas CISC para programas RISC, ou mais geralmente, uma tradução de programa no qual o código traduzido tem um conjunto de instruções relativamente reduzido, requere "múltiplas" ou "muitas" instruções no código traduzido para cada instrução no código sendo traduzido. Contudo, ao fazer uma para muitas ou uma ClSC-para-RISC, traduções de código, é geralmente difícil conservar muitas das garantias de comportamento das instruções originalmente providenciadas com o CISC ou outro código relativamente complexo.
Uma garantia normal do CISC a qual apresenta alguma dificuldade de tradução é a exigência que mais nenhuma instrução CISC, ou porção daí tirada, possa ser executada entre o início e o fim de uma única instrução CISC. De acordo, ao traduzir o CISC para o RISC é essencial que este tipo de instrução como um todo ou como granularidade, seja preservada. A preservação de granu-laridade de instrução exige que a atomicidade de estado de ou de memória seja preservada. Assim, ou todos os acessos de memória podem parecer acontecer, ou nenhum pode parecer acontecer no código traduzido. -9-
Para preservar a granularidade de instrução no processo de tradução, terá de se preservar a segurança de que cada conjunto, ou "granulo" de instruções traduzidas, correspondendo a cada instrução mais complexa se executará para produzir o mesmo resultado que a correspondente instrução mais complexa teria produzido.
Isto tem de ser verdade mesmo podendo ocorrer acontecimentos assíncronos durante a execução de qualquer dos "grânulos" de instruções mais simples traduzias. A patente em referência cruzada, acima e concorrentemente preenchida (1870 - 0410) é dirigida a uma invenção que providencia a preservação da granularidade de instrução na tradução de código e na execução do código traduzido. Mais ainda, a (1870-0410), pedido de patente) geralmente atinge a tonicidade de estado e especificamente divulga um mecanismo e um procedimento para assegurar a atomicidade de estado no caso de instrução de escrita simples no CISC ou outro código a ser traduzido.
Uma instrução única de escrita inclui quando muito um estado de escrita que pode possivelmente encontrar uma excepção, mas pode incluir um número ilimitado de estados de escrita sem excepção. Não existem sobreposições entre os dois tipos de estados de escrita. 0 termo de "excepção" refere-se em que para referir a qualquer condição que evita a continuação da execução de uma instrução. Tipicamente as excepções incluem: a. excepções de memória tais como uma folha de página ou uma violação de acesso:' -10-
b. excepção aritmética tais como um "overflow" de ponto flutuante ou uma divisão por zero; e c. excepções de instrução tais como um código de operação ilegal ou uma instrução de "breack". A atomicidade de estado é equivalente à granularidade de instrução no caso da única instrução de escrita a que é traduzida e executada de acordo com a pedido de patente 1870-0410. Contudo, outros tipos de instruções que têm de ser traduzidas incluem sequências que apresentam problemas especiais ao atingir a preservação da atomicidade de estado e a granularidade de instrução tais instruções incluem aquelas que têm: a. Uma sequência de ler-modificar-escrever a qual é "interblo-queada" ou uma instrução de ler-modificar-escrever que exija uma escrita-parcial-de-memória-de palavra e que tem de ser executada num sistema de multiprocessador têm escrita interveniente por outro processador; e, b. escritas de estado múltiplo que podem ser possivelmente encontrar uma excepção e tudo pode parecer ou para acontecer ou para não acontecer.
Nestes casos especiais, mecanismos mais particulares e, procedimentos, são necessários para endereçar as circunstâncias especiais encontradas enquanto tentam atingir a atomicidade de estado e granularidade de instrução no código traduzido. No caso de instruções tendo múltiplos estados de escrita, levanta-se um problema de atomicidade de estado quando ocorre um acontecimento assíncrono durante a execução de uma sequência de instrução após, pelo menos uma, antes de todos os estados (memória ou registo) de escrita terem sido executadas. Assim, poderia ocorrer uma excepção numa das instruções de código, traduzidas e remanescentes a ser executada na sequência tal que, se a execução do granulo de instrução, ou for abortado ou for continuado, um estado de erro pode ser criado desde uma mudança de estado irreversível que pode ocorrer com a escrita de um estado jã, executada.
No caso de executar código traduzido num sistema tendo múltiplos processadores com uma memória comum, levanta-se talvez um problema de atomicidade de estado desde um primeiro processador no qual o código traduzido está a ser executado poder executar parcialmente uma sequência de ler-modificar-escrever num granulo de instrução, e subsequentemente, mas antes da sequência de ler-modificar-escrever estar completa, outro processador pode escrever na localização de estado endereçada pela sequência-ler--modif icar-escrever.
Novamente, se a execução do granulo de instrução e ou abortado ou continuando após o acesso de estado conflituoso pelo outro processador, um erro de estado pode ser criado dado que uma mudança irreversível de estado poder já ter ocorrido.
Concordantemente, a presente invenção está dirigida para a estrutura e procedimentos para produzir e executar códigos traduzidos tendo um conjunto de instruções relativamente reduzido dos códigos existentes tendo conjuntos de instruções mais complexos enquanto preserva a granularidade de instruções e a atomicidade de estado onde os códigos incluem instruções envolvendo circunstâncias tais como escritas múltiplas ou parciais, instruções de interbloqueio, e um ambiente de execução de multiprocessador. A presente invenção assim, permite melhoramentos do preço/produtividade dos sistemas de computador a serem realizados -12-
enquanto preservam investimentos em código de aplicação mesmo nos casos em que tais circunstâncias especiais estão presentes.
RESUMO DA INVENÇÃO A presente invenção é caracterizada por providenciar um sistema ou método para traduzir um primeiro código de programa para um segundo código de programa e para executar um segundo código de programa enquanto preserva a atomicidade de estado de instrução do primeiro código. O primeiro código de programa é executável num computador tendo uma primeira arquitectura adaptada a um primeiro conjunto de instruções e o segundo código de programa é executável num computador tendo um estado de memória e de registo e uma segunda arquitectura adaptada a um segundo conjunto de instruções o qual é reduzido relativamente ao primeiro conjunto de instruções.
Um primeiro computador traduz as primeiras instruções de código para as correspondentes segundas instruções de código, de acordo com um padrão de código que define as instruções de primeiro código em termos das instruções de segundo código. As instruções de segundo código, para cada instrução de primeiro código estão organizadas numa sequência de instrução granular tendo por ordem pelo menos dois grupos, um primeiro grupo incluindo aquelas instruções de segundo código que fazem trabalho de instrução que actualização de estado e que podem ser abortadas após a execução sem arriscar um estado de erro e, um segundo grupo tendo todas as instruções de actualização de estado de memória e de registo, incluindo qualquer instrução de escrita especial requerida para implementar a primeira instrução de código sendo traduzida. -13-
As instruções de segundo código, para cada instrução de primeiro código estão organizadas numa sequência de instrução granular tendo por ordem pelo menos dois grupos, um primeiro grupo incluindo as instruções de segundo código que fazem trabalho de instrução para além de actualização de estado e que podem ser abortadas após a execução sem arriscar um estado de erro e, um segundo grupo tendo todas as instruções de actualização de estado de memória e de registo incluindo qualquer instrução especial de escrita requerida para implementar as instruções de primeiro código sendo traduzidas.
Numa primeira instrução especial de escrita é estruturada para incluir uma primeira subsequência para processamento de uma escrita simples a uma primeira localização de memória de acordo com um requerimento que a primeira subsequência tem de ser executada sem qualquer interrupção e sem a intervenção de quaisquer escritas conflituosas para a primeira localização de memória por qualquer outro processador que possa ser acoplado ao estado de memória. Mais ainda, uma segunda instrução especial de escrita está estruturada para incluir uns segunda subsequência para processar escritas múltiplas que têm todas de ser executadas sem qualquer interrupção.
Um segundo sistema de computador é adaptado com a segunda arquitectura para executar o segundo código de programa. Durante a execução do segundo código, são providenciados meios para determinar a ocorrência de cada acontecimento assíncrono durante a execução do segundo código e, a ocorrência de cada escrita conflituosa para a primeira localização de memória.
Qualquer sequência granular de instrução de segundo código é abortada para uma nova tentativa a fim de preservar a atomicidade de estado da primeira instrução de código e a granularidade da primeira instrução de código, se ocorrer um acontecimento assíncrono de interrupção durante a execução da sequência antes de terem sido executadas todas as instruções de primeiro grupo, antes da execução de qualquer instrução de segundo grupo a qual está sujeita a uma possível excepção permitindo assim o processamento subsequente de um acontecimento assíncrono. A primeira subsequência especial de instrução em qualquer sequência de instrução granular de segundo código que inclua a primeira subsequência é abortada para uma nova tentativa até à execução com sucesso estar completa se for feita uma escrita conflituosa pelo outro processador antes de se completar a execução da primeira subsequência. Qualquer sequência granular de instrução de segundo código que inclua a primeira subsequência é abortada para uma nova tentativa se ocorrer um acontecimento assíncrono de interrupção durante a tentativa de execução da primeira subsequência. 0 processamento de uma interrupção de acontecimento assíncrono é retardada e qualquer sequência granular de instrução de segundo código sendo executada é completada A) se a segunda subsequência é incluída na sequência granular de instrução e se ocorrer o acontecimento assíncrono de interrupção quando muito após uma primeira escrita durante a execução da subsequência da segunda instrução, ou B) se o acontecimento assíncrono de interrupção ocorrer após a execução de todas as instruções de actuali-zação de estado no segundo grupo que estejam sujeitas a uma possível excepção.
BREVE DESCRIÇÃO DOS DESENHOS
Os desenhos que acompanham os, quais estão incorporados e que constituem uma parte desta descrição, ilustram uma execução da invenção e, conjuntamente com a descrição, providenciam uma explicação dos objectos, vantagens e princípios da invenção. Nos desenhos: A figura 1 mostra um diagrama funcional geral, de blocos indicando a maneira geral na qual os programas de aplicação são a) criados para execução por um primeiro sistema de computador (tendo um primeiro conjunto de instruções e designado como X) e b) traduzido com a atomicidade de estado e a granula-ridade de instrução das instruções X de acordo com a presente invenção para execução por um diferente sistema de computador (designado por Y) tendo um conjunto de instruções relativamente reduzido; A figura 2 mostra um diagrama funcional de bloco generalizado do programada de tradução preferido X-Y e um sistema de computador de tarefas gerais no qual o programa, X-Y, de tradução é executado para gerar com a atomicidade de estado das instruções X, um código de aplicação Y executável de um código de input, de aplicação X; A figura 3 mostra um fluxograma geral para o programa, X-Y, de tradução de acordo com a presente invenção; A figura 4 mostra um diagrama de bloco funcional do sistema de computador Y com o código traduzido ou código Y carregado em que conjuntamente com um programa de controlo de granularidade de instrução (IGC), uma rotina de código de arqui-tectura, de biblioteca, privilegiada (PQL), e uma sequência de -16-
carregamento bloqueio condicional armazenada para controlar a execução do código Y com conservação da granularidade de instrução e atomicidade de estado de acordo com a presente invenção;
As figuras 5A e 5B mostram fluxogramas representando passos funcionais executados pelo programa IGC; A figura 6 mostra um diagrama que simboliza uma tradução X-Y, de código de instrução envolvendo escritas múltiplas e o relacionamento de acontecimentos assíncronos para aí; A figura 7 mostra a rotina de código PAL da Figura 4 com detalhe que indica a maneira na qual esta é empregue de acordo com a presente invenção para preservar a atomicidade de estado e a granularidade de instrução no caso de múltiplas escritas na memória; e A figura 8 mostra um fluxograma representando a sequência de carregamento-bloqueio/armazenamento condicional da Figura 4 com detalhe que indica a maneira na qual é empregue de acordo com a presente invenção para preservar a atomicidade de estado e a granularidade de instrução em casos de escritas parciais e instruções de actualização interbloqueadas.
DESCRIÇÃO DA EXECUÇÃO PREFERIDA
Conforme dr mostra na figura 1, um programa de aplicação 19 escrito em código fonte, é um de um número de programas de aplicação retidas numa biblioteca de programa de utilizador para a execução num sistema de computador 12. A arquitectura de "Hardware" para o sistema de computador X, 12 é adaptado para operação com um conjunto de instruções -17-
X empregue em produzir uma forma executável do programa 10 ou outros programas de aplicações na biblioteca do utilizador.
Para adaptar o programa 10 para uso com um sistema Y de computador 20 é necessário, para a forma executável do programa 10, ser fornecido como um código Y executável 22 empregando um conjunto de instrução Y para o qual a arquitectura de "Hardware" do sistema Y de computador 20 está adaptada. O conjunto de instruções Y emprega geralmente menos instruções básicas do que emprega o conjunto de instruções Xe, a conservação de código X para código Y requere uma tradução de instruções X pode ser um conjunto de instruções CISC e o conjunto de instruções Y pode ser um conjunto de instruções RISC. Por exemplo, conforme foi indicado com propósito de ilustrar na Figura 1, o sistema X pode empregar a arquitectura VAX? e o sistema Y pode empregar a arquitectura VAX? RISC ambos sendo fornecidos pela Digital Equipment Corporation, cessionária do presente pedido.
Conforme se mostra na figura l, o programa de aplicação 10 pode migrar para o código executável 22 quer num caminho indirecto 24 ou um caminho directo 26. A migração directa obtem-se com a utilização do compilador 28 e um programa de lincagem 30.0. 0 código Y executável resultante é designado pela referencia numeral 22B.
Se um compilador Y28 e um programa de lincagem Y 30 nunca tiveram sido desenvolvidas ou não estão disponíveis, ou se por outro lado o utilizador elege não usar o caminho directo de migração 26 devido a desvantagens associadas, o caminho indirecto 24 é usado de acordo com a presente invenção para migrar o programa de aplicação X para o sistema X a 'fim'de alcançar tanto uma poupança de investimento em programação e um ganho de produtividade de sistema.
No caminho indirecto, o programa 10 ê convertido em código executável 14 para o sistema de computador, X, 12 por meio de um compilador X16, e um programa de lincagem 18. 0 resultado é código X executável 14 o qual pode correr no sistema X de computador 12.
Um tradutor X-Y 32 é providenciado na execução preferida para traduzir o código executável designado pelo numeral de referência 22A. A tradução de código é alcançada de forma a que o código Y executa para atingir com precisão os resultados do código X com granularidade de instrução e atomicidade de estado mesmo sendo o código Y baseado num conjunto de instruções reduzido.
TRADUÇAO DO CÓDIGO DE APLICAÇÃO X PARA CÓDIGO DE APLICAÇÃO X
Um sistema de tradução de código 40 (Figura 2) é empregue para implementar o tradutor 32 referenciado na Figura l. O sistema de tradução 40 inclui um computador convencional de uso geral tendo um processador 42, em sistema de memória 44 e vários dispositivos de "input/output" pelos quais o código X de aplicação 43 é entrado como imputo para tradução.
Os resultados da tradução são gerados de acordo com a presente invenção com código Y45 o qual é ordenado e estruturado de outra forma para definir garantias do código sendo traduzido. 19-
0 código Y45 é particularmente estruturado para facilitar uma conservação garantida da granularidade de instrução X e atomicidade de estado quando o código Y é de facto executado.
Como exemplo de garantias fortes CISC. A arquitectura VAX? inclui as seguintes garantias e padrões. 1. Uma simples instrução tem ou de ser executada até se completar ou parecer nunca ter iniciado — não é permitido executar parcialmente uma instrução, suspendê-la, fazer outras instruções e, eventualmente reiniciar a instrução suspensa a meio. 2. A memória é virtual, assim qualquer acesso a memória pode encontrar uma falha de página ou uma excepção de protecção de acesso, causando a não completação da instrução. 3. Uma instrução simples pode escrever múltiplas localizações de memória; ou todas escrevem ou nenhuma pode ocorrer. Se nenhuma ocorrer, a instrução será reiniciada no principio, não do ponto de onde a escrita falhou. 4. Os operandos de memória podem (parcialmente) se sobrepor tal que executando uma de muitas escritas e depois parando pode escrever por cima operandos fonte e tornar impossível o reinicio da instrução. 5. Uma simples instrução pode fazer uma sequência ler-modifi-car-escrever. 6. Os operandos de instrução são permitidos de ter um comprimento em "bytes" a um endereço arbitrários de "byte", enquanto as implementações em memória de "hardware1* podem ler ou escrever, tipicamente, um número integral de palavras -20-
de memória alinhadas, consistindo tipicamente de 4 ou 8 "bytes". Assim um simples operando pode medir 2 ou mais palavras de memória e aceder a um simples operando pode envolver aceder "Bytes" extra na primeira e última palavras de memória. 7. Num sistema multiprocessador, os acessos a "bytes" adjacentes por diferentes processadores tem sempre de parecer ser independente - isto é, escrever o "byte" 5 num processador não deve interferir com a escrita do "byte" 6 noutro processador, mesmo se ambas as escritas envolvem sequências de ler-modificar-escrever para a mesma palavra de memória. 8. Num sistema multiprocessador, os acessos via de instrução interbloqueadas têm sempre de parecer ser atómicas — isto é, uma ler-modificar-escrever interbloqueada ao "byte" 4 num processador nunca pode intervir com uma ler-modificar-escrever interbloqueada à mesma localização noutro processador. 0 sistema de memória 44 inclui, entre outras secções uma secção 46 de armazenamento de dados convencional e uma secção 48 na qual o sistema operativo do computador é armazenado. Um elemento básico empregue na tradução de código X-Y é um programa de tradução 30 armazenado noutra secção de memória. O código de input X 43 é armazenado como um código de lista X 62. Mais ainda, para controlar a sequenciação das instruções Y, os critérios ordenação de instruções Y 52 são armazenados; e os padrões de código de instrução X-Y 54 são armazenadas para permitir a tradução dos especificadores de operação de instrução e os especificadores de operandos.
Um fluxograma genérico é mostrado para o programa de tradução 50 na sua forma preferida na Figura 3. Sucessivas instruções X entram sequencialmente pelo bloco 60 da lista de código X armazenada 62 para processamento por um laço de programa 64.
No laço 64, o bloco funcional 66 gera instruções de operações Y e especificadores de operandos que correspondem à instrução X correntemente processada. Os especificadores são gerados de acordo com os padrões de codificação X-Y armazenados 54 (Figura 2).
De seguida, conforme indica pelo bloco funcional 68, o resultante código X é ordenado de acordo com critérios pré-determinados que resultam em preservação facilitada da granularidade das instruções X durante a execução subsequente do código Y.
Uma representação gráfica de uma tradução de instrução X-Y é mostrada na Figura 6.
Toda a instrução X geralmente providencia a que as tarefas elementares de obter inputs, modificar inputs, colocar os resultados em armazenamento temporário, e providenciando uma actualização de estado de memória e de registos nas suas localizações. Quando uma instrução X é traduzida para "muitas" instruções Y, os critérios de ordenação 52 (Figura 2) empregues para organizar as instruções Y preferivelmente são aquelas que agrupam e ordenam as instruções Y no código Y para as instruções X correntemente traduzidas (granulo) como se segue: 1. Um primeiro grupo Gl, de instruções, no código Y são aquelas que tomam inputs e colocam esses inputs em armazenamento temporário. -22- 2. Um segundo grupo G2, de instruções, no código Y, são aquelas que operam sobre os inputs e geram resultados modificados e armazenam esses resultados em armazenamento temporário. 3. Um terceiro grupo G3, de instruções, no código Y, são aqueles que actualizam o estado X (de memória ou de registo) e estão sujeitas a possíveis excepções (como definido aqui). 4. Um quarto e último grupo G4, de instruções no código Y, são aquelas que actualizam o estado X (de memória ou de registo) e estão livres de possíveis excepções. 0 estado de memória X, o qual é representado pelo carácter de referência 93 na Figura 4, e o estado de registo X, o qual é representado pelo carácter de referência 97 na Figura 4, refere-se a uma estrutura de memória e de registo na máquina Y dedicadas a serem localizações de armazenamento definidas em código X. Os estados de memória e de registo podem também ser estados de memória e estados de registo que são visíveis para a arquitectura X.
Informação adicional sobre as vantagens de organizar as instruções de código traduzidas na forma descrita, especialmente como foi aplicado ao caso de instruções simples de uma -escrita Y, é adiantado na referência cruzada da pedido de patente 1870-0410. A atomicidade de estado requere essencialmente que todos os estados de acesso da instrução X pareçam acontecer sem intervenção ou parecer não acontecer. Esta condição é necessária para providenciar a granular idade da instrução X. Num caso especial descrito abaixo, a atomicidade de estado X, é alcançada
I -23-
através de operações da presente invenção permitindo assim a granularidade das instruções X de ser alcançada.
Cora referência de novo à pagina 3, uma vez que o bloco funcional 68 ordena o código de instrução Y conforme descrito, o bloco de teste 70 determina se a corrente instrução Y é única marca fronteira ou "granulo de X" para a instrução X da qual derivou. Preferencialmente, os "bits" resultantes de sim e não de teste para processamentos sucessivos de instruções de Y são registadas num mapa de "bit" de instrução de fronteira, de X, pelo bloco funcional 72.
De seguida, são feitos uma série de testes para determinar qual de uma pluralidade de ramos de processamento de traduções é para ser seguido. Cada ramo corresponde a um caso de tradução geralmente predefinido (isto é, o tipo de instrução de X), com aqueles casos predefinidos que são classificados como de especiais exigindo processamento especial de tradução para preservação da atomicidade de memória.
Nesta execução, qualquer de três ramos 65, 67 e 69 pode ser seguido de acordo com o carácter estrutural da instrução X corrente a ser executada.
Geralmente, os ramos 65,67 e 69 processam cada instrução X para produzir código traduzido que geralmente preserva fortes garantias do e que particularmente preserva a atomicidade de estado. É notado mais além que para os propósitos da tradução se assume que uma simples instrução RISC de armazenamento de um alinhamento de palavra-longa (4 bytes) ou quadri-palavra (8 bytes) é atómico numa máquina RISC, no sentido que todos os -24-
"bytes" são modificados simultaneamente e não são afectados mais "bytes" pelo armazenamento. E mais ainda, assumido que todos os estados são guardados quer em memória quer em registos, que os acessos de memória podem criar excepções de memória virtual, e que os registos simples nunca criam excepções. Assume-se mais ainda, que uma sequência de instruções RISC pode ser interrompido por acontecimentos externos numa instrução RISC arbitrária.
Na Figura 3, o ramo de tradução 65 é seguido se o bloco de teste 120 indicar que a instrução corrente X é uma instrução simples de uma escrita. Neste caso, o processamento é levado a cabo conforme foi adiantado na referência cruzada da pedido de patente 1870-0410. Especificamente, como foi indicado pelo bloco funcional 122, não é exigido trabalho especial de tradução e o bloco 74 determina se há mais instruções X a serem traduzidas. Se assim é, repete-se a execução do laço de programa 64.
Referindo de novo o fluxograma de tradução, se a instrução corrente, X não for uma instrução simples de uma só escrita, é feita uma determinação no bloco de teste 124 se a instrução X for uma de uma pluralidade de casos especiais pré-determinados. Na presente execução, há dois casos especiais de uma só escrita predefinida, isto é, uma escrita de escrita parcial e uma instrução de actualização interbloqueada.
Se qualquer dos casos da escrita única especial não se aplicar, o bloco funcional 126 opera no ramo de tradução 67 para preservar a atomicidade de estado inserindo uma sequencia de atomicidade de estado no código traduzido. A sequência de atomicidade de estado assegura (em tempo de execução) quer 1) a completação da escrita parcial ou a actualização interbloqueada se não ocorrer uma interrupção durante a sequência de ler-modifi-car-escrever, ou 2) a suspensão da escrita parcial ou da -25-
actualização interbloqueada para uma nova tentativa se ocorrer uma interrupção durante a sequência de ler-modificar-escrever. A sequência de atomicidade de estado inserida na instrução de código, traduzida no bloco 126 é preferencialmente uma que é chamada de uma sequência de carregamento-bloqueio/armazenamento condicional. Um mecanismo de "hardware" adequado para implementar esta sequência no sistema de computador Y em tempo de execução é revelada na pedido de patente PD90-0259 da Digital Equipment Corporation.
Um fluxograma generalizado é mostrado na Figura 8 para ilustrar a operação lógica de execução executada pela sequência carregamento-bloqueio/armazenamento-condicional designada por o carácter de referencia 126A. Assim, uma vez que a sequência 126A ê chamada, o bloco funcional 128 carrega a palavra de memória para a qual a operação ler-modificar-escrever (RMW) é para ser executada. as tarefas de modificação são executadas pelos blocos 130, 132 e 134. No caso ilustrativo de adicionar um "byte" a uma localização definida de memória, o bloco 130 executa uma operação de troca para providenciar o alinhamento de "byte" na palavra de memória. De seguida, o bloco 132 mascara o "byte" a ser modificado com zeros. Finalmente, o bloco 134 põe o "byte" marcado em lugar na palavra de memória.
Se durante a execução da sequência de RMW, em tempo de execução outro processador escrever na mesma localização de memória, a sequência RMW é falhada para evitar interferências entre duas escritas de memória independentes. O bloco 136 executa um armazenamento condicional para detectar se outra escrita de memória, à mesma localização de memória, ocorreu -26-
durante a leitura e a porção de modificação da sequência RMW. Se não ocorreu qualquer outra escrita, o armazenamento condicional é implementado de forma a que a palavra de memória modificada é escrita com a atomicidade de estado ou de memória mantidas porque não havia conflitos com outra escrita. O bloco de teste 138 termina a sequência. 0 resto do processamento da corrente instrução Y em tempo de execução é então controlado de acordo com a programação de controlo de granularidade de instrução descrita mais detalhadamente aqui e depois.
Se no bloco 136, outro processador fez uma escrita para a localização de memória da palavra sendo modificada durante as por porções de leitura e de memória da sequência RMW, o armazenamento condicional é cancelado aí por forma a preservar a atomicidade de memória e a sequência RMW é tentada de novo mais tarde.
Referenciando de novo o processo de tradução na Figura 3, uma vez que a sequência 126A é colocada na instrução Y corrente o bloco 74 testa a existência de mais instruções X.
Se existem mais, o ramo 67 retorna o bloco de entrada de instrução 6 para repetir o ciclo de programa.
Em resumo, do caso de processar uma escrita-simples de tradução CISC-para-RISC pelo ramo 67, uma instrução CISC tem um alinhamento na escrita parcial (1- ou 2 "bytes") para o estado e o código traduzido é para ser executado num sistema multiprocessador, ou é requerido um acesso de interbloqueio. Neste caso, o acesso independente aos "bytes" e uma sequência de ler-modificar--escrever têm de ser apropriadamente processados se for de manter a atomicidade de estado. -27-
No caso da escrita-simples do ramo 67, a tradução é restringida tal que as instruções dos grupos 1 e 2 fazem todo o trabalho da instrução CISC excepto a actualização de estado de memória e/ou registo incluindo um carregamento-bloqueio, a palavra-longa/quadri-palavra simples contendo o operando a ser actualizado. As instruções de grupo 3 incluem uma instrução de armazenamento condicional para a mesma palavra-longa/quadri-palavra, e as instruções do grupo 4 incluem instruções de folhas-em--ramo no principio da sequência, seguidas de uma movimentação simples de registo.
Uma sequência traduzida que é interrompida antes de se completar o grupo 3 de instruções falha a instrução de armazenamento condicional quando reivindica e, consequentemente volta ao ramo de início da sequência. Em adição, se outro processador escreve para a palavra-longa/quadri-palavra especificada apôs uma instrução de carregamento-bloqueio mas antes da instrução de armazenamento - condicional, o armazenamento - condicional falha e consequentemente volta ao ramo do início da sequência.
Uma sequência traduzida que é interrompida após o grupo número 3 de instruções estar completo mas antes do grupo 4 de instruções estar completo, é forçada a completar o grupo 4 por um mecanismo interpretando à frente por movimentos simples de registos como mais detalhadamente é considerado na pedido de patente 1870-0410, na referência cruzada. 0 próximo efeito é que cada sequência traduzida ou se executa do principio ao fim sem qualquer outra sequência traduzida no meio e sem outra escrita à palavra-longa/quadri-palavra sujeita, ou a execução daquela sequência é suspensa antes da completação do grupo 3 e subsequentemente tentada de novo desde o principio. -28-
Com referencia novamente à Figura 3 se o bloco de teste 124 nota que a instrução X sendo traduzida não tem uma instrução especial, o ramo de tradução 69 é entrado e o bloco 128 regista o facto que a instrução X sendo traduzida é um outro caso especial; isto é, uma instrução de escrita múltipla de X. 0 bloco funcional 130 insere então no código de instrução traduzido uma rotina de chamada PAL 132 (Figura 7) para providenciar atomicidade de estado para instruções de escrita-múltiplas numa maneira mais detalhadamente descrita aqui e depois. A rotina de chamada PAL 132 é chamada para execução em tempo de execução, de uma Biblioteca de Arquitectura Privilegiada incluida no sistema de computador 20 e tipicamente disponível em muitas arquitecturas de computador para providenciar um mecanismo para executar rotinas chamadas daí com a maior prioridade do sistema operativo. Em geral, a rotina de chamada PAL, 132 executa todas as escritas de estado com atomicidade de estado se não ocorreram interrupções de acontecimento assíncrono prioritariamente à chamada para a rotina e, se não forem detectadas possíveis excepções na sequência remanescente no granulo de instrução de código Y corrente. De outro modo, a rotina de chamada PAL 132 falha prioritariamente à sua execução com a preservação da atomicidade de memória para uma nova tentativa subsequente. A rotina de chamada PAL 132 é preferivelmente implementada por estrutura de hardware revelada e descrita na pedido de patente referenciado PD86-0114.
Referimo-nos à Figura 6 para uma representação diagra-mática da relação de acontecimentos assíncronos para as instruções de código Y 'no caso de escritas múltiplas. Neste caso especial uma seta 75 indica um acontecimento asíincrono que -29-
ocorre após ser processado uma primeira escrita (pela rotina de chamada PAL 132) mas antes de todas as escritas múltiplas serem executadas pela rotina de chamada PAL 132. Geralmente a atomici-dade de estado pode ser preservada neste caso suspendendo a execução da interrupção até a rotina de chamada PAL e o resto do granulo da instrução serem executadas.
Mais em particular, a referencia ao fluxograma para a rotina de chamada PAL 132 mostrada na Figura 7, após a rotina de chamada PAL 132 ser invocada por um granulo de código Y sendo executado em tempo de execução para o código traduzido, é entrado como se indica pelo bloco funcional 152. De seguida, o bloco 154 testa se ocorreu uma interrupção durante a sequência entre RS e antes da invocação da rotina de chamado PAL 132. Se assim foi, o bloco 152 retorna uma mensagem de folha para a sequência de instrução de forma a preservar a atomicidade de estado, o controlo regressa ao procedimento de chamada pelo bloco de saída 137 para uma nova tentativa ao executar o granulo de código corrente.
Se não ocorreram interrupções durante esse momento crítico precedendo a rotina de chamada PAL, o bloco de teste 158 determina se todos os acessos a estados remanescentes podem ser completados sem excepções. Se não, o bloco 156 retorna novamente uma mensagem de falha para a sequência de instrução feita para preservar a atomicidade de estado e sai-se da rotina pelo bloco 157 para permitir uma nova tentativa do código de sequência Y.
Se os acessos de estado remanescentes poderem ser completados sem excepções, a execução da rotina de chamada PAL 132 é iniciada e o bloco 159 faz um carregamento-bloqueio e modificações da primeira escrita se for especificada uma escrita parcial. O bloco 160 então executa um armazenamento-condicional -30- para uma escrita parcial ou um armazenamento para uma escrita total. O bloco de teste 162 determina se o armazenamento condicional falhou no caso de uma escrita parcial. Se assim foi, a rotina retorna preferivelmente ao bloco 159 para uma nova tentativa de uma escrita parcial conforme é mostrado. Se se deseja, pode-se retornar uma mensagem de falha, em vez, neste ponto.
Se foi armazenada uma escrita total uma vez armazenada uma escrita parcial com sucesso, uma primeira escrita na sequência de escritas múltiplas ocorreu e todas as escritas na sequência de código Y têm de ser completadas para preservar a atomici-dade de estado como foi indicado pelo bloco funcional 164.
De seguida, a segunda escrita na sequência de código Y é processada por um bloco de pré-escrita 166, é implementado, um bloco 168 de armazenamento ou de armazenamento condicional, e um bloco de teste 170 é então executado para a falha do armazenamento-condicional. Esta operação é semelhante à forma descrita para o processamento da primeira escrita pelos blocos 158, 160 e 162. O mesmo subconjunto de processos (isto é, os contidos nos blocos 158, 160 e 162) é executado para cada subsequência de escrita na sequência de escritas múltiplas como indicado pelo bloco funcional 172 à medida que cada escrita precedente é completada com sucesso por uma escrita total ou parcial. Quando todas as escritas tiverem sido armazenadas, o bloco 174 indica a comple-tação com sucesso da rotina de chamada PAL 132 e ocorre uma saída pelo bloco 157. O granulo de instrução Y corrente pode então ser completado com a atomicidade de estado preservada.
Como no caso dos ramos de tradução 65 e 67 na Figura 3, 0 ramo 69 finalmente verifica se as instruções adicionais necessitam de ser traduzidas e, se assim é o bloco 60 dá entrada à próxima instrução X para tradução.
Em resumo do caso de processamento de uma tradução CISC para RISC pelo ramo 69, uma instrução CISC tem mais de uma escrita para atribuir estado (por causa de múltiplos destinos ou um simples destino não alinhado). Não caem acessos de estados interbloqueados neste caso, mas os acessos de "byte" independentes tem de ser apropriadamente lidados e todos ou nenhuma das escritas especiais tem de ser executada se for de preservar a atomicidade de estado. A tradução é restringida tal que os grupos de instrução 1 e 2 começam com uma instrução ler-e-estabelecer seguindo esses grupos estão instruções que fazem todo o trabalho da instrução CISC excepto actualização de estado de memória e ou de registo, incluindo posixvelmente carregamentos de cada palavra-longa/qua-dri-palavra que será actualizada. O grupo de instruções 3 inclui a rotina de chamada 132 que especifica todos os armazenamentos e o grupo de instruções 4 inclui um ramo-em-folha para o inicio da sequência, seguido de movimentos simples de registo.
Uma sequência traduzida que é interrompida antes do grupo 2 de instruções se completar limpa um "bit" de estado RISC posto pela ler-e-estabelecer causando a rotina de chamada PAL 132 de retornar uma mensagem de falha e assim ramifica de retorno para o inicio da sequência.
Com o uso de uma estrutura de hardware tal como a descrita na referenciada PD86-0114, a rotina de chamada PAL 132 entra uma sequência privilegiada de código RISC não interrompí-vel. A rotina de chamada PAL 132 não faz armazenamentos e retorna uma mensagem de falha onde ocorreu uma interrupção interveniente, isto é, se o "bit" de estado RISC posto pelo ler-e-estabelecer for limpo. De outra forma, é feita uma sondagem de todas as localizações de armazenamento possíveis pesquisando quaisquer excepções de memória virtual. Se forem encontradas algumas, a rotina de chamada 132 não se completa, as excepções são tomadas e, o "bit" de estado posto pela ler-e-estabelecer é limpo. Isto causa uma reexecução subsequente da rotina de chamada PAL 132 para retornar uma mensagem de falha, e assim ramificar de retorno para o inicio da sequência. De outra forma, a rotina de chamada PAL 132 executa todos os armazenamentos indicados. Enquanto o faz, usa a informação de memória virtual usada na sondagem prévia, mesmo se as tabelas se páginas na memória partilhada estão a ser simultaneamente actualizadas por outro processador. Assim, não são geradas excepções de memória virtual pelos armazenamentos.
Para cada armazenamento de palavra-de-memória-parcial, uma sequência de carregamento-bloqueio/modificar/armazenamento-condicionas é usada pelo código privilegiado. Não foram feitos armazenamentos prévios e o tal primeiro armazenamento-condicional (porque outro processador armazena na mesma palavra de memória durante a modificação) uma implementação pode ou retornar "falha" da rotina de chamada "PAL"-132, ou poderá repetir apenas a sequência de armazenamento-bloqueio)modificar/armazenamento-condicional. Após ter ocorrido um armazenamento simples, simplesmente, as sequências carregamento-bloqueio/modificar/armazenamento-condicional tem de ser repetidas dentro do código privilegiado até terem sucesso. Sobre a completação de todos os -33-
armazenamentos especificados, o código privilegiado retorna com sucesso e, o grupo 3 de instrução é completado.
Uma sequência traduzida a qual é interrompida após estar completo o grupo 3 de instruções mas antes de estar completo o grupo 4, é forçada a completar o grupo 4 por um mecanismo interpretando para a frente por movimentação simples de registos como foi adiantado mais em detalhe na referência do pedido 1870-410. O efeito liquido é que a sequência ou se executa de principio ao fim sem quaisquer outras sequências traduzidas no meio e sem escritas interferindo nas palavras de memória sujeitas, ou é suspensa antes da completação do grupo 3 de instruções e subsequentemente retomada do principio.
Quando todas as instruções X tiverem sido traduzidas pelos ramos 65, 67 e 69, a execução cíclica do laço de programa 64 termina e o código Y acumulado é disponibilisado para ••output" conforme indicado pelo bloco funcional 76.
EXECUÇÃO DO CÓDIGO RESULTANTE Y COM A GARANTIA DA ATOMICIDADE DE ESTADO X E A GRANULARIDADE DE INSTRUÇÃO
Como se mostra na Figura 4, um processador Y 80 correspondente a um sistema de computador Y 20 (Figura 1) é fornecido para executar o código resultante Y com a atomicidade de estado de X e a granularidade de instrução garantida para ser preservada. Os dispositivos convencionais de "input/output" de dados 82 e um relógio de intervalo 84 são acoplados ao processador 80 e, de tempos a tempos estes dispositivos geram interrupções constituindo acontecimentos assíncronos que exigem uma diversão temporária de operação do processador da execução do código Y. Sem a garantia de protecção providenciada pela presente invenção, a diversão do processador causada por estas ou outras interrupções é capaz de causar uma quebra da atomicidade de estado e da granularidade na execução de tipos especiais de instruções como foi previamente descrito.
Como se mostra na Figura 4, um bloco 86 representa o "input" do código Y gerado de um dispositivo de "input" para uma secção 88 de um sistema de memória 90 acoplado ao processador Y80 e, um bloco 87 representa os "outputs" de dados gerados para "dispositivos de "output" como resultado de execução de código Y. 0 sistema de memória 90 inclui também uma secção de dados convencional 92, um sistema operativo convencional numa secção 94, e inclui o estado de memória X 95 previamente notado. O processador Y 80 inclui o estado, previamente notado, de registo X, 97.
Um programa de controlo de granularidade de instrução (IGC) 96 no sistema 90 está estruturado para supervisionar a execução de código Y para a granularidade de instrução. A operação de programa IGC 96 na execução do código Y é mais representada pelo fluxograma mostrado nas Figuras 5A e 5B.
Geralmente as instruções X de escrita simples e de escrita múltipla traduzidas para os grânulos de instrução de código Y são controlados pelo programa IGC 96 durante a execução do código Y. No caso de instruções simples de escrita única, todo o controlo da atomicidade de estado e ,da granularidade de instrução está dirigido, conforme foi revelado tanto nesta especificação e na pedido de patente 1870-0410 referido previamente. No caso de instruções especiais de escrita simples e instruções de escrita múltiplas, a atomicidade de estado é controlada enquanto o código traduzido para estas instruções é executado conforme foi descrito aqui em conexão com as Figuras 3, \ 6 e 8 e de outra forma de acordo com o processamento através do programa IGC 96.
Mais especificamente, o programa IGC 96 (Figura 5A) começa conforme é indicado em 98 com a geração de um acontecimento assíncrono. Geralmente, um acontecimento assíncrono está definido como uma diversão da cadeia de instrução Y devido a interrupções que poderiam gerar potencialmente modificações de estado X que são visíveis para o código X traduzido.
Faz-se novamente referencia à Figura 6 para uma representação ilustrativa de relação de acontecimentos assíncronos a um granulo X de instruções Y que incluem escritas múltiplas.
Referindo-nos continuamente ao fluxograma na Figura 5A, uma espera temporária, é posicionada, no processamento do acontecimento assíncrono pelo bloco funcional 100, e o endereço de memória da instrução Y (designado de PC-AE) sendo processado na altura do acontecimento assíncrono é registado pelo bloco funcional 102.
De seguida, o mapa de fronteira de "bit" de instrução (PC-AE) é inspeccionado pelo bloco 104 para determinar se o PC-AE da instrução Y é uma fronteira de instrução X. Se for, o bloco de teste 106 dirige o programa 96 sobre o caminho 107 para o bloco 108 o que permite a interrupção da execução do código Y para processamento do acontecimento assíncrono de instrução, sem quebrar a granularidade do código de instrução X.
Se o PC-AE da instrução Y não for uma fronteira de instrução X, o bloco funcional 110 alinha o contador de instrução Y PC como próxima segurança ou a instrução Y seguinte que é uma fronteira de instrução X. Um caminho de programa 111 é então -36-
-X - seguido pelo programa IGC 96 para o bloco 108 para processar acontecimentos assíncronos conforme foi previamente descrito, de novo sem quebrar a granularidade de instrução do código X. Neste caso, o acontecimento assíncrono ocorreu num ponto em tempo quando apenas uma ou miais, mas não todas as instruções Y foram executadas concordantemente com um granulo de instrução de X e a preservação da granularidade de instrução X é atingida por operação do bloco de programa 110.
Mais em particular, como é mostrado para o bloco 110 na Figura 5B, uma pergunta avançada, de instrução Y é feita pelo bloco funcional 112 num laço de programa 113 para encontrar a próxima instrução Y que está numa fronteira de instrução X. 0 bloco de teste 114 verifica cada instrução Y pesquisada em avanço, para determinar ou processar a interrupção prioritariamente à execução da instrução Y remanescente pode produzir um resultado de execução de código Y diferente de resultado que teria sido produzido se o correspondente código X tivesse sido executado com a imposição do mesmo acontecimento assíncrono.
Ao fazer cada teste de instrução Y, avançado, o bloco de teste 114 determina preferencialmente se se pode produzir uma condição de excepção pela tentativa de execução da instrução Y, se o acontecimento assíncrono for permitido de ser processado e a execução da sequência de código Y então continuada. Geralmente uma instrução tem uma excepção se possivelmente não pode ser completada. As seguintes são as classes gerais de excepções que, se porem identificadas a uma instrução avançada Y, geram uma abortagem de código Y para a próxima segurança da instrução Y que é uma fronteira de X.
1) Excepções de gestão de memória tais como violações ao controlo de acesso ou falhas de página. 2) Excepções aritméticas tais como transbordo de ponto flutuante em falha ou falha por divisão por zero. 3) Excepções de instrução tais como operações ilegais - ou códigos de operação em pontos de quebra.
Na execução preferida da invenção é colocada, uma lista das excepções aplicáveis ao programa IGC96 durante a execução. A determinação das excepções são assim feitas referenciando cada instrução Y pesquisada em avanço contra a lista de excepções armazenada.
As instruções Y sucessivas são testadas na pesquisa avançada, e se todas as instruções Y pesquisadas mostrarem não ter excepções as instruções Y remanescentes são executadas antes do processamento do acontecimento assíncrono ser permitido pelo bloco 108 (Figura 5A) sem quebrar a granularidade de instrução X como foi previamente descrita.
Por outro lado, se a instrução X pesquisada em avanço mostrar uma excepção sob o teste pelo bloco 114, o bloco funcional 118 segura imediatamente o contador do programa Y para a próxima segurança de instrução Y que é uma fronteira de instrução Xe, o processamento de acontecimentos assíncronos é de novo permitida pelo bloco 108 (Figura 5A) sem quebrar a granularidade da instrução X. Desta maneira, até uma possibilidade de quebra da granularidade de instrução X é evitada.
Em geral, a presente invenção providencia um mecanismo eficaz para atingir "uma para muitas", traduções de código de -38 -38
aplicação. 0 código gerado é eficaz em relação ao código original em resultados de execução bem como em atomicidade de estado e granularidade de instrução. A atomicidade e a granularidade é garantida para instruções simples de escrita única bem como instruções especiais incluindo escritas múltiplas e tipos de escrita simples ler-modificar-escrever.
Concordantemente, os investimentos em CISC original ou código semelhante podem ser poupados enquanto os lucros de preço/produtividade podem ser simultaneamente atingidos pelo uso das traduções de código de aplicação em RISC ou outros sistemas, avançados, de computador, de preço/produtividade tendo conjuntos de instruções relativamente reduzidas.
Podem ser feitas várias modificações e variações no sistema melhorado e no método para preservar a atomicidade de estado - para código de programa traduzido da presente invenção para os praticados na arte pretendida, sem fugir do âmbito e espírito da invenção. Pretende-se de acordo, que a presente invenção abrace tais modificações e variações até à extensão que vêem dentro do âmbito das reivindicações agregadas e os seus equivalentes.
I
Lisboa, 6 de Março de 1992
J. PEREIRA DA CRUZ
Agente Oficial da Propriedade Industrial RUA VtCTOR CORDON, 10-A 3« 1200 LISBOA
Claims (5)
- REIVINDICAÇÕES: ia.- Método para traduzir um primeiro código de programa para tom segundo código de programa e para executar o segundo código de programa conservando a atomicidade de estado de instrução do primeiro código, sendo o primeiro código de programa executável num computador tendo uma primeira arquitectura adaptada a um primeiro conjunto de instruções e sendo o segundo código de programa executável num segundo computador tendo um estado de memória e de registo e uma segunda arquitectura adaptada a um segundo conjunto de instruções o qual é reduzido relativamente ao primeiro conjunto de instruções caracterizado por compreender os passos: operar um primeiro computador para traduzir o primeiro código de instruções para as correspondentes instruções para as correspondentes instruções de segundo código; organizar as instruções de segundo código para cada uma das instruções de primeiro código numa sequência de instruções granulares tendo por ordem pelo menos dois grupos, um primeiro grupo incluindo as instruções de segundo código que fazem trabalho de instrução para além de actualização de estado que podem ser abortadas após a execução sem correr o risco de um estado de erro, e um segundo grupo tendo todas as instruções de actualização de estado de memória e de registo incluindo qualquer instrução especial de escrita requerida para implementar a instrução de primeiro código a ser traduzida; incluindo no referido segundo grupo de instruções para instruções simples de escrita pré-determinadas uma primeira instriíção de escrita especial tendo uma primeira subsequência para processar uma escrita simples numa primeira localização de •η \2 - memória de acordo com uma exigência que a referida subsequência tem de ser executada sem qualquer interrupção e sem quaisquer escritas conflituosas intervenientes na referida primeira localização de memória por outro qualquer processador que possa ser acoplado ao referido estado de memória; incluindo no referido segundo grupo de instruções para instruções de escrita múltiplas na segunda instrução de escrita especial para incluir uma segunda subsequência para processos escritas múltiplas as quais têm de ser todas executadas sem qualquer interrupção e sem quaisquer escritas conflituosas por qualquer outro processador que possa ser acoplado ao referido estado de memória; operando o referido sistema de computador para executar o segundo código de programa; determinando a ocorrência de cada acontecimento assíncrono durante a segunda execução de código; determinando durante a segunda execução de código a ocorrência de cada escrita conflituosa para a referida localização de memória pelo referido outro processador se estiver acoplado ao referido estado de memória; abortando para uma nova tentativa qualquer sequência de instruções de código, granular, a fim de preservar a atomicidade de estado da primeira instrução de codigo e a granularidade da primeira instrução de código se ocorrer uma interrupção de um acontecimento assíncrono durante a execução da sequência antes que de as primeiras instruções de grupo no total tenham sido executadas ou se as primeiras instruções de grupo tiverem sido executadas, antes da execução de qualquer segunda instrução de grupo a qual esteja sujeita a uma possível excepção, permitindo, por isso o processamento de acontecimentos subsequentes assíncronos; abortando e tentando de novo até que se complete a execução com sucesso da referida subsequência especial de instrução se existir alguma sequência de instrução granular de segundo código que inclua a referida primeira subsequência se for executada uma 3 3escrita conflituosa por outro referido processador antes da completação da execução da referida subsequência; abortando qualquer sequência de instrução granular de segundo código que inclua a referida subsequência para uma nova tentativa se ocorrer uma interrupção de acontecimento assíncrono durante a tentativa de execução da referida subsequência e atrasando o processamento de uma interrupção de acontecimento assíncrono e completando qualquer sequência de instrução granular de segundo código sendo executada a) se a referida segunda subsequência estiver incluída na sequência de instrução granular e se a interrupção de acontecimento assíncrono ocorrer quando muito após uma primeira escrita durante a execução da referida subsequência, segunda, de instrução ou b) se a interrupção de acontecimento assíncrono ocorrer após a execução de todas as instruções de actualização de estado no referido segundo grupo que estejam sujeitas a uma possível excepção. 2â.- Método de acordo com a reivindicação 1, caracteri-zado por a referida primeira subsequência ser uma subsequência de ler-modif icar-escrever. 3 s.- Método de acordo com a reivindicação 2, caracteri-zado por a referida primeira subsequência ser empregue para implementar uma instrução parcial de escrita ou uma instrução de actualização de bloqueio, incluindo a referida subsequência uma sequência de carregamento-bloqueio armazenamento-condicional que lê e modifica dados de entrada (input) armazenamento-condicional-mente os dados resultantes e falha a referida primeira subsequência se ocorreu uma escrita conflituosa durante a sua execução ou completa a referida primeira subsequência se não ocorreu qualquer escrita conflituosa durante e sua execução.
- 4,- Método de acordo com a reivindicação 1, caracteri-zado por a referida sequência incluir uma rotina de chamada biblioteca de arquitectura previlegiada simples (PAL) que executa a referida subsequência e todas as escritas ai incluídas em que uma vez iniciada a referida rotina de chamada (PAL) e em que a iniciação da referida rotina de chamada (PAL) é permitida se não ocorreu qualquer interrupção prévia na execução da sequência de instrução corrente e se todo o acesso o estado remanescente possa ser completado sem excepção. 5a.- Método de acordo com a reivindicação 4, caracteri-zado por a referida rotina de chamada (PAL) ter uma primeira subrotina que testa uma primeira escrita a ser executada para determinar se se trata de uma escrita parcial, executa um armazenamento-condicional carregamento-bloqueio para executar a referida primeira escrita se por uma escrita parcial, selectivamente tenta de novo o carregamento-bloqueio armazenamento-condicional até se completar, se o armazenamento-condicional falhar como resultado de um estado de escrita conflituoso pelo outro referido processador durante a tentativa de execução da referida primeira subrotina, completa o carregamento-bloqueio armazenamento-condicional, se não ocorreu um estado de escrita conflituoso durante uma primeira tentativa ou se não for seleccionada uma nova tentativa ou durante uma nova tentativa subsequente se forem seleccionados novas tentativas, em que a referida rotina de chamada (PAL) seja bloqueada para cmpletação sobre a completação da referida primeira subrotina e em que uma segunda subrotina seguinte teste uma segunda escrita a ser executada para determinar se se tratar de uma escrita parcial, executa um carregamento-bloqueio armazenamento-condicional para executar a referida segunda escrita, se for uma escrita parcial, tenta de novo o carregamento-bloqueio armazenamento-condicional até se completar o armazenamento-condicional falhar como resultado de um estado de 5 5escrita conflituosa pelo outro referido processador durante uma tentativa de execução da referida segunda subrotina e por cada escrita sucessiva a ser executada ser processada por uma subrotina substancialmente idêntica à referida segunda subrotina até todas as escritas serem executadas para completar a referida chamada PAL. 6a,- Método de acordo com a reivindicação 5, caracteri-zado por a referida primeira subrotina ser tentada novamente até se completar com sucesso. 7 a.- Método para traduzir um primeiro código de programa para um segundo código de programa e para executar o segundo código de programa enquanto conserva a atomicidade de estado de instrução do primeiro código, sendo o primeiro código de programa executável num computador tendo uma primeira arquitectura adaptada a um primeiro conjunto de instruções e o segundo código de programa sendo executável num computador tendo um estado de registo e de memória e uma segunda arquitectura adaptada a um segundo conjunto de instruções o qual é reduzido relativamente ao primeiro conjunto de instruções caracterizado por compreender os passos: operar um primeiro computador para traduzir as instruções de primeiro código para as correspondentes instruções do segundo código de acordo com um código padrão que define as instruções de primeiro código em termos das instruções de segundo código que fazem trabalho de instrução para além de actualização de estado e podem ser abortadas após a execução sem correr risco de um erro des estado e um segundo grupo tendo todas as instruções de actualização de estado de memória e registo incluindo qualquer instrução especial de escrita requerida para implementar a instrução de primeiro código traduzida; estruturando uma instrução especial de escrita para incluir a subsequencia para 6 6processar uma escrita simples para uma primeira localização de memória de acordo com uma exigência que a referida escrita simples tem de ser executada sem qualquer interrupção e sem quaisquer escritas conflituosas interveniências para a referida localização de memória por qualquer outro processador que possa ser acoplado ao referido estado de memória; operando um segundo sistema de computador adaptado com a segunda arquitectura para executar o segundo código de programa determinando a ocorrência de cada acontecimento assíncrono durante a execução do segundo código; determinar durante a execução do segundo código a ocorrência de cada escrita conflituosa para a referida primeira localização de memória pelo referido outro processador se estiver acoplado ao referido estado de memória; abortar para uma nova tentativa qualquer sequência de instrução granular de segundo código para conservar a atomicidade de estado da instrução de primeiro código e a granularidade da instrução de primeiro código se ocorrer uma interrupção de acontecimento assíncrono durante a execução da sequência ou se as primeiras instruções de grupo foram executadas antes da execução de qualuer instrução de segundo grupo que esteja sujeita a -uma possível excepção, assim sendo permitindo o processamento de acontecimentos assíncronos subsequentes; abortando para uma nova tentativa até se completar a execução com sucesso, a referida subsequência especial de instrução em qualquer sequência de instrução granular de segundo código que inclua a referida subsequência se for feita uma escrita conflituosa por outro referido processador antes de se completar a execução da referida subsequência; abortando qualquer sequência de instrução granular de segundo código que indica a referida sequência para uma nova tentativa se ocorrer uma interrupção de acontecimento assíncrono durante a tentativa de execução da referida subsequência; e atrasar o processamento de uma interrupção de acontecimento 7 7assíncrono e completando qualquer subsequência de instrução de segundo código sendo executrada se ocorrer uma interrupção de acontecimento assíncrono após a execução de todas as instruções de actualização de estado no referido segundo grupo que estejam sujeitas a uma possível excepção. 8a.- Método de acordo com a reivindicação 7, caracteri-zado por a referida primeira subsequência ser uma subsequência de ler-modif icar-escrever. 9 a.— Método de acordo com a reivindicação 8, caracteri-zado por a referida primeira subsequência ser empregue para implementar uma instrução de escrita parcial ou uma instrução de actualização de interbloqueio, incluindo a referida primeira subsequência uma sequência de carregamento-bloqueio armazenamento-condicional que lê modifica os dados de "input", armazena condicionalmente os dados resultantes e falha a referida primeira subsequência se ocorreu uma escrita conflituosa durante a sua execução ou completa a referida primeira subsequência se não ocorreu qualquer conflituosa durante a sua execução. 10a.- Método para traduzir um primeiro código de programa para um segundo código de programa e para executar o segundo código de programa enquanto conserva a atomicidade de estado de instrução do primeiro código, sendo o primeiro código de programa executável num computador tendo uma primeira arqui-tectura adaptada a um primeiro conjunto de instrução e o segundo código de programa sendo executável num computador tendo um estado de memória e de registo e uma segunda arquitectura a um segundo conjunto de instruções o qual é reduzido relativamente ao primeiro conjunto de instruções caracterizado por compreender os passos: δoperar um primeiro computador para traduzir as instruções de primeiro código para uns correspondentes instruções de segundo código de acordo com um código padrão que define as instruções de primeiro código em termos das instruções de segundo código organizar as instruções de segundo código para cada instrução de primeiro código numa sequência granular de instrução tendo por ordem pelo menos dois grupos incluindo um primeiro grupo as instruções de segundo código que fazem trabalho de instrução para além de actualização de estado e podem ser abotadas após a execução sem arriscar um estado de erro e um segundo grupo tendo todas as instruções de actualização de estado de memória e de registo incluindo qualquer instrução especial de escrita necessária para implementar a instrução de primeiro código sendo traduzida; estruturar uma instrução de escrita especial para incluir ima subsequência para processar escritas múltiplas que têm todas de ser executadas sem qualquer interrupção; operar um segundo sistema de computador adaptado com a segunda arquitectura para executar o segundo código de programa; determinar a ocorrência de cada acontecimento assíncrono durante a execução de segundo código; abortando para ima nova tentativa qualquer de instrução granular de segundo código a fim de preservar a atomicidade de estado de instrução de primeiro código e a granularidade de instrução de primeiro código se ocorer uma interrupção de acontecimento assíncrono durante a execução da sequência antes de todas as instruções de primeiro grupo serem executadas ou se as instruções de primeiro grupo tiverem sido executadas antes da execução de qualquer instrução de segundo grupo que esteja sujeita a uma possível excepção permitindo assim o processamento de um acontecimento assíncrono subsequente; atrasar o processamento de uma interrupção de acontecimento assíncrono e completando qualquer sequência de instrução granular 9de segundo código sendo executada a) se a referida subsequência está incluída na sequência granular de instrução e se qualquer interrupção de acontecimento assincrono ocorre quando muito após uma primeira escrita durante a execução da referida subsequência de instrução ou b) se a interrupção de acontecimento assíncrono ocorrer após a execução de todas as instruções de actualização de estado no referido segundo grupo que sejam sujeitas a uma possível excepção. llâ.- Método de acordo com a reivindicação 10, caracte-rizado por a referida segunda subsequência incluir uma rotina de chamada biblioteca de arquitectura simples previligiada (PALL) que executa a referida segunda subsequência e todas as escritas incluídas em que uma vez iniciada a referida rotina de chamada PAL e em que a iniciação da referida rotina de chamada PAL seja permitida se não ocorreu qualquer interrupção préviamente na execução da sequência de instrução corrente e se todo o acesso a estados restante possa ser completado sem excepção.
- 12.- Método de acordo com a reivindicação 11, caracte-rizado por a referida rotina de chamada PAL ter uma primeira sub-rotina que testa uma primeira escrita a ser executada para determinar se se trata de uma escrita parcial, executa uma carregamento-bloqueio armazenamento-condicional para executar a referida primeira escrita se por uma escrita parcial, selectiva-mente tenta de novo o carregamento-armazenamento armazenamento--condicional até se completar se o armazenamento-condicional falhar como resultado de um estado de escrita conflituoso pelo referido outro processador durante uma tentativa de execução da referida sub-rotina, se completa o carregamento-bloqueio armazenamento condicional se não ocorrer qualquer estado de escrita conflituoso durante uma primeira tentativa se não for selecciona-do uma nova tentativa ou durante a nova tentativa subsequente se 10forem seleccionadas novas tentativas, em que a referida rotina de chamada PAL bloqueada para ser completada sobre a completação da referida primeira sub-rotina, e em que a segunda sub-rotina seguidamente testa uma segunda escrita a ser executada para determinar se se trata de uma escrita parcial, executa um carregamento-bloqueio armazenamento-condicional para executar a referida segunda escrita se for uma escrita parcial, tenta de novo a carregamento-bloqueio armazenamento-condicional até que se completa se o armazenamento-condicional falhar como resultado de um estado de escrita conflituosa pelo referido outro processador durante uma tentativa de execução da referida segunda sub-rotina, e por cada escrita sucessiva a ser executada é processada por uma sub-rotina substancialmente idêntica a referida segunda subproteí-na té serem executadas todas as escritas para completar a referida chamada PAL. 13a.- Método de acordo com a reivindicação 12, caracte-rizado por a referida sub-rotina ser tentada de novo até se completar com sucesso. 14s.- Método para traduzir um primeiro código de programa para um segundo código de programa para facilitar conservar a atomicidade de estado do primeiro código quando é executado o segundo código, sendo o primeiro código de programa executável num computador tendo uma primeira arquitectura adaptada a um primeiro conjunto de instruções e sendo o segundo código de programa executável num computador tendo um estado de memória e de registo e uma segunda arquitectura adaptada a um segundo conjunto de instruções o qual é reduzido relativamente ao primeiro conjunto de instruções, caracterizado por compreender os passos: operar um primeiro computador para traduzir o primeiro código de instruções de acordo com um código padrão que define o 11primeiro código de instruções em termos do segundo código de instruções; organizar as instruções de segundo código para cada instrução de primeiro código uma sequência de instrução granular, tendo por ordem pelo menos dois grupos, um primeiro grupo incluindo as ) instruções de segundo código que fazem trabalho de instrução para além de actualÍ2ação de estado e podem ser abortadas após a execução sem correr o risco de num estado de erro, e um segundo grupo tendo todas as instruções de actualização de estado de } memória e de registo incluindo qualquer instrução de escrita especial requerida para implementar a instrução de primeiro código a ser traduzida; estruturar uma primeira instrução de escrita especial para incluir uma primeira subsequência para processamento de uma escrita simples para uma primeira localização de memória de acordo com uma exigência que a referida escrita simples tem de ser executada sem qualauer interrupção e sem qualquer escrita conflituosa interveniente para a referida primeira localização de memória por qualquer outro processador que possar ser acoplado ao referido estado de memória; ! estruturar uma segunda instrução de escrita especial para incluir uma segunda subsequência para processar escritas múltiplas que têm de ser todas executadas sem qualquer interrupção; estruturar a referida primeira subsequência para abortar uma ^ nova tentativa até se completar uma execução com sucesso se for feita uma escrita conflituosa por o outro referido processador antes de se completar a execução da referida subsequência; estruturando a referida subsequência para falhar se ocorrer uma interrupção assíncrona de acontecimento durante a tentativa de execução da referida subsequência permitindo assim uma nova tentativa de execução de qualquer instrução granular de segundo código que inclua a referida primeira subsequência e estruturando a referida segunda subsequência para execução previligiada não 12 12interrompível atrasando assim o processamento de qualquer interrupção de acontecimento assincrono durante a execução do segundo código até apôs a exempletação da execução da referida segunda subsequência.
- 153.- Método para executar um segundo código de programa enquanto conserva a atomicidade de estado de um primeiro código de programa do qual o segundo código de programa é traduzido, sendo o primeiro código de programa executável num computador tendo uma primeira arquitectura adaptada a um primeiro conjunto de instruções e o segundo código de programa sendo executável num computador tendo um estado de memória e de registo e uma segunda arquitectura adaptada a um segundo conjunto de instruções o qual é reduzido relativamente ao primeiro conjunto de instruções sendo as instruções de segundo código; para cada instrução de primeiro código organizados numa sequência granular de instrução tendo por ordem pelo menos dois grupos, um primeiro grupo incluindo aquelas instruções de segundo código que fazem trabalho de instrução para além de actualização de estado e podem ser abortadas sem arriscar um estado de erro um segundo grupo tendo todas as instruções de actualização de estado de memória e de registo incluindo qualquer instrução de escrita requerida para implementar a instrução de primeiro código sendo traduzida, sendo uma primeira instrução de escrita estruturada para incluir uma primeira subsequência para processar uma escrita simples, para uma primeira localização de memória de acordo com uma necessidade que a referida escrita simples tem de ser executada sem qualquer interrupção e sem quaisquer escritas conflituosas intervenientes por qualquer outro processador que possa ser acoplado ao referido estado de memória e uma segunda instrução especial de escrita sendo estruturada para incluir uma segunda subsequência para processar escritas múltiplas que têm todas de ser executadas sem qualquer interrupção; caracterizado por compreender os passos: 13 - 13 -operar um segundo sistema de computador adaptado com a segunda arquitectura para executar o segundo código de programa determinando a ocorrência de cada acontecimento assíncrono durante a execução do segundo código; determinando durante a execução do segundo código a ocorrência de cada escrita conflituosa para a referida primeira localização de memória pelo outro referido processador se estiver acoplado ao referido estado de memória; abortar para dar uma nova tentativa qualquer sequência de instrução de segundo código, granular para conservar a atomi-cidade de estado da instrução de primeiro código e a granulari-dade de instrução de primeiro código se ocorer uma interrupção de acontecimento assíncrono durante a sequência da execução antes de todas as instruções do primeiro grupo terem sido executadas ou, se o primeiro grupo de instruções tiver sido executado antes da execução de qualquer segundo grupo de instrução que esteja sujeita a uma possível excepção, permitindo assim o processamento de um acontecimento assíncrono subsequente; abortar para uma nova tentativa até ser completada a execução com sucesso a referida primeira subsequência especial de instrução em qualquer sequência granular de instrução de segundo código que inclua a referida primeira subsequência se for feita uma escrita conflituosa pelo outro referido processador antes de se completar a execução da referida primeira subsequência; abortar qualquer sequência de instrução de segundo código granular que inclua a referida primeira subsequência para uma nova tentativa se ocorrer um acontecimento de interrupção assíncrono durante uma tentativa de execução da referida primeira subsequência; e atrasar o processamento de interrupção de um acontecimento assíncrono e completando qualquer sequência de instrução de segundo código granular sendo executado a) se a referida segunda subsequência e incluída na sequência de instrução granular e se ocorrer o acontecimento assíncrono de interrupção quando muito 14 14após uma primeira escrita durante a execução da referida segunda subsequência de instrução ou b) se ocorrer a interrupção de acontecimento assíncrono após a execução da referida instrução especial ou após todas as instruções de actualização de estado no referido segundo grupo que estão sujeitas a uma possível excep-ção. 16â.- sistema para traduzir um primeiro código de programa para um segundo código de programa e para executar o segundo código de programa de uma forma que conserve a atomicida-de de estado de instrução do primeiro código, sendo o primeiro código de programa executável num computador tendo uma primeira arquitectura adaptada a um primeiro conjunto de instruções e sendo o segundo código de programa executável num computador tendo um estado de memória e de registo e uma segunda arquitectura adaptada a um segundo conjunto de instruções o qual é reduzido relativamente ao primeiro conjunto de instruções, caracterizado por compreender; um primeiro sistema de computador tendo um primeiro processador para traduzir o primeiro código de programa para o segundo código de programa e um primeiro sistema de memória acoplado ao referido primeiro processador; meios para traduzir cada instrução sucessiva no primeiro código para as instruções de segundo código de acordo com o referido padrão de código para armazenamento como o segundo código de programa no referido primeiro sistema de memória; meios para organizar as instruções de segundo código para cada instrução de primeiro código numa sequência granular de instrução tendo por ordem pelo menos dois grupos, um primeiro grupo incluindo auelas instruçõies de segundo código que fazem trabalho de instrução para além de actualização de estado e podem' ser abortados após a execução sem arriscar a um estado de erro e um segundo grupo tendo todas as instruções de actualização 15de estado de memória e de registo incluindo qualquer instrução de escrita requerida para implementar a instrução de primeiro código a ser traduzida; meios para estruturar uma primeira instrução de escrita especial para incluir uma primeira subsequência para processar uma escrita simples para uma primeira localização de memória de acordo com um requerimento que a referida escrita simples tem de ser executada sem qualquer interrupção e sem escritas conflituosas intervenientes para a referida primeira localização localização de memória por qualquer outro processador que possa ser acoplado ao referido estado de memória; meios para estruturar uma segunda instrução especial de escrita para incluir uma segunda subsequência 'para processar múltiplas escritas que têm de ser todas executadas sem qualquer interrupção; um segundo sistema de computador para executar o segundo código para gerar como output pelo referido primeiro sistema de computador pelo referido primeiro sistema de computador tendo o referido segundo sistema e computador a referida segunda arqui-tectura e tendo um segundo processador e um estado de memória e de registo incluindo um segundo sistema de memória acoplado ao referido segundo processador; meios para determinar durante a execução do segundo código a ocorrência de cada acontecimento assíncrono e a ocorrência de cada escrita conflituosa para a referida primeira localização de memória pelo outro referido processador se estiver acoplado ao referido estado de memória; meios para abortar para uma nova tentativa qualquer sequência de instrução de código granular para preservar a atomicidade de estado da instrução do primeiro código e a granularidade da instrução de primeiro código se ocorrer uma interrupção de acontecimento assíncrono durante a execução da sequência antes de terem sido executadas todas as instruções do primeiro grupo ou se 16 16as instruções do primeiro grupo tiverem sido executadas, antes da execução de qualquer instrução de segundo grupo que esteja sujeita a uma possível excepção, permitindo assim o processamento de qualquer acontecimento assíncrono subsequente; meios para abortar para uma nova tentativa até se completar uma execução com sucesso, a referida subsequência especial de instrução em qualquer sequência de instrução granular de segundo código que inclua a referida primeira subsequência se for feita uma escrita conflituosa pelo outro referido processador antes de se completar a execução da referida primeira subsequência; e meios para atrasar o processamento de uma interrupção de um acontecimento assíncrono e completando qualquer sequência de instrução de segundo código granular sendo executado a) se a referida segunda subsequência está incluída na sequência de instrução granular e se ocorrer uma interrupção de acontecimento assíncrono quando muito após a primeira escrita durante a execução da referida segunda subsequência de instrução ou b) se ocorrer o acontecimento após a execução de todas as instruções de actualização de estado no referido segundo grupo que estejam sujeitas a uma possível excepção. 17a.- Sistema de acordo com a reivindicação 16, carac-terizado por a referida primeira subsequência ser uma subsequência de ler-modificar-escrever. 18a.- Sistema de acordo com a reivindicação 17, carac-terizado por a referida subsequência ser empregue para implementar uma instrução parcial de escrita ou uma instrução de actualização interbloqueada, incluindo a referida subsequência uma sequência de carregamento-boqueio armazenamento condicional que lê e modifica os dados de input, armazena condicionalmente os dados' resultantes e falha a referida subsequência se um escrita conflituosa ocorreu durante a execução ou completa a referida 17primeira subsequência se não ocorreu qualquer escrita de conflito durante a sua execução. 19a.- Sistema de acordo com a reivindicação 16, carac-terizado por a referida segunda subsequência incluir uma rotina de chamada de biblioteca de arquitectura simples priveligiada (PAL) que executa a referida segunda subsequência e todas as escritas incluídas em que uma vez iniciada a referida rotina de chamada (PAL) e em que a iniciação da referida rotina de chamada (PAL) for permitida se não ocorreu préviamente qualquer interrupção na execução da sequência de instrução corrente e se todos os restantes acessos do estado possam ser completados sem excepção. 20â.- Sistema de acordo com a reivindicação 19, carac-terizado por a referida rotina de chamada (PAL) ter uma primeira sub-rotina que testa uma primeira escrita a ser executado para determinar se se trata de uma escrita parcial, executa um carregamento-bloqueio armazenamento-condicional para executar a primeira escrita se for uma escrita parcial, tenta de novo relactivamente o carregamento-bloqueio armazenamento-condicional até se completar se falhar o armazenamento condicional como resultado de um estado de escrita conflituoso pelo outro referido processador durante a tentativa de execução da referida sub-rotina, se completa o carregamento-bloqueio armazenamento condicional se não ocorreu qualquer estado de escrita conflituoso durante a primeira tentativa se não for seleccionado qualquer nova tentativa se forem seleccionados tentativas em que a referida rotina de chamada (PAL) for bloqueada para ser comnpletada sobre a comple-tação da primeira referida sub-rotina e em que a segunda sub-ro-tina testa de seguida uma segunda escrita a ser executada para determinar se se trata de uma escrita parcial executa um carregamento-bloqueio armazenamento-condicional para executar a referida segunda escrita se for uma escrita parcial, tenta de novo o 18carregamento-bloqueio armazenamento-condicional até se completar se o armazenamento-condicional falhar como resultado de um estado de escrita conflituosa pelo referido outro processador durante uma tentativa de execução da referida segunda sub-rotina e por cada escrita sucessiva a ser executada é processada por uma sub-rotina substâncialmente idêntica à segunda referida sub-rotina até todas as escritas serem executadas para completar a referida rotina de chamada (PAL). 21â.— Sistema de acordo com a reivindicação 20 caracte-rizado por a referida primeira sub-rotina ser tentada de novo até se completar com sucesso. 22a.- Sistema para traduzir um primeiro código de programa para um segundo código de programa e para executar o segundo código de programa de uma firma que mantém a atomicidade de estado do primeiro código, sendo o primeiro código de programa executável num computador tendo uma primeira arquitectura adaptada a um primeiro conjunto de instruções e o segundo código de programa sendo executável num computador tendo um estado de memória e de registo e uma segunda arquitectura adaptada a um segundo conjunto de instruções o qual é reduzido relativamente ao primeiro conjunto de instruções caracterizado por compreender; um primeiro sistema de computador tendo um primeiro processador traduzindo o primeiro código de programa para o segundo código de programa e um primeiro sistema de memória acoplado ao referido primeiro processador; meios para traduzir cada instrução sucessiva no primeiro código para as instruções de segundo de código de acordo com o referido padrão para armazenamento como o segundo código de programa no referido primeiro sistema de memória; meios para organizar as instruções de código para cada instrução de primeiro código numa sequência granular de instrução 19 19tendo por ordem pelo menos dois grupos, incluindo um primeiro grupo essas instruções de segundo código que fazem trabalho de instrução para além de actualização de estado e podem ser abortados a execução sem arriscar a um estado de erro e um segundo grupo tendo todas as instruções de actualização de estado de memória e de registo incluindo qualquer instrução de escrita especial requerida para implementar a primeira instrução de código sendo traduzida; meios para estruturar uma instrução especial de escrita para incluir uma subsequência para processar uma escrita simples para dar uma primeira localização de memória de acordo com uma exigência que a referida escrita simples tenha de ser executada sem qualquer interrupção e sem quaisquer escritas conflituosas intervenientes para a referida primeira localização de memória por qualquer outro processador que possa ser acoplado ao referido estado de memória; um segundo sistema de computador para executar o segundo código gerado como output pelo referido primeiro sistema de computador tendo o referido segundo sistema de computador a referida segunda arquitectura e tendo um segundo processador e um estado de memória e de registo incluindo um segundo sistema de memória acoplado ao referido segundo processador; meios para determinar durante a segunda execução de código a ocorrência de cada acontecimento assíncrono e a ocorrência de cada escrita conflituosa para a referida primeira localização de memória pelo referido outro processador se estiver acoplado ao referido estado de memória; meios para abortar para uma nova tentativa qualquer sequência granular de instrução de segundo código para preservar a atomicidade de estadi e a granularidade de instrução de primeiro código se ocorrer uma interrupção de acontecimento assíncrono durante a execução da sequência antes de todas as instruções do primeiro grupo terem sido executadas ou se as primeiras 20 20instruções de grupo tiverem sido executadas antes da execução de qualquer instrução de grupo que esteja sujeita a uma possível excepção, permitindo assim o processamento subsequente de um acontecimento assíncrono; meios para abortar para uma nova tentativa até a execução com sucesso estar completa a referida subsequência de instrução especial ou qualquer segunda sequência de instrução granular que inclua a referida subsequência se for feita uma escrita conflituosa pelo referido outro processador antes de se completar a execução da referida subsequência; meios para abortar qualquer sequência de instrução de código granular que inclua a referida subsequência para uma nova tentativa se ocorrer um acontecimento, de interrupção, assíncrono durante uma tentativa de execução da referida subsequência; e meios incluindo o referido segundo processador e o referido segundo sistema de memória para atrasar o processamento de uma interrupção de acontecimento assíncrono e completando qualquer sequência de instrução granular de segundo código sendo executada se ocorrer o acontecimento assíncrono após execução de todas a.s instruções de actualização de estado no referido segundo grupo que estejam sujeitas a uma possível excepção. 23â.- sistema conforme adiantado na reivindicação 22, caracterizado por a referida primeira subsequência ser uma subsequência de ler-modificar-escrever. 24â.— Sistema de acordo com a reivindicação 23 caracterizado por a referida primeira subsequência ser empregue para implementar uma acção especial de escrita numa instrução de actualização de interbloqueio, incluindo a referida subsequência um carregamento-boqueio armazenamento-condicional em sequência que lê e modifica os dados de input, armazena condicionalmente os dados resultantes, e falha a referida primeira subsequência se 21 21ocorrer uma escrita conflituosa durante a sua execução ou completa a referida primeira subsequência se não ocorreu qualquer escrita conflituosa durante a sua execução.
- 253.- Sistema para traduzir um primeiro código de programa para um segundo código de programa e para executar o segundo código de programa de uma forma que preserva a atomicida-de de estado de primeiro código, sendo o primeiro código de programa executável num computador tendo uma primeira arquitectu-ra adaptadaa um primeiro conjunto de instruções e sendo o segundo código de programa executável num computador tendo um estado de memória e de registo e uma segunda arquitectura adaptada a um segundo conjunto de instruções o qual é reduzido relativamente ao primeiro conjunto de instruções, caracterizado por compreender; um primeiro sistema de computqdor tendo um primeiro processador para traduzir o primeiro código de programa para o segundo código de programa e um primeiro sistema de memória acoplado ao referido primeiro processador; meios para traduzir cada instrução sucessiva no primeiro código para as instruções de segundo código de acordo com o referido código padrão para armazenamento como o segundo código de programa no referido sistema de memória; meios para organizar as instruções de segundo código para cada instrução de primeiro código numa sequência granular de instrução tendo por ordem pelo menos dois grupos, um primeiro grupo incluindo as segundas instruções que fazem trabalho de instrução para além de actualização de estado e podem ser abortadas após a execução sem arriscar a um estado de erro e um segundo grupo tendo todas as instruções de actualização de estado de memória e de registo incluindo qualquer instrução de escrita especial necessária para implementar a construção de primeiro código a ser traduzida; 22meios para estruturar uma instrução de escrita especial para incluir uma subsequência para processar escritas múltiplas que tem todas de ser executadas sem qualquer interrupção; um segundo sistema de computador para executar o segundo código gerado como output pelo referido primeiro sistema de computador, tendo o referido segundo sistema de computador a referida segunda arquitectura e tendo um segundo processador, e um estado de memória e registo incluindo um segundo sistema de memória acoplado no referido segundo processador; meios para determinar durante a segunda execução de código a ocorrência de cada acontecimento assíncrono; meios para abortar para uma nova tentativa qualquer segunda sequência de instrução de código granular para preservar a atomicidade de estado da primeira instrução de código e a granu-laridade da primeira instrução de código se ocorrer uma interrupção de acontecimento assíncrono durante a execução da sequência antes de todas as instruções de primeiro grupo terem sido executadas ou, se as instruções do primeiro grupo tiverem sido executadas, antes da execução de qualquer instrução de segundo grupo a qual esta sujeita a uma possível excepção, permitindo assim o processamento de um acontecimento assíncrono; meios incluindo o referido segundo processador e o referido segundo sistema de memória para atrasar o processamento de uma interrupção de um acontecimento assíncrono e completando qualquer sequência de instrução granular de segundo código a ser executada a) se a referida segunda subsequência está incluída na sequência de instrução granular e se a interrupção de acontecimento assíncrono ocorrer quando após uma primeira escrita durante a execução da referida segunda sequência de instrução ou b) se ocorrer o acontecimento assíncrono após a execução de todas as instruções de actualização de estado no referido segundo grupo que estejam sujeitas a uma possível excepção. 23 2326a.- sistema conforme adiantado na reivindicação 25 caracterizado por a referida segunda subsequência incluir uma rotina de chamada de biblioteca de arquitectura previligiada simples (PAL) que executa a referida segunda subsequência e todas as escritas aí incluídas uma vez iniciada a referida rotina de chamada (PAL) e em que a iniciação da referida rotina de chamada (PAL) é permitida se não ocorreu previamente qualquer interrupção na execução da sequência de instruções corrente e se todo o estado de acesso remanescente poder ser completado sem excepção. 273.- sistema de acordo com a reivindicação 26, caracterizado por a referida rotina de chamada (PAL) ter uma primeira sub-rotina que testa uma primeira escrita a ser executada para determinar se se trata de uma escrita parcial, executa um carregamento-bloqueio armazenamento-condicional para executar a referida primeira escrita se for uma escrita parcial, tenta de novo selectivamente um carregamento-bloqueio armazenamento-condicional até se completar se falhar o armazenamento-condicional como resultado de um estado de uma escrita conflituosa pelo outro referido processador durante uma tentativa de execução da referida sub-rotina completar o carregamento-bloqueio armazenamento-condicional se ocorreu qualquer estado de escrita, conflituosa durante uma primeira tentativa para se não for seleccionada uma nova tentativa durante uma nova tentativa subsequente se forem seleccionadas novas tentativas em que a referida rotina de chamada (PAL) por bloquedor para completação sobre a completação da referida primeira sub-rotina, e por a segunda sub-rotina testar de seguida uma segunda escrita a ser executada para determinar se se trata de uma escrita parcial, executa um carregamen-to-bloqeio armazenamento-condicional para executar a referida segunda escrita se for uma escrita parcial, tenta de novo o carregamento armazenamento até se completar se falhar o armazenamento-condicional como resultado de uma escrita de estado i 24conflituoso pelo referido outro processador durante uma tentativa de execução da referida sub-rotina, e por a escrita sucessiva a ser executada ser processada por uma sub-rotina substancialmente idêntica à referida segunda sub-rotina até que todas as escritas sejam executadas para completar a referida rotina de chamada (PAL). 28a.- Sistema de acordo com a reivindicação 27 caracte-rizado por se realizar a referida nova tentativa até se completar com sucesso. 29a.- Sistema para traduzir um primeiro código de programa para um segundo código de programa para facilitar preservar a atomicidade de estado de primeiro código quando o segundo código é executado, sendo o primeiro código de programa executável num computador tendo uma primeira arquitectura adaptada a um primeiro conjunto de instruções e sendo o segundo código de programa executável num computador tendo um estado de memória e de registo e uma segunda arquitectura adaptada a um segundo conjunto de instruções de código o qual é reduzido relativamente ao primeiro conjunto de instrução, caracterizado por compreender; um primeiro sistema de computador tendo um primeiro processador para traduzir o primeiro código de programa para o segundo e um primeiro sistema de memória acoplado ao referido primeiro processador; meios para traduzir cada sucessiva instrução no primeiro código para as instruções de segundo código de acordo com o referido código padrão para armazenamento como o segundo código de programa no referido primeiro sistema de memória; meios para organizar as instruções de segundo código para cada instrução de primeiro código numa sequência de instrução granular tendo por ordem pelo menos dois grupos, incluindo vim primeiro grupo as instruções de segundo código que fazem um primeiro grupo as instruções do segundo código que fazem trabalho 25de instrução para além de actualização de estado e podem ser abortadas após a execução sem assiscar um estado de erro e um segundo grupo tendo todas as instruções de actualização de estado de memória e de registo incluindo qualquer instrução de escrita especial requerida para implementar a instrução de primeiro código a ser traduzida; meios para estruturar uma instrução de escrita especial para incluir uma primeira subsequenciada para processar uma escrita simples para uma primeira localização de memória de acordo com uma exigência que a referida escrita simples tem de ser executada sem qualquer interrupção e sem quaisqueres escritas conflituosas intervenientes para a referida primeira localização de memória por qualquer outro processador que possa ser acoplado ao referido estado de memória; e meios para estruturar uma segunda instrução especial de escrita para incluir uma segunda subsequencia para processar escritas múltiplas que tenham de ser todas executadas sem qualquer interrupção. meios para abortar para uma nova tentativa até se completar a execução com sucesso a referida subsequencia de instrução especial em qualquer sequencia de instrução granular de segundo código que incluía a referida subsequencia se for feita uma escrita conflituosa pelo outro referido processador antes de se completar a execução da referida primeira subsequencia; meios incluindo o referido segundo processador e o referido segundo sistema de memória para abortar qualquer sequência de instrução granular de segundo código que inclua a referida primeira subsequência para uma nova tentativa se ocorrer uma interrupção de acontecimento assíncrono durante uma tentativa de execução da referida primeira subsequência; e meios incluindo o referido segundo processador e o referido segundo sistema de memória para atrasar o processamento de uma interrupção de acontecimento assíncrono e completando qualquer sequencia de instrução granular de segundo código sendo executada A) se a referida segunda subsequencia estiver incluída na sequencia de instrução granular e se ocorrer a interrupção de acontecimento assíncrono quando muito após uma primeira escrita durante a execução da referida subquencia da referida segunda instrução ou B) ou ocorrer o acontecimento assíncrono após a execução de todas as instruções de actualização de estado no referido segundo grupo que estejam sujeitas a uma possível execpção. 303. - sistema para executar um segundo código de programa enquanto montam a atomicidade de estado do primeiro código de programa do qual o segundo código de programa é traduzido, sendo o primeiro código de programa executáveis num computador tendo uma primeira arquitectura adaptada a um primeiro conjunto de instruções e o segundo código de programa sendo executável num computador tendo um estado de memória e de registo a uma segunda arquitectura adaptada a um segundo conjunto de instruções o qual é reduzido relativamente ao primeiro conjunto de instruções, sendo as instruções de segundo código organizadas para cada instrução de primeiro código, numa sequencia de instruções granulares tendo por ordem pelo menos dois grupos, um primeiro grupo incluindo aqueles instruções de código que fazem trabalho de instrução para além de actualização de estado e podem ser abortadas após a execução sem arriscar a um estado e podem ser abortadas após a execução sem arriscar a um estado de erro e um segundo grupo tendo todas as instruções de actualização de estado de memória e de registo incluindo qualquer instrução especial de escrita requerida para implementar a instrução de primeiro código sendo traduzida, uma primeira instrução especial de escrita sendo estruturada para incluir uma primeira subsequencia para processar uma escrita simples para uma primeira localização’ de memória de acordo com uma exigência que a referida escrita simples tem de ser executada sem qualquer interrupção e 27 27sem qualquer escritas conflituosas intervenientes para a referida primeira localização de memória por qualquer outro processador que possa ser acoplado para o referido estado de memória e uma segunda instrução especial de escrita sendo estruturada para incluir uma segunda subsequencia para processar escritas múltiplas que têm todas de ser executadas sem qualquer interrupção; caracterizado por compreender: meios para operar um segundo sistema de computador adaptado com a segunda arquitectura para executar o segundo código de programa; meios para determinar a ocorrência de cada acontecimento assíncrono durante a execução do segundo código; meios para determinar durante a execução do segundo código a ocorrência de cada escrita conflituosa à referida primeira localização de memória pelo outro referido processador se estiver acoplado a referido estado de memória; meios para abortar para uma nova tentativa qualquer sequência de instrução granular de segundo código para preservar a atomicidade de estado do primeiro código de instrução e a granulosidade da instrução de primeiro código se ocorrer uma interrupção de acontecimento assíncrono, durante a execução de sequencia antes de todas as instruções de primeiro grupo terem sido executadas ou, se as instruções de primeiro grupo tiverem sido executadas, antes da execução de qualquer instrução do segundo grupo que esteja sujeita a uma possível execpção, permitindo assim o processamento subsequente do acontecimento assíncrono; meios para abortar para uma nova tentativa até estar completa a execução com sucesso a referida primeira subsequencia de instrução especial em qualquer sequencia de instrução granular de segundo código que inclua a referida primeira subsequencia se for feita uma escrita conflituosa pelo outro referido processador antes de se completar a execução da referida primeira subsequencia; 28 28meios para abortar qualquer sequencia de instruções de segundo código que inclua a referida primeira subsequencia para uma nova tentativa se ocorrer um acontecimento assíncrono de interrupção durante uma tentativa de execução da referida subsequencia; e meios para atrasar o processamento de uma interrupção de acontecimento assíncrono e completar qualquer sequencia de instrução granular de segundo código sendo executada A) se a referida subsequencia está incluída na sequencia granular de instrução e se ocorrer o acontecimento de acontecimento assíncrono quando muito após a primeira escrita durante a execução da referida subsequencia de instrução de segundo código ou B) se ocorrer a interrupção de acontecimento assíncrono da referida instrução especial ou após todas as instruções de actualização de estado no referido segundo grupo que estejam sujeitas a uma possível execpção. 31â. - Método para traduzir um primeiro código de programa para um segundo código de programa e para executar o segundo código de programa de uma maneira de preservar a atomici-dade de estado de instrução do primeiro código, sendo o primeiro código de programa executável num computador tendo uma primeira arquitectura adaptada a um primeiro conjunto de instrução e o segundo código de programa sendo executável num computador tendo um estado de memória e de registo e uma segunda arquitectura adaptada a um segundo conjunto de instruções o qual é reduzido relativamente ao primeiro conjunto de instruções, caracterizado por compreender os passos: operar um primeiro computador para traduzir as instruções do primeiro código para as correspondentes instruções de segundo código de acordo com um código padrão que define as instruções de primeiro código em termos das instruções de segundo código; organizando as instruções de segundo código para cada instrução 29 Γ 29 Γde primeiro código morna sequencia granular de instrução tendo por ordem pelo menos dois grupos, um primeiro grupo incluindo as instruções de segundo código que fazem trabalho de instrução para além de actualização de estado e podem ser abortados após a execução sem arriscar um estado de erro e um segundo grupo tendo todas as instruções de actualização de estado de memória e de registo incluindo qualquer instrução especial de escrita requerida para implementar a instrução de primeiro código sendo traduzida; incluindo no referido segundo grupo de instrução pelo menos uma primeira instrução de escrita especial incluindo uma subse-quencia que tem de ser processada como um todo sem qualquer acontecimento conflituoso interveniente; operar um segundo sistema de computador adaptado com a segunda arquitectura para executar o segundo código de programa, determinando durante a execução do segundo código a ocorrência de cada acontecimento interveniente que de facto ou possivelmente cria um conflito com a atomicidade da referida primeira instrução especial de escrita; abortar para uma nova tentativa qualquer sequência de instrução granular de segundo código para preservar a atomicidade de estado e a granularidade da instrução de primeiro código se ocorrer uma interrupção de acontecimento assincrono durante a execução da sequência antes de todas as instruções de primeiro grupo terem sido executadas ou, se as instruções de primeiro grupo tiverem sido executadas, antes da execução de qualquer instrução de segundo grupo que esteja sujeita a uma possível execpção, permitindo assim o processamento de um subsequente acontecimento assincrono; abortar para uma nova tentativa até à execução com sucesso estar completa a referida subsequencia, especial, de instrução se qualquer sequencia de instrução granular de segundo código que inclua a referida subsequencia se a referida subsequencia por uma instrução de escrita simples incluindo passos múltiplos e se fordetectada uma escrita conflituosa de ter sido feita por outro processador acoplado ao referido estado de memória antes de se completar a executar da referida subsequencia; abortar qualquer sequencia de instrução granular de segundo código que inclua a referida subsequencia para uma nova tentativa ) se a referida primeira subsequencia por uma instrução simples de escrita e se uma interrupção de acontecimento assíncrono por dotada como tom conflito possível durante uma tentativa de execução da referida primeira subsequencia; e atravessando o processa-j mento de uma interrupção de acontecimento assíncrono e completan do qualquer sequencia de instrução de segundo código sendo executada A) se a referida primeira subsequencia for uma instrução de escrita múltipla e por ser incluída' na sequencia de instrução granular e se ocorrer a interrupção de acontecimento assíncrono quando muito após uma primeira escrita durante a execução da referida primeira subsequencia de instrução ou B) se ocorrer a interrupção de acontecimento assíncrono apôs a execução de todas as instruções de actualização de estado no referido segundo grupo que estão sujeitas a uma possível exepção. j 32a. - Método de acordo com a reivindicação 31 caracte- rizado por a referida primeira instrução especial de escrita ser uma primeira instrução especial de escrita incluindo uma primeira subsequencia para processar uma escrita simples a uma primeira localização de memória de acordo com uma exigência que a referida subsequencia tem de ser executada sem qualquer interrupção e sem quaisquer escritas conflituosas intervenientes para a referida primeira localização de memória por qualquer outro processador que possa ser acoplado ao referido estado de memória. 33a. - Método de acordo com a reivindicação 31 caracte-rizado por a referida primeira instrução especial de escrita ser uma segunda instrução especial de escrita para incluir uma 31 31segunda subsequencia para processar escritas múltiplas que têm todas de ser executadas sem qualquer interrupção. 34a. - sistema para traduzir um primeiro código de programa para um segundo código de programa e para executar o segundo código de programa e para executar o segundo código de programa de uma maneira que preserve a atomicidade de estado do primeiro código, sendo o primeiro código de programa executável num computador tendo uma primeira arquitectura adaptada a um primeira conjunto de instruções e sendo o segundo código de programa executável num computador tendo um estado de memória e de registo e uma segunda arquitectura adaptada a um segundo conjunto de instrução e que é reduzido relativamente ao primeiro conjunto de instruções caracterizado por compreender; um primeiro sistema de computador tendo um primeiro processador traduzindo o primeiro código de programa para o segundo código de programa e um primeiro sistema de memória acoplado ao referido primeiro processador; meios para traduzir cada instrução sucessiva no primeiro código para as instruções no segundo código; meios para organizar as instruções de segundo código para cada instruções de primeiro código numa sequencia granular de instrução tendo por ordem pelo menos dois grupos, incluindo um primeiro grupo as instruções de segundo código que fazem trabalho de instrução para além de actualização de estado e podem ser abortadas após a execução sem arriscar a um erro de estado, e um segundo grupo tendo todas as instruções de actualização de estado de memória e de registo incluindo qualquer instrução especial de escrita necessidade para implementar a instrução de primeiro código a ser traduzida; um segundo sistema de computador para executar o segundo código gerado como "output" pelo referido sistema primeiro, de computador tendo o referido segundo sistema de computador a 32 32referida segunda arquitectura e tendo um segundo processador e um estado de memória e de registo incluindo um segundo sistema de memória acoplada ao referido segundo processador; meios para determinar durante a execução de segundo código a ocorrência de cada acontecimento interveniente que de facto ou possivelmente crie um conflito com a atomicidade de memória da referida primeira instrução escrita especial; meios para abortar para uma nova tentativa qualquer sequência de segunda instrução granular de segundo código para preservar a atomicidade de estado da instrução de primeiro código e a granularidade da instrução de primeiro código se ocorrer uma interrupção de acontecimento assíncrono durante a execução da sequencia antes das instruções de primeiro grupo terem sido executados, antes da execução de qualquer instrução de segundo grupo que esteja sujeita a uma possível excepção permitindo assim o processamento subsequente de um acontecimento assíncrono; meios para abortar para uma nova tentativa até a execução com sucesso estas completa a referida subsequencia de primeira instrução especial em qualquer sequencia de instrução granular de segundo código que inclua a referida mudança na primeira subsequencia se a referida primeira subsequencia por uma instrução de escrita simples incluindo passos múltiplos e se for detectada uma escrita conflituosa de ter sido feita por outro referido processador antes da completação da execução da referida primeira subsequencia; meios para abortar qualquer sequencia de instrução granular de segundo código que inclua a referida primeira subsequencia para uma nova tentativa se a referida primeira subsequencia for uma instrução for escrita simples e se ocorrer uma interrupção de acontecimento assíncrono durante a tentativa de execução da referida primeira subsequencia; e meios para atrasar o processamento de uma interrupção de acontecimento assíncrono e completando qualquer instrução 33 granular de segundo código sendo executada A) se a referida primeira subsequencia for uma instrução de escrita múltipla e estiver incluída na sequencia de instrução granular e se a interrupção de acontecimento assíncrono ocorrer quando muito após uma primeira escrita durante a execução da referida subsequencia de primeira instrução ou B) se o acontecimento assíncrono ocorrer após a execução de todas as instruções de actualização de estado no referido segundo grupo que estão sujeitos a nma possível excepção Lisboa, 6 de Março de 1992J. PEREIRA DA CRUZ Agente Oficial da Propriedade Industrial RUA VtCTOR CORDON, 10-A 3“ 1200 LISBOA
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US66607191A | 1991-03-07 | 1991-03-07 |
Publications (1)
Publication Number | Publication Date |
---|---|
PT100205A true PT100205A (pt) | 1994-04-29 |
Family
ID=24672704
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PT100205A PT100205A (pt) | 1991-03-07 | 1992-03-06 | Metodo e sistema para traduzir um primeiro codigo de programa para um segundo codigo de programa executaveis em computadores |
Country Status (15)
Country | Link |
---|---|
US (1) | US5636366A (pt) |
EP (1) | EP0537309B1 (pt) |
JP (1) | JPH0638234B2 (pt) |
KR (1) | KR950006616B1 (pt) |
AT (1) | ATE180908T1 (pt) |
CA (1) | CA2082408C (pt) |
DE (1) | DE69229319T2 (pt) |
FI (1) | FI925057A (pt) |
IE (1) | IE920739A1 (pt) |
IL (1) | IL100991A (pt) |
MX (1) | MX9200936A (pt) |
NO (1) | NO303419B1 (pt) |
PT (1) | PT100205A (pt) |
TW (1) | TW197505B (pt) |
WO (1) | WO1992015946A1 (pt) |
Families Citing this family (41)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3590075B2 (ja) * | 1992-01-20 | 2004-11-17 | 株式会社東芝 | 仮想記憶方式のデータ処理装置及び方法 |
US6091897A (en) | 1996-01-29 | 2000-07-18 | Digital Equipment Corporation | Fast translation and execution of a computer program on a non-native architecture by use of background translator |
US6535903B2 (en) | 1996-01-29 | 2003-03-18 | Compaq Information Technologies Group, L.P. | Method and apparatus for maintaining translated routine stack in a binary translation environment |
US5778211A (en) * | 1996-02-15 | 1998-07-07 | Sun Microsystems, Inc. | Emulating a delayed exception on a digital computer having a corresponding precise exception mechanism |
US5875318A (en) * | 1996-04-12 | 1999-02-23 | International Business Machines Corporation | Apparatus and method of minimizing performance degradation of an instruction set translator due to self-modifying code |
US5764962A (en) * | 1996-07-31 | 1998-06-09 | Hewlett-Packard Company | Emulation of asynchronous signals using a branch mechanism |
US6052530A (en) * | 1996-10-09 | 2000-04-18 | Hewlett-Packard Co. | Dynamic translation system and method for optimally translating computer code |
US5828897A (en) * | 1996-12-19 | 1998-10-27 | Raytheon Company | Hybrid processor and method for executing incrementally upgraded software |
US6567910B2 (en) * | 1998-02-13 | 2003-05-20 | Texas Instruments Incorporated | Digital signal processing unit with emulation circuitry and debug interrupt enable register indicating serviceable time-critical interrupts during real-time emulation mode |
US8631066B2 (en) * | 1998-09-10 | 2014-01-14 | Vmware, Inc. | Mechanism for providing virtual machines for use by multiple users |
US7516453B1 (en) * | 1998-10-26 | 2009-04-07 | Vmware, Inc. | Binary translator with precise exception synchronization mechanism |
US6954923B1 (en) | 1999-01-28 | 2005-10-11 | Ati International Srl | Recording classification of instructions executed by a computer |
US6763452B1 (en) | 1999-01-28 | 2004-07-13 | Ati International Srl | Modifying program execution based on profiling |
US7065633B1 (en) | 1999-01-28 | 2006-06-20 | Ati International Srl | System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU |
US8065504B2 (en) * | 1999-01-28 | 2011-11-22 | Ati International Srl | Using on-chip and off-chip look-up tables indexed by instruction address to control instruction execution in a processor |
US7013456B1 (en) | 1999-01-28 | 2006-03-14 | Ati International Srl | Profiling execution of computer programs |
US6978462B1 (en) | 1999-01-28 | 2005-12-20 | Ati International Srl | Profiling execution of a sequence of events occuring during a profiled execution interval that matches time-independent selection criteria of events to be profiled |
US8074055B1 (en) | 1999-01-28 | 2011-12-06 | Ati Technologies Ulc | Altering data storage conventions of a processor when execution flows from first architecture code to second architecture code |
US7275246B1 (en) | 1999-01-28 | 2007-09-25 | Ati International Srl | Executing programs for a first computer architecture on a computer of a second architecture |
US8127121B2 (en) | 1999-01-28 | 2012-02-28 | Ati Technologies Ulc | Apparatus for executing programs for a first computer architechture on a computer of a second architechture |
US7111290B1 (en) | 1999-01-28 | 2006-09-19 | Ati International Srl | Profiling program execution to identify frequently-executed portions and to assist binary translation |
US7941647B2 (en) | 1999-01-28 | 2011-05-10 | Ati Technologies Ulc | Computer for executing two instruction sets and adds a macroinstruction end marker for performing iterations after loop termination |
US6779107B1 (en) | 1999-05-28 | 2004-08-17 | Ati International Srl | Computer execution by opportunistic adaptation |
US6549959B1 (en) | 1999-08-30 | 2003-04-15 | Ati International Srl | Detecting modification to computer memory by a DMA device |
US7761857B1 (en) * | 1999-10-13 | 2010-07-20 | Robert Bedichek | Method for switching between interpretation and dynamic translation in a processor system based upon code sequence execution counts |
US6934832B1 (en) | 2000-01-18 | 2005-08-23 | Ati International Srl | Exception mechanism for a computer |
US6594821B1 (en) | 2000-03-30 | 2003-07-15 | Transmeta Corporation | Translation consistency checking for modified target instructions by comparing to original copy |
US6615300B1 (en) | 2000-06-19 | 2003-09-02 | Transmeta Corporation | Fast look-up of indirect branch destination in a dynamic translation system |
GB2367653B (en) * | 2000-10-05 | 2004-10-20 | Advanced Risc Mach Ltd | Restarting translated instructions |
US6829630B1 (en) * | 2000-11-24 | 2004-12-07 | Xerox Corporation | Mechanisms for web-object event/state-driven communication between networked devices |
US20030120899A1 (en) * | 2001-12-20 | 2003-06-26 | Stotzer Eric J. | Apparatus and method for processing an interrupt in a software pipeline loop procedure in a digital signal processor |
US6895460B2 (en) | 2002-07-19 | 2005-05-17 | Hewlett-Packard Development Company, L.P. | Synchronization of asynchronous emulated interrupts |
JP3900485B2 (ja) * | 2002-07-29 | 2007-04-04 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 最適化装置、コンパイラプログラム、最適化方法、及び記録媒体 |
US7310723B1 (en) | 2003-04-02 | 2007-12-18 | Transmeta Corporation | Methods and systems employing a flag for deferring exception handling to a commit or rollback point |
US8413162B1 (en) | 2005-06-28 | 2013-04-02 | Guillermo J. Rozas | Multi-threading based on rollback |
US8726248B2 (en) * | 2008-06-12 | 2014-05-13 | Oracle America, Inc. | Method and apparatus for enregistering memory locations |
US8438558B1 (en) | 2009-03-27 | 2013-05-07 | Google Inc. | System and method of updating programs and data |
US9824039B2 (en) * | 2013-09-09 | 2017-11-21 | International Business Machines Corporation | Signal interrupts in a transactional memory system |
US11061685B2 (en) | 2019-02-27 | 2021-07-13 | International Business Machines Corporation | Extended asynchronous data mover functions compatibility indication |
US10698854B1 (en) * | 2019-02-27 | 2020-06-30 | International Business Machines Corporation | Secure and efficient application data processing |
US11449367B2 (en) | 2019-02-27 | 2022-09-20 | International Business Machines Corporation | Functional completion when retrying a non-interruptible instruction in a bi-modal execution environment |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4674038A (en) * | 1984-12-28 | 1987-06-16 | International Business Machines Corporation | Recovery of guest virtual machines after failure of a host real machine |
US5218712A (en) * | 1987-07-01 | 1993-06-08 | Digital Equipment Corporation | Providing a data processor with a user-mode accessible mode of operations in which the processor performs processing operations without interruption |
US5193167A (en) * | 1990-06-29 | 1993-03-09 | Digital Equipment Corporation | Ensuring data integrity by locked-load and conditional-store operations in a multiprocessor system |
-
1991
- 1991-07-17 TW TW080105540A patent/TW197505B/zh active
-
1992
- 1992-02-18 IL IL10099192A patent/IL100991A/en not_active IP Right Cessation
- 1992-03-03 EP EP92908711A patent/EP0537309B1/en not_active Expired - Lifetime
- 1992-03-03 KR KR1019920702757A patent/KR950006616B1/ko not_active IP Right Cessation
- 1992-03-03 WO PCT/US1992/001715 patent/WO1992015946A1/en active IP Right Grant
- 1992-03-03 DE DE69229319T patent/DE69229319T2/de not_active Expired - Fee Related
- 1992-03-03 JP JP4507853A patent/JPH0638234B2/ja not_active Expired - Lifetime
- 1992-03-03 CA CA002082408A patent/CA2082408C/en not_active Expired - Fee Related
- 1992-03-03 AT AT92908711T patent/ATE180908T1/de not_active IP Right Cessation
- 1992-03-04 MX MX9200936A patent/MX9200936A/es unknown
- 1992-03-06 PT PT100205A patent/PT100205A/pt not_active Application Discontinuation
- 1992-03-06 IE IE073992A patent/IE920739A1/en not_active Application Discontinuation
- 1992-11-05 NO NO924260A patent/NO303419B1/no unknown
- 1992-11-06 FI FI925057A patent/FI925057A/fi unknown
-
1995
- 1995-10-30 US US08/549,889 patent/US5636366A/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
EP0537309B1 (en) | 1999-06-02 |
FI925057A0 (fi) | 1992-11-06 |
TW197505B (pt) | 1993-01-01 |
IE920739A1 (en) | 1992-09-09 |
ATE180908T1 (de) | 1999-06-15 |
NO924260L (no) | 1993-01-06 |
JPH05505693A (ja) | 1993-08-19 |
JPH0638234B2 (ja) | 1994-05-18 |
NO924260D0 (no) | 1992-11-05 |
KR950006616B1 (ko) | 1995-06-19 |
AU1571492A (en) | 1992-10-06 |
CA2082408A1 (en) | 1992-09-08 |
IL100991A (en) | 1996-09-12 |
CA2082408C (en) | 1998-11-17 |
MX9200936A (es) | 1993-04-01 |
EP0537309A1 (en) | 1993-04-21 |
FI925057A (fi) | 1992-11-06 |
NO303419B1 (no) | 1998-07-06 |
AU654707B2 (en) | 1994-11-17 |
DE69229319T2 (de) | 2000-01-27 |
US5636366A (en) | 1997-06-03 |
WO1992015946A1 (en) | 1992-09-17 |
DE69229319D1 (de) | 1999-07-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
PT100205A (pt) | Metodo e sistema para traduzir um primeiro codigo de programa para um segundo codigo de programa executaveis em computadores | |
JP3093624B2 (ja) | 投機例外を処理する方法及び装置 | |
US5307504A (en) | System and method for preserving instruction granularity when translating program code from a computer having a first architecture to a computer having a second reduced architecture during the occurrence of interrupts due to asynchronous events | |
Pulte et al. | Promising-ARM/RISC-V: a simpler and faster operational concurrency model | |
PT100206B (pt) | Metodo para operar um computador digital e sistema de computador digital | |
US20100095286A1 (en) | Register reduction and liveness analysis techniques for program code | |
US20120198428A1 (en) | Using Aliasing Information for Dynamic Binary Optimization | |
JP2001504957A (ja) | 先進のプロセッサにおけるメモリ・データ・エリアシング方法および装置 | |
US20120131559A1 (en) | Automatic Program Partition For Targeted Replay | |
Travkin et al. | SPIN as a linearizability checker under weak memory models | |
JPH03116234A (ja) | 複数の命令ソースを有するマルチプロセッサシステム | |
US20050251791A1 (en) | Systems and methods for branch profiling loops of an executable program | |
US9129062B1 (en) | Intercepting subroutine return in unmodified binaries | |
Xiang et al. | Composable partitioned transactions | |
Spear et al. | Reducing memory ordering overheads in software transactional memory | |
US7823141B1 (en) | Using a concurrent partial inspector loop with speculative parallelism | |
Kistler et al. | Detecting race conditions in asynchronous DMA operations with full system simulation | |
de Putter et al. | Lock and fence when needed: state space exploration+ static analysis= improved fence and lock insertion | |
Cooperman et al. | Sthread: In-Vivo Model Checking of Multithreaded Programs | |
Klemmer et al. | Programming Language Assisted Waveform Analysis: A Case Study on the Instruction Performance of SERV | |
Gückel et al. | A system for synthesizing abstraction-enabled simulators for binary code verification | |
Van Veen | Concurrent Linking with the GNU Gold Linker | |
Davidson | A case study of the migration of an algorithm across software-firmware boundaries | |
Krukov et al. | Debugging DVM programs | |
Putigny | Internship report |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
BB1A | Laying open of patent application |
Effective date: 19930920 |
|
FC3A | Refusal |
Effective date: 19990224 |