DE69727407T2 - Verteilte Ausführung von modusungeeigneten Befehlen in Multiprozessorsysteme - Google Patents

Verteilte Ausführung von modusungeeigneten Befehlen in Multiprozessorsysteme Download PDF

Info

Publication number
DE69727407T2
DE69727407T2 DE69727407T DE69727407T DE69727407T2 DE 69727407 T2 DE69727407 T2 DE 69727407T2 DE 69727407 T DE69727407 T DE 69727407T DE 69727407 T DE69727407 T DE 69727407T DE 69727407 T2 DE69727407 T2 DE 69727407T2
Authority
DE
Germany
Prior art keywords
processor
command
processing
cpu
slave
Prior art date
Legal status (The legal status 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 status listed.)
Expired - Lifetime
Application number
DE69727407T
Other languages
English (en)
Other versions
DE69727407D1 (de
Inventor
Thomas J. Houston Bonola
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Compaq Computer Corp
Original Assignee
Compaq Computer 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 Compaq Computer Corp filed Critical Compaq Computer Corp
Publication of DE69727407D1 publication Critical patent/DE69727407D1/de
Application granted granted Critical
Publication of DE69727407T2 publication Critical patent/DE69727407T2/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • 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/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • 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/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • G06F9/3879Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor for non-native instruction execution, e.g. executing a command; for Java instruction set
    • 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5027Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals
    • G06F9/5044Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resource being a machine, e.g. CPUs, Servers, Terminals considering hardware capabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/50Indexing scheme relating to G06F9/50
    • G06F2209/509Offload

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multi Processors (AREA)
  • Hardware Redundancy (AREA)

Description

  • Diese Erfindung bezieht sich auf Multiprozessor- oder Computersysteme und insbesondere auf Techniken, die einer Host-CPU ermöglichen, Aufgaben, die nicht kompatibel mit dem aktuellen Operationsmodus der Host-CPU sind, einer oder mehreren Slave-CPUs, die die Betriebsmittel und die notwendigen Betriebskonfiguration zur Ausführung derselben hat oder haben, zuzuladen.
  • Viele beliebte Personalcomputer basieren auf der Intel Corporation (Intel). Die 8086-Rechnertamilie umfasst den 8088, den 8086, den 80186, den 80286, den 80386, den 80486 und in letzter Zeit die Pentium-Prozessoren und Pentium-Pro-Prozessoren. Diese komplexen Befehlssatz-Mikroprozessoren sind für Aufwärts-Kompatibilität ausgelegt, d. h. Programme, die für den 16-Bit-8088/8086 geschrieben wurden, können auf dem 80286, dem 80386, dem 80486 und den Pentium- oder Pentium-Pro-Prozessoren betrieben werden. Für den Zweck dieser Offenlegung wird die aufwärts kompatible Baureihe der Intel-Prozessoren und anderer Prozessoren, die einen Befehlssatz dieser Prozessoren enthalten, im Folgenden als die Intel-x86-Rechnerfamilie von Mikroprozessoren bezeichnet. Ebenso können für den Zweck dieser Offenlegung der 8088 und der 8086 als funktionsgemäß äquivalent betrachtet werden und werden im Folgenden als „der 8086" bezeichnet. Zusätzlich werden der 80386, der 80486, der Pentium und der Pentium Pro als funktionsgemäß äquivalent betrachtet und im Folgenden als „der 80386" bezeichnet.
  • Die erste Generation der x86-Intel-Mikroprozessor-Rechnerfamilie, der 8086 und der 8088 erschien 1981 mit der Einführung des IBM-PC der International Business Machines Corporation. Sie wurde sofort ein kommerzieller Erfolg, der ein Durcheinander von vergleichbaren Einheiten auslöste, die Mikroprozessoren 8086 oder 8088 enthielten. Mit der Zeit wurde die PC-Bauweise allgemeine Norm für den Multimilliarden-PC-Markt. Gleichermaßen wurde das erste Betriebssystem des PCs, MS-DOS, sofort und weltweit zur Anwendung gebracht. Dies lief auf eine enorme Menge an Software hinaus, die zum Betreiben auf Geräten der 8086-Klasse, die MS-DOS betrieben, entwickelt wurde.
  • Jedoch wurden die Beschränkungen des 8086 bald erkannt, als der Systemspeicher billiger wurde und die Benutzer anspruchsvoller wurden. Der 8086 konnte nur 1 MB Speicher direkt adressieren, der in einer Ansammlung von statischen 64 KB-Segmenten organisiert war und bot keine wirklichen mehrpfadigen, mehraufgabenfähigen Fähigkeiten oder hierarchische Tasking-Programme. Um den Mängeln ihrer Rechner zu begegnen, führte Intel deshalb 1983 den 80286 ein. Der Intel 80286 bot mehrere neue Leistungen, von denen die hervorragendste die Fähigkeit umfasste, in verschiedenen Betriebsarten – real und geschützt – zu arbeiten. Im Realbetrieb arbeitete der 80286 wie ein schneller 8086 und konnte MS-DOS und Anwendungen, die ursprünglich für den 8086 entwickelt wurden, ohne Modifizierung betreiben. Dies bedeutete jedoch auch, dass der 80286, wenn er im Realbetrieb betrieben wurde, die gleichen Beschränkungen wie der 8086 aufwies. Der geschützte Betrieb erlaubte die volle Anwendung der weiterentwickelten Adressierung und der Multitasking-Fähigkeiten des 80286, jedoch wurden die Rückwärts-Kompatibilität mit dem 8086 und mit MS-DOS geopfert. Weiterhin konnte der 80286, wenn er sich im geschützten Betrieb befand, nur durch einen Reset des Rechners auf den Realbetrieb zurückgeschaltet werden. Infolgedessen wurden die Vorteile des geschützten Betriebs des 80286 von PC-Software-Entwicklern wenig genutzt.
  • Mit der Baureihe der 80386-Mikroprozessoren überwand Intel schließlich diese Beschränkungen. Wie auch der 80286, bot der 80386 sowohl einen Realbetrieb als auch einen geschützten Betrieb an, bot jedoch höher entwickelte Adressierung und Datenübertragung an. Ebenso konnten dem Betriebssystem Privilegstufen (als Ringe bekannt, wobei Ring 0 der höchste und Ring 3 der niedrigste ist) zugewiesen werden und Anwendungen, um den Schutz vor Speicherfehlern zu verbessern und den Zugriff auf Systemdienste während der Ausführung von Multitasking-Operationen zu verbessern. Vor allem konnte der 80386 einen 8086 emulieren, während er im geschützten Betrieb war und zwar durch virtuelle 8086- (V86-) Emulation. MS-DOS selbst, oder andere Realbetriebanwendungen, konnten als ein V86-Task, dem Kern im geschützten Betrieb untergeordnet, aufgerufen werden. Mit derartigen geschützten Programmen und einem 4-Gigabyte dynamisch zuordbaren Speicherplatz konnte der 80386 mehrere V86-Thread-Arbeitsgänge mit Leichtigkeit gleichzeitig ausführen und konnte diese gleichzeitig mit Aufgaben im geschützten Betrieb ausführen. Eine ausführlichere Beschreibung der Intel-x86-Entwicklung und ein Vergleich der Leistungsfähigkeit jedes Mikroprozessors ist in U. S. Pat. Nr. 5,303,378, mit dem Titel „Reentrant Protected Mode Kernel Using Virtual 8086 Mode Interrupt Service Routines" zu finden.
  • Der geschützte Betrieb des 80386 ermöglicht fortgeschrittenen Betriebssystemen und Anwendungsprogrammen, das volle Potential des 80386 und seiner Nachfolger zu entfalten. Jedoch unterstützt der geschützte Betrieb, hauptsächlich wegen inkompatibler Adressierungsverfahren, noch immer nicht das vorherrschende PC-Betriebssystem MS-DOS als eine Systemanwendung. Deshalb kann die Codeausführung im geschützten Betrieb die meisten Bios-Level-Dienstprogramme nicht ausführen und die MS-DOS-Software unterbricht und muss sich stattdessen auf eine langsame Software-Emulation stützen, wenn derartige Dienste oder verwendete überlange Reflexionstechniken erforderlich sind.
  • Die V86-Task-Ausführung auf dem 80386 wurde sogar noch weitergehender aus dem Dienstprogramm und der Hardware entfernt. Programme, die auf MS-DOS basieren, von denen viele vor der Einführung des 80386 geschrieben wurden, setzten typischerweise ausschließlich Zugriff auf BIOS und die System-Eingabe/Ausgabe voraus und rufen häufig Realbetriebsdienste auf, um ihre Funktionen auszuführen. Um diese Programme in die hierarchische Multitasking-Umgebung des geschützten Betriebs zu integrieren, verweigern Systementwickler den V86-Tasks den direkten Zugriff auf die meisten BIOS-Level-Aufrufe und die DOS-Software unterbricht. Andernfalls könnten sie vordrängen, ohne die Privileg-Hierarchien des geschützten Betriebs zu respektieren. Alle Aufrufe werden durch eine virtuelle DOS-Überwachung (VDM) gefangen, entschieden und emuliert, ohne mit dem MS-DOS selbst durch eine Schnittstelle verbunden zu sein. Die VDM ist ebenso für die Unterbrechung von Reflexionsaktivitäten, die isolierte V86-Tasks über Systemänderungen benachrichtigen, verantwortlich. Die VDM ist bei der Emulation dieser Aufrufe erfolgreich, jedoch verlangen die zusätzlichen Verarbeitungsschritte im Vergleich zu dem echten Realbetrieb einen schweren Leistungsverlust ab. Außerdem muss die VDM, bevor beliebige V86-Threads beginnen können, durch den geschützten Modellkern vorinstalliert werden, typischerweise von einer Disk und derartiges Emulieren legt eine zusätzliche Codeverwaltungslast auf, die von Kompatibilitätsfaktoren, die unabhängig von der Anwendung sind, bei der Emulation gebraucht wird, abhängt.
  • Alternativ kann der 80386 niedrige BIOS-Level und MS-DOS-Dienste durch Zurückfallen in den Realbetrieb unterstützen. Wie oben und in dem U. S. Pat. Nr. 5,303,378 erörtert, deaktiviert jedoch der Übergang zurück in den Realbetrieb alle Funktionen des geschützten Betriebs und hinterlässt den Mikroprozessor lediglich so schnell wie den 8086 arbeitend. Selbst ein kurzzeitiger Übergang stört den Zugriff auf den Speicher über 1 MB hinaus und deaktiviert die meisten Multitasking-Schutzmechanismen, was zu unerwünschter Suspendierung von Threads oder zur Beendigung oder zu Datenkorruption führt, selbst wenn bei erweitertem Betrieb Kellerspeicher-Ablageoperationen verwendet werden. Ebenso muss das Speicherabbild des geschützten Betriebs bei erneutem Eintritt in den geschützten Betrieb neu initialisiert werden, was bei der Dienstabwicklung jeder Realbetriebsabfrage neue kritische Programmschritte und Taktzyklen hinzufügt. Deshalb wäre es erwünscht, die Funktionen und Systembetriebsmittel, die für eine bestimmte Betriebsart zugreifbar sind, zu verwenden, ohne auf langsame Software-Emulation zurückzugreifen oder die aktuelle Betriebsart des 80386-System-Mikroprozessors zu ändern.
  • EP-A-0623875 legt ein Computersystem mit einer Vielzahl von unabhängigen Prozessoren offen, die entweder einen getrennten Prozess für jeden Prozessor ausführen können, oder parallele Prozessoperationen über mehrere Prozessoren für einen Prozess ausführen können.
  • EP-A-0442041 legt einen Mehrzweckrechner offen, der einen Digitalsignalrechner zur Ausführung von bestimmten Befehlen zur Signalverarbeitung aufruft.
  • EP-A-0668560 legt ein Verfahren offen, bei dem das Errechnen intensiver Funktionen, wie zum Beispiel der Datensortierung, einem zweiten Rechner zugeladen wird.
  • US 4943915 legt ein Datenverarbeitungssystem zum Synchronisieren des Betriebs einer Co-Rechnereinheit mit dem Rest einer CPU offen, das zur Fließbandverarbeitung von Befehlen implementiert wird.
  • EP-A-0358136 legt einen Mikroprozessor offen, der einen Befehl durch einen extern mit dem Mikroprozessor verbundenen Co-Rechner erweitern kann.
  • Gemäß der vorliegenden Erfindung wird ein Verfahren zum Betreiben eines Multiprozessorsystems bereitgestellt. Das Multiprozessor-Computersystem umfasst einen ersten Multimodusprozessor, der geeignet für den Betrieb in einem ersten Verarbeitungsmodus und für den Betrieb in einem zweiten, mit dem ersten Verarbeitungsmodus inkompatiblen Verarbeitungsmodus, und zum Wechseln zwischen dem ersten und dem zweiten Verarbeitungsmodus, konfiguriert ist und einen zweiten Prozessor, konfigurierbar für den Betrieb in einem zweiten, mit dem ersten Verarbeitungsmodus inkompatiblen Verarbeitungsmodus, Einrichtungen zum Speichern eines Codevektors und Einrichtungen zum Speichern von Daten und Befehlsparametern, die sowohl für den ersten als auch für den zweiten Prozessor zugreifbar sind, wobei das Verfahren die folgenden Schritte umfasst:
    Treffen des ersten Prozessors, während er im ersten Verarbeitungsmodus ist, auf einen Befehl, der nicht durch den ersten Prozessor ausgeführt werden kann, sondern nur Software emuliert, während er im ersten Verarbeitungsmodus ist, und der durch den ersten Prozessor ausgeführt werden kann, während er im zweiten Verarbeitungsmodus ist,
    Ermitteln durch den ersten Prozessor, ob der zweite Prozessor für die Verarbeitung des Befehls verfügbar ist und
    Offloading des Befehls durch den ersten Prozessor auf den zweiten Prozessor, wenn der zweite Prozessor für die Verarbeitung des Befehls verfügbar ist, wobei die Offloading-Schritte umfassen:
    Zuladen der zur erfolgreichen Verarbeitung des Befehls erforderlichen Daten und Befehlsparameter in die Speichereinrichtung durch den ersten Prozessor,
    Bereitstellen eines auf den zur vollständigen Verarbeitung des Befehls notwendigen Quellcode hinweisenden Codevektors in der Codevektor-Speichereinrichtung durch den ersten Prozessor, Aktivieren des zweiten Prozessors durch den ersten Prozessor,
    Verwenden der gespeicherten Daten, der Befehlsparameter und des gespeicherten Codevektors durch den zweiten Prozessor, um die Verarbeitung des Befehls aufzunehmen,
    Speichern der durch die Verarbeitung des Befehls beschafften Resultate in der Daten und Befehlsparameterspeichereinrichtung durch den zweiten Prozessor,
    Melden des zweiten Prozessors an den ersten Prozessor, wenn die Verarbeitung des Befehls abgeschlossen ist,
    Laden der gespeicherten Resultate durch den ersten Prozessor zur Verwendung bei einem nachfolgenden Prozess, wenn die Meldung des zweiten Prozessors empfangen wurde.
  • Die vorliegende Erfindung involviert das Hinzufügen wenigstens eines Mikroprozessors, der im Folgenden als der Slave-Mikroprozessor oder Slave bezeichnet wird, der mit dem 80386-Mikroprozessor, der als System-CPU dient, der im Folgenden als der Host-Mikroprozessor oder als Host bezeichnet wird, so verbunden ist, dass Datenübertragung zwischen den Rechnern möglich ist. Vorzugsweise wird eine zugeordnete Leitung oder werden mehrere zugeordnete Leitungen, die von dem Host-Prozessor ausgeht oder ausgehen, elektrisch mit der Schaltung der Hardware-Interrupt-Leitung oder mit den Eingängen für die Datenübertragung zwischen den Rechnern des Slave-Mikroprozessors verbunden, um Task-Kontrolle durch den Host zu ermöglichen. Weitere durch die Slave-Mikroprozessoren unterhaltene Verbindungen sollten jene zwischen dem Host und dem Rest des Computersystems imitieren und die Slave-Mikroprozessoren werden in einer bekannten Art und Weise in das Computersystem integriert, so dass sie auf den gleichen Speicher zugreifen können oder an den gleichen Adressen eingeben/ausgeben können, wie jene, die für den Host-Mikroprozessor spezifiziert sind.
  • Der Slave-Mikroprozessor bzw. die Slave-Mikroprozessoren wird bzw. werden für den Offload von Software-Unterbrechungsbearbeitung und von anderen betriebsartspezifischen Befehlen, auf die der Host-Mikroprozessor trifft, wenn der Host nicht in der richtigen Betriebsart ist, um den Befehl auszuführen, verwendet. Genauer gesagt, wenn der Host-Mikroprozessor auf einen Befehl trifft, der wegen des aktuellen Betriebszustands des Hosts nicht bedient werden kann, wird der Host versuchen, einen „verfügbaren" Slave-Mikroprozessor zu finden, der zur Ausführung des Befehls geeignet ist. Dies kann das Abfragen des aktuellen Zustands des Slave-Mikroprozessors über Zustand und Betriebsartzustand umfassen. Wenn keine Slave-Mikroprozessoren verfügbar sind, belegt der Host das Kommando zur Weiterverarbeitung auf eine konventionelle Art und Weise durch Software-Emulation oder zeitweilige Transition des Betriebszustandes vor. Wenn jedoch ein geeigneter Slave zugeordnet wird, nimmt ihn der Host für die Ausführung des Befehls in Anspruch. Der Host füllt das Register des Slaves mit den zur Ausführung des Befehls erforderlichen Informationen einschließlich der Startadresse des Codes der benötigt wird, um den erwünschten Befehl durchzuführen, aller notwendigen Eingabeparameter (weitergegeben durch Verweis oder durch Wert) und Speicherplätze, an denen die Resultate gespeichert werden können. Bei Bedarf wird der Host den ausgewählten Multimodus-Slave für den adäquaten Betriebsmodus neu konfigurieren.
  • Nachdem alle notwendigen Informationen geladen wurden und die Slave-Betriebsart bedingt konfiguriert ist, weist der Host den ausgewählten Slave an, die Ausführung an der adäquaten Codeadresse zu beginnen, während er seine eigene Ausführung des Tasks vorläufig einstellt. Der Slave fährt damit fort, das Programm auf eine konventionelle Art und Weise auszuführen und lädt bei Vollzug die Resultate auf die zugewiesenen Speicherstellen und signalisiert an den Host. Danach stellt der Slave-Mikroprozessor die Ausführung ein und wartet auf das Erfolgen des nächsten für den Host modusungeeigneten Befehls. Zwischenzeitlich führt der Host, bei Empfang des durch den Slave ausgelösten Vollzugsignals, ein Upload der Ergebnisse in sein eigenes internes Register durch und nimmt die konventionelle Ausführung des zeitweilig eingestellten Threads wieder auf.
  • Die vorliegende Erfindung bietet eindeutige Vorteile gegenüber dem Stand der Technik, weil ein Wechsel der Host-Betriebsart oder eine komplizierte Emulation nicht erforderlich ist, um den modusungeeigneten Befehl oder die modusungeeignete Anweisung zu verarbeiten. Weiterhin ermöglicht es die Technik der bevorzugten Ausführung dem Host, die Ausführung des Tasks, bei dem der modusungeeignete Befehl entdeckt wurde, zeitweilig einzustellen, was dem Host ermöglicht, sich anderen Tasks in der Warteschlange zuzuwenden, während ein untergeordneter Mikroprozessor den Befehl durchführt. Ebenso müssen die Slave-Mikroprozessoren nicht multimodusfähig sein, solange sie anderweitig Registerlevel-Kompatibilität mit dem Host-Mikroprozessor bereitstellen können. Schließlich veranschaulicht die bevorzugte Ausführung, dass die vorliegende Erfin dung nicht implementierungsspezifisch ist und angewendet werden kann, wann immer der Host mit einer in dem Computersystem ebenso vorhandener Slave-Einheit oder mehreren in dem Computersystem ebenso vorhandener Slave-Einheiten Daten austauschen kann und diese Slave-Einheiten) steuern kann.
  • Ein besseres Verständnis der vorliegenden Erfindung ergibt sich, wenn die folgende ausführliche Beschreibung der bevorzugten Ausführung in Verbindung mit den begleitenden Zeichnungen betrachtet wird, in denen
  • 1 ein Blockdiagramm des Computersystems gemäß der bevorzugten Ausführung ist,
  • 2 ein ausführlicheres Blockdiagramm der CPU der 1 ist,
  • 3A und 3B Fließdiagramme der von dem Host-Mikroprozessor der bevorzugten Ausführung vorgenommenen Prozessschritte zum Offload eines modusungeeigneten Befehls auf den Slave-Mikroprozessor der bevorzugten Ausführung sind und
  • 4A und 4B Fließdiagramme der von dem Slave-Mikroprozessor der bevorzugten Ausführung vorgenommenen Prozessschritte bei der durch den Host der bevorzugten Ausführung angeforderten Ausführung des modusungeeigneten Befehls sind.
  • Bezug nehmend auf 1 wird ein Computersystem C gezeigt, das ein Computersystem ist, das in der bevorzugten Ausführung vorzugsweise vier zentrale Recheneinheiten (CPUs) umfasst, obwohl die vorliegende Erfindung in ein System aufgenommen werden kann, das nur zwei CPUs aufweist. Die Elemente des Computersystems C, die für die vorliegende Erfindung nicht wesentlich sind, es sei denn, um ein Beispiel eines vollständig konfigurierten Computersystems darzustellen, werden nicht detailliert erörtert. Die Mehrzahl der in 1 gezeigten Funktions- und Einrichtungsblöcke wird vorzugsweise auf einer Systemkarte (nicht gezeigt) angebracht. Das Computersystem C enthält vorzugsweise vier CPUs, die als CPU 20, 21, 22 und 23 bezeichnet werden, die an einen Hostbus 24 gekoppelt sind. Die CPUs 2023 werden jeweils als CPU0, CPU1, CPU2 und CPU3 bezeichnet, womit die Zuweisungen der bevorzugten logischen Eingänge angegeben werden. In der bevorzugten Ausführung werden wenigstens vier CPU-Steckverbinder auf dem Hostbus 24 zur Aufnahme von auswechselbaren CPU-Karten bereitgestellt, wobei die CPUs 2023 im Wesentlichen identisch in Konfiguration und Funktion sind. Es sei angemerkt, dass das Computersystem C zur Unterstützung einer Höchstanzahl von 8 CPUs geeignet ist. Die Eingangszuweisungen werden anfänglich durch den physikalischen Einschub, in den die CPU-Karte eingesteckt wird, bestimmt, obwohl die Zuweisung des logischen Eingangs vorzugsweise programmierbar ist.
  • Ein Speichercontroller 30 wird mit dem Hostbus 24 und ebenso mit einem Hauptspeicher-Array 32 gekoppelt, das vorzugsweise mehrere DRAM-Bänke enthält. Die Speicher-Mapper-Logik 34 wird mit dem Hostbus 24, dem Speichercontroller 30 und dem Speicher-Array 32 gekoppelt und stellt Speicher-Mapping-Funktionen zur Erleichterung des Speicherzugriffs an das Speicher-Array 32 bereit. Das Computersystem C enthält einen Erweiterungs-Bus 42, der vorzugsweise der EISA-(Extended Industry Standard Architecture-)Bus ist, obwohl andere Arten von Erweiterungs-Bussen in Erwägung gezogen werden können. Eine entsprechende EISA-Bus-Steuerung (EBC) 40 wird zwischen den Hostbus 24 und den EISA-Bus 42 gekoppelt. Der EBC 40 stellt verschiedene Bus-Zyklus-Translationen und Konvertierungsfunktionen bereit, um die Übertragung zwischen dem Hostbus 24 und dem EISA-Bus 42 zu erleichtern. Ein Systemdatenpuffer (SDP) 44 ist an den Hostbus 24, den EISA-Bus 42 und das Speicher-Array 32 gekoppelt. Der SDB 44 arbeitet, um die Daten zwischen dem Hostbus 24 und dem Speicher-Array 32, zwischen dem Hostbus 24 und dem EISA-Bus 42 und zwischen dem EISA-Bus 42 und dem Speicher-Array 32 zu puffern und zu übertragen.
  • Ein Logikblock, der als eine Zentralsystemperipherie (CSP) 46 bezeichnet wird, ist an den Hostbus 24, den EISA-Bus 42 und ebenso an eine Tastaturcontroller 62 gekoppelt. Die CSP 46 ist vorzugsweise durch einen MUX-Bus 50 an einen logischen Block gekoppelt, der als die verteilte Systemperipherie (DSP) 88A in der CPU 20 an eine in der CPU 21 angeordnete DSP 88B, an eine in der CPU 22 angeordnete DSP 88C und an eine in der CPU 23 angeordnete DSP 88D gekoppelt ist. Der MUX-Bus 50 umfasst eine Vielzahl von Leitungen zur Übertragung von Signalen zwischen der CSP 46 und den DSPs 88AD. Der EISA-Bus 42 enthält eine Vielzahl von EISA-Einschubrahmen 52 und 54 zur Aufnahme von auswechselbaren EISA-Erweiterungskarten, wie zum Beispiel Netzwerkkarten und Festplattenkarten. Der EISA-Bus 42 ist durch Puffer 56 an einen Bus, der als ein X-Bus 60 bezeichnet wird, gekoppelt. Eine Anzahl von Peripherieeinrichtungen ist an den X-Bus 60 gekoppelt: der Tastatur-Controller 62, eine Echtzeituhr (RCT) 64, ein elektronisch löschbarer programmierbarer Festwertspeicher (EEPROM) 66, ein Disketten-Controller 68 und einen Peripherie-Controller-Chip 70, der zahlreiche Eingänge und UARTs (universelle Asynchron-Empfänger/Sender) enthält. Der EEPROM 66 enthält bestimmte Grundbetriebsprogramme, die als BIOS bezeichnet werden, um die Hochfahrfunktionen in dem Computersystem C durchzuführen. Die Hochfahrfunktionen schließen die Initialisierung von Einrichtungstreibern für die peripheren Einrichtungen und die I/O-Einrichtungen ein. Der X-Bus 60 ist ebenso an einen Festplatten-Controller 69 gekoppelt, der einem Festplattenlaufwerk 71 Steuerungs- und Datensignale bereitstellt.
  • Die CPS 46 enthält verschiedene Systemfunktionen, einschließlich eines Auftrischungs-Controllers 90, einer MUX-Bus Schnittstelle 92, die an den MUX-Bus 50 gekoppelt ist, eines Direkt-Speicherzugriff-(DMA-)Controllers 94, eines EISA- oder zentralen Arbitrations-Controllers (CAC) 96 und diverser anderer logischer Funktionen der Systemkarte, die generell als die SGC 98 bezeichnet werden. Der Auffrischungs-Controller 90 steuert die Auffrischung der DRAMs in dem Speicher-Array 32 und der DMA-Controller 94 steuert den Direkt-Speicherzugriff auf den Speicher 32 durch die Peripherie- und I/O-Einrichtungen. Die MUX-Bus-Schnittstelle 92 empfängt verschiedene Interrupt-Anforderungssignale IRQ3-IRQ12, IRQ14 und IRQ15 von den verschiedenen Peripherie- und I/O-Einrichtungen. Die MUX-Bus-Schnittstelle 92 überträgt dann die Interrupt-Anforderungssignale an die DSPs 88AD über den MUX-Bus 50. Die SGC 98 in der CSP 46 enthält die CPU-Restart-Logik und die Force-A20-Logik und aktiviert entsprechende RSTAR- und LOW-A20-Signale, die dem MUX-Bus 50 bereitgestellt werden.
  • Diverse weitere Übertragungen sind erforderlich, um die DSPs 88AD über das Eintreten diverser Ereignisse innerhalb der CSP 46 zu informieren, u. a. sowohl die Bestätigung als auch die Nicht-Bestätigung, dass diese Ereignisse auf den MUX-Bus 50 übertragen werden. Beim Hochfahren ermittelt der Computer C automatisch, welche CPUs in den verfügbaren physikalischen CPU-Einschüben installiert sind und weist logische Eingangsnummern zu. Ein Hochfahrzeitabschaltungssignal wird aktiviert, das angibt, dass die CPU nicht installiert ist, wenn eine CPU nicht vor der Zeitabschaltung eines Timers reagiert.
  • Im Folgenden Bezug nehmend auf die 2 wird ein Blockdiagramm der CPU 20 gezeigt. Die CPUs 2023 arbeiten vorzugsweise auf eine sehr gleiche Art und Weise, ausgenommen, dass nur die CPU 20 in der bevorzugten Ausführung eine Speicher- Auffrischung generiert, da sie vorzugsweise die Host-CPU ist, d. h., sie ist logisch der CPU0 zugewiesen. Die CPU 20 wird im Folgenden beschrieben. Es versteht sich, dass die folgende Beschreibung ebenso für die CPUs 2123 gilt. Die CPU 20 enthält einen Rechner 72, der vorzugsweise entweder der Pentium oder der 80486-Mikroprozessor von Intel ist. Der Rechner 72 ist an einen Rechnerbus 76 gekoppelt, der Steuerungs-, Daten- und Adressbereiche, wie gezeigt, enthält. Ein 2 Level Cache-Controller 78 ist an die Adressen- und Steuerungsbereiche des Rechnerbusses 76 gekoppelt. Ein Cache-Speicher 80 ist an die Adressen- und Datenbereiche des Rechnerbusses 76 gekoppelt. Der Cache-Controller 78 ist über verschiedene Kontrollleitungen mit dem Cache-Speicher 80 verbunden, um einen vereinheitlichten Rückschreib- und Anweisungscache, der für die Systemsoftware erkennbar ist, bereitzustellen.
  • Die Cache-Schnittstellenlogik 82 ist durch Kontrollleitungen an den Cache-Controller 78 gekoppelt und ist an den Steuerungsbereich des Rechnerbusses 76 und des Hostbusses 24 gekoppelt. Die Adress-Pins des Cache-Controllers 78 sind mit einem Transceiver verbunden, der wiederum mit dem Hostbus 24 verbunden ist. Die durch den Transceiver 84 bereitgestellten Adressensignale werden ebenso mit der Cache-Schnittstellenlogik 82 verbunden. Die Daten-Pins des Cache-Speichers 80 werden mit einem Cache-Datenpuffer 86 verbunden, der mit dem Hostbus 24 verbunden ist. Der Cache-Datenpuffer 86 ist mit der DSP 88A über einen lokalen I/O-Bus 90, der die lokalen I/O-Adressdaten und Kontrollleitungen umfasst, verbunden.
  • Die DSP 88A enthält einen programmierbaren Interrupt-Controller (PIC), eine NMI-Logik, verschiedene Timer und eine Multiprozessor-Interrupt-Logik (MPINT). Der PIC umfasst vorzugsweise zwei kaskadierte 8-Bit-Interrupt-Controller INT-1 und INT-2, jeder ähnlich dem Intel 8259, um 15 Interrupt-Level bereitzustellen. Der INT-1 hat die Eingaben IRQ0–IRQ7, wovon IRQ2 die kaskadierte Interrupt IRQ2 von 1NT-2 ist. INT-2 empfängt die Eingaben IRQ8–IRQ15. Die CSP 46 stellt die Interrupts IRQ1, IRQ3–12 und IRQ14 und IRQ15, wie zuvor beschrieben, über den MUX-Bus 50 an den PIC bereit. Das IRQ0-Signal wird von den verschiedenen Timern bereitgestellt und stellt ein System-Timer-Interrupt für eine Uhrzeit, das Disketten-Timeout und andere System-Timing-Funktionen bereit. Das IRQ13-Interrupt wird zusammen mit einem DMA-Interrupt, einem korrigierbaren Speicherfehler-Interrupt, einem Coprozessor-Fehler-Interrupt und mehreren CPU-IRQ13 programmierbaren Interrupts benutzt.
  • Steuerungs-, Masken- und Flanken-/Level-Kontrollregister werden in der DSP 88A für jeden der Interrupt-Controller INT-1 und INT-2 bereitgestellt. Ebenso ist ein Interrupt-Anerkennungsregister, das als das INTA-Register bezeichnet wird, für die lokale CPU über einen Interrupt-Anerkennungszyklus für den lokalen I/O-Bus 90 zugreifbar. Der PIC aktiviert ein Signal INT an die CPU 20, wenn beliebige dieser Interrupts auftreten und nicht maskiert sind.
  • Die NMI-Logik in der DSP 88A erzeugt ein NMI-Interrupt über ein Signal NMI, um den lokalen Rechner 72 über die Bedingungen in dem System, die sofortige Aufmerksamkeit benötigen, bevor der Rechner 72 mit seinem aktuellen Task fortsetzen kann, zu benachrichtigen.
  • Die MPINT ermöglicht, CPU-Interprozessor-Interrupts (IPIs) und andere Interrupt-Quellen gemeinsam auf jedem Interrupt-Level zu benutzen und ermöglicht auf diese Art und Weise eine höhere Softwareflexibilität in einer Multiprozessorumgebung. Die MPINT generiert die Interrupt-Level-MPIRQ0–15, die als Reaktion auf Interprozessor-Interrupts generiert werden. Jedes programmierbare PCU-Interrupt kann bei jedem Interrupt-Level durch Multiprozessor-Interrupt-Steuerungs-/Status-Eingänge einzeln aktiviert werden, deaktiviert werden, eingestellt oder gelöscht werden. Die MP-Interrupt-Eingänge werden im Allgemeinen als Steuerungseingänge bezeichnet, wenn sie angeschrieben werden und als Statuseingänge, wenn sie gelesen werden. Jedes Level des Interrupts, im Allgemeinen durch den Buchstaben X dargestellt, ist eine ganze Zahl von 0 bis 15, die Level 2 ausschließt, bei dem jedes der Interrupt-Level MPIRQ0–15 seinen eigenen MP-Interrupt-Steuerungs-/Status-Eingang hat. Vorbestimmte, in die Steuerungseingänge geschriebene Werte, können folglich ein Interrupt-Level-MPIRQX freigeben oder einstellen, um auf eine IPI zu reagieren. Der Status für jedes der Interrupt-Levels X kann durch Lesen des entsprechenden MP-Interrupt-Status-Eingangs beschafft werden. Der Rechner 72 kann auf seine eigenen MP-Interrupt-Eingänge über den lokalen Buszugriff zugreifen und kann auf die MP-Interrupt-Eingänge anderer Rechner durch den Hostbus 24 zugreifen.
  • Das Mapping der Interprozessor-Interrupts auf Interrupt-Level-MPIRQX erfolgt über einen CPU-Interrupt-Maskeneingang und einen durch die CPU programmierbaren Inter rupt-Eingang. Die MP-Interrupt-Anforderungsausgaben (MPIRQX) werden mit den IRQX-Eingaben innerhalb des PIC0 gelesen und ermöglichen somit das Benutzen der Interprozessor-Interrupt-Levels zusammen mit normalen System-Interrupts.
  • In der folgenden Beschreibung wird vorausgesetzt, dass die CPU 20 die Host-CPU ist, obwohl jede der anderen CPUs 2123 Host sein kann. Da per Definition nur eine CPU als Host bestimmt werden kann, werden in der folgenden Beschreibung die CPUs 2123 kollektiv als die Slave-CPUs bezeichnet.
  • Es versteht sich, dass andere Anordnungen des Multiprozessor-Computersystems verwendet werden könnten, wobei die einzelnen Rechner auf andere Art und Weise angeordnet werden und auf andere Art und Weise miteinander Daten austauschen.
  • Die 3A und 3B sind Fließdiagramme der von der Host-CPU vorgenommenen Prozessschritte zum Offload eines modusungeeigneten Befehls gemäß der bevorzugten Ausführung. Als ein besonderes Beispiel zeigen die 3A und 3B, wie die Host-CPU 30 ein BIOS-Level-INT-13h-Diskettentreiber-Software-Interrupt initialisiert, während sie im geschützten Betrieb verbleibt.
  • Während der Ausführung eines Threads, kann die Host-CPU 20 auf eine Anweisung, einen Befehl oder ein Interrupt (im Folgenden zusammengefasst als Befehl bezeichnet) treffen, die bzw. den sie in ihrem aktuellen Betriebsmodus nicht verarbeiten kann. Gemäß der bevorzugten Ausführung beginnt, wenn sich eine derartige Situation entwickelt, die Ausführung durch die Host-CPU bei Schritt 1000. In dem Schritt 1010 wird ein vorzugsweise softwarebasierter slave_available Wachhund-Timer neu eingestellt, um die Höchstwartezeit anzugeben, die der Host, um auf eine verfügbare Slave-CPU 21, 22 oder 23 zu warten, einzukalkulieren hat, bevor er auf die Verarbeitung des modusungeeigneten Befehls zurückfällt (d. h. durch die oben erörterten Ring- und Modustransitionen oder durch Befehls-Emulation). Ebenso stellt der Softwaretimer sicher, dass die Rückwärtskompatibilität für Systeme, die zu diesem Zweck keine Slave-CPUs eingesetzt haben, aufrechterhalten bleibt. Danach geht die Steuerung zu dem Schritt 1011 über. In dem Schritt 1011 wird ermittelt, ob eine Slave-CPU 2123 zum Offload der Ausführung des modusungeeigneten Befehls verfügbar ist. Vorzugsweise wird dies durch das Abfragen des aktuellen Status und des Aktivitätszustands, die in den 1 und 2 oben beschrieben wurden, der Multiprozessor-Interrupt-Eingänge jeder der Slave- CPUs erreicht. Alternativ könnte die Host-CPU 20 den aktuellen Status aller in dem System vorhandenen Slave-CPUs 2123 mittels einer Suchtabelle, die in einem Rechnerstatusspeicherblock, der vorzugsweise innerhalb des Hauptspeicher-Arrays 32 enthalten ist, suchen, wobei dieser Rechnerstatusspeicherblock sowohl für den Host als auch für alle Slave-CPUs zugreifbar ist. Jede Slave-CPU ist für die Aufrechterhaltung ihrer eigenen Statuseinträge verantwortlich, einschließlich des Konfigurationsmodus (z. B. geschützt, V86 oder real). Andere Informationen, wie zum Beispiel Task-Prioritätszuweisungen, Anruf der CPU usw., könnten auf eine in der Technik bekannte Art und Weise implementiert werden. Ein Aktivitätszustands-Flag, das als das slave_finished Flag bezeichnet wird, wird verwendet, um Arbeits- bzw. Freizustandsanzeigen bereitzustellen, wobei die Host-CPU 20 das Flag für den Arbeitszustand setzt und die Slave-CPU das Flag zurück auf den Freizustand bringt.
  • Wenn in dem Schritt 1010 wird ermittelt wurde, dass keine Slave-CPU 21, 22 oder 23 verfügbar ist, um den Befehl zu bedienen, geht die Steuerung zu dem Schritt 1015 über. In dem Schritt 1015 wird ermittelt, ob der slave_available Software-Timer abgelaufen ist. Wenn er tatsächlich abgelaufen ist, geht die Steuerung zu dem Schritt 1016. In dem Schritt 1016 wird der modusungeeignete Befehl konventionell, entweder durch Software-Emulation, die eine Codeableitung der VDM verwendet, oder durch Ringmodus-Transition, wie zuvor beschrieben, behandelt.
  • Wenn in dem Schritt 1015 jedoch ermittelt wird, das der slave_available Timer noch nicht abgelaufen ist, geht die Steuerung innerhalb dieses Thread zu dem Schritt 1011 zurück. Es sollte anerkannt werden, dass die Host-PCU vorzugsweise ein 80386 oder ein höherer Mikroprozessor ist, der innerhalb eines interrupt-betriebenen Computersystems vollständige Multitasking-Fähigkeiten anbietet, so dass der Host die Ausführung des aktuellen Threads ordnungsgemäß an jedem hier beschriebenen Punkt zeitweilig aussetzen kann, um einem Ereignis oder einem Thread höherer Priorität dienen zu können, wie in der Technik bekannt. Danach werden die Schritte 1011 und 1015 ständig wiederholt, bis entweder eine Slave-CPU 2123 mit den notwendigen Modusfähigkeiten verfügbar wird oder der slave_available Softwaretimer abläuft.
  • Wenn eine Slave-CPU 21, 22 oder 23 vor dem Ablaufen des slave_vailable Timers verfügbar wird, geht die Steuerung zu dem Schritt 1020 über. In dem Schritt 1020 wird ein vorzugsweise angrenzender Block des Hauptspeicher-Arrays 32, der sowohl für den Host als auch für alle in dem Computersystem vorhandenen Slave-CPUs zugreifbar ist, mit den Parametern, die notwendig sind, um den modusungeeigneten Befehl erfolgreich auf der ausgewählten Slave-CPU 21, 22 oder 23 durchzuführen, geladen. Speziell bei dem Fall eines INT-13h-Software-Interrupts gemäß der bevorzugten Ausführung wird dieser gemeinsame Speicherblock wenigstens das bestimmte BIOS-Diskettendienstprogramm zum Ausführen enthalten, das eventuell in das EAX-Allzweckregister der CPU des ausgewählten Slaves und in die physikalische Geräte-ID für die Zieldiskette oder das Datenfeld der Diskette geladen werden, die in das EDX-Allzweckregister des Slaves geladen werden. Andere Speicherorte innerhalb des Blocks, die weiteren Daten entsprechen, die eventuell in die Register der CPUs 21, 22 oder 23 zu laden sind, werden bedingt, basierend auf dem bestimmten Diskettendienstprogramm, das der Host ausgeführt haben möchte, aufgefüllt. Wenn das Laden abgeschlossen ist, geht die Steuerung zu dem Schritt 1030 weiter.
  • In dem Schritt 1030 wird, wie in 3A gezeigt, die adäquate Startadresse für den Code, der notwendig ist, um den ungeeigneten Befehl auf der ausgewählten Slave-CPU 21, 22 oder 23 auszuführen, auf eine bekannte Art und Weise auf die CS : IP (40 : 67) „warne" Reset-Vektorspeicherstelle geschrieben. Vorzugsweise wird die Host-CPU 20 die adäquate Startadresse aus einer Suchtabelle oder einem Array beschaffen, die durch den erwünschten Slave-Modus und den eingetroffenen ungeeigneten Befehl verschlüsselt sind. Dies ermöglicht, wenn erforderlich, eine automatische Neukonfiguration des ausgewählten Slaves vor der Ausführung des Befehls. Jedoch können Abwicklungstabellen oder Datenbasisalternativen, die den Fachleuten auf diesem Gebiet bekannt sind, ebenso verwendet werden, um die richtige Startadresse mit dem zur Ausführung erwünschten Befehl und dem erwünschten Modus, in dem auszuführen ist, übereinzustimmen. Sobald der „warme" Reset-Vektor mit der adäquaten Startcodeadresse geladen ist, geht die Steuerung zu dem Schritt 1040 über.
  • In dem Schritt 1040 löscht die Host-CPU 20 das in dem oben beschriebenen Status- oder gemeinsamen Speicherblöcken enthaltene slave_finished Flag für die ausgewählte Slave-CPU. Wenn dieses Flag gelöscht ist, zeigt dies dem Computersystem und allen CPUs an, dass der ausgewählte Slave mit der Ausführung eines modusungeeigneten Befehls beschäftigt ist. Danach geht die Steuerung zu dem Schritt 1050 über (3B), in dem die Host-CPU 20 die ausgewählte Slave-CPU 21, 22 oder 23 durch Aktivieren eines Interprozessor-Interrupts an dem Multiprozessor-Interrupt-Eingang des Slaves rücksetzt, wie unter Bezugnahme auf die 1 und 2 oben beschrieben wurde. Alternative Formen des Interprozessor-Datenaustauschs können benutzt werden, einschließlich des Weckens des ausgewählten Slaves aus dem Schlafmodus durch Schreiben eines adäquaten Befehls an den MP-Interrupt-Eingang des ausgewählten Slaves (s. 2) und ihn dann anzuweisen, auf den adäquaten, in dem „warmen" Reset-Vektor platzierten, Codeabschnitt zu springen, ohne den Rechner tatsächlich zurückzusetzen. Wegen der geringen Anzahl von Befehlsschritten, die den echten RESET-Vektor und den „warmen" Reset-Vektor zwischenschalten, und wegen der Geschwindigkeit, mit der eine Slave-CPU asynchron zurückgesetzt werden kann, stellt jedoch der Reset der ausgewählten Slave-CPU die beste Leistung für die angegebene Konfiguration bereit. Nachdem die ausgewählte Slave-CPU 21, 22 oder 23 rückgesetzt wurde, geht die Steuerung zu dem Schritt 1060 über.
  • In dem Schritt 1060 wird ermittelt, ob die ausgewählte Slave-CPU die Ausführung des modusungeeigneten Befehls beendet hat. Vorzugsweise wird diese Ermittlung durch Untersuchen der Inhalte des slave_finished Flags vorgenommen. Die Ausführung innerhalb des aktuellen Threads wird zeitweilig ausgesetzt, bis die ausgewählte Slave-CPU 21, 22 oder 23 mit der Ausführung des erwünschten Befehls fertig ist. Die Host-CPU kann dann andere Threads ausführen, die eventuell vorhanden sind. Der Host wird periodisch das adäquate slave_finished Flag Abfragen, um zu ermitteln, ob der aktuelle Thread wieder aufgenommen werden kann. Sobald dieser wieder aufgenommen wird (d. h. das slave_finished Flag ist durch die ausgewählte Slave-CPU umgeschaltet gesetzt und die Host-CPU wurde benachrichtigt) geht die Steuerung zu dem Schritt 1070 über.
  • In dem Schritt 1070 beschafft die Host-CPU die durch die Slave-CPU 21, 22 oder 23 errechneten Resultate. Vorzugsweise sind diese Resultate, um Speicherplatz zu sparen, in Speicherstellen enthalten, die vorhergehend verwendet wurden, um Eingabeparameter in speziellen Registern des ausgewählten Slaves zu speichern (weitergegeben durch Referenz), wie oben beschrieben, obwohl andere Speicherstellen verwendet werden können, um die Eingabeparameter noch zu erhalten. Danach geht die Steuerung zu dem Schritt 1080 über, in dem die konventionelle Ausführung unter Verwendung der be schafften Resultate folgt. Dies kennzeichnet ebenso den Vollzug des modusungeeigneten Befehls innerhalb der Host-CPU gemäß der bevorzugten Ausführung.
  • Die 4A und 4B sind Fließdiagramme der von der ausgewählten Slave-CPU 21, 22 oder 23 vorgenommenen Prozessschritte bei der Erledigung des durch den Host angetroffenen modusungeeigneten Befehls. Die Ausführung beginnt bei dem Schritt 2000, wobei die ausgewählte Slave-CPU 21, 22 oder 23 aus dem Reset kommt, beziehungsweise durch den Host aus dem Schlafmodus geweckt wird. Die Steuerung geht dann zu dem Schritt 2010 über, in dem die Slave-CPU-Vektoren an den Startadressen des Codeprogramms benutzt werden, um den erwünschten Befehl zu behandeln. Vorzugsweise wird die Startadresse auf der „warmen" Reset-Vektorstelle platziert, um den Interprozessor-Datenaustausch durch Mindestwartezeiten zu vereinfachen. Andere Verfahren und Speicherstellen können für Rechner, die kein X-86 sind, verwendet werden oder wenn der Rechner anders als durch Reset erwacht. Danach, in dem Schritt 2020, schaltet die ausgewählte Slave-CPU 21, 22 oder 23 in den Betriebsmodus, der notwendig ist, um den erwünschten Befehl, wie in der Technik bekannt, auszuführen. Es sollte hier angemerkt werden, dass in der bevorzugten Ausführung alle Slave-CPUs Mitglieder der Intel-x86-Mikroprozessorfamilie sind und deshalb bereits im echten Realbetrieb konfiguriert aus dem Reset-Modus kommen, so dass, wenn die Host-CPU in dem geschützten Betrieb auf einen Realbetriebsbefehl trifft, es diesen nicht in dem geschützten Betrieb verarbeiten kann (in diesem Fall unterbricht eine BIOS-Level-INT-13h-Diskettentreibersoftware), sie kann einfach die ausgewählte Slave-CPU rücksetzen, ohne die Betriebsart des Slaves neu zu bedingen. Sobald die ausgewählte Slave-CPU bedingt modus-neukonfiguriert ist, geht die Steuerung zu dem Schritt 2030 über.
  • In dem Schritt 2030 lädt die ausgewählte Slave-CPU 21, 22 oder 23 durch die Host-CPU 20 in dem gemeinsamen Speicherblock platzierte Eingabeparameter herunter und kopiert diese in das adäquate Mehrzweckregister. Danach geht die Steuerung zu dem Schritt 2040 über, bei dem der ausgewählte Slave den adäquaten Befehl, die Anweisung oder das Interrupt aufruft, das bzw. die zur Verarbeitung durch die Host-CPU auf eine konventionelle Art der Ausführung ungeeignet ist bzw. sind und geht dann zu dem Schritt 2050 über.
  • In dem Schritt 2050 platziert die ausgewählte CPU 21, 22 oder 23 die Resultate der in dem Schritt 2040 ausgeführten Operation vorzugsweise in dem gemeinsamen Speicherblock. Danach setzt der ausgewählte Slave das slave_finished Flag, das dem Host anzeigt, dass der Slave fertig oder frei ist und der gemeinsame Speicherblock jetzt die gültigen Resultatdaten enthält. Dann geht die Steuerung zu dem Schritt 2070 über ( 4B). In dem Schritt 2070 geht die ausgewählt Slave-CPU 21, 22 oder 23 in einen Inaktiv- oder Schlafzustand über, um auf den nächsten modusungeeigneten Befehl zu warten, auf den die Host-CPU 20 trifft. Dies zeigt den erfolgreichen Vollzug der Behandlung eines modusungeeigneten Befehls durch eine Slave-CPU 21, 22 oder 23 gemäß der bevorzugten Ausführung an.
  • Somit können nach der Beschreibung der bevorzugten Ausführung oben rechnermodusungeeignete Befehle, die in einem Multiprozessorsystem eintreffen, ohne aufwendige Emulationen oder Betriebsartwechsel durch Offloading des Tasks auf einen stellvertretenden Rechner, der die erforderliche Betriebsart und die erforderlichen Betriebsmittel besitzt, erledigt werden. Wenn eine Multimodus-Host-CPU während der Ausführung eines Threads auf einen Befehl oder eine Anweisung trifft, die sie normalerweise nicht ausführen kann, ohne die Betriebsart zu wechseln oder eine Betriebsartemulation durchzuführen, wird sie nach einer anderen in dem System vorhandenen CPU suchen, die dies an ihrer Stelle erledigen kann.
  • Wenn ein geeigneter Stellvertreter gefunden wird, werden die notwendigen Eingabeparameter einschließlich der Betriebsartumgestaltungsinformationen auf einen für alle CPUs in dem System zugreifbaren gemeinsamen Speicherblock heruntergeladen und die stellvertretende CPU wird mit der Startadresse des Codes, der den ungeeigneten Befehl bzw. die ungeeignete Anweisung behandeln wird geladen. Danach suspendiert die Host-CPU, die ursprünglich den Befehl bzw. die Anweisung angetroffen hat, zeitweilig die Ausführung des Threads, bis die stellvertretende CPU die Ausführung abgeschlossen hat. Wenn die Ausführung abgeschlossen ist, führt die stellvertretende CPU ein Upload der Resultate auf einen gemeinsamen Speicher durch und signalisiert der Host-CPU ihren Status. Die Verarbeitung des ungeeigneten Befehls ist vollendet, wenn die Host-CPU die Resultate aus einem gemeinsamen Speicher beschafft und die Ausführung des zeitweilig suspendierten Threads wieder aufnimmt.
  • Die vorhergehende Offenlegung und die Beschreibung der bevorzugten Ausführungen sind lediglich darstellend und diese erklärend und verschiedene Änderungen in den Arbeitsschritten, Bauteilen und Schaltelementen, wie auch in den Einzelheiten des dargestellten Schaltschemas und Betriebsverfahrens, können innerhalb des Gültigkeitsbereichs der Erfindung, wie in den Patentansprüchen definiert, vorgenommen werden.

