NO303419B1 - FremgangsmÕter og systemer for Õ bevare kildeinstruksjonens atomitet i oversatt programkode - Google Patents

FremgangsmÕter og systemer for Õ bevare kildeinstruksjonens atomitet i oversatt programkode Download PDF

Info

Publication number
NO303419B1
NO303419B1 NO924260A NO924260A NO303419B1 NO 303419 B1 NO303419 B1 NO 303419B1 NO 924260 A NO924260 A NO 924260A NO 924260 A NO924260 A NO 924260A NO 303419 B1 NO303419 B1 NO 303419B1
Authority
NO
Norway
Prior art keywords
instruction
code
write
execution
subsequence
Prior art date
Application number
NO924260A
Other languages
English (en)
Other versions
NO924260D0 (no
NO924260L (no
Inventor
Scott G Robinson
Richard L Sites
Richard T Witek
Original Assignee
Digital Equipment Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Digital Equipment Corp filed Critical Digital Equipment Corp
Publication of NO924260D0 publication Critical patent/NO924260D0/no
Publication of NO924260L publication Critical patent/NO924260L/no
Publication of NO303419B1 publication Critical patent/NO303419B1/no

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/52Binary to binary
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30076Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
    • G06F9/30087Synchronisation or serialisation instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3834Maintaining memory consistency
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract 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)
  • Devices For Executing Special Programs (AREA)
  • Diaphragms For Electromechanical Transducers (AREA)
  • Debugging And Monitoring (AREA)
  • Investigating, Analyzing Materials By Fluorescence Or Luminescence (AREA)
  • Luminescent Compositions (AREA)
  • Retry When Errors Occur (AREA)
  • Exchange Systems With Centralized Control (AREA)

Description

Foreliggende oppfinnelse angår fremgangsmåter og systemer for tilpasning av programkoder til utførelse på forskjellige datamaskinsystemer, slik som oversettelse av koder basert på et instruks-onssett til koder basert på et forholdsvis redusert instruksjonssett samtidig med bevarelse av instruk-sjonenes tilstandsatomitet.
Nærmere bestemt er fremgangsmåtene av slik type som angitt i ingressen av henholdsvis de etterfølgende patentkrav 1, 4, 7, 9 og 10. Videre er systemene av sl ilk type som angitt i ingressen av henholdsvis de etterfølgende patentkrav 11, 14, 16 og 17.
I de tidligere år med dataprogrammering ble instruksjoner for dataprogrammer frembragt på mikrokodenivået. Med utvikling og vekst av programvareutvikling ble flere oppgaver kombinert i enkle komplekse instruksjoner som kunne utføres av datamaskiner med en maskinvarearkitektur tilpasset instruksjonens kompleksitet.
Økende instruksjonskompleksitet førte i alminnelighet til økende pris/ytelsesfordeler ved utviklingsomgivelsen for omkostningene ved datamaskinvare og ytelsesmuligheter. Som et resultat, fikk komplekse instruksjonssettkoder (CISC) bred anvendelse.
Med øket instruksjonskompleksitet har det imidlertid vist seg å være vanskeligere å utvikle systemmaskinvare for høyere utførelseshastighet. I stedet har en redusert instruksjons-settkode (RISC) kombinert med korrelert RlSC-datamaskin-varearkitektur blitt vel mottatt >som en mekanisme som fører til forbedret systempris/ytelse.
Et RISC-system benytter i alminnelighet enklere grunninstruk-sjoner for å lede de ønskede operasjoner. En enkel RISC-instruksjon spesifiserer normalt en enkel operasjon med høyst en enkel minnetilgang. Videre fører et RISC-system normalt til bruk av et register for hver grunninstruksjon. Instruksjonene i et RISC-instruksjonssett ligger fremdeles over mikrokodenivået.
I det typiske CISC-systemet kan en enkel instruksjon spesifisere en kompleks sekvens av operasjoner og kan ha mange direkte tilganger til minner. Dermed kan operasjoner som utføres etter en CISC-instruksjon kreve flere RISC-instruksjoner.
Et RISC-system er i alminnelighet bygget opp med optimali-serte maskinvare- og programvarekompromisser som byr på hurtigere systemoperasjon, en samlet bedre systemytelse og lavere systemomkostninger i forhold til tilgjengelige maskinvareomkostninger og ytelsesevne.
En hindring ved overgangen fra CISC-systemer til RISC-systemer er eksistensen av store programbiblioteker som er blitt utviklet for CISC-systemer og som vanligvis ikke er tilgjengelige for RISC-systemer. Når en bruker av et datasystem velger å anskaffe et nytt datasystem, vil en av brukerens hovedbetraktninger være om brukerens bibliotek med anvendelsesprogr ammer kan omdannes til bruk i det nye datasystem eller hva omkostningene ville være ved utskifting av biblioteket. For datasystembrukere som ønsker å oppnå bedre pris/ytelse med RISC-datasystemer er det av største viktighet at det finnes en økonomisk og effektiv mekanisme for tilpasning eller "utflytting" av brukerens bibliotek med anvendelsesprogrammer slik at de kan utføres på RISC-datasystemet.
Det finnes flere valgmuligheter for brukeren når det gjelder programutflytting. Rekompilering eller omkoding kan anvendes, men disse teknikker benyttes vanligvis for utflytting av programmer som er skrevet i et høynivåspråk som for eksempel FORTRAN og som enten ikke har noen detaljerte maskinavhengigheter eller har fått eventuelle eksisterende maskinavhengigheter fjernet ved manuelle programmeringsmodi-fikasjoner. Ved rekompllering eller omkoding vil dessuten brukeren vanligvis måtte ta alt ansvar for programmodifika-sjonen og for garantier som gjelder programmets opptreden.
Som et alternativ kan tolkningsprosedyrer anvendes, men resultatet for denne løsning er vanligvis en betydelig redusert programytelse.
Mer bestemt er tolkningsprosedyrer programvare som kjøres på en datamaskin og leser en strøm av subj ektinstruksjoner (som godt kan være instruksjoner for en annen type datamaskin) som databg som for hver subjektinstruksjon utfører den angitte operasjon. Slike prosedyrer utfører vanligvis 10 til 100 maskininstruksjoner på den ene datamaskinen for å tolke en enkel subjektinstruksjon. Tolkingsprosedyrer fører derfor til betydelig redusert programytelse sammenlignet med direkte utførelse av funksjonelt ekvivalent kode på den ene datamaskinen .
Den mest effektive og virkningsfulle utflytting innebærer imidlertid kodeoversettelse. Ved kodeoversettelse blir hver instruksjon fra,et eksisterende program oversatt til en eller flere instruksjoner I språket for mottagermaskinen. Som en følge av dette vil en oversettelse av CISC-programmer til RISC-programmer eller mer generelt en programoversettelse der den oversatte kode har et relativt redusert instruksjonssett kreve "flere" eller "mange" Instruksjoner i den oversatte kode for hver instruksjon i den kode som oversettes. Hvis det gjøres "en til mange" eller CISC-til-RISC-kodeoversettel-ser, er det generelt sett vanskelig å bevare mange av de garantier for instruksjonens opptreden som opprinnelig ble gitt av CISC eller en annen forholdsvis kompleks kode.
En normal CISC-garanti som byr på en viss vanskelighet ved oversettelsen er kravet om at ingen annen CISC-lnstruksjon eller del av en slik kan utføres mellom begynnelse og avslutning av en enkel CISC-instruksjon. Således er det av største viktighet ved oversettelse av CISC til RISC at denne type instruks;) onshelhet eller granularitet blir bevart. Bevarelse av instruksjonens granularitet krever at tilstands-eller mlnneatomitet bevares. Således må enten alle minnetil-ganger i en instruksjon tilsynelatende foregå eller ingen må synes å foregå i den oversatte kode.
For å bevare instruksjonens granularitet i oversettelsesprosessen må det gis forsikringer om at hvert sett eller "granule" av oversatte instruksjoner svarende til hver mer kompleksinstruksjon vil kunne utføres for å frembringe samme resultat som den tilsvarende mer komplekse instruksjon ville ha frembragt. Dette må holdes stikk selv om asynkrone hendelsser kan oppstå under utførelsen av en hvilken som helst av "granulene" I enklere oversatte instruksjoner.
En annen løsning kan sørge for bevaring av instruksjonsgranularitet ved kodeoversettelse og ved utførelse av den oversatte kode. En slik løsning vil også vanligvis gi tilstandsatomitet og kunne beskrive en mekanisme og prosedyre for å sikre tilstandsatomitet når det gjelder en-skriveinstruksjoner i CISC-koden eller en annen kode som skal oversettes.
En en-skriveinstruksjon innbefatter høyst en tilstandsskriving som muligens kan støte på en unntagelse, men kan innbefatte et ubegrenset antall unntagelsesfrie tilstandsskrivinger. Ingen overlapping oppstår mellom de to typer tilstandsskrivninger.
v
Uttrykket "unntagelse" er her ment å vise til en tilstand som hindrer fortsettelse av utførelsen av en instruksjon. Typiske unntagelser innbefatter: a. minneunntagelser som for eksempel en sldefell eller en
tllgangshindrlng;
b. aritmetiske unntagelser som for eksempel en flytende-kommaoverflyt eller en dele-med-null; og
c. instruksjonsunntagelser som en illegal operasjonskode
eller en bruddpunktinstruksjon.
Tilstandsatomitet er ekvivalent med instruksjonsgranularitet når det gjelder en en-skriveinstruksjon som blir oversatt. Imidlertid innbefatter andre sorter instruksjoner som må oversettes sekvenser som byr på spesielle problemer når det gjelder å bevare tilstandsatomiteten og instruksjonsgranulariteten. Slike instruksjoner innbefatter de som har: a. en lese-modifiser-skrivesekvens som er "stengt" eller en lese-modifiser-skrive som krever en delvis-minne-ord-skrive og som må utføres på et flerprosessorsystem uten
me11omkommende skriving av en annen prosessor, og
b. flertilstands skrivinger som eventuelt kan støte på en unntagelse og der enten alle tilsynelatende må finne sted eller ikke finne sted.
I disse spesielle tilfeller er mer bestemte mekanismer og prosedyrer nødvendige for å adressere de spesielle forhold man står overfor ved forsøk på å oppnå tilstandsatomitet og instruksjonsgranularitet i den oversatte kode. Når det gjelder instruksjoner med flere tilstandsskrivinger, oppstår et tilstandsatomitetproblem der en asynkron hendelse oppstår under utførelse av en instruksjonssekvens etter at minst en, men før alle (minne eller register) skrivinger er blitt utført. Således vil en unntagelse oppstå i en av de oversatte kodeinstruksjoner som er tilbake og skal utføres i sekvensen slik at hvis utførelsen av instruksjonens granule enten blir avbrutt eller fortsatt, kan en tilstandsfeil dannes siden en irreversibel tilstandsforandring allerede kan ha funnet sted med den ene tilstandsskriving som allerede er utført.
Når det gjelder utførelsen av den oversatte kode i et system som har flere prosessorer og et felles minne, kan det oppstå et tilstandsatomitetproblem siden den første prosessor hvori den oversatte kode utføres kan utføre delvis en lese-modif iser-skrivesekvens i en instruksjonsgranule og deretter, men før lese-modifiser-skrivesekvensen er fullført, kan en annen prosessor skrive til det tilstandslagersted som er adressert med lese-skrive-modifisersekvensen. Videre, hvis instruksjonsgranulens utførelse enten blir avbrutt eller fortsatt etter den motstridende tilstandstilgang med den andre prosessoren, kan det oppstå en tilstandsfeil siden en ureverserbar tilstandsforandring allerede har kunnet finne sted.
Foreliggende oppfinnelse er således rettet mot en struktur og prosedyre til frembringelse og utførelse av oversatte koder med relativt reduserte instruksjonssett fra eksisterende koder som har mer komplekse instruksjonssett samtidig med at instruksjonsgranulariteten bevares og tilstandsatomitet bibeholdes der kodene innbefatter instruksjoner som innebærer spesielle omstendigheter så som multiple eller delvise skrivinger, sperreinstruksjoner og omgivelser for en flerprosessorutførelse. Foreliggende oppfinnelse åpner dermed for virkeliggjørelse av forbedringer når det gjelder datasystemets pris/ytelsesforhold samtidig med at investeringer når det gjelder anvendelseskode kan nyttiggjøres også i tilfeller der slike spesielle omstendigheter er tilstede.
Et system eller en fremgangsmåte er tilveiebragt for oversettelse av en første programkode til en andre programkode og for utførelse av den andre programkode med bevaring av instruksjonens tilstandsatomitet for den første kode. Den første programkode kan utføres på en datamaskin med en første arkitektur som er tilpasset et første instruksjonssett og det andre program kan utføres på en datamaskin med en minne- og registertilstand og en andre arkitektur tilpasset et andre instruksjonssett som er redusert i forhold til det første instruksjonssett.
En første datamaskin oversetter de første kodeinstruksjoner til tilsvarende andre kodeinstruksjoner i overensstemmelse med en mønsterkode som definerer de første kodeinstruksjoner uttrykt som andre kodeinstruksjoner. De andre kodeinstruksjoner for hver første kodeinstruksjon er organisert i en granular instruksjonssekvens som i rekkefølge har minst to grupper, en første gruppe innbefattende de andre kodeinstruksjoner som gjør annet instruksjonsarbeid enn tilstandsoppdatering og som kan bli avbrutt etter utførelse uten risiko for en tilstandsfeil og en andre gruppe som har alle minne-og registertilstands oppdateringsinstruksjoner innbefattende eventuell spesiell skriveinstruksjon som er nødvendig for å implementere den første kodeinstruksjon som blir oversatt.
En første spesiell skriveinstruksjon blir strukturert for å inneholde en første delsekvens for behandling av en enkel skriving til et første minnelagersted i overensstemmelse med et krav om at den første delsekvens må bli utført uten avbrudd og uten me11omkommende motstridende skrivinger til det første minnelagersted av en eller annen prosessor som kan bli koblet til minnetilstanden. Videre blir en andre spesiell skriveinstruksjon strukturert for å innbefatte en andre delsekvens til behandling av flere skrivinger som alle må bli utført uten noe avbrudd.
Et andre datasystem er tilpasset den andre arkitektur for å utføre den andre programkode. Under utførelsen av den andre programkode finnes det midler til bestemmelse av opptreden av hver asynkrone hendelse under utførelsen av den andre kode og opptreden av hver motstridende skriving til det første minnelagersted av den andre prosessor hvis den blir koblet til minnetilstanden.
Enhver granular andre kodeinstruksjonssekvens blir avbrutt for et gjenforsøk for å bevare den første kodeinstruksjons tilstandsatomitet og første kodeinstruksjons granularitet hvis en asynkron hendelse fører til avbrudd under sekvensens utførelse før alle førstegruppe instruksjonene er blitt utført eller hvis de førstegruppe instruksjonene er blitt utført før utførelsen av enhver andregruppe instruksjon som kan få et mulig unntak og dermed åpne for påfølgende behandling av den asynkrone hendelse.
Den første spesielle instruksjonsdelsekvens i enhver granular andre kodeinstruksjonssekvens som innbefatter den første delsekvens blir avbrutt for et gjenforsøk inntil vellykket utførelse blir foretatt hvis en motstridende skriving gjøres av den andre prosessor før fullførelse av utførelsen av den første delsekvens. Enhver granular andre kodeinstruksjonssekvens som innbefatter den første delsekvens blir avbrutt for et gjenforsøk hvis en asynkron hendelsesavbrytning finner sted under forsøkt utførelse av den første delsekvens.
Behandlingen av en asynkron hendelsesavbrytelse blir forsinket og enhver granular andre kodeinstruksjonssekvens som er under utførelse blir fullført A) hvis den andre delsekvens er innbefattet i den granulare instruksjonssekvens og hvis den asynkrone hendelsesavbrytelse opptrer høyst etter en første skriving under utførelsen av den andre instruksjonsdelsekvens, eller B) hvis den asynkrone hendelsesavbrytelse finner sted etter utførelse av alle tilstandsoppdater-ingsinstruksjoner i den andre gruppe som er utsatt for mulig unntak.
De innledningsvis definerte fremgangsmåter og systemer kjennetegnes, ifølge oppfinnelsen, ved de i kravene gjengitte trekk og vil i det følgende bli forklart nærmere under henvisning til tegningene som her er tatt med i, og utgjør en del av, denne beskrivelse, og som viser en utførelsesform for oppfinnelsen, og sammen med beskrivelsen, gir en forklaring på hensikter, fordeler og prinsipper ved oppfinnelsen, og der: fig. 1 er et samlet funksjonsblokkdiagram som viser den generelle måte hvorpå anvendelsesprogrammer blir a) dannet for utførelse på et første datasystem (med et første instruksjonssett og betegnet som X) og b) oversatt med X-instruksjonens tilstandsatomitet og instruksjonsgranularitet i overensstemmelse med foreliggende oppfinnelse til utførelse på et annet datasystem (betegnet som Y) med et relativt redusert
instruksjonssett,
fig. 2 er et generelt funksjonsblokkdiagram for det foretrukne X-Y-oversettelsesprogram og et flerbruks datasystem hvori X-Y-oversettelsesprogrammet utføres for å frembringe, med X-instruksjonens tilstandsatomitet, en Y-utførbar anvendelseskode på grunnlag av en
inngangs X-anvendelseskode,
fig. 3 er et generelt flytskjema for X-Y-oversettelsesprogrammet i henhold til foreliggende oppfinnelse,
fig. 4 er et funksjonsblokkdiagram for Y-datasystemet med den oversatte kode eller Y-koden lastet inn sammen med et instruksjonsgranularitetsstyrende (IGC) program; en koderutine for et prlviligert arkitekturbibliotek (PAL) og en lastlåst betingelsessekvens lagret for styring av Y-kodens utførelse med bevaring av instruksjonsgranularitet og tilstandsatomitet i
henhold til foreliggende oppfinnelse,
fig. 5A og 5B er et flytskjema som representerer funksjons-trinnene som utføres av IGC-programmet,
fig. 6 er et diagram som symboliserer en X-Y-kodeinstruksjons oversettelse innbefattende flere skrivinger og
det forhold asynkrone hendelser har til dette,
fig. 7 viser PAL-koderutinene på fig. 4 med detaljer som angir den måte hvorpå den anvendes ifølge foreliggende oppfinnelse for å bevare tilstandsatomitet og
instruksjonsgranularitet hvis det finnes flere
minneskrivinger, og
fig. 8 er et flytskjema som viser den laststengte/lagrebe-tingede sekvens på fig. 4 med detaljer som angir den måte hvorpå den anvendes i henhold til foreliggende oppfinnelse for å bevare tilstandsatomitet og instruksjonsgranularitet hvis man har delvls-skrive og låseoppdaterende instruksjoner.
Som vist på fig. 1, er et anvendelsesprogram 10 som er skrevet i kildekode et av et antall anvendelsesprogrammer som finnes i en brukers programbibliotek til utførelse på et X-datasystem 12. Maskinvarearkitekturen for X-datasystemet 12 er tilpasset til drift med X-instruksjonssett som anvendes ved frembringelsen av en utførbar form av programmet 10 eller andre anvendelsesprogrammer i brukerens bibliotek.
For å tilpasse programmet 10 til bruk i et Y-datasystem 20 er det nødvendig for den utførbare form av programmet 10 å bli omdannet som en Y-utførbar kode 22 der det anvendes et Y-instruksjonssett som maskinvarearkitekturen i Y-datasystemet 20 er avpasset til.
Y-instruksjonssettet benytter I alminnelighet færre grunn-instruksjoner enn det som anvendes i X-instruksjonssettet og omdannelse av X-kode til Y-kode krever "en til mange" instruksjonsoversettelser. X-instruksjonssettet kan være et CISC-instruksjonssett og Y-instruksjonssettet kan være et RISC-instruksjonssett. For eksempel, som spesielt angitt for illustrasjonens skyld på fig. 1, kan X-systemet ha VAX?-arkitektur og Y-systemet kan anvende VAX? RISC-arkitektur som begge leveres av Digital Equipment Corporation, som er søker i den foreliggende ansøkning.
Som vist på fig. 1, kan anvendelsesprogrammet 10 utflyttes til Y-utførbare kode 22 langs en enten Indirekte bane 24 eller en direkte bane 26. Direkte utflytting oppnås ved bruk av en Y-kompilator 28 og en Y-lenker 30. Den resulterende Y-utførbare kode er betegnet med henvisningstallet 22B.
Hvis en Y-kompilator 28 og Y-lenker 30 ikke er blitt utviklet eller ikke er tilgjengelige, eller hvis brukeren av andre årsaker velger ikke å benytte den direkte utflyttingsbane 26 på grunn av medfølgende ulemper, blir den indirekte bane 24 benyttet i overensstemmelse med foreliggende oppfinnelse til utflytting av X-anvendelsesprogrammet til Y-systemet for å oppnå både besparelser ved investeringer i program og et system med bedre ytelse.
I den indirekte bane blir programmet 10 omdannet til en utførbar kode 14 for X-datasystemet 12 ved hjelp av en X-kompllator 16 og en X-lenker 18. Resultatet er en X-utførbar kode 14 som kan kjøres på X-datasystemet 12.
En X-Y-oversetter 32 er anordnet i den foretrukne utførelses-form for å oversette den X-utførbare koden 14 til den tilsvarende Y-utførbare anvendelseskode som er betegnet med henvisningstallet 22A. Kodeoversettelsen er fremkommet slik at Y-kodens utførelse får nøyaktig X-kodens resultater med instruksjonsgranularitet og tilstandsatomitet selv om Y-koden er basert på et redusert instruksjonsssett.
Et kodeoversettelsessystem 40 (fig. 2) anvendes for å implementere den oversetter 32 som det er vist til på fig. 1. Oversettelsessystemet 40 innbefatter en vanlig flerbruks datamaskin med en prosessor 42, en minnesystem 44 og forskjellige inngangs/utgangsanordninger der X-anvendelses-koden 43 føres som inngang for oversettelse.
Oversettelsesresultåtene frembringes i overensstemmelse med foreliggende oppfinnelse som Y-kode 45 som blir ordnet og ellers strukturert for å gi sikre garantier for at koden blir oversatt. Y-koden 45 er særlig strukturert for å lette en garantert bevaring av X-instruksjonens granularitet og tilstandsatomitet når Y-koden egentlig utføres. Som et eksempel på sikre CISC-garantier„ innbefatter VAX?-arkitekturen de følgende garantier og standarder: 1. En enkel instruksjon må enten kjøres fullstendig eller tilsynelatende aldri ha startet - - det er ikke tillatt delvis å utføre en instruksjon, oppheve den, gjøre andre instruksjoner, og eventuelt omstarte den opphevede instruksjonen i midten. 2. Minne er virtuelt slik at enhver minnetilgang kan støte på en sidefeil eller et tilgangsbeskyttende unntak, noe som bevirker at instruksjonen ikke fullføres. 3. En enkel instruksjon kan skrive flere minnelagersteder; enten må alle skrives eller ingen. Hvis ingen opptrer, vil instruksjonen bli omstartet fra begynnelsen og ikke fra det punktet der skrivingen sviktet. 4. Minneoperander kan (delvis) overlappe slik at utførelsen av mange skrivinger og deretter stans kan overskrive kildeoperander og gjøre omstarting av instruksjonen umulig. 5. En enkel instruksjon kan utføre en lese-modifisere-skrive sekvens. 6. Instruksjonsoperander kan være en vilkårlig bytelengde ved vilkårlige byteadresser, mens minnemaskinvarens implementer-inger vanligvis bare kan lese eller skrive et helt antall innrettede minneord, vanligvis bestående av 4 eller 8 byter. På denne måten kan en enkel operand spenne over 2 eller flere minneord og å få tilgang til en enkel operand kan innebære dannelse av tilgang til ekstra byter i det første og det siste minneord. 7. I et flerprosessorsystem må tilganger til sammenstående byter for forskjellige prosessorer alltid tilsynelatende være uavhengig - dvs. skrivebyte 5 på en prosessor må ikke forstyrre skrivebyte 6 på en annen prosessor selv om begge skrivinger innebærer lese-modifiser-skrivesekvenser til samme minneord. 8. I et multiprosessorsystem må tilganger via stengte Instruksjoner alltid opptre som atomiske -- dvs. et stengt lese-modifiser-skrive til byte 4 på en prosessor må aldri forstyrre en stengt lese-modifiser-skrive til samme lagersted 1 en annen prosessor.
Minnesystemet 44 innbefatter blant andre seksjoner en vanlig datalagerseksjon 46 og en seksjon 48 hvori datamaskinens operativsystem er lagret. Et grunnelement som blir anvendt i X-Y-kodeoversettelsen er et oversettelsesprogram 50 som er lagret i en annen minneseksjon. Inngangs X-koden 43 er lagret som en X-kodeliste 62. For dessuten å styre sekvens-eringen av Y-instruksjonene blir Y-instruksjons ordningskriterier 52 lagret og X-Y-instruksjons kodemønstre 54 blir lagret for å muliggjøre oversettelse av både operasjonsspesi-fikatorer og operandspesifikatorer for instruksjonen.
Et generelt flytskjema er vist for oversettelsesprogrammet 50 i dets foretrukne utførelsesform på fig. 3. På hverandre følgende X-instruksjoner blir innført sekvensielt med en blokk 60 fra den lagrede X-kodeliste 62 for behandling gjennom en programsløyfe 64.
I sløyfen 64 frembringeren funksjonsblokk 66 operasjons- og operandspesifikatorer for instruksjonen der denne tilsvarer X-instruksjonen som på dette tidspunkt er under behandling. Spesifikatorene blir frembragt ifølge de lagrede X-Y-kodemønstre 54 (flg. 2). Deretter som angitt med funksjonsblokken 68, blir den resulterende Y-kode ordnet i overensstemmelse med på forhånd bestemte kriterier som resulterer i en forenklet bevaring av X-instruksjonens granularitet under den påfølgende egentlige utførelse av Y-koden.
En grafisk gjengivelse av en X-Y-instruksjonsoversettelse er vist på fig. 6.
Hver X-instruksjon sørger i alminnelighet for de elementære oppgaver med å skaffe innganger, modifisering av innganger, anbringelse av resultatene i midlertidig lager og frembringelse av en tilstandsoppdatering for minnet og lagersteder i registeret. Når en X-instruksjon blir oversatt til "mange" Y-instruksjoner, er de ordningskriterier 52 (fig. 2) som anvendes for å organisere Y-instruksjonene fortrinnsvis de sosm grupperer og ordner Y-instruksjonene i Y-koden for den pågående oversatte X-instruksjon (granule) som følger: 1. En første gruppe G2 med Instruksjoner i Y-koden er de som får innganger og plasserer disse innganger i et midlertidig lager. 2. En andre gruppe G2 med instruksjoner i Y-koden er de som opererer på innganger og frembringer modifiserte resultater og lagrer disse resultater i midlertidige lagre. 3. En tredje gruppe G3 med instruksjoner i Y-koden er de som oppdaterer X-tilstanden (minne eller register) og blir påvirket av mulige unntak (som definert i det følgende). 4. En fjerde og siste gruppe G4 av instruksjoner i Y-koden er de som oppdaterer X-tilstanden (minne eller register) og er fri for mulige unntak.
X-minnetilstanden som er gjengitt med henvisningstallet 95 på fig. 4 og X-registert<v>ilstanden som er vist med henvisningstallet 97 på fig. 4, gjelder minne- og registerstruktur i Y-maskinen som er dedikert til å være X-kode som er definert i lagersteder i lagre. X-minne- og registertilstandene kan også være minnetilstand og registertilstand som er synlige for X-arkitekturen.
Ytterligere informasjon om fordelene ved organiseringen av de oversatte kodeinstruksjoner på den måte som er beskrevet, særlig anvendt når det gjelder enkle en-skrive Y-instruksjoner er omhandlet i den tidligere nevnte patentansøkning 1870-0410.
Tilstandsatomitet krever hovedsakelig at alle tilstandstilganger for X-instruksjonen synes å oppstå uten noen mellomkomst eller uten at noen mellomkomst synes å oppstå. Denne tilstand er nødvendig for å danne X-instruksjonens granularitet. I et spesielt eksempel som er beskrevet nedenfor blir X-tilstandens atomitet oppnådd ved bruk av foreliggende oppfinnelse som dermed gjør det mulig å oppnå X-instruksjonens granularitet.
Med gjentatt henvisning til fig. 3, vil, straks funksjonsblokken 68 ordner Y-instruksjonskoden som beskrevet, prøveblokken 70 bestemme om den løpende Y-instruksjon er en grense - eller "X-granule" markør for den X-instruksjon hvorfra den ble avledet. Ja- og neibitene som er resultatet av prøvene for på hverandre følgende behandlede Y-instruksjoner blir fortrinnsvis registert i en X-grenseinstruksjons-bitavbildning med funksjonsblokken 72.
Deretter blir en serie med prøver tatt for å bestemme hvilken av en flerhet av oversettélsesbehandlende grener som skal følges. Hver gren tilsvarer en generelt på forhånd definert oversettelsessak (dvs. art av X-instruksjon), med de forhånd definerte saker som er klassifisert som spesielle og krever spesiell oversettelsesbehandling for å bevare minneatomitet. I denne utførelse kan en hvilken som helst av tre grener 65, 67 og 69 følges i henhold til den strukturelle karakter for den X-instruksjon som er under utførelse.
Generelt sett vil grenene 65, 67 og 69 behandle hver Instruksjon for å frembringe en oversatt kode som generelt bevarer sikre garantier for denne og den som særlig bevarer tilstandsatomiteten.
Det skal videre påpekes at for oversettelsesformålet forutsettes det at en enkel RISC-lagerinstruksjon for et enkelt innrettet langord (4 byter) eller kvadord (8 byter) er atomisk på en RISC-maskin I den betydning at alle byter blir modifisert samtidig og ingen andre byter blir påvirket av lageret. Det forutsettes videre at all tilstand holdes i enten minne eller registre, at minnetUganger kan skape virtuelle-minneunntagelser og at enkle registeroverføringer aldri skaper unntagelser. Det blir videre forutsatt at en sekvens med RISC-Instruksjoner kan avbrytes med eksterne hendelser ved en vilkårlig RISC-instruksjon.
På fig. 3 blir oversettelsesgrenen 65 fulgt hvis prøveblokken 120 angir at den løpende X-Instruksjonen er en enkel en-skrive instruksjon. Særlig, som angitt med funksjonsblokken 122, er intet spesielt oversettelsesarbeid nødvendig og blokken 74 bestemmer om det finnes flere X-instruksjoner som skal oversettes. Hvis så er tilfellet, vil utførelsen av programsløyfen bli gjentatt.
Med ny henvisning til flytskjemaet for oversettelsen blir det, hvis den løpende X-instruksjon ikke er en enkel en-skrive instruksjon, en bestemmelse truffet i prøveblokken 124 om X-instruksjonen er en av en flerhet av på forhånd bestemte spesielle en-skrive tilfeller. I den foreliggende utførelse er det to på forhånd definerte spesielle en-skrive tilfeller, dvs. en delvis skriveinstruksjon og en stengt oppdateringsinstruksjon. Hvis det ene eller andre spesielle en-skrive tilfellet gjelder, vil funksjonsblokken 126 utføre i oversettelsesgrenen 67 for å bevare tilstandsatomitet ved innføring av en tilstandsatomitetssekvens i den oversatte kode. Tilstandsatomitetssekvensen sikrer (ved kjøretiden) enten 1) fullførelse av den delvise skriving eller den stengte oppdatering hvis intet avbrudd finner sted under lese-modifiser-skrive sekvensen eller 2) suspensjon av den delvise skriving eller den stengte oppdatering for et gjenforsøk hvis et avbrudd finner sted under lese-modifiser-skrive sekvensen.
En tilstandsatomitetssekvens som blir innsatt i den oversatte instruksjonskode i blokken 126 er fortrinnsvis en som blir kalt en last-lås/lagre-betinget sekvens.
Et generelt flytskjema er vist på fig. 8 for å illustrere kjøretidens logikkoperasjon som utføres av den last-låste/- lagre-betinget sekvens som er angitt med henvisningstallet 126A. Straks sekvensen 126A blir kallet, vil således funksjonsblokken 128 laste minneordet for hvilket en lese-modif iser-skrive (RMW) operasjon skal utføres.
Modifiseringsoppgavene utføres av blokkene 130, 132 og 134. I det viste eksempel med tilføyelse av en byte til et angitt minnelagersted foretar blokken 130 en skifteoperasjon som gir en byteinnretning i minneordet. Deretter vil blokken 132 maskere byten slik at den blir skiftet ut med null. Sluttlig vil blokken 134 føre den maskerte byte på plass i minneordet.
Hvis under utførelse av RMW-sekvensen under kjøretiden, en annen prosessor skriver til samme minnelagersted, har RMW-sekvensen ikke vært i stand til å hindre forstyrrelse mellom to uavhengige minneskrivinger. Blokken 136 utfører en lager-betinget instruksjon for å påvise om en annen minneskriving til samme minnelagersted har funnet sted under lese- og modifiseringsdelene av RMW-sekvensen. Hvis ingen annen skriving har funnet sted, blir lagre-betinget instruksjonen implementert slik at det modifiserte minneord blir skrevet med tilstands- eller minneatomitet opprettholdt fordi det ikke var noen konflikt med en annen skriving. Prøveblokken 138 avslutter sekvensen. Videre behandling av den løpende Y-instruksjon under kjøretiden blir deretter styrt i overenss temmelse med styreprogrammeringen for instruksjonsgranularitet som er beskrevet mer i detalj i det følgende.
Hvis i blokken 136, en annen prosessor har utført en skriving til minnelagerstedet om det ord som ble modifisert under lese- og minnedelene av RMW-sekvensen, blir lagre-betingelsen slettet for derved å bevare minneatomiteten og RMW-sekvensen blir gjenforsøkt senere.
Med ny henvisning til oversettelsesprosessen på fig. 3, vil, med en gang sekvensen 126A er innført i den løpende Y-instruksjon, blokken 74 prøve etter flere X-instruksjoner. Hvis flere eksisterer, kan grensen 67 tilbakeføres til innførlngsblokken 60 for instruksjoner for å gjenta program-forløpet.
Som en oppsummering av tilfellet med behandling av en enkel-skrive CISC-til-RISC-oversettelse av grenen 67, har en CISC-instruksjon en delvis (1- eller 2-byte) innrettet skriving å angi og den oversatte kode skal utføres i et multiprosessorsystem, hvis ikke er en låst tilgang nødvendig. I dette tilfellet må en uavhengig bytetllgang og lese-modifiser-skrive sekvens bli riktig behandlet hvis tilstandsatomiteten skal bevares.
I det enkelt-skrive tilfellet med grenen 67 blir oversettelsen begrenset slik at gruppe 1 og 2 instruksjoner gjør alt arbeide for CISC-instruksjonen bortsett fra minne og/eller registertilstandsoppdatering innbefattende en last-låst for det enkle langord/kvadord inneholdende operanden som skal oppdateres. Gruppe 3 instruksjoner innbefatter en lagre-betinget instruksjon for samme langord/kvadord og gruppe 4 instruksjoner innbefatter gren-på-feil instruksjoner til begynnelsen av sekvensen, fulgt av enkle registeroverfør-inger.
En oversatt sekvens som blir avbrutt før Instruks;)onsgruppe 3 er fullført, feiler lagre-betinget instruksjonen ved omstart og grener dermed tilbake til begynnelsen av sekvensen. Hvis en annen prosessor skriver til det spesifiserte langord/kvadord etter en last-låst instruksjon, men før lagre-betinget instruksjonen, vil i tillegg lagre-betinget instruksjon feile og dermed grene tilbake til begynnelsen av sekvensen.
En oversatt sekvens som blir avbrutt etter at instruksjonsgruppe 3 er fullført, men før instruksjonsgruppe 4 er fullført, blir tvunget til å fullføre instruksjonsgruppe 4 med en mekanisme som tolker fremoverrettet ved enkle registeroverføringer. Resultateffekten er at hver oversatt sekvens enten utfører fra begynnelse til slutt uten noen ytterligere oversatt sekvens i midten og uten annen skriving til subjekt langordet/kvadordet eller utførelse av den sekvens som ble suspendert før fullførelse av gruppe 3 og senere gjenforsøkt fra begynnelsen.
Det skal igjen vises til fig. 3, der oversettelsesgrenen 69 hvis prøveblokken 124 finner at X-instruksjonen som blir oversatt ikke har noen spesiell en-skrive instruksjon, blir innført og blokken 128 registrerer det faktum at X-instruksjonen som blir'oversatt er et annet spesialtilfelle, dvs. en multippel-skrive X-instruksjon. Funksjonsblokken 130 vil da i den oversatte instruksjonskode innføre en PAL CALL-rutine 132 (fig. 7) for å sørge for tilstandsatomitet for multippel-skrive instruksjonene på en måte som blir omhandlet mer i detalj i det følgende.
PAL_CALL-rutinen 132 blir kallet for utførelse under kjøretiden fra et priviligert arkitekturbibliotek innbefattet i datasystemet 20 og vanligvis tilgjengelig i mange datamaskin-arkitekturer for å danne en mekanisme til utførelse av rutiner som kalles fra dem med den høyeste operativsystem-prloritet. I alminnelighet vil PAL_CALL-rutinen 132 utføre alle av tilstandsskrlvingene med tilstandsatomitet hvis ingen
Ci u
asynkrone hendelseavbrudd opptrer før kallingen for rutinen, og hvis ingen mulige untagelser blir påvist i den gjenværende sekvens i den pågående Y-kode instruksjonsgranule. Ellers har PAL_CALL-rutinen 132 feilet før dens utførelse med minneatomitet bevart for et påfølgende gjenforsøk.
Det skal vises til fig. 6 for en skjematisk representasjon av forholdet mellom asynkrone hendelser og Y-kode instruksjonene når det gjelder multiple skrivinger. I dette spesialtilfel-let angir en pil 75 en asynkron hendelse som opptrer etter at en første skriving er behandlet (av PAL_CALL-rutinen 132), men før alle multiple skrivinger er utført av PAL_CALL-rutinen 132. I alminnelighet kan tilstandsatomitet bevares i dette tilfellet ved å suspendere utførelse av avbruddet inntil PAL_CALL-rutinen 132 og resten av instruksjonsgranulen er utført.
Mer bestemt vises det til flytskjemaet for PAL_CALL-rutinen 132, gjengitt på fig. 7, etter at PAL_CALL-rutinen 132 er kalt at en Y-kode granule som er utført under kjøretiden for den oversatte kode, blir den innført som angitt med funksjonsblokken 152. Deretter prøver blokken 154 om en avbrytelse har funnet sted under sekvensen mellom RS og før kallingen for PAL_CALL-rutinen 132. Hvis så er tilfellet, vil blokken 156 tilbakeføre en feilmelding for instruksjons-sekvensen for å bevare tilstandsatomiteten, og styringen føres tilbake til kalleprosedyren gjennom utgangsblokken 157 for et nytt forsøk på utførelse av den løpende Y-kode granule.
Hvis intet avbrudd har funnet sted under den kritiske tid som går foran PAL_CALL-rutinen, vil prøveblokken 158 bestemme om alle tilstandstllganger som er tilbake kan bli fullført uten unntagelse. Hvis ikke, vil blokken 156 igjen tilbakeføre en feilmelding for den instruksjonssekvens som er utført for å bevare tilstandsatomitet, og rutinen blir ført ut gjennom blokken 157 for å muliggjøre gjenforsøk for Y-kode sekvensen. Hvis de gjenværende tilstandstilganger kan fullføres uten unntagelse, initialiseres utførelsen av PAL_CALL-rutinen 132 og funksjonsblokken 159 foretar en last-låst og modifikasjon av den første skriving hvis en delvis skriving er spesifi-sert. Blokken 160 foretar deretter en lagre-betinget for en delvis skriving eller en lagring for en full skriving.
Prøveblokken 162 bestemmer om lagre-betingelsen sviktet i tilfellet med en delvis skriving. Hvis dette er tilfellet, blir rutinen fortrinnsvis ført tilbake til blokk 159 for et delvis skrivegjenforsøk som vist. Om det ønskes, kan en feilmelding føres tilbake i stedet på dette punkt.
Hvis en full skriving er blitt lagret eller straks en delvis skriving er blitt vellykket lagret, har en første skriving i den multiple skrivesekvens funnet sted og alle skrivinger i Y-kode sekvensen må bli fullført for å bevare tilstandsatomitet som angitt med funksjonsblokken 164.
Deretter blir den andre skriving i Y-kode sekvensen behandlet åv en forskriveblokk 166, et lager eller en lager-betinget blokk 168 blir implementert og en prøveblokk 170 blir deretter utført for lagre-betinget feil. Denne operasjon tilsvarer den måte som er beskrevet for behandlingen av den første skriving av blokkene 158, 160 og 162. Det samme delsett av prosesser (dvs. de som Inneholdes i blokkene 158, 160 og 162) blir utført for hver påfølgende skriving i den multiple skrivesekvens som angitt med den enkle funksjonsblokk 172, idet hver foregående skriving blir vellykket fullført med en delvis eller full skriving. Etter at alle skrivinger er lagret, angir blokken 174 vellykket utførelse av PAL_CALL-rutinen 132 og utgang finner sted gjennom blokken 157. Den løpende Y-instruks jonsgranulen kan deretter- bli fullført med tilstandsatomiteten bevart.
På samme måte som i oversettelsesgrenene 65 og 67 på fig. 3, vil grenen 69 til slutt kontrollere om det er nødvendig at ytterligere X-instruksjoner skal oversettes, og hvis så er tilfellet, går blokken 16 over i neste X-instruksjon for oversettelse.
Ved oppsummering av eksempelet med behandling av CISC- til RISC-oversettelse av grenen 69, har en CISC-instruksjon mer enn en skriving av tilstand (på grunn av flere mottagersteder eller et enkelt ikke-innrettet mottagersted). Ingen stengte tilstandstilganger faller inn under dette eksempel, men uavhengige bytetilganger må håndteres på riktig måte og alle eller ingen av de spesifiserte skrivinger må utføres hvis tilstandsatomitet skal opprettholdes.
Oversettelsen er begrenset slik at instruksjonsgruppene 1 og 2 starter med en lese-og-sett instruksjon. Etter disse grupper kommer instruksjoner som alle gjør arbeidet for CISC-instruksjonen bortsett fra tilstandsoppdatering av minnet og/eller register, innbefattende mulig lasting av hvert langord/kvadord som vil bli oppdatert. Instruksjonsgruppen 3 innbefatter PAL_CALL-rutinen 132 som spesifiserer alle lagre, og instruksjonsgruppen 4 innbefatter en gren-på-feil til begynnelsen av sekvensen, fulgt av enkle registerbevegelser.
En oversatt sekvens som blir avbrutt før instruksjonsgruppe 2 fullfører, sletter en RISC-tilstandsbit satt av lese-og-sett, noe som fører til at PAL_CALL-rutlnen 132 fører tilbake en feilmelding og dermed grener tilbake til begynnelsen av sekvensen. Med bruk av en egnet maskinvarestruktur blir PAL_CALL-rutinen 132 innført i en priviligert sekvens for en ikke-avbrytbar RISC-kode.
PAL_CALL-rutinen 132 foregår ingen lagringer og tilbakefører en feilmelding når en mellomliggende avbrytelse har funnet sted, hvis RISC-tilstandsbiten som er satt av lese-og-sett er blank. Ellers blir en sondering utført for alle mulige lagersteder med kontroll etter eventuelle mulige virtuelle-minneunntagelser. Hvis det støtes på noen, vil PAL_CALL-rutinen 132 ikke fullføre, unntagelsene taes og tilstandsbiten som er satt av lese-og-sett blir blanket. Dette fører til en påfølgende gjenutførelse av PAL_CALL-rutinen 132 for å tilbakeføre en feilmelding og dermed grene tilbake til begynnelsen av sekvensen. Ellers vil PAL_CALL-rutinen 132 utføre alle angitte lagringer. Mens den gjør dette, benytter den den virtuelle minneinformasjon som ble benyttet under den foregående sondering selv om sidetabellene i det delte minnet samtidig blir oppdatert av en annen prosessor. Dermed vil ingen virtuelle minneunntagelser bli frembragt av lagrene.
For hvert delvis-minne-ordlager benyttes en last-låst/modifiser/lagre-betinget sekvens av den priviligerte kode. Ingen lagre er tidligere blitt gjort og det første lagre-betinget feiler (fordi en annen prosessor lagrer i samme minnet ord under modifiseringen) og en implementering kan enten tilbakeføre "feil" fra PAL_CALL-rutinen 132, eller den kan gjenta nettopp last-låst/modifiser/lagre-betinget sekvensen. Etter at enkel lagring har funnet sted, må påfølgende last-låst/modif iser/lagre-betinget sekvenser gjentas inne i den priviligerte kode inntil de har hell med seg. Etter fullførelse av' alle spesifiserte lagre tilbakeføres den priviligerte kode som vellykket og instruksjonsgruppen 3 er fullført.
En oversatt sekvens som blir avbrutt etter at instruksjonsgruppen 3 er fullført, men før instruksjonsgruppen 4 er fullført, tvinges til å fullføre gruppe 4 med en mekanisme som tolker foroverrettet gjennom enkle registeroverføringer. Resultatet er at sekvensen enten utfører fra begynnelsen til slutt uten noen oversatt sekvens i midten og uten forstyrr-ende skriving til subjektminneordet, eller den blir suspendert før fullførelse av instruksjonsgruppen 3 og deretter gjenforsøkt fra begynnelsen.
Når alle X-instruksjoner er oversatt gjennom grenene 65, 67 og 69, blir den sykliske utførelse av programsløyfen 64 avsluttet og den oppsamlede Y-koden gjøres tilgjengelig som utgang som angitt med funksjonsblokken 76.
Som vist på fig. 4, er en Y-prosessor 80 svarende til Y-datasystemet 20 (fig. 1) frembragt til utførelse av resultant Y-koden med X-tilstandsatomitet og instruksjonsgranularitet garantert bevart. Vanlige data inngangs/utgangsanordninger 82 og en intervallklokke 84 er koblet til Y-prosessoren 80 og fra tid til annen frembringer disse anordninger avbrytelser som danner asynkrone hendelser som krever en midlertidig avledning av prosessoroperasjonen fra Y-kodeutførelsen. Uten den beskyttelsesgaranti som gis med foreliggende oppfinnelse vil prosessoravledningen som skapes av disse eller andre avbrytelser være i stand til å bryte ned X-tilstandsatomiteten og granulariteten ved utførelsen av bestemte arter instruksjoner som forklart tidligere.
Som vist på fig. 4, representerer en blokk 86 inngangen for den frembragte Y-kode fra en inngangsanordning til en seksjon 88 i et minnesystem 90 som er forbundet med Y-prosessoren 80 og en blokk 87 representerer datautganger som er frembragt for utgangsanordningene som et resultat av utførelsen av Y-koden. Minnesystemet 90 innbefatter også en vanlig datasek-sjon 92, en vanlig operativsystemseksjon 94 og innbefatter den tidligere nevnte X-minnetilstand 95. Y-prosessoren 80 innbefatter den tidligere nevnte X-registertilstand 97.
Et styreprogram for instruksjonsgranularitet (IGC) 96 i minnesystemet 90 er strukturert for å overvåke utførelsen av Y-koden når det gjelder instruksjonsgranularitet. Operasjonen av IGC-programmet 96 ved utførelsen av Y-koden er mer fullstendig gjengitt på flytskjemaet som er vist på fig. 5A og 5B.
Generelt sett blir enkle skrive- og multiple skrive X-instruksjoner som oversettes til Y-kode instruksjonsgranuler styrt av IGC-programmet 96 under utførelsen av Y-koden. Når det gjelder enkle enkeltstående skriveinstruksjoner, blir alt om tilstandsatomitet og styring av instruksjonsgranularitet ført som beskrevet f.eks. i denne beskrivelse. Når det gjelder spesielle enkle skriveinstruksjoner og multiple skriveinstruksjoner, blir tilstandsatomitet styrt mens den oversatte kode for disse instruksjoner blir utført som beskrevet her i forbindelse med fig. 3, 6 og 8 og ellers i overensstemmelse med behandlingen ifølge IGC-programmet 96.
Mer bestemt starter IGC-programmet 96 (fig. 5A) som angitt ved 98 med frembringelse av en asynkron hendelse. Generelt er en asynkron hendelse definert som et avvik fra Y-instruk-sjonsstrømmen på grunn av avbrytelser som muligens kunne frembringe X-tilstandsforandringer som er synlige for den oversatte X-kode. Det vises igjen til fig. 6 når det gjelder en illustrerende gjengivelse av forholdet mellom asynkrone hendelser og en X-granule i Y-instruksjonene som innbefatter multiple skrivinger.
Med fortsatt henvisning til flytskjemaet på fig. 5A, er en midlertidig holdeanordning innført i behandlingen av den asynkrone hendelse med funksjonsblokken 100 og minneadressen for Y-instruksjonen (betegnet som PC-AE) som blir behandlet på tidspunktet for den asynkrone hendelse blir registrert med funksjonsblokken 102.
Deretter blir instruksjons-grensebitavbildingen kontrollert av blokken 104 for å bestemme om Y-instruksjonen PC-AE er en X-instruksjonsgrense. Hvis den er det, fører prøveblokken 106 IGC-programmet 96 over en bane 107 til blokken 108 som tillater avbrytelse av Y-kode utførelsen for behandling av den asynkrone hendelse uten å bryte X-kode instruksjonens granularitet.
Hvis Y-instruksjonen PC-AE ikke er en X-instruksjonsgrense, vil funksjonsblokken 110 rette inn Y-instruksjonstelleren PC med den neste oppstøttende eller foroverrettede Y-instruksjon som er en X-instruksjonsgrense. En programbane 111 blir deretter fulgt med IGC-programmet 96 til blokken 108 for behandling av den asynkrone hendelse som tidligere beskrevet, og igjen uten å bryte X-kode instruksjonens granularitet. I dette eksempel har den asynkrone hendelse funnet sted på et tidspunkt da bare en eller flere, men ikke alle, av Y-instruksjonene er blitt utført innenfor en X-instruksjonsgranule og bevarelse av X-instruksjonens granularitet oppnås ved operasjonen med programblokken 110.
Mer bestemt, som vist på blokken 110 på fig. 5B, foretas en foroverrettet avsøkning av Y-instruksjonene av funksjonsblokken 112 i en programsløyfe 113 for å finne den neste Y-instruksjon som er en X-instruksjonsgrense. Prøveblokken 114 kontrollerer hver foroveravsøkt Y-instruksjon for å bestemme om behandling av avbrytelsen før utførelse av de gjenværende Y-instruksjoner kunne frembringe en Y-kode utførelse med resultat som skiller seg fra det resultat som ville ha fremkommet om den tilsvarende X-kode hadde blitt utført med påtrykk fra den samme asynkrone hendelse.
Ved utførelse av hver foroverrettet Y-instruksjonsprøve skal prøveblokken 114 fortrinnsvis bestemme om en unntagelses-tilstand kan frembringes ved forsøk på utførelse av Y-instruksjonen hvis den asynkrone hendelse ble tillatt behandlet og utførelsen av Y-kode sekvensen deretter ble gjenopptatt. I alminnelighet har en instruksjon en unntagelse hvis den muligens ikke kan fullføres. De følgende er de generelle klasser for unntagelser som, hvis de identifiseres for en foroverrettet Y-instruksjon, frembringer en Y-kode avbrytelse for neste støttende Y-instruksjon som er en X-grense:
t- å f
1) Minnestyreunntagelser som for eksempel brudd på tilgangs-styring eller sidefeil. 2) Aritmetiske unntagelser som for eksempel flytende kommaoverflytfell eller dele med null feil. 3) Instruksjonsunntagelser som for eksempel illlegale operasjonskoder eller avbruddspunkt for operasjonskoder.
I den foretrukne utførelsesform for oppfinnelsen blir en liste med unntagelser som kan komme til anvendelse for den kode som oversettes innført i et lager som er tilgjengelig for IGC-programmet 96 under utførelsen. Utførelsesbestemmel-ser blir da tatt med henvisning til hver enkelt foroverrettet avsøkt Y-instruksjon i forhold til den lagrede unntagelses-liste.
På hverandre følgende Y-instruksjoner blir prøvet under den foroverrettede avsøkning og hvis alle avsøkte Y-lnstruksjoner ikke viser noen unntagelse, blir de gjenværende Y-instruksjoner utført før det blir åpnet for behandling av asynkrone hendelser i blokken 108 (fig. 5A) uten å bryte X-instruksjonens granularitet som beskrevet tidligere.
Hvis på den annen side, en foroverrettet avsøkt Y-instruksjon viser en unntagelse under prøven med blokken 114, vil funksjonsblokken 118 øyeblikkelig støtte opp Y-programtel-leren til neste oppstøttende Y-instruksjon som er en X-instruksjonsgrense og det blir Igjen åpnet for behandlingen av den asynkrone hendelse med blokken 108 (flg. 5A) uten å bryte X-instruksjonens granularitet. På denne måte er til og med muligheten for å bryte inn i X-instruksjons granulariteten unngått.
Sett samlet, danner foreliggende oppfinnelse en effektiv mekanisme til oppnåelse av "en til mange" anvendelseskodeoversettelser. Den kode som dannes er nøyaktig opp til den opprinnelige kode ved utførelse av resultater så vel som når det gjelder tilstandsatomitet og instruksjonsgranularitet. Atomiteten og granulariteten er garantert for enkle en-skrive-instruksjoner så vel som spesielle instruksjoner innbefattende multiple-skrive og lese-modifiser-skrive enkle skrivetyper. Som en følge av dette kan investeringer i den opprinnelige CISC-kode eller tilsvarendekode spares mens pris/ytelsesfordeler samtidig kan oppnås ved bruk av anvendelseskodeoversettelser til RISC eller andre avanserte pris/ytelsesdatasystemer med forholdsvis reduserte instruksjonssett .

