A dynamic binary translator converts input instruction sequences into
output instruction sequences that are stored in a translation cache. In
order to maintain coherence of the translation cache with the run-time
version of the input instructions, translated code is checked by either a
conflict detection mechanism or a code-invariance mechanism. For conflict
detection, the system preferably uses memory traces generated by the
memory management unit of the underlying hardware processor. In order to
check for code-invariance, preludes for comparing cached, output
instruction sequences with their supposed run-time input instruction
equivalents are appended to the cached instructions themselves. Changes in
the input sequences then result only in retranslation of instruction
sequences in which at least one instruction has changed; this avoids
costly total flushes of the translation cache. An additional prelude is
appended to any cached output sequences displaying characteristics of
potentially self-constant-modifying code. If the input instructions have
since translation changed with respect only to constants, then the
constants are updated before execution; this completely eliminates the
need for flushing the translation cache or retranslating the instruction
if only constants have changed since the original translation. The
invention is preferably incorporated in a virtual machine monitor, on
which a virtual machine is running.
Ένας δυναμικός δυαδικός μεταφραστής μετατρέπει τις ακολουθίες οδηγίας εισαγωγής στις ακολουθίες οδηγίας παραγωγής που αποθηκεύονται σε μια κρύπτη μεταφράσεων. Προκειμένου να διατηρηθεί η συνοχή της κρύπτης μεταφράσεων με την έκδοση χρόνου εκτέλεσης των οδηγιών εισαγωγής, ο μεταφρασμένος κώδικας ελέγχεται από είτε έναν μηχανισμό ανίχνευσης σύγκρουσης είτε έναν μηχανισμό κώδικας-σταθερότητας. Για την ανίχνευση σύγκρουσης, το σύστημα χρησιμοποιεί κατά προτίμηση τα ίχνη μνήμης που παράγονται από τη διοικητική μονάδα μνήμης του ελλοχεύοντος επεξεργαστή υλικού. Προκειμένου να ελέγξουν για την κώδικας-σταθερότητα, προοίμια για τη σύγκριση που εναποθηκεύεται, οι ακολουθίες οδηγίας παραγωγής με τα υποτιθέμενα αντίτιμα οδηγίας εισαγωγής χρόνου εκτέλεσής τους επισυνάπτονται στις εναποθηκευμένες οδηγίες οι ίδιοι. Οι αλλαγές στις ακολουθίες εισαγωγής οδηγούν έπειτα μόνο στο retranslation των ακολουθιών οδηγίας στο οποίο τουλάχιστον μια οδηγία έχει αλλάξει αυτό αποφεύγει τις δαπανηρές συνολικές εκροές της κρύπτης μεταφράσεων. Ένα πρόσθετο προοίμιο επισυνάπτεται σε οποιεσδήποτε εναποθηκευμένες ακολουθίες παραγωγής επιδεικνύοντας τα χαρακτηριστικά ενδεχομένως να μόνος-σταθερός-τροποποιήσει τον κώδικα. Εάν οι οδηγίες εισαγωγής από τη μετάφραση έχουν αλλάξει με σεβασμό μόνο στις σταθερές, κατόπιν οι σταθερές ενημερώνονται πριν από την εκτέλεση αυτό εξαλείφει πλήρως την ανάγκη για την κρύπτη μεταφράσεων ή την οδηγία εάν μόνο οι σταθερές έχουν αλλάξει από την αρχική μετάφραση. Η εφεύρεση ενσωματώνεται κατά προτίμηση σε ένα εικονικό όργανο ελέγχου μηχανών, στο οποίο μια εικονική μηχανή τρέχει.