-
HINTERGRUND DER ERFINDUNG
-
Gebiet der Erfindung
-
Die vorliegende Erfindung betrifft im Allgemeinen ein System und Verfahren zum Unterstützen eines kohärenten Datenzugriffs auf einem Multicore-Controller und genauer gesagt ein System und Verfahren, die zwei Puffer, einen Indikator und ein Synchronisationsprotokoll bereitstellen, das es ermöglicht, dass der eine Puffer gelesen wird während der andere Puffer beschrieben wird, und wobei die Schreib- und Lese-Zuständigkeiten zwischen den beiden Puffern wechseln.
-
Beschreibung der verwandten Technik
-
Moderne Fahrzeuge verwenden diverse eingebettete elektronische Controller, welche die Leistung, den Komfort, die Sicherheit usw. des Fahrzeugs verbessern. Derartige Controller umfassen Motor-Controller, Federungs-Controller, Lenkungs-Controller, Antriebsstrang-Controller, Klimaregelungs-Controller, Infotainment-Anlagen-Controller, Fahrgestellsystem-Controller usw. Diese Controller benötigen typischerweise spezielle Software und Algorithmen, um ihre Steuerfunktionen auszuführen.
-
Die aktuelle Tendenz für elektronische Fahrzeug-Controller geht dahin, mehrere Software-Anwendungen für verschiedene Funktionen bereitzustellen, die auf einem gemeinsamen Controller funktionieren. Beispielsweise sind Abstandsregeltempomat-(ACC)Systeme, Spurzentrierungssysteme, Stabilitätssteuersysteme usw. alle in der Technik bekannt und steuern alle die Fahrzeuglenkung und/oder Bremsung auf gewisse Weise automatisch. Diese Systeme verwenden häufig die gleichen Sensoreingaben und andere Variablen, die manchmal als globale Variablen bezeichnet werden, die, wenn sie im Speicher abgelegt werden, von mehr als einer Software-Anwendung verwendet werden können. Beispielsweise kann das ACC-System die Sensordaten lesen und die Sensordaten während seines Betriebs auf dem Prozessor in den Controller-Speicher schreiben, und das Spurzentrierungssystem und andere Software-Anwendungen können diese Daten lesen, wenn sie auf dem Prozessor ablaufen. Somit ist es in vielen Fällen, wie etwa bei diesen, sinnvoll, mehrere Software-Anwendungen auf dem gleichen Prozessor laufen zu lassen.
-
Das Bereitstellen mehrerer diesbezüglicher Software-Anwendungen, die auf einem gemeinsamen Controller ablaufen, hat offensichtliche Vorteile zum Reduzieren der System-Hardware und Kosten. Das Betreiben verschiedener Software-Anwendungen auf dem gleichen Prozessor erhöht jedoch die Komplexität des Controllers auf Grund der Planung, die notwendig ist, um die verschiedenen Software-Anwendungen laufen zu lassen und zu verhindern, dass sich die Software-Anwendungen gegenseitig stören. Derartige Anwendungen gemischter Nutzung, die auf einem einzigen Prozessor funktionieren, werden noch komplizierter, wenn ein Fahrzeug-OEM zusätzliche Software auf einem Controller bereitstellt, der bereits über Software verfügt, die von einem Anbieter bereitgestellt wird.
-
Wenn in mehreren diesbezüglichen Software-Anwendungen und/oder Multicore-Computer-Umgebungen eine oder mehrere Software-Ausführungsanwendungen gleichzeitige Vorgänge auf den gleichen kritischen Ressourcen versuchen, kann es zu einem Problem kommen. Wenn beispielsweise die Software-Anwendungen einen gleichzeitigen Zugriff auf einen gemeinsam genutzten Dateneintrag versuchen, der automatisch aktualisiert werden muss, kann es zu einer Wettlaufsituation kommen, die wiederum einen Programmausfall verursachen kann. Es werden Synchronisationsabläufe verwendet, um zu verhindern, dass es zu derartigen Situationen kommt. Bekannte Synchronisationsverfahren verwenden Sperrmechanismen oder sperrfreie Mechanismen, um den Software-Anwendungen Zugriff auf kritische Ressourcen bereitzustellen, um zu verhindern, dass es zu Wettlaufsituationen oder ähnlichen Problemen kommt.
-
Sperrmechanismen verwenden ein Verfahren, die es nur einer Software-Anwendung auf einmal ermöglicht, eine Sperre zu erlangen und anschließend Verarbeitungsvorgänge an einer kritischen Ressource vorzunehmen. Wenn eine Software-Anwendung über eine Sperre für eine kritische Ressource verfügt, werden andere Software-Anwendungen, die versuchen, auf die kritische Ressource zuzugreifen, angehalten und in eine Warteschlange gesetzt. Sobald die Sperre aufgehoben wurde, erhält die nächste Software-Anwendung am Anfang der Warteschlange die Sperre und darf mit der Verarbeitung von Vorgängen fortfahren. Obwohl der zuvor angesprochene Ansatz der Sperrsynchronisation Wettlaufsituationen verhindert, verlangsamt das notwendige Anhalten der Software-Anwendungen die Verarbeitung. Falls zusätzlich eine Software-Anwendung, die über eine Sperre verfügt, die Verarbeitung nicht richtig beendet, kann es sein, dass das Programm nicht mehr reagiert.
-
Ein anderes bekanntes Verfahren, das gewöhnlich als sperrfreie Synchronisation bezeichnet wird, gewährleistet, dass nur eine Software-Anwendung eine kritische Ressource aktualisieren kann. Falls eine zweite Software-Anwendung eine Aktualisierung versucht, während eine erste Software-Anwendung die kritische Ressource aktualisiert, versagt der Versuch der zweiten Software-Anwendung. Falls die zweite Software-Anwendung versagt, startet sie den Aktualisierungsversuch erneut, nachdem die erste Software-Anwendung die Aktualisierung für die kritische Ressource beendet hat. Obwohl eine sperrfreie Synchronisation im Vergleich zu einer Sperrsynchronisation eine bessere Ausführungsleistung erbringen kann, kann sie für bestimmte kritische Ressourcen nicht immer umgesetzt werden. Andere bekannte Ansätze, wie etwa solche ohne Wartezeiten, erfordern übermäßig viel Speicher und erfordern mindestens drei Kopien der Datensätze.
-
KURZDARSTELLUNG DER ERFINDUNG
-
Die nachstehende Offenbarung beschreibt ein System und Verfahren zum Zugreifen auf kohärente Daten auf einem Controller. Das System und Verfahren umfassen einen ersten Puffer und einen zweiten Puffer, aus denen man jeweils lesen oder in die man schreiben kann, und einen Indikator, der angibt, welcher von dem ersten oder dem zweiten Puffer ausgelesen wird, während in den anderen von dem ersten oder dem zweiten Puffer geschrieben wird. Das System und Verfahren umfassen auch ein Lese-Synchronisationsprotokoll, das es ermöglicht, die kohärenten Daten aus dem Puffer zu lesen, von dem der Indikator angibt, dass er der Lesepuffer ist, und ein Schreib-Synchronisationsprotokoll, das es ermöglicht, die kohärenten Daten in den Puffer zu schreiben, von dem der Indikator angibt, dass er der Schreibpuffer ist.
-
Zusätzliche Merkmale der vorliegenden Erfindung werden aus der nachstehenden Beschreibung und den beiliegenden Ansprüchen hervorgehen, wenn sie zusammen mit den beiliegenden Zeichnungen gesehen werden.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Es zeigen:
-
1 eine Abbildung von kohärenten Daten, die zusammen zu aktualisieren sind, d.h. kohärent durch dasselbe ablauffähige Anbieterelement;
-
2 eine Abbildung eines Systems, das zwei Puffer und einen Indikator umfasst;
-
3 ein Ablaufschema eines Synchronisationsprotokolls für einen Leseabschnitt des in 2 gezeigten Systems;
-
4 ein Ablaufschema eines Synchronisationsprotokolls für einen Schreibabschnitt des in 2 gezeigten Systems;
-
5 eine Abbildung eines bestimmten ablauffähigen Software-Elements R1, welches das System aus 2 verwendet;
-
6 eine Zeitachse, die das ablauffähige Software-Element R1 aus 5 im Verlauf der Zeit und ein anderes ablauffähiges Software-Element R2, das versucht, die kohärenten Daten zu lesen, die von R1 bereitgestellt werden, abbildet;
-
7 eine andere Zeitachse, die das ablauffähige Software-Element R1 und das zweite ablauffähige Software-Element R2 im Verlauf der Zeit zeigt; und
-
8 eine andere Zeitachse, welche die ablauffähigen Software-Elemente R1 und R2 im Verlauf der Zeit zeigt.
-
AUSFÜHRLICHE BESCHREIBUNG DER AUSFÜHRUNGSBEISPIELE
-
Die folgende Diskussion der Ausführungsformen der Erfindung über ein System und Verfahren zum Unterstützen eines kohärenten Datenzugriffs auf einem Multicore-Controller ist rein beispielhafter Art und keineswegs dazu gedacht, die Erfindung oder ihre Anwendungen oder Verwendungen einzuschränken. Obwohl beispielsweise eine Fahrzeuganwendung besprochen wird, kann man das hier beschriebene System und Verfahren in einer beliebigen Rechenumgebung verwenden.
-
1 ist eine Abbildung von kohärenten Daten 10, die zusammen durch dasselbe ablauffähige Element bzw. dieselbe Software-Anwendung zu aktualisieren sind. Wie er hier verwendet wird, umfasst der Begriff „ablauffähiges Element” eine kleine ausführbare Software-Komponente oder Software-Funktion. Die Datengruppe 12, die verwandte Daten 14, 16 und 18 umfasst, soll derart aktualisiert werden, dass die Daten 14, 16 und 18 zusammen (d.h. kohärent) von demselben ablauffähigen Anbieterelement Ra, das durch das Kästchen 50 dargestellt wird, aktualisiert werden. Beispielsweise können die Daten 14, 16 und 18 Positionsdaten der X-, Y- und Z-Achsen eines globalen Positionsbestimmungssatelliten (GPS) eines Fahrzeugs darstellen. Die Datengruppe 20, welche die verwandten Daten 22 und 24 umfasst, soll derart aktualisiert werden, dass die Daten 22 und 24 zusammen von demselben ablauffähigen Anbieterelement, das durch das Kästchen 52 dargestellt wird, aktualisiert werden. Beispielsweise können die Daten 22 und 24 die Position eines Motorzylinders und die Position einer Nockenwellenphase darstellen. Viele verschiedene kohärente Datengruppen können in einer elektronischen Steuereinheit (ECU) eines Fahrzeugs vorhanden sein, wie es für den Fachmann offensichtlich ist. Die Datengruppe 30 umfasst die verwandten Daten 32 und 34, die zusammen von demselben ablauffähigen Anbieterelement, das durch das Kästchen 56 dargestellt wird, aktualisiert werden sollen, und die Datengruppe 40 umfasst die verwandten Daten 42 und 44, die zusammen von demselben ablauffähigen Anbieterelement, das durch das Kästchen 54 dargestellt wird, aktualisiert werden sollen.
-
Die jeweiligen Daten 14, 16, 18, 22, 24, 32, 34, 42 und 44 sind grundlegende bzw. atomare Bausteinelemente von ausführbaren Programmen. Obwohl die Datengruppen 12, 20, 30 und 40 zusammen geschrieben werden sollen, können die Daten 14, 16, 18, 22, 24, 32, 34, 42 und 44 gemäß verschiedenen Gruppen zusammen gelesen werden. In dem Kästchen 50 werden die Daten 14, 16 und 18 alle zusammen geschrieben oder aktualisiert. Falls beispielsweise die Daten 14, 16 und 18 die X-, Y- und Z-Koordinaten eines Fahrzeugs darstellen, z.B. Längengrad, Breitengrad und Höhenlage, kann der Standort des Fahrzeugs nicht genau bestimmt werden, falls die Daten 16 und 18 aber nicht 14 aktualisiert wurden. Somit ist es in diesem Fall wichtig, dass die Daten 14, 16 und 18 zusammen aktualisiert werden. Bei einem anderen Beispiel werden in dem Kästchen 52 die Daten 22 und 24 zusammen geschrieben, und die Daten 32 werden alleine für eine bestimmte Anwendung gelesen. Bei einem anderen Beispiel werden in dem Kästchen 54 die Daten 34 alleine gelesen, und die Daten 42 und 44 werden von einer bestimmten Anwendung geschrieben. Bei einem anderen Beispiel werden in dem Kästchen 56 die Daten 14, 16 und 22 zusammen gelesen, und die Daten 32 und 34 werden von einer bestimmten Anwendung zusammen geschrieben. Die Daten 14 und 16, die von dem ablauffähigen Anbieterelement in dem Kästchen 56 gelesen werden, müssen kohärent sein, was bedeutet, dass 14 und 16, die von dem ablauffähigen Anbieterelement in dem Kästchen 56 gelesen werden, von dem ablauffähigen Anbieterelement in dem Kästchen 50 kohärent zu einem früheren Zeitpunkt aktualisiert werden müssen, wie etwa die zuvor besprochenen Längengrad- und Breitengrad-Koordinaten des Fahrzeugs. Bei einem anderen Beispiel werden in dem Kästchen 58 die Daten 16 und 18 zusammen gelesen, und sie müssen von dem ablauffähigen Anbieterelement in dem Kästchen 50 kohärent aktualisiert werden, die Daten 24 werden alleine gelesen, und die Daten 42 und 44 werden zusammen gelesen, nachdem sie von dem ablauffähigen Anbieterelement in dem Kästchen 54 kohärent aktualisiert wurden. Die Beispiele 50, 52, 54, 56 und 58 erläutern, dass in einer Rechenumgebung die Lesekohärenz unterschiedlich vorkommen kann. Ferner können verschiedene ablauffähige Elemente verschiedene Versionen von kohärenten Daten lesen. Beispielsweise können die Daten 16 in dem Kästchen 56 nicht die gleichen Daten 16 sein, die in dem Kästchen 58 gelesen werden. Somit können die ablauffähigen Elemente unter Verwendung verstreuter Daten in dem Speicher wirklich parallel ausgeführt werden, ohne die Verwendung der Verfahren der Sperrsynchronisation oder der sperrfreien Synchronisation, die in der Technik bekannt sind, zu benötigen, wodurch die Probleme vermieden werden, die mit diesen Lösungsansätzen verknüpft sind und zuvor identifiziert wurden.
-
Die Sperrsynchronisation, die in der Technik bekannt ist und zuvor besprochen wurde, bedingt eine Sperrsynchronisation für den Datenzugriff. Bei der vorliegenden Anmeldung wird das Sperren des Steuerprogramms des Betriebssystems (OS) vorgeschlagen, um die nachstehend beschriebenen Protokolle zu synchronisieren. Das Sperren des OS-Steuerprogramms soll verhindern, dass die aktuelle Software-Ausführung von einem OS-Arbeitsschritt höherer Priorität in demselben Kern vorweggenommen wird. Dies soll sicherstellen, dass der Lese- oder Schreibzugriff der kohärenten Daten so schnell wie möglich erfolgen kann.
-
2 ist eine Abbildung eines Systems 70, das es ermöglicht, dass die Datengruppen 12, 20, 30 und 40 zusammen geschrieben werden, und zwar auf eine Art und Weise, die schnell und zuverlässig ist und keine großen Mengen an Speicher benötigt und die zwei Puffer verwendet. Das System 70 umfasst einen ersten Puffer 72, einen zweiten Puffer 74 und einen Indikator 76. Der Indikator 76 gibt an, welcher der Puffer 72 und 74 auszulesen ist. Wenn ein ablauffähiges Element Rr liest, bestimmt das ablauffähige Element, welchen der Puffer 72 oder 74 der Indikator 76 als den Puffer angibt, aus dem gelesen werden soll. Das ablauffähige Element liest die gewünschten kohärenten Daten aus dem angegebenen Puffer 72 oder 74. Wenn ein ablauffähiges Element Rw schreibt, bestimmt das ablauffähige Element, welchen der Puffer 72 oder 74 der Indikator 76 als auszulesen angibt, und schreibt in den Puffer 72 oder 74, den der Indikator 76 nicht angibt bzw. auf den er nicht zeigt. Mit anderen Worten zeigt der Indikator immer auf den Lesepuffer, so dass der andere Puffer implizit als Schreibpuffer angegeben wird. Ein Synchronisationsprotokoll, das nachstehend beschrieben wird, wird kombiniert mit den Puffern 72 und 74, einer zum Lesen und der andere zum Aktualisieren/Schreiben, verwendet, und der Indikator 76 ermöglicht es dem System 70, ein einziges Schreibelement zu nutzen, bei dem es sich um eine weit verbreitete Standardausführung für sicherheitskritische Software-Anwendungen handelt, wodurch die Kosten gering gehalten werden, während aktualisierte Kerndaten ohne die Verzögerung von Sperrmechanismen, Wartezeiten, teure Bauteile oder das Risiko von Fehlern des ablauffähigen Elements, wie zuvor beschrieben, bereitgestellt werden.
-
Zurück zu 2 wird zum Zeitpunkt t0, der in Punkt 82 gezeigt wird, der Puffer 74 von dem Indikator 76 als der Puffer gezeigt, aus dem gelesen werden soll, wie durch den Pfeil 78 gezeigt. Der Puffer 72 wird von dem Indikator 76 als der Puffer angegeben, in den geschrieben werden soll oder der aktualisiert werden soll, wie durch den gestrichelten Pfeil 80 gezeigt. Zum Zeitpunkt t1, der in Punkt 84 gezeigt wird, ist das Schreiben in den Puffer 72 beendet und der Indikator 76 schaltet um. Somit zeigt der Indikator 76 auf den Puffer 72 als den Puffer, aus dem gelesen werden soll, wie durch den Pfeil 78 gezeigt, während der Puffer 74 als der Puffer gezeigt wird, in den geschrieben werden soll. Zum Zeitpunkt t2, der in Punkt 86 gezeigt wird, hat der Indikator wieder umgeschaltet, so dass der Puffer 74 den Pfeil 78 aufweist, der auf den Puffer 74 als den Lesepuffer zeigt, während der Puffer 72 von dem Indikator 76 als der Schreibpuffer angegeben wird, wie durch den gestrichelten Pfeil 80 gezeigt. Auf diese Art und Weise werden die kohärenten Daten nie durch die ablauffähigen Elemente blockiert, wobei das Risiko, dass kohärente Daten gelesen werden, wenn sie nur teilweise aktualisiert sind, nicht vorkommt. Somit stellt das System 70 im Betrieb einen einzigen Schreibvorgang auf einmal bereit, verfügt über die Fähigkeit mehrerer paralleler Lesevorgänge, erfordert keine globale (d.h. Multicore-)Planungssteuerung, und Zugriffe auf die kohärenten Daten können mit unterschiedlichen Arbeitsschrittfrequenzen des Betriebssystems und auf unterschiedlichen Kernen erfolgen.
-
3 ist ein Ablaufdiagramm eines Synchronisationsprotokolls oder Algorithmus 90 für den Leseabschnitt des Systems 70, der funktioniert, um einen parallelen Zugriff des Indikators 76 auf verschiedene Kerne oder ablauffähige Elemente zu verhindern. In dem Kästchen 92 wird das Steuerprogramm des Betriebssystems (OS) des Host-Kerns (nur für Host-Kern), d.h. den Kern, auf dem der aktuelle Code ausgeführt wird, gesperrt, um sicherzustellen, dass keine Vorwegnahme durch einen Arbeitsschritt höherer Priorität erfolgt. In dem Kästchen 94 wird der Indikator 76 lokal in dem ablauffähigen Leseelement gespeichert, um zu verhindern, dass es auf Grund des zuvor beschriebenen Umschaltprozesses des Indikators 76 zu einer Verfälschung kommt. Dann werden die kohärenten Daten in dem Kästchen 96 aus dem angegeben Lesepuffer gelesen. An der Entscheidungsraute 98 überprüft der Algorithmus, ob der Indikator 76 auf einen anderen Puffer umgeschaltet hat. Falls der Indikator 76 nun auf einen anderen Puffer zeigt, bedeutet dies, dass der soeben ausgelesene Puffer irgendwann während des vorherigen Lesezugriffs 96 zum Schreibpuffer geworden ist, so dass die soeben gelesenen Daten vielleicht nicht kohärent sind. Falls der Indikator 76 umgeschaltet hat, müssen die Daten erneut gelesen werden, der Algorithmus kehrt zum Kästchen 94 zurück und speichert den Indikator wieder lokal, wodurch die zuletzt aktualisierten kohärenten Daten bereitgestellt werden. Falls an der Entscheidungsraute 98 der Indikator 76 die Puffer nicht umgeschaltet hat, seit der Indikator lokal in dem Kästchen 94 gespeichert wurde, ist die Kohärenz der Datenauslesung garantiert, das OS-Steuerprogramm wird freigegeben, was bedeutet, dass ein kohärenter Datenlesezugriff an dem Host-Kern in dem Kästchen 100 fertiggestellt wurde.
-
4 ist ein Ablaufschema eines Synchronisationsprotokolls oder Algorithmus 110 für den Schreibabschnitt des zuvor beschriebenen Systems 70. In dem Kästchen 112 wird das OS-Steuerprogramm des Host-Kerns derart gesperrt, dass die Vorwegnahme durch einen Arbeitsschritt höherer Priorität verhindert wird. In dem Kästchen 114 werden die kohärenten Daten in den Puffer geschrieben, der von dem Indikator 76 als Schreibpuffer angegeben wird. In dem Kästchen 116 schaltet der Indikator 76 um, um die aktualisierten Daten als den Lesepuffer anzugeben, weil soeben in dem Kästchen 114 ein neuer Schreibvorgang beendet wurde. In dem Kästchen 118 wird das OS-Steuerprogramm an dem Host-Kern freigegeben. Die Puffer 72 und 74 schalten, wie zuvor mit Bezug auf 2 beschrieben, unter Verwendung der Algorithmen 90 und 110 von Lesepuffer und Schreibpuffer um. Der Schreibalgorithmus 110 ist einfacher als der Lesealgorithmus 90, weil der Schreibalgorithmus 110 sich nicht um den Leseprozess kümmern muss. Der Lesealgorithmus 90 überprüft, wann der Indikator 76 umschaltet, was gut funktioniert, weil der Schreibalgorithmus 110, obwohl er einfacher ist, länger als der Lesealgorithmus 90 braucht, um zu Ende zu gehen. Der Zweck des Sperrens des OS-Steuerprogramms besteht wiederum darin, sicherzustellen, dass entweder der Schreibzugriff oder der Lesezugriff auf die kohärenten Daten so schnell wie möglich beendet werden kann.
-
5 bildet ein ablauffähiges Software-Element R1 ab, das in dem Kästchen 120 gezeigt wird, das mit einer Arbeitsschrittfrequenz von 2,5 Millisekunden läuft und in dem Kästchen 122 einen Satz von kohärenten Signalen S bereitstellt, wobei es sich um einen Satz von Signalen handelt, auf die kohärent zugegriffen werden soll, wie etwa die zuvor beschriebenen X-, Y- und Z-Koordinaten. Zwei Puffer, wie etwa die zuvor beschriebenen Puffer 74 und 76, werden für den Satz von kohärenten Signalen S erstellt. Gleichzeitig mit der Erstellung der Puffer 72 und 74 wird eine Variable „read_index” erstellt, die als der Indikator 76 gezeigt wird, um anzugeben, welcher der beiden Puffer 72 und 74 für den Lesezugriff verwendet werden soll. Der andere Puffer wird für den Schreibzugriff nur zu diesem Zeitpunkt verwendet. Das Umschalten erfolgt, wie in 2 zuvor beschrieben, d.h. zu jedem beliebigen Zeitpunkt ist ein Puffer der Lesepuffer und der andere Puffer ist der Schreibpuffer.
-
6 bis 8 bilden eine beispielhafte Zeitachse ab, die das ablauffähige Software-Element R1 der 5 im Betrieb im Verlauf der Zeit zeigt. In 6 wird in den Kästchen 132, 134 und 136 R1 alle 2,5 Millisekunden ausgeführt. Sobald somit R1 in dem Kästchen 132 ausgeführt wird, wird 2,5 Millisekunden später R1 wieder in dem Kästchen 134 ausgeführt, dann 2,5 Millisekunden danach wird R1 in dem Kästchen 136 wieder ausgeführt. Am Ende jeder Ausführung in den Kästchen 132, 134 und 136 schaltet der Indikator 76 den Lesepuffer und den Schreibpuffer um, weil R1 alle 2,5 Millisekunden einen neuen Satz von Signalen S erzeugt. Die einzelnen Signale von S können jederzeit während der R1-Ausführung in den Kästchen 132, 134 und 136 erzeugt werden. In dem Kästchen 138 muss ein anderes ablauffähiges Software-Element R2 S asynchron und kohärent lesen. Das ablauffähige Software-Element R2 in dem Kästchen 138 vergleicht „read_index”, d.h. die Angabe des Indikators 76 mit einem Lese-Anfang und einem Lese-Ende unter Verwendung des Algorithmus 90. Falls der Indikator 76 sich nicht ändert, wurde der kohärente Datenlesevorgang erfolgreich beendet, weil der Lesepuffer immer kohärente Daten enthält.
-
7 ist eine andere Zeitachse, welche die ablauffähigen Software-Elemente R1 und R2 im Verlauf der Zeit abbildet. Wie in 7 gezeigt, falls der Indikator 76 während des Lesezugriffs von dem Zeigen beispielsweise auf den Puffer 72 auf den Puffer 74 umgeschaltet hat, werden die Daten, die von dem ablauffähigen Software-Element R2 gelesen wurden, in dem Kästchen 140 wiederholt, bis von dem Indikator 76 zwischen dem Anfang des Lesevorgangs und dem Ende des Lesevorgangs in dem Kästchen 132 keine Änderung erkannt wird.
-
8 ist eine andere Zeitachse, welche die ablauffähigen Software-Elemente R1 und R2 abbildet, die eine erweiterte Ausführungszeit von R1 in dem Kästchen 132 zeigt, wobei die Signale S während des Lesevorgangs des zweiten ablauffähigen Software-Elements R2 in dem Kästchen 138 aktualisiert werden. Das zweite ablauffähige Software-Element R2 liest wieder in dem Kästchen 140, und in dem Kästchen 140 beendet R2 den Lesevorgang, bevor S am Ende der Ausführung in dem Kästchen 134 wieder aktualisiert wird (wenn der Indikator 76 umschaltet).
-
Der Vorteil, der von dem hier beschriebenen System und Verfahren bereitgestellt wird, ist ein System, das wartefrei und sperrfrei ist und das gewährleistet, dass der Schreibvorgang und der Lesevorgang bei Vorliegen eines parallelen Zugriffs ohne Prioritätsumkehrung fortfahren. Die Daten, auf die zugegriffen wird, sind mit Sicherheit kohärent.
-
Wie es der Fachmann sehr wohl verstehen wird, können sich die mehreren und diversen Schritte und Prozesse, die hier besprochen wurden, um die Erfindung zu beschreiben, auf Arbeitsabläufe beziehen, die von einem Computer, einem Prozessor oder einer anderen elektronischen Rechenvorrichtung ausgeführt werden, die Daten unter Verwendung eines elektrischen Phänomens manipuliert und/oder umformt. Derartige Computer und elektronische Vorrichtungen können diverse flüchtige und/oder nicht flüchtige Speicher verwenden, wozu ein nicht vorübergehendes computerlesbares Medium gehört, auf dem ein ausführbares Programm gespeichert ist, das diversen Code oder ausführbare Anweisungen umfasst, die von dem Computer oder Prozessor ausgeführt werden können, wobei der Speicher und/oder das computerlesbare Medium alle Formen und Arten von Speichern und anderen computerlesbaren Medien umfassen können.
-
Die vorstehende Diskussion offenbart und beschreibt rein beispielhafte Ausführungsformen der vorliegenden Erfindung. Der Fachmann wird aus dieser Diskussion und aus den beiliegenden Zeichnungen und Ansprüchen ohne Weiteres erkennen, dass diverse Änderungen, Modifikationen und Variationen daran vorgenommen werden können, ohne Geist und Umfang der Erfindung, wie sie in den nachstehenden Ansprüchen definiert wird, zu verlassen.