Claims (17)

1. Fremgangsmåte til oversettelse av en første programkode til en andre programkode og til utførelse av den andre programkode samtidig med bevaring av instruksjonstilstandsatomitet fra den første kode, hvilken første programkode kan utføres på en datamaskin med en første arkitektur tilpasset et første instruksjonssett og den andre programkode kan utføres på en andre datamaskin med en minne- og registertilstand og en andre arkitektur tilpasset til et andre instruksjonssett som er redusert i forhold til det første instruksjonssett,karakterisert vedat fremgangsmåten omfatter følgende trinn: anvendelse av en første datamaskin for å oversette de første kodeinstruksjoner til tilsvarende andre kodeinstruksjoner; organisering av de andre kodeinstruksjoner for hver første kodeinstruksjon i en granular instruksjonssekvens som i rekkefølge har minst to grupper, en første gruppe innbefattende de andre kodeinstruksjoner som utfører instruksjonsarbeid bortsett fra tilstandsoppdatering og som kan avbrytes etter utførelse uten risiko for en tilstandsfeil og en andre gruppe med alle instruksjoner om minne- og registertilstandsoppdatering innbefattende enhver spesiell skriveinstruksjon som er nødvendig for å implementere den første kodeinstruksjon som oversettes; innbefatning i den andre instruksjonsgruppe for på forhånd bestemte enkle skriveinstruksjoner av en første spesiell skriveinstruksjon som har en første delsekvens til behandling av en enkel skriving til et første minnelagersted i overensstemmelse med et krav om at den første delsekvens må utføres uten noen avbrytelse og uten me11omkommende motstridende skrivinger til det første minnelagersted fra enhver annen prosessor som kan ha blitt koblet til minnetilstanden; Innbefatning i den andre instruksjonsgruppe for multiple skriveinstruksjoner av en andre spesiell skriveinstruksjon for å innbefatte en andre delsekvens til behandling av multiple skrivinger som alle må utføres uten noe. avbrudd og uten noen motstridende skrivinger av en annen prosessor som kan ha blitt koblet til minnetilstanden; bruk av det andre datasystem til utførelse av den andre programkode; bestemmelse av tilstedeværelse av hver asynkrone hendelse under den andre kodeutførelse; bestemmelse under den andre kodeutførelse av tilstedeværelse av hver motstridende skriving til det første minnelagersted med den andre prosessor hvis den er koblet til minnetilstanden ; avbryting for et gjenforsøk av enhver granular andre kodeinstruksjonssekvens for å bevare den første kodeinstruksjons tilstandsatomitet og den første kodeinstruksjons granularitet hvis et asynkront hendelsesavbrudd opptrer under sekvensutførelsen før alle de første gruppeinstruksjoner er blitt utført eller hvis de første gruppeinstruksjoner er blitt utført før utførelse av enhver andre gruppeinstruksjon som er blitt utsatt for et mulig unntak for derved å åpne for påfølgende behandling av den asynkrone hendelse; avbrytelse og gjenforsøk inntil vellykket utførelse blir fullført for den første spesielle instruksjonsdelsekvens hvis noen granular andre kodeinstruksjonssekvens som Innbefatter den første delsekvens hvis en motstridende skriving gjøres av den andre prosessor før fullførelse av utførelsen av den første delsekvens; avbrytelse av enhver granular andre kodeinstruksjonssekvens som innbefatter den første delsekvens for gjenforsøk hvis et asynkront hendelsesavbrudd oppstår under forsøkt utførelse av den første delsekvens; og forsinkelse av behandlingen av en asynkron hendelsesavbrytelse og fullførelse av enhver granular andre kodeinstruksjonssekvens som blir utført A) hvis den andre delsekvens er innbefattet i den granulare instruksjonssekvens og hvis det asynkrone hendelsesavbrudd finner sted høyst etter en første skriving under utførelsen av den andre instruksjonsdelsekvens eller B) hvis det asynkrone hendelsesavbrudd finner sted etter utførelse av alle tilstandsoppdaterende instruksjoner i den andre gruppe som kan påvirkes av mulig unntagelse.
2. Fremgangsmåte som angitt i krav 1,karakterisert vedat den første delsekvens er en lese-modif iser-skrivedelsekvens og ved at den første delsekvens anvendes for å implementere en delvis skriveinstruksjon eller en stengt oppdateringsinstruksjon, hvilken første delsekvens innbefatter en last-låse lagre-betinget sekvens som leser og modifiserer inngangsdata, betinget lagrer de resulterende data og feiler den første delsekvens hvis en motstridende skriving har funnet sted under dens utførelse eller fullfører delsekvensen hvis ingen motstridende skriving har funnet sted under utførelsen.
3. Fremgangsmåte som angitt i krav 1,karakterisert vedat den andre delsekvens innbefatter et enkelt priviligert arkitekturbibliotek (PAL) kallerutine som utfører den andre delsekvens og all skriving som er innbefattet I denne straks PAL-kallerutinen er initialisert og ved at initialiseringen av PAL-kallerutinen tillates hvis ingen avbrytelse tidligere har funnet sted i utførelsen av den løpende instruksjonssekvens og hvis alle gjenværende tilstandstilganger kan fullføres uten unntagelse og ved at PAL-kallerutinen har en første delrutine som prøver en første skriving som skal utføres for å bestemme om det er en delvis skriving, utfører en last-låst betinget-lagring for å utføre den første skriving hvis det er en delvis skriving, selektivt gjenforsøker den last-låst betingede-lagring inntil den fullføres hvis lagre-betinget feiler som et resultat av motstridende tilstandsskriving av den andre prosessor under den forsøkte utførelse av den første delrutine, full-fører last-låst betinget-lagring hvis ingen motstridende tilstandsskriving har funnet sted under et første forsøk hvis intet gjenforsøk blir valgt eller under et delsekvens- gjenforsøk hvis gjenforsøkene, der PAL-kallerutinen er låst inn for fullførelse etter fullførelse av den første delrutine og der en andre delrutine deretter prøver en andre skriving som skal utføres for å bestemme om det er en delvis skriving, utfører en last-låst betinget-lagring for å utføre den andre skriving hvis den er en delvis skriving, gjenforsøker last-låst betinget lagring inntil den fullføres hvis lagre-betinget feiler som et resultat av motstridende tilstandsskriving av den andre prosessor under forsøkt utførelse av den andre delrutine og der hver påfølgende skriving som skal utføres blir behandlet med en delrutine stort sett identisk med den andre delrutine inntil alle skrivinger er utført for å fullføre PAL-kallingen samt ved at den første delrutinen blir gjenforsøkt inntil den fullføres vellykket.
4. Fremgangsmåte til oversettelse av en første programkode til en andre programkode og for utførelse av den andre programkode med bevaring av instruksjonens tilstandsatomitet for den første kode der den første programkode kan utføres på en datamaskin med en første arkitektur tilpasset et første instruksjonssett og det annet program kan utføres på en andre datamaskin med en minne- og registertilstand og med en andre arkitektur tilpasset til et andre instruksjonssett som er redusert i forhold til det første instruksjonssett,karakterisert vedat fremgangsmåten omfatter følgende trinn: bruk av en første datamaskin for å oversette de første kodeinstruksjoner til tilsvarende andre kodeinstruksjoner i overensstemmelse med en mønsterkode som definerer de første kodeinstruksjoner med uttrykk fra de andre kodeinstruksjoner; organisering av de andre kodeinstruksjoner for hver første kodeinstruksjon i en granular instruksjonssekvens som i rekkefølge har minst to grupper, der en første gruppe innbefattende de andre kodeinstruksjoner som utfører annet instruksjonsarbeid enn tilstandsoppdatering og kan avbrytes etter utførelse uten risiko for en tilstandsfeil og en andre gruppe med alle minne- og registertilstands-oppdateringsinstruksjoner innbefattende enhver spesiell skriveinstruksjon som kreves for å implementere den første kodeinstruksjon som oversettes; strukturering av en spesiell skriveinstruksjon for å innbefatte en delsekvens til behandling av en enkel skriving til et første minnelagersted i overensstemmelse med et krav om at den enkle skriving må utføres uten noen avbrytelse og uten noen me11omkommende motstridende skriving til det første minnelagersted av en annen prosessor som kan være koblet til minnetilstanden; bruk av et andre datasystem tilpasset med den andre arkitektur til å utføre den andre programkode; bestemmelse av tilstedeværelse av hver asynkrone hendelse under den andre kodeutførelse; bestemmelse under den andre kodeutførelse om opptreden av hver motstridende skriving til det første minnelagersted av den andre prosessor hvis den er koblet til minneti1standen; avbrytelse for et gjenforsøk av enhver granular andre kodeinstruksjonssekvens for å bevare den første kodeinstruksjons tilstandsatomitet og en første kodeinstruksjons granularitet hvis et asynkront hendelsesavbrudd oppstår under sekvensutførelsen før alle de første gruppeinstruksjoner er blitt utført eller om de første gruppeinstruksjoner er blitt utført før utførelsen av enhver andre gruppeinstruksjon som er utsatt for et mulig unntak for derved å åpne påfølgende behandling av den asynkrone hendelse; avbrytelse for et gjenforsøk inntil vellykket utførelse er fullført for den første spesielle instruksjonsdelsekvens i enhver granular andre kodeinstruksjonssekvens som Innbefatter den nevnte delsekvens hvis en motstridende skriving gjøres av den andre prosessor før fullførelse av den nevnte delsekvens; avbrytelse av enhver granular andre kodeinstruksjonssekvens som innbefatter den nevnte delsekvens for et gjenforsøk hvis et asynkront hendelsesavbrudd oppstår under forsøkt utførelse av delsekvensen; og forsinkelse av behandlingen av et asynkront hendelsesavbrudd og fullførelse av enhver granular andre kodeinstruksjonssekvens som utføres hvis det asynkrone hendelsesavbrudd finner sted etter utførelse av alle tilstands oppdateringsinstruksjoner i den andre gruppe som er utsatt for mulig unntak.
5. Fremgangsmåte som angitt i krav 4,karakterisert vedat den første delsekvens er en lese-modif iser-skrivedelsekvens .
6. Fremgangsmåte som angitt i krav 5,karakterisert vedat den første delsekvens anvendes for å implementere en delvis skriveinstruksjon eller en stengt oppdateringsinstruksjon, hvilken første delsekvens innbefatter en last-låse lagre-betinget sekvens som leser og modifiserer inngangsdata, betinget lagrer de resulterende data og feiler den første delsekvens hvis en motstridende skriving har funnet sted under dens utførelse eller fullfører delsekvensen hvis ingen motstridende skriving har funnet sted under utførelsen.
7. Fremgangsmåte til oversettelse av en første programkode til en andre programkode og for utførelse av den andre programkode samtidig med bevaring av instruksjonens tilstandsatomitet for den første kode, der den første programkode kan utføres på en datamaskin med en første arkitektur tilpasset et første instruksjonssett og den andre programkode kan utføres på en datamaskin med en minne- og registertilstand og en andre arkitektur tilpasset et andre instruksjonssett som er redusert i forhold til det første instruksjonssett,karakterisert vedat fremgangsmåten omfatter: bruk av en første datamaskin for å oversette de første kodeinstruksjoner til tilsvarende andre kodeinstruksjoner i overensstemmelse med en mønsterkode som definerer de første kodeinstruksjoner i uttrykk fra de andre kodeinstruksjoner; organisering av de andre kodeinstruksjoner for hver første kodeinstruksjon i en granular instruksjonssekvens som i rekkefølge har minst to grupper, en første gruppe innbefattende de andre kodeinstruksjoner som utfører annet instruksjonsarbeid enn tilstandsoppdatering og som kan avbrytes etter utførelse uten risiko for en tilstandsfeil og en andre gruppe som har alle minne- og registertilstands-oppdateringsinstruksjoner innbefattende enhver spesiell skriveinstruksjon som er nødvendig for å implementere den første kodeinstruksjon som blir oversatt; strukturering av en spesiell skriveinstruksjon for å innbefatte en delsekvens til behandling av multiple skrivinger som alle må utføres uten avbrytelse; bruk av et andre datasystem tilpasset med den andre arkitektur til å utføre den andre programkode; bestemmelse av tilstedeværelse av hver asynkrone hendelse under den andre kodeutførelse; avbrytelse for gjenforsøk av enhver granular andre kodeinstruksjonssekvens for å bevare den første kodeinstruksjonstilstandsatomitet og første kodeinstruksjons granularitet hvis et asynkront hendelsesavbrudd finner sted under sekvensens utførelse før alle første gruppeinstruksjonene er blitt utført eller hvis de første gruppeinstruksjonene er blitt utført før utførelsen av en hvilken som helst andre gruppeinstruksjon som er utsatt for et mulig unntak for derved å åpne påfølgende behandling av den asynkrone hendelse; forsinkelse av behandlingen av et asynkront hendelsesavbrudd og fullførelse av enhver granular andre kodeinstruksjonssekvens som utføres hvis A) delsekvensen er innbefattet i den granulare instruksjonssekvens og hvis det asynkrone hendelsesavbrudd finner sted høyst etter en første skrivingbinder utførelse av instruksjonsdelsekvensen eller B) hvis det asynkrone hendelsesavbrudd finner sted etter utførelse av alle tilstandsoppdaterende Instruksjoner i den andre gruppe som er utsatt for mulige unntagelser.
8. Fremgangsmåte som angitt i krav 7,karakterisert vedat den andre delsekvens innbefatter et enkelt priviligert arkitekturbibliotek (PAL) kallerutine som utfører den andre delsekvens og alle skrivinger som er innbefattet i denne straks PAL-kallerutinen er initialisert og ved at initialisering av PAL-kallerutinen blir tillatt hvis intet avbrudd tidligere har opptrådt i utførelsen av den løpende instruksjonssekvens og hvis alle gjenværende t11standstUganger kan fullføres uten unntagelse og ved at PAL-kallerutinen har en første delrutine som prøver en første skriving som skal utføres for å bestemme om det er en delvis skriving, utfører en last-låst betinget-lagring for å utføre den første skriving hvis den er en delvis skriving, selektivt gjenforsøker last-låst betinget-lagring inntil den fullføres hvis lagre-betinget feiler som et resultat av en motstridende tilstandsskrlving av den andre prosessor under forsøkt utførelse av den første delrutine, fullfører last-låst betinget-lagring hvis ingen motstridende tilstandsskrlving har funnet sted under det første forsøk hvis intet gjenforsøk er valgt eller under et påfølgende gjenforsøk hvis gjenforsøk er valgt, der PAL-kallerutinen er låst inn for fullførelse etter fullførelse av den første delrutine og der en andre delrutine deretter prøver en andre skriving som skal utføres for å bestemme om det er en delvis skriving, utfører en last-låst betinget-lagring for å utføre den andre skriving hvis den er en delvis skriving, gjenforsøker last-låst betinget-lagring inntil den fullføres hvis den betingede lagring feiler som et resultat av en motstridende tilstandsskrlving av den andre prosessor under forsøkt utførelse av den andre delrutine og ved at hver påfølgende skriving som skal utføres behandles med en delrutine som er stort sett identisk med den andre delrutine inntil alle skrivinger er utført for å fullføre PAL-kallet.
9. Fremgangsmåte til oversettelse av en første programkode til en andre programkode for å lette bevarelse av tilstandsatomitet for den første kode når den andre kode utføres, der den første programkode kan utføres på en datamaskin med en første arkitektur tilpasset et første instruksjonssett og den andre programkode kan utføres på en andre datamaskin som har en minne- og registertilstand og en andre arkitektur tilpasset til et andre instruksjonssett som er redusert i forhold til det første instruksjonssett,karakterisertved at fremgangsmåten omfatter følgende trinn: bruk av en første datamaskin for å oversette de første kodeinstruksjoner til tilsvarende andre kodeinstruksjoner i overensstemmelse med en mønsterkode som definerer de første kodeinstruksjoner i uttrykk fra de andre kodeinstruksjoner; organisering av de andre kodeinstruksjoner for hver første kodeinstruksjon i en granular instruksjonssekvens som i rekkefølge har minst to grupper, en første gruppe Innbefattende de andre kodeinstruksjoner som gjør annet instruksjonsarbeid enn tllstandsoppdatering og som kan avbrytes etter utførelse uten risiko for en tilstandsfeil og en andre gruppe med alle instruksjoner for oppdatering av minne- og registertilstand innbefattende enhver spesiell skriveinstruksjon som kreves for å implementere den første kodeinstruksjon som oversettes; strukturering av en første spesiell skriveinstruksjon til å innbefatte en første delsekvens for behandling av en enkel skriving til et første minnelagersted i overensstemmelse med et krav om at den nevnte enkle skriving må utføres uten noe avbrudd og uten noen mellomliggende motstridende skrivinger til det første minnelagersted av en annen prosessor som kan ha blitt koblet til minnetilstanden; strukturering av en andre spesiell skriveinstruksjon for å innbefatte en andre delsekvens til behandling av multiple skrivinger som alle må utføres uten noen avbrytelse, strukturering av den første delsekvens for å avbryte for gjenforsøk inntil vellykket utførelse er fullført hvis en motstridende skriving gjøres av den andre prosessor før fullførelse av utførelsen av den første delsekvens, strukturering av den første delsekvens for å feile hvis et asynkront hendelsesavbrudd finner sted under forsøkt utførelse av den første delsekvens for derved å åpne for et gjenforsøk for utførelse av enhver granular andre kodeinstruksjon som innbefatter den første delsekvens; og strukturering av den andre delsekvens for priviligert ikke-avbrytbar utførelse ved forsinkelse av prosessen for ethvert asynkront hendelsesavbrudd under den andre kodeutførelse inntil etter fullførelse av utførelsen av den andre delsekvens .
10. Fremgangsmåte til utførelse av en andre programkode med bevaring av tilstandsatomitet for en første programkode, hvorfra den andre programkode er oversatt, hvilken første programkode kan utføres på en datamaskin med en første arkitektur tilpasset til et første instruksjonssett og den andre programkode kan utføres på en datamaskin med en minne-og registertilstand og en andre arkitektur tilpasset til et andre instruksjonssett som er redusert i forhold til det første instruksjonssett der det i andre kodeinstruksjoner for hver første kodeinstruksjon er organisert i en granular instruksjonssekvens som i rekkefølge har minst to grupper, en første gruppe innebefattende de andre kodeinstruksjoner som utfører annet instruksjonsarbeid enn tilstandsoppdatering og som kan avbrytes etter utførelse uten risiko for en tilstandsfeil og en andre gruppe med alle oppdateringsinstruksjoner for minne- og registertilstand, innbefattende enhver spesiell skriveinstruksjon som kreves for å implementere den første kodeinstruksjon som blir oversatt, der en første spesiell skriveinstruksjon blir strukturert for å innbefatte en første delsekvens til behandling av en enkel skriveinstruksjon til et første minnelagersted i overensstemmelse med et krav om at den enkle skriving må utføres uten noe avbrudd og uten noen mellomliggende motstridende skrivinger til det første minnelagersted av en annen prosessor som kan være koblet til minnetilstanden og der en andre spesiell skriveinstruksjon blir strukturert for å innbefatte en andre delsekvens til behandling av multiple skrivinger som alle må utføres uten avbrudd,karakterisert vedat fremgangsmåten omfatter følgende trinn: bruk av et andre datasystem tilpasset den andre arkitektur for å utføre den andre programkode; bestemmelse av opptreden av hver asynkrone hendelse under den andre kodeutførelse; bestemmelse under den andre kodeutførelse av opptreden av hver motstridende skriving til det første minnelagersted av den andre prosessor hvis den er koblet til minnetilstanden; avbrytelse for et gjenforsøk av enhver granular andre kodeinstruksjonssekvens for å bevare den første kodeinstruksjonstilstandsatomitet og første kodeinstruksjons granularitet hvis et asynkront hendelsesavbrudd har funnet sted under sekvensens utførelse før alle første gruppeinstruksjonene er blitt utført eller hvis de første gruppeinstruksjonene er blitt utført før utførelse av enhver andre gruppeinstruksjon som er utsatt for mulig unntagelse for derved å åpne for påfølgende behandling av den asynkrone hendelse; avbrytelse for et gjenforsøk inntil vellykket utførelse er fullført for den første spesielle instruksjonsdelsekvens i enhver granular andre kodeinstruksjonssekvens som innbefatter den første delsekvens hvis en motstridende skriving gjøres av den andre prosessor før fullførelse av utførelsen av den første delsekvens; avbrytelse av enhver granular andre kodeinstruksjonssekvens som innbefatter den første delsekvens for et gjenforsøk hvis et asynkront hendelsesavbrudd finner sted under den forsøkte utførelse av den første delsekvens; og forsinkelse av behandlingen av et asynkront hendelsesavbrudd og fullførelse av enhver granular andre kodeinstruksjonssekvens som blir utført A) hvis den andre delsekvens er innbe fattet i den granulare instruksjonssekvens og hvis det asynkrone hendelsesavbrudd finner sted høyst etter en første skriving under utførelse av den andre instruksjonsdelsekvens en eller B) hvis det asynkrone hendelsesavbrudd oppstår etter utførelse av den spesielle instruksjon eller etter alle tilstandsoppdaterende instruksjoner i den andre gruppe som er utsatt for mulige unntagelser.
11. System til oversettelse av en første programkode til en andre programkode og for utførelse av den andre programkode på en måte som bevarer instruksjonens tilstandsatomitet for den første kode, hvilken første programkode kan utføres på en datamaskin med en første arkitektur tilpasset et første instruksjonssett og den andre programkode kan utføres på en datamaskin med en minne- og registertilstand og en andre arkitektur tilpasset til et andre instruksjonssett som er redusert i forhold til det første instruksjonssett,karakterisert vedat systemet omfatter: et første datasystem med en første prosessor for oversettelse av den første programkode til den andre programkode og et første minnesystem koblet til den første prosessor; anordning for oversettelse av hver påfølgende instruksjon i den første kode til de andre kodeinstruksjoner i overensstemmelse med en mønsterkode for lagring som den andre programkode i det første minnesystem; anordning til organisering av den andre kodeinstruksjon for hver første kodeinstruksjon i en granular instruksjonssekvens som i rekkefølge har minst to grupper, en første gruppe innbefattende de andre kodeinstruksjoner som utfører annet instruksjonsarbeid enn tilstandsoppdatering og kan avbrytes etter utførelse uten risiko for en tilstandsfeil og en andre gruppe som har alle instruksjoner for minne og registertilstands-oppdatering innbefattende enhver spesiell skriveinstruksjon som kreves for å implementere den første kodeinstruksjon som blir oversatt; anordning for strukturering av en første spesiell skriveinstruksjon til å innbefatte en første delsekvens til behandling av en enkel skriving til et første minnelagersted i overensstemmelse med et krav om at den enkle skriving må bli utført uten noe avbrudd og uten noen meilomkommende motstridende skrivinger til det første minnelagersted av noen annen prosessor som kan ha blitt koblet til minnetilstanden: anordning for strukturering av en andre spesiell skriveinstruksjon til å innbefatte en andre delsekvens til behandling av multiple skrivinger som alle må utføres uten noe avbrudd; et andre datasystem til utførelse av den andre kode som er frembragt som utgang fra det første datasystem, hvilket andre datasystem har den nevnte andre arkitektur og en andre prosessor og et minne- og en registertilstand innbefattende et andre minnesystem koblet til den andre prosessor; anordning til bestemmelse, under utførelsen av den andre kode, tilstedeværelse av hver asynkrone hendelse og tilstedeværelse av hver motstridende skriving til det første minnelagersted av den andre prosessor hvis den er koblet til minnet i1standen; anordning til avbrytelse for et gjenforsøk av en granular andre kodeinstruksjonssekvens for å bevare den første kodeinstruksjons tilstandsatomitet og første kodeinstruksjons granularitet hvis et asynkront hendelsesavbrudd finner sted under sekvensensutførelse før alle de første gruppe instruksjoner er blitt utført eller hvis de første gruppe instruksjonene er blitt utført før utførelse av en andre gruppe instruksjon som er utsatt for et mulig unntak for derved å åpne for påfølgende behandling av den asynkrone hendelse; anording til avbrytelse for et gjenforsøk inntil vellykket utførelse er fullført for den første spesielle instruksjons delsekvens i enhver granular andre kodeinstruksjonssekvens som innbefatter den første sekvens hvis en motstridende skriving er gjort av den andre prosessor før fullførelse av utførelsen av den første delsekvens; anordning til avbrytelse av enhver granular andre kodes instruksjonssekvens som innbefatter den første delsekvens for et gjenforsøk hvis et asynkront hendelsesavbrudd oppstår under forsøkt utførelse av den første delsekvens; og anordning til forsinkelse av behandlingen av et asynkront hendelsesavbrudd og fullførelse av enhver granular andre kodeinstruksjonssekvens som utføres A) hvis den andre delsekvens er innbefattet i den granulare instruksjonssekvens og hvis det asynkrone hendelsesavbrudd oppstår høyst etter en første skriving under utførelse av den andre instruksjonsdelsekvens, eller B) hvis den asynkrone hendelse oppstår etter utførelse av alle instruksjoner om tilstandsoppdatering i den andre gruppe som er utsatt for mulige unntak.
12. System som angitt i krav 11,karakterisertved at den første delsekvens er en lese-modifiser-skrive delsekvens og ved at den første delsekvens blir anvendt til å implementere en delvis skriveinstruksjon eller en stengt oppdateringsinstruksjon, hvilken første delsekvens innbefatter en last-låst lagre-betinget sekvens som leser og modifiserer inngangsdata, betinget lagrer de resulterende data og feiler den første delsekvens hvis en motstridende skriving har oppstått under dens utførelse elller fullfører den første delsekvens hvis ingen motstridende skriving har oppstått under utførelsen samt ved at den andre delsekvens innbefatter en enkel kallerutine for priviligert arkitekturbibliotek (PAL) som utfører den andre delsekvens og alle skrivinger som er innbefattet i denne straks PAL-kallerutinen blir initialisert og der initialisering av PAL-kallerutinen tillates hvis intet avbrudd tidligere har oppstått i utførelsen av den løpende instruksjonssekvens og hvis alle gjenværende tilstandstUganger kan fullføres uten unntak.
13. System som angitt i krav 12,karakterisertved at PAL-kallerutinen har en første delrutine som prøver en første skriving som skal utføres for å bestemme om det er en delvis skriving, foretar en last-låst betinget- lagring for å utføre den første skriving hvis den er en delvis skriving, selektivt gjenforsøker last-låst betinget-lagring inntil den fullfører hvis lagre-betinget feiler som et resultat av en motstridende tilstandsskrlving av den andre prosessor under forsøkte utførelse av den første delrutine, fullfører last-låst betinget-lagring hvis ingen motstridende tilstandsskrlving har funnet sted under et første forsøk hvis intet gjenforsøk er valgt eller under et påfølgende gjen-forsøk hvis gjenforsøkene blir valgt, der PAL-kallerutinen er låst inn for fullførelse etter fullførelse av den første delrutine og der en andre delrutine deretter prøver en andre skriving som skal utføres for å bestemme om denne er en delvis skriving, foretar en last-låst betinget-lagring for å utføre den andre skriving hvis den er en delvis skriving, gjenforsøker last-låst betinget lagring inntil den fullfører hvis lagre-betinget feiler som et resultat av en motstridende tilstandsskrlving • av den andre prosessor under forsøkt utførelse av den andre delrutine og ved at hver påfølgende skriving som skal utføres blir behandlet av en delrutine hovedsakelig identisk med den nevnte andre delrutine inntil alle skrivinger er utført for å fullføre PAL-kal1 ingen.
14. System for oversettelse av en første programkode til en andre programkode og til utførelse av den andre programkode på en måte som bevarer instruksjonens tilstandsatomitet fra den første kode, hvilken første programkode kan utføres på en datamaskin med en første arkitektur tilpasset et første instruksjonssett og den andre programkode kan utføres på en datamaskin med en minne- og registertilstand og en andre arkitektur som er tilpasset til et andre instruksjonssett som er redusert i forhold til det første instruksjonssett,karakterisert vedat systemet omfatter: et første datasystem med en første prosessor til oversettelse av den første programkode til den andre programkode og et første minnesystem koblet til den første prosessor; anordning til oversettelse av hver påfølgende instruksjon i den første kode til andre kodeinstruksjoner i overensstemmelse med en mønsterkode for lagring av den andre programkode i det første minnesystem; anordning til organisering av de andre kodeinstruksjoner for hver første kodeinstruksjon i en granular instruksjonssekvens som i rekkefølge har minst to grupper, en første gruppe innbefattende de andre kodeinstruksjoner som utfører annet instruksjonsarbeid enn tilstandsoppdatering og kan avbrytes etter utførelse uten risiko for en tilstandsfeil og en andre gruppe med alle instruksjoner for oppdatering av minne- og registertilstand, innbefattende enhver spesiell skriveinstruksjon som kreves for å implementere den første kodeinstruksjon som oversettes; anordning til strukturering av en spesiell skriveinstruksjon for å innbefatte en delsekvens til behandling av en enkel skriving til et første minnelagersted i overensstemmelse med et krav om at den enkle skriving må bli utført uten avbrudd og uten me11omkommende motstridende skrivinger til det første minnelagersted av en annen prosessor som kan være koblet til minnetilstanden; et andre datasystem til utførelse av den andre kode som er frembragt som utgang fra det første datasystem, hvilket andre datasystem har den andre arkitektur og har en andre prosessor og et minne- og en registertilstand innbefattende et andre minnesystem koblet til den andre prosessor; anordning til under utførelsen av den andre kode å bestemme tilstedeværelse av hver asynkron hendelse og tilstedeværelse av hver motstridende skriving til det første minnelagersted av den andre prosessor hvis den er koblet til minnetilstanden ; anordning til avbrytelse for gjenforsøk av enhver granular andre kodeinstruksjonssekvens for å bevare den første kodeinstruksjons tilstandsatomitet og den første kode ins truk-s jons granularitet hvis et asynkront hendelsesavbrudd opptrer under sekvensensutførelsen før alle første gruppe instruksjoner er blitt utført eller hvis første gruppe instruksjon ene er blitt utført før utførelse av noen andre gruppe instruksjon som er utsatt for mulig unntagelse, for dermed å åpne for påfølgende behandling av den asynkrone hendelse; anordning til avbrytelse for et gjenforsøk Inntil vellykket utførelse blir fullført for den første spesielle instruksjons delsekvens i enhver granular andre kodeinstruksjonssekvens som innbefatter delsekvensen hvis en motstridende skriving gjøres av den andre prosessor før fullførelse av delsekven-sens utførelse; anordning til avbrytelse av enhver granular andre kodes instruksjonssekvens som innbefatter delsekvensen for gjenforsøk hvis et asynkront hendelsesavbrudd har funnet sted under forsøkt utførelse av delsekvensen; og anordning Innbefattende den andre prosessor og det andre minnesystem til forsinkelse av behandlingen av et asynkront hendelsesavbrudd og fullførelse av enhver andre kode instruksjonssekvens som blir utført hvis den asynkrone hendelse opptrer etter utførelse av alle tilstandsoppdaterende instruksjoner i den andre gruppe som er utsatt for mulig unntagelse.
15. System som angitt i krav 14,karakterisertved at den første delsekvens er en lese-modifIser-skrive delsekvens og ved at den første delsekvens anvendes for å implementere en delvis skriveinstruksjon eller en stengt oppdateringsinstruksjon, hvilken første delsekvens innbefatter en last-låst lagre-betinget sekvens som leser og modifiserer inngangsdata, betinget lagrer de resulterende data og feiler den første delsekvens hvis en motstridende skriving har funnet sted under dens utførelse eller fullfører den første delsekvens hvis ingen motstridende skriving har funnet sted under utførelsen.
16. System til oversettelse av en første programkode til en andre programkode og for utførelse av den andre programkode på en måte som bevarer instruksjonens tilstandsatomitet fra den første kode, hvilken første programkode kan utføres på en datamaskin med en første arkitektur tilpasset et første instruksjonssett og den andre programkode kan utføres på en datamaskin med et minne og en registertilstand og en andre arkitektur som er tilpasset til et andre instruksjonssett som er redusert i forhold til det første instruksjonssett,karakterisert vedat systemet omfatter: et første datasystem med en første prosessor for oversettelse av den første programkode til den andre programkode og et første minnesystem koblet til den første prosessor; anordning til oversettelse av hver påfølgende instruksjon i den første kode til andre kodeinstruksjoner i overensstemmelse med en mønsterkode for lagring som den andre programkode i det første minnesystem; anordning til organisering av de andre kodeinstruksjoner for hver første kodeinstruksjon i en granular instruksjonssekvens som i rekkefølge har minst to grupper, en første gruppe innbefattende de andre kodeinstruksjoner som utfører annet arbeid enn tilstandsoppdatering og kan avbrytes etter utførelse uten risiko for en tilstandsfeil og en andre gruppe med alle instruksjoner for oppdatering av minne- og registertilstanden, innbefattende enhver spesiell skriveinstruksjon som er nødvendig for å implementere den første kodeinstruksjon som oversettes; anordning til strukturering av en spesiell skriveinstruksjon for å innbefatte en delsekvens til behandling av multiple skrivinger som alle må utføres uten noe avbrudd, et andre datasystem til utførelse av den andre kode som er frembragt som utgang fra det første datasystem, hvilket andre datasystem har den andre arkitektur og en andre prosessor og et minne og en registertilstand innbefattende et andre minnesystem koblet til den andre prosessor; anordning til under utførelsen av den andre kode å bes-temme opptreden av hver asynkrone hendelse; anordning til avbrytelse for et gjenforsøk av enhver granular andre kodeinstruksjonssekvens for å bevare den første kode instruksjons tilstandsatomitet og første kodeinstruksjons granularitet hvis et asynkront hendelsesavbrudd finner sted under sekvensensutførelsen før alle første gruppe instruksjonene er blitt utført eller hvis første gruppe instruksjonene er blitt utført før utførelse av en andre gruppe instruksjon som er utsatt for en mulig unntagelse, for derved å åpne for påfølgende behandling av den asynkrone hendelse; anordning innbefattende den andre prosessor og det andre minnesystem til forsinkelse av behandlingen av et asynkront hendelsesavbrudd<q>g fullførelse av enhver granular andre kodeinstruksjonssekvens som utføres A) hvis den andre delsekvens er innbefattet i den granulare instruksjonssekvens og hvis det asynkrone hendelsesavbrudd finner sted høyst etter en første skriving under utførelsen av den andre instruksjons- delsekvens eller B) hvis den asynkrone hendelse finner sted etter utførelse av alle tilstandsoppdaterende instruksjoner i den andre gruppe som er utsatt for mulig unntagelse.
17. System til utførelse av en andre programkode samtidig med bevaring av tilstandsatomiteten for en første programkode, hvorfra den andre programkode er oversatt, hvilken første programkode kan utføres på en datamaskin med en første arkitektur som er tilpasset et første instruksjonssett og den andre programkode kan utføres på en datamaskin med et minne- og en registertilstand og en andre arkitektur som er tilpasset til et andre instruksjonssett som er redusert i forhold til det første instruksjonssett, hvilke andre kodeinstruksjoner for hver første kodeinstruksjon er organisert i en granular instruksjonssekvens som i rekkefølge har minst to grupper, en første gruppe innebefattende de andre kodeinstruksjoner som gjør annet instruksjonsarbeid enn tilstandsoppdatering og kan avbrytes etter utførelse uten risiko for en tilstandsfeil og en andre gruppe med alle instruksjoner for oppdatering av minnet og registertilstanden innbefattende enhver spesiell skriveinstruksjon som er nødvendig for å implementere den første kodeinstruksjon som oversettes, der en første spesiell skriveinstruksjon blir strukturert for å innbefatte en første delsekvens til behandling av en enkel skriving til et første minnelagersted i overensstemmelse med et krav om at den enkle skriving må bli utført uten avbrudd og uten noen me11omkommende motstridende skrivinger til det første minnelagersted av noen annen prosessor som kan være koblet til minnetilstanden, og der en andre spesiell skriveinstruksjon blir strukturert for å innbefatte en andre delsekvens til behandling av multiple skrivinger som alle må utføres uten noe avbrudd,karakterisert vedat systemet omfatter: anordning til anvendelse av et andre datasystem som er tilpasset med en andre arkitektur for å utføre den andre programkode; anordning til bestemmelse av opptreden av hver asynkrone hendelse under utførelsen av den andre kode; anordning til under den andre kodes utførelse å bestemme opptreden av hver motstridende skriving til det første minnelagersted av den andre prosessor hvis den er koblet til minnet i1standen; anordning til avbrytelse for et gjenforsøk av enhver granular andre kodeinstruksjonssekvens for å bevare den første kodeinstruksjonstilstandsatomitet og første kodes instruksjonsgranularitet hvis et asynkront hendelsesavbrudd finner sted under sekvensensutførelse før alle første gruppeinstruksjonene er blitt utført eller hvis første gruppeinstruksjonene er blitt utført før utførelse av enhver andre gruppeinstruksjon som er utsatt for en mulig unntagelse for derved å åpne for påfølgende behandling av den asynkrone hendelse; anordning til avbrytelse for et gjenforsøk inntil vellykket utførelse fullfører den første spesielle instruksjonsdelsekvens i enhver granular andre kodeinstruksjonssekvens som innbefatter den første delsekvens hvis en motstridende skriving gjøres av den andre prosessor før fullførelse av utførelsen av den første delsekvens; anordning til avbrytelse av enhver andre kodeinstruksjonssekvens som innbefatter den første delsekvens for et gjenforsøk hvis et asynkront hendelsesavbrudd finner sted under forsøkt utførelse av den første delsekvens; og anordning til forsinkelse av behandlingen av et asynkront hendelsesavbrudd og fullførelse av enhver granular andre kodeinstruksjonssekvens som utføres A) hvis den andre delsekvens er innbefattet i den granulare instruksjonssekvens og hvis det asynkrone hendelsesavbrudd finner sted høyst etter en første skriving under utførelse av den andre instruksjonsdelsekvens eller B) hvis det asynkrone hendelsesavbrudd finner sted etter utførelse av den nevnte spesielle instruksjon eller etter alle tilstandsoppdaterende instruksjoner i den andre gruppe som er utsatt for mulig unntagelse.
NO924260A 1991-03-07 1992-11-05 FremgangsmÕter og systemer for Õ bevare kildeinstruksjonens atomitet i oversatt programkode NO303419B1 (no)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US66607191A 1991-03-07 1991-03-07
PCT/US1992/001715 WO1992015946A1 (en) 1991-03-07 1992-03-03 System and method for preserving source instruction atomicity in translated program code

