DE69729822T2 - Echtzeit-Taskzuweiser - Google Patents
Echtzeit-Taskzuweiser Download PDFInfo
- Publication number
- DE69729822T2 DE69729822T2 DE69729822T DE69729822T DE69729822T2 DE 69729822 T2 DE69729822 T2 DE 69729822T2 DE 69729822 T DE69729822 T DE 69729822T DE 69729822 T DE69729822 T DE 69729822T DE 69729822 T2 DE69729822 T2 DE 69729822T2
- Authority
- DE
- Germany
- Prior art keywords
- thread
- queue
- processor
- task assignment
- processors
- 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 - Fee Related
Links
- 238000000034 method Methods 0.000 claims description 40
- 238000012795 verification Methods 0.000 claims description 6
- 238000004891 communication Methods 0.000 claims description 5
- 230000008859 change Effects 0.000 claims description 2
- 238000004519 manufacturing process Methods 0.000 claims 8
- 230000008569 process Effects 0.000 description 25
- 238000007726 management method Methods 0.000 description 4
- 238000012545 processing Methods 0.000 description 4
- 239000011159 matrix material Substances 0.000 description 3
- 230000002457 bidirectional effect Effects 0.000 description 2
- 230000006870 function Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000004043 responsiveness Effects 0.000 description 2
- 108700005085 Switch Genes Proteins 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000000903 blocking effect Effects 0.000 description 1
- 230000001934 delay Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 230000006872 improvement Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000008520 organization Effects 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
Description
- TECHNISCHES GEBIET
- Diese Erfindung betrifft ein Verfahren und eine Vorrichtung für eine effiziente Prozesseinplanung für ein Multiprozessorsystem in einer Echtzeit-Umgebung.
- Das Multiprozessorsystem (MP) ist gekennzeichnet durch die Gegenwart mehrerer CPU oder Prozessoren, welche an gemeinsamen oder gleichzeitig genutzten Rechner-Tasks zusammenarbeiten. Mit mehreren Prozessoren in einem einzigen Computersystem kann man eine Steigerung des Leistungsvermögens erhalten, indem zugelassen wird, dass sich viele Prozessoren die Rechnerlast teilen, oder indem zugelassen wird, dass viele kleinere Tasks parallel von separaten Prozessoren durchgeführt werden. Ein Multiprozessorsystem kann auch die Zuverlässigkeit des Systems verbessern, da der Ausfall eines Prozessors nicht notwendigerweise zu einem Absturz des gesamten Systems führen wird.
- Die Einführung mehrerer Prozessoren verkompliziert jedoch die Betriebsmittelverwaltung und das Zuweisungsproblem, da zwei oder mehr Prozesse gleichzeitig im Kern auf separaten Prozessoren ausgeführt werden. Folglich muss ein Einplanermodul eines Betriebssystems entscheiden, welcher Prozessor einen Prozess ausführen soll, und in seiner allgemeinen Form einen Satz von Prozessen auf einem Satz von Prozessoren mit beliebigen Eigenschaften einplanen, um irgendeine Zielfunktion zu optimieren. Dies ist mit der Auswahl eines Prozesses zur Ausführung aus einem Satz von Prozessen verbunden.
- Die grundlegenden Abstraktionen in einem Betriebssystem umfassen „Tasks" und „Threads". Ein Task ist eine Einheit der Betriebsmittelverwaltung und ein Thread ist ein einzelner Befehlsablauf. Jeder Thread besitzt einen Registerzustand und einen Stapelspeicher. Das System ordnet jedem Thread zusätzlich Zustandsinformationen zu, welche seine Einplanbarkeit betreffen. Diese umfassen die Taskzuweisungspriorität des Threads und die Prozessoraffinität, welche festlegt, auf welchen Prozessoren ein Thread ausgeführt werden kann.
-
1(A) zeigt einen Taskzuweiser mit einfacher Warteschlange nach dem Stand der Technik für ein Multiprozessorsystem, wobei ein Taskzuweiser eine Matrix101 von Taskzuweisungswarteschlangen verwendet, welche nach Taskzuweisungspriorität indiziert sind. Wenn in1(A) ein Thread lauffähig gemacht wird, wird er in einer Taskzuweisungswarteschlange, typischerweise am Ende, entsprechend seiner Taskzuweisungspriorität platziert. Wenn ein Prozessor auf einen neuen Thread umschaltet, wählt er immer den Thread am Anfang der nicht leeren Taskzuweisungswarteschlange höchster Priorität. Threads können eine Taskzuweisungspriorität nicht verändern während sie in einer Taskzuweisungswarteschlange sind; der Thread muss zuerst entfernt werden, seine Taskzuweisungspriorität eingestellt werden, und dann kann der Thread in einer unterschiedlichen Taskzuweisungswarteschlange platziert werden. -
1(B) illustriert einen Taskzuweiser mit einfacher Warteschlange nach dem Stand der Technik, wo ein Thread, welcher in einem Synchronisationsobjekt warten muss, in einer Schlafwarteschlange102 platziert wird, welche dem Synchronisationsobjekt zugeordnet ist. Die Schlafwarteschlange wird in der Reihenfolge der Taskzuweisungspriorität gehalten, so dass, wenn das Synchronisationsobjekt freigegeben wird, sich der Thread mit höchster Priorität, welcher auf das Objekt wartet, am Anfang der Schlafwarteschlange befindet. - Das in
1(A) und1(B) gezeigte System nach dem Stand der Technik verwendet beim Einplanen eine einfache Schleifensperre (Spin-Lock), um alle Einplanungsoperationen zu schützen. Jeder Einplaner kann die Sperre erhalten oder aufheben. Wenn die Einplanungssperre gegenwärtig von einem Prozessor gehalten wird, „drehen" („spin") andere Prozessoren, welche die Einplanungssperre brauchen, beim Warten auf Zugang an der Sperre. Insbesondere wird, wann immer die Freigabe eines Synchronisationsobjekts irgendeinen Thread lauffähig macht, die Einplanungssperre gehalten, während der Thread in der Taskzuweisungswarteschlange platziert wird. Um eine Störung und Verzögerungen von Unterbrechungsroutinen zu vermeiden, läuft der Halter der Einplanungssperre auf einer erhöhten Unterbrechungsebene. - Folglich kann beim in
1(A) und1(B) gezeigten System nach dem Stand der Technik der Konflikt um eine einzelne Einplanungssperre bewirken, dass Prozessoren hintereinander warten, um eine Einplanungsentscheidung zu treffen, was zu einigen ungenutzten Prozessoren führt. Im Ergebnis wird nicht nur der ganze Zweck der Verwendung mehrerer Prozessoren, eine schnelle Verarbeitung von Jobs zu erzielen, zunichte gemacht, sondern es bleiben wertvolle Computer-Betriebsmittel ungenutzt. - Diese Situation kann etwas verbessert werden, indem ein System mit mehreren Taskzuweisungswarteschlangen eingeführt wird, wobei zugelassen wird, dass jeder Prozessor seine eigene Taskzuweisungswarteschlange und seine eigene Einplanungssperre aufweist. Ein derartiges System mit mehreren Warteschlangen und mehreren Sperren, wie bei BLACK: „Scheduling Support for concurrency and Parallelism in the Mach Operating System", Computer, Bd. 23, Nr. 5, Mai 1990 offenbart, wird in
2(A) gezeigt, wobei jeder Prozessor seine eigene Taskzuweiserwarteschlange unterhält. Beispielsweise gibt es eine separate Taskzuweisungswarteschlange, welche jedem der Prozessoren 1, 2,..., N in2(A) zugeordnet ist. - Beim System der
2(A) beginnt ein Prozessor, welcher bereit ist, einen neuen Thread zu übernehmen, nach einem lauffähigen Thread in seiner eigenen Taskzuweisungswarteschlange zu suchen. Wenn seine eigene Warteschlange nicht leer ist, übernimmt der Prozessor den verfügbaren lauffähigen Thread mit der höchsten Priorität aus seiner eigenen Warteschlange. Wenn seine eigene Warteschlange jedoch leer ist, beginnt der Prozessor, andere Taskzuweisungswarteschlangen nach verfügbaren Threads zu durchsuchen. Noch unter Bezugnahme auf2(A) kann der Prozessor, falls es einen verfügbaren lauffähigen Thread in irgendeiner anderen Taskzuweisungswarteschlange gibt, außer der Thread ist markiert als nur auf einem bestimmten Prozessor lauffähig, den Thread aus der anderen Taskzuweisungswarteschlange übernehmen und den Thread ausführen. Taskzuweiser nach dem Stand der Technik, wie beispielsweise in1 und2 gezeigt, sind jedoch nicht für Echtzeit-Anwendungen geeignet. - Ein Echtzeit-Computersystem wird entworfen, um eine erforderliche Leistungsebene oder Verarbeitung innerhalb einer begrenzten Zeitdauer zu liefern. Echtzeit-Computersysteme finden in den Bereichen der virtuellen Realität, der Fabrikautomatisierung, der Robotik, der Telekonferenz und des Multimedia-Rundfunksystems Anwendungen. Diese Anwendungen sind typischerweise „gemischte Arbeitsweisen", d. h. sie sind in einplanbare Entitäten aufteilbar, von welchen einige Echtzeit-Reaktion erfordern. Um eine Reaktion in begrenzter Zeit zu erzielen, erfordern zeitkritische Anwendungen eine Kontrolle über ihr Einplanungsverhalten.
- Wenn ein Multiprozessorsystem eingesetzt wird, um Echtzeit-Anwendungen zu unterstützen, wird die Einplanung von Prozessen sogar noch komplizierter, und folglich muss ein Echtzeit-Betriebssystem in der Lage sein, zeitkritischen Tasks irgendeine Echtzeit-Fähigkeit bereitzustellen. Folglich muss ein Echtzeit-System in der Lage sein, sofort eine Reaktion auf bestimmte externe Ereignisse und eine Einplanung bestimmter Prozesse bereitzustellen, um sie innerhalb einer bestimmten Zeitbegrenzung nach Auftreten eines Ereignisses auszuführen. Ein Echtzeit-System muss auch garantieren, dass das Betriebssystem einen bestimmten Prozess innerhalb einer festgelegten Zeitbegrenzung einplanen kann.
- Um Echtzeit-Threads hoher Priorität so schnell wie möglich zu bedienen, kann das System in
2(A) so verbessert werden, dass es eine separate Echtzeit-Warteschlange aufweist, wie in2(B) gezeigt. In2(B) wird eine zusätzliche Superwarteschlange auf einer höheren Ebene den mehreren Taskzuweiserwarteschlangen hinzugefügt, um eine systemweite Sichtbarkeit lauffähiger Echtzeit-Threads bereitzustellen. Die Superwarteschlange ist eine Warteschlange von Taskzuweisungswarteschlangen, welche diejenigen Prozessorwarteschlangen enthält, die ungebundene Echtzeit-Threads mit einer Priorität halten, welche höher ist als irgendeine vorbestimmte Schwellprioritätsebene. Folglich listet die Superwarteschlange diejenigen Prozessoren auf, deren Thread mit der höchsten Priorität eine ausreichende Priorität aufweist, um als ein Echtzeit-Thread betrachtet zu werden. - Unter Bezugnahme auf
2(B) sucht ein Prozessor zuerst in der Superwarteschlange nach lauffähigen Threads. Falls es eine nicht leere Warteschlange hoher Priorität in der Superwarteschlange gibt, übernimmt der Prozessor den lauffähigen Thread mit der höchsten Priorität aus dieser Warteschlange. Falls die Superwarteschlange leer ist, prüft der Prozessor seine eigene Warteschlange. Falls seine eigene Warteschlange noch leer ist, geht der Prozessor zu anderen Taskzuweiserwarteschlangen für lauffähige Threads weiter. Falls es irgendeine nichtleere Taskzuweiserwarteschlange im System gibt, übernimmt der Prozessor den lauffähigen Thread mit der höchsten Priorität aus dieser Warteschlange und beginnt, den Thread auszuführen. - Echtzeit-Threads würden zugewiesen durch Untersuchung der Superwarteschlange. Wenn folglich ein Prozessor einen Thread zum Ausführen auswählt, untersucht er zuerst die Superwarteschlange und dann seine eigene Warteschlange.
- Obwohl oben stehende Lösung, welche mit Bezug auf
2(B) behandelt wurde, eine Verbesserung gegenüber dem Stand der Technik darstellt und eine unkomplizierte Lösung für eine Echtzeit-Multiprozessoreinplanung bietet, stellt sie ein kritisches Wettlaufproblem beim Einplanen von Echtzeit-Threads dar. Beispielsweise kann eine Wettlaufsituation im folgenden Szenario erzeugt werden: es wird vorausgesetzt, dass die Prozessoren 1 und 2 benachrichtigt werden, dass es zwei lauffähige Echtzeit-Threads in der Superwarteschlange gibt. Die Prozessoren 1 und 2 fahren fort, die Superwarteschlange zu prüfen, um herauszufinden, welche Prozessor-Warteschlangen die beiden Threads aufweisen. Die beiden Echtzeit-Threads befinden sich beispielsweise in der Taskzuweisungswarteschlange des Prozessors 3 und des Prozessors 4, wobei der Echtzeit-Thread in der Warteschlange des Prozessors 3 eine höhere Priorität aufweist als der in der Warteschlange des Prozessors 4. - Nach dem Herausfinden aus der Superwarteschlange, dass sich der Echtzeit-Thread mit der höchsten Priorität in der Taskzuweisungswarteschlange des Prozessors 3 befindet, versuchen beide Prozessoren 1 und 2 zuzugreifen und den Echtzeit-Thread aus der Warteschlange des Prozessors 3 zu übernehmen. Prozessor 1 greift jedoch zuerst auf die Warteschlange des Prozessors 3 zu und übernimmt den Echtzeit-Thread. Dann versucht Prozessor 2, welcher noch nach einem Thread in der Warteschlange des Prozessors 3 sucht und nicht weiß, dass der Echtzeit-Thread mit der höchsten Priorität gerade von Prozessor 1 übernommen wurde, den nächsten Thread mit der höchsten Priorität aus der Warteschlange des Prozessors 3 zu übernehmen. Der nächste lauffähige Thread mit der höchsten Priorität in der Warteschlange des Prozessors 3 kann jedoch einer mit einer sehr geringen Priorität sein. Im Ergebnis wird der Echtzeit-Thread in der Warteschlange des Prozessors 4 in der Warteschlange zurückgelassen, wobei er darauf wartet, eingeplant zu werden, bis irgendein Prozessor verfügbar wird, ihn zu bedienen.
- Beim oben stehenden Szenario, welches ein Beispiel vieler möglicher Nachteile wegen ungenauer Synchronisation ist, führt der Mangel an Kommunikation zwischen den Prozessoren 1 und 2 zu einer Wettlaufsituation, welche dazu führt, dass ein Echtzeit-Thread höherer Priorität in einer Warteschlange wartet, während ein Thread geringerer Priorität bedient wird. Eine ungenaue Systemsynchronisation kann folglich Terminüberschreitungen von Echtzeit-Threads sogar bei niedrigen Pegeln der Prozessorauslastung bewirken.
- Folglich können Taskzuweiser nach dem Stand der Technik, welche voll von Wettlaufsituationen und Fehlern bei der Implementierung des Taskzuweisers sind, zu einem Nicht-Echtzeit-Verhalten von Echtzeit-(RT)-Threads führen und in manchen Fällen das System blockieren.
- Folglich werden gegenwärtig verschiedene Vorrichtungen und Verfahren eingesetzt, um einen Taskzuweiser für ein Multiprozessorsystem bereitzustellen. Sie sind jedoch nicht für Echtzeit-Anwendungen geeignet, liefern für viele Anwendungen keinen Echtzeit-Dienst und sind voll von Wettlaufsituationen. Dementsprechend wäre es vorteilhaft, einen Taskzuweiser bereitzustellen, welcher effizient sowohl Timesharing-(TS)- und Echtzeit-(RT)-Einplanungs verfahrensweisen für ein Multiprozessorsystem unterstützen kann.
- OFFENBARUNG DER ERFINDUNG
- Die vorliegende Erfindung wird in den beiliegenden Ansprüchen definiert und stellt einen Prozesseinplaner oder Taskzuweiser für ein Multiprozessorsystem für Echtzeit-Anwendungen bereit. Bei den Ausführungsformen der vorliegenden Erfindung weist jeder Prozessor seine eigene Warteschlange und einen Taskzuweiser auf, so dass das System eine Taskzuweisungswarteschlange für jeden Prozessor und eine separate globale Taskzuweisungswarteschlange für ungebundene Echtzeit-Threads höherer Priorität unterhalten kann. Jede Warteschlange weist eine separate Einplanungssperre auf, welche ihr zugeordnet ist, um Einplanungsoperationen zu schützen. Es wird zugelassen, dass ein Prozessor einen neuen Thread in der globalen Echtzeit-Warteschlange hoher Priorität, in der eigenen Warteschlange des Prozessors oder in der Warteschlange jedes anderen Prozessors platziert.
- Ein Taskzuweiser des Prozessors kann einen Thread zur Ausführung aus der globalen Echtzeit-Warteschlange, aus einer eigenen Warteschlange des Prozessors oder einer Warteschlange eines anderen Prozessors als ein auszuführender Kandidaten-Thread auf der Grundlage von Prioritätsvariablen auswählen, welche jeder Warteschlange zugeordnet sind. Die Untersuchung der Prioritäten in Warteschlangen zur Thread-Auswahl erfordert keine Einplanungssperren, und eine Fehlkommunikation wird durch Verwendung eines geeigneten Synchronisationsalgorithmus verhindert. Wenn ein Kandidaten-Thread zur Ausführung ausgewählt ist, benachrichtigt der Prozessor andere Prozessoren über seine Auswahl und fährt fort, sie gegenüber Threads in der globalen Echtzeit-Warteschlange und in der eigenen Taskzuweisungswarteschlange des Prozessors zu verifizieren, um den lauffähigen Thread höchster Priorität im System auszuwählen.
- Folglich lässt die vorliegende Erfindung zu, dass der Taskzuweiser Wettlaufsituationen verhindert und Sperrkonflikte minimiert, während er sicherstellt, dass Threads hoher Priorität so schnell wie möglich zugewiesen werden. Die bevorzugte Ausführungsform der vorliegenden Erfindung wird durch eine Synchronisation zwischen den Operationen der Zuweisung eines Threads und des Lauffähigmachens eines Threads implementiert.
- BESCHREIBUNG DER ZEICHNUNGEN
- Die Erfindung wird nun beispielhaft unter Bezugnahme auf die folgenden Zeichnungen beschrieben:
-
1(A) zeigt ein Taskzuweisersystem mit einfacher Warteschlange nach dem Stand der Technik für eine Multiprozessorumgebung, wobei ein Taskzuweiser eine Matrix von Taskzuweisungswarteschlangen verwendet, welche durch die Taskzuweisungspriorität indiziert sind. -
1(B) zeigt ein Taskzuweisersystem mit einfacher Warteschlange nach dem Stand der Technik, wobei blockierte Threads auf ein Synchronisationsobjekt warten. -
2(A) zeigt ein System mit mehreren Warteschlangen und mehreren Sperren. -
2(B) zeigt ein System mit mehreren Warteschlangen und mehreren Sperren mit einer zusätzlichen Superwarteschlange. -
3 illustriert einen Universalcomputer, welcher für eine Implementierung einer Ausführungsform der Erfindung geeignet ist. -
4(A) zeigt eine bevorzugte Ausführungsform eines Systems mit mehreren Taskzuweiserwarteschlangen gemäß der vorliegenden Erfindung. -
4(B) zeigt eine Struktur einer Taskzuweisungswarteschlange ausführlicher, welche eine Taskzuweisungswarteschlange für einen Prozessor der4(A) verwendet. -
5 zeigt eine bevorzugte Konfiguration des Multiprozessorsystems gemäß der vorliegenden Erfindung. -
6 zeigt ein Ablaufdiagramm, welches einen Taskzuweiser beschreibt, welcher einen Thread zum Ausführen auf einem Prozessor einplant. -
7 zeigt ein Ablaufdiagramm, welches den Thread-Auswahlprozess des Schritts601 der6 ausführlicher beschreibt. -
8 illustriert eine globale Strategie zur Prioritätsauflistung. -
9 zeigt ein Ablaufdiagramm, welches einen Prozessor beschreibt, welcher einen Thread lauffähig macht. -
10 illustriert ein Ablaufdiagramm, welches den Schritt905 der Prozessorauswahl der9 ausführlicher beschreibt. - AUSFÜHRUNGSFORMEN DER ERFINDUNG
- Die vorliegende Erfindung ist ein Multiprozessoreinplanungssystem, welches mit Bezug auf Echtzeit-Anwendungen beschrieben wird. In der folgenden Beschreibung werden zahlreiche spezifische Einzelheiten dargelegt, um eine gründlichere Beschreibung der vorliegenden Erfindung bereitzustellen. Es wird jedoch Durchschnittsfachleuten offenkundig, dass die vorliegende Erfindung ohne diese spezifischen Einzelheiten betrieben werden kann. In anderen Fällen wurden wohlbekannte Merkmale nicht ausführlich beschrieben, um die vorliegende Erfindung nicht zu verschleiern.
- Bei einem Multiprozessorsystem gibt es grundsätzlich zwei Entscheidungen zur Zuweisung von Betriebsmitteln, welche getroffen werden. Eine ist, wo Code und Daten im physikalischen Speicher lokalisiert werden sollen, und die andere ist, auf welchem Prozessor jeder Prozess ausgeführt werden soll – eine Zuweisungsentscheidung oder Prozessorverwaltung. Diese Entscheidungen sind in einem Multiprozessorsystem eine Herausforderung, und eine Optimierung der Prozessorverwaltung ist in einem Multiprozessorsystem wichtig.
- Eine Zuweisungsentscheidung oder eine Job- und Prozessoreinplanung umfasst mehrstufige Einplanungsverfahrensweisen: Einplanung auf hoher Ebene oder Job-Einplanung, welche festlegt, welche Jobs für ein aktives Konkurrieren um Systembetriebsmittel zugelassen werden sollen; Einplanung auf mittlerer Ebene, welche festlegt, welche Prozesse für ein Konkurrieren um Systembetriebsmittel zugelassen werden sollen; und Einplanung auf unterer Ebene, welche von einem Taskzuweiser durchgeführt wird. Ein Taskzuweiser legt fest, welcher bereite Prozess welchem Prozessor zugeordnet wird, wenn er nächstes Mal lauffähig wird.
- Es wird ein vollständig präemptives Einplanungsschema bei der bevorzugten Ausführungsform der vorliegenden Erfindung verwendet, bei welcher ein Prozessor von einem Prozess abgezogen werden kann, welchen er gegenwärtig ausführt, um einen anderen Prozess höherer Priorität zur Ausführung kommen zu lassen. Obwohl eine Unterbrechung zusätzlichen Aufwand wegen der Programmumschaltung einschließt, ist sie bei Systemen nützlich, bei welchen Prozesse hoher Priorität schnelle Aufmerksamkeit erfordern. Bei Echtzeit-Systemen kann beispielsweise das Überschreiten eines festen Termins fatale Folgen herbeiführen und folglich ist eine präemptive Einplanung zum Garantieren annehmbarer Dienstzeiten notwendig.
- Bei der vorliegenden Erfindung führt ein Prozesseinplaner oder Taskzuweiser seine Funktion jedes Mal durch, wenn ein laufender Prozess blockiert oder unterbrochen wird. Sein Zweck ist es, den nächsten laufenden Prozess aus dem Satz bereiter Warteschlangen auszuwählen. Der Taskzuweiser befindet sich im Betriebssystemkern und überwacht die bereiten Warteschlangen und Bearbeitungsanforderungen zum Laden von Anwendungen. Dies schließt ein Erzeugen all der Tasks und Threads der Anwendung, das Reservieren von Speicher und das Laden des Codes und der Daten in den Speicher ein. Alle Betriebsmittel werden reserviert, bevor eine Anwendung als erfolgreich geladen und zum Ausführen bereit betrachtet wird. Folglich sollte ein Taskzuweiser ziemlich effizient sein, um zusätzlichen Betriebssystemaufwand zu minimieren.
- Bei einem Multiprozessorsystem muss eine Echtzeit-Prioritätseinplanung eine Bedingung erfüllen: für jeden Prozessor gibt es in keiner Warteschlange einen Thread, welcher auf diesem Prozessor ausgeführt werden kann. Vom Standpunkt des Durchsatzes ist es am besten, dass jeder Prozessor seine eigene Taskzuweisungswarteschlange aufweist und folglich die Sperrkonkurrenz zwischen Prozessoren minimiert wird.
- Diese Ausführungsform der vorliegenden Erfindung schlägt deshalb ein Taskzuweisermodell vor, welches eine separate globale Taskzuweisungswarteschlange für ungebundene Echtzeit-Threads höherer Priorität zusätzlich zu einer eigenen Taskzuweisungswarteschlange der Prozessoren unterhält. Statt zu garantieren, dass der Taskzuweiser immer korrekte Entscheidungen trifft, verwendet diese Ausführungsform der vorliegenden Erfindung weiterhin ein Auswahl- und Verifizierungsschema. Beide dieser Merkmale erlauben dieser Ausführungsform der vorliegendem Erfindung, die Sperrkonkurrenz zu minimieren, während sie sicher stellen, dass Threads hoher Priorität so schnell wie möglich zugewiesen werden. Dies wird durch eine Synchronisation zwischen den Operationen der Zuweisung eines Threads und des Lauffähigmachens eines Threads implementiert. Das Taskzuweisermodell dieser Ausführungsform der vorliegenden Erfindung wird unter SunOS Solaris 2.5 implementiert.
- Die vorliegende Erfindung kann auf einem Universalcomputer, wie beispielsweise in
3 illustriert, implementiert werden. Eine Tastatur310 und eine Maus311 sind an einen bidirektionalen Systembus318 angeschlossen. Die Tastatur und die Maus dienen zum Einbringen einer Benutzereingabe in das Computersystem und zum Kommunizieren dieser Benutzereingabe an eine CPU313 . Das Computersystem der3 umfasst auch einen Videospeicher314 , einen Hauptspeicher315 und einen Massenspeicher312 , welche alle zusammen mit einer Tastatur310 , einer Maus311 und einer CPU313 an einen bidirektionalen Systembus318 angeschlossen sind. Der Massenspeicher312 kann sowohl feste als auch austauschbare Medien, wie beispielsweise magnetische, optische oder magnetooptische Speichersysteme oder jede andere verfügbare Massenspeichertechnik, umfassen. Bus318 kann beispielsweise 32 Adressleitungen zum Adressieren des Videospeichers314 oder des Hauptspeichers315 enthalten. Der System-Bus318 umfasst auch beispielsweise einen 32-Bit-DATEN-Bus zum Übermitteln von DATEN zwischen und unter den Komponenten, wie beispielsweise der CPU313 , dem Hauptspeicher315 , dem Videospeicher314 und dem Massenspeicher312 . Ersatzweise können Multiplex-DATEN-/Adressleitungen statt separater DATEN- und Adressleitungen verwendet werden. - Hauptspeicher
315 besteht aus dynamischem Schreib-/Lesespeicher (DRAM). Videospeicher314 ist ein Video-Schreib-/Lesespeicher mit zwei Ports. Ein Port des Videospeichers314 ist an einen Videoverstärker316 angeschlossen. Der Videoverstärker316 wird verwendet, um den Kathodenstrahlröhren-(CRT)-Rastermonitor317 zu betreiben. Videoverstärker316 ist in der Technik wohlbekannt und kann durch jedes geeignete Mittel implementiert werden. Dieser Schaltkomplex wandelt Pixel-DATEN, welche im Videospeicher314 gespeichert sind, in ein Rastersignal um, welches zur Verwendung durch Monitor317 geeignet ist. Monitor317 ist ein Monitortyp, welcher zum Anzeigen von grafischen Bildern geeignet ist. - Das oben beschriebene Computersystem ist nur beispielhaft. Die vorliegende Erfindung kann in jedem Computersystem- oder Programmier- oder Verarbeitungsumgebungstyp implementiert werden.
-
4(A) zeigt ein Warteschlangensystem mit mehreren Taskzuweisern gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung. Unter Bezugnahme auf4(A) umfasst das Warteschlangensystem mit mehreren Taskzuweisern separate Taskzuweiserwarteschlangen401 ,402 ,...,403 für Prozessoren 1, 2,..., N und zusätzlich eine globale Echtzeit-Warteschlange hoher Priorität404 , welche verwendet wird, um Echtzeit-Threads hoher Priorität zu halten. Jede Taskzuweisungswarteschlange weist ihre eigene Einplanungssperre auf, welche ihr zugeordnet ist, um alle Einplanungsoperationen so zu schützen, dass jeder Prozessor, welcher versucht einen Thread aus einer Warteschlange zuzuweisen, eine Sperre für diese Warteschlange erhalten muss, bevor er den Thread aus der Warteschlange übernehmen kann. Folglich ist eine Sperrkonkurrenz bei der vorliegenden Erfindung mit mehreren Einplanungssperren für mehrere Taskzuweisungswarteschlangen reduziert, im Gegensatz zu Einplanern nach dem Stand der Technik, wobei eine einzelne Einplanungssperre für eine einzelne Taskzuweisungswarteschlange für alle Prozessoren verwendet wird. - Bei der bevorzugten Ausführungsform der
4(A) verwendet ein Taskzuweiser eine Matrix von Taskzuweisungswarteschlangen, welche durch eine Taskzuweisungspriorität indiziert sind. Wenn ein Thread lauffähig gemacht wird, wird er auch in einer Taskzuweisungswarteschlange entsprechend seiner Taskzuweisungspriorität typischerweise am Ende platziert. Es können jedoch andere Schemata für eine Warteschlangenbildung statt der FIFO-Thread-Warteschlangenbildung verwendet werden. Beispielsweise kann ein LIFO- (Last In First Out, Kellerprinzip), ein SJF- (Shortest Job First, Prinzip des kleinsten Jobs), ein SRT- (Shortest Remaining Time, Prinzip der kürzesten Frist) oder ein anderer fortschrittlicher Mechanismus zur Warteschlangenbildung in Abhängigkeit von den Einplanungsanforderungen der Echtzeit-Anwendung verwendet werden. -
4(B) zeigt eine Struktur einer Taskzuweisungswarteschlange ausführlicher unter Verwendung einer Taskzuweisungswarteschlange für Prozessor 1 der4(A) . In4(B) sind die Threads 1, 2 und 3 mit irgendeinem Prioritätswert in die Taskzuweisungswarteschlange eingereiht. Thread 1 befindet sich ganz oben in der Warteschlange, und falls ein FIFO-System angewendet wird, wäre er der erste Thread in dieser Prioritätskategorie, welcher aus der Warteschlange zur Ausführung zugewiesen wird. Die Threads in4(B) weisen auch Merkmale der Prozessoraffinität auf, welche ihnen zugeordnet sind. - Eine Prozessoraffinität wird verwendet, um festzustellen, auf welchen Prozessoren ein Thread ausgeführt werden kann. Die meisten Threads sind auf allen Prozessoren ausführbar und werden dementsprechend so gekennzeichnet. Es gibt jedoch Threads, welche nur auf einem bestimmten Prozessor und auf keinem anderen Prozessor ausführbar sind. Diesem Thread wird dann eine Prozessoraffinität für diesen bestimmten bezeichneten Prozessor gegeben. Wenn ein Thread eine Affinität für einen bestimmten Prozessor aufweist, kann er nicht von anderen Prozessoren entwendet oder auf sie abgezogen werden. Der Thread 2 in
4(B) weist beispielsweise eine Prozessoraffinität für Prozessor 1 auf und ist nur auf Prozessor 1 ausführbar. Folglich kann ein Thread, welcher nur auf einem Prozessor lauffähig ist, d. h. ein gebundener Thread, nur in der Taskzuweisungswarteschlange seines gebundenen Prozessors erscheinen und wird nur durch diesen Prozessor zugewiesen. - Damit ein Prozessor in der Lage ist, einen Thread anderen Prozessoren zu entwenden, muss der Thread auf dem entwendenden Prozessor lauffähig sein. Unter Bezugnahme beispielsweise auf
4(B) kennen die Threads 1 und 3 entwendet, aus der Warteschlange übernommen und durch andere Prozessoren als Prozessor 1 ausgeführt werden. -
5 zeigt eine Konfiguration des Mutiprozessorsystems gemäß einer bevorzugten Ausführungsform der vorliegenden Erfindung. Jeder Prozessor 1, 2,..., N weist seinen eigenen Einplaner und seine eigene Taskzuweisungswarteschlange auf, wie in5 gezeigt. Beispielsweise sind der Einplaner505 und die Taskzuweisungswarteschlange509 über einen Bus an Prozessor 1 angeschlossen. Einplaner oder Taskzuweiser legen fest, wann und welche Threads zur Ausführung auf den Systemprozessoren zugewiesen werden sollen. Die Einplaner 1, 2,..., N und damit die Prozessoren 1, 2,...,, N sind über einen Bus an eine globale Echtzeit-Warteschlange hoher Priorität501 und einen gemeinsam genutzten Speicher503 angeschlossen. Threads können unter Verwendung von Synchronisationsobjekten interagieren, welche gemeinsam von allen Prozessoren genutzt werden. - Jedem Prozessor in
5 ist ein Satz von Einplanungsvariablen zugeordnet, welche für verschiedene Zwecke verwendet werden. Beispielsweise registrieren die Variablen cpu_runrun und cpu_kprunrun Anforderungen zur Unterbrechung des aktuellen Threads und werden verwendet, um Einplanungsentscheidungen zu treffen. Andere Variablen schließen cpu_dispthread und cpu_thread ein. Die Variable cpu_thread betrifft den Thread, welcher gegenwärtig auf einem Prozessor ausgeführt wird. Die Variable cpu_dispthread wird zur Kommunikation mit anderen Prozessoren verwendet und registriert die Identität des Threads, welcher zuletzt zur Zuweisung an den Prozessor ausgewählt wurde. - Die Variable cpu_runrun oder cpu_kprunrun wird durch andere Prozessoren für einen Prozessor eingestellt, wenn sie einen neuen Thread in die Warteschlange des Prozessors setzen und feststellen, dass der Prozessor gerade einen Thread mit niedrigerer Priorität als der neue Thread ausführt, welcher gerade in die Warteschlange des Prozessors gesetzt wurde. Die Variable cpu_kprunrun weist eine höhere Priorität als die Variable cpu_runrun auf. Wenn die Variable cpu_runrun oder cpu_kprunrun eingestellt ist, muss der Prozessor eine Einplanungsentscheidung treffen, den aktuellen Thread zu unterbrechen und einen neuen Thread höherer Priorität zu bedienen.
- Jeder Prozessor in
5 ist in der Lage, einen Thread in jede der Warteschlangen im System. zur Ausführung zu setzen. Beispielsweise kann Prozessor1 einen neuen Thread in seine eigene Warteschlange, in die globale Echtzeit-Warteschlange hoher Priorität oder in Warteschlangen anderer Prozessoren setzen, außer der neue Thread weist ein Merkmal einer bestimmten Prozessoraffinität auf. - Obwohl
5 Multiprozessoren zeigt, welche über einen einzelnen Bus verbunden sind, sind selbstverständlich andere alternative Architekturen für eine Ausführungsform der vorliegenden Erfindung möglich. Beispielsweise kann eine Multibus-Multiprozessororganisation oder ein Crossbar-Schaltsystem als Verbindungsnetzwerk verwendet werden, um das Leistungsvermögen des Multiprozessorsystems zu verbessern. - Um einen Thread einem Prozessor zuzuweisen oder einzuplanen, muss der Prozessor einen Thread zum Ausführen auffinden.
6 zeigt ein Ablaufdiagramm, welches einen Taskzuweiser, welcher einen Thread zum Ausführen auf einem Prozessor einplant, unter Verwendung eines Auswahl- und Verifizierungsschemas beschreibt. - Unter Bezugnahme auf
6 beginnt ein Prozessor, welcher für einen nächsten Thread bereit ist, im Schritt601 einen Thread zum Ausführen auszuwählen, indem er die Echtzeit-Warteschlange hoher Priorität prüft, um zu sehen, ob sie irgendwelche Einträge aufweist.7 zeigt ein Ablaufdiagramm, welches den Thread-Auswahlprozess des Schritts601 ausführlicher beschreibt. - Die Untersuchung der Prioritäten in Warteschlangen schließt ein Prüfen einer lokalen Variable ein, welche jedem Prozessor zugeordnet ist, und erfordert keine Sperren. Beispielsweise kann eine Prioritätsvariable disp_maxrunpri verwendet werden, um eine maximale Prioritätsebene in einer Warteschlange zu bezeichnen. Dann kann Variable disp_maxrunpri sowohl in der Taskzuweisungswarteschlange des Prozessors als auch in der Echtzeit-Warteschlange unter Verwendung irgendeines geeigneten Synchronisationsalgorithmus, wie beispielsweise eines Dekker-Algorithmus, geprüft werden, um Fehlkommunikation zu vermeiden. Es kann jedoch jeder andere geeignete Synchronisationsalgorithmus in alternativen Ausführungsformen der vorliegenden Erfindung verwendet werden. Da die zu untersuchenden Prioritätsvariablen unteilbare Variablen sind, welche in jeder Taskzuweisungswarteschlange unterhalten werden, wird jeder Einplanungsfehler, welcher durch ein Auswählen einer falschen Warteschlange bewirkt wird, in einem Verifikationsschritt abgefangen. Es ist jedoch eine Einplanungssperre erforderlich, um einen Thread aus einer ausgewählten Warteschlange zu übernehmen.
- Unter Bezugnahme nun auf
7 erlangt der Taskzuweiser des Prozessors, falls im Entscheidungsblock701 die Echtzeit-Warteschlange einen Thread höherer Priorität als seine eigene Taskzuweisungswarteschlange aufweist, eine Sperre für die Echtzeit-Warteschlange und übernimmt im Schritt702 einen Thread höchster Priorität aus der Echtzeit-Warteschlange, wie beispielsweise aus Warteschlange404 der4 , und fährt fort, den Thread auszuführen. - Prozessoren, welche verfügbar werden, einen nächsten Thread zu übernehmen, sperren zuerst die Echtzeit-Warteschlange, bevor sie ihre eigenen Warteschlangen prüfen, wodurch sie Threads in der Echtzeit-Warteschlange höherer Priorität vor den Threads in ihren eigenen Warteschlangen bedienen, um Echtzeit-Threads den schnellstmöglichen Dienst bereitzustellen. Falls im Entscheidungsblock
701 festgestellt wird, dass die Echtzeit-Warteschlange keine verfügbaren Threads höherer Priorität aufweist, fährt der Prozessor mit Schritt703 fort, um seine eigene Taskzuweisungswarteschlange auf einen lauffähigen Thread hin zu prüfen. Wenn seine eigene Warteschlange nicht leer ist, dann fährt der Prozessor mit Schritt704 fort, um eine Sperre für seine eigene Warteschlange zu erlangen, und übernimmt einen Thread höchster Priorität aus seiner eigenen Warteschlange. - Wenn die eigene Taskzuweisungswarteschlange des Prozessors leer ist, dann fährt der Prozessor mit Schritt
705 fort, wo er Taskzuweiserwarteschlangen anderer Prozessoren prüft, um einen lauffähigen Thread aufzufinden. Falls es einen lauffähigen Thread mit keiner bestimmten Prozessoraffinität in irgendeiner anderen Taskzuweisungswarteschlange gibt, erlangt der Prozessor eine Einplanungssperre für diese Taskzuweisungswarteschlange und fährt in Schritt706 fort, den Thread vom anderen Prozessor zu entwenden. - Falls der Prozessor im Entscheidungsblock
705 keine nichtleere Taskzuweisungswarteschlange oder keine lauffähigen Threads in ihnen auffinden kann, fährt der Prozessor mit Schritt707 fort, um einen Leerlauf-Thread auszuwählen, wodurch der Thread-Auswahlprozess vervollständigt wird. Ein Leerlauf-Thread ist ein spezieller Thread, welcher eine niedrigere Priorität aufweist als jede Taskzuweisungspriorität und nie in der Taskzuweisungswarteschlange erscheint. Ein Leerlauf-Thread wird immer zur Ausführung ausgewählt, wenn kein anderer Thread lauffähig ist, und schaltet immer um, wenn ein anderer Thread lauffähig wird. - Folglich kann ein Thread von einem Prozessor aus der Warteschlange hoher Priorität, aus seiner eigenen Taskzuweisungswarteschlange und aus Taskzuweisungswarteschlangen anderer Prozessoren im System zur Ausführung ausgewählt werden. Durch ein Prüfen zuerst der Echtzeit-Warteschlange hoher Priorität, wie beispielsweise
404 , vor einem Prüfen seiner eigenen Warteschlange oder anderen Taskzuweisungswarteschlangen, gibt ein Prozessor jedoch der Echtzeit-Warteschlange eine höhere Priorität als anderen Taskzuweisungswarteschlangen. Diese globale Prioritätsauflistung wird in8 illustriert. - Wie in
8 gezeigt, wird den Timesharing-Threads die niedrigste Priorität bei einer Job-Einplanung oder -Zuweisung gegeben. Die Timesharing-Threads werden durch ein Zeitscheibenverfahren unterstützt und dynamisch mit ein paar hundert Millisekunden pro Zeitscheibe eingeplant. Der Timesharing-Einplaner schaltet das Programm in einer Round-Robin-Weise oft genug um, um jedem Thread eine gleiche Chance zum Ausführen zu geben. Die System-Threads mit höherer Priorität als die Timesharing-Threads umfassen spezielle System-Threads und Unterbrechungs-Threads. Unterbrechungs-Threads wird immer die höchste Priorität im System gegeben. - Echtzeit-Threads liegen zwischen den Unterbrechungs-Threads und den System-Threads in
8 . Echtzeit-Threads werden strikt auf der Grundlage ihrer Priorität und der ihnen zugeordneten Zeitmenge eingeplant. Eine Zeitmenge oder Zeitscheibe wird einem Thread zugeordnet, um den Betrag der Prozessorzeit zu begrenzen, welche zum Ausführen des Threads zugelassen wird. Falls ein Thread nicht beendet wird, bevor seine Zeitmenge abläuft, wird der Thread unterbrochen, und der nächste wartende Thread höchster Priorität wird zum Ausführen zugewiesen. Beispielsweise wird ein Echtzeit-Thread mit unendlicher Zeitmenge ausgeführt, bis er beendet, blockiert oder unterbrochen wird. - Die Kriterien zum Festlegen, welche Prioritätsebenen als Trennlinien für verschiedene Prioritätsbereiche in
8 verwendet werden können, und damit welcher Prioritäts-Thread sich qualifiziert, beispielsweise in der globalen Echtzeit-Warteschlange zu sein, können durch Betrachten einer Anzahl von Faktoren eingestellt werden. Beispielsweise werden Threads in der Echtzeit-Warteschlange auf Ansprechbarkeit optimiert, während Threads, welche sich nicht in der Echtzeit-Warteschlange befinden, auf Durchsatz optimiert werden, wobei die Anzahl von pro Zeiteinheit ausgeführten Befehlen maximiert wird. - Unter Bezugnahme wieder auf
6 fährt der Prozessor nach Auswählen eines Kandidaten-Threads zum Ausführen in Schritt601 mit Schritt602 fort, wo er die Einplanungssperre, welche er im Schritt601 erlangt hat, nach Rundsenden einer vorläufigen Benachrichtigung an andere Prozessoren freigibt, dass er den ausgewählten Kandidaten-Thread ausführen wird, durch Einstellen lokaler Prozessorvariablen, beispielsweise durch Einstellen einer Variable cpu_dispthread, um die aktuellste Thread-Priorität zu bezeichnen. - Im Schritt
603 löscht der Prozessor alle Benachrichtigungen, welche dieser Prozessor erneut einplanen soll, beispielsweise durch Löschen der Variablen cpu-runrun und cpu_kprunrun. Der Prozessor kann jedoch noch nicht bestätigen, dass der ausgewählte Kandidaten-Thread der lauffähige Thread höchster Priorität ist, welchen er übernehmen kann, da es eine Möglichkeit gibt, dass ein neuer Thread höherer Priorität in der globalen Echtzeit-Warteschlange oder in seiner eigenen Warteschlange durch irgendwelche anderen Prozessoren platziert worden sein könnte, während der Prozessor sich im Thread-Auswahlprozess befand. Dies kann die oben diskutierten Wettlaufsituationen im Hintergrund erzeugen, außer der Einplaner kann verifizieren, dass der ausgewählte Kandidaten-Thread die beste Wahl ist. - Folglich wird im Schritt
604 eine Verifizierung durchgeführt, ob der ausgewählte Thread eine beste mögliche Auswahl ist. Dies erfordert ein Zurückgehen zur Echtzeit-Warteschlange hoher Priorität und zu seiner eigenen Warteschlange und ein erneutes Prüfen von ihnen, um zu sehen, ob es einen neu platzierten Thread höherer Priorität in der Echtzeit-Warteschlange hoher Priorität oder in seiner eigenen Warteschlange gibt. Falls der ausgewählte Kandidaten-Thread eine höhere Priorität aufweist, als jeder andere Thread in den beiden Warteschlangen, fährt der Prozessor dann mit Schritt605 fort, um den ausgewählten Kandidaten-Thread auszuführen. - Falls jedoch ein neuer Thread höherer Priorität in den beiden Warteschlangen aufgefunden wird, setzt der auswählende Prozessor den ausgewählten Kandidaten-Thread in irgendeine Warteschlange, wahrscheinlich in die Warteschlange, aus welcher der Thread übernommen wurde, in Abhängigkeit von einem Algorithmus zur Warteschlangenplatzierung zurück, und geht zum Schritt
601 zurück, um den Thread-Auswahlprozess erneut zu beginnen. - Das Auswahl- und Verifizierungsschema dieser Ausführungsform der vorliegenden Erfindung garantiert folglich, dass der schließlich ausgewählte Thread tatsächlich die höchste Priorität aufweisen wird, welche der Prozessor zum Ausführen auswählen kann. Auch die Wettlaufprobleme, wie beispielsweise beim Stand der Technik diskutiert, werden nun verhindert, und Threads höherer Priorität im System wird ein Echtzeit-Dienst mit minimaler Zuweisungslatenz garantiert.
-
9 zeigt ein Ablaufdiagramm, welches einen Prozessor beschreibt, welcher einen Thread lauffähig macht. Im Schritt901 wird ein Prozessor für den Thread ausgewählt, und beim Entscheidungsblock901 wird eine Festlegung getroffen, ob der Thread gebunden ist. Falls der Thread gebunden ist, wird der Thread im Schritt902 in die Warteschlange des ausgewählten Prozessors gesetzt. Falls der Thread nicht gebunden ist, wird im Entscheidungsblock903 eine Festlegung getroffen, ob der Thread eine Echtzeiteigenschaft aufweist. Echtzeit-Threads sind Threads, welche eine ausreichende Priorität aufweisen, dass eine Ansprechbarkeit des Systems beim Zuweisen des Threads wichtiger als der Durchsatz ist. - Es kann ein vorbestimmter Schwellenwert als ein Kriterium zum Unterscheiden von Echtzeit-Threads verwendet werden. Beispielsweise wird die Variable kppreemptpri bei der bevorzugten Ausführungsform als der Schwellenwert zum Feststellen von Echtzeit-Threads verwendet. Die Variable kppreemptpri kann in Abhängigkeit von Systemanwendungen auf jeden geeigneten Wert eingestellt werden. Falls folglich der Thread ungebunden ist und seine Priorität über kppreemptpri liegt, wird der Thread im Schritt
904 in die Echtzeit-Warteschlange hoher Priorität gesetzt. Im Schritt905 wird ein Prozessor ausgewählt, um den Thread einzuplanen, bevor mit Schritt907 fortgefahren wird. Falls im Schritt903 festgestellt wird, dass der Thread eine Priorität unter kppreemptpri aufweist, fährt dann der Prozessor mit Schritt906 fort, um den Thread auf den Prozessor zu setzen, auf welchem er zuletzt ausgeführt wurde, und fährt mit Schritt907 fort. -
10 illustriert den Prozessorauswahlschritt905 der9 ausführlicher. Im Schritt1001 wird ein „bester Prozessor" als der Prozessor eingestellt, auf welchem der Thread zuletzt ausgeführt wurde. Dann stellt jeder Prozessor im System fest, ob sein aktueller Thread eine geringere Priorität besitzt als der Thread, welcher im Schritt1002 eingefügt wird. - Falls sein aktueller Thread eine höhere Priorität besitzt, fährt er dann mit Schritt
1005 fort. Andernfalls wird eine Festlegung im Schritt1003 getroffen, ob der aktuelle Thread des Prozessors eine geringere Priorität besitzt als der Thread auf dem „besten Prozessor". Falls der aktuelle Thread eine geringere Priorität besitzt, wird dann im Schritt1004 der „beste Prozessor" gleich dem aktuellen Prozessor eingestellt. Im Schritt1005 wird der „beste Prozessor" als der Zielprozessor ausgewählt, um den eingefügten Thread einzuplanen. - Unter Bezugnahme wieder auf
9 wird im Entscheidungsblock907 , nachdem ein Zielprozessor ausgewählt wurde, um den Thread auszuführen, eine Festlegung getroffen, ob der Thread eine höhere Priorität aufweist als der letzte Thread, welcher dem Prozessor anvertraut war. Falls der Thread eine höhere Priorität aufweist, wird der Prozessor im Schritt908 durch Einstellen irgendwelcher lokaler Variablen, beispielsweise der Variablen cpu_runrun und cpu_kprunrun, benachrichtigt. Falls der Thread im Schritt907 keine höhere Priorität aufweist, fährt der Einplanungsprozessor mit Schritt909 fort. - Es versteht sich, dass bestimmte Ausführungsformen, welche hier beschrieben sind, die vorliegende Erfindung dadurch nicht einschränken sollen. Diese Erfindung kann in Verbindung mit jedem Multiprozessorsystem betrieben werden, welches ein präemptives Prioritätseinplanungssystem verwendet.
- Folglich wurde ein Prozesseinplaner oder ein Taskzuweiser für ein Multiprozessorsystem, welches für Echtzeit-Anwendungen geeignet ist, beschrieben.
Claims (20)
- Verfahren zur Einplanung eines Threads in einem Multiprozessorsystem auf der Grundlage einer Prioritätsvoreinplanung, das Multiprozessorsystem mehrere Prozessoren umfassend; gekennzeichnet durch: Auswählen eines Threads als ein auszuführender Kandidaten-Thread aus einer von mehreren lokalen Warteschlangen und aus einer globalen Warteschlange, wobei die mehreren lokalen Taskzuweisungswarteschlangen zum Speichern von Threads einzuplanen sind, jede der mehreren lokalen Taskzuweisungswarteschlangen mit einem der mehreren Prozessoren verbunden ist, die globale Warteschlange zum Speichern von Threads einzuplanen ist, die globale Warteschlange durch jeden der mehreren Prozessoren zugänglich ist (
601 ); Benachrichtigen von Prozessoren über den Kandidaten-Thread (602 ); Prüfen, ob ein Thread mit höherer Priorität in seiner lokalen Warteschlange und in der globalen Warteschlange verfügbar ist (701 ); Vorbelegen des ersten ausgewählten Threads und Auswählen des Threads mit höherer Priorität als der auszuführende Kandidaten-Thread, wenn es einen Thread mit höherer Priorität gibt (702 ,704 ,706 ,707 ); Ausführen des Kandidaten-Threads. - Verfahren nach Anspruch 1, wobei der Schritt des Auswählens eines Threads als ein auszuführender Kandidaten-Thread ferner den Schritt des Auswählens des Threads mit höchster Priorität aus der globalen Warteschlange umfasst.
- Verfahren nach Anspruch 2, wobei der Schritt des Auswählens eines Threads als ein auszuführender Kandidaten-Thread ferner den Schritt des Auswählens des Threads mit höchster Priorität aus einer der mehreren lokalen Taskzuweisungswarteschlangen umfasst, wenn es keinen lauffähigen Thread in der globalen Warteschlange gibt.
- Verfahren nach Anspruch 3, wobei der Schritt des Auswählens eines Threads als ein auszuführender Kandidaten-Thread ferner den Schritt des Auswählens eines Threads aus einer lokalen Taskzuweisungswarteschlange eines anderen Prozessors umfasst, wenn es keinen lauffähigen Thread in der lokalen Taskzuweisungswarteschlange des Prozessors gibt.
- Verfahren nach Anspruch 4, wobei der Schritt des Auswählens eines Threads als ein auszuführender Kandidaten-Thread ferner den Schritt des Auswählens eines ungenutzten Threads umfasst, wenn es keinen lauffähigen Thread in der lokalen Taskzuweisungswarteschlange eines anderen Prozessors gibt.
- Verfahren nach Anspruch 1, ferner den folgenden Schritt umfassend: Platzieren eines Threads in einer lokalen Taskzuweisungswarteschlange eines Prozessors, wenn der Thread an den Prozessor gebunden ist (
902 ). - Verfahren nach Anspruch 6, ferner den Schritt des Platzierens des Threads in der globalen Warteschlange umfassend, wenn der Thread eine Echtzeiteigenschaft aufweist.
- Verfahren nach Anspruch 7, ferner die folgenden Schritte umfassend: Identifizieren eines letzten Prozessors, auf welchem der Thread gelaufen ist (
901 ); Platzieren des Threads in der Taskzuweisungswarteschlange des letzten Prozessors, wenn der Thread keine Echtzeiteigenschaft aufweist (906 ). - Verfahren nach Anspruch 1, wobei der Schritt des Benachrichtigen von Prozessoren über den Kandidaten-Thread Folgendes umfasst: Verändern eines Speicherregisterwerts, wobei das Register durch die mehreren Prozessoren zugänglich ist.
- Multiprozessoreinplanungssystem auf der Grundlage einer Prioritätsvoreinplanung, das Multiprozessoreinplanungssystem umfassend: mehrere Prozessoren (
507 ,513 ,519 ); mehrere Einplaner, wobei jeder der mehreren Prozessoren mit einem der mehreren Einplaner verbunden ist (505 ,511 ,517 ); mehrere lokale Taskzuweisungswarteschlangen, wobei jeder der mehreren Prozessoren mit einer der mehreren lokalen Taskzuweisungswarteschlangen verbunden ist (509 ,515 ,521 ); gekennzeichnet durch: die mehreren Einplaner, welche mit einem Kommunikationsmedium verbunden sind (525 ); eine globale Taskzuweisungswarteschlange, welche mit dem Kommunikationsmedium verbunden ist (501 ); einen gemeinsam genutzten Speicher, welcher mit dem Kommunikationsmedium verbunden ist (503 ); Mittel zum Auswählen eines Threads als ein auszuführender Kandidaten-Thread aus einer von mehreren lokalen Warteschlangen und aus einer globalen Warteschlange, wobei die mehreren lokalen Taskzuweisungswarteschlangen zum Speichern von Threads einzuplanen sind, jede der mehreren lokalen Taskzuweisungswarteschlangen mit einem der mehreren Prozessoren verbunden ist, die globale Warteschlange zum Speichern von Threads einzuplanen ist, die globale Warteschlange durch jeden der mehreren Prozessoren zugänglich ist (601 ); Mittel zum Benachrichtigen von Prozessoren über den Kandidaten-Thread (602 ); Mittel zum Prüfen, ob ein Thread mit höherer Priorität in seiner lokalen Warteschlange und in der globalen Warteschlange verfügbar ist (701 ); Mittel zum Vorbelegen des ersten ausgewählten Threads und Auswählen des Threads mit höherer Priorität als der auszuführende Kandidaten-Thread, wenn es einen Thread mit höherer Priorität gibt (702 ,704 ,706 ,707 ); Mittel zum Ausführen des Kandidaten-Threads. - Multiprozessoreinplanungssystem nach Anspruch 10, wobei die globale Taskzuweisungswarteschlange Echtzeit-Threads speichert.
- Multiprozessoreinplanungssystem nach Anspruch 11, wobei der gemeinsam genutzte Speicher ein Register umfasst, welches durch die mehreren Einplaner zugänglich ist.
- Fertigungsgegenstand umfassend: ein computertaugliches Medium, welches darin computerlesbaren Programmcode zum Einplanen eines Threads in einem Multiprozessorsystem auf der Grundlage einer Prioritätsvoreinplanung enthält, das Multiprozessorsystem mehrere Prozessoren umfassend; gekennzeichnet durch: computerlesbaren Code, welcher konfiguriert ist, um zu bewirken, dass einer der mehreren Prozessoren einen auszuführenden Kandidaten-Thread unter Verwendung eines Thread-Auswahl- und Verifizierungsverfahrens auswählt, die folgenden Schritte umfassend: Auswählen eines Threads als ein auszuführender Kandidaten-Thread aus einer von mehreren lokalen Taskzuweisungswarteschlangen und aus einer globalen Warteschlange, wobei die mehreren lokalen Taskzuweisungswarteschlangen zum Speichern von Threads einzuplanen sind, jede der mehreren lokalen Taskzuweisungswarteschlangen mit einem der mehreren Prozessoren verbunden ist, die globale Warteschlange zum Speichern von Threads einzuplanen ist, die globale Warteschlange durch jeden der mehreren Prozessoren zugänglich ist (
601 ); Benachrichtigen von Prozessoren über den Kandidaten-Thread (602 ); Prüfen, ob ein Thread mit höherer Priorität in seiner lokalen Warteschlange und in der globalen Warteschlange verfügbar ist (701 ); Vorbelegen des ersten ausgewählten Threads und Auswählen des Threads mit höherer Priorität als der auszuführende Kandidaten-Thread, wenn es einen Thread mit höherer Priorität gibt (702 ,704 ,706 ,707 ); computerlesbaren Code, welcher konfiguriert ist, um zu bewirken, dass der eine der mehreren Prozessoren den ausgewählten Kandidaten-Thread ausführt. - Fertigungsgegenstand nach Anspruch 13, wobei der computerlesbare Code, welcher konfiguriert ist, um zu bewirken, dass einer der mehreren Prozessoren einen Kandidaten-Thread auswählt, computerlesbaren Code umfasst, welcher konfiguriert ist, um zu bewirken, dass einer der mehreren Prozessoren den Thread mit höchster Priorität aus der globalen Warteschlange auswählt.
- Fertigungsgegenstand nach Anspruch 14, wobei der computerlesbare Code, welcher konfiguriert ist, um zu bewirken, dass einer der mehreren Prozessoren einen Kandidaten-Thread auswählt, computerlesbaren Code umfasst, welcher konfiguriert ist, um zu bewirken, dass einer der mehreren Prozessoren den Thread mit höchster Priorität aus einer der mehreren lokalen Taskzuweisungswarteschlangen auswählt, wenn es keinen lauffähigen Thread in der globalen Warteschlange gibt.
- Fertigungsgegenstand nach Anspruch 15, wobei der computerlesbare Code, welcher konfiguriert ist, um zu bewirken, dass einer der mehreren Prozessoren einen Kandidaten-Thread auswählt, computerlesbaren Code umfasst, welcher konfiguriert ist, um zu bewirken, dass einer der mehreren Prozessoren einen Thread aus einer lokalen Taskzuweisungswarteschlange eines anderen Prozessors auswählt, wenn es keinen lauffähigen Thread in der eigenen lokalen Taskzuweisungswarteschlange des Prozessors gibt.
- Fertigungsgegenstand nach Anspruch 13, ferner umfassend: computerlesbaren Code, welcher konfiguriert ist, um zu bewirken, dass einer der mehreren Prozessoren eine der mehreren lokalen Taskzuweisungswarteschlangen auswählt, um einen Thread darin zu platzieren (
901 ); computerlesbaren Code, welcher konfiguriert ist, um zu bewirken, dass einer der mehreren Prozessoren den Thread in der lokalen Taskzuweisungswarteschlange des Prozessors platziert, wenn der Thread gebunden ist (902 ). - Fertigungsgegenstand nach Anspruch 13, ferner computerlesbaren Code umfassend, welcher konfiguriert ist, um zu bewirken, dass einer der mehreren Prozessoren den Thread in der globalen Warteschlange platziert, wenn der Thread eine Echtzeiteigenschaft aufweist.
- Fertigungsgegenstand nach Anspruch 18 ferner umfassend: computerlesbaren Code, welcher konfiguriert ist, um zu bewirken, dass einer der mehreren Prozessoren einen letzten Prozessor identifiziert, auf welchem der Thread gelaufen ist (
901 ); computerlesbaren Code, welcher konfiguriert ist, um zu bewirken, dass einer der mehreren Prozessoren den Thread in der Taskzuweisungswarteschlange des letzten Prozessors platziert, wenn der Thread keine Echtzeiteigenschaft aufweist (906 ). - Fertigungsgegenstand nach Anspruch 13, der Schritt des Benachrichtigen von Prozessoren über den Kandidaten-Thread umfassend: computerlesbaren Code, welcher konfiguriert ist, um zu bewirken, dass einer der mehreren Prozessoren einen Speicherregisterwert verändert, wobei das Register durch die mehreren Prozessoren zugänglich ist.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US643543 | 1996-05-06 | ||
US08/643,543 US5826081A (en) | 1996-05-06 | 1996-05-06 | Real time thread dispatcher for multiprocessor applications |
Publications (2)
Publication Number | Publication Date |
---|---|
DE69729822D1 DE69729822D1 (de) | 2004-08-19 |
DE69729822T2 true DE69729822T2 (de) | 2004-12-02 |
Family
ID=24581254
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
DE69729822T Expired - Fee Related DE69729822T2 (de) | 1996-05-06 | 1997-05-01 | Echtzeit-Taskzuweiser |
Country Status (4)
Country | Link |
---|---|
US (2) | US5826081A (de) |
EP (1) | EP0806730B1 (de) |
JP (1) | JPH1055284A (de) |
DE (1) | DE69729822T2 (de) |
Families Citing this family (214)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7301541B2 (en) | 1995-08-16 | 2007-11-27 | Microunity Systems Engineering, Inc. | Programmable processor and method with wide operations |
US5826081A (en) * | 1996-05-06 | 1998-10-20 | Sun Microsystems, Inc. | Real time thread dispatcher for multiprocessor applications |
US6438573B1 (en) * | 1996-10-09 | 2002-08-20 | Iowa State University Research Foundation, Inc. | Real-time programming method |
US6324562B1 (en) * | 1997-03-07 | 2001-11-27 | Fujitsu Limited | Information processing apparatus, multitask control method, and program recording medium |
US6829764B1 (en) * | 1997-06-23 | 2004-12-07 | International Business Machines Corporation | System and method for maximizing usage of computer resources in scheduling of application tasks |
US6212544B1 (en) * | 1997-10-23 | 2001-04-03 | International Business Machines Corporation | Altering thread priorities in a multithreaded processor |
US6076157A (en) * | 1997-10-23 | 2000-06-13 | International Business Machines Corporation | Method and apparatus to force a thread switch in a multithreaded processor |
US6567839B1 (en) | 1997-10-23 | 2003-05-20 | International Business Machines Corporation | Thread switch control in a multithreaded processor system |
US6697935B1 (en) | 1997-10-23 | 2004-02-24 | International Business Machines Corporation | Method and apparatus for selecting thread switch events in a multithreaded processor |
GB2334116A (en) * | 1998-02-04 | 1999-08-11 | Ibm | Scheduling and dispatching queued client requests within a server computer |
JP3937371B2 (ja) * | 1998-05-08 | 2007-06-27 | 富士通株式会社 | 競合制御方法及び競合制御システム |
US6427161B1 (en) * | 1998-06-12 | 2002-07-30 | International Business Machines Corporation | Thread scheduling techniques for multithreaded servers |
US6243788B1 (en) * | 1998-06-17 | 2001-06-05 | International Business Machines Corporation | Cache architecture to enable accurate cache sensitivity |
US6434589B1 (en) * | 1998-06-19 | 2002-08-13 | Tellabs Operations, Inc. | Telecommunications job scheduling |
ATE467171T1 (de) | 1998-08-24 | 2010-05-15 | Microunity Systems Eng | System mit breiter operandenarchitektur und verfahren |
US7932911B2 (en) * | 1998-08-24 | 2011-04-26 | Microunity Systems Engineering, Inc. | Processor for executing switch and translate instructions requiring wide operands |
US6289369B1 (en) * | 1998-08-25 | 2001-09-11 | International Business Machines Corporation | Affinity, locality, and load balancing in scheduling user program-level threads for execution by a computer system |
US7526767B1 (en) * | 1998-08-28 | 2009-04-28 | Oracle International Corporation | Methods for automatic group switching according to a resource plan |
US7020878B1 (en) * | 1998-08-28 | 2006-03-28 | Oracle International Corporation | System for allocating resource using the weight that represents a limitation on number of allowance active sessions associated with each resource consumer group |
US7451448B1 (en) | 1998-08-28 | 2008-11-11 | Oracle International Corporation | Methods for selectively quiescing a computer system |
JP3788697B2 (ja) * | 1998-11-18 | 2006-06-21 | 富士通株式会社 | メッセージ制御装置 |
US6910210B1 (en) * | 1998-11-24 | 2005-06-21 | Microsoft Corp. | System and method for terminating applications |
US7020879B1 (en) | 1998-12-16 | 2006-03-28 | Mips Technologies, Inc. | Interrupt and exception handling for multi-streaming digital processors |
US7529907B2 (en) | 1998-12-16 | 2009-05-05 | Mips Technologies, Inc. | Method and apparatus for improved computer load and store operations |
US7257814B1 (en) | 1998-12-16 | 2007-08-14 | Mips Technologies, Inc. | Method and apparatus for implementing atomicity of memory operations in dynamic multi-streaming processors |
US6389449B1 (en) | 1998-12-16 | 2002-05-14 | Clearwater Networks, Inc. | Interstream control and communications for multi-streaming digital processors |
US6477562B2 (en) * | 1998-12-16 | 2002-11-05 | Clearwater Networks, Inc. | Prioritized instruction scheduling for multi-streaming processors |
US7035997B1 (en) | 1998-12-16 | 2006-04-25 | Mips Technologies, Inc. | Methods and apparatus for improving fetching and dispatch of instructions in multithreaded processors |
US7237093B1 (en) | 1998-12-16 | 2007-06-26 | Mips Technologies, Inc. | Instruction fetching system in a multithreaded processor utilizing cache miss predictions to fetch instructions from multiple hardware streams |
US6338078B1 (en) * | 1998-12-17 | 2002-01-08 | International Business Machines Corporation | System and method for sequencing packets for multiprocessor parallelization in a computer network system |
US6173442B1 (en) * | 1999-02-05 | 2001-01-09 | Sun Microsystems, Inc. | Busy-wait-free synchronization |
JP4072271B2 (ja) * | 1999-02-19 | 2008-04-09 | 株式会社日立製作所 | 複数のオペレーティングシステムを実行する計算機 |
JP3382176B2 (ja) * | 1999-03-26 | 2003-03-04 | 株式会社東芝 | 要求処理方法および要求処理装置 |
US6874144B1 (en) * | 1999-04-05 | 2005-03-29 | International Business Machines Corporation | System, method, and program for implementing priority inheritance in an operating system |
US20030177182A1 (en) * | 1999-06-14 | 2003-09-18 | International Business Machines Corporation | Ensuring a given transactional unit of work arrives at an appropriate server instance |
US6665699B1 (en) * | 1999-09-23 | 2003-12-16 | Bull Hn Information Systems Inc. | Method and data processing system providing processor affinity dispatching |
US7418506B1 (en) * | 1999-11-12 | 2008-08-26 | International Business Machines Corporation | Apparatus for connection management and the method therefor |
US7518993B1 (en) * | 1999-11-19 | 2009-04-14 | The United States Of America As Represented By The Secretary Of The Navy | Prioritizing resource utilization in multi-thread computing system |
US7130806B1 (en) * | 1999-11-24 | 2006-10-31 | International Business Machines Corporation | Resource unit allocation |
US6658449B1 (en) * | 2000-02-17 | 2003-12-02 | International Business Machines Corporation | Apparatus and method for periodic load balancing in a multiple run queue system |
US6748593B1 (en) * | 2000-02-17 | 2004-06-08 | International Business Machines Corporation | Apparatus and method for starvation load balancing using a global run queue in a multiple run queue system |
US7093109B1 (en) * | 2000-04-04 | 2006-08-15 | International Business Machines Corporation | Network processor which makes thread execution control decisions based on latency event lengths |
US6799208B1 (en) * | 2000-05-02 | 2004-09-28 | Microsoft Corporation | Resource manager architecture |
US7284244B1 (en) | 2000-05-02 | 2007-10-16 | Microsoft Corporation | Resource manager architecture with dynamic resource allocation among multiple configurations |
US7058947B1 (en) | 2000-05-02 | 2006-06-06 | Microsoft Corporation | Resource manager architecture utilizing a policy manager |
US7137119B1 (en) * | 2000-05-02 | 2006-11-14 | Microsoft Corporation | Resource manager architecture with resource allocation utilizing priority-based preemption |
US7111297B1 (en) | 2000-05-02 | 2006-09-19 | Microsoft Corporation | Methods and architectures for resource management |
US7565651B1 (en) * | 2000-05-25 | 2009-07-21 | Oracle International Corporation | Parallel task scheduling system for computers |
US6981260B2 (en) * | 2000-05-25 | 2005-12-27 | International Business Machines Corporation | Apparatus for minimizing lock contention in a multiple processor system with multiple run queues when determining the threads priorities |
US7849463B2 (en) | 2000-06-02 | 2010-12-07 | Microsoft Corporation | Dynamically variable idle time thread scheduling |
US7137117B2 (en) * | 2000-06-02 | 2006-11-14 | Microsoft Corporation | Dynamically variable idle time thread scheduling |
US7140018B1 (en) * | 2000-06-20 | 2006-11-21 | International Business Machines Corporation | Method of using a distinct flow of computational control as a reusable abstract data object |
US6735769B1 (en) * | 2000-07-13 | 2004-05-11 | International Business Machines Corporation | Apparatus and method for initial load balancing in a multiple run queue system |
EP1311947B1 (de) | 2000-07-14 | 2011-01-19 | MIPS Technologies, Inc. | Anweisungsabruf und -absendung in einem multi-thread-system |
WO2002008892A1 (en) | 2000-07-24 | 2002-01-31 | Morphics Technology, Inc. | Distributed micro instruction set processor architecture for high-efficiency signal processing |
US6782410B1 (en) * | 2000-08-28 | 2004-08-24 | Ncr Corporation | Method for managing user and server applications in a multiprocessor computer system |
US7065763B1 (en) * | 2000-09-29 | 2006-06-20 | Emc Corporation | Method of reducing contention of a highly contended lock protecting multiple data items |
US6735760B1 (en) | 2000-11-08 | 2004-05-11 | Sun Microsystems, Inc. | Relaxed lock protocol |
US7080375B2 (en) * | 2000-12-30 | 2006-07-18 | Emc Corporation/Data General | Parallel dispatch wait signaling method, method for reducing contention of highly contended dispatcher lock, and related operating systems, multiprocessor computer systems and products |
US6834385B2 (en) | 2001-01-04 | 2004-12-21 | International Business Machines Corporation | System and method for utilizing dispatch queues in a multiprocessor data processing system |
US20020099759A1 (en) * | 2001-01-24 | 2002-07-25 | Gootherts Paul David | Load balancer with starvation avoidance |
US7694302B1 (en) * | 2001-04-05 | 2010-04-06 | Network Appliance, Inc. | Symmetric multiprocessor synchronization using migrating scheduling domains |
US7178137B1 (en) | 2001-04-05 | 2007-02-13 | Network Appliance, Inc. | Automatic verification of scheduling domain consistency |
US20020184290A1 (en) * | 2001-05-31 | 2002-12-05 | International Business Machines Corporation | Run queue optimization with hardware multithreading for affinity |
US7043758B2 (en) | 2001-06-15 | 2006-05-09 | Mcafee, Inc. | Scanning computer files for specified content |
US7178145B2 (en) * | 2001-06-29 | 2007-02-13 | Emc Corporation | Queues for soft affinity code threads and hard affinity code threads for allocation of processors to execute the threads in a multi-processor system |
JP3975703B2 (ja) * | 2001-08-16 | 2007-09-12 | 日本電気株式会社 | 情報処理システムにおける優先実行制御方法及びその装置並びにプログラム |
US20030061260A1 (en) * | 2001-09-25 | 2003-03-27 | Timesys Corporation | Resource reservation and priority management |
JP2006515690A (ja) * | 2001-12-14 | 2006-06-01 | コーニンクレッカ フィリップス エレクトロニクス エヌ ヴィ | 複数のプロセッサを有するデータ処理システムと、複数のプロセッサを有するデータ処理システムのためのタスクスケジューラと、タスクスケジューリングの対応する方法 |
EP1459177A2 (de) * | 2001-12-14 | 2004-09-22 | Koninklijke Philips Electronics N.V. | Verfahren zur datenverarbeitung mit mehreren prozessoren |
US7996507B2 (en) * | 2002-01-16 | 2011-08-09 | International Business Machines Corporation | Intelligent system control agent for managing jobs on a network by managing a plurality of queues on a client |
US7143411B2 (en) * | 2002-03-15 | 2006-11-28 | Hewlett-Packard Development Company, L.P. | Capping processor utilization |
US7171479B2 (en) * | 2002-04-26 | 2007-01-30 | International Business Machines Corporation | Efficient delivery of boot code images from a network server |
US8041796B2 (en) * | 2002-05-02 | 2011-10-18 | Hewlett-Packard Development Company, L.P. | Process duration control |
US7310314B1 (en) * | 2002-06-10 | 2007-12-18 | Juniper Networks, Inc. | Managing periodic communications |
US7594233B2 (en) * | 2002-06-28 | 2009-09-22 | Hewlett-Packard Development Company, L.P. | Processing thread launching using volunteer information |
US7065766B2 (en) * | 2002-07-11 | 2006-06-20 | International Business Machines Corporation | Apparatus and method for load balancing of fixed priority threads in a multiple run queue environment |
JP3864250B2 (ja) * | 2002-10-31 | 2006-12-27 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 排他制御装置、排他制御方法、プログラム、及び記録媒体 |
US7028218B2 (en) | 2002-12-02 | 2006-04-11 | Emc Corporation | Redundant multi-processor and logical processor configuration for a file server |
US20040107240A1 (en) * | 2002-12-02 | 2004-06-03 | Globespan Virata Incorporated | Method and system for intertask messaging between multiple processors |
AU2003300948A1 (en) | 2002-12-16 | 2004-07-22 | Globespanvirata Incorporated | System and method for scheduling thread execution |
AU2002360776A1 (en) * | 2002-12-27 | 2004-07-22 | Unisys Corporation | Streamlining cpu utilisation by delaying transactions |
US20060123421A1 (en) * | 2002-12-27 | 2006-06-08 | Loboz Charles Z | Streamlining cpu utilization by delaying transactions |
US8180943B1 (en) * | 2003-03-27 | 2012-05-15 | Nvidia Corporation | Method and apparatus for latency based thread scheduling |
WO2004088664A2 (en) * | 2003-04-04 | 2004-10-14 | Bbc Technology Holdings Limited | System and method for media management |
US8539089B2 (en) * | 2003-04-23 | 2013-09-17 | Oracle America, Inc. | System and method for vertical perimeter protection |
US7278141B2 (en) * | 2003-04-23 | 2007-10-02 | International Business Machines Corporation | System and method for adding priority change value corresponding with a lock to a thread during lock processing |
JP3889726B2 (ja) * | 2003-06-27 | 2007-03-07 | 株式会社東芝 | スケジューリング方法および情報処理システム |
JP4028444B2 (ja) | 2003-06-27 | 2007-12-26 | 株式会社東芝 | スケジューリング方法およびリアルタイム処理システム |
US7548989B2 (en) * | 2003-07-01 | 2009-06-16 | International Business Machines Corporation | Method and system for maintaining consistency during multi-threaded processing of LDIF data |
US7373640B1 (en) | 2003-07-31 | 2008-05-13 | Network Appliance, Inc. | Technique for dynamically restricting thread concurrency without rewriting thread code |
US7318128B1 (en) * | 2003-08-01 | 2008-01-08 | Sun Microsystems, Inc. | Methods and apparatus for selecting processes for execution |
US7263685B2 (en) * | 2003-09-12 | 2007-08-28 | Intel Corporation | Synchronizing use of a device by multiple software components in accordance with information stored at the device |
US8117624B2 (en) * | 2003-09-16 | 2012-02-14 | Matrox Electronic Systems Ltd. | Method and apparatus for performing real-time commands in a non real-time operating system environment |
US7478390B2 (en) * | 2003-09-25 | 2009-01-13 | International Business Machines Corporation | Task queue management of virtual devices using a plurality of processors |
US7549145B2 (en) * | 2003-09-25 | 2009-06-16 | International Business Machines Corporation | Processor dedicated code handling in a multi-processor environment |
US7496917B2 (en) * | 2003-09-25 | 2009-02-24 | International Business Machines Corporation | Virtual devices using a pluarlity of processors |
US7137033B2 (en) * | 2003-11-20 | 2006-11-14 | International Business Machines Corporation | Method, system, and program for synchronizing subtasks using sequence numbers |
US20050132239A1 (en) * | 2003-12-16 | 2005-06-16 | Athas William C. | Almost-symmetric multiprocessor that supports high-performance and energy-efficient execution |
US8171480B2 (en) * | 2004-01-27 | 2012-05-01 | Network Appliance, Inc. | Method and apparatus for allocating shared resources to process domains according to current processor utilization in a shared resource processor |
US7614053B2 (en) * | 2004-02-20 | 2009-11-03 | Sony Computer Entertainment Inc. | Methods and apparatus for task management in a multi-processor system |
US7565653B2 (en) * | 2004-02-20 | 2009-07-21 | Sony Computer Entertainment Inc. | Methods and apparatus for processor task migration in a multi-processor system |
US8028292B2 (en) * | 2004-02-20 | 2011-09-27 | Sony Computer Entertainment Inc. | Processor task migration over a network in a multi-processor system |
DE102004009610B4 (de) * | 2004-02-27 | 2007-08-16 | Infineon Technologies Ag | Heterogener paralleler Multithread-Prozessor (HPMT) mit geteilten Kontexten |
US20050210472A1 (en) * | 2004-03-18 | 2005-09-22 | International Business Machines Corporation | Method and data processing system for per-chip thread queuing in a multi-processor system |
US7162666B2 (en) * | 2004-03-26 | 2007-01-09 | Emc Corporation | Multi-processor system having a watchdog for interrupting the multiple processors and deferring preemption until release of spinlocks |
US8533716B2 (en) | 2004-03-31 | 2013-09-10 | Synopsys, Inc. | Resource management in a multicore architecture |
GB2453284A (en) * | 2004-04-02 | 2009-04-01 | Symbian Software Ltd | Mechanism for notifying a kernel of a thread entering a critical section. |
US20060075404A1 (en) * | 2004-10-06 | 2006-04-06 | Daniela Rosu | Method and system for scheduling user-level I/O threads |
US7634773B2 (en) * | 2004-11-24 | 2009-12-15 | Hewlett-Packard Development Company, L.P. | Method and apparatus for thread scheduling on multiple processors |
US7844973B1 (en) * | 2004-12-09 | 2010-11-30 | Oracle America, Inc. | Methods and apparatus providing non-blocking access to a resource |
JP2006243865A (ja) * | 2005-03-01 | 2006-09-14 | Seiko Epson Corp | プロセッサおよび情報処理方法 |
US8789021B2 (en) * | 2005-06-30 | 2014-07-22 | International Business Machines Corporation | Method and apparatus for object-oriented load testing of computing systems |
US7522168B2 (en) | 2005-09-27 | 2009-04-21 | Sony Computer Entertainment Inc. | Cell processor task and data management |
US8037474B2 (en) * | 2005-09-27 | 2011-10-11 | Sony Computer Entertainment Inc. | Task manager with stored task definition having pointer to a memory address containing required code data related to the task for execution |
US20070055852A1 (en) * | 2005-09-06 | 2007-03-08 | Alcatel | Processing operation management systems and methods |
US7895596B2 (en) * | 2005-09-13 | 2011-02-22 | Hewlett-Packard Development Company, L.P. | Processor assignment in multi-processor systems |
US20070061805A1 (en) * | 2005-09-15 | 2007-03-15 | Brenner Larry B | Method and apparatus for improving thread posting efficiency in a multiprocessor data processing system |
US7975269B2 (en) * | 2005-09-27 | 2011-07-05 | Sony Computer Entertainment Inc. | Parallel processor methods and apparatus |
US8316220B2 (en) | 2005-09-27 | 2012-11-20 | Sony Computer Entertainment Inc. | Operating processors over a network |
US7734827B2 (en) * | 2005-09-27 | 2010-06-08 | Sony Computer Entertainment, Inc. | Operation of cell processors |
US7506123B1 (en) | 2005-09-27 | 2009-03-17 | Sony Computer Entertainment Inc. | Method and system for performing memory copy function on a cell processor |
US8141076B2 (en) * | 2005-09-27 | 2012-03-20 | Sony Computer Entertainment Inc. | Cell processor methods and apparatus |
US7810094B1 (en) * | 2005-09-30 | 2010-10-05 | Emc Corporation | Distributed task scheduling for symmetric multiprocessing environments |
US7631125B2 (en) * | 2005-09-30 | 2009-12-08 | Intel Corporation | Dynamically migrating channels |
GB0519981D0 (en) | 2005-09-30 | 2005-11-09 | Ignios Ltd | Scheduling in a multicore architecture |
US20070091088A1 (en) * | 2005-10-14 | 2007-04-26 | Via Technologies, Inc. | System and method for managing the computation of graphics shading operations |
US8144149B2 (en) * | 2005-10-14 | 2012-03-27 | Via Technologies, Inc. | System and method for dynamically load balancing multiple shader stages in a shared pool of processing units |
US8347293B2 (en) * | 2005-10-20 | 2013-01-01 | Network Appliance, Inc. | Mutual exclusion domains to perform file system processes on stripes |
JP2007156976A (ja) * | 2005-12-07 | 2007-06-21 | Hitachi Kokusai Electric Inc | 情報処理システム |
US8429661B1 (en) * | 2005-12-14 | 2013-04-23 | Nvidia Corporation | Managing multi-threaded FIFO memory by determining whether issued credit count for dedicated class of threads is less than limit |
US8201172B1 (en) | 2005-12-14 | 2012-06-12 | Nvidia Corporation | Multi-threaded FIFO memory with speculative read and write capability |
US20070143761A1 (en) * | 2005-12-15 | 2007-06-21 | Yong Deng | Task scheduler system and method for managing tasks in an embedded system without a real time operating system |
TW200810523A (en) * | 2005-12-23 | 2008-02-16 | Nxp Bv | An AV renderer peripheral with dual interrupt lines for staggered interrupts |
US8595747B2 (en) | 2005-12-29 | 2013-11-26 | Sony Computer Entertainment Inc. | Efficient task scheduling by assigning fixed registers to scheduler |
JP2007188398A (ja) * | 2006-01-16 | 2007-07-26 | Seiko Epson Corp | マルチプロセッサシステム、マルチプロセッサシステムの制御方法をコンピュータに実行させるためのプログラム。 |
US7920282B2 (en) * | 2006-02-23 | 2011-04-05 | International Business Machines Corporation | Job preempt set generation for resource management |
US7756911B2 (en) * | 2006-06-09 | 2010-07-13 | International Business Machines Corporation | Method and system for executing a task and medium storing a program therefor |
US7720061B1 (en) | 2006-08-18 | 2010-05-18 | Juniper Networks, Inc. | Distributed solution for managing periodic communications in a multi-chassis routing system |
US8533710B1 (en) * | 2006-08-31 | 2013-09-10 | Oracle America, Inc. | Using observed thread activity to dynamically tune a virtual machine for responsiveness |
GB2443507A (en) * | 2006-10-24 | 2008-05-07 | Advanced Risc Mach Ltd | Debugging parallel programs |
US7751604B2 (en) * | 2006-11-30 | 2010-07-06 | Fujifilm Corporation | Medical intelligent server architecture |
US20080133271A1 (en) * | 2006-11-30 | 2008-06-05 | Fujifilm Corporation | Job dispatcher for medical intelligent server architecture |
US20080148280A1 (en) * | 2006-12-13 | 2008-06-19 | Stillwell Joseph W | Apparatus, system, and method for autonomically managing multiple queues |
US7853950B2 (en) * | 2007-04-05 | 2010-12-14 | International Business Machines Corporarion | Executing multiple threads in a processor |
US10452820B2 (en) * | 2007-06-26 | 2019-10-22 | International Business Machines Corporation | Thread-based software license management |
US8432565B2 (en) * | 2007-07-11 | 2013-04-30 | Xerox Corporation | Job distribution among networked resources in a document processing environment |
US8544014B2 (en) * | 2007-07-24 | 2013-09-24 | Microsoft Corporation | Scheduling threads in multi-core systems |
US8327363B2 (en) * | 2007-07-24 | 2012-12-04 | Microsoft Corporation | Application compatibility in multi-core systems |
US8381215B2 (en) * | 2007-09-27 | 2013-02-19 | Oracle America, Inc. | Method and system for power-management aware dispatcher |
US20090165003A1 (en) * | 2007-12-21 | 2009-06-25 | Van Jacobson | System and method for allocating communications to processors and rescheduling processes in a multiprocessor system |
US20090189896A1 (en) * | 2008-01-25 | 2009-07-30 | Via Technologies, Inc. | Graphics Processor having Unified Shader Unit |
US8286139B2 (en) * | 2008-03-19 | 2012-10-09 | International Businesss Machines Corporation | Call stack sampling for threads having latencies exceeding a threshold |
US7890298B2 (en) * | 2008-06-12 | 2011-02-15 | Oracle America, Inc. | Managing the performance of a computer system |
US9038087B2 (en) * | 2008-06-18 | 2015-05-19 | Microsoft Technology Licensing, Llc | Fence elision for work stealing |
US8701111B2 (en) * | 2008-07-09 | 2014-04-15 | International Business Machines Corporation | Lock windows for reducing contention |
US20100153957A1 (en) * | 2008-12-16 | 2010-06-17 | Sensormatic Electronics Corporation | System and method for managing thread use in a thread pool |
US20100153974A1 (en) * | 2008-12-16 | 2010-06-17 | International Business Machines Corporation | Obtain buffers for an input/output driver |
US9213586B2 (en) * | 2009-03-18 | 2015-12-15 | Sas Institute Inc. | Computer-implemented systems for resource level locking without resource level locks |
US8413153B2 (en) * | 2009-06-12 | 2013-04-02 | Freescale Semiconductor Inc. | Methods and systems for sharing common job information |
US8683476B2 (en) * | 2009-06-30 | 2014-03-25 | Oracle America, Inc. | Method and system for event-based management of hardware resources using a power state of the hardware resources |
US8572617B2 (en) | 2009-07-21 | 2013-10-29 | Sas Institute Inc. | Processor-implemented systems and methods for event handling |
US8245234B2 (en) | 2009-08-10 | 2012-08-14 | Avaya Inc. | Credit scheduler for ordering the execution of tasks |
US8352946B2 (en) * | 2009-08-11 | 2013-01-08 | International Business Machines Corporation | Managing migration ready queue associated with each processor based on the migration ready status of the tasks |
US8832712B2 (en) * | 2009-09-09 | 2014-09-09 | Ati Technologies Ulc | System and method for synchronizing threads using shared memory having different buffer portions for local and remote cores in a multi-processor system |
US8572622B2 (en) * | 2009-12-30 | 2013-10-29 | International Business Machines Corporation | Reducing queue synchronization of multiple work items in a system with high memory latency between processing nodes |
KR101658035B1 (ko) * | 2010-03-12 | 2016-10-04 | 삼성전자주식회사 | 가상 머신 모니터 및 가상 머신 모니터의 스케줄링 방법 |
US8904399B2 (en) * | 2010-03-15 | 2014-12-02 | Qualcomm Incorporated | System and method of executing threads at a processor |
JP5376042B2 (ja) * | 2010-03-18 | 2013-12-25 | 富士通株式会社 | マルチコアプロセッサシステム、スレッド切り替え制御方法、およびスレッド切り替え制御プログラム |
US8627331B1 (en) | 2010-04-30 | 2014-01-07 | Netapp, Inc. | Multi-level parallelism of process execution in a mutual exclusion domain of a processing system |
US9141422B2 (en) | 2010-05-18 | 2015-09-22 | Microsoft Technology Licensing, Llc | Plug-in task scheduler |
US20120066683A1 (en) * | 2010-09-09 | 2012-03-15 | Srinath Nadig S | Balanced thread creation and task allocation |
US8924981B1 (en) * | 2010-11-12 | 2014-12-30 | Teradat US, Inc. | Calculating priority indicators for requests in a queue |
US9317329B2 (en) | 2010-11-15 | 2016-04-19 | Qualcomm Incorporated | Arbitrating resource acquisition for applications of a multi-processor mobile communications device |
KR101703328B1 (ko) * | 2010-11-23 | 2017-02-07 | 삼성전자 주식회사 | 이종 멀티 프로세서 환경에서의 데이터 처리 최적화 장치 및 방법 |
US9645854B2 (en) * | 2010-12-15 | 2017-05-09 | Advanced Micro Devices, Inc. | Dynamic work partitioning on heterogeneous processing devices |
US20120260080A1 (en) * | 2011-04-08 | 2012-10-11 | Nokia Corporation | Method and Apparatus for Preprocessing Operations During a Boot Process |
US9317341B2 (en) * | 2011-05-24 | 2016-04-19 | Microsoft Technology Licensing, Llc. | Dynamic attribute resolution for orchestrated management |
US8683473B2 (en) * | 2011-05-27 | 2014-03-25 | International Business Machines Corporation | Dynamic task association between independent, unrelated projects |
US8935699B1 (en) * | 2011-10-28 | 2015-01-13 | Amazon Technologies, Inc. | CPU sharing techniques |
US9104485B1 (en) | 2011-10-28 | 2015-08-11 | Amazon Technologies, Inc. | CPU sharing techniques |
US8650538B2 (en) | 2012-05-01 | 2014-02-11 | Concurix Corporation | Meta garbage collection for functional code |
US8726255B2 (en) | 2012-05-01 | 2014-05-13 | Concurix Corporation | Recompiling with generic to specific replacement |
US9104478B2 (en) | 2012-06-15 | 2015-08-11 | Freescale Semiconductor, Inc. | System and method for improved job processing of a number of jobs belonging to communication streams within a data processor |
US8793669B2 (en) | 2012-07-17 | 2014-07-29 | Concurix Corporation | Pattern extraction from executable code in message passing environments |
US9575813B2 (en) | 2012-07-17 | 2017-02-21 | Microsoft Technology Licensing, Llc | Pattern matching process scheduler with upstream optimization |
US9258234B1 (en) | 2012-12-28 | 2016-02-09 | Juniper Networks, Inc. | Dynamically adjusting liveliness detection intervals for periodic network communications |
US9185170B1 (en) | 2012-12-31 | 2015-11-10 | Juniper Networks, Inc. | Connectivity protocol delegation |
US9086925B2 (en) * | 2013-01-18 | 2015-07-21 | Nec Laboratories America, Inc. | Methods of processing core selection for applications on manycore processors |
US9632977B2 (en) | 2013-03-13 | 2017-04-25 | Nxp Usa, Inc. | System and method for ordering packet transfers in a data processor |
JP5859472B2 (ja) * | 2013-03-26 | 2016-02-10 | 株式会社日立製作所 | プロセスの待ち行列を共有する複数のプロセッサを有する計算機、及び、プロセスディスパッチ処理方法 |
US9569260B2 (en) | 2013-05-31 | 2017-02-14 | Microsoft Technology Licensing, Llc | Efficient priority-aware thread scheduling |
US9715406B2 (en) * | 2013-06-14 | 2017-07-25 | Microsoft Technology Licensing, Llc | Assigning and scheduling threads for multiple prioritized queues |
US9378069B2 (en) * | 2014-03-05 | 2016-06-28 | International Business Machines Corporation | Lock spin wait operation for multi-threaded applications in a multi-core computing environment |
US9626218B1 (en) * | 2014-03-10 | 2017-04-18 | Altera Corporation | Repartitioning and reordering of multiple threads into subsets based on possible access conflict, for sequential access to groups of memory banks in a shared memory |
US9785565B2 (en) | 2014-06-30 | 2017-10-10 | Microunity Systems Engineering, Inc. | System and methods for expandably wide processor instructions |
US9769017B1 (en) | 2014-09-26 | 2017-09-19 | Juniper Networks, Inc. | Impending control plane disruption indication using forwarding plane liveliness detection protocols |
US9348644B2 (en) * | 2014-10-08 | 2016-05-24 | International Business Machines Corporation | Application-level dispatcher control of application-level pseudo threads and operating system threads |
US9342384B1 (en) | 2014-12-18 | 2016-05-17 | Intel Corporation | Function callback mechanism between a central processing unit (CPU) and an auxiliary processor |
US10248463B2 (en) * | 2015-02-13 | 2019-04-02 | Honeywell International Inc. | Apparatus and method for managing a plurality of threads in an operating system |
WO2017066966A1 (en) * | 2015-10-22 | 2017-04-27 | Oracle International Corporation | System and method for providing mssq notifications in transactional processing environment |
US10374936B2 (en) | 2015-12-30 | 2019-08-06 | Juniper Networks, Inc. | Reducing false alarms when using network keep-alive messages |
US10397085B1 (en) | 2016-06-30 | 2019-08-27 | Juniper Networks, Inc. | Offloading heartbeat responses message processing to a kernel of a network device |
US10552211B2 (en) | 2016-09-02 | 2020-02-04 | Intel Corporation | Mechanism to increase thread parallelism in a graphics processor |
US10069949B2 (en) | 2016-10-14 | 2018-09-04 | Honeywell International Inc. | System and method for enabling detection of messages having previously transited network devices in support of loop detection |
US10572400B2 (en) | 2017-06-15 | 2020-02-25 | Mellanox Technologies, Ltd. | Shared processing of a packet flow by multiple cores |
US10810086B2 (en) | 2017-10-19 | 2020-10-20 | Honeywell International Inc. | System and method for emulation of enhanced application module redundancy (EAM-R) |
US10705849B2 (en) * | 2018-02-05 | 2020-07-07 | The Regents Of The University Of Michigan | Mode-selectable processor for execution of a single thread in a first mode and plural borrowed threads in a second mode |
US10783026B2 (en) | 2018-02-15 | 2020-09-22 | Honeywell International Inc. | Apparatus and method for detecting network problems on redundant token bus control network using traffic sensor |
CN108762896B (zh) * | 2018-03-26 | 2022-04-12 | 福建星瑞格软件有限公司 | 一种基于Hadoop集群任务调度方法及计算机设备 |
DE112019003039T5 (de) * | 2018-06-15 | 2021-04-01 | Elemental Scientific, Inc. | System zur priorisierung der sammlung und analyse von flüssigkeitsproben |
US11750441B1 (en) | 2018-09-07 | 2023-09-05 | Juniper Networks, Inc. | Propagating node failure errors to TCP sockets |
CN113406696B (zh) * | 2021-06-01 | 2023-04-07 | 成都高新减灾研究所 | 实现移动设备地震监测的方法及设备 |
CN115617497B (zh) * | 2022-12-14 | 2023-03-31 | 阿里巴巴达摩院(杭州)科技有限公司 | 线程处理方法、调度组件、监测组件、服务器和存储介质 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5185861A (en) * | 1991-08-19 | 1993-02-09 | Sequent Computer Systems, Inc. | Cache affinity scheduler |
GB2284081B (en) * | 1991-08-19 | 1995-10-04 | Sequent Computer Systems Inc | Computing system |
US5515538A (en) * | 1992-05-29 | 1996-05-07 | Sun Microsystems, Inc. | Apparatus and method for interrupt handling in a multi-threaded operating system kernel |
US5379428A (en) * | 1993-02-01 | 1995-01-03 | Belobox Systems, Inc. | Hardware process scheduler and processor interrupter for parallel processing computer systems |
US5692193A (en) * | 1994-03-31 | 1997-11-25 | Nec Research Institute, Inc. | Software architecture for control of highly parallel computer systems |
US6006247A (en) * | 1995-03-21 | 1999-12-21 | International Business Machines Corporation | Method and system for scheduling threads and handling exceptions within a multiprocessor data processing system |
US6728959B1 (en) * | 1995-08-08 | 2004-04-27 | Novell, Inc. | Method and apparatus for strong affinity multiprocessor scheduling |
US5826081A (en) * | 1996-05-06 | 1998-10-20 | Sun Microsystems, Inc. | Real time thread dispatcher for multiprocessor applications |
-
1996
- 1996-05-06 US US08/643,543 patent/US5826081A/en not_active Expired - Lifetime
-
1997
- 1997-05-01 DE DE69729822T patent/DE69729822T2/de not_active Expired - Fee Related
- 1997-05-01 EP EP97303012A patent/EP0806730B1/de not_active Expired - Lifetime
- 1997-05-06 JP JP9130550A patent/JPH1055284A/ja active Pending
-
1998
- 1998-10-17 US US09/174,111 patent/US6779182B1/en not_active Expired - Lifetime
Also Published As
Publication number | Publication date |
---|---|
US6779182B1 (en) | 2004-08-17 |
DE69729822D1 (de) | 2004-08-19 |
EP0806730A3 (de) | 1998-03-11 |
EP0806730B1 (de) | 2004-07-14 |
JPH1055284A (ja) | 1998-02-24 |
EP0806730A2 (de) | 1997-11-12 |
US5826081A (en) | 1998-10-20 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
DE69729822T2 (de) | Echtzeit-Taskzuweiser | |
DE102013217995B4 (de) | Verfahren und System zum Thread-Scheduling (Fadenzuteilung) | |
EP1831786B1 (de) | Verfahren zur verteilung von rechenzeit in einem rechnersystem | |
Havender | Avoiding deadlock in multitasking systems | |
DE10110504B4 (de) | Verfahren und Computersystem zur Verwaltung von Threads | |
Huang et al. | On Using Priority Inheritance In Real-Time Databases. | |
US6269391B1 (en) | Multi-processor scheduling kernel | |
DE60016283T2 (de) | Arbeitsbelastungsverwaltung in einer rechnerumgebung | |
US5745778A (en) | Apparatus and method for improved CPU affinity in a multiprocessor system | |
US5999963A (en) | Move-to-rear list scheduling | |
EP0969382A2 (de) | Verfahren für effiziente Verwaltung von nicht-virtuellem Hauptspeicher | |
DE69628798T2 (de) | Verfahren zur Übertragung von Multimediadaten | |
DE112012003961T5 (de) | Gleichzeitige Verarbeitung von eingereihten Nachrichten | |
DE2517171A1 (de) | Datenverarbeitungssystem mit erweitertem semaphor-aufbau | |
KR101638136B1 (ko) | 멀티 스레드 구조에서 작업 분배 시 스레드 간 락 경쟁을 최소화하는 방법 및 이를 사용한 장치 | |
DE2517297A1 (de) | Einrichtung zum feststellen eines zu einem zu verhindernden endgueltigen stillstand fuehrenden systemzustandes | |
JP2007529079A (ja) | 自己調節スレッド化モデルによるアプリケーションサーバのためのシステム及び方法 | |
DE4227345A1 (de) | Cachescheduler | |
EP0333123A2 (de) | Modular strukturiertes ISDN-Kommunikationssystem | |
US6751711B1 (en) | Methods and systems for process rollback in a shared memory parallel processor computing environment | |
DE10063915B4 (de) | Informationsverarbeitungsgerät, das eine Mehrzweckverarbeitung und Transaktionsverarbeitung ausführt | |
DE112004002368T5 (de) | Prozessor und Verfahren zur Unterstützung eines kompilierergerichteten Managements von Multi-Threading | |
CN1288565C (zh) | 跨越存储器边界的选择性存储器合并的方法与系统 | |
EP0499213A2 (de) | Modular strukturiertes ISDN-Kommunikationssystem | |
JP2692647B2 (ja) | マルチタスク制御方法および制御システム |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
8364 | No opposition during term of opposition | ||
8339 | Ceased/non-payment of the annual fee |