-
Stand der Technik
-
Die vorliegende Erfindung betrifft
ein Daten verarbeitendes System mit mehreren Prozessoren und ein
Verfahren zu dessen Programmierung.
-
Mehrprozessorsysteme werden in vielen
Gebieten eingesetzt, um im Vergleich zu einem System mit einem einzelnen
Prozessor höhere
Arbeitsleistungen dadurch zu erzielen, dass Verarbeitungsaufgaben
auf mehreren Prozessoren verteilt werden, oder um die Ausfallsicherheit
eines Systems zu erhöhen,
indem für
den Fall einer Störung
eines der Prozessoren ein Reserveprozessor bereit steht, der dessen
Aufgaben übernehmen
kann.
-
Jeder Prozessor eines solchen Systems muss
auf einen Speicher lesend zugreifen können, in welchem sein Betriebsprogramm
abgelegt ist. Ein solches Betriebsprogramm wird üblicherweise zunächst in
einer Hochsprache geschrieben und dann in einem mehrstufigen Prozess
in eine Kette von hexadezimalen Zeichen, auch als HEX-File bezeichnet, umgesetzt,
die für
den Prozessor ohne weitere Vorverarbeitung aus fährbare Anweisungen und konstante
Parameter enthält.
Die einzelnen Schritte des Prozesses werden – auf dem Prozessor selbst
oder in einer auf den Prozessor zugeschnittenen Entwicklungsumgebung – von als
Compiler, Assembler, Linker und Locator bezeichneten Programmen
durchgeführt.
Das so erhaltene HEX-File wird in einen Programmspeicher eines Prozessors
programmiert, der es auszuführen
hat, und dann im entsprechenden Prozessor zur Ausführung gebracht.
Bei Mehrprozessorsystemen sind folgende Varianten bekannt:
-
- 1. Für
jeden Prozessor existiert ein eigener Quellcode und infolgedessen
ein eigenes Hex-File,
das in den Programmspeicher des entsprechenden Prozessors geladen
werden muss. Diese Variante ist geeignet, wenn die von den mehreren
Prozessoren auszuführenden
Aufgaben klar voneinander unterschieden sind. Eine Kompatibilität der Befehlssätze der
Prozessoren ist nicht erforderlich. Da kein Prozessor in der Lage
ist, die Aufgaben des anderen zu übernehmen, ist lediglich eine
Steigerung der Verarbeitungsleistung erreichbar, aber keine Verbesserung
der Ausfallsicherheit.
- 2. Bei dem aus DE
9947252A1 bekannten Mehrprozessorsystem ist jedem Prozessor
ein Programmspeicher zugeordnet, das darin gespeicherte Hex-File
ist jedoch für
die mehreren Prozessoren identisch. Es führt nicht notwendigerweise
jeder Prozessor das gesamte gespeicherte Programm aus. Es kann Programmteile
geben, die nur von dem einen oder nur von dem anderen Prozessor
ausgeführt
werden. Da aber jeder Prozessor über
den gesamten Programmcode verfügt,
ist er in der Lage, im Falle einer Störung Aufgaben des gestörten Prozessors
zumindest in eingeschränkten
Umfang mit zu übernehmen.
-
Ein sekundärer Vorteil, der sich aus der
Einheitlichkeit des Codes für
die mehreren Prozessoren ergibt, ist, dass es beim Laden des HEX-Files
in die Programmspeicher aufgrund der Einheitlichkeit der Files zu
keinen Verwechslungen mehr kommen kann.
-
Bei diesem herkömmlichen System muss jeder
Prozessor über
einen eigenen nichtflüchtigen Speicher
verfügen,
in dem das HEX-File gespeichert ist.
-
Vorteile der
Erfindung
-
Die vorliegende Erfindung ermöglicht es,
die Zahl der nichtflüchtigen
Speicher, die in einem Mehrprozessorsystem zum Speichern der HEX-Files
benötigt
werden, zu verringern. Dies führt
zum einen zu einer strukturellen Vereinfachung der Mehrprozessorsysteme,
darüber
hinaus ergibt sich eine Verringerung der Kosten eines solchen Systems,
da sich die Zahl von spezifisch vorprogrammierten und dementsprechend
kostspieligen, in das Mehrprozessorsystem einzubauenden nichtflüchtigen
Speichern verringert, bzw., wenn als nichtflüchtige Speicher sogenannte
Flash-Speicher oder andere Typen von elektrisch programmierbaren
nichtflüchtigen
Speichern eingesetzt werden, verringert sich der Zeitaufwand für deren
beim Zusammenbau des Mehrprozessorsystems stattfindende Programmierung,
und die Mehrkosten derartiger Speicherbausteine gegenüber flüchtigen
Speichern können
eingespart werden.
-
Diese Vorteile werden zum einen dadurch
erreicht, dass bei einem Mehrprozessorsystem mit wenigstens zwei
Prozessoren, einem nichtflüchtigen Speicher,
der Programmcode für
die Prozessoren enthält,
und einem flüchtigen
Speicher die wenigstens zwei Prozessoren Lesezugriff auf den nichtflüchtigen
Speicher haben.
-
Dieser Lesezugriff kann in unterschiedlicher Weise
genutzt werden. Einer ersten Variante zufolge können die wenigstens zwei Prozessoren
den Lesezugriff während
der gesamten Betriebsdauer des Systems nutzen, um Befehle und Parameter
jeweils zu dem Zeitpunkt, wo diese benötigt werden, aus dem nichtflüchtigen
Speicher zu lesen. Dies ist z.B. möglich durch Verwendung eines
nichtflüchtigen Speichers
mit Zweitorstruktur oder durch Aufteilung der Übertragungskapazität eines
den nichtflüchtigen Speicher
mit den Prozessoren verbindenden Busses auf die mehreren Prozessoren.
-
Einer zweiten Variante zufolge nutzt
wenigstens einer der mehreren Prozessoren den Lesezugriff auf den
nichtflüchtigen
Speicher nur während
einer Startphase des Mehrprozessorsystems, um den darin enthaltenen
Programmcode oder gegebenenfalls wenigstens diejenigen Teile des
Programmcodes, die er auszuführen
hat, in einen flüchtigen
Speicher zu kopieren, auf den er anschließend im Laufe des Normalbetriebs
des Systems zugreift, um den Programmcode auszuführen.
-
Die gleichen Vorteile werden erreicht
durch ein Mehrprozessorsystem mit wenigsten zwei Prozessoren, einem
nichtflüchtigem
Speicher, der Programmcode für
die Prozessoren enthält,
und einem flüchtigen
Speicher, bei dem Mittel zum Kopieren des Programmcodes oder wenigstens
von Teilen desselben in den flüchtigen
Speicher vorhanden sind, wobei wenigstens einer der Prozessoren
Lesezugriff auf den in den flüchtigen
Speicher kopierten Code hat. Dieser Prozessor wird im folgenden
als sekundärer Prozessor
bezeichnet, um ihn von einem primären Prozessor zu unterscheiden,
der über
Lesezugriff auf den nichtflüchtigen
Speicher verfügt.
Der sekundäre Prozessor
benötigt
diesen Lesezugriff auf den nichtflüchtigen Speicher nicht.
-
Um den Speicherplatz effektiv zu
nutzen, ist vorzugsweise wenigstens ein Teil des Programmcodes durch
jeden der wenigsten zwei Prozessoren ausführbar. Ein solcher Teil kann
z.B. eine Funktion sein, die von unterschiedlichen Hauptprogrammen der
wenigstens zwei Prozessoren in gleicher Weise aufrufbar ist.
-
Umgekehrt ist vorzugsweise wenigstens
ein Teil des Programmcodes nur durch einen der wenigstens zwei Prozessoren
ausführbar.
Im allgemeinen können
sich die von den Prozessoren ausgeführten Steuerungsaufgaben unterscheiden;
im Extremfall kann der nur durch einen der Prozessoren ausführbare Programmteil
aber auch nur derjenige Programmteil sein, der vom primärem Prozessor
ausgeführt
werden muss, um die anderen Programmteile in den flüchtigen
Speicher des wenigstens einen sekundären Prozessors zu kopieren.
-
Speicherbedarf und Ladezeit lassen
sich verringern, wenn die Mittel zu Kopieren selektiv nur denjenigen
Teil des Programmcodes, der durch den sekundären Prozessor ausführbar ist,
in dessen flüchtigen
Speicher kopieren. Um diesen Kopiervorgang zu steuern, sind im nichtflüchtigen
Speicher vorzugsweise Angaben darüber enthalten, welche Teile
des darin gespeicherten Codes durch welchen Prozessor ausführbar sind.
-
Gegenstand der Erfindung ist auch
ein Verfahren zum Inbetriebnehmen eines Mehrprozessorsystems mit
wenigstens zwei Prozessoren, einem nichtflüchtigen und wenigstens einem
flüchtigen Speicher,
bei dem ein Programm zunächst
in den nichtflüchtigen
Speicher geladen wird, wenigstens Teile des Programms in einen flüchtigen
Speicher eines sekundären
Prozessors geladen werden und der sekundäre Prozessor die kopierten
Teile anschließend
aus dem flüchtigen
Speicher liest und ausführt.
-
Weitere Merkmale und Vorteile der
Erfindung ergeben sich aus der nachfolgenden Beschreibung von Ausführungsbeispielen
mit Bezug auf die beigefügten
Figuren.
-
Figuren
-
Es zeigen:
-
l ein
Blockdiagramm eines Mehrprozessorsystems gemäß einer ersten Ausgestaltung
der Erfindung;
-
2 ein
Blockdiagramm einer Abwandlung des Mehrprozessorsystems aus 1;
-
3 eine
zweite Ausgestaltung des erfindungsgemäßen Mehrprozessorsystems;
-
4-6 verschiedene Belegungsmuster
des nichtflüchtigen
Speichers.
-
Bei dem Ausführungsbeispiel der 1 umfasst das Mehrprozessorsystem
zwei Prozessoren 1, 2, die zusammen mit einem
nichtflüchtigen
Speicher 3 und flüchtigen
Speichern 4, 5 in einer Baueinheit 6, z.B.
auf einer gemeinsamen Leiterplatte, zusammengefasst sind. Die Prozessoren 1, 2 und
die Speicher 3, 4, 5 nutzen einen gemeinsamen
internen Bus 7. Der nichtflüchtige Speicher 3 ist
ein Flash-Speicherbaustein;
eine Schnittstelle 8, die zum Eintragen einer gemeinsamen
Programmdatei für
die zwei Prozessoren 1, 2 in den nichtflüchtigen
Speicher 3 dient und auch zur Kommunikation zwischen den
Prozessoren 1, 2 und nicht dargestellten Peripheriegeräten über einen
externen Bus 14 dienen kann, ist an den Bus 7 angeschlossen.
-
Bei diesem System wechseln sich die
Prozessoren 1, 2 in der Herrschaft über den
internen Bus 7 ab. Die Zuteilung der Busherrschaft an einen
der Prozessoren 1, 2 kann in einem periodischen
zeitlichen Mus ter erfolgen, so dass jeweils abwechselnd der Prozessor 1 und
anschließend
der Prozessor 2 einen Programmbefehl oder einen anderen
Datenwert aus dem nichtflüchtigen
Speicher 3 lesen kann. Es ist auch eine bedarfsorientierte
Zuteilung der Busherrschaft denkbar, bei der jeweils einem Prozessor die
Busherrschaft zugeteilt wird, wenn der andere mit internen Operationen
beschäftigt
ist, die keinen Buszugriff erfordern. Jeder Prozessor greift über die
gesamte Betriebsdauer des Systems hinweg fortlaufend auf den nichtflüchtigen
Speicher 3 zu, um daraus Programmbefehle jeweils zu dem
Zeitpunkt zu lesen, an dem sie benötigt werden. Da nur ein einziger
interner Bus 7 vorhanden ist, über den sich die Prozessoren 1, 2 die
Herrschaft teilen, müssen
sich die Prozessoren 1, 2 auch bei einem Zugriff
auf die ihnen zugewiesenen flüchtigen
Speicher 4, 5 zeitlich koordinieren. Außerdem steht
jedem Prozessor 1, 2 nur ein Teil des möglichen
Adressraums zum Adressieren des ihm zugewiesenen flüchtigen
Speichers 4 bzw. 5 zur Verfügung.
-
Eine weiterentwickelte Ausgestaltung
ist in 2 gezeigt. Bei
dieser ist jeder der zwei Prozessoren 1', 2' mit dem ihm zugeordneten flüchtigen
Speicher 4, 5 über
einen eigenen internen Bus 7 bzw. 9 verbunden.
Beide Busse arbeiten unabhängig
voneinander, so dass die Prozessoren 1, 2 gleichzeitig auf
beliebige Speicherplätze
der flüchtigen
Speicher 4, 5 zugreifen können und gleiche Adressen können vom
Prozessor 1' zum
Adressieren des flüchtigen Speichers 4 und
vom Prozessor 2' zum
Adressieren des flüchtigen
Speichers 5 gebraucht werden.
-
Der nichtflüchtige Speicher 3 ist über einen Schalter
wahlweise mit dem internen Bus 7 oder mit dem internen
Bus 9 verbindbar. Für
die Arbeitsweise des Schalters 10 sind mehrere Alternativen
denkbar.
-
Einer ersten Alternative zufolge
ist der Schalter 10 automatisch durch die von den Prozessoren 1', 2' auf ihre jeweiligen
Busse 7 bzw. 9 ausgegebenen Adressen gesteuert.
Wenn z.B. der Prozessor 1' einen
Befehl zum Lesen einer Adresse im Adressbereich des nichtflüchtigen
Speichers 3 ausgibt und der Speicher 3 nicht gleichzeitig
vom Prozessor 2' gelesen
wird, reagiert der Schalter 10 automatisch, in dem er den
nichtflüchtigen
Speicher 3 an den internen Bus 7 anschaltet und
es ihm so ermöglicht,
die von Prozessor 1' ausgegebene
Adresse zu erfassen und den dieser Adresse entsprechenden Datenwert zurück zu liefern.
Wenn ein anderer Prozessor, hier der Prozessor 2', ebenfalls
einen Zugriffsbefehl auf einen Speicherplatz des nichtflüchtigen
Speichers 3 ausgibt, bleibt dieser solange unbeantwortet,
bis der laufende Lesezugriff durch den Prozessor 1' beendet ist.
Sobald dies geschehen ist, verbindet der Schalter 10 den
nichtflüchtigen
Speicher 3 mit dem Prozessor 2'. Auch bei dieser Variante teilen
sich die Prozessoren 1', 2' während des
gesamten Betriebs des Mehrprozessorsystems den Zugriff auf den nichtflüchtigen Speicher 3 und
lesen aus diesem nach Bedarf Instruktionen und Parameter des auszuführenden
Programms.
-
Einer zweiten Variante zufolge verbindet
der Schalter 10 den Prozessor 2' nur in einer Initialisierungsphase
des Mehrprozessorsystems mit dem nicht flüchtigen Speicher 3.
Diese Initialisierungsphase dauert so lange, wie der Prozessor 2' benötigt, um den
im nichtflüchtigem
Speicher 3 gespeicherten Programmcode oder wenigstens diejenigen
Teile davon, die der Prozessor 2' benötigt, in den flüchtigen Speicher 5 zu
kopieren. Wenn dies geschehen ist, wird der Schalter 10 dauerhaft
umgeschaltet, und während
des sich anschließenden
Normalbetriebes des Mehrprozessorsystems hat der Prozessor 1' ständigen und
uneingeschränkten
Lesezugriff auf den nichtflüchtigen
Speicher 3.
-
3 zeigt
eine dritte Ausgestaltung eines erfindungsgemäßen Mehrprozessorsystems. Das System
umfasst zwei Prozessoren 1'', 2'', wobei der Prozessor 1'' mit dem nichtflüchtigen
Speicher 3, einem flüchtigen
Speicher 4 und einer Programmierschnittstelle 8 zum
Eintragen des Programmcodes von außen in den nichtflüchtigen
Speicher 3 in einer Baueinheit 6 zusammengefasst
ist, und der Prozessor 2 zusammen mit einem flüchtigen
Speicher 5 eine zweite Baueinheit 11 bildet. Die
Baueinheiten 6, 11 verfügen über von einander unabhängige interne Busse 7, 9;
eine Datenübertragung
zwischen den Baueinheiten ist möglich über einen
externen, vorzugsweise seriellen Bus 12, der mit den internen Bussen 7, 9 über deren
Adressräume
trennende Schnittstellenschaltungen 13 verbunden ist. Der
Bus 12 kann z. B. vom Typ CAN oder K-Line sein.
-
In 3 ist
der serielle Bus 12 zwar getrennt von dem an die Programmierschnittstelle 8 angeschlossenen
externen Bus 14 dargestellt, doch können diese zwei Busse und die
Schnittstellen 8, 13 auch identisch sein.
-
In einer Initialisierungsbetriebsphase
des Mehrprozessorsystems führt
der Prozessor 1 zunächst
einen Boot-Abschnitt des im nichtflüchtigen Speicher 3 niedergelegten
Codes aus, der ihn anweist, den gesamten Inhalt des nichtflüchtigen
Speichers 3 oder, alternativ, in einer ebenfalls im nichtflüchtigen
Speicher 3 enthaltenen Liste spezifizierte Teile des darin
gespeicherten Codes über
den seriellen Bus 12 an den flüchtigen Speicher 5 des
Prozessors 2'' zu übertragen.
Wenn die Übertragung
abgeschlossen ist, verfügen
beide Prozessoren 1'', 2'' über den benötigten Code und können diesen
unabhängig
voneinander, ohne ihre Speicherzugriffe koordinieren zu müssen, abarbeiten.
-
Die Initialisierungsbetriebsphase
kann bei dieser Ausgestaltung wie auch bei der zweiten Variante
der Ausgestaltung aus 2 selbsttätig vom Prozessor 1' bzw. 1'' ausgelöst werden, wenn das System
zwecks Inbetriebnahme mit Spannung versorgt wird. Möglich ist
auch, die Initialisierungsphase von außen, über die Schnittstelle 8,
auszulösen, wenn
der Code im nichtflüchtigen
Speicher 3 verändert
wurde, oder sie periodisch auszulösen. Es können aber auch Mittel am Prozessor 2' bzw. 2'' zum Erfassen eines Datenverlusts
im Speicher 5, insbesondere infolge Ausfalls der Versorgungsspannung,
vorgesehen werden, die den Prozessor veranlassen, eine Initialisierungsbetriebsphase
einzuleiten. Dies kann z. B. ein Einschalt-Bootprogramm sein, das vom
Prozessor
2', 2'' automatisch beim Einsetzen der
Versorgungsspannung ausgeführt
wird.
-
Die 4-6 zeigen Beispiele für mögliche Aufteilungen
des nichtflüchtigen
Speichers 3.
-
Gemäß 4 ist der Speicher 3 in zwei
Abschnitte B und C unterteilt, die jeweils den Bootabschnitt bzw.
von beiden Prozessoren 1'', 2'' in gleicher Weise auszuführenden
Code enthalten. Beim Starten des in 3 gezeigten
Zweiprozessorsystems kann man sich darauf beschränken, den gemeinsamen Codeabschnitt
C vom nichtflüchtigen Speicher 3 in
den flüchtigen
Speicher 5 des Prozessors 2'' zu
kopieren, da der Bootabschnitt von Prozessor 2'' niemals ausgeführt wird.
-
Bei dem Ausführungsbeispiel der 5 ist der Speicher aufgeteilt
in zwei Abschnitte C1 bzw. C2, wobei der Abschnitt C1, zu dem auch
der Bootabschnitt B gehört,
nur zur Ausführung
durch den Prozessor 1'' und der Abschnitt
C2 nur zur Ausführung
durch den Prozessor 2 vorgesehen ist. Beim Starten genügt es, den
Abschnitt C2 in den flüchtigen Speicher 5 des
Prozessors 2 zu übertragen.
Die Startadresse des Abschnitts C2, ab der die Übertragung des Codes beginnen
muss, ist im Bootabschnitt B verzeichnet.
-
6 zeigt
eine Unterteilung des nichtflüchtigen
Speichers 3 in drei Abschnitte C1, C2, C12, wobei der Abschnitt
C1 ausschließlich
zur Ausführung durch
den Prozessor 1 vorgesehenen Code und der Abschnitt C2
ausschließlich
zur Ausführung
durch den Prozessor 2 vorgesehenen Code enthält. Der Abschnitt
C12 enthält
von beiden Prozessoren 1'', 2'' auszuführenden Code, z.B. eine Funktionsbibliothek, die
von den Hauptprogrammen der Abschnitte C1, C2 gemeinsam genutzt
wird. In diesem Fall werden die Abschnitte C2 und C12 in den flüchtigen
Speicher 5 des Prozessors 2 übertragen. Adressraum im flüchtigen
Speicher 5, der dem Abschnitt C1 entspricht, bleibt wie
im Falle der 5 für die Speicherung
von Variablen verfügbar.
-
Wie man leicht sieht, sind die oben
angegebenen Ausführungsbeispiele
leicht auf eine größere Zahl
von Prozessoren verallgemeinerbar. So genügt es zum Beispiel im Falle
der 2, mehr als zwei Stellungen
für den
Schalter 10 vorzusehen, die es ihm ermöglichen, den nichtflüchtigen
Speicher 3 wahlweise mit einer Vielzahl von voneinander
unabhängigen
lokalen Bussen mehrer Prozessoren zu verbinden. Im Falle der 3 können zusätzlich Baueinheiten mit weiteren
Prozessoren an den externen Bus 12 angeschlossen sein und über diesen
mit Kopien des im nichtflüchtigen
Speicher 3 abgelegten Codes versorgt werden.
-
Selbstverständlich können in einem erfindungsgemäßen Mehrprozessorsystem
Prozessoren, die sich den Zugriff auf einen gemeinsamen nichtflüchtigen
Speicher in der oben beschriebenen Weise teilen, auch im Verbund
mit Prozessoren eingesetzt werden, deren HEX-File, wie oben im Abschnitt „Stand
der Technik" angegeben,
in einem Nur-Lese-Speicher abgelegt ist, der dem Prozessor fest
zugeordnet ist und auf den nur er allein Lesezugriff hat.
-
Das erfindungsgemäße Mehrprozessorsystem ist
insbesondere als Steuergerät
für ein
Kraftfahrzeug vorteilhaft einsetzbar. Dabei können die mehreren Prozessoren
z. B. jeweils zum Steuern einer von mehreren Zylindergruppen des
Motors des Fahrzeugs oder für
völlig
unterschiedliche Steuerungsaufgaben dienen. Die mehrteilige Struktur
insbesondere der Ausgestaltung aus 3 erlaubt
es, jeden der mehreren Prozessoren in unmittelbarer Nachbarschaft
zu von ihm zu steuernden Einrichtungen zu platzieren und so elektromagnetische
Störeinflüsse auf
die Kommunikation zwischen Prozessoren und von ihnen gesteuerten
Einrichtungen zu minimieren.
-
Vorteilhafterweise können in
dem erfindungsgemäßen Mehrprozessorsystem
die genannten Elemente (Prozessor, flüchtiger/nichtflüchtiger Speicher
etc.) als Gesamtheit oder in beliebigen Teilmengen auf einen oder
mehreren Chips integriert sein. Umgekehrt ist auch denkbar, dass
die genannten flüchtigen
und/oder nichtflüchtigen
Speicherelemente beispielsweise aus Kosten-/Verfügbarkeitsgründen aus mehreren funktional
gleichwertigen Bauteilen zu einem logischen Element zusammengesetzt
sind.