Publications (3)

Publication Number Publication Date
NO924260D0 NO924260D0 (no) 1992-11-05
NO924260L NO924260L (no) 1993-01-06
NO303419B1 true NO303419B1 (no) 1998-07-06

Family

ID=24672704

Family Applications (1)

Application Number Title Priority Date Filing Date
NO924260A NO303419B1 (no) 1991-03-07 1992-11-05 FremgangsmÕter og systemer for Õ bevare kildeinstruksjonens atomitet i oversatt programkode

Country Status (15)

Country Link
US (1) US5636366A (no)
EP (1) EP0537309B1 (no)
JP (1) JPH0638234B2 (no)
KR (1) KR950006616B1 (no)
AT (1) ATE180908T1 (no)
CA (1) CA2082408C (no)
DE (1) DE69229319T2 (no)
FI (1) FI925057A0 (no)
IE (1) IE920739A1 (no)
IL (1) IL100991A (no)
MX (1) MX9200936A (no)
NO (1) NO303419B1 (no)
PT (1) PT100205A (no)
TW (1) TW197505B (no)
WO (1) WO1992015946A1 (no)

Families Citing this family (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3590075B2 (ja) * 1992-01-20 2004-11-17 株式会社東芝 仮想記憶方式のデータ処理装置及び方法
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
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
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
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
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
US6763452B1 (en) 1999-01-28 2004-07-13 Ati International Srl Modifying program execution based on profiling
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
US6954923B1 (en) 1999-01-28 2005-10-11 Ati International Srl Recording classification of instructions executed by a computer
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
US7111290B1 (en) 1999-01-28 2006-09-19 Ati International Srl Profiling program execution to identify frequently-executed portions and to assist binary translation
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
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
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
US6779107B1 (en) 1999-05-28 2004-08-17 Ati International Srl Computer execution by opportunistic adaptation
US7254806B1 (en) 1999-08-30 2007-08-07 Ati International Srl Detecting reordered side-effects
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)