Claims (7)

  1. Verfahren zum Betreiben eines Multiprozessorsystems (C); das Multiprozessor-Computersystem umfasst einen ersten Multimodusprozessor (20), der geeignet für den Betrieb in einem ersten Verarbeitungsmodus und für den Betrieb in einem zweiten, mit dem ersten Verarbeitungsmodus inkompatiblen Verarbeitungsmodus, und zum Wechseln zwischen dem ersten und dem zweiten Verarbeitungsmodus, konfiguriert ist und einen zweiten Prozessor (2123), konfigurierbar für den Betrieb in einem zweiten, mit dem ersten Verarbeitungsmodus inkompatiblen Verarbeitungsmodus, Einrichtungen (80) zum Speichern eines Codevektors und Einrichtungen (32) zum Speichern von Daten und Befehlsparametern, die sowohl für den ersten als auch für den zweiten Prozessor zugreifbar sind, wobei das Verfahren die folgenden Schritte umfasst: Treffen des ersten Prozessors (20), während er im ersten Verarbeitungsmodus ist, auf einen Befehl, der nicht durch den ersten Prozessor ausgeführt werden kann, sondern nur Software emuliert, während er im ersten Verarbeitungsmodus ist, und der durch den ersten Prozessor ausgeführt werden kann, während er im zweiten Verarbeitungsmodus ist, Ermitteln durch den ersten Prozessor, ob der zweite Prozessor (2123) für die Verarbeitung des Befehls verfügbar ist und Offloading des Befehls durch den ersten Prozessor auf den zweiten Prozessor, wenn der zweite Prozessor für die Verarbeitung des Befehls verfügbar ist, wobei die Offloading-Schritte umfassen: Zuladen der zur erfolgreichen Verarbeitung des Befehls erforderlichen Daten und Befehlsparameter in die Speichereinrichtung durch den ersten Prozessor, Bereitstellen eines auf den zur vollständigen Verarbeitung des Befehls notwendigen Quellcode hinweisenden Codevektors in der Codevektor-Speichereinrichtung durch den ersten Prozessor, Aktivieren des zweiten Prozessors durch den ersten Prozessor, Verwenden der gespeicherten Daten, der Befehlsparameter und des gespeicherten Codevektors durch den zweiten Prozessor, um die Verarbeitung des Befehls aufzunehmen, Speichern der durch die Verarbeitung des Befehls beschafften Resultate in der Daten- und Befehlsparameterspeichereinrichtung durch den zweiten Prozessor, Melden des zweiten Prozessors an den ersten Prozessor, wenn die Verarbeitung des Befehls abgeschlossen ist, Laden der gespeicherten Resultate durch den ersten Prozessor zur Verwendung bei einem nachfolgenden Prozess, wenn die Meldung des zweiten Prozessors empfangen wurde.
  2. Verfahren nach Anspruch 1, weiterhin die folgenden Schritte umfassend: Eintreten des zweiten Prozessors (2123) in einen Aktivzustand nach dem Abschluss des Aktivierungsschritts und Eintreten des zweiten Prozessors in einen Schlafzustand nach Abschluss des Meldeschritts.
  3. Verfahren nach Anspruch 2, wobei der Schritt des Ermittelns der Verfügbarkeit des zweiten Prozessors (2123) umfasst: Testen durch den ersten Prozessor (20), ob der zweite Prozessor in dem Schlafzustand ist und Bestimmen durch den ersten Prozessor, dass der zweite Prozessor für die Verarbeitung des Befehls verfügbar ist, wenn der zweite Prozessor in dem Schlafzustand ist.
  4. Verfahren nach Anspruch 2, weiterhin den folgenden Schritt umfassend: Setzen eines in der Daten- und Befehlsparameterspeichereinrichtung (32) gespeicherten Semaphors durch den ersten Prozessor (20) vor der Aktivierung des zweiten Prozessors (2123), wobei der zweite Prozessor das in der Daten- und Befehlsparameterspeichereinrichtung gespeicherte Semaphor löscht, wenn der zweite Prozessor dem ersten Prozessor (20) meldet, dass die Verarbeitung des Befehls abgeschlossen ist.
  5. Verfahren nach Anspruch 4, wobei der Schritt des Ermittelns der Verfügbarkeit des zweiten Prozessors die folgenden Schritte umfasst: Testen des ersten Prozessors (20), durch Abfragen des Semaphors, ob der zweite Prozessor (2123) in dem Schlafzustand ist und Bestimmen durch den ersten Prozessor, dass der zweite Prozessor für die Verarbeitung des Befehls verfügbar ist, wenn der zweite Prozessor in dem Schlafzustand ist.
  6. Verfahren nach Anspruch 1, wobei der Befehl in dem ersten Prozessor (20) eintrifft, während der erste Prozessor einen Thread ausführt.
  7. Verfahren nach Anspruch 6, weiterhin die folgenden Schritte umfassend: Aussetzen der Ausführung des Threads durch den ersten Prozessor nach dem Aktivierungsschritt und Wiederaufnehmen der Ausführung des Threads durch den ersten Prozessor nach dem Schritt des Ladens der Resultate durch den ersten Prozessor.