* Cited by examiner, † Cited by third party
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

Also Published As

Publication number Publication date
TW197505B (no) 1993-01-01
DE69229319T2 (de) 2000-01-27
NO924260D0 (no) 1992-11-05
DE69229319D1 (de) 1999-07-08
IL100991A (en) 1996-09-12
IE920739A1 (en) 1992-09-09
EP0537309B1 (en) 1999-06-02
JPH0638234B2 (ja) 1994-05-18
EP0537309A1 (en) 1993-04-21
FI925057A (fi) 1992-11-06
CA2082408C (en) 1998-11-17
US5636366A (en) 1997-06-03
WO1992015946A1 (en) 1992-09-17
ATE180908T1 (de) 1999-06-15
CA2082408A1 (en) 1992-09-08
FI925057A0 (fi) 1992-11-06
NO924260L (no) 1993-01-06
KR950006616B1 (ko) 1995-06-19
AU1571492A (en) 1992-10-06
MX9200936A (es) 1993-04-01
JPH05505693A (ja) 1993-08-19
AU654707B2 (en) 1994-11-17
PT100205A (pt) 1994-04-29

Similar Documents

Publication Publication Date Title
NO303419B1 (no) FremgangsmÕter og systemer for Õ bevare kildeinstruksjonens atomitet i oversatt programkode
JP3753743B2 (ja) 先進のプロセッサにおけるメモリ・データ・エリアシング方法および装置
US5958061A (en) Host microprocessor with apparatus for temporarily holding target processor state
KR100463810B1 (ko) 어드레스되는 구성요소의 물리적 특성에 관한 추측 실패를 검출하는 마이크로프로세서용 메모리 제어기
US7716452B1 (en) Translated memory protection apparatus for an advanced microprocessor
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
EP0071028B1 (en) Instructionshandling unit in a data processing system with instruction substitution and method of operation
US5887159A (en) Dynamically determining instruction hint fields
JP3093624B2 (ja) 投機例外を処理する方法及び装置
JP3776132B2 (ja) マイクロプロセッサの改良
JP2001507151A (ja) 先進のマイクロプロセッサのためのゲート格納バッファ
NO304459B1 (no) Forbedret feilrapportering for utf°relse av oversatt kode
US6728846B2 (en) Method and data processing system for performing atomic multiple word writes
EP0484033B1 (en) Method for implementing dismissible instructions on a computer
JP2001519955A (ja) 先進のプロセッサのための変換メモリ保護装置
KR100522468B1 (ko) 타겟 프로세서의 상태를 일시적으로 홀딩하는 장치를 갖는 호스트 마이크로프로세서
Ospanova et al. DESIGN OF DEBUGGERS