DE69727407T 1996-03-04 1997-03-04 Verteilte Ausführung von modusungeeigneten Befehlen in Multiprozessorsysteme Expired - Lifetime DE69727407T2 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US610027 1996-03-04
US08/610,027 US5706514A (en) 1996-03-04 1996-03-04 Distributed execution of mode mismatched commands in multiprocessor computer systems

Publications (2)

Publication Number Publication Date
DE69727407D1 DE69727407D1 (de) 2004-03-11
DE69727407T2 true DE69727407T2 (de) 2004-12-16

Family

ID=24443312

Family Applications (1)

Application Number Title Priority Date Filing Date
DE69727407T Expired - Lifetime DE69727407T2 (de) 1996-03-04 1997-03-04 Verteilte Ausführung von modusungeeigneten Befehlen in Multiprozessorsysteme

Country Status (3)

Country Link
US (1) US5706514A (de)
EP (1) EP0794492B1 (de)
DE (1) DE69727407T2 (de)

Families Citing this family (46)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6058465A (en) * 1996-08-19 2000-05-02 Nguyen; Le Trong Single-instruction-multiple-data processing in a multimedia signal processor
US6247091B1 (en) * 1997-04-28 2001-06-12 International Business Machines Corporation Method and system for communicating interrupts between nodes of a multinode computer system
US6058466A (en) * 1997-06-24 2000-05-02 Sun Microsystems, Inc. System for allocation of execution resources amongst multiple executing processes
US5890008A (en) * 1997-06-25 1999-03-30 Sun Microsystems, Inc. Method for dynamically reconfiguring a processor
US5913058A (en) * 1997-09-30 1999-06-15 Compaq Computer Corp. System and method for using a real mode bios interface to read physical disk sectors after the operating system has loaded and before the operating system device drivers have loaded
US6697868B2 (en) * 2000-02-28 2004-02-24 Alacritech, Inc. Protocol processing stack for use with intelligent network interface device
US6434620B1 (en) * 1998-08-27 2002-08-13 Alacritech, Inc. TCP/IP offload network interface device
US6757746B2 (en) * 1997-10-14 2004-06-29 Alacritech, Inc. Obtaining a destination address so that a network interface device can write network data without headers directly into host memory
US8621101B1 (en) 2000-09-29 2013-12-31 Alacritech, Inc. Intelligent network storage interface device
US8539112B2 (en) 1997-10-14 2013-09-17 Alacritech, Inc. TCP/IP offload device
US8782199B2 (en) * 1997-10-14 2014-07-15 A-Tech Llc Parsing a packet header
US6226680B1 (en) 1997-10-14 2001-05-01 Alacritech, Inc. Intelligent network interface system method for protocol processing
DE69822591T2 (de) * 1997-11-19 2005-03-24 Imec Vzw System und Verfahren zur Kontextumschaltung über vorbestimmte Unterbrechungspunkte
US6154785A (en) * 1998-07-17 2000-11-28 Network Equipment Technologies, Inc. Inter-processor communication system
JP2000200218A (ja) * 1998-09-01 2000-07-18 Texas Instr Inc <Ti> キャッシュメモリを有するマイクロプロセッサ
US6560629B1 (en) * 1998-10-30 2003-05-06 Sun Microsystems, Inc. Multi-thread processing
US6757762B1 (en) * 1999-10-29 2004-06-29 Unisys Corporation Multi-mode processor bus bridge
US7661107B1 (en) * 2000-01-18 2010-02-09 Advanced Micro Devices, Inc. Method and apparatus for dynamic allocation of processing resources
WO2001069372A2 (en) * 2000-03-10 2001-09-20 Koninklijke Philips Electronics N.V. Method for compiling a program
US8019901B2 (en) 2000-09-29 2011-09-13 Alacritech, Inc. Intelligent network storage interface system
JP3561506B2 (ja) * 2001-05-10 2004-09-02 東京エレクトロンデバイス株式会社 演算システム
US6789048B2 (en) * 2002-04-04 2004-09-07 International Business Machines Corporation Method, apparatus, and computer program product for deconfiguring a processor
US7543087B2 (en) * 2002-04-22 2009-06-02 Alacritech, Inc. Freeing transmit memory on a network interface device prior to receiving an acknowledgement that transmit data has been received by a remote device
JP3856737B2 (ja) * 2002-07-19 2006-12-13 株式会社ルネサステクノロジ データ処理装置
WO2004015572A1 (en) 2002-08-07 2004-02-19 Mmagix Technology Limited Apparatus, method and system for a synchronicity independent, resource delegating, power and instruction optimizing processor
US6906500B2 (en) * 2002-11-14 2005-06-14 Fyre Storm, Inc. Method of operating a switching power converter
US20050050305A1 (en) * 2003-08-28 2005-03-03 Kissell Kevin D. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US7321965B2 (en) * 2003-08-28 2008-01-22 Mips Technologies, Inc. Integrated mechanism for suspension and deallocation of computational threads of execution in a processor
US7849297B2 (en) * 2003-08-28 2010-12-07 Mips Technologies, Inc. Software emulation of directed exceptions in a multithreading processor
US7836450B2 (en) * 2003-08-28 2010-11-16 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US7870553B2 (en) 2003-08-28 2011-01-11 Mips Technologies, Inc. Symmetric multiprocessor operating system for execution on non-independent lightweight thread contexts
US9032404B2 (en) * 2003-08-28 2015-05-12 Mips Technologies, Inc. Preemptive multitasking employing software emulation of directed exceptions in a multithreading processor
US6996070B2 (en) * 2003-12-05 2006-02-07 Alacritech, Inc. TCP/IP offload device with reduced sequential processing
US7240182B2 (en) * 2004-09-16 2007-07-03 International Business Machines Corporation System and method for providing a persistent function server
US8248939B1 (en) 2004-10-08 2012-08-21 Alacritech, Inc. Transferring control of TCP connections between hierarchy of processing mechanisms
CN100362481C (zh) * 2005-09-15 2008-01-16 上海华为技术有限公司 多处理器设备单元主备保护方法
US7516301B1 (en) * 2005-12-16 2009-04-07 Nvidia Corporation Multiprocessor computing systems with heterogeneous processors
FR2893156B1 (fr) 2005-11-04 2008-02-15 Commissariat Energie Atomique Procede et systeme de calcul intensif multitache et multiflot en temps reel.
US20080263171A1 (en) * 2007-04-19 2008-10-23 Alacritech, Inc. Peripheral device that DMAS the same data to different locations in a computer
US8341286B1 (en) 2008-07-31 2012-12-25 Alacritech, Inc. TCP offload send optimization
US9306793B1 (en) 2008-10-22 2016-04-05 Alacritech, Inc. TCP offload device that batches session layer headers to reduce interrupts as well as CPU copies
US9984083B1 (en) 2013-02-25 2018-05-29 EMC IP Holding Company LLC Pluggable storage system for parallel query engines across non-native file systems
US9753980B1 (en) * 2013-02-25 2017-09-05 EMC IP Holding Company LLC M X N dispatching in large scale distributed system
US10362093B2 (en) * 2014-01-09 2019-07-23 Netronome Systems, Inc. NFA completion notification
US11908541B2 (en) 2020-01-07 2024-02-20 SK Hynix Inc. Processing-in-memory (PIM) systems
US20210210125A1 (en) * 2020-01-07 2021-07-08 SK Hynix Inc. Processing-in-memory (pim) system and operating methods of the pim system

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4394727A (en) * 1981-05-04 1983-07-19 International Business Machines Corporation Multi-processor task dispatching apparatus
US4943915A (en) * 1987-09-29 1990-07-24 Digital Equipment Corporation Apparatus and method for synchronization of a coprocessor unit in a pipelined central processing unit
US5050070A (en) * 1988-02-29 1991-09-17 Convex Computer Corporation Multi-processor computer system having self-allocating processors
JP2754825B2 (ja) * 1989-02-03 1998-05-20 日本電気株式会社 マイクロプロセッサ
EP0442041A3 (en) * 1990-01-18 1991-09-04 National Semiconductor Corporation Integrated digital signal processor/general purpose cpu with shared internal memory
US5283897A (en) * 1990-04-30 1994-02-01 International Business Machines Corporation Semi-dynamic load balancer for periodically reassigning new transactions of a transaction type from an overload processor to an under-utilized processor based on the predicted load thereof
EP0519348B1 (de) * 1991-06-19 1999-07-28 Hewlett-Packard Company Co-Prozessor unterstützende Architektur für einen Prozessor, der keine Zusatzprozessorfähigkeit hat
JP2791236B2 (ja) * 1991-07-25 1998-08-27 三菱電機株式会社 プロトコル並列処理装置
EP0562251A2 (de) * 1992-03-24 1993-09-29 Universities Research Association, Inc. Durch ein dynamisches wiederkonfigurierbares serielles Netzwerk gesteuertes Paralleldatenübertragungsnetzwerk
US5301324A (en) * 1992-11-19 1994-04-05 International Business Machines Corp. Method and apparatus for dynamic work reassignment among asymmetric, coupled processors
CA2137488C (en) * 1994-02-18 1998-09-29 Richard I. Baum Coexecuting method and means for performing parallel processing in conventional types of data processing systems

Also Published As

Publication number Publication date
DE69727407D1 (de) 2004-03-11
EP0794492A2 (de) 1997-09-10
US5706514A (en) 1998-01-06
EP0794492B1 (de) 2004-02-04
EP0794492A3 (de) 1998-09-23

Similar Documents

Publication Publication Date Title
DE69727407T2 (de) Verteilte Ausführung von modusungeeigneten Befehlen in Multiprozessorsysteme
US7158927B2 (en) System and method for the logical substitution of processor control in an emulated computing environment
EP0192944B1 (de) Datenverarbeitungssystem mit einem Hauptprozessor und einem Ko-Prozessor mit gemeinsamen Betriebsmitteln
DE3587622T2 (de) Emulationseinrichtung in einem Datenverarbeitungssystem.
US6314515B1 (en) Resetting multiple processors in a computer system
US4920481A (en) Emulation with display update trapping
US20060206891A1 (en) System and method of maintaining strict hardware affinity in a virtualized logical partitioned (LPAR) multiprocessor system while allowing one processor to donate excess processor cycles to other partitions when warranted
EP0230353A2 (de) Koprozessorbetriebsführung in einem Datenverarbeitungssystem mit virtuellem Speicher und virtueller Maschine
DE69817170T2 (de) Emulation von unterbrechungsmechanismus in einem multiprozessorsystem
DE10393969T5 (de) Mechanismus zur Verteilung von Unterbrechungen niedrigster Priorität unter Berücksichtigung des Prozessorleistungszustands
DE4309532A1 (de) Verfahren zur Einrichtung zum Sichern einer Systemabbildung auf eine permanente Speichereinrichtung
US20040230768A1 (en) Blocking processing restrictions based on page indices
JPH1097490A (ja) スケーラブル対称型マルチプロセッサにおいてバス幅またはバス・プロトコルを変更せずに割り込みを分散する方法および装置
JPH0754471B2 (ja) デ−タ処理装置
JPH1097509A (ja) 対称型マルチプロセッサ・システムにおいて割り込みを分散する方法および装置
CN103842980B (zh) 用于协议中立织物的方法、系统和装置
US5524211A (en) System for employing select, pause, and identification registers to control communication among plural processors
US20050172287A1 (en) Bus management techniques
EP1410170B1 (de) Logische ersetzung von prozessorführung in einer emulierten rechnerumgebung
JP2001507835A (ja) 過去に互換性のあるオペレーティングシステムのリアルタイムサービス
US5812846A (en) Method and apparatus for passing control from a first process to a second process
Smith A directly coupled multiprocessing system
KR920009447B1 (ko) 다중처리 시스템에서의 입출력 전담 처리장치.
JPS6223895B2 (de)
CN118193069A (zh) 一种基于acpi构建申威平台中断模型的方法、装置及存储介质

Legal Events

Date Code Title Description
8364 No opposition during term of